[fixes] patch to update delivery status for drop ship item
diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.py b/erpnext/buying/doctype/purchase_order/purchase_order.py
index fcf463b..b10b72f 100644
--- a/erpnext/buying/doctype/purchase_order/purchase_order.py
+++ b/erpnext/buying/doctype/purchase_order/purchase_order.py
@@ -159,7 +159,6 @@
def on_cancel(self):
if self.has_drop_ship_item():
self.update_status_updater()
- self.reset_received_qty_for_drop_ship_items()
self.update_delivered_qty_in_sales_order()
pc_obj = frappe.get_doc('Purchase Common')
@@ -218,7 +217,7 @@
for so_name in sales_orders_to_update:
so = frappe.get_doc("Sales Order", so_name)
- so.update_delivery_status(self.name)
+ so.update_delivery_status()
so.set_status(update=True)
so.notify_update()
@@ -235,12 +234,7 @@
for item in self.items:
if item.delivered_by_supplier == 1:
item.received_qty = item.qty
-
- def reset_received_qty_for_drop_ship_items(self):
- for item in self.items:
- if item.delivered_by_supplier == 1:
- frappe.db.set_value("Purchase Order Item", item.name, "received_qty", 0.0)
-
+
@frappe.whitelist()
def stop_or_unstop_purchase_orders(names, status):
if not frappe.has_permission("Purchase Order", "write"):
diff --git a/erpnext/controllers/status_updater.py b/erpnext/controllers/status_updater.py
index eb8d5e9..73e9d7f 100644
--- a/erpnext/controllers/status_updater.py
+++ b/erpnext/controllers/status_updater.py
@@ -76,10 +76,10 @@
self.update_qty()
self.validate_qty()
- def set_status(self, update=False, status=None):
+ def set_status(self, update=False, status=None, update_modified=True):
if self.is_new():
return
-
+
if self.doctype in status_map:
_status = self.status
@@ -102,9 +102,10 @@
if self.status != _status and self.status not in ("Submitted", "Cancelled"):
self.add_comment("Label", _(self.status))
-
+
if update:
- frappe.db.set_value(self.doctype, self.name, "status", self.status)
+ frappe.db.set_value(self.doctype, self.name, "status", self.status,
+ update_modified=update_modified)
def validate_qty(self):
"""Validates qty at row level"""
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index cd38e67..302a338 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -237,4 +237,5 @@
erpnext.patches.v6_10.fix_ordered_received_billed
erpnext.patches.v6_10.fix_jv_total_amount #2015-11-30
erpnext.patches.v6_10.email_digest_default_quote
-erpnext.patches.v6_10.fix_billed_amount_in_drop_ship_po
\ No newline at end of file
+erpnext.patches.v6_10.fix_billed_amount_in_drop_ship_po
+erpnext.patches.v6_10.fix_delivery_status_of_drop_ship_item
\ No newline at end of file
diff --git a/erpnext/patches/v6_10/fix_delivery_status_of_drop_ship_item.py b/erpnext/patches/v6_10/fix_delivery_status_of_drop_ship_item.py
new file mode 100644
index 0000000..a54d0ab
--- /dev/null
+++ b/erpnext/patches/v6_10/fix_delivery_status_of_drop_ship_item.py
@@ -0,0 +1,17 @@
+from __future__ import unicode_literals
+import frappe
+
+def execute():
+ sales_orders_to_update = []
+
+ for item in frappe.get_all("Purchase Order Item", filters={"delivered_by_supplier": 1},
+ fields=["prevdoc_doctype", "prevdoc_docname"]):
+
+ if item.prevdoc_doctype == "Sales Order":
+ if item.prevdoc_docname not in sales_orders_to_update:
+ sales_orders_to_update.append(item.prevdoc_docname)
+
+ for so_name in sales_orders_to_update:
+ so = frappe.get_doc("Sales Order", so_name)
+ so.update_delivery_status()
+ so.set_status(update=True, update_modified=False)
\ No newline at end of file
diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py
index 6d396bd..7712f5e 100644
--- a/erpnext/selling/doctype/sales_order/sales_order.py
+++ b/erpnext/selling/doctype/sales_order/sales_order.py
@@ -265,27 +265,29 @@
if exc_list:
frappe.throw('\n'.join(exc_list))
- def update_delivery_status(self, po_name):
+ def update_delivery_status(self):
"""Update delivery status from Purchase Order for drop shipping"""
tot_qty, delivered_qty = 0.0, 0.0
for item in self.items:
if item.delivered_by_supplier:
- item_delivered_qty = frappe.db.sql("""select received_qty
+ item_delivered_qty = frappe.db.sql("""select sum(qty)
from `tabPurchase Order Item` poi, `tabPurchase Order` po
where poi.prevdoc_detail_docname = %s
and poi.prevdoc_doctype = 'Sales Order'
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.db_set("delivered_qty", item_delivered_qty)
+ item.db_set("delivered_qty", flt(item_delivered_qty), update_modified=False)
delivered_qty += item.delivered_qty
tot_qty += item.qty
-
- frappe.db.set_value("Sales Order", self.name, "per_delivered", flt(delivered_qty/tot_qty) * 100)
+
+ frappe.db.set_value("Sales Order", self.name, "per_delivered", flt(delivered_qty/tot_qty) * 100,
+ update_modified=False)
def get_list_context(context=None):
from erpnext.controllers.website_list_for_contact import get_list_context