[fixes] patch to update delivery status for drop ship item

This commit is contained in:
Saurabh 2015-12-08 14:02:53 +05:30
parent 01ca354d52
commit 70ed6ede5c
5 changed files with 33 additions and 18 deletions

View File

@ -159,7 +159,6 @@ class PurchaseOrder(BuyingController):
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 @@ class PurchaseOrder(BuyingController):
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 @@ class PurchaseOrder(BuyingController):
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"):

View File

@ -76,10 +76,10 @@ class StatusUpdater(Document):
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 @@ class StatusUpdater(Document):
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"""

View File

@ -237,4 +237,5 @@ erpnext.patches.v6_8.move_drop_ship_to_po_items
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
erpnext.patches.v6_10.fix_billed_amount_in_drop_ship_po
erpnext.patches.v6_10.fix_delivery_status_of_drop_ship_item

View File

@ -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)

View File

@ -265,27 +265,29 @@ class SalesOrder(SellingController):
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