remove updating territory for customers on change (#13162)

This commit is contained in:
Zarrar 2018-03-05 12:32:41 +05:30 committed by Nabin Hait
parent 5fd7b3bb80
commit 2550180a05
2 changed files with 28 additions and 34 deletions

View File

@ -3,34 +3,32 @@ from frappe.model.rename_doc import get_fetch_fields
def execute(): def execute():
ignore_doctypes = ["Lead", "Opportunity", "POS Profile", "Tax Rule", "Pricing Rule"] ignore_doctypes = ["Lead", "Opportunity", "POS Profile", "Tax Rule", "Pricing Rule"]
customers = frappe.get_all('Customer', fields=["name", "territory", "customer_group"]) customers = frappe.get_all('Customer', fields=["name", "customer_group"])
territory_fetch = get_fetch_fields('Customer', 'Territory', ignore_doctypes)
customer_group_fetch = get_fetch_fields('Customer', 'Customer Group', ignore_doctypes) customer_group_fetch = get_fetch_fields('Customer', 'Customer Group', ignore_doctypes)
batch_size = 1000 batch_size = 1000
for i in range(0, len(customers), batch_size): for i in range(0, len(customers), batch_size):
batch_customers = customers[i:i + batch_size] batch_customers = customers[i:i + batch_size]
for source_fieldname, linked_doctypes_info in [["customer_group", customer_group_fetch], ["territory", territory_fetch]]: for d in customer_group_fetch:
for d in linked_doctypes_info: when_then = []
when_then = [] for customer in batch_customers:
for customer in batch_customers: when_then.append('''
when_then.append(''' WHEN `{master_fieldname}` = "{docname}" and {linked_to_fieldname} != "{value}"
WHEN `{master_fieldname}` = "{docname}" and {linked_to_fieldname} != "{value}" THEN "{value}"
THEN "{value}" '''.format(
'''.format( master_fieldname=d["master_fieldname"],
master_fieldname=d["master_fieldname"], linked_to_fieldname=d["linked_to_fieldname"],
linked_to_fieldname=d["linked_to_fieldname"], docname=frappe.db.escape(frappe.as_unicode(customer.name)),
docname=frappe.db.escape(frappe.as_unicode(customer.name)), value=frappe.db.escape(frappe.as_unicode(customer.get("customer_group")))))
value=frappe.db.escape(frappe.as_unicode(customer.get(source_fieldname)))))
frappe.db.sql(""" frappe.db.sql("""
update update
`tab{doctype}` `tab{doctype}`
set set
{linked_to_fieldname} = CASE {when_then_cond} ELSE `{linked_to_fieldname}` END {linked_to_fieldname} = CASE {when_then_cond} ELSE `{linked_to_fieldname}` END
""".format( """.format(
doctype = d['doctype'], doctype = d['doctype'],
when_then_cond=" ".join(when_then), when_then_cond=" ".join(when_then),
linked_to_fieldname=d.linked_to_fieldname linked_to_fieldname=d.linked_to_fieldname
)) ))

View File

@ -54,16 +54,14 @@ class Customer(TransactionBase):
self.flags.old_lead = self.lead_name self.flags.old_lead = self.lead_name
validate_party_accounts(self) validate_party_accounts(self)
self.validate_credit_limit_on_change() self.validate_credit_limit_on_change()
self.check_customer_group_or_territory_change() self.check_customer_group_change()
def check_customer_group_or_territory_change(self): def check_customer_group_change(self):
frappe.flags.customer_group_changed, frappe.flags.territory_changed = False, False frappe.flags.customer_group_changed = False
if not self.get('__islocal'): if not self.get('__islocal'):
if self.customer_group != frappe.db.get_value('Customer', self.name, 'customer_group'): if self.customer_group != frappe.db.get_value('Customer', self.name, 'customer_group'):
frappe.flags.customer_group_changed = True frappe.flags.customer_group_changed = True
if self.territory != frappe.db.get_value('Customer', self.name, 'territory'):
frappe.flags.territory_changed = True
def on_update(self): def on_update(self):
self.validate_name_with_customer_group() self.validate_name_with_customer_group()
@ -76,12 +74,10 @@ class Customer(TransactionBase):
if self.flags.is_new_doc: if self.flags.is_new_doc:
self.create_lead_address_contact() self.create_lead_address_contact()
self.update_territory_and_customer_groups() self.update_customer_groups()
def update_territory_and_customer_groups(self): def update_customer_groups(self):
ignore_doctypes = ["Lead", "Opportunity", "POS Profile", "Tax Rule", "Pricing Rule"] ignore_doctypes = ["Lead", "Opportunity", "POS Profile", "Tax Rule", "Pricing Rule"]
if frappe.flags.territory_changed:
update_linked_doctypes('Customer', self.name, 'Territory', self.territory, ignore_doctypes)
if frappe.flags.customer_group_changed: if frappe.flags.customer_group_changed:
update_linked_doctypes('Customer', self.name, 'Customer Group', update_linked_doctypes('Customer', self.name, 'Customer Group',
self.customer_group, ignore_doctypes) self.customer_group, ignore_doctypes)