brotherton-erpnext/erpnext/patches/v12_0/update_pricing_rule_fields.py
2022-03-28 18:52:46 +05:30

124 lines
2.9 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),
)