[fixes] patch to update delivery status for drop ship item
This commit is contained in:
parent
01ca354d52
commit
70ed6ede5c
@ -159,7 +159,6 @@ class PurchaseOrder(BuyingController):
|
|||||||
def on_cancel(self):
|
def on_cancel(self):
|
||||||
if self.has_drop_ship_item():
|
if self.has_drop_ship_item():
|
||||||
self.update_status_updater()
|
self.update_status_updater()
|
||||||
self.reset_received_qty_for_drop_ship_items()
|
|
||||||
self.update_delivered_qty_in_sales_order()
|
self.update_delivered_qty_in_sales_order()
|
||||||
|
|
||||||
pc_obj = frappe.get_doc('Purchase Common')
|
pc_obj = frappe.get_doc('Purchase Common')
|
||||||
@ -218,7 +217,7 @@ class PurchaseOrder(BuyingController):
|
|||||||
|
|
||||||
for so_name in sales_orders_to_update:
|
for so_name in sales_orders_to_update:
|
||||||
so = frappe.get_doc("Sales Order", so_name)
|
so = frappe.get_doc("Sales Order", so_name)
|
||||||
so.update_delivery_status(self.name)
|
so.update_delivery_status()
|
||||||
so.set_status(update=True)
|
so.set_status(update=True)
|
||||||
so.notify_update()
|
so.notify_update()
|
||||||
|
|
||||||
@ -236,11 +235,6 @@ class PurchaseOrder(BuyingController):
|
|||||||
if item.delivered_by_supplier == 1:
|
if item.delivered_by_supplier == 1:
|
||||||
item.received_qty = item.qty
|
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()
|
@frappe.whitelist()
|
||||||
def stop_or_unstop_purchase_orders(names, status):
|
def stop_or_unstop_purchase_orders(names, status):
|
||||||
if not frappe.has_permission("Purchase Order", "write"):
|
if not frappe.has_permission("Purchase Order", "write"):
|
||||||
|
@ -76,7 +76,7 @@ class StatusUpdater(Document):
|
|||||||
self.update_qty()
|
self.update_qty()
|
||||||
self.validate_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():
|
if self.is_new():
|
||||||
return
|
return
|
||||||
|
|
||||||
@ -104,7 +104,8 @@ class StatusUpdater(Document):
|
|||||||
self.add_comment("Label", _(self.status))
|
self.add_comment("Label", _(self.status))
|
||||||
|
|
||||||
if update:
|
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):
|
def validate_qty(self):
|
||||||
"""Validates qty at row level"""
|
"""Validates qty at row level"""
|
||||||
|
@ -238,3 +238,4 @@ erpnext.patches.v6_10.fix_ordered_received_billed
|
|||||||
erpnext.patches.v6_10.fix_jv_total_amount #2015-11-30
|
erpnext.patches.v6_10.fix_jv_total_amount #2015-11-30
|
||||||
erpnext.patches.v6_10.email_digest_default_quote
|
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
|
@ -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)
|
@ -265,27 +265,29 @@ class SalesOrder(SellingController):
|
|||||||
if exc_list:
|
if exc_list:
|
||||||
frappe.throw('\n'.join(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"""
|
"""Update delivery status from Purchase Order for drop shipping"""
|
||||||
tot_qty, delivered_qty = 0.0, 0.0
|
tot_qty, delivered_qty = 0.0, 0.0
|
||||||
|
|
||||||
for item in self.items:
|
for item in self.items:
|
||||||
if item.delivered_by_supplier:
|
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
|
from `tabPurchase Order Item` poi, `tabPurchase Order` po
|
||||||
where poi.prevdoc_detail_docname = %s
|
where poi.prevdoc_detail_docname = %s
|
||||||
and poi.prevdoc_doctype = 'Sales Order'
|
and poi.prevdoc_doctype = 'Sales Order'
|
||||||
and poi.item_code = %s
|
and poi.item_code = %s
|
||||||
and poi.parent = po.name
|
and poi.parent = po.name
|
||||||
|
and po.docstatus = 1
|
||||||
and po.status = 'Delivered'""", (item.name, item.item_code))
|
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 = 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
|
delivered_qty += item.delivered_qty
|
||||||
tot_qty += item.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):
|
def get_list_context(context=None):
|
||||||
from erpnext.controllers.website_list_for_contact import get_list_context
|
from erpnext.controllers.website_list_for_contact import get_list_context
|
||||||
|
Loading…
x
Reference in New Issue
Block a user