def sync_requisition_from_openlmis(domain, requisition_id, openlmis_endpoint): cases = [] send_notification = False lmis_requisition_details = openlmis_endpoint.get_requisition_details( requisition_id) if lmis_requisition_details: rec_cases = [ c for c in RequisitionCase.get_by_external_id( domain, str(lmis_requisition_details.id)) if c.type == const.REQUISITION_CASE_TYPE ] if len(rec_cases) == 0: products = [ product for product in lmis_requisition_details.products if product.skipped == False ] for product in products: pdt = Product.get_by_code(domain, product.code.lower()) if pdt: case = lmis_requisition_details.to_requisition_case( pdt._id) case.save() if case.requisition_status == 'AUTHORIZED': send_notification = True cases.append(case)
def sync_requisition_from_openlmis(domain, requisition_id, openlmis_endpoint): cases = [] send_notification = False lmis_requisition_details = openlmis_endpoint.get_requisition_details(requisition_id) if lmis_requisition_details: rec_cases = [c for c in RequisitionCase.get_by_external_id(domain, str(lmis_requisition_details.id)) if c.type == const.REQUISITION_CASE_TYPE] if len(rec_cases) == 0: products = [product for product in lmis_requisition_details.products if product.skipped == False] for product in products: pdt = Product.get_by_code(domain, product.code.lower()) if pdt: case = lmis_requisition_details.to_requisition_case(pdt._id) case.save() if case.requisition_status == 'AUTHORIZED': send_notification = True cases.append(case) else: for case in rec_cases: before_status = case.requisition_status if apply_updates(case, lmis_requisition_details.to_dict(case.product_id)): after_status = case.requisition_status case.save() if before_status in ['INITIATED', 'SUBMITTED'] and after_status == 'AUTHORIZED': send_notification = True cases.append(case) return cases, send_notification else: return None, False
def raise_events(xform, cases): """ Raise requisition events associated with cases """ # todo: nothing calls this and it can be removed today, though openlmis code depends # on it being called during case processing requisition_cases = [ RequisitionCase.wrap(c._doc) for c in cases if c.type == REQUISITION_CASE_TYPE ] if requisition_cases and requisition_cases[ 0].requisition_status == RequisitionStatus.APPROVED: requisition_approved.send(sender=None, requisitions=requisition_cases) if requisition_cases and requisition_cases[ 0].requisition_status == RequisitionStatus.RECEIVED: requisition_receipt.send(sender=None, requisitions=requisition_cases) if requisition_cases and requisition_cases[ 0].requisition_status == RequisitionStatus.REQUESTED: requisition_modified.send(sender=None, cases=requisition_cases)
def to_requisition_case(self, product_id, case_id=None, case_rev=None): req_case = RequisitionCase() req_case.type = REQUISITION_CASE_TYPE req_case.user_id = self.agent_code req_case.set_case_property("program_id", self.program_id) req_case.set_case_property("period_id", self.period_id) req_case.product_id = product_id req_case.external_id = self.id req_case.requisition_status = self.requisition_status req_case.set_case_property("order_id", self.order_id) req_case.set_case_property("order_status", self.order_status) req_case.set_case_property("emergency", self.emergency) req_case.set_case_property("start_date", self.period_start_date) req_case.set_case_property("end_date", self.period_end_date) if case_id: req_case._id = case_id if case_rev: req_case._rev = case_rev return req_case