diff --git a/fusion_plating/fusion_plating_configurator/models/fp_part_catalog.py b/fusion_plating/fusion_plating_configurator/models/fp_part_catalog.py index 272398be..8884cc0d 100644 --- a/fusion_plating/fusion_plating_configurator/models/fp_part_catalog.py +++ b/fusion_plating/fusion_plating_configurator/models/fp_part_catalog.py @@ -18,8 +18,13 @@ class FpPartCatalog(models.Model): _name = 'fp.part.catalog' _description = 'Fusion Plating — Part Catalog' _inherit = ['mail.thread', 'mail.activity.mixin'] - _order = 'partner_id, part_number, name' + _order = 'partner_id, part_number, revision desc' + display_name = fields.Char( + string='Display Name', + compute='_compute_display_name', + store=True, + ) name = fields.Char(string='Part Name', required=True, tracking=True) partner_id = fields.Many2one( 'res.partner', string='Customer', required=True, ondelete='cascade', @@ -348,6 +353,24 @@ class FpPartCatalog(models.Model): for part in self: part.description_template_count = len(part.description_template_ids) + @api.depends('part_number', 'revision', 'name') + def _compute_display_name(self): + """Display = 'PART-NUMBER (Rev X) — Optional Name'. + + Used by m2o pickers, breadcrumbs, kanban cards. Falls back to + name-only when part_number is missing (legacy / in-progress records). + """ + for rec in self: + if rec.part_number: + core = f"{rec.part_number}" + if rec.revision: + core += f" (Rev {rec.revision})" + if rec.name: + core += f" — {rec.name}" + rec.display_name = core + else: + rec.display_name = rec.name or _('[unnamed part]') + def action_view_customer(self): self.ensure_one() return {