mail_template_sale_coupon is specific to sale_coupon so we are moving it back to sale_coupon module. Additionally, we add a way of selecting a mail template when generating coupons for customers.
49 lines
3.1 KiB
Python
49 lines
3.1 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo import api, fields, models, _
|
|
|
|
|
|
class Coupon(models.Model):
|
|
_inherit = 'coupon.coupon'
|
|
|
|
order_id = fields.Many2one('sale.order', 'Order Reference', readonly=True,
|
|
help="The sales order from which coupon is generated")
|
|
sales_order_id = fields.Many2one('sale.order', 'Used in', readonly=True,
|
|
help="The sales order on which the coupon is applied")
|
|
|
|
def _check_coupon_code(self, order_date, partner_id, **kwargs):
|
|
message = super(Coupon, self)._check_coupon_code(order_date, partner_id, **kwargs)
|
|
order = kwargs.get('order', False)
|
|
if message.get('error', False) or not order:
|
|
return message
|
|
|
|
applicable_programs = order._get_applicable_programs()
|
|
# Minimum requirement should not be checked if the coupon got generated by a promotion program (the requirement should have only be checked to generate the coupon)
|
|
if self.program_id.program_type == 'coupon_program' and not self.program_id._filter_on_mimimum_amount(order):
|
|
message = {'error': _(
|
|
'A minimum of %(amount)s %(currency)s should be purchased to get the reward',
|
|
amount=self.program_id.rule_minimum_amount,
|
|
currency=self.program_id.currency_id.name
|
|
)}
|
|
elif self.program_id in order.applied_coupon_ids.mapped('program_id'):
|
|
message = {'error': _('A Coupon is already applied for the same reward')}
|
|
elif self.program_id._is_global_discount_program() and order._is_global_discount_already_applied():
|
|
message = {'error': _('Global discounts are not cumulable.')}
|
|
elif self.program_id.reward_type == 'product' and not order._is_reward_in_order_lines(self.program_id):
|
|
message = {'error': _('The reward products should be in the sales order lines to apply the discount.')}
|
|
elif not self.program_id._is_valid_partner(order.partner_id):
|
|
message = {'error': _("The customer doesn't have access to this reward.")}
|
|
# Product requirement should not be checked if the coupon got generated by a promotion program (the requirement should have only be checked to generate the coupon)
|
|
elif self.program_id.program_type == 'coupon_program' and not self.program_id._filter_programs_on_products(order):
|
|
message = {'error': _("You don't have the required product quantities on your sales order. All the products should be recorded on the sales order. (Example: You need to have 3 T-shirts on your sales order if the promotion is 'Buy 2, Get 1 Free').")}
|
|
else:
|
|
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()
|