def _create_with_audit(self, wfdocObj, docid, input_data): wfdoc_repo = DomainRepo("Wfdoc") msg = wfdoc_repo.add_list_of_domain_obj([wfdocObj]) try: audit_msg = self._create_audit_record(wfdocObj, 'Create', input_data) msg.update({"audit_msg": audit_msg}) if audit_msg.get('status').lower().strip() in ['failed', 'Failed', 'error']: raise rexc.AuditRecordCreationFailed(docid, audit_msg.get('message') ) except (rexc.AuditRecordCreationFailed, rexc.FlexFlowException, Exception) as e: status = wfdoc_repo.delete(**{"name": docid}) #status_roll_back_holddoc = holddoc_repo.delete(**search_filter) rollback_msg = {"status": status, "message": str(e) } msg.update({"rollback_msg": rollback_msg}) raise rexc.AuditRecordCreationFailed(docid, audit_msg.get('message'), str(e) ) return msg
def _validate_editable_fields(self, wfdocObj, data:dict, new_born=False): if data: efacs_list = wfdocObj.editable_fields_at_current_status efacs_names = [fObj.name.lower().strip() for fObj in efacs_list] for k, v in data.items(): if k.lower().strip() not in efacs_names and new_born is False : raise rexc.EditNotAllowedForThisField(k, wfdocObj.current_status, efacs_names) for fieldObj in efacs_list: if k.lower() == fieldObj.name.lower(): flength = fieldObj.flength if not len(str(v)) <= flength: raise rexc.DataLengthViolation(k, len(v), flength) ctype = fieldObj.ftype.lower() utils.convert_data_values_as_per_conf(ctype, data, k, v) return data
def _create_audit_record(self, wfdocObj, intended_action, input_data:dict): WfdocauditObj = ent.Wfdocaudit(name=str(uuid.uuid4()), #self.wfc.request_id, wfdoc=wfdocObj, username=self.wfc.username, email=self.wfc.email, time_stamp=self.wfc.time_stamp, client_address=self.wfc.client_address, org=self.wfc.org, orgunit=self.wfc.orgunit, department=self.wfc.department, roles=self.wfc.roles, action=intended_action, data=input_data) wfdocaudit_repo = DomainRepo('Wfdocaudit') msg = wfdocaudit_repo.add_list_of_domain_obj([WfdocauditObj]) #print(msg) return msg
def _create_draft_or_roll_back(self, wfdocObj, draft_data): draft_create_msg = {} draftdataObj = ent.Draftdata(name=wfdocObj.name, drafted_by=self.wfc.email, target_role = self.wfc.roles, wfdoc=wfdocObj, doc_data=draft_data) try: draftdoc_repo = DomainRepo("Draftdata") draft_search_string = {"name": wfdocObj.name}#delete before creating prev_draf_cleared_status = draftdoc_repo.delete(**draft_search_string) status = draftdoc_repo.add_list_of_domain_obj([draftdataObj]) wfdoc_update_msg = self._update_wfdoc_draft_status(wfdocObj, self.wfc.roles) draft_create_msg.update({"draft_create_msg": status, "wfdoc_update_msg": wfdoc_update_msg, "prev_draf_cleared_status": prev_draf_cleared_status}) except (rexc.FlexFlowException, Exception) as e: delete_stat = draftdoc_repo.delete(**{"name": wfdocObj.name}) reset_wfdoc_stat = self._update_wfdoc_draft_status(wfdocObj) draft_create_msg.update({"delete_stat": delete_stat, "reset_wfdoc_stat": reset_wfdoc_stat, "rollback_msg": str(e)}) raise rexc.FlexFlowException return draft_create_msg
def _updadate_with_audit(self, wfdocObj, intended_action, changed_data ): ''' also takes care "has_draft_for_roles" role back''' wfdoc_repo = DomainRepo("Wfdoc") draftdata_repo = DomainRepo("Draftdata") target_doc_name = {"name": wfdocObj.name} msg = wfdoc_repo.update_from_dict(changed_data, **target_doc_name) try: draft_search_string = {"name": wfdocObj.name} audit_msg = self._create_audit_record(wfdocObj, intended_action, changed_data) draf_cleared_status = draftdata_repo.delete(**draft_search_string) msg.update({"audit_msg": audit_msg, "draf_cleared_status": draf_cleared_status}) if audit_msg.get('status').lower().strip() in ['failed', 'Failed', 'error']: raise rexc.AuditRecordCreationFailed(target_doc_name, audit_msg.get('message') ) except Exception as e: updated_data_dict = {"current_status": wfdocObj.current_status, "prev_status": wfdocObj.prev_status, "has_draft_for_roles": wfdocObj.has_draft_for_roles, "doc_data": wfdocObj.doc_data} rollback_msg = wfdoc_repo.update_from_dict(updated_data_dict, **target_doc_name) msg.update({"rollback_msg": rollback_msg}) raise rexc.AuditRecordCreationFailed(target_doc_name, audit_msg.get('message'), str(e) ) return msg