feat(claims): add x_fc_pages_11_12_in_original + computed gate
New boolean on sale.order tracks whether pages 11 & 12 are bundled inside the original application PDF. Computed helper x_fc_has_signed_pages_11_12 ORs bundled flag with separate-file and remote-signing presence so downstream gates can read one field. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -2909,7 +2909,38 @@ class SaleOrder(models.Model):
|
|||||||
x_fc_signed_pages_filename = fields.Char(
|
x_fc_signed_pages_filename = fields.Char(
|
||||||
string='Signed Pages Filename',
|
string='Signed Pages Filename',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
x_fc_pages_11_12_in_original = fields.Boolean(
|
||||||
|
string='Pages 11 & 12 in Original Application',
|
||||||
|
default=False,
|
||||||
|
tracking=True,
|
||||||
|
copy=False,
|
||||||
|
help='True when the original application PDF already contains the signed pages 11 & 12.',
|
||||||
|
)
|
||||||
|
|
||||||
|
x_fc_has_signed_pages_11_12 = fields.Boolean(
|
||||||
|
string='Has Signed Pages 11 & 12',
|
||||||
|
compute='_compute_has_signed_pages_11_12',
|
||||||
|
store=True,
|
||||||
|
help=(
|
||||||
|
'True if pages 11 & 12 are satisfied — either bundled in the original '
|
||||||
|
'application, uploaded as a separate file, or signed via remote signing.'
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
@api.depends(
|
||||||
|
'x_fc_signed_pages_11_12',
|
||||||
|
'x_fc_pages_11_12_in_original',
|
||||||
|
'page11_sign_request_ids.state',
|
||||||
|
)
|
||||||
|
def _compute_has_signed_pages_11_12(self):
|
||||||
|
for order in self:
|
||||||
|
order.x_fc_has_signed_pages_11_12 = bool(
|
||||||
|
order.x_fc_pages_11_12_in_original
|
||||||
|
or order.x_fc_signed_pages_11_12
|
||||||
|
or order.page11_sign_request_ids.filtered(lambda r: r.state == 'signed')
|
||||||
|
)
|
||||||
|
|
||||||
# ==========================================================================
|
# ==========================================================================
|
||||||
# PAGE 11 SIGNATURE TRACKING (Client/Agent Signature)
|
# PAGE 11 SIGNATURE TRACKING (Client/Agent Signature)
|
||||||
# Page 11 must be signed by: Client, Spouse, Parent, Legal Guardian, POA, or Public Trustee
|
# Page 11 must be signed by: Client, Spouse, Parent, Legal Guardian, POA, or Public Trustee
|
||||||
|
|||||||
3
fusion_claims/tests/__init__.py
Normal file
3
fusion_claims/tests/__init__.py
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from . import test_signed_pages_gate
|
||||||
60
fusion_claims/tests/test_signed_pages_gate.py
Normal file
60
fusion_claims/tests/test_signed_pages_gate.py
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import base64
|
||||||
|
|
||||||
|
from odoo.tests.common import TransactionCase, tagged
|
||||||
|
|
||||||
|
|
||||||
|
PDF_MAGIC = b'%PDF-1.4\n%fake pdf for tests'
|
||||||
|
|
||||||
|
|
||||||
|
def _b64_pdf():
|
||||||
|
return base64.b64encode(PDF_MAGIC)
|
||||||
|
|
||||||
|
|
||||||
|
@tagged('-at_install', 'post_install', 'fusion_claims')
|
||||||
|
class TestSignedPagesGate(TransactionCase):
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def setUpClass(cls):
|
||||||
|
super().setUpClass()
|
||||||
|
cls.partner = cls.env['res.partner'].create({'name': 'Test Client'})
|
||||||
|
cls.order = cls.env['sale.order'].create({
|
||||||
|
'partner_id': cls.partner.id,
|
||||||
|
'x_fc_adp_application_status': 'waiting_for_application',
|
||||||
|
})
|
||||||
|
|
||||||
|
def test_pages_11_12_in_original_defaults_false(self):
|
||||||
|
self.assertFalse(self.order.x_fc_pages_11_12_in_original)
|
||||||
|
|
||||||
|
def test_has_signed_pages_false_when_nothing_set(self):
|
||||||
|
self.assertFalse(self.order.x_fc_has_signed_pages_11_12)
|
||||||
|
|
||||||
|
def test_has_signed_pages_true_when_bundled_flag_set(self):
|
||||||
|
self.order.x_fc_pages_11_12_in_original = True
|
||||||
|
self.order.flush_recordset()
|
||||||
|
self.assertTrue(self.order.x_fc_has_signed_pages_11_12)
|
||||||
|
|
||||||
|
def test_has_signed_pages_true_when_separate_file_uploaded(self):
|
||||||
|
self.order.x_fc_signed_pages_11_12 = _b64_pdf()
|
||||||
|
self.order.flush_recordset()
|
||||||
|
self.assertTrue(self.order.x_fc_has_signed_pages_11_12)
|
||||||
|
|
||||||
|
def test_has_signed_pages_true_when_remote_request_signed(self):
|
||||||
|
self.env['fusion.page11.sign.request'].create({
|
||||||
|
'sale_order_id': self.order.id,
|
||||||
|
'signer_email': 'test@example.com',
|
||||||
|
'signer_type': 'client',
|
||||||
|
'state': 'signed',
|
||||||
|
})
|
||||||
|
self.order.invalidate_recordset()
|
||||||
|
self.assertTrue(self.order.x_fc_has_signed_pages_11_12)
|
||||||
|
|
||||||
|
def test_has_signed_pages_false_when_remote_request_only_sent(self):
|
||||||
|
self.env['fusion.page11.sign.request'].create({
|
||||||
|
'sale_order_id': self.order.id,
|
||||||
|
'signer_email': 'test@example.com',
|
||||||
|
'signer_type': 'client',
|
||||||
|
'state': 'sent',
|
||||||
|
})
|
||||||
|
self.order.invalidate_recordset()
|
||||||
|
self.assertFalse(self.order.x_fc_has_signed_pages_11_12)
|
||||||
Reference in New Issue
Block a user