fix: patch and validation message to fix target warehouse issue (#21371)
This commit is contained in:
parent
e8a651bc00
commit
6fa6caf46c
@ -46,6 +46,7 @@ class SellingController(StockController):
|
|||||||
set_default_income_account_for_item(self)
|
set_default_income_account_for_item(self)
|
||||||
self.set_customer_address()
|
self.set_customer_address()
|
||||||
self.validate_for_duplicate_items()
|
self.validate_for_duplicate_items()
|
||||||
|
self.validate_target_warehouse()
|
||||||
|
|
||||||
def set_missing_values(self, for_validate=False):
|
def set_missing_values(self, for_validate=False):
|
||||||
|
|
||||||
@ -403,6 +404,14 @@ class SellingController(StockController):
|
|||||||
else:
|
else:
|
||||||
chk_dupl_itm.append(f)
|
chk_dupl_itm.append(f)
|
||||||
|
|
||||||
|
def validate_target_warehouse(self):
|
||||||
|
items = self.get("items") + (self.get("packed_items") or [])
|
||||||
|
|
||||||
|
for d in items:
|
||||||
|
if d.get("target_warehouse") and d.get("warehouse") == d.get("target_warehouse"):
|
||||||
|
warehouse = frappe.bold(d.get("target_warehouse"))
|
||||||
|
frappe.throw(_("Row {0}: Delivery Warehouse ({1}) and Customer Warehouse ({2}) can not be same")
|
||||||
|
.format(d.idx, warehouse, warehouse))
|
||||||
|
|
||||||
def validate_items(self):
|
def validate_items(self):
|
||||||
# validate items to see if they have is_sales_item enabled
|
# validate items to see if they have is_sales_item enabled
|
||||||
|
@ -667,3 +667,4 @@ erpnext.patches.v12_0.update_healthcare_refactored_changes
|
|||||||
erpnext.patches.v12_0.set_total_batch_quantity
|
erpnext.patches.v12_0.set_total_batch_quantity
|
||||||
erpnext.patches.v12_0.rename_mws_settings_fields
|
erpnext.patches.v12_0.rename_mws_settings_fields
|
||||||
erpnext.patches.v12_0.set_updated_purpose_in_pick_list
|
erpnext.patches.v12_0.set_updated_purpose_in_pick_list
|
||||||
|
erpnext.patches.v12_0.repost_stock_ledger_entries_for_target_warehouse
|
||||||
|
@ -0,0 +1,71 @@
|
|||||||
|
# Copyright (c) 2020, Frappe and Contributors
|
||||||
|
# License: GNU General Public License v3. See license.txt
|
||||||
|
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
import frappe
|
||||||
|
|
||||||
|
def execute():
|
||||||
|
warehouse_perm = frappe.get_all("User Permission",
|
||||||
|
fields=["count(*) as p_count", "is_default", "user"], filters={"allow": "Warehouse"}, group_by="user")
|
||||||
|
|
||||||
|
if not warehouse_perm:
|
||||||
|
return
|
||||||
|
|
||||||
|
execute_patch = False
|
||||||
|
for perm_data in warehouse_perm:
|
||||||
|
if perm_data.p_count == 1 or (perm_data.p_count > 1 and frappe.get_all("User Permission",
|
||||||
|
filters = {"user": perm_data.user, "allow": "warehouse", "is_default": 1}, limit=1)):
|
||||||
|
execute_patch = True
|
||||||
|
break
|
||||||
|
|
||||||
|
if not execute_patch: return
|
||||||
|
|
||||||
|
for doctype in ["Sales Invoice", "Delivery Note"]:
|
||||||
|
if not frappe.get_meta(doctype + ' Item').get_field("target_warehouse").hidden: continue
|
||||||
|
|
||||||
|
cond = ""
|
||||||
|
if doctype == "Sales Invoice":
|
||||||
|
cond = " AND parent_doc.update_stock = 1"
|
||||||
|
|
||||||
|
data = frappe.db.sql(""" SELECT parent_doc.name as name, child_doc.name as child_name
|
||||||
|
FROM
|
||||||
|
`tab{doctype}` parent_doc, `tab{doctype} Item` child_doc
|
||||||
|
WHERE
|
||||||
|
parent_doc.name = child_doc.parent AND parent_doc.docstatus < 2
|
||||||
|
AND child_doc.target_warehouse is not null AND child_doc.target_warehouse != ''
|
||||||
|
AND child_doc.creation > '2020-04-16' {cond}
|
||||||
|
""".format(doctype=doctype, cond=cond), as_dict=1)
|
||||||
|
|
||||||
|
if data:
|
||||||
|
names = [d.child_name for d in data]
|
||||||
|
frappe.db.sql(""" UPDATE `tab{0} Item` set target_warehouse = null
|
||||||
|
WHERE name in ({1}) """.format(doctype, ','.join(["%s"] * len(names) )), tuple(names))
|
||||||
|
|
||||||
|
frappe.db.sql(""" UPDATE `tabPacked Item` set target_warehouse = null
|
||||||
|
WHERE parenttype = '{0}' and parent_detail_docname in ({1})
|
||||||
|
""".format(doctype, ','.join(["%s"] * len(names) )), tuple(names))
|
||||||
|
|
||||||
|
parent_names = list(set([d.name for d in data]))
|
||||||
|
|
||||||
|
for d in parent_names:
|
||||||
|
doc = frappe.get_doc(doctype, d)
|
||||||
|
if doc.docstatus != 1: continue
|
||||||
|
|
||||||
|
doc.docstatus = 2
|
||||||
|
doc.update_stock_ledger()
|
||||||
|
doc.make_gl_entries_on_cancel(repost_future_gle=False)
|
||||||
|
|
||||||
|
# update stock & gl entries for submit state of PR
|
||||||
|
doc.docstatus = 1
|
||||||
|
doc.update_stock_ledger()
|
||||||
|
doc.make_gl_entries()
|
||||||
|
|
||||||
|
if frappe.get_meta('Sales Order Item').get_field("target_warehouse").hidden:
|
||||||
|
frappe.db.sql(""" UPDATE `tabSales Order Item` set target_warehouse = null
|
||||||
|
WHERE creation > '2020-04-16' and docstatus < 2 """)
|
||||||
|
|
||||||
|
frappe.db.sql(""" UPDATE `tabPacked Item` set target_warehouse = null
|
||||||
|
WHERE creation > '2020-04-16' and docstatus < 2 and parenttype = 'Sales Order' """)
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user