def post(self, mine_guid, mine_report_guid): mine_report_submission = MineReportSubmission.find_latest_by_mine_report_guid( mine_report_guid) if not mine_report_submission: raise NotFound('Mine report submission not found') # TODO: Do we want to create a submission if it doesn't exist? data = self.parser.parse_args() if not data['report_comment']: raise BadRequest('Empty comment') mine_report_comment_guid = uuid.uuid4() mine_report_comment = MineReportComment.create( mine_report_submission, mine_report_comment_guid=mine_report_comment_guid, report_comment=data['report_comment'], comment_visibility_ind=data['comment_visibility_ind'], ) current_app.logger.info(f'Creating comment {mine_report_comment}') mine_report_comment.save() return mine_report_comment, 201
def post(self, mine_guid): mine = Mine.find_by_mine_guid(mine_guid) if not mine: raise NotFound('Mine not found') data = self.parser.parse_args() mine_report_definition = MineReportDefinition.find_by_mine_report_definition_guid( data['mine_report_definition_guid']) permit = Permit.find_by_permit_guid_or_no(data['permit_guid']) if mine_report_definition is None: raise BadRequest('A report must be selected from the list.') if permit and permit.mine_guid != mine.mine_guid: raise BadRequest( 'The permit must be associated with the selected mine.') mine_report = MineReport.create( mine_report_definition_id=mine_report_definition. mine_report_definition_id, mine_guid=mine.mine_guid, due_date=data.get('due_date'), received_date=data['received_date'], submission_year=data['submission_year'], permit_id=permit.permit_id if permit else None) submissions = data.get('mine_report_submissions') if submissions: submission = submissions[-1] if len(submission.get('documents')) > 0: submission_status = data.get( 'mine_report_submission_status') if data.get( 'mine_report_submission_status') else 'NRQ' report_submission = MineReportSubmission( mine_report_submission_status_code=submission_status, submission_date=datetime.utcnow()) for submission_doc in submission.get('documents'): mine_doc = MineDocument( mine_guid=mine.mine_guid, document_name=submission_doc['document_name'], document_manager_guid=submission_doc[ 'document_manager_guid']) if not mine_doc: raise BadRequest( 'Unable to register uploaded file as document') mine_doc.save() report_submission.documents.append(mine_doc) mine_report.mine_report_submissions.append(report_submission) try: mine_report.save() except Exception as e: raise InternalServerError(f'Error when saving: {e}') return mine_report, 201
def put(self, mine_guid, mine_report_guid): mine = Mine.find_by_mine_guid(mine_guid) mine_report = MineReport.find_by_mine_report_guid(mine_report_guid) if not mine_report or str(mine_report.mine_guid) != mine_guid: raise NotFound("Mine Report not found") data = self.parser.parse_args() if 'due_date' in data: mine_report.due_date = data.get('due_date') if 'received_date' in data: mine_report.received_date = data['received_date'] if 'submission_year' in data: mine_report.submission_year = data['submission_year'] if data.get('mine_report_submission_status') is not None: mine_report_submission_status = data.get( 'mine_report_submission_status') else: mine_report_submission_status = 'NRQ' report_submissions = data.get('mine_report_submissions') submission_iterator = iter(report_submissions) new_submission = next( (x for x in submission_iterator if x.get('mine_report_submission_guid') is None), None) if new_submission is not None: new_report_submission = MineReportSubmission( submission_date=datetime.now(), mine_report_submission_status_code=mine_report_submission_status ) # Copy the current list of documents for the report submission last_submission_docs = mine_report.mine_report_submissions[ -1].documents.copy() if len( mine_report.mine_report_submissions) > 0 else [] # Gets the difference between the set of documents in the new submission and the last submission new_docs = [ x for x in new_submission.get('documents') if not any( str(doc.document_manager_guid) == x['document_manager_guid'] for doc in last_submission_docs) ] # Get the documents that were on the last submission but not part of the new submission removed_docs = [ x for x in last_submission_docs if not any(doc['document_manager_guid'] == str( x.document_manager_guid) for doc in new_submission.get('documents')) ] # Remove the deleted documents from the existing set. for doc in removed_docs: last_submission_docs.remove(doc) if len(last_submission_docs) > 0: new_report_submission.documents.extend(last_submission_docs) for doc in new_docs: mine_doc = MineDocument( mine_guid=mine.mine_guid, document_name=doc['document_name'], document_manager_guid=doc['document_manager_guid']) if not mine_doc: raise BadRequest( 'Unable to register uploaded file as document') mine_doc.save() new_report_submission.documents.append(mine_doc) mine_report.mine_report_submissions.append(new_report_submission) # if the status has changed, update the status of the last submission elif ( len(mine_report.mine_report_submissions) > 0 ) and mine_report_submission_status != mine_report.mine_report_submissions[ -1].mine_report_submission_status_code: mine_report.mine_report_submissions[ -1].mine_report_submission_status_code = mine_report_submission_status try: mine_report.save() except Exception as e: raise InternalServerError(f'Error when saving: {e}') return mine_report