feat(bridge_mrp): _fp_resolve_cert_requirement single-source resolver (Sub 2 Task 9)

This commit is contained in:
gsinghpal
2026-04-21 20:21:40 -04:00
parent cf6faf4cdf
commit 334a10dcb7

View File

@@ -1149,6 +1149,78 @@ class MrpProduction(models.Model):
'target': 'current',
}
# ------------------------------------------------------------------
# Sub 2 — Certificate requirement resolution (single source)
# ------------------------------------------------------------------
def _fp_resolve_cert_requirement(self):
"""Resolve which certs are required for this MO.
Returns (want_coc: bool, want_thickness: bool).
Logic:
1. Collect every linked fp.part.catalog via the SO line walk.
2. For each part:
- if certificate_requirement != 'inherit' -> part wins
- else -> fall back to partner's x_fc_send_coc /
x_fc_send_thickness_report flags
3. Multi-line MO: strictest wins (any() across lines).
4. MO with no SO link: partner fallback; safe default (True, False).
This is the single entry point used by:
- _fp_generate_cert_pdf (MO-done cert cascade)
- QC gate when it audits thickness requirements
- Any future caller (Sub 6 will update this method when
partner-level flags move to per-location / per-contact).
"""
self.ensure_one()
SO = self.env['sale.order']
# Resolve partner via origin
partner = False
lines = self.env['sale.order.line']
if self.origin:
so = SO.search([('name', '=', self.origin)], limit=1)
if so:
partner = so.partner_id
lines = so.order_line
# No SO link — use partner-level fallback with safe defaults
if not lines:
if partner and 'x_fc_send_coc' in partner._fields:
return (
bool(partner.x_fc_send_coc),
bool(partner.x_fc_send_thickness_report),
)
# No partner at all — safe default: CoC yes, thickness no
return (True, False)
want_coc_any = False
want_thickness_any = False
for line in lines:
part = line.x_fc_part_catalog_id
if part and part.certificate_requirement != 'inherit':
# Part-level override wins
want_coc_line = part.certificate_requirement in (
'coc', 'coc_thickness',
)
want_thickness_line = (
part.certificate_requirement == 'coc_thickness'
)
else:
# Inherit (or no part) -> partner fallback
if partner and 'x_fc_send_coc' in partner._fields:
want_coc_line = bool(partner.x_fc_send_coc)
want_thickness_line = bool(
partner.x_fc_send_thickness_report
)
else:
want_coc_line = True
want_thickness_line = False
want_coc_any = want_coc_any or want_coc_line
want_thickness_any = want_thickness_any or want_thickness_line
return (want_coc_any, want_thickness_any)
# ------------------------------------------------------------------
# #5 — Delivery auto-prefill helpers
# ------------------------------------------------------------------