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