[IMP] loyalty: use program default values for reward and rules
Prior to this commit the default values of a reward/rule would be static and not depend on the program type. It will now use the default value if the program_type is given in the context. TaskId-2982239 Part-of: odoo/odoo#100170
This commit is contained in:
@@ -12,6 +12,21 @@ class LoyaltyReward(models.Model):
|
||||
_rec_name = 'description'
|
||||
_order = 'required_points asc'
|
||||
|
||||
@api.model
|
||||
def default_get(self, fields_list):
|
||||
# Try to copy the values of the program types default's
|
||||
result = super().default_get(fields_list)
|
||||
if 'program_type' in self.env.context:
|
||||
program_type = self.env.context['program_type']
|
||||
program_default_values = self.env['loyalty.program']._program_type_default_values()
|
||||
if program_type in program_default_values and\
|
||||
len(program_default_values[program_type]['reward_ids']) == 2 and\
|
||||
isinstance(program_default_values[program_type]['reward_ids'][1][2], dict):
|
||||
result.update({
|
||||
k: v for k, v in program_default_values[program_type]['reward_ids'][1][2].items() if k in fields_list
|
||||
})
|
||||
return result
|
||||
|
||||
def _get_discount_mode_select(self):
|
||||
# The value is provided in the loyalty program's view since we may not have a program_id yet
|
||||
# and makes sure to display the currency related to the program instead of the company's.
|
||||
|
||||
@@ -11,6 +11,21 @@ class LoyaltyRule(models.Model):
|
||||
_name = 'loyalty.rule'
|
||||
_description = 'Loyalty Rule'
|
||||
|
||||
@api.model
|
||||
def default_get(self, fields_list):
|
||||
# Try to copy the values of the program types default's
|
||||
result = super().default_get(fields_list)
|
||||
if 'program_type' in self.env.context:
|
||||
program_type = self.env.context['program_type']
|
||||
program_default_values = self.env['loyalty.program']._program_type_default_values()
|
||||
if program_type in program_default_values and\
|
||||
len(program_default_values[program_type]['rule_ids']) == 2 and\
|
||||
isinstance(program_default_values[program_type]['rule_ids'][1][2], dict):
|
||||
result.update({
|
||||
k: v for k, v in program_default_values[program_type]['rule_ids'][1][2].items() if k in fields_list
|
||||
})
|
||||
return result
|
||||
|
||||
def _get_reward_point_mode_selection(self):
|
||||
# The value is provided in the loyalty program's view since we may not have a program_id yet
|
||||
# and makes sure to display the currency related to the program instead of the company's.
|
||||
|
||||
@@ -114,11 +114,11 @@
|
||||
<group>
|
||||
<group>
|
||||
<field name="rule_ids" colspan="2" mode="kanban" nolabel="1" add-label="Add a rule"
|
||||
class="o_loyalty_kanban_inline" widget="loyalty_one2many" context="{'currency_symbol': currency_symbol}"/>
|
||||
class="o_loyalty_kanban_inline" widget="loyalty_one2many" context="{'currency_symbol': currency_symbol, 'program_type': program_type}"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="reward_ids" colspan="2" mode="kanban" nolabel="1" add-label="Add a reward"
|
||||
class="o_loyalty_kanban_inline" widget="loyalty_one2many" context="{'currency_symbol': currency_symbol}"/>
|
||||
class="o_loyalty_kanban_inline" widget="loyalty_one2many" context="{'currency_symbol': currency_symbol, 'program_type': program_type}"/>
|
||||
</group>
|
||||
</group>
|
||||
</page>
|
||||
|
||||
Reference in New Issue
Block a user