diff --git a/addons/loyalty_delivery/__init__.py b/addons/loyalty_delivery/__init__.py new file mode 100644 index 00000000000..dc5e6b693d1 --- /dev/null +++ b/addons/loyalty_delivery/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import models diff --git a/addons/loyalty_delivery/__manifest__.py b/addons/loyalty_delivery/__manifest__.py new file mode 100644 index 00000000000..94acac101bc --- /dev/null +++ b/addons/loyalty_delivery/__manifest__.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. +{ + 'name': 'Coupons & Loyalty - Delivery', + 'summary': "Add a free shipping option to your rewards", + 'category': 'Sales', + 'version': '1.0', + 'depends': ['loyalty', 'delivery'], + 'data': [ + 'data/loyalty_delivery_data.xml', + 'views/loyalty_reward_views.xml', + ], + 'assets': { + }, + 'installable': True, + 'auto_install': True, + 'license': 'LGPL-3', +} diff --git a/addons/loyalty_delivery/data/loyalty_delivery_data.xml b/addons/loyalty_delivery/data/loyalty_delivery_data.xml new file mode 100644 index 00000000000..e2bbacbc133 --- /dev/null +++ b/addons/loyalty_delivery/data/loyalty_delivery_data.xml @@ -0,0 +1,9 @@ + + + + none + + + none + + diff --git a/addons/loyalty_delivery/models/__init__.py b/addons/loyalty_delivery/models/__init__.py new file mode 100644 index 00000000000..29b01a33788 --- /dev/null +++ b/addons/loyalty_delivery/models/__init__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import loyalty_program +from . import loyalty_reward diff --git a/addons/loyalty_delivery/models/loyalty_program.py b/addons/loyalty_delivery/models/loyalty_program.py new file mode 100644 index 00000000000..98155c27709 --- /dev/null +++ b/addons/loyalty_delivery/models/loyalty_program.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import _, api, models + +class LoyaltyProgram(models.Model): + _inherit = 'loyalty.program' + + @api.model + def _program_type_default_values(self): + res = super()._program_type_default_values() + # Add a loyalty reward for free shipping + res['loyalty']['reward_ids'].append((0, 0, { + 'reward_type': 'shipping', + 'required_points': 100, + })) + return res + + @api.model + def get_program_templates(self): + # Override 'promotion' template to say free shipping + res = super().get_program_templates() + res['promotion']['description'] = _("Automatic promotion: free shipping on orders higher than $50") + return res + + @api.model + def _get_template_values(self): + res = super()._get_template_values() + res['promotion']['reward_ids'] = [(5, 0, 0), (0, 0, { + 'reward_type': 'shipping', + })] + return res diff --git a/addons/loyalty_delivery/models/loyalty_reward.py b/addons/loyalty_delivery/models/loyalty_reward.py new file mode 100644 index 00000000000..cbf35ac6b0e --- /dev/null +++ b/addons/loyalty_delivery/models/loyalty_reward.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import _, fields, models + +class LoyaltyReward(models.Model): + _inherit = 'loyalty.reward' + + reward_type = fields.Selection( + selection_add=[('shipping', 'Free Shipping')], + ondelete={'shipping': 'set default'}) + + def _compute_description(self): + shipping_rewards = self.filtered(lambda r: r.reward_type == 'shipping') + super(LoyaltyReward, self - shipping_rewards)._compute_description() + shipping_rewards.description = _('Free shipping') + for reward in shipping_rewards: + if reward.discount_max_amount: + format_string = '%(amount)g %(symbol)s' + if reward.currency_id.position == 'before': + format_string = '%(symbol)s %(amount)g' + formatted_amount = format_string % {'amount': reward.discount_max_amount, 'symbol': reward.currency_id.symbol} + reward.description += _(' (Max %s)', formatted_amount) diff --git a/addons/loyalty_delivery/views/loyalty_reward_views.xml b/addons/loyalty_delivery/views/loyalty_reward_views.xml new file mode 100644 index 00000000000..559c3257161 --- /dev/null +++ b/addons/loyalty_delivery/views/loyalty_reward_views.xml @@ -0,0 +1,15 @@ + + + + loyalty.reward.view.form.inherit.loyalty.delivery + loyalty.reward + + + + + + + + + +