1# -*- coding: utf-8 -*- 2 3from odoo import _, api, fields, models 4 5import ast 6from odoo.osv import expression 7 8 9class CouponGenerate(models.TransientModel): 10 _name = 'coupon.generate.wizard' 11 _description = 'Generate Coupon' 12 13 nbr_coupons = fields.Integer(string="Number of Coupons", help="Number of coupons", default=1) 14 generation_type = fields.Selection([ 15 ('nbr_coupon', 'Number of Coupons'), 16 ('nbr_customer', 'Number of Selected Customers') 17 ], default='nbr_coupon') 18 partners_domain = fields.Char(string="Customer", default='[]') 19 has_partner_email = fields.Boolean(compute='_compute_has_partner_email') 20 21 def generate_coupon(self): 22 """Generates the number of coupons entered in wizard field nbr_coupons 23 """ 24 program = self.env['coupon.program'].browse(self.env.context.get('active_id')) 25 26 vals = {'program_id': program.id} 27 28 if self.generation_type == 'nbr_coupon' and self.nbr_coupons > 0: 29 for count in range(0, self.nbr_coupons): 30 self.env['coupon.coupon'].create(vals) 31 32 if self.generation_type == 'nbr_customer' and self.partners_domain: 33 for partner in self.env['res.partner'].search(ast.literal_eval(self.partners_domain)): 34 vals.update({'partner_id': partner.id, 'state': 'sent' if partner.email else 'new'}) 35 coupon = self.env['coupon.coupon'].create(vals) 36 context = dict(lang=partner.lang) 37 subject = _('%s, a coupon has been generated for you') % (partner.name) 38 del context 39 template = self.env.ref('coupon.mail_template_sale_coupon', raise_if_not_found=False) 40 if template: 41 email_values = {'email_from': self.env.user.email or '', 'subject': subject} 42 template.send_mail(coupon.id, email_values=email_values, notif_layout='mail.mail_notification_light') 43 44 @api.depends('partners_domain') 45 def _compute_has_partner_email(self): 46 for record in self: 47 domain = expression.AND([ast.literal_eval(record.partners_domain), [('email', '=', False)]]) 48 record.has_partner_email = self.env['res.partner'].search_count(domain) == 0 49