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),
 | |
| 			)
 |