feat(bridge_mrp): _fp_resolve_cert_requirement single-source resolver (Sub 2 Task 9)
This commit is contained in:
@@ -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
|
||||
# ------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user