[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.
This commit is contained in:
Yannick Tivisse
2017-06-21 15:55:27 +02:00
parent 3ed9b783dc
commit 8f6ec58757
11 changed files with 59 additions and 51 deletions
@@ -42,10 +42,12 @@ class TestProgramWithCodeOperations(TestSaleCouponCommon):
self.env['sale.coupon.apply.code'].with_context(active_id=order.id).create({
'coupon_code': self.code_promotion_program.coupon_ids.code
}).process_coupon()
order.recompute_coupon_lines()
self.assertEqual(len(order.order_line.ids), 2)
# Remove the product A from the sale order
order.write({'order_line': [(2, order.order_line[0].id, False)]})
order.recompute_coupon_lines()
self.assertEqual(len(order.order_line.ids), 0)
def test_on_next_order_reward_promo_program(self):
@@ -71,6 +73,7 @@ def test_on_next_order_reward_promo_program(self):
'coupon_code': 'bleurk'
}).process_coupon()
# Ensure that the coupon is correctly generated
order.recompute_coupon_lines()
self.assertEqual(len(self.immediate_promotion_program.coupon_ids.ids), 1)
generated_coupon = self.immediate_promotion_program.coupon_ids[0]
@@ -89,4 +92,5 @@ def test_on_next_order_reward_promo_program(self):
'coupon_code': generated_coupon.code
})
# Ensure that the generated coupon is valid
order.recompute_coupon_lines()
self.assertEqual(len(order.order_line.ids), 2)