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>
50 lines
1.8 KiB
Python
50 lines
1.8 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Copyright 2026 Nexa Systems Inc.
|
|
# License OPL-1 (Odoo Proprietary License v1.0)
|
|
# Part of the Fusion Plating product family.
|
|
|
|
from odoo import api, fields, models
|
|
|
|
|
|
class ResUsers(models.Model):
|
|
_inherit = 'res.users'
|
|
|
|
x_fc_initials = fields.Char(
|
|
string='Plating Initials',
|
|
help='Operator / inspector initials used to pre-fill signature '
|
|
'and "Reviewer Initials" style prompts in the Record Inputs '
|
|
'dialog. Editable in the dialog itself - when the user types '
|
|
'a different value and saves, it persists here for every '
|
|
'future job and step.',
|
|
)
|
|
x_fc_signature_image = fields.Binary(
|
|
string='Plating Signature',
|
|
attachment=True,
|
|
help='Drawn or uploaded signature image. Used in WO detail and '
|
|
'certificate reports for any signature-type prompt this user '
|
|
'signed off on; falls back to typed initials when blank. '
|
|
'Capture it once in user preferences; it stamps every '
|
|
'future sign-off automatically.',
|
|
)
|
|
|
|
@api.model
|
|
def _fp_default_initials(self):
|
|
"""Best-effort initials derived from the user's display name.
|
|
|
|
Used as a fallback when ``x_fc_initials`` is empty so the
|
|
operator still gets a sensible pre-fill on their first run.
|
|
E.g. "John Doe" -> "JD", "Mary Anne Smith" -> "MAS".
|
|
"""
|
|
name = (self.name or '').strip()
|
|
if not name:
|
|
return ''
|
|
return ''.join(
|
|
piece[0] for piece in name.split() if piece
|
|
).upper()[:6]
|
|
|
|
def fp_get_initials(self):
|
|
"""Resolve the user's initials for the dialog: stored override
|
|
first, fall back to the auto-derived value from their name."""
|
|
self.ensure_one()
|
|
return self.x_fc_initials or self._fp_default_initials()
|