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
+
+
+
+
+
+
+
+
+
+