# -*- 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 models class SaleOrder(models.Model): _inherit = 'sale.order' def _find_mail_template(self): """Prefer Fusion Plating-branded templates over Odoo defaults. Called by sale.order.action_quotation_send (the "Send" button on both quotations and confirmed orders) to resolve the template the composer pre-selects. Override returns: - state in ('draft', 'sent') -> fp_mail_template_quote_sent (attaches Quotation PDF) - state == 'sale' or 'done' -> fp_mail_template_so_confirmed (attaches Acknowledgement PDF) Falls back to Odoo's default template if ours can't be resolved (e.g. fusion_plating_reports not installed, or template record missing). """ self.ensure_one() ref = self.env.ref if self.env.context.get('proforma'): return super()._find_mail_template() fp_tpl = False if self.state in ('draft', 'sent'): fp_tpl = ref( 'fusion_plating_notifications.fp_mail_template_quote_sent', raise_if_not_found=False, ) elif self.state in ('sale', 'done'): fp_tpl = ref( 'fusion_plating_notifications.fp_mail_template_so_confirmed', raise_if_not_found=False, ) return fp_tpl or super()._find_mail_template() def action_quotation_send(self): """Fire the quote_sent trigger when a quotation is emailed.""" res = super().action_quotation_send() Dispatch = self.env['fp.notification.template'] for order in self: Dispatch._dispatch( 'quote_sent', order, order.partner_id, sale_order=order, ) return res def action_confirm(self): res = super().action_confirm() Dispatch = self.env['fp.notification.template'] for order in self: Dispatch._dispatch( 'so_confirmed', order, order.partner_id, sale_order=order, ) return res