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)
|
||||
self.set_customer_address()
|
||||
self.validate_for_duplicate_items()
|
||||
self.validate_target_warehouse()
|
||||
|
||||
def set_missing_values(self, for_validate=False):
|
||||
|
||||
@ -403,6 +404,14 @@ class SellingController(StockController):
|
||||
else:
|
||||
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):
|
||||
# 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.rename_mws_settings_fields
|
||||
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