[FIX] loyalty: Prevent reward_ids to be reset to default

Steps:
    - Install `sale_management`
    - Go to `Discount & Loyalty`
    - Create a new one and set a name
    - Change default program type from `discount` to `buy x get y`
    - Remove the default rewards
    - Add a new one (the default one)
    - Click `Save & Close`
    - Trigger save

Rewards is reset to default `discount` instead of `buy x get y`

closes odoo/odoo#138523

X-original-commit: 798c69f44bfde2f66826775a5a11fe5e51adb9a8
Signed-off-by: Victor Feyens (vfe) <vfe@odoo.com>
This commit is contained in:
Achraf (abz)
2023-10-12 17:20:44 +00:00
committed by vava-odoo
parent d2462d8627
commit a83bb76011
2 changed files with 13 additions and 2 deletions
+12 -1
View File
@@ -5,7 +5,7 @@ from psycopg2 import IntegrityError
from odoo.exceptions import ValidationError
from odoo.fields import Command
from odoo.tests import tagged, TransactionCase
from odoo.tests import tagged, TransactionCase, Form
from odoo.tools import mute_logger
from unittest.mock import patch
@@ -113,6 +113,17 @@ class TestLoyalty(TransactionCase):
})
self.assertTrue(all(r.reward_type == 'product' for r in self.program.reward_ids))
def test_loyalty_program_preserve_reward_with_always_edit(self):
with Form(self.env['loyalty.program']) as program_form:
program_form.name = 'Test'
program_form.program_type = 'buy_x_get_y'
program_form.reward_ids.remove(0)
with program_form.reward_ids.new() as new_reward:
new_reward.reward_product_qty = 2
program = program_form.save()
self.assertEqual(program.reward_ids.reward_type, 'product')
self.assertEqual(program.reward_ids.reward_product_qty, 2)
def test_archiving_unarchiving(self):
self.program.write({
'reward_ids': [
@@ -14,7 +14,7 @@
<sheet>
<group>
<group string="Reward" name="reward_type_group">
<field name="reward_type" widget="selection" readonly="program_type == 'buy_x_get_y'"/>
<field name="reward_type" widget="selection" force_save="1" readonly="program_type == 'buy_x_get_y'"/>
<label for="discount" invisible="reward_type != 'discount'"/>
<div class="d-flex flex-row" invisible="reward_type != 'discount'">
<field name="discount" class="oe_inline me-1"/>