mirror of
https://github.com/frappe/erpnext.git
synced 2026-04-12 19:35:09 +00:00
fix: multiple pricing rules with discount amount and discount percentage not working (backport #41211) (backport #41241) (#41275)
fix: multiple pricing rules with discount amount and discount percentage not working (backport #41211) (#41241) fix: multiple pricing rules with discount amount and discount percentage not working (#41211) (cherry picked from commit54313b5db9) Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com> (cherry picked from commitda3010a41f) Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
This commit is contained in:
@@ -573,6 +573,22 @@ def apply_price_discount_rule(pricing_rule, item_details, args):
|
|||||||
if pricing_rule.apply_discount_on_rate and item_details.get("discount_percentage"):
|
if pricing_rule.apply_discount_on_rate and item_details.get("discount_percentage"):
|
||||||
# Apply discount on discounted rate
|
# Apply discount on discounted rate
|
||||||
item_details[field] += (100 - item_details[field]) * (pricing_rule.get(field, 0) / 100)
|
item_details[field] += (100 - item_details[field]) * (pricing_rule.get(field, 0) / 100)
|
||||||
|
elif args.price_list_rate:
|
||||||
|
value = pricing_rule.get(field, 0)
|
||||||
|
calculate_discount_percentage = False
|
||||||
|
if field == "discount_percentage":
|
||||||
|
field = "discount_amount"
|
||||||
|
value = args.price_list_rate * (value / 100)
|
||||||
|
calculate_discount_percentage = True
|
||||||
|
|
||||||
|
if field not in item_details:
|
||||||
|
item_details.setdefault(field, 0)
|
||||||
|
|
||||||
|
item_details[field] += value if pricing_rule else args.get(field, 0)
|
||||||
|
if calculate_discount_percentage and args.price_list_rate and item_details.discount_amount:
|
||||||
|
item_details.discount_percentage = flt(
|
||||||
|
(flt(item_details.discount_amount) / flt(args.price_list_rate)) * 100
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
if field not in item_details:
|
if field not in item_details:
|
||||||
item_details.setdefault(field, 0)
|
item_details.setdefault(field, 0)
|
||||||
|
|||||||
@@ -1104,6 +1104,59 @@ class TestPricingRule(unittest.TestCase):
|
|||||||
self.assertEqual(so.items[1].item_code, "_Test Item")
|
self.assertEqual(so.items[1].item_code, "_Test Item")
|
||||||
self.assertEqual(so.items[1].qty, 4)
|
self.assertEqual(so.items[1].qty, 4)
|
||||||
|
|
||||||
|
def test_apply_multiple_pricing_rules_for_discount_percentage_and_amount(self):
|
||||||
|
frappe.delete_doc_if_exists("Pricing Rule", "_Test Pricing Rule 1")
|
||||||
|
frappe.delete_doc_if_exists("Pricing Rule", "_Test Pricing Rule 2")
|
||||||
|
test_record = {
|
||||||
|
"doctype": "Pricing Rule",
|
||||||
|
"title": "_Test Pricing Rule 1",
|
||||||
|
"name": "_Test Pricing Rule 1",
|
||||||
|
"apply_on": "Item Code",
|
||||||
|
"currency": "USD",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"item_code": "_Test Item",
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"selling": 1,
|
||||||
|
"price_or_product_discount": "Price",
|
||||||
|
"rate_or_discount": "Discount Percentage",
|
||||||
|
"discount_percentage": 10,
|
||||||
|
"apply_multiple_pricing_rules": 1,
|
||||||
|
"company": "_Test Company",
|
||||||
|
}
|
||||||
|
|
||||||
|
frappe.get_doc(test_record.copy()).insert()
|
||||||
|
|
||||||
|
test_record = {
|
||||||
|
"doctype": "Pricing Rule",
|
||||||
|
"title": "_Test Pricing Rule 2",
|
||||||
|
"name": "_Test Pricing Rule 2",
|
||||||
|
"apply_on": "Item Code",
|
||||||
|
"currency": "USD",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"item_code": "_Test Item",
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"selling": 1,
|
||||||
|
"price_or_product_discount": "Price",
|
||||||
|
"rate_or_discount": "Discount Amount",
|
||||||
|
"discount_amount": 100,
|
||||||
|
"apply_multiple_pricing_rules": 1,
|
||||||
|
"company": "_Test Company",
|
||||||
|
}
|
||||||
|
|
||||||
|
frappe.get_doc(test_record.copy()).insert()
|
||||||
|
|
||||||
|
so = make_sales_order(item_code="_Test Item", qty=1, price_list_rate=1000, do_not_submit=True)
|
||||||
|
self.assertEqual(so.items[0].discount_amount, 200)
|
||||||
|
self.assertEqual(so.items[0].rate, 800)
|
||||||
|
|
||||||
|
frappe.delete_doc_if_exists("Sales Order", so.name)
|
||||||
|
frappe.delete_doc_if_exists("Pricing Rule", "_Test Pricing Rule 1")
|
||||||
|
frappe.delete_doc_if_exists("Pricing Rule", "_Test Pricing Rule 2")
|
||||||
|
|
||||||
|
|
||||||
test_dependencies = ["Campaign"]
|
test_dependencies = ["Campaign"]
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user