From c80ffa1b2c50dab8809c41a4fe7456701a8d423f Mon Sep 17 00:00:00 2001 From: gsinghpal Date: Thu, 4 Jun 2026 13:16:14 -0400 Subject: [PATCH] feat(fusion_plating): internal sticker = external layout w/ internal notes + Receiving print buttons - Internal Job Sticker is no longer a separate Layout A: it's now a COPY of the External sticker (Layout B, one per box, logo + WO + BOX + QR + rail fields + prominent PLATING THICKNESS banner) but feeds the INTERNAL description and labels its notes "INTERNAL NOTES" so the shop copy can't be confused with the customer copy. The old Layout-A body template is deleted. - Removed the Internal sticker from the fp.job Print menu (binding_model_id -> False); it now prints from the Receiving screen instead. - Added "External Sticker" + "Internal Sticker" print buttons to the fp.receiving form header (shown once a WO exists). Each renders one label per tracked box for the receiving's work order (passes a single WO so the SO-scoped box loop doesn't reprint each label per job). Verified on entech (WO-30094 / RCV-30096): internal renders Layout B with the internal description + INTERNAL NOTES; external unchanged; both receiving buttons return the right report actions. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../models/fp_receiving.py | 32 ++++++ .../report/report_fp_job_sticker.xml | 102 +++++------------- .../views/fp_receiving_views.xml | 11 ++ 3 files changed, 71 insertions(+), 74 deletions(-) diff --git a/fusion_plating/fusion_plating_jobs/models/fp_receiving.py b/fusion_plating/fusion_plating_jobs/models/fp_receiving.py index f240df8b..3457b95c 100644 --- a/fusion_plating/fusion_plating_jobs/models/fp_receiving.py +++ b/fusion_plating/fusion_plating_jobs/models/fp_receiving.py @@ -8,6 +8,7 @@ # reaches state='done'. from odoo import _, fields, models +from odoo.exceptions import UserError class FpReceiving(models.Model): @@ -65,3 +66,34 @@ class FpReceiving(models.Model): if len(jobs) == 1: action.update({'view_mode': 'form', 'res_id': jobs.id}) return action + + # ---- Sticker printing from the Receiving screen (2026-06-04) ---------- + # Both stickers loop the SO's boxes (one label per box). Pass a SINGLE + # work order: the box loop is sale-order-scoped, so feeding every job + # would reprint each box label once per job. One job → exactly one label + # per box. Falls back to a single 1/1 label when no boxes exist yet. + def _fp_sticker_jobs(self): + self.ensure_one() + if not self.sale_order_id: + return self.env['fp.job'] + return self.env['fp.job'].sudo().search( + [('sale_order_id', '=', self.sale_order_id.id)], order='id', limit=1) + + def _fp_print_sticker(self, xmlid): + self.ensure_one() + jobs = self._fp_sticker_jobs() + if not jobs: + raise UserError(_( + 'No work order exists for this receiving yet — create the ' + 'Work Order before printing stickers.')) + return self.env.ref(xmlid).report_action(jobs) + + def action_print_external_sticker(self): + """Customer (external) box sticker(s) for this receiving's WO.""" + return self._fp_print_sticker( + 'fusion_plating_jobs.action_report_fp_job_sticker') + + def action_print_internal_sticker(self): + """Shop (internal) box sticker(s) — same layout, internal notes.""" + return self._fp_print_sticker( + 'fusion_plating_jobs.action_report_fp_job_sticker_internal') diff --git a/fusion_plating/fusion_plating_jobs/report/report_fp_job_sticker.xml b/fusion_plating/fusion_plating_jobs/report/report_fp_job_sticker.xml index 8fc03e49..029d82bd 100644 --- a/fusion_plating/fusion_plating_jobs/report/report_fp_job_sticker.xml +++ b/fusion_plating/fusion_plating_jobs/report/report_fp_job_sticker.xml @@ -57,8 +57,11 @@ fusion_plating_jobs.report_fp_job_sticker_internal_template fusion_plating_jobs.report_fp_job_sticker_internal_template 'Internal Job Sticker - %s' % (object.name or '').replace('/', '-') - - report + + @@ -121,74 +124,6 @@ - - - + @@ -281,6 +234,7 @@ + diff --git a/fusion_plating/fusion_plating_jobs/views/fp_receiving_views.xml b/fusion_plating/fusion_plating_jobs/views/fp_receiving_views.xml index 18211f23..329d3949 100644 --- a/fusion_plating/fusion_plating_jobs/views/fp_receiving_views.xml +++ b/fusion_plating/fusion_plating_jobs/views/fp_receiving_views.xml @@ -25,6 +25,17 @@ class="btn-primary" icon="fa-cogs" invisible="not x_fc_show_work_order_btn" help="Open the Work Order(s) for this receiving. Hidden automatically once every linked WO is marked Done."/> + +