diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py index e7a8ad0f723..86a1b9a768a 100644 --- a/erpnext/controllers/accounts_controller.py +++ b/erpnext/controllers/accounts_controller.py @@ -149,6 +149,7 @@ class AccountsController(TransactionBase): self.validate_inter_company_reference() + self.disable_pricing_rule_on_internal_transfer() self.set_incoming_rate() if self.meta.get_field("currency"): @@ -383,6 +384,14 @@ class AccountsController(TransactionBase): 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 @@ -1736,6 +1745,8 @@ class AccountsController(TransactionBase): 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 6b8fb9867a4..fffcdca3802 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 @@ class TestDeliveryNote(FrappeTestCase): 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 @@ class TestDeliveryNote(FrappeTestCase): } ).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 @@ class TestDeliveryNote(FrappeTestCase): 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)