summaryrefslogtreecommitdiff
path: root/addons
diff options
context:
space:
mode:
Diffstat (limited to 'addons')
-rw-r--r--addons/sale_coupon/models/coupon_program.py3
-rw-r--r--addons/sale_coupon/tests/test_program_numbers.py81
2 files changed, 83 insertions, 1 deletions
diff --git a/addons/sale_coupon/models/coupon_program.py b/addons/sale_coupon/models/coupon_program.py
index 35fa15cb72e..ae348eae340 100644
--- a/addons/sale_coupon/models/coupon_program.py
+++ b/addons/sale_coupon/models/coupon_program.py
@@ -75,7 +75,8 @@ class CouponProgram(models.Model):
lines = order.order_line.filtered(lambda line:
program.reward_type == 'discount' and
(line.product_id == program.discount_line_product_id or
- line.product_id == program.reward_id.discount_line_product_id
+ line.product_id == program.reward_id.discount_line_product_id or
+ (program.program_type == 'promotion_program' and line.is_reward_line)
))
untaxed_amount = order_amount['amount_untaxed'] - sum([line.price_subtotal for line in lines])
tax_amount = order_amount['amount_tax'] - sum([line.price_tax for line in lines])
diff --git a/addons/sale_coupon/tests/test_program_numbers.py b/addons/sale_coupon/tests/test_program_numbers.py
index f29b4543079..2adf58064e4 100644
--- a/addons/sale_coupon/tests/test_program_numbers.py
+++ b/addons/sale_coupon/tests/test_program_numbers.py
@@ -772,3 +772,84 @@ class TestSaleCouponProgramNumbers(TestSaleCouponCommon):
sol1.write({'product_uom_qty': 2.0})
order.recompute_coupon_lines()
self.assertEqual(len(order.order_line.ids), 1, "The promotion lines should have been removed")
+
+ def test_program_step_percentages(self):
+ # test step-like percentages increase over amount
+ testprod = self.env['product.product'].create({
+ 'name': 'testprod',
+ 'lst_price': 118.0,
+ })
+
+ test10 = self.env['coupon.program'].create({
+ 'name': '10% discount',
+ 'promo_code_usage': 'no_code_needed',
+ 'program_type': 'promotion_program',
+ 'discount_type': 'percentage',
+ 'discount_percentage': 10.0,
+ 'rule_minimum_amount': 1500.0,
+ 'rule_minimum_amount_tax_inclusion': 'tax_included',
+ })
+ test15 = self.env['coupon.program'].create({
+ 'name': '15% discount',
+ 'promo_code_usage': 'no_code_needed',
+ 'program_type': 'promotion_program',
+ 'discount_type': 'percentage',
+ 'discount_percentage': 15.0,
+ 'rule_minimum_amount': 1750.0,
+ 'rule_minimum_amount_tax_inclusion': 'tax_included',
+ })
+ test20 = self.env['coupon.program'].create({
+ 'name': '20% discount',
+ 'promo_code_usage': 'no_code_needed',
+ 'program_type': 'promotion_program',
+ 'discount_type': 'percentage',
+ 'discount_percentage': 20.0,
+ 'rule_minimum_amount': 2000.0,
+ 'rule_minimum_amount_tax_inclusion': 'tax_included',
+ })
+ test25 = self.env['coupon.program'].create({
+ 'name': '25% discount',
+ 'promo_code_usage': 'no_code_needed',
+ 'program_type': 'promotion_program',
+ 'discount_type': 'percentage',
+ 'discount_percentage': 25.0,
+ 'rule_minimum_amount': 2500.0,
+ 'rule_minimum_amount_tax_inclusion': 'tax_included',
+ })
+
+ #apply 10%
+ order = self.empty_order
+ order_line = self.env['sale.order.line'].create({
+ 'product_id': testprod.id,
+ 'name': 'testprod',
+ 'product_uom_qty': 14.0,
+ 'price_unit': 118.0,
+ 'order_id': order.id,
+ 'tax_id': False,
+ })
+ order.recompute_coupon_lines()
+ self.assertEqual(order.amount_total, 1486.80, "10% discount should be applied")
+ self.assertEqual(len(order.order_line.ids), 2, "discount should be applied")
+
+ #switch to 15%
+ order_line.write({'product_uom_qty': 15})
+ self.assertEqual(order.amount_total, 1604.8, "Discount improperly applied")
+ self.assertEqual(len(order.order_line.ids), 2, "No discount applied while it should")
+
+ #switch to 20%
+ order_line.write({'product_uom_qty': 17})
+ order.recompute_coupon_lines()
+ self.assertEqual(order.amount_total, 1604.8, "Discount improperly applied")
+ self.assertEqual(len(order.order_line.ids), 2, "No discount applied while it should")
+
+ #still 20%
+ order_line.write({'product_uom_qty': 20})
+ order.recompute_coupon_lines()
+ self.assertEqual(order.amount_total, 1888.0, "Discount improperly applied")
+ self.assertEqual(len(order.order_line.ids), 2, "No discount applied while it should")
+
+ #back to 10%
+ order_line.write({'product_uom_qty': 14})
+ order.recompute_coupon_lines()
+ self.assertEqual(order.amount_total, 1486.80, "Discount improperly applied")
+ self.assertEqual(len(order.order_line.ids), 2, "No discount applied while it should")