52 lines
1.9 KiB
Python
52 lines
1.9 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Copyright 2026 Nexa Systems Inc.
|
|
# License OPL-1 (Odoo Proprietary License v1.0)
|
|
# Part of the Fusion Plating product family.
|
|
|
|
import logging
|
|
|
|
from odoo import models
|
|
|
|
_logger = logging.getLogger(__name__)
|
|
|
|
|
|
class SaleOrder(models.Model):
|
|
_inherit = 'sale.order'
|
|
|
|
def action_confirm(self):
|
|
res = super().action_confirm()
|
|
for order in self:
|
|
self._send_fp_notification(
|
|
'so_confirmed', order, order.partner_id, sale_order=order,
|
|
)
|
|
return res
|
|
|
|
def _send_fp_notification(self, trigger_event, record, partner, sale_order=None):
|
|
"""Send a notification email and log it."""
|
|
template = self.env['fp.notification.template'].search(
|
|
[('trigger_event', '=', trigger_event), ('active', '=', True)], limit=1,
|
|
)
|
|
if not template or not template.mail_template_id:
|
|
return
|
|
try:
|
|
template.mail_template_id.send_mail(record.id, force_send=False)
|
|
self.env['fp.notification.log'].create({
|
|
'template_id': template.id,
|
|
'trigger_event': trigger_event,
|
|
'sale_order_id': sale_order.id if sale_order else False,
|
|
'partner_id': partner.id if partner else False,
|
|
'recipient_email': partner.email if partner else '',
|
|
'status': 'sent',
|
|
})
|
|
except Exception as e:
|
|
_logger.warning('FP notification failed (%s): %s', trigger_event, e)
|
|
self.env['fp.notification.log'].create({
|
|
'template_id': template.id,
|
|
'trigger_event': trigger_event,
|
|
'sale_order_id': sale_order.id if sale_order else False,
|
|
'partner_id': partner.id if partner else False,
|
|
'recipient_email': partner.email if partner else '',
|
|
'status': 'failed',
|
|
'error_message': str(e),
|
|
})
|