diff --git a/addons/coupon/__manifest__.py b/addons/coupon/__manifest__.py
index f34ac2a0f98..bc60daf3e21 100644
--- a/addons/coupon/__manifest__.py
+++ b/addons/coupon/__manifest__.py
@@ -15,7 +15,7 @@
'views/coupon_program_views.xml',
'report/coupon_report.xml',
'report/coupon_report_templates.xml',
- 'data/coupon_email_data.xml',
+ 'data/expire_coupon_cron.xml',
],
'demo': [
'demo/coupon_demo.xml',
diff --git a/addons/coupon/data/expire_coupon_cron.xml b/addons/coupon/data/expire_coupon_cron.xml
new file mode 100644
index 00000000000..f72f93eb1ad
--- /dev/null
+++ b/addons/coupon/data/expire_coupon_cron.xml
@@ -0,0 +1,16 @@
+
+
+
+
+ Coupon: expire coupon based on date
+
+ code
+ model.cron_expire_coupon()
+
+
+ 1
+ days
+ -1
+
+
+
diff --git a/addons/coupon/models/coupon.py b/addons/coupon/models/coupon.py
index 8ae2c4577b0..f2d7d704a92 100644
--- a/addons/coupon/models/coupon.py
+++ b/addons/coupon/models/coupon.py
@@ -49,18 +49,21 @@ class Coupon(models.Model):
for coupon in self.filtered(lambda x: x.program_id.validity_duration > 0):
coupon.expiration_date = (coupon.create_date + relativedelta(days=coupon.program_id.validity_duration)).date()
+ def _get_default_template(self):
+ return False
+
def action_coupon_sent(self):
""" Open a window to compose an email, with the edi invoice template
message loaded by default
"""
self.ensure_one()
- template = self.env.ref('coupon.mail_template_sale_coupon', False)
+ default_template = self._get_default_template()
compose_form = self.env.ref('mail.email_compose_message_wizard_form', False)
ctx = dict(
default_model='coupon.coupon',
default_res_id=self.id,
- default_use_template=bool(template),
- default_template_id=template.id,
+ default_use_template=bool(default_template),
+ default_template_id=default_template and default_template.id,
default_composition_mode='comment',
custom_layout='mail.mail_notification_light',
mark_coupon_as_sent=True,
diff --git a/addons/coupon/wizard/coupon_generate.py b/addons/coupon/wizard/coupon_generate.py
index f89ee5558c4..a9f7b44f470 100644
--- a/addons/coupon/wizard/coupon_generate.py
+++ b/addons/coupon/wizard/coupon_generate.py
@@ -17,6 +17,7 @@ class CouponGenerate(models.TransientModel):
], default='nbr_coupon')
partners_domain = fields.Char(string="Customer", default='[]')
has_partner_email = fields.Boolean(compute='_compute_has_partner_email')
+ template_id = fields.Many2one('mail.template', 'Use template', domain="[('model', '=', 'coupon.coupon')]")
def generate_coupon(self):
"""Generates the number of coupons entered in wizard field nbr_coupons
@@ -34,10 +35,9 @@ class CouponGenerate(models.TransientModel):
vals.update({'partner_id': partner.id, 'state': 'sent' if partner.email else 'new'})
coupon = self.env['coupon.coupon'].create(vals)
subject = '%s, a coupon has been generated for you' % (partner.name)
- template = self.env.ref('coupon.mail_template_sale_coupon', raise_if_not_found=False)
- if template:
+ if self.template_id:
email_values = {'email_to': partner.email, 'email_from': self.env.user.email or '', 'subject': subject}
- template.send_mail(coupon.id, email_values=email_values, notif_layout='mail.mail_notification_light')
+ self.template_id.send_mail(coupon.id, email_values=email_values, notif_layout='mail.mail_notification_light')
@api.depends('partners_domain')
def _compute_has_partner_email(self):
diff --git a/addons/coupon/wizard/coupon_generate_views.xml b/addons/coupon/wizard/coupon_generate_views.xml
index 57d03dedb1e..3233b5350ef 100644
--- a/addons/coupon/wizard/coupon_generate_views.xml
+++ b/addons/coupon/wizard/coupon_generate_views.xml
@@ -10,6 +10,13 @@
+
+
+ Specify a mail template to send the generated coupons as email.
+
Some selected customers do not have an email address and will not receive the coupon.
diff --git a/addons/sale_coupon/__manifest__.py b/addons/sale_coupon/__manifest__.py
index da287bafc7d..d271d90ce2f 100644
--- a/addons/sale_coupon/__manifest__.py
+++ b/addons/sale_coupon/__manifest__.py
@@ -8,6 +8,7 @@
'version': '1.0',
'depends': ['coupon', 'sale'],
'data': [
+ 'data/coupon_email_data.xml',
'security/sale_coupon_security.xml',
'security/ir.model.access.csv',
'wizard/sale_coupon_apply_code_views.xml',
diff --git a/addons/coupon/data/coupon_email_data.xml b/addons/sale_coupon/data/coupon_email_data.xml
similarity index 85%
rename from addons/coupon/data/coupon_email_data.xml
rename to addons/sale_coupon/data/coupon_email_data.xml
index d28e2f80947..0db7dae986a 100644
--- a/addons/coupon/data/coupon_email_data.xml
+++ b/addons/sale_coupon/data/coupon_email_data.xml
@@ -1,8 +1,8 @@
-
- Coupon: Send by Email
+
+ [Sales] Coupon: Send by Email
Your reward coupon from ${object.program_id.company_id.name}
${object.program_id.company_id.email | safe}
@@ -95,22 +95,10 @@
-
+
Your Coupon Code
${object.partner_id.lang}
-
-
- Coupon: expire coupon based on date
-
- code
- model.cron_expire_coupon()
-
-
- 1
- days
- -1
-
diff --git a/addons/sale_coupon/models/coupon.py b/addons/sale_coupon/models/coupon.py
index afe3be5da56..d5a4ed179f8 100644
--- a/addons/sale_coupon/models/coupon.py
+++ b/addons/sale_coupon/models/coupon.py
@@ -41,3 +41,8 @@ class Coupon(models.Model):
if self.program_id not in applicable_programs and self.program_id.promo_applicability == 'on_current_order':
message = {'error': _('At least one of the required conditions is not met to get the reward!')}
return message
+
+ def _get_default_template(self):
+ if self.order_id:
+ return self.env.ref('sale_coupon.mail_template_sale_coupon', False)
+ return super()._get_default_template()
diff --git a/addons/sale_coupon/models/sale_order.py b/addons/sale_coupon/models/sale_order.py
index d5711874e2e..9d07251bbec 100644
--- a/addons/sale_coupon/models/sale_order.py
+++ b/addons/sale_coupon/models/sale_order.py
@@ -239,7 +239,7 @@ class SaleOrder(models.Model):
return coupon
def _send_reward_coupon_mail(self):
- template = self.env.ref('coupon.mail_template_sale_coupon', raise_if_not_found=False)
+ template = self.env.ref('sale_coupon.mail_template_sale_coupon', raise_if_not_found=False)
if template:
for order in self:
for coupon in order.generated_coupon_ids: