from models.prs_purchase_order import PRSPurchaseOrder, PRSPurchaseOrderStatus USD_CURRENCY = "USD" class PurchaseOrderMapper: def __init__(self, project_id: int, purchase_order): self.project_id = project_id self.purchase_order = purchase_order def build(self): purchase_order = self.purchase_order.PRSPurchaseOrder or PRSPurchaseOrder() purchase_order.name = self.__generate_name() purchase_order.po_number = str(self.purchase_order.po_num) purchase_order.created_date = self.purchase_order.po_created_on purchase_order.last_modified_date = self.purchase_order.po_modified_on purchase_order.is_blanked = self.purchase_order.blanket == "Y" purchase_order.total_amount = self.purchase_order.po_total or 0 purchase_order.paid_amount = self.purchase_order.po_total_paid or 0 purchase_order.group_id = self.purchase_order.budget_group purchase_order.category_id = self.purchase_order.budget_category purchase_order.parent_po_number = self.purchase_order.blanket_po_id purchase_order.status = PRSPurchaseOrderStatus.map_from_str(self.purchase_order.po_status).value purchase_order.description = self.__generate_description() purchase_order.project_id = self.project_id purchase_order.provider_id = self.purchase_order.provider_id purchase_order.is_under_uncommited_blanket = self.purchase_order.is_under_uncommited_blanket == "Y" purchase_order.total_amount_currency = USD_CURRENCY purchase_order.paid_amount_currency = USD_CURRENCY return purchase_order def __generate_name(self) -> str: if self.purchase_order.blanket == "Y": return f"{self.purchase_order.blanket_name} | PO {self.purchase_order.po_num}" if self.purchase_order.vendor_name: return f"{self.purchase_order.vendor_name} | PO {self.purchase_order.po_num}" return f"PO {self.purchase_order.po_num}" def __generate_description(self) -> str: desc = list(filter(None, [self.purchase_order.item_full_desc, self.purchase_order.item_desc])) return "\n".join(desc)