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:
@@ -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.
|
||||
""",
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user