fix(test): pass price_list_rate only if pricing rule has to be removed
diff --git a/erpnext/accounts/doctype/pos_invoice/test_pos_invoice.py b/erpnext/accounts/doctype/pos_invoice/test_pos_invoice.py
index ba751c0..cf8affd 100644
--- a/erpnext/accounts/doctype/pos_invoice/test_pos_invoice.py
+++ b/erpnext/accounts/doctype/pos_invoice/test_pos_invoice.py
@@ -586,23 +586,29 @@
item_price.insert()
pr = make_pricing_rule(selling=1, priority=5, discount_percentage=10)
pr.save()
- pos_inv = create_pos_invoice(qty=1, do_not_submit=1)
- pos_inv.items[0].rate = 300
- pos_inv.save()
- self.assertEquals(pos_inv.items[0].discount_percentage, 10)
- # rate shouldn't change
- self.assertEquals(pos_inv.items[0].rate, 405)
- pos_inv.ignore_pricing_rule = 1
- pos_inv.items[0].rate = 300
- pos_inv.save()
- self.assertEquals(pos_inv.ignore_pricing_rule, 1)
- # rate should change since pricing rules are ignored
- self.assertEquals(pos_inv.items[0].rate, 300)
+ try:
+ pos_inv = create_pos_invoice(qty=1, do_not_submit=1)
+ pos_inv.items[0].rate = 300
+ pos_inv.save()
+ self.assertEquals(pos_inv.items[0].discount_percentage, 10)
+ # rate shouldn't change
+ self.assertEquals(pos_inv.items[0].rate, 405)
- item_price.delete()
- pos_inv.delete()
- pr.delete()
+ pos_inv.ignore_pricing_rule = 1
+ pos_inv.save()
+ self.assertEquals(pos_inv.ignore_pricing_rule, 1)
+ # rate should reset since pricing rules are ignored
+ self.assertEquals(pos_inv.items[0].rate, 450)
+
+ pos_inv.items[0].rate = 300
+ pos_inv.save()
+ self.assertEquals(pos_inv.items[0].rate, 300)
+
+ finally:
+ item_price.delete()
+ pos_inv.delete()
+ pr.delete()
def create_pos_invoice(**args):
diff --git a/erpnext/accounts/doctype/pricing_rule/pricing_rule.py b/erpnext/accounts/doctype/pricing_rule/pricing_rule.py
index 65ded03..933fda8 100644
--- a/erpnext/accounts/doctype/pricing_rule/pricing_rule.py
+++ b/erpnext/accounts/doctype/pricing_rule/pricing_rule.py
@@ -250,13 +250,16 @@
"parent": args.parent,
"parenttype": args.parenttype,
"child_docname": args.get('child_docname'),
- "price_list_rate": args.get('price_list_rate')
})
if args.ignore_pricing_rule or not args.item_code:
if frappe.db.exists(args.doctype, args.name) and args.get("pricing_rules"):
- item_details = remove_pricing_rule_for_item(args.get("pricing_rules"),
- item_details, args.get('item_code'))
+ item_details = remove_pricing_rule_for_item(
+ args.get("pricing_rules"),
+ item_details,
+ item_code=args.get("item_code"),
+ rate=args.get("price_list_rate"),
+ )
return item_details
update_args_for_pricing_rule(args)
@@ -309,8 +312,12 @@
if not doc: return item_details
elif args.get("pricing_rules"):
- item_details = remove_pricing_rule_for_item(args.get("pricing_rules"),
- item_details, args.get('item_code'))
+ item_details = remove_pricing_rule_for_item(
+ args.get("pricing_rules"),
+ item_details,
+ item_code=args.get("item_code"),
+ rate=args.get("price_list_rate"),
+ )
return item_details
@@ -391,7 +398,7 @@
item_details[field] += (pricing_rule.get(field, 0)
if pricing_rule else args.get(field, 0))
-def remove_pricing_rule_for_item(pricing_rules, item_details, item_code=None):
+def remove_pricing_rule_for_item(pricing_rules, item_details, item_code=None, rate=None):
from erpnext.accounts.doctype.pricing_rule.utils import (
get_applied_pricing_rules,
get_pricing_rule_items,
@@ -404,7 +411,7 @@
if pricing_rule.rate_or_discount == 'Discount Percentage':
item_details.discount_percentage = 0.0
item_details.discount_amount = 0.0
- item_details.rate = item_details.get('price_list_rate', 0)
+ item_details.rate = rate or 0.0
if pricing_rule.rate_or_discount == 'Discount Amount':
item_details.discount_amount = 0.0
@@ -435,9 +442,12 @@
out = []
for item in item_list:
item = frappe._dict(item)
- if item.get('pricing_rules'):
- out.append(remove_pricing_rule_for_item(item.get("pricing_rules"),
- item, item.item_code))
+ if item.get("pricing_rules"):
+ out.append(
+ remove_pricing_rule_for_item(
+ item.get("pricing_rules"), item, item.item_code, item.get("price_list_rate")
+ )
+ )
return out