Files
Odoo-Modules/fusion_plating/fusion_plating_certificates/views/res_partner_views.xml
gsinghpal ba6aeaaca9 feat(certificates): multiple Default CoC Contacts per customer (M2o -> M2m)
res.partner.x_fc_default_coc_contact_id (single Many2one) becomes
x_fc_default_coc_contact_ids (self-referential Many2many 'Default CoC
Contacts') so a customer can list several contacts who need the CoC.

- res.partner: M2m field (rel fp_default_coc_contact_rel) + many2many_tags.
- Cert: contact_partner_id (primary addressee printed on the cert) is set to
  the FIRST CoC contact at job creation + lazy-filled at issue.
- Send: action_send_to_customer pre-fills the email composer with ALL the
  customer's CoC contacts (primary + the rest), falling back to the company.
- fp.job cert-default resolution + the action_issue gate wording updated.
- Migration 19.0.10.2.0: copies each partner's old single value into the new
  M2m, then drops the orphaned column.

Deployed + verified on entech: migration copied 2 existing values, old column
dropped, field is M2m, send pre-fills all contacts. entech-only part_line_ids
/ multi-part resolver preserved.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 17:31:17 -04:00

123 lines
6.2 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2026 Nexa Systems Inc.
License OPL-1 (Odoo Proprietary License v1.0)
Part of the Fusion Plating product family.
-->
<odoo>
<record id="view_partner_form_fp_document_prefs" model="ir.ui.view">
<field name="name">res.partner.form.fp.document.prefs</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml">
<xpath expr="//notebook" position="inside">
<page string="Plating Documents"
name="fp_document_prefs"
invisible="is_company != True">
<group string="Documents to Send on Shipment"
name="fp_document_prefs_group">
<p class="text-muted" colspan="2">
Control which quality documents are auto-generated and
emailed to this customer when a job ships. Matches the
customer's PO requirements so the shop doesn't have to
remember per-account preferences.
</p>
<group>
<field name="x_fc_send_coc" widget="boolean_toggle"/>
<field name="x_fc_send_thickness_report" widget="boolean_toggle"/>
</group>
<group>
<field name="x_fc_send_packing_slip" widget="boolean_toggle"/>
<field name="x_fc_send_bol" widget="boolean_toggle"/>
</group>
<!-- Aerospace / Defence cert toggles (spec 2026-05-27).
Default OFF; flip ON for aerospace customers that
demand Nadcap / MTR / customer-specific cert
alongside the standard CoC. -->
<separator string="Aerospace / Defence" colspan="2"/>
<group>
<field name="x_fc_send_nadcap_cert" widget="boolean_toggle"/>
<field name="x_fc_send_mill_test" widget="boolean_toggle"/>
</group>
<group>
<field name="x_fc_send_customer_specific" widget="boolean_toggle"/>
</group>
</group>
<separator string="Default CoC Contacts"/>
<p class="text-muted">
The contacts this customer's CoC is addressed to and
emailed to. The first is the primary (printed on the
cert); the rest are copied (CC) when the CoC is sent.
Pre-fills cert records when a job ships. Leave blank
to force the manager to pick at issue time.
</p>
<group>
<field name="x_fc_default_coc_contact_ids"
widget="many2many_tags"
options="{'no_create': True}"/>
</group>
<separator string="Cert Statement Override (Sub 12c+)"/>
<p class="text-muted">
Boilerplate text printed in the "Certification Statement"
block on this customer's CoC. Leave blank to use the
company default, then a hardcoded AS9100/ISO 9001
statement.
</p>
<field name="x_fc_cert_statement"
placeholder="e.g. We certify these parts conform to MIL-DTL-5541F Class 1A and have been processed in accordance with…"/>
</page>
</xpath>
</field>
</record>
<!-- Sub 6 — Per-contact routing flags on the contact's own form
(opens when editing a child contact row). Applied to every
res.partner form so delivery-location partners and their child
contacts both surface the same flags. -->
<record id="view_partner_form_fp_contact_routing_flags"
model="ir.ui.view">
<field name="name">res.partner.form.fp.contact.routing.flags</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="priority">30</field>
<field name="arch" type="xml">
<xpath expr="//notebook" position="inside">
<page string="Communication Routing"
name="fp_contact_routing"
invisible="is_company == True">
<p class="text-muted">
Tick the streams this contact should receive. Leave all
blank to let the customer's company-level email handle
everything (default behaviour). Set
<b>Global Contact</b> for a primary account-manager
contact who wants visibility into every outbound stream.
</p>
<group>
<group>
<field name="x_fc_is_global_contact"
widget="boolean_toggle"/>
</group>
</group>
<group string="Per-stream subscriptions"
invisible="x_fc_is_global_contact">
<group>
<field name="x_fc_receives_certs"
widget="boolean_toggle"/>
<field name="x_fc_receives_qc"
widget="boolean_toggle"/>
</group>
<group>
<field name="x_fc_receives_quotes_so"
widget="boolean_toggle"/>
<field name="x_fc_receives_invoices"
widget="boolean_toggle"/>
</group>
</group>
</page>
</xpath>
</field>
</record>
</odoo>