chore(plating): de-dash shipped code + intake-neutral customer emails

Replace em-dashes and en-dashes with hyphens across 789 shipped source
files (py/xml/js/scss) so the delivered module reads as human-written;
em-dashes had become a recognizable AI-generated tell. Internal .md dev
notes are excluded. The WO-sticker mojibake strippers keep their dash
search targets (now written — / –). No logic changes: comments
and display strings only; validated with py_compile + lxml parse.

Rewrite the 7 customer notification emails to be intake-neutral
(ship-in / drop-off / pickup) and repair-aware, and fix the Shipped
email documents line (packing slip vs bill of lading; certificate only
when issued). Subjects use a hyphen separator.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
gsinghpal
2026-06-05 00:16:19 -04:00
parent c9eb61ee0c
commit 8c76a16366
789 changed files with 4692 additions and 4692 deletions

View File

@@ -2,7 +2,7 @@
<odoo>
<!-- ============================================================ -->
<!-- S19 Surface Fischerscope thickness PDF on the cert form -->
<!-- S19 - Surface Fischerscope thickness PDF on the cert form -->
<!-- ============================================================ -->
<!-- Without this extension the operator has no way to know, -->
<!-- before clicking Issue, whether the QC's Fischerscope PDF -->
@@ -44,7 +44,7 @@
</button>
</xpath>
<!-- 2. Banner row above the title explicit, can't miss. -->
<!-- 2. Banner row above the title - explicit, can't miss. -->
<!-- Three states with distinct alert classes. -->
<xpath expr="//sheet/div[@class='oe_title']" position="before">
<div class="alert alert-info" role="alert"
@@ -61,7 +61,7 @@
aria-label="Merged"/>
<strong> Fischerscope thickness report merged.</strong>
The issued CoC PDF includes the Fischerscope report
as page&#160;2 open the Certificate&#160;PDF tab to verify.
as page&#160;2 - open the Certificate&#160;PDF tab to verify.
</div>
<div class="alert alert-warning" role="alert"
invisible="state != 'draft' or x_fc_thickness_status != 'none' or not partner_id"
@@ -76,14 +76,14 @@
</div>
</xpath>
<!-- 3. Thickness Report tab single place to see/edit
<!-- 3. Thickness Report tab - single place to see/edit
every Fischerscope-related field on the cert.
Reorganized 2026-05-21:
* Status + linked QC at the top (read-only context)
* XDAL 600 metadata (operator/product/etc.) editable
so manager can correct OCR mistakes
* Microscope image preview (auto-extracted from RTF
or manually uploaded either way editable here)
or manually uploaded - either way editable here)
* Source files (PDF / non-PDF evidence / source name)
* Upload wizard button + help text -->
<xpath expr="//notebook/page[@name='pdf']" position="after">

View File

@@ -20,7 +20,7 @@
<field name="inherit_id" ref="fusion_plating.view_fp_job_form"/>
<field name="arch" type="xml">
<xpath expr="//header" position="inside">
<!-- Phase 1 Tablet redesign. Opens the JobWorkspace OWL
<!-- Phase 1 - Tablet redesign. Opens the JobWorkspace OWL
client action focused on this WO. Primary entry point
for techs before the Landing kanban (Phase 3) ships;
stays as a back-office shortcut after. -->
@@ -79,7 +79,7 @@
help="Print Sticker"/>
</xpath>
<!-- Sub 14 Replace the generic Draft/Confirmed/In Progress/Done
<!-- Sub 14 - Replace the generic Draft/Confirmed/In Progress/Done
statusbar with the configurable workflow_state_id bar.
Operators see meaningful plating milestones (Received,
Inspected, Shipped, etc.) instead of generic Odoo states. -->
@@ -92,7 +92,7 @@
<!-- Surface part / coating / recipe on the header so the
floor knows WHAT they're plating without diving into
Source. The "Reference Product" line in core is just
the FP-SERVICE stub from the SO relabel it so it
the FP-SERVICE stub from the SO - relabel it so it
doesn't compete with the real part identification. -->
<xpath expr="//field[@name='product_id']" position="attributes">
<attribute name="string">Service Product</attribute>
@@ -162,7 +162,7 @@
title="Finish &amp; Next" icon="fa-check-circle"
class="btn-link o_fp_finish_btn"
invisible="state != 'in_progress'"/>
<!-- Reset / redo back to Ready so the step can be
<!-- Reset / redo - back to Ready so the step can be
run again (mistake, accidental skip, customer
redo). Clears finish + sign-off stamps; keeps the
start audit + moves. Hidden on ready/pending. -->
@@ -171,7 +171,7 @@
class="btn-link text-warning"
invisible="state in ('ready', 'pending')"/>
<!-- Secondary actions small icons only. Pause is
<!-- Secondary actions - small icons only. Pause is
only relevant on a running step; Record Inputs
stays available so operators can capture
measurements without finishing the step;
@@ -205,7 +205,7 @@
</xpath>
<!-- New tabs in the notebook: Move Log + Time Logs.
Both read-only operators write via the wizards;
Both read-only - operators write via the wizards;
these tabs are the audit window. -->
<xpath expr="//page[@name='source']" position="before">
<page string="Move Log" name="move_log">

View File

@@ -3,7 +3,7 @@
Copyright 2026 Nexa Systems Inc.
License OPL-1 (Odoo Proprietary License v1.0)
Sub 12 Phase D quality smart-button row on fp.job. The quality
Sub 12 Phase D - quality smart-button row on fp.job. The quality
fields (fp_qc_hold_count, fp_qc_check_count, fp_qc_ncr_count,
fp_qc_capa_count, fp_qc_rma_count) are defined in fusion_plating_quality
via _inherit on fp.job. The view lives here because the button_box

View File

@@ -6,7 +6,7 @@
Read-only "Step Details" quick-look modal. Triggered by clicking a
step's name in the embedded step list inside fp.job's form. Bound
via context="{'form_view_ref': '...'}" on the parent see
via context="{'form_view_ref': '...'}" on the parent - see
fp_job_form_inherit.xml. The standalone editable form view stays
registered for the Job Steps menu / direct navigation.
-->
@@ -45,7 +45,7 @@
</div>
</div>
<!-- Job context what job is this step part of, who's
<!-- Job context - what job is this step part of, who's
the customer, what part, how many. The single most
useful thing to surface up top so the operator
orients themselves before drilling in. -->
@@ -65,10 +65,10 @@
</group>
</group>
<!-- Equipment / Schedule only render when there's
<!-- Equipment / Schedule - only render when there's
actually something to show. An Inspection step with
no tank / bath / time-budget shouldn't display
four empty rows of "—" — that's misleading. -->
four empty rows of "-" - that's misleading. -->
<group invisible="not work_centre_id and not tank_id and not bath_id and not rack_id and not duration_expected and not duration_actual and not assigned_user_id">
<group string="Equipment"
invisible="not work_centre_id and not tank_id and not bath_id and not rack_id">
@@ -98,10 +98,10 @@
role="alert"
invisible="quick_look_collect_master or not recipe_node_id">
<i class="fa fa-exclamation-triangle"/>
<strong> Master switch off</strong> no values will be collected at runtime for this step.
<strong> Master switch off</strong> - no values will be collected at runtime for this step.
</div>
<!-- Operator Instructions hide the whole section when
<!-- Operator Instructions - hide the whole section when
the recipe author didn't write any. -->
<separator string="Operator Instructions"
invisible="not quick_look_instructions"/>
@@ -110,7 +110,7 @@
<field name="quick_look_instructions" nolabel="1" readonly="1"/>
</div>
<!-- Instruction images visual reference photos /
<!-- Instruction images - visual reference photos /
screenshots the recipe author attached to the
node. Hidden when none. -->
<separator string="Reference Images"

View File

@@ -16,7 +16,7 @@
<field name="inherit_id" ref="fusion_plating_receiving.view_fp_receiving_form"/>
<field name="arch" type="xml">
<!-- Work Order header button only after receiving is
<!-- Work Order header button - only after receiving is
closed and while at least one job is still open. -->
<xpath expr="//header" position="inside">
<field name="x_fc_show_work_order_btn" invisible="1"/>
@@ -25,17 +25,17 @@
class="btn-primary" icon="fa-cogs"
invisible="not x_fc_show_work_order_btn"
help="Open the Work Order(s) for this receiving. Hidden automatically once every linked WO is marked Done."/>
<!-- Print box stickers for this receiving's work order one
<!-- Print box stickers for this receiving's work order - one
label per tracked box (external = customer copy, internal
= shop copy with internal notes). Shown once a WO exists. -->
<button name="action_print_external_sticker"
string="External Sticker" type="object" icon="fa-print"
invisible="x_fc_fp_job_count == 0"
help="Print the customer (external) box sticker(s) one per box."/>
help="Print the customer (external) box sticker(s) - one per box."/>
<button name="action_print_internal_sticker"
string="Internal Sticker" type="object" icon="fa-print"
invisible="x_fc_fp_job_count == 0"
help="Print the shop (internal) box sticker(s) same layout, internal notes."/>
help="Print the shop (internal) box sticker(s) - same layout, internal notes."/>
</xpath>
<!-- Work Order smart button on the button_box (mirrors the

View File

@@ -3,7 +3,7 @@
Copyright 2026 Nexa Systems Inc.
License OPL-1 (Odoo Proprietary License v1.0)
Phase 3 (Sub 11) native Production Priorities kanban / list on
Phase 3 (Sub 11) - native Production Priorities kanban / list on
fp.job.step. Replaces the bridge_mrp version that bound to
mrp.workorder. Same UX (drag-drop ordering across work centres,
list with handle, badges by state).
@@ -40,7 +40,7 @@
<field name="assigned_user_id"/>
</t>
<t t-if="record.duration_actual.raw_value">
<field name="duration_actual" widget="float_time"/> elapsed
- <field name="duration_actual" widget="float_time"/> elapsed
</t>
</div>
</div>

View File

@@ -2,7 +2,7 @@
<!--
Copyright 2026 Nexa Systems Inc.
License OPL-1 (Odoo Proprietary License v1.0)
Sub 14 Workflow state catalog UI (admin / Settings).
Sub 14 - Workflow state catalog UI (admin / Settings).
-->
<odoo>
@@ -66,7 +66,7 @@
<field name="trigger_all_steps_done"/>
</group>
<!-- Help block full sheet width, alert-info card so
<!-- Help block - full sheet width, alert-info card so
the explanation is readable instead of squeezed
into a 2-column form layout. -->
<div class="alert alert-info mt-3" role="alert">
@@ -105,7 +105,7 @@
<field name="description" nolabel="1"
placeholder="What this milestone represents and when it should fire..."/>
</sheet>
<!-- Chatter adds activity log + message thread + followers
<!-- Chatter - adds activity log + message thread + followers
so admins can audit who changed which trigger and when. -->
<chatter/>
</form>

View File

@@ -8,7 +8,7 @@
Sequences fit between Tablet Station (10) and Bake Windows (20)
in shopfloor's existing fp_menu.xml.
Renamed 2026-05-25 "All Jobs" → "Work Orders" for consistency
Renamed 2026-05-25 - "All Jobs" → "Work Orders" for consistency
with the rest of the UI (SO smart button is "WO", tablet cards
show "WO # 00001", KPI tile says "Work Orders"). xmlid kept
as menu_fp_jobs_all_jobs so bookmarks and inherits don't break.

View File

@@ -10,7 +10,7 @@
user to the group. -->
<!-- Reset group_ids on the shopfloor menus that used to be
hidden they are now the canonical UIs and should be visible
hidden - they are now the canonical UIs and should be visible
to all users (subject to the original groups= attribute on
each menuitem in fusion_plating_shopfloor/views/fp_menu.xml). -->
<record id="fusion_plating_shopfloor.menu_fp_shopfloor_manager" model="ir.ui.menu">
@@ -20,7 +20,7 @@
<field name="group_ids" eval="[(6, 0, [])]"/>
</record>
<!-- Phase 3 tablet redesign (2026-05-22) the standalone Plant
<!-- Phase 3 tablet redesign (2026-05-22) - the standalone Plant
Overview menu was superseded by the single Workstation entry.
The original <delete> directive lived here; it was retired
2026-05-25 because the menu row had been gone for weeks and the

View File

@@ -37,7 +37,7 @@
</button>
</xpath>
<!-- Work Order header action appears once any linked
<!-- Work Order header action - appears once any linked
receiving is closed AND at least one WO is still open.
Reuses the existing action_view_fp_jobs smart-button
target so single-job SOs land on the form directly. -->
@@ -53,9 +53,9 @@
<!-- Quote ref: small grey "Originally quoted as Q202605-200"
line under the SO name (the big SO-30000 heading). Only
renders once the SO has been confirmed (quote_ref is set
on create, parent_number is set on confirm both
on create, parent_number is set on confirm - both
needed for the line to make sense).
NB: Odoo 19 forbids t-if in standard form views using
NB: Odoo 19 forbids t-if in standard form views - using
`invisible` attribute on the wrapper div instead. -->
<xpath expr="//div[hasclass('oe_title')]" position="inside">
<field name="x_fc_parent_number" invisible="1"/>