1
0
forked from Mapan/odoo17e
odoo17e-kedaikipas58/addons/helpdesk_sale_loyalty/wizard/helpdesk_sale_coupon_generate.py
2024-12-10 09:04:09 +07:00

65 lines
2.8 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import models, fields, _
class HelpdeskSaleCouponGenerate(models.TransientModel):
_name = "helpdesk.sale.coupon.generate"
_description = 'Generate Sales Coupon from Helpdesk'
def _get_default_program(self):
return self.env['loyalty.program'].search([('applies_on', '=', 'current'), ('trigger', '=', 'with_code'), ('program_type', '=', 'coupons')], limit=1)
ticket_id = fields.Many2one('helpdesk.ticket')
company_id = fields.Many2one(related="ticket_id.company_id")
program = fields.Many2one('loyalty.program', string="Coupon Program", default=_get_default_program,
domain=[('applies_on', '=', 'current'), ('trigger', '=', 'with_code')], check_company=True)
points_granted = fields.Float('Coupon Value', default=1)
points_name = fields.Char(related='program.portal_point_name')
valid_until = fields.Date("Valid Until")
def _get_default_template(self):
self.ensure_one()
return self.program.communication_plan_ids.filtered(lambda m: m.trigger == 'create').mail_template_id[:1]
def action_coupon_generate_send(self):
self.ensure_one()
coupon = self.env['loyalty.card'].with_context(action_no_send_mail=True).sudo().create({
'partner_id': self.ticket_id.partner_id.id,
'program_id': self.program.id,
'points': self.points_granted,
'expiration_date': self.valid_until,
})
self.ticket_id.coupon_ids |= coupon
self.ticket_id.message_post_with_source(
'helpdesk.ticket_conversion_link',
render_values={'created_record': coupon, 'message': _('Coupon created')},
subtype_xmlid='mail.mt_note',
)
coupon.message_post_with_source(
'mail.message_origin_link',
render_values={'self': coupon, 'origin': self.ticket_id},
subtype_xmlid='mail.mt_note',
)
default_template = self._get_default_template()
compose_form_id = self.env['ir.model.data']._xmlid_to_res_id('mail.email_compose_message_wizard_form')
context = {
'default_model': 'loyalty.card',
'default_res_ids': coupon.ids,
'default_template_id': default_template.id,
'default_composition_mode': 'comment',
'default_email_layout_xmlid': 'mail.mail_notification_light',
'force_email': True,
}
return {
'name': _('Compose Email'),
'type': 'ir.actions.act_window',
'view_mode': 'form',
'res_model': 'mail.compose.message',
'views': [(compose_form_id, 'form')],
'view_id': compose_form_id,
'target': 'new',
'context': context,
}