# -*- coding: utf-8 -*- # Copyright 2026 Nexa Systems Inc. # License OPL-1 (Odoo Proprietary License v1.0) # Part of the Fusion Plating product family. from odoo import api, fields, models from .fp_notification_template import TRIGGER_EVENTS class FpNotificationLog(models.Model): """Audit trail for sent notifications.""" _name = 'fp.notification.log' _description = 'Fusion Plating — Notification Log' _order = 'sent_date desc, id desc' template_id = fields.Many2one( 'fp.notification.template', string='Template', ondelete='set null', ) trigger_event = fields.Selection(TRIGGER_EVENTS, string='Trigger Event') sale_order_id = fields.Many2one('sale.order', string='Sale Order') partner_id = fields.Many2one('res.partner', string='Customer') sent_date = fields.Datetime(string='Sent Date', default=fields.Datetime.now) recipient_email = fields.Char(string='Recipient Email') attachment_names = fields.Text(string='Attachments') status = fields.Selection( [('sent', 'Sent'), ('failed', 'Failed')], string='Status', default='sent', ) error_message = fields.Text(string='Error Message') mail_mail_id = fields.Many2one('mail.mail', string='Mail Record') @api.depends('template_id', 'partner_id', 'sent_date', 'status') def _compute_display_name(self): trigger_labels = dict(self._fields['trigger_event'].selection) for rec in self: bits = [] label = ( rec.template_id.display_name or trigger_labels.get(rec.trigger_event) or 'Notification' ) bits.append(label) if rec.partner_id: bits.append('→ %s' % rec.partner_id.display_name) if rec.sent_date: bits.append(rec.sent_date.strftime('%Y-%m-%d %H:%M')) rec.display_name = ' '.join(bits)