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
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)
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'])
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
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
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
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)
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)
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
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
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'])
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
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'])
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