Exemplo n.º 1
0
    def put(self, mine_guid, permit_amendment_guid, permit_guid):
        permit_amendment = PermitAmendment.find_by_permit_amendment_guid(
            permit_amendment_guid)
        if not permit_amendment:
            raise NotFound('Permit amendment not found.')
        if not str(permit_amendment.permit_guid) == permit_guid:
            raise BadRequest('Amendment and permit permit_guid mismatch.')
        if not str(permit_amendment.mine_guid) == mine_guid:
            raise BadRequest(
                'Permits mine_guid and supplied mine_guid mismatch.')

        data = self.parser.parse_args()
        if data.get('document_manager_guid'):
            # Register and associate a new file upload
            filename = data.get('filename')
            if not filename:
                raise BadRequest('Must supply filename for new file upload.')

            new_pa_doc = PermitAmendmentDocument(
                mine_guid=permit_amendment.permit.mine_guid,
                document_manager_guid=data.get('document_manager_guid'),
                document_name=filename)

            permit_amendment.related_documents.append(new_pa_doc)
            permit_amendment.save()
        else:
            raise BadRequest(
                'Must provide the doc manager guid for the newly uploaded file.'
            )

        return new_pa_doc
Exemplo n.º 2
0
def test_permit_amendment_model_find_by_permit_id(db_session):
    batch_size = 3
    permit_id = PermitFactory(permit_amendments=batch_size).permit_id

    permit_amendments = PermitAmendment.find_by_permit_id(permit_id)
    assert len(permit_amendments) == batch_size
    assert all(pa.permit_id == permit_id for pa in permit_amendments)
Exemplo n.º 3
0
    def put(self, mine_guid, permit_guid, permit_amendment_guid):
        permit_amendment = PermitAmendment.find_by_permit_amendment_guid(
            permit_amendment_guid)
        if not permit_amendment:
            raise NotFound("Permit Amendment not found.")
        if not str(permit_amendment.mine_guid) == mine_guid:
            raise BadRequest(
                'Permits mine_guid and supplied mine_guid mismatch.')

        data = self.parser.parse_args()
        current_app.logger.info(f'updating {permit_amendment} with >> {data}')

        for key, value in data.items():
            if key == 'uploadedFiles':
                for newFile in value:
                    new_pa_doc = PermitAmendmentDocument(
                        document_name=newFile['fileName'],
                        document_manager_guid=newFile['document_manager_guid'],
                        mine_guid=permit_amendment.mine_guid,
                    )
                    permit_amendment.related_documents.append(new_pa_doc)
            else:
                setattr(permit_amendment, key, value)

        permit_amendment.save()

        return permit_amendment
def test_post_permit_amendment_with_date_params(test_client, db_session, auth_headers):
    permit = PermitFactory()
    permit_guid = permit.permit_guid
    #TODO Figure out how to make permit factory make it's own initial permittee
    permittee = MinePartyAppointmentFactory(
        permit_guid=permit_guid, mine_party_appt_type_code='PMT', mine=permit.mine)
    party_guid = PartyFactory(company=True).party_guid
    data = {
        'permittee_party_guid': party_guid,
        'received_date': datetime.today().date().isoformat(),
        'issue_date': datetime.today().date().isoformat(),
        'authorization_end_date': (datetime.today() + timedelta(days=1)).date().isoformat(),
    }

    post_resp = test_client.post(
        f'/mines/{permit.mine_guid}/permits/{permit_guid}/amendments',
        json=data,
        headers=auth_headers['full_auth_header'])
    post_data = json.loads(post_resp.data.decode())

    assert post_resp.status_code == 200, post_resp.response
    #assert post_data['permit_guid'] == str(permit_guid), str(post_data)
    assert parser.parse(post_data['received_date']) == parser.parse(data['received_date'])
    assert parser.parse(post_data['issue_date']) == parser.parse(data['issue_date'])
    assert parser.parse(post_data['authorization_end_date']) == parser.parse(
        data['authorization_end_date'])
    assert permit.permittee_appointments[0].party_guid == party_guid

    #permit_amdendment is actually in db
    assert PermitAmendment.find_by_permit_amendment_guid(post_data['permit_amendment_guid'])
Exemplo n.º 5
0
 def get(self, mine_guid, permit_guid, permit_amendment_guid):
     permit_amendment = PermitAmendment.find_by_permit_amendment_guid(permit_amendment_guid)
     if not permit_amendment:
         raise NotFound("Permit Amendment not found.")
     if not str(permit_amendment.mine_guid) == mine_guid:
         raise BadRequest('Permits mine_guid and supplied mine_guid mismatch.')
     return permit_amendment
Exemplo n.º 6
0
def test_permit_amendment_model_find_by_permit_amendment_id(db_session):
    permit = PermitFactory(permit_amendments=1)

    permit_amendment = PermitAmendment.find_by_permit_amendment_id(
        permit.permit_amendments[0].permit_amendment_id)
    assert permit_amendment.permit_amendment_id == permit.permit_amendments[
        0].permit_amendment_id
def test_delete_permit_amendment(test_client, db_session, auth_headers):
    permit_amendment = PermitAmendmentFactory()

    del_resp = test_client.delete(
        f'/mines/{permit_amendment.mine_guid}/permits/{permit_amendment.permit_guid}/amendments/{permit_amendment.permit_amendment_guid}',
        headers=auth_headers['full_auth_header'])
    assert del_resp.status_code == 200, del_resp
    assert PermitAmendment.find_by_permit_amendment_guid(
        str(permit_amendment.permit_amendment_guid)) is None
Exemplo n.º 8
0
    def post(self, mine_guid, permit_guid, permit_amendment_guid=None):
        if permit_amendment_guid:
            raise BadRequest('Unexpected permit_amendement_guid.')

        permit = Permit.find_by_permit_guid(permit_guid)
        if not permit:
            raise NotFound('Permit does not exist.')

        if not str(permit.mine_guid) == mine_guid:
            raise BadRequest(
                'Permits mine_guid and provided mine_guid mismatch.')

        data = self.parser.parse_args()
        current_app.logger.info(f'creating permit_amendment with >> {data}')

        party = Party.find_by_party_guid(data.get('permittee_party_guid'))
        if not party:
            raise NotFound('Party not found')

        party_is_active_permittee = False

        permittees = MinePartyAppointment.find_by_permit_guid(permit_guid)

        for permittee in permittees:
            if permittee.end_date is None:
                if permittee.party_guid == party.party_guid:
                    party_is_active_permittee = True
                else:  # inactive old permittees
                    permittee.end_date = datetime.utcnow()
                    permittee.save()

        if not party_is_active_permittee:
            new_permittee = MinePartyAppointment.create(permit.mine_guid,
                                                        data.get(
                                                            'permittee_party_guid'), 'PMT',
                                                        datetime.utcnow(), None,
                                                        self.get_user_info(), permit_guid, True)
            new_permittee.save()

        new_pa = PermitAmendment.create(
            permit,
            data.get('received_date'),
            data.get('issue_date'),
            data.get('authorization_end_date'),
            data.get('permit_amendment_type_code', 'AMD'),
            description=data.get('description'))

        uploadedFiles = data.get('uploadedFiles', [])
        for newFile in uploadedFiles:
            new_pa_doc = PermitAmendmentDocument(
                document_name=newFile['fileName'],
                document_manager_guid=newFile['document_manager_guid'],
                mine_guid=permit.mine_guid,
            )
            new_pa.related_documents.append(new_pa_doc)
        new_pa.save()
        return new_pa
Exemplo n.º 9
0
def test_permit_amendment_model_validate_type_code():
    with pytest.raises(AssertionError) as e:
        PermitAmendment(permit_amendment_guid=uuid.uuid4(),
                        permit_id=0,
                        permit_amendment_status_code='A',
                        permit_amendment_type_code='',
                        received_date=datetime.today(),
                        issue_date=datetime.today(),
                        authorization_end_date=datetime.today())
    assert 'Permit amendment type code is not provided.' in str(e.value)
Exemplo n.º 10
0
def test_permit_model_validate_issue_date(db_session):
    with pytest.raises(AssertionError) as e:
        PermitAmendment(permit_amendment_guid=uuid.uuid4(),
                        permit_id=0,
                        permit_amendment_status_code='A',
                        permit_amendment_type_code='AM',
                        received_date=datetime.today(),
                        issue_date=datetime.today() + timedelta(days=1),
                        authorization_end_date=datetime.today())
    assert 'Permit amendment issue date cannot be set to the future.' in str(
        e.value)
Exemplo n.º 11
0
    def post(self, mine_guid):
        data = self.parser.parse_args()

        mine = Mine.find_by_mine_guid(mine_guid)
        if not mine:
            raise NotFound(
                'There was no mine found with the provided mine_guid.')

        party = Party.find_by_party_guid(data.get('permittee_party_guid'))
        if not party:
            raise NotFound('Party not found')

        permit = Permit.find_by_permit_no(data.get('permit_no'))
        if permit:
            raise BadRequest("That permit number is already in use.")

        uploadedFiles = data.get('uploadedFiles', [])

        permit = Permit.create(mine.mine_guid, data.get('permit_no'),
                               data.get('permit_status_code'))

        amendment = PermitAmendment.create(
            permit,
            data.get('received_date'),
            data.get('issue_date'),
            data.get('authorization_end_date'),
            'OGP',
            description='Initial permit issued.')

        db.session.add(permit)
        db.session.add(amendment)

        for newFile in uploadedFiles:
            new_pa_doc = PermitAmendmentDocument(
                document_name=newFile['fileName'],
                document_manager_guid=newFile['document_manager_guid'],
                mine_guid=permit.mine_guid,
            )
            amendment.related_documents.append(new_pa_doc)
        db.session.commit()

        permittee_start_date = data.get('issue_date'),
        permittee = MinePartyAppointment.create(
            mine.mine_guid,
            data.get('permittee_party_guid'),
            'PMT',
            start_date=permittee_start_date,
            processed_by=self.get_user_info(),
            permit_guid=permit.permit_guid)
        db.session.add(permittee)
        db.session.commit()

        return permit
Exemplo n.º 12
0
    def delete(self, mine_guid, permit_guid, permit_amendment_guid):
        permit_amendment = PermitAmendment.find_by_permit_amendment_guid(
            permit_amendment_guid)
        if not permit_amendment:
            raise NotFound("Permit Amendment not found.")
        if not str(permit_amendment.mine_guid) == mine_guid:
            raise BadRequest(
                'Permits mine_guid and supplied mine_guid mismatch.')

        permit_amendment.deleted_ind = True

        permit_amendment.save()
        return
Exemplo n.º 13
0
    def delete(self, mine_guid, permit_guid, permit_amendment_guid):
        permit_amendment = PermitAmendment.find_by_permit_amendment_guid(permit_amendment_guid)
        if not permit_amendment:
            raise NotFound("Permit Amendment not found.")
        if not str(permit_amendment.mine_guid) == mine_guid:
            raise BadRequest('Permits mine_guid and supplied mine_guid mismatch.')

        try:
            permit_amendment.soft_delete()
        except Exception as e:
            raise BadRequest(e)

        return
def test_post_permit_amendment_with_type_params(test_client, db_session, auth_headers):
    permit_guid = PermitFactory().permit_guid

    data = {'permit_amendment_type_code': 'OGP'}

    post_resp = test_client.post(
        f'/permits/{permit_guid}/amendments', json=data, headers=auth_headers['full_auth_header'])
    post_data = json.loads(post_resp.data.decode())
    assert post_resp.status_code == 200, post_resp.response
    #assert post_data['permit_guid'] == str(permit_guid), str(post_data)
    assert post_data['permit_amendment_type_code'] == "OGP"
    assert post_data['permit_amendment_status_code'] == "ACT"

    #permit_amdendment is actually in db
    assert PermitAmendment.find_by_permit_amendment_guid(post_data['permit_amendment_guid'])
def test_post_permit_amendment_no_params(test_client, db_session, auth_headers):
    permit = PermitFactory()
    permit_guid = permit.permit_guid

    post_resp = test_client.post(
        f'/mines/{permit.mine_guid}/permits/{permit_guid}/amendments',
        headers=auth_headers['full_auth_header'])
    post_data = json.loads(post_resp.data.decode())
    assert post_resp.status_code == 200, post_resp.response
    #assert post_data['permit_guid'] == str(permit_guid), str(post_data)
    assert post_data['received_date'] is None
    assert post_data['issue_date'] is None
    assert post_data['authorization_end_date'] is None

    #permit_amdendment is actually in db
    assert PermitAmendment.find_by_permit_amendment_guid(post_data['permit_amendment_guid'])
Exemplo n.º 16
0
    def delete(self, mine_guid, permit_guid, permit_amendment_guid,
               permit_amendment_document_guid):
        permit_amendment = PermitAmendment.find_by_permit_amendment_guid(
            permit_amendment_guid)
        permit_amendment_doc = PermitAmendmentDocument.find_by_permit_amendment_document_guid(
            permit_amendment_document_guid)

        if permit_amendment is None:
            raise NotFound('The permit amendment was not found.')

        if permit_amendment_doc is None:
            raise NotFound('The amendments attached document was not found.')

        if not str(permit_amendment.permit_guid) == permit_guid:
            raise BadRequest('Amendment and permit permit_guid mismatch.')

        if not str(permit_amendment.mine_guid) == mine_guid:
            raise BadRequest(
                'Permits mine_guid and supplied mine_guid mismatch.')

        permit_amendment.related_documents.remove(permit_amendment_doc)
        permit_amendment.save()

        return
Exemplo n.º 17
0
def test_post_permit_amendment_with_date_params(test_client, db_session,
                                                auth_headers):
    permit = PermitFactory()
    permit_guid = permit.permit_guid
    party_guid = PartyFactory(company=True).party_guid

    data = {
        'permittee_party_guid':
        party_guid,
        'received_date':
        datetime.today().strftime('%Y-%m-%d'),
        'issue_date':
        datetime.today().strftime('%Y-%m-%d'),
        'authorization_end_date':
        (datetime.today() + timedelta(days=1)).strftime('%Y-%m-%d')
    }

    post_resp = test_client.post(
        f'/mines/{permit.mine_guid}/permits/{permit_guid}/amendments',
        json=data,
        headers=auth_headers['full_auth_header'])
    post_data = json.loads(post_resp.data.decode())

    permittees = MinePartyAppointment.find_by_permit_guid(permit_guid)

    assert post_resp.status_code == 200, post_resp.response
    assert post_data['permit_guid'] == str(permit_guid), str(post_data)
    assert post_data['received_date'] == data['received_date']
    assert post_data['issue_date'] == data['issue_date']
    assert post_data['authorization_end_date'] == data[
        'authorization_end_date']
    assert permittees[0].party_guid == party_guid

    #permit_amdendment is actually in db
    assert PermitAmendment.find_by_permit_amendment_guid(
        post_data['permit_amendment_guid'])
Exemplo n.º 18
0
    def post(self, mine_guid, permit_guid, permit_amendment_guid=None):
        if permit_amendment_guid:
            raise BadRequest('Unexpected permit_amendement_guid.')

        permit = Permit.find_by_permit_guid(permit_guid)
        if not permit:
            raise NotFound('Permit does not exist.')

        if not str(permit.mine_guid) == mine_guid:
            raise BadRequest('Permits mine_guid and provided mine_guid mismatch.')

        data = self.parser.parse_args()
        current_app.logger.info(f'creating permit_amendment with >> {data}')

        party = Party.find_by_party_guid(data.get('permittee_party_guid'))
        if not party:
            raise NotFound('Party not found')

        permittees = MinePartyAppointment.find_by_permit_guid(permit_guid)
        if not permittees:
            raise NotFound('Party appointments not found')

        permit_issue_datetime = data.get('issue_date')
        # convert permit_issue_date to a date object to compare with permittee start_date,
        #Both dates are stored in the DB as Dates, and are being converted to SQLAlchemy dateTimes in the modals, but for some reason being returned as Python Dates.
        permit_issue_date = datetime.date(permit_issue_datetime)
        is_historical_permit = False

        new_end_dates = MinePartyAppointment.find_appointment_end_dates(
            permit_guid, permit_issue_date)

        for permittee in permittees:
            # check if the new appointment is older than the current appointment, if so create a new permittee appointment
            if permittee.start_date > permit_issue_date:
                is_historical_permit = True
            else:
                # if the amendment is the newest, change the end dates of the other appointments
                position = new_end_dates.index(permittee.start_date)
                if new_end_dates.index(permittee.start_date) == 0:
                    permittee.save()
                else:
                    permittee.end_date = new_end_dates[position - 1]
                    permittee.save()

        permittee_start_date = permit_issue_date
        position = new_end_dates.index(permit_issue_date)
        permittee_end_date = new_end_dates[position - 1] if is_historical_permit else None

        # create a new appointment, so every amendment is associated with a permittee
        new_permittee = MinePartyAppointment.create(
            permit.mine_guid,
            data.get('permittee_party_guid'),
            'PMT',
            self.get_user_info(),
            start_date=permittee_start_date,
            end_date=permittee_end_date,
            permit_guid=permit_guid)

        new_permittee.save()
        new_pa = PermitAmendment.create(
            permit,
            data.get('received_date'),
            data.get('issue_date'),
            data.get('authorization_end_date'),
            data.get('permit_amendment_type_code', 'AMD'),
            description=data.get('description'))

        uploadedFiles = data.get('uploadedFiles', [])
        for newFile in uploadedFiles:
            new_pa_doc = PermitAmendmentDocument(
                document_name=newFile['fileName'],
                document_manager_guid=newFile['document_manager_guid'],
                mine_guid=permit.mine_guid,
            )
            new_pa.related_documents.append(new_pa_doc)

        new_pa.save()
        return new_pa