From 08bc2b6a893597dc283f9cbd80b44fd1f0ebec62 Mon Sep 17 00:00:00 2001 From: gsinghpal Date: Tue, 26 May 2026 20:58:23 -0400 Subject: [PATCH] feat(configurator): A4 - add Express header fields to sale.order --- .../models/sale_order.py | 19 +++++++++++++++++++ .../tests/test_express_sale_order_fields.py | 17 +++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 fusion_plating/fusion_plating_configurator/tests/test_express_sale_order_fields.py diff --git a/fusion_plating/fusion_plating_configurator/models/sale_order.py b/fusion_plating/fusion_plating_configurator/models/sale_order.py index c9be307a..ac7361d2 100644 --- a/fusion_plating/fusion_plating_configurator/models/sale_order.py +++ b/fusion_plating/fusion_plating_configurator/models/sale_order.py @@ -121,6 +121,25 @@ class SaleOrder(models.Model): 'each shop slices its backlog differently (customer programme, ' 'priority, week, etc.).', ) + + # ---- Express Orders header-level (2026-05-26) ---- + x_fc_material_process = fields.Char( + string='Material / Process Tag', + help='Free-text order-level shop tag (e.g. ENP-STEEL-HP-ADVANCED). ' + 'Informational; not used by the workflow.', + ) + x_fc_internal_notes = fields.Text( + string='Order-Level Internal Notes', + help='Notes visible only to the estimator / planner / shop. Never ' + 'prints on customer-facing PDFs. Distinct from sale.order.note ' + 'which IS customer-facing (Terms & Conditions).', + ) + x_fc_print_terms = fields.Boolean( + string='Print Terms on Customer Documents', + default=True, + help='When False, the Terms & Conditions (sale.order.note) is ' + 'suppressed on quote / SO / invoice / packing slip PDFs.', + ) x_fc_planned_start_date = fields.Date( string='Planned Start Date', tracking=True, ) diff --git a/fusion_plating/fusion_plating_configurator/tests/test_express_sale_order_fields.py b/fusion_plating/fusion_plating_configurator/tests/test_express_sale_order_fields.py new file mode 100644 index 00000000..5255bbdc --- /dev/null +++ b/fusion_plating/fusion_plating_configurator/tests/test_express_sale_order_fields.py @@ -0,0 +1,17 @@ +# -*- coding: utf-8 -*- +# Express Orders — Task A4 schema tests +from odoo.tests.common import TransactionCase, tagged + + +@tagged('post_install', '-at_install', 'fp_express') +class TestExpressSaleOrderFields(TransactionCase): + def test_new_fields_exist(self): + SO = self.env['sale.order'] + self.assertIn('x_fc_material_process', SO._fields) + self.assertIn('x_fc_internal_notes', SO._fields) + self.assertIn('x_fc_print_terms', SO._fields) + + def test_print_terms_default_true(self): + partner = self.env['res.partner'].create({'name': 'C'}) + so = self.env['sale.order'].create({'partner_id': partner.id}) + self.assertTrue(so.x_fc_print_terms)