fix(certs): surface Fischerscope upload inline in Issue Certs wizard
Reported 2026-05-20: clicking "Issue Cert" on a job opened the wizard with a banner saying "Fischerscope file or readings needed — fill it in below before confirming", but the list view only showed status toggles (Needs Thickness / Is Ready). No upload affordance was visible. Operators had to know they could click a list row to expand into a hidden detail form where the upload field lived. The wizard model already had the file field, the .docx parser (_fp_parse_fischerscope_docx), and the @onchange that prefills readings — only the view was hiding it. Fix: promote the file upload into the list as its own editable binary column, alongside the existing Needs Thickness toggle. Operator now sees: Reference │ Type │ Customer │ Needs Thickness │ Fischerscope File (PDF or .docx) │ Parsed │ Ready Drop the file → onchange fires → readings + parsed summary populate in-row. Click "Confirm & Issue" to commit. The per-line expanded form is preserved (still accessible via row click) as a "details" panel for editing individual readings after upload — but the primary upload action is now in the list row where the operator's eyes are. Module: fusion_plating_jobs 19.0.10.15.0 → 19.0.10.16.0. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -3,7 +3,7 @@
|
|||||||
# License OPL-1 (Odoo Proprietary License v1.0)
|
# License OPL-1 (Odoo Proprietary License v1.0)
|
||||||
{
|
{
|
||||||
'name': 'Fusion Plating — Native Jobs',
|
'name': 'Fusion Plating — Native Jobs',
|
||||||
'version': '19.0.10.15.0',
|
'version': '19.0.10.16.0',
|
||||||
'category': 'Manufacturing/Plating',
|
'category': 'Manufacturing/Plating',
|
||||||
'summary': 'Native plating job model — replaces mrp.production / mrp.workorder bridge.',
|
'summary': 'Native plating job model — replaces mrp.production / mrp.workorder bridge.',
|
||||||
'author': 'Nexa Systems Inc.',
|
'author': 'Nexa Systems Inc.',
|
||||||
|
|||||||
@@ -24,15 +24,43 @@
|
|||||||
(Fischerscope file or readings). Fill it in
|
(Fischerscope file or readings). Fill it in
|
||||||
below before confirming.
|
below before confirming.
|
||||||
</div>
|
</div>
|
||||||
|
<!-- 2026-05-20: surface the file upload INLINE in the
|
||||||
|
list instead of behind a row-click into a sub-form.
|
||||||
|
Operators kept missing the upload affordance — the
|
||||||
|
list looked like a status display, not an action
|
||||||
|
surface. Adding the binary field as a column lets
|
||||||
|
them drop the Fischerscope file right where they
|
||||||
|
see "Needs Thickness" turned on. The form behind
|
||||||
|
the row click stays as a "details" expansion for
|
||||||
|
per-reading editing after upload. -->
|
||||||
<field name="line_ids" nolabel="1">
|
<field name="line_ids" nolabel="1">
|
||||||
<list editable="bottom" create="false" delete="false">
|
<list editable="bottom" create="false" delete="false">
|
||||||
<field name="cert_name" readonly="1"/>
|
<field name="cert_name" readonly="1"
|
||||||
<field name="cert_type" readonly="1"/>
|
string="Reference"/>
|
||||||
<field name="partner_id" readonly="1"/>
|
<field name="cert_type" readonly="1"
|
||||||
|
string="Type"/>
|
||||||
|
<field name="partner_id" readonly="1"
|
||||||
|
string="Customer"/>
|
||||||
<field name="needs_thickness" readonly="1"
|
<field name="needs_thickness" readonly="1"
|
||||||
widget="boolean_toggle"/>
|
widget="boolean_toggle"
|
||||||
|
string="Needs Thickness"/>
|
||||||
|
<!-- Upload column. Visible/required only when
|
||||||
|
the cert needs thickness data. Triggers
|
||||||
|
the @onchange-driven .docx parser. -->
|
||||||
|
<field name="fischer_filename" column_invisible="1"/>
|
||||||
|
<field name="fischer_file"
|
||||||
|
filename="fischer_filename"
|
||||||
|
widget="binary"
|
||||||
|
string="Fischerscope File (PDF or .docx)"
|
||||||
|
invisible="not needs_thickness"
|
||||||
|
readonly="not needs_thickness"/>
|
||||||
|
<field name="parsed_summary" readonly="1"
|
||||||
|
string="Parsed"
|
||||||
|
optional="show"
|
||||||
|
invisible="not needs_thickness or not parsed_summary"/>
|
||||||
<field name="is_ready" widget="boolean_toggle"
|
<field name="is_ready" widget="boolean_toggle"
|
||||||
readonly="1"
|
readonly="1"
|
||||||
|
string="Ready"
|
||||||
decoration-success="is_ready"
|
decoration-success="is_ready"
|
||||||
decoration-danger="not is_ready"/>
|
decoration-danger="not is_ready"/>
|
||||||
</list>
|
</list>
|
||||||
@@ -61,13 +89,20 @@
|
|||||||
<field name="fischer_filename"
|
<field name="fischer_filename"
|
||||||
invisible="1"/>
|
invisible="1"/>
|
||||||
</group>
|
</group>
|
||||||
<div class="text-muted"
|
<div class="alert alert-info"
|
||||||
|
role="alert"
|
||||||
invisible="not needs_thickness or not parsed_summary">
|
invisible="not needs_thickness or not parsed_summary">
|
||||||
|
<i class="fa fa-check-circle me-1"/>
|
||||||
<field name="parsed_summary"
|
<field name="parsed_summary"
|
||||||
readonly="1" nolabel="1"/>
|
readonly="1" nolabel="1"/>
|
||||||
</div>
|
</div>
|
||||||
<separator string="Thickness Readings"
|
<separator string="Thickness Readings"
|
||||||
invisible="not needs_thickness"/>
|
invisible="not needs_thickness"/>
|
||||||
|
<p class="text-muted small"
|
||||||
|
invisible="not needs_thickness">
|
||||||
|
Auto-filled from the .docx upload above.
|
||||||
|
Edit/add rows manually as needed.
|
||||||
|
</p>
|
||||||
<field name="reading_line_ids"
|
<field name="reading_line_ids"
|
||||||
invisible="not needs_thickness">
|
invisible="not needs_thickness">
|
||||||
<list editable="bottom">
|
<list editable="bottom">
|
||||||
|
|||||||
Reference in New Issue
Block a user