Example #1
0
    def test_basic_compliance_creation(self):
        p = Project(name='test project')
        p.save()
        c = Compliance(project=p)
        c.save()

        self.assertEqual(c.compliance_type, 'Benchmarking')
        #  test relation from compliance to project and vice versa
        self.assertEqual(c.project, p)
        self.assertTrue(p.compliance_set.exists())
        self.assertTrue(p.compliance_set.all()[0], c)
        # test repr or str
        self.assertEqual('Compliance Benchmarking for project Project test project', str(c))
        p.delete()
        c.delete()
Example #2
0
    def test_basic_compliance_creation(self):
        p = Project(name='test project')
        p.save()
        c = Compliance(project=p)
        c.save()

        self.assertEqual(c.compliance_type, 'Benchmarking')
        #  test relation from compliance to project and vice versa
        self.assertEqual(c.project, p)
        self.assertTrue(p.compliance_set.exists())
        self.assertTrue(p.compliance_set.all()[0], c)
        # test repr or str
        self.assertEqual('Compliance Benchmarking for project Project test project', str(c))
        p.delete()
        c.delete()
Example #3
0
    def partial_update(self, request, pk):
        """
        Updates a project. Allows partial update, i.e. only updated param s need be supplied.

        :PUT: Expects organization_id in query string.
        ---
        parameters:
            - name: organization_id
              description: ID of organization to associate new project with
              type: integer
              required: true
              paramType: query
            - name: project slug or pk
              description: The project slug identifier or primary key for this project
              required: true
              paramType: path
            - name: name
              description: name of the new project
              type: string
              required: false
            - name: is_compliance
              description: add compliance data if true
              type: bool
              required: false
            - name: compliance_type
              description: description of type of compliance
              type: string
              required: true if is_compliance else false
            - name: description
              description: description of new project
              type: string
              required: true if is_compliance else false
            - name: end_date
              description: Timestamp for when project ends
              type: string
              required: true if is_compliance else false
            - name: deadline_date
              description: Timestamp for compliance deadline
              type: string
              required: true if is_compliance else false
        Returns::
            {
                'status': 'success',
                'project': {
                        'id': project's primary key,
                        'name': project's name,
                        'slug': project's identifier,
                        'status': 'active',
                        'number_of_buildings': Count of buildings associated with project
                        'last_modified': Timestamp when project last changed
                        'last_modified_by': {
                            'first_name': first name of user that made last change,
                            'last_name': last name,
                            'email': email address,
                        },
                        'is_compliance': True if project is a compliance project,
                        'compliance_type': Description of compliance type,
                        'deadline_date': Timestamp of when compliance is due,
                        'end_date': Timestamp of end of project,
                        'property_count': number of property views associated with project,
                        'taxlot_count':  number of taxlot views associated with project,
                }
            }
        """
        error = None
        status_code = status.HTTP_200_OK
        project_data, _ = self.get_params(PROJECT_KEYS)
        project_data['last_modified_by'] = request.user
        if 'status' in project_data:
            # convert to int equivalent
            project_data['status'] = self.get_status(project_data['status'])
        is_compliance = project_data.pop('is_compliance', None)
        if is_compliance:
            compliance_data, _ = self.get_params(COMPLIANCE_KEYS)
            compliance_data = convert_dates(
                compliance_data, ['end_date', 'deadline_date']
            )
        key = self.get_key(pk)
        project = self.get_project(key, pk)
        if not project:
            error, status_code = self.get_error(
                'not found', key=key, val=pk
            )
        else:
            project = project[0]
            compliance = project.get_compliance()
            if is_compliance:
                if not compliance:
                    compliance = Compliance(project=project)
                compliance = update_model(
                    compliance, compliance_data
                )
            project = update_model(project, project_data)
            if is_compliance:
                compliance.save()
            # delete compliance if one exists
            elif is_compliance == 'False':
                compliance.delete()
            project.save()
        if error:
            result = {'status': 'error', 'message': error}
        else:
            result = {
                'status': 'success',
                'project': ProjectSerializer(project).data
            }
        return Response(result, status=status_code)
Example #4
0
    def partial_update(self, request, pk):
        """
        Updates a project. Allows partial update, i.e. only updated param s need be supplied.

        :PUT: Expects organization_id in query string.
        ---
        parameters:
            - name: organization_id
              description: ID of organization to associate new project with
              type: integer
              required: true
              paramType: query
            - name: project slug or pk
              description: The project slug identifier or primary key for this project
              required: true
              paramType: path
            - name: name
              description: name of the new project
              type: string
              required: false
            - name: is_compliance
              description: add compliance data if true
              type: bool
              required: false
            - name: compliance_type
              description: description of type of compliance
              type: string
              required: true if is_compliance else false
            - name: description
              description: description of new project
              type: string
              required: true if is_compliance else false
            - name: end_date
              description: Timestamp for when project ends
              type: string
              required: true if is_compliance else false
            - name: deadline_date
              description: Timestamp for compliance deadline
              type: string
              required: true if is_compliance else false
        Returns::
            {
                'status': 'success',
                'project': {
                        'id': project's primary key,
                        'name': project's name,
                        'slug': project's identifier,
                        'status': 'active',
                        'number_of_buildings': Count of buildings associated with project
                        'last_modified': Timestamp when project last changed
                        'last_modified_by': {
                            'first_name': first name of user that made last change,
                            'last_name': last name,
                            'email': email address,
                        },
                        'is_compliance': True if project is a compliance project,
                        'compliance_type': Description of compliance type,
                        'deadline_date': Timestamp of when compliance is due,
                        'end_date': Timestamp of end of project,
                        'property_count': number of property views associated with project,
                        'taxlot_count':  number of taxlot views associated with project,
                }
            }
        """
        error = None
        status_code = status.HTTP_200_OK
        project_data, _ = self.get_params(PROJECT_KEYS)
        project_data['last_modified_by'] = request.user
        if 'status' in project_data:
            # convert to int equivalent
            project_data['status'] = self.get_status(project_data['status'])
        is_compliance = project_data.pop('is_compliance', None)
        if is_compliance:
            compliance_data, _ = self.get_params(COMPLIANCE_KEYS)
            compliance_data = convert_dates(
                compliance_data, ['end_date', 'deadline_date']
            )
        key = self.get_key(pk)
        project = self.get_project(key, pk)
        if not project:
            error, status_code = self.get_error(
                'not found', key=key, val=pk
            )
        else:
            project = project[0]
            compliance = project.get_compliance()
            if is_compliance:
                if not compliance:
                    compliance = Compliance(project=project)
                compliance = update_model(
                    compliance, compliance_data
                )
            project = update_model(project, project_data)
            if is_compliance:
                compliance.save()
            # delete compliance if one exists
            elif is_compliance == 'False':
                compliance.delete()
            project.save()
        if error:
            result = {'status': 'error', 'message': error}
        else:
            result = {
                'status': 'success',
                'project': ProjectSerializer(project).data
            }
        return Response(result, status=status_code)