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

@@ -4,14 +4,14 @@
# Part of the Fusion Plating product family.
{
'name': 'Fusion Plating Documents Bridge (EE)',
'name': 'Fusion Plating - Documents Bridge (EE)',
'version': '19.0.1.0.1',
'category': 'Manufacturing/Plating',
'summary': 'Enterprise bridge: auto-promotes Fusion Plating quality attachments '
'(NCR, CAPA, FAIR, Doc Control) into Odoo EE Documents with a tagged '
'workspace. Auto-installs when both modules are present.',
'description': """
Fusion Plating Documents Bridge (Enterprise)
Fusion Plating - Documents Bridge (Enterprise)
==============================================
Part of the Fusion Plating product family by Nexa Systems Inc.
@@ -20,19 +20,19 @@ This bridge module connects the native Fusion Plating QMS (`fusion_plating_quali
with the Odoo Enterprise `documents` module. When both modules are installed the
bridge installs automatically and takes care of the plumbing so that every
attachment dropped on an NCR, CAPA, FAIR, or Controlled Document record is
promoted into a dedicated "Plating Quality" workspace and tagged by record
promoted into a dedicated "Plating - Quality" workspace and tagged by record
type for easy retrieval, review, and audit export.
What it does
------------
* Creates a dedicated Documents workspace: "Plating Quality"
* Creates a dedicated Documents workspace: "Plating - Quality"
* Creates a "Record Type" facet with four tags: NCR, CAPA, FAIR, Doc Control
* Overrides `ir.attachment.create()` so attachments added to supported quality
records are silently mirrored as `documents.document` records in the
workspace and tagged with the appropriate record type
* Adds a "Documents" smart button on each NCR, CAPA, FAIR, and Doc Control form
view that opens the filtered Documents kanban for that record
* Ships with `auto_install = True` so no manual install step is required the
* Ships with `auto_install = True` so no manual install step is required - the
bridge activates as soon as both pre-requisite modules are present
Why this module exists
@@ -41,7 +41,7 @@ The Community-Edition-compatible `fusion_plating_quality` module intentionally
does NOT depend on the Enterprise `documents` module. On Enterprise deployments
this bridge provides the richer Documents-app experience (workspaces, tags,
bulk download, preview, sharing) without ever touching the core or quality
modules both stay CE-safe and upgradable.
modules - both stay CE-safe and upgradable.
Copyright (c) 2026 Nexa Systems Inc. All rights reserved.
""",

View File

@@ -15,7 +15,7 @@
<odoo noupdate="1">
<record id="documents_folder_plating_quality" model="documents.document">
<field name="name">Plating Quality</field>
<field name="name">Plating - Quality</field>
<field name="type">folder</field>
<field name="folder_id" eval="False"/>
</record>

View File

@@ -7,11 +7,11 @@
Tags used by the bridge to categorise mirrored quality attachments.
Odoo 19 EE organises tags under a two-level hierarchy:
documents.facet (a.k.a. "category" scoped to a folder/workspace)
documents.facet (a.k.a. "category" - scoped to a folder/workspace)
└── documents.tag (individual tags, required to have a facet_id)
We create one facet called "Record Type" inside the Plating Quality
workspace, then four tags beneath it one per supported quality
We create one facet called "Record Type" inside the Plating - Quality
workspace, then four tags beneath it - one per supported quality
record type.
-->
<odoo noupdate="1">

View File

@@ -20,7 +20,7 @@ class FpCapa(models.Model):
string='Quality Documents',
compute='_compute_x_fc_document_ids',
store=False,
help='Documents in the Plating Quality workspace mirrored from '
help='Documents in the Plating - Quality workspace mirrored from '
'attachments on this CAPA.',
)
x_fc_document_count = fields.Integer(

View File

@@ -26,7 +26,7 @@ class FpDocControl(models.Model):
string='Quality Documents',
compute='_compute_x_fc_document_ids',
store=False,
help='Documents in the Plating Quality workspace mirrored from '
help='Documents in the Plating - Quality workspace mirrored from '
'attachments on this controlled document record.',
)
x_fc_document_count = fields.Integer(

View File

@@ -20,7 +20,7 @@ class FpFair(models.Model):
string='Quality Documents',
compute='_compute_x_fc_document_ids',
store=False,
help='Documents in the Plating Quality workspace mirrored from '
help='Documents in the Plating - Quality workspace mirrored from '
'attachments on this FAIR.',
)
x_fc_document_count = fields.Integer(

View File

@@ -26,7 +26,7 @@ class FpNcr(models.Model):
string='Quality Documents',
compute='_compute_x_fc_document_ids',
store=False,
help='Documents in the Plating Quality workspace mirrored from '
help='Documents in the Plating - Quality workspace mirrored from '
'attachments on this NCR.',
)
x_fc_document_count = fields.Integer(

View File

@@ -27,17 +27,17 @@ class IrAttachment(models.Model):
Whenever an attachment is created on one of the Fusion Plating QMS
record types (NCR, CAPA, FAIR, Doc Control) we silently mirror it as
a `documents.document` record inside the "Plating Quality"
a `documents.document` record inside the "Plating - Quality"
workspace, tagged with the corresponding record type. The original
`ir.attachment` record is untouched and continues to live on the
quality record as before the bridge is purely additive.
quality record as before - the bridge is purely additive.
Design notes
------------
* We resolve the folder and tag XML ids via ``env.ref`` with
``raise_if_not_found=False`` so that a partial install, a missing
demo record, or a future schema change can never break attachment
creation on a quality record the worst case is that the
creation on a quality record - the worst case is that the
`documents.document` mirror record isn't created and a line goes
to the log.
* The write is wrapped in a broad try/except for the same reason:
@@ -45,7 +45,7 @@ class IrAttachment(models.Model):
failure.
* We use ``sudo()`` on the `documents.document` create because the
user uploading the attachment may not have write access to the
Documents app the bridge is a system-level convenience.
Documents app - the bridge is a system-level convenience.
"""
_inherit = 'ir.attachment'
@@ -90,7 +90,7 @@ class IrAttachment(models.Model):
for att in attachments:
if att.res_model not in _QUALITY_MODELS_TO_TAG:
continue
# Skip attachments linked to a specific field (e.g. image_1920)
# Skip attachments linked to a specific field (e.g. image_1920) -
# those are UI artefacts, not user-uploaded docs.
if att.res_field:
continue