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,19 +4,19 @@
# Part of the Fusion Plating product family.
{
'name': 'Fusion Plating Culture & Values',
'name': 'Fusion Plating - Culture & Values',
'version': '19.0.1.1.1',
'category': 'Manufacturing/Plating',
'summary': 'Configurable culture framework for plating shops: values, fundamentals, peer recognitions, rotation schedules. Each shop loads its own values.',
'description': """
Fusion Plating Culture & Values
Fusion Plating - Culture & Values
=================================
Part of the Fusion Plating product family by Nexa Systems Inc.
A configurable culture / values / fundamentals framework for plating and
metal finishing shops. Every shop has a different way of talking about how
they expect their people to behave this module gives each shop a place to
they expect their people to behave - this module gives each shop a place to
capture that language and put it to work in the daily flow of the plant.
The module is intentionally generic. It ships with NO client-specific data.
@@ -26,10 +26,10 @@ skip the module entirely.
Concepts
--------
* Value Set a named collection of values owned by a company
* Value an individual fundamental, behaviour, or belief
* Rotation a schedule that surfaces a value-of-the-day/week/month
* Recognition a peer shout-out tied to a specific value
* Value Set - a named collection of values owned by a company
* Value - an individual fundamental, behaviour, or belief
* Rotation - a schedule that surfaces a value-of-the-day/week/month
* Recognition - a peer shout-out tied to a specific value
Extensions
----------

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2026 Nexa Systems Inc. DEMO DATA (temporary)
Copyright 2026 Nexa Systems Inc. - DEMO DATA (temporary)
Remove this file and its manifest entry before production release.
-->
<odoo noupdate="1">
@@ -32,7 +32,7 @@
<field name="set_id" ref="demo_value_set_core"/>
<field name="icon">fa-star</field>
<field name="color">2</field>
<field name="description" type="html"><p>We take pride in doing it right the first time. Our coatings protect critical parts there is no room for "good enough." We own the spec, own the process, and own the result.</p></field>
<field name="description" type="html"><p>We take pride in doing it right the first time. Our coatings protect critical parts - there is no room for "good enough." We own the spec, own the process, and own the result.</p></field>
<field name="examples" type="html"><p>An operator catches a thickness reading at the low end of spec and voluntarily re-plates the part rather than shipping borderline work.</p></field>
</record>
@@ -43,7 +43,7 @@
<field name="set_id" ref="demo_value_set_core"/>
<field name="icon">fa-users</field>
<field name="color">3</field>
<field name="description" type="html"><p>We win together or not at all. No one succeeds alone on a plating line every station depends on the one before it. We help each other, share knowledge, and celebrate wins as a team.</p></field>
<field name="description" type="html"><p>We win together or not at all. No one succeeds alone on a plating line - every station depends on the one before it. We help each other, share knowledge, and celebrate wins as a team.</p></field>
<field name="examples" type="html"><p>The prep team stays late to help the EN line clear a rush order, even though it was not their line's work.</p></field>
</record>
@@ -54,7 +54,7 @@
<field name="set_id" ref="demo_value_set_core"/>
<field name="icon">fa-line-chart</field>
<field name="color">4</field>
<field name="description" type="html"><p>Good enough today is not good enough tomorrow. We look for small, practical improvements every day in our processes, our tools, and ourselves.</p></field>
<field name="description" type="html"><p>Good enough today is not good enough tomorrow. We look for small, practical improvements every day - in our processes, our tools, and ourselves.</p></field>
<field name="examples" type="html"><p>A shift lead redesigns the rack loading sequence and cuts cycle time by 12% without any capital spend.</p></field>
</record>
@@ -65,7 +65,7 @@
<field name="set_id" ref="demo_value_set_core"/>
<field name="icon">fa-handshake-o</field>
<field name="color">5</field>
<field name="description" type="html"><p>Our customers trust us with their most critical parts. We honour that trust by delivering on time, communicating proactively, and treating every job like it matters because it does.</p></field>
<field name="description" type="html"><p>Our customers trust us with their most critical parts. We honour that trust by delivering on time, communicating proactively, and treating every job like it matters - because it does.</p></field>
<field name="examples" type="html"><p>The shipping coordinator calls a customer two days before the due date to confirm the delivery window, preventing a costly production delay on their end.</p></field>
</record>

View File

@@ -15,7 +15,7 @@ class FpValue(models.Model):
icon for display in kanban tiles.
"""
_name = 'fusion.plating.value'
_description = 'Fusion Plating Value'
_description = 'Fusion Plating - Value'
_order = 'set_id, sequence, number, name'
name = fields.Char(
@@ -94,7 +94,7 @@ class FpValue(models.Model):
result = []
for rec in self:
if rec.number:
result.append((rec.id, f'#{rec.number} {rec.name}'))
result.append((rec.id, f'#{rec.number} - {rec.name}'))
else:
result.append((rec.id, rec.name))
return result

View File

@@ -17,7 +17,7 @@ class FpValueRecognition(models.Model):
when they roll off a stand-up wall or a newsletter.
"""
_name = 'fusion.plating.value.recognition'
_description = 'Fusion Plating Value Recognition'
_description = 'Fusion Plating - Value Recognition'
_inherit = ['mail.thread', 'mail.activity.mixin']
_order = 'nomination_date desc, id desc'

View File

@@ -13,12 +13,12 @@ class FpValueRotation(models.Model):
Used to drive "Fundamental of the Day/Week/Month" programs. The admin
creates a rotation, picks a set and a period, and enables it. This
module does NOT ship an ir.cron the shop admin wires a cron to call
module does NOT ship an ir.cron - the shop admin wires a cron to call
`_cron_advance_rotation` if they want automatic advancement. Many
shops prefer to advance the rotation manually at a weekly stand-up.
"""
_name = 'fusion.plating.value.rotation'
_description = 'Fusion Plating Value Rotation Schedule'
_description = 'Fusion Plating - Value Rotation Schedule'
_inherit = ['mail.thread']
_order = 'name'
@@ -133,7 +133,7 @@ class FpValueRotation(models.Model):
"""Cron entry point.
A shop admin can wire an ir.cron to this method. The module
intentionally does not ship one different shops want different
intentionally does not ship one - different shops want different
cadences. Only advances rotations whose next_rotation_date is
today or earlier.
"""

View File

@@ -14,10 +14,10 @@ class FpValueSet(models.Model):
may have several sets (historical, draft, archived) but usually only
one is marked primary.
The module ships NO seed data this is a generic framework.
The module ships NO seed data - this is a generic framework.
"""
_name = 'fusion.plating.value.set'
_description = 'Fusion Plating Value Set'
_description = 'Fusion Plating - Value Set'
_inherit = ['mail.thread', 'mail.activity.mixin']
_order = 'is_primary desc, name'

View File

@@ -8,37 +8,37 @@
<!-- ================================================================== -->
<!-- The Culture module reuses the core Fusion Plating groups: -->
<!-- group_fusion_plating_operator read values and rotations -->
<!-- group_fusion_plating_supervisor create recognitions -->
<!-- group_fusion_plating_manager full CRUD on sets and values -->
<!-- group_fusion_plating_operator - read values and rotations -->
<!-- group_fusion_plating_supervisor - create recognitions -->
<!-- group_fusion_plating_manager - full CRUD on sets and values -->
<!-- No new groups are introduced here. ACLs live in -->
<!-- security/ir.model.access.csv. Record rules for multi-company -->
<!-- isolation live below. -->
<!-- ================================================================== -->
<record id="fp_value_set_company_rule" model="ir.rule">
<field name="name">Fusion Plating: Value Set multi-company</field>
<field name="name">Fusion Plating: Value Set - multi-company</field>
<field name="model_id" ref="model_fusion_plating_value_set"/>
<field name="global" eval="True"/>
<field name="domain_force">['|', ('company_id', '=', False), ('company_id', 'in', company_ids)]</field>
</record>
<record id="fp_value_company_rule" model="ir.rule">
<field name="name">Fusion Plating: Value multi-company</field>
<field name="name">Fusion Plating: Value - multi-company</field>
<field name="model_id" ref="model_fusion_plating_value"/>
<field name="global" eval="True"/>
<field name="domain_force">['|', ('company_id', '=', False), ('company_id', 'in', company_ids)]</field>
</record>
<record id="fp_value_rotation_company_rule" model="ir.rule">
<field name="name">Fusion Plating: Value Rotation multi-company</field>
<field name="name">Fusion Plating: Value Rotation - multi-company</field>
<field name="model_id" ref="model_fusion_plating_value_rotation"/>
<field name="global" eval="True"/>
<field name="domain_force">['|', ('company_id', '=', False), ('company_id', 'in', company_ids)]</field>
</record>
<record id="fp_value_recognition_company_rule" model="ir.rule">
<field name="name">Fusion Plating: Recognition multi-company</field>
<field name="name">Fusion Plating: Recognition - multi-company</field>
<field name="model_id" ref="model_fusion_plating_value_recognition"/>
<field name="global" eval="True"/>
<field name="domain_force">['|', ('company_id', '=', False), ('company_id', 'in', company_ids)]</field>

View File

@@ -1,5 +1,5 @@
// =============================================================================
// Fusion Plating Culture & Values backend styles
// Fusion Plating - Culture & Values - backend styles
// Copyright 2026 Nexa Systems Inc.
// License OPL-1 (Odoo Proprietary License v1.0)
//
@@ -22,7 +22,7 @@
// -----------------------------------------------------------------------------
// Value kanban tile a colourful card showing number + name + icon
// Value kanban tile - a colourful card showing number + name + icon
// -----------------------------------------------------------------------------
.o_fp_value_card {
background-color: var(--o-view-background-color, var(--bs-body-bg));
@@ -65,7 +65,7 @@
// -----------------------------------------------------------------------------
// Recognition kanban card badge-style card grouped by state
// Recognition kanban card - badge-style card grouped by state
// -----------------------------------------------------------------------------
.o_fp_recognition_card {
background-color: var(--o-view-background-color, var(--bs-body-bg));
@@ -95,21 +95,21 @@
// -----------------------------------------------------------------------------
// Recognition kanban state-based accent on the left border
// Recognition kanban - state-based accent on the left border
// -----------------------------------------------------------------------------
.o_fp_recognition_kanban {
// Draft subtle muted accent
// Draft - subtle muted accent
.o_kanban_group[data-id$="draft"] .o_fp_recognition_card {
border-left-color: var(--bs-secondary-color);
}
// Published success accent
// Published - success accent
.o_kanban_group[data-id$="published"] .o_fp_recognition_card {
border-left-color: var(--bs-success);
}
// Archived dimmed
// Archived - dimmed
.o_kanban_group[data-id$="archived"] .o_fp_recognition_card {
border-left-color: color-mix(in srgb, var(--bs-secondary-color) 60%, transparent);
opacity: 0.75;
@@ -118,7 +118,7 @@
// -----------------------------------------------------------------------------
// Value kanban spacing for the grouped kanban columns
// Value kanban - spacing for the grouped kanban columns
// -----------------------------------------------------------------------------
.o_fp_value_kanban {

View File

@@ -148,7 +148,7 @@
Recognize a teammate
</p>
<p>
Record peer recognitions tied to a specific value a
Record peer recognitions tied to a specific value - a
shout-out for someone living the fundamentals in their
daily work.
</p>

View File

@@ -55,7 +55,7 @@
</group>
</group>
<p class="text-muted mt-3">
This module does not ship an ir.cron wire one to
This module does not ship an ir.cron - wire one to
<code>fusion.plating.value.rotation._cron_advance_rotation</code>
if you want automatic advancement, or click
<em>Advance Now</em> manually at a stand-up.

View File

@@ -97,7 +97,7 @@
</p>
<p>
A value set is your shop's named collection of fundamentals,
core behaviours, or beliefs. Nothing ships pre-loaded each
core behaviours, or beliefs. Nothing ships pre-loaded - each
shop defines its own.
</p>
</field>

View File

@@ -124,7 +124,7 @@
Add a value to your shop's set
</p>
<p>
Values are your shop's fundamentals short, memorable
Values are your shop's fundamentals - short, memorable
statements of how people are expected to behave. Create a
Value Set first, then add values to it.
</p>