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

@@ -3,7 +3,7 @@
# License OPL-1 (Odoo Proprietary License v1.0)
# Part of the Fusion Plating product family.
#
# fp.rma Return Material Authorisation.
# fp.rma - Return Material Authorisation.
#
# Sub 12 Phase A. Internal-only RMA workflow that ties customer returns to
# the existing NCR / CAPA / Hold stack. Portal submission is deferred to a
@@ -35,7 +35,7 @@ _logger = logging.getLogger(__name__)
class FpRma(models.Model):
_name = 'fusion.plating.rma'
_description = 'Fusion Plating Return Material Authorisation'
_description = 'Fusion Plating - Return Material Authorisation'
_inherit = ['mail.thread', 'mail.activity.mixin', 'fp.parent.numbered.mixin']
_order = 'create_date desc, id desc'
_rec_name = 'name'
@@ -204,7 +204,7 @@ class FpRma(models.Model):
default=True, tracking=True,
help='When the carrier delivers the returned parts and an '
'fp.receiving is created against this RMA, an NCR is '
'spawned automatically. Manager can toggle off the '
'spawned automatically. Manager can toggle off - the '
'change is tracked on the chatter for audit.',
)
auto_spawn_hold = fields.Boolean(
@@ -235,7 +235,7 @@ class FpRma(models.Model):
active = fields.Boolean(default=True)
# ------------------------------------------------------------------
# Phase B placeholders (categorisation) added now so views won't
# Phase B placeholders (categorisation) - added now so views won't
# break when Phase B lands. Kept as M2O/M2M to models added later.
# ------------------------------------------------------------------
# tag_ids, reason_id, team_id, stage_id are added in Phase B.
@@ -370,7 +370,7 @@ class FpRma(models.Model):
- from action_mark_received (manual)
- from fp.receiving.create override when rma_id was set
Flips state to `received` and (optionally) spawns NCR + Hold per
the auto_spawn_* toggles. Idempotent re-entry on an already-
the auto_spawn_* toggles. Idempotent - re-entry on an already-
received RMA is a no-op (no double-spawn on ORM retry / split
deliveries).
"""
@@ -389,7 +389,7 @@ class FpRma(models.Model):
spawned.append(_('Hold %s') % hold.name)
label = 'Received'
if spawned:
label += ' auto-spawned ' + ', '.join(spawned)
label += ' - auto-spawned ' + ', '.join(spawned)
rec._post_state_message(label)
# Customer notification: parts arrived at the shop.
rec._fire_rma_notification('rma_received')
@@ -402,7 +402,7 @@ class FpRma(models.Model):
if existing:
return existing
partner = self.partner_id
# Pull a facility prefer the partner's company facility, fall
# Pull a facility - prefer the partner's company facility, fall
# back to the first active facility.
Facility = self.env['fusion.plating.facility']
facility = (
@@ -420,7 +420,7 @@ class FpRma(models.Model):
) or self.sale_order_line_ids[:1].product_id.display_name or '/'
complaint = self.complaint_description or ''
body = (
Markup('<p><strong>RMA %s auto-created from customer return.</strong></p>') % self.name
Markup('<p><strong>RMA %s - auto-created from customer return.</strong></p>') % self.name
+ Markup(complaint or '<p>(no description)</p>')
)
ncr = Ncr.create({
@@ -506,7 +506,7 @@ class FpRma(models.Model):
'RMA %s must be Triaged or Resolving before being '
'marked Resolved.'
) % rec.display_name)
# Refund path needs a wizard return handle separately.
# Refund path needs a wizard return - handle separately.
refund_recs = self.filtered(lambda r: r.resolution_type == 'refund')
if len(refund_recs) > 1:
raise UserError(_(
@@ -572,7 +572,7 @@ class FpRma(models.Model):
new_job._generate_steps_from_recipe()
self.replacement_job_id = new_job.id
# Auto-confirm so the portal mirror, racking inspection and
# 'job_confirmed' notification all fire same as a normal job.
# 'job_confirmed' notification all fire - same as a normal job.
if hasattr(new_job, 'action_confirm') and new_job.state == 'draft':
try:
new_job.action_confirm()
@@ -588,14 +588,14 @@ class FpRma(models.Model):
if self.refund_invoice_id:
return self.refund_invoice_id
# Open the standard refund wizard pre-filled to the original SO.
# We don't auto-confirm accountant verifies amounts first.
# We don't auto-confirm - accountant verifies amounts first.
invoices = self.env['account.move'].search([
('invoice_origin', '=', self.sale_order_id.name),
('move_type', '=', 'out_invoice'),
], limit=1)
if not invoices:
raise UserError(_(
'RMA %s: no posted invoice found for SO %s cannot '
'RMA %s: no posted invoice found for SO %s - cannot '
'create a credit note automatically. Issue refund '
'manually.'
) % (self.display_name, self.sale_order_id.name))