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