diff --git a/erpnext/patches/v12_0/update_pricing_rule_fields.py b/erpnext/patches/v12_0/update_pricing_rule_fields.py
index 8f8349e..985613a 100644
--- a/erpnext/patches/v12_0/update_pricing_rule_fields.py
+++ b/erpnext/patches/v12_0/update_pricing_rule_fields.py
@@ -5,67 +5,67 @@
 import frappe
 
 parentfield = {
-    'item_code': 'items',
-    'item_group': 'item_groups',
-    'brand': 'brands'
+	'item_code': 'items',
+	'item_group': 'item_groups',
+	'brand': 'brands'
 }
 
 def execute():
 
-    if not frappe.get_all('Pricing Rule', limit=1):
-        return
+	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'}
+	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))
+	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)
+		child_doc = frappe.scrub(doctype) + '_item'
+		frappe.reload_doc(module, 'doctype', child_doc, force=True)
 
-        child_doctype = doctype + ' Item'
+		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))
+		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)
+		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)))
+		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))
+		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')
+	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))
+	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})
+		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)))
+		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))
\ No newline at end of file
+		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))
