fix: status not changing for dropshipped POs and SOs (#54934)

* fix: status not changing for dropshipped POs and SOs

* test: change test case to accomodate new flow
This commit is contained in:
Mihir Kandoi
2026-05-14 13:56:51 +05:30
committed by GitHub
parent 930990434c
commit 78a79120ea
5 changed files with 24 additions and 18 deletions

View File

@@ -469,7 +469,6 @@ class PurchaseOrder(BuyingController):
self.update_status_updater_if_from_pp()
if self.has_drop_ship_item():
self.update_delivered_qty_in_sales_order()
self.set_received_qty_to_zero_for_drop_ship_items()
self.update_receiving_percentage()
@@ -600,9 +599,17 @@ class PurchaseOrder(BuyingController):
)
)
item.received_qty += d.get("qty_change")
qty_change = item.received_qty + d.get("qty_change")
item.db_set("received_qty", qty_change, update_modified=True)
self.add_comment(
"Label",
_("updated delivered quantity for item {0} to {1}").format(
frappe.bold(item.item_code), frappe.bold(qty_change)
),
)
self.update_receiving_percentage()
self.save()
self.set_status(update=True)
self.update_delivered_qty_in_sales_order()
def is_against_so(self):
return any(d.sales_order for d in self.items if d.sales_order)

View File

@@ -612,7 +612,6 @@
"width": "100px"
},
{
"allow_on_submit": 1,
"depends_on": "received_qty",
"fieldname": "received_qty",
"fieldtype": "Float",
@@ -942,7 +941,7 @@
"index_web_pages_for_search": 1,
"istable": 1,
"links": [],
"modified": "2026-05-08 20:40:10.683023",
"modified": "2026-05-14 12:16:16.192936",
"modified_by": "Administrator",
"module": "Buying",
"name": "Purchase Order Item",

View File

@@ -27,6 +27,7 @@ class PurchaseOrderItem(Document):
billed_amt: DF.Currency
blanket_order: DF.Link | None
blanket_order_rate: DF.Currency
bom: DF.Link | None
brand: DF.Link | None
company_total_stock: DF.Float
conversion_factor: DF.Float

View File

@@ -686,18 +686,12 @@ class SalesOrder(SellingController):
for item in self.items:
if item.delivered_by_supplier:
item_delivered_qty = frappe.db.sql(
"""select sum(qty)
from `tabPurchase Order Item` poi, `tabPurchase Order` po
where poi.sales_order_item = %s
and poi.item_code = %s
and poi.parent = po.name
and po.docstatus = 1
and po.status = 'Delivered'""",
(item.name, item.item_code),
)
item_delivered_qty = item_delivered_qty[0][0] if item_delivered_qty else 0
item_delivered_qty = frappe.get_all(
"Purchase Order Item",
{"sales_order_item": item.name, "docstatus": 1},
[{"SUM": "received_qty", "AS": "received_qty"}],
pluck="received_qty",
)[0]
item.db_set("delivered_qty", flt(item_delivered_qty), update_modified=False)
delivered_qty += min(item.delivered_qty, item.qty)

View File

@@ -1224,9 +1224,14 @@ class TestSalesOrder(ERPNextTestSuite):
self.assertEqual(abs(flt(reserved_qty)), 0)
# test per_delivered status
update_status("Delivered", po.name)
self.assertEqual(po.status, "To Receive and Bill")
self.assertEqual(so.status, "To Deliver and Bill")
po.update_dropship_received_qty([{"name": po.items[0].name, "qty_change": 2}])
self.assertEqual(flt(frappe.db.get_value("Sales Order", so.name, "per_delivered"), 2), 100.00)
po.load_from_db()
so.reload()
self.assertEqual(po.status, "To Bill")
self.assertEqual(so.status, "To Bill")
# test after closing so
so.db_set("status", "Closed")