fix: disable pricing rules for internal transfers (#31034)

* fix: disable pricing rules for internal transfers

* fix: only apply validation on internal transfers

Co-authored-by: Marica <maricadsouza221197@gmail.com>

* fix: internal_party_field undefined

Co-authored-by: Marica <maricadsouza221197@gmail.com>
diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py
index 46013bb..7761551 100644
--- a/erpnext/controllers/accounts_controller.py
+++ b/erpnext/controllers/accounts_controller.py
@@ -148,6 +148,7 @@
 
 		self.validate_inter_company_reference()
 
+		self.disable_pricing_rule_on_internal_transfer()
 		self.set_incoming_rate()
 
 		if self.meta.get_field("currency"):
@@ -382,6 +383,14 @@
 				msg += _("Please create purchase from internal sale or delivery document itself")
 				frappe.throw(msg, title=_("Internal Sales Reference Missing"))
 
+	def disable_pricing_rule_on_internal_transfer(self):
+		if not self.get("ignore_pricing_rule") and self.is_internal_transfer():
+			self.ignore_pricing_rule = 1
+			frappe.msgprint(
+				_("Disabled pricing rules since this {} is an internal transfer").format(self.doctype),
+				alert=1,
+			)
+
 	def validate_due_date(self):
 		if self.get("is_pos"):
 			return
@@ -1738,6 +1747,8 @@
 			internal_party_field = "is_internal_customer"
 		elif self.doctype in ("Purchase Invoice", "Purchase Receipt", "Purchase Order"):
 			internal_party_field = "is_internal_supplier"
+		else:
+			return False
 
 		if self.get(internal_party_field) and (self.represents_company == self.company):
 			return True
diff --git a/erpnext/stock/doctype/delivery_note/test_delivery_note.py b/erpnext/stock/doctype/delivery_note/test_delivery_note.py
index 6b8fb98..fffcdca 100644
--- a/erpnext/stock/doctype/delivery_note/test_delivery_note.py
+++ b/erpnext/stock/doctype/delivery_note/test_delivery_note.py
@@ -1007,6 +1007,7 @@
 		customer = create_internal_customer(represents_company=company)
 		rate = 42
 
+		# Create item price and pricing rule
 		frappe.get_doc(
 			{
 				"item_code": item,
@@ -1016,6 +1017,25 @@
 			}
 		).insert()
 
+		frappe.get_doc(
+			{
+				"doctype": "Pricing Rule",
+				"title": frappe.generate_hash(),
+				"apply_on": "Item Code",
+				"price_or_product_discount": "Price",
+				"selling": 1,
+				"company": company,
+				"margin_type": "Percentage",
+				"margin_rate_or_amount": 10,
+				"apply_discount_on": "Grand Total",
+				"items": [
+					{
+						"item_code": item,
+					}
+				],
+			}
+		).insert()
+
 		make_stock_entry(target=warehouse, qty=5, basic_rate=rate, item_code=item)
 		dn = create_delivery_note(
 			item_code=item,
@@ -1025,12 +1045,14 @@
 			rate=500,
 			warehouse=warehouse,
 			target_warehouse=target,
+			ignore_pricing_rule=0,
 			do_not_save=True,
 			do_not_submit=True,
 		)
 
 		self.assertEqual(dn.items[0].rate, 500)  # haven't saved yet
 		dn.save()
+		self.assertEqual(dn.ignore_pricing_rule, 1)
 
 		# rate should reset to incoming rate
 		self.assertEqual(dn.items[0].rate, rate)