From cc8debe1e86dd1b50cc9f536481796ee6ffafcf6 Mon Sep 17 00:00:00 2001 From: Yannick Tivisse Date: Wed, 21 Jun 2017 10:24:02 +0200 Subject: [PATCH] [FIX] sale_coupon: Don't update automatic rewards on the fly Purpose ======= Currently we are updating the coupon rewards on the fly when creating/modifying/deleting a sales order line. To avoid multiple searches on res_partners and product to know whether the customer/product is valid on the sale coupon program, we store the applicable customers and products on the program according to the domain defined on it. This brings 2 issues: - The customers/products stored on the program are not updated (Was the original spec) - The checks are numerous and maybe overkill for the given results Specification ============= - Don't recompute the reward lines on SO modifications. Add a button to compute the line by hand and make an automatic compute on the SO validation or on the page shop/payment. - When recomputing the reward lines, make a search on the res_partners and products instead. Now that the action is not triggered so often we can afford to make a search. - Don't use the fields rule_partners_domain and rule_products_domain. This should be removed in master. - The field is_public_included is useless now. And we decided to make the coupon available for all the partners if they fit the domain on the program. --- tests/test_free_shipping_reward.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/test_free_shipping_reward.py b/tests/test_free_shipping_reward.py index fc8b6734919..b7780cd6f29 100644 --- a/tests/test_free_shipping_reward.py +++ b/tests/test_free_shipping_reward.py @@ -32,10 +32,12 @@ class TestSaleCouponProgramRules(TestSaleCouponCommon): 'product_uom_qty': 1.0, }) ]}) + order.recompute_coupon_lines() self.assertEqual(len(order.order_line.ids), 1) order.carrier_id = self.env['delivery.carrier'].search([])[1] order.delivery_set() + order.recompute_coupon_lines() self.assertEqual(len(order.order_line.ids), 2) # Test case 2: the amount is sufficient, the shipping should @@ -50,10 +52,12 @@ class TestSaleCouponProgramRules(TestSaleCouponCommon): }) ]}) + order.recompute_coupon_lines() self.assertEqual(len(order.order_line.ids), 4) # Test case 3: the amount is not sufficient now, the reward should be removed order.write({'order_line': [ (2, order.order_line.filtered(lambda line: line.product_id.id == self.product_A.id).id, False) ]}) + order.recompute_coupon_lines() self.assertEqual(len(order.order_line.ids), 2)