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',
|
'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
|
# #5 — Delivery auto-prefill helpers
|
||||||
# ------------------------------------------------------------------
|
# ------------------------------------------------------------------
|
||||||
|
|||||||
Reference in New Issue
Block a user