72 lines
2.7 KiB
Python
72 lines
2.7 KiB
Python
# Copyright (c) 2017, Frappe and Contributors
|
|
# License: GNU General Public License v3. See license.txt
|
|
|
|
|
|
import frappe
|
|
|
|
parentfield = {
|
|
'item_code': 'items',
|
|
'item_group': 'item_groups',
|
|
'brand': 'brands'
|
|
}
|
|
|
|
def execute():
|
|
|
|
if not frappe.get_all('Pricing Rule', limit=1):
|
|
return
|
|
|
|
frappe.reload_doc('accounts', 'doctype', 'pricing_rule_detail')
|
|
doctypes = {'Supplier Quotation': 'buying', 'Purchase Order': 'buying', 'Purchase Invoice': 'accounts',
|
|
'Purchase Receipt': 'stock', 'Quotation': 'selling', 'Sales Order': 'selling',
|
|
'Sales Invoice': 'accounts', 'Delivery Note': 'stock'}
|
|
|
|
for doctype, module in doctypes.items():
|
|
frappe.reload_doc(module, 'doctype', frappe.scrub(doctype))
|
|
|
|
child_doc = frappe.scrub(doctype) + '_item'
|
|
frappe.reload_doc(module, 'doctype', child_doc, force=True)
|
|
|
|
child_doctype = doctype + ' Item'
|
|
|
|
frappe.db.sql(""" UPDATE `tab{child_doctype}` SET pricing_rules = pricing_rule
|
|
WHERE docstatus < 2 and pricing_rule is not null and pricing_rule != ''
|
|
""".format(child_doctype= child_doctype))
|
|
|
|
data = frappe.db.sql(""" SELECT pricing_rule, name, parent,
|
|
parenttype, creation, modified, docstatus, modified_by, owner, name
|
|
FROM `tab{child_doc}` where docstatus < 2 and pricing_rule is not null
|
|
and pricing_rule != ''""".format(child_doc=child_doctype), as_dict=1)
|
|
|
|
values = []
|
|
for d in data:
|
|
values.append((d.pricing_rule, d.name, d.parent, 'pricing_rules', d.parenttype,
|
|
d.creation, d.modified, d.docstatus, d.modified_by, d.owner, frappe.generate_hash("", 10)))
|
|
|
|
if values:
|
|
frappe.db.sql(""" INSERT INTO
|
|
`tabPricing Rule Detail` (`pricing_rule`, `child_docname`, `parent`, `parentfield`, `parenttype`,
|
|
`creation`, `modified`, `docstatus`, `modified_by`, `owner`, `name`)
|
|
VALUES {values} """.format(values=', '.join(['%s'] * len(values))), tuple(values))
|
|
|
|
frappe.reload_doc('accounts', 'doctype', 'pricing_rule')
|
|
|
|
for doctype, apply_on in {'Pricing Rule Item Code': 'Item Code',
|
|
'Pricing Rule Item Group': 'Item Group', 'Pricing Rule Brand': 'Brand'}.items():
|
|
frappe.reload_doc('accounts', 'doctype', frappe.scrub(doctype))
|
|
|
|
field = frappe.scrub(apply_on)
|
|
data = frappe.get_all('Pricing Rule', fields=[field, "name", "creation", "modified",
|
|
"owner", "modified_by"], filters= {'apply_on': apply_on})
|
|
|
|
values = []
|
|
for d in data:
|
|
values.append((d.get(field), d.name, parentfield.get(field), 'Pricing Rule',
|
|
d.creation, d.modified, d.owner, d.modified_by, frappe.generate_hash("", 10)))
|
|
|
|
if values:
|
|
frappe.db.sql(""" INSERT INTO
|
|
`tab{doctype}` ({field}, parent, parentfield, parenttype, creation, modified,
|
|
owner, modified_by, name)
|
|
VALUES {values} """.format(doctype=doctype,
|
|
field=field, values=', '.join(['%s'] * len(values))), tuple(values))
|