From 5bd73a8aaa04afb9631055cae7d2fcdc5780f927 Mon Sep 17 00:00:00 2001 From: Hicham Lahlou Date: Wed, 14 Feb 2024 21:38:13 +0100 Subject: [PATCH 1/2] Fix incorrect PO reference + make sure last number of the PO reference is the Odoo PO line id. --- frepple/controllers/outbound.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/frepple/controllers/outbound.py b/frepple/controllers/outbound.py index 367730a8..456a4bb6 100644 --- a/frepple/controllers/outbound.py +++ b/frepple/controllers/outbound.py @@ -2124,10 +2124,12 @@ def export_purchaseorders(self): or i["state"] in ("draft", "cancel", "done") ): continue - po_line_reference = "%s - %s - %s" % ( + j = po[po_line[i["purchase_line_id"][0]]["order_id"][0]] + po_line_reference = "%s - %s - %s - %s" % ( j["name"], i["picking_id"][1], i["id"], + i["purchase_line_id"][0], ) if i["is_subcontract"]: # PO lines on a subcontracting BOM are mapped as a MO in frepple @@ -2144,7 +2146,7 @@ def export_purchaseorders(self): item = self.product_product.get(i["product_id"][0], None) if not item: continue - j = po[po_line[i["purchase_line_id"][0]]["order_id"][0]] + # if PO status is done, we should ignore this receipt if j["state"] == "done": continue From 5cfc348fafbc6dd09621fff0b946301116450cc4 Mon Sep 17 00:00:00 2001 From: Hicham Lahlou Date: Wed, 14 Feb 2024 21:46:45 +0100 Subject: [PATCH 2/2] Allow export of approved/confirmed POs --- frepple/controllers/inbound.py | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/frepple/controllers/inbound.py b/frepple/controllers/inbound.py index 0015d9b1..ed2d0f0d 100644 --- a/frepple/controllers/inbound.py +++ b/frepple/controllers/inbound.py @@ -181,9 +181,9 @@ def run(self): try: ordertype = elem.get("ordertype") if ordertype == "PO": - # Create purchase order + supplier_id = int(elem.get("supplier").rsplit(" ", 1)[-1]) - quantity = elem.get("quantity") + quantity = float(elem.get("quantity")) date_planned = elem.get("end") if date_planned: date_planned = datetime.strptime( @@ -194,6 +194,31 @@ def run(self): date_ordered = datetime.strptime( date_ordered, "%Y-%m-%d %H:%M:%S" ) + + # Is that an update of an existing PO ? + status = elem.get("status") + if status in ("approved", "confirmed"): + po_line_id = int(elem.get("id").rsplit(" - ", 1)[-1]) + po_line = proc_orderline.browse(po_line_id) + if po_line: + po_line.write( + { + "product_id": int(item_id), + "product_qty": quantity, + "product_uom": int(uom_id), + "date_planned": date_planned, + "name": elem.get("item"), + } + ) + countproc += 1 + else: + logger.error( + "Unable to find PO line %s in Odoo" + % (elem.get("reference"),) + ) + continue + + # Create purchase order if supplier_id not in supplier_reference: po = proc_order.create( {