- fusion_claims: separated field service logic, updated controllers/views - fusion_tasks: updated task views and map integration - fusion_authorizer_portal: added page 11 signing, schedule booking, migrations - fusion_shipping: new standalone shipping module (Canada Post, FedEx, DHL, Purolator) - fusion_ltc_management: new standalone LTC management module
93 lines
3.3 KiB
Python
93 lines
3.3 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Copyright 2024-2026 Nexa Systems Inc.
|
|
# License OPL-1 (Odoo Proprietary License v1.0)
|
|
|
|
from datetime import timedelta
|
|
|
|
from odoo import models, fields, api, _
|
|
from odoo.exceptions import UserError
|
|
|
|
|
|
class SendPage11Wizard(models.TransientModel):
|
|
_name = 'fusion_claims.send.page11.wizard'
|
|
_description = 'Send Page 11 for Remote Signing'
|
|
|
|
sale_order_id = fields.Many2one(
|
|
'sale.order', string='Sale Order',
|
|
required=True, readonly=True,
|
|
)
|
|
signer_email = fields.Char(string='Recipient Email', required=True)
|
|
signer_type = fields.Selection([
|
|
('client', 'Client (Self)'),
|
|
('spouse', 'Spouse'),
|
|
('parent', 'Parent'),
|
|
('legal_guardian', 'Legal Guardian'),
|
|
('poa', 'Power of Attorney'),
|
|
('public_trustee', 'Public Trustee'),
|
|
], string='Signer Type', default='client', required=True)
|
|
signer_name = fields.Char(string='Signer Name', required=True)
|
|
custom_message = fields.Text(
|
|
string='Personal Message',
|
|
help='Optional message to include in the signing request email.',
|
|
)
|
|
expiry_days = fields.Integer(
|
|
string='Link Valid For (days)', default=7, required=True,
|
|
)
|
|
|
|
client_name = fields.Char(string='Client', readonly=True)
|
|
case_ref = fields.Char(string='Case Reference', readonly=True)
|
|
|
|
@api.model
|
|
def default_get(self, fields_list):
|
|
res = super().default_get(fields_list)
|
|
active_id = self.env.context.get('active_id')
|
|
if not active_id:
|
|
return res
|
|
|
|
order = self.env['sale.order'].browse(active_id)
|
|
res['sale_order_id'] = order.id
|
|
res['client_name'] = order.partner_id.name or ''
|
|
res['case_ref'] = order.name or ''
|
|
res['signer_name'] = order.partner_id.name or ''
|
|
res['signer_email'] = order.partner_id.email or ''
|
|
return res
|
|
|
|
def action_send(self):
|
|
"""Create a signing request and send the email."""
|
|
self.ensure_one()
|
|
|
|
if not self.signer_email:
|
|
raise UserError(_("Please enter the recipient's email address."))
|
|
if self.expiry_days < 1:
|
|
raise UserError(_("Expiry must be at least 1 day."))
|
|
|
|
request = self.env['fusion.page11.sign.request'].create({
|
|
'sale_order_id': self.sale_order_id.id,
|
|
'signer_email': self.signer_email,
|
|
'signer_type': self.signer_type,
|
|
'signer_name': self.signer_name,
|
|
'custom_message': self.custom_message,
|
|
'expiry_date': fields.Datetime.now() + timedelta(days=self.expiry_days),
|
|
'consent_signed_by': 'applicant' if self.signer_type == 'client' else 'agent',
|
|
'signer_relationship': dict(self._fields['signer_type'].selection).get(
|
|
self.signer_type, ''
|
|
) if self.signer_type != 'client' else '',
|
|
})
|
|
|
|
request._send_signing_email()
|
|
|
|
return {
|
|
'type': 'ir.actions.client',
|
|
'tag': 'display_notification',
|
|
'params': {
|
|
'title': _('Page 11 Signing Request Sent'),
|
|
'message': _(
|
|
'Signing request has been sent to %s.',
|
|
self.signer_email,
|
|
),
|
|
'type': 'success',
|
|
'sticky': False,
|
|
'next': {'type': 'ir.actions.act_window_close'},
|
|
},
|
|
}
|