From 0cb543234c36ba2bf91d25f605e10d0b626b756b Mon Sep 17 00:00:00 2001 From: Charles-Henri Decultot Date: Fri, 28 Jun 2024 17:41:53 +0200 Subject: [PATCH 1/3] test: Pricing rule on save override --- .../doctype/pricing_rule/test_pricing_rule.py | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/erpnext/accounts/doctype/pricing_rule/test_pricing_rule.py b/erpnext/accounts/doctype/pricing_rule/test_pricing_rule.py index 25140745eb..5d98fd5888 100644 --- a/erpnext/accounts/doctype/pricing_rule/test_pricing_rule.py +++ b/erpnext/accounts/doctype/pricing_rule/test_pricing_rule.py @@ -1300,6 +1300,70 @@ class TestPricingRule(unittest.TestCase): item_group_rule.delete() item_code_rule.delete() + def test_pricing_rule_override(self): + """ + Pricing rule validation on save can be overriden by adding a server script triggered `Before Validate` + with the following code: `doc.flags.ignore_pricing_rule = True` + """ + + from erpnext.selling.doctype.quotation.test_quotation import make_quotation + + test_record = { + "doctype": "Pricing Rule", + "title": "_Test Pricing Rule", + "apply_on": "Item Code", + "items": [{"item_code": "_Test Item"}], + "currency": "USD", + "selling": 1, + "rate_or_discount": "Discount Percentage", + "rate": 0, + "discount_percentage": 10, + "company": "_Test Company", + } + frappe.get_doc(test_record.copy()).insert() + + item_price = frappe.new_doc("Item Price") + item_price.item_code = "_Test Item" + item_price.uom = "_Test UOM" + item_price.price_list = "Standard Selling" + item_price.price_list_rate = 100.0 + item_price.insert() + + quotation = make_quotation( + company="_Test Company", currency="USD", item="_Test Item", uom="_Test UOM", do_not_submit=True + ) + + self.assertEqual(quotation.items[0].rate, 90.0) + + quotation.items[0].rate = 100 + quotation.items[0].discount_percentage = 0.0 + quotation.items[0].discount_amount = 0.0 + quotation.flags.ignore_pricing_rule = True + quotation.save() + + quotation.reload() + self.assertEqual(quotation.items[0].rate, 100.0) + + quotation.items[0].rate = 100 + quotation.items[0].discount_percentage = 0.0 + quotation.items[0].discount_amount = 0.0 + quotation.flags.ignore_pricing_rule = False + quotation.save() + + quotation.reload() + self.assertEqual(quotation.items[0].rate, 90.0) + + quotation.append( + "items", + { + "item_code": "_Test Item", + "qty": 10, + "uom": "_Test UOM", + }, + ) + quotation.save() + self.assertEqual(quotation.items[1].rate, 90.0) + test_dependencies = ["Campaign"] -- GitLab From 9ab0313886e936d9736c37d91854a0f1de4d116f Mon Sep 17 00:00:00 2001 From: Charles-Henri Decultot Date: Fri, 28 Jun 2024 18:58:21 +0200 Subject: [PATCH 2/3] fix: cleanup after test --- erpnext/accounts/doctype/pricing_rule/test_pricing_rule.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/erpnext/accounts/doctype/pricing_rule/test_pricing_rule.py b/erpnext/accounts/doctype/pricing_rule/test_pricing_rule.py index 5d98fd5888..68dc85708c 100644 --- a/erpnext/accounts/doctype/pricing_rule/test_pricing_rule.py +++ b/erpnext/accounts/doctype/pricing_rule/test_pricing_rule.py @@ -1364,6 +1364,8 @@ class TestPricingRule(unittest.TestCase): quotation.save() self.assertEqual(quotation.items[1].rate, 90.0) + frappe.delete_doc("Item Price", item_price, force=True) + test_dependencies = ["Campaign"] -- GitLab From dec60d6dc1c375aedf5bea20247d5ece7b266a9d Mon Sep 17 00:00:00 2001 From: Charles-Henri Decultot Date: Fri, 28 Jun 2024 21:47:51 +0200 Subject: [PATCH 3/3] fix: pass name only --- erpnext/accounts/doctype/pricing_rule/test_pricing_rule.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/accounts/doctype/pricing_rule/test_pricing_rule.py b/erpnext/accounts/doctype/pricing_rule/test_pricing_rule.py index 68dc85708c..ea01f3be0c 100644 --- a/erpnext/accounts/doctype/pricing_rule/test_pricing_rule.py +++ b/erpnext/accounts/doctype/pricing_rule/test_pricing_rule.py @@ -1364,7 +1364,7 @@ class TestPricingRule(unittest.TestCase): quotation.save() self.assertEqual(quotation.items[1].rate, 90.0) - frappe.delete_doc("Item Price", item_price, force=True) + frappe.delete_doc("Item Price", item_price.name, force=True) test_dependencies = ["Campaign"] -- GitLab