From 1b161c2bafc1579b9f6e9564886c70ade4894bdf Mon Sep 17 00:00:00 2001 From: Simone Orsi Date: Mon, 7 Aug 2023 16:12:53 +0200 Subject: [PATCH] edi_sale: propagate origin on lines --- edi_sale_oca/models/sale_order.py | 10 +++++++ edi_sale_oca/tests/__init__.py | 1 + edi_sale_oca/tests/test_order.py | 50 +++++++++++++++++++++++++++++++ 3 files changed, 61 insertions(+) create mode 100644 edi_sale_oca/tests/test_order.py diff --git a/edi_sale_oca/models/sale_order.py b/edi_sale_oca/models/sale_order.py index f7ac3f4d2c..014550665a 100644 --- a/edi_sale_oca/models/sale_order.py +++ b/edi_sale_oca/models/sale_order.py @@ -61,3 +61,13 @@ def _compute_edi_exchange_ready(self): def _edi_exchange_ready(self): return not self._is_delivery() and not self.display_type + + @api.model_create_multi + def create(self, vals_list): + # Set default origin if not passed + for vals in vals_list: + orig_id = vals.get("origin_exchange_record_id") + if not orig_id and "order_id" in vals: + order = self.env["sale.order"].browse(vals["order_id"]) + vals["origin_exchange_record_id"] = order.origin_exchange_record_id.id + return super().create(vals_list) diff --git a/edi_sale_oca/tests/__init__.py b/edi_sale_oca/tests/__init__.py index c2bb451dd1..80e5225788 100644 --- a/edi_sale_oca/tests/__init__.py +++ b/edi_sale_oca/tests/__init__.py @@ -1 +1,2 @@ +from . import test_order from . import test_process diff --git a/edi_sale_oca/tests/test_order.py b/edi_sale_oca/tests/test_order.py new file mode 100644 index 0000000000..3f231c3808 --- /dev/null +++ b/edi_sale_oca/tests/test_order.py @@ -0,0 +1,50 @@ +# Copyright 2022 Camptocamp SA +# @author: Simone Orsi +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo.tests.common import SavepointCase + +from odoo.addons.edi_oca.tests.common import EDIBackendTestMixin + +from .common import OrderMixin + + +class TestOrder(SavepointCase, EDIBackendTestMixin, OrderMixin): + @classmethod + def setUpClass(cls): + super().setUpClass() + # force metadata storage w/ proper key + cls.env = cls.env(context=dict(cls.env.context, edi_framework_action=True)) + cls._setup_records() + cls.exchange_type_in.exchange_filename_pattern = "{record.id}-{type.code}-{dt}" + cls.exc_record_in = cls.backend.create_record( + cls.exchange_type_in.code, {"edi_exchange_state": "input_received"} + ) + cls._setup_order( + origin_exchange_record_id=cls.exc_record_in.id, + ) + + def test_line_origin(self): + order = self.sale + self.assertEqual(order.origin_exchange_record_id, self.exc_record_in) + lines = order.order_line + self.env["sale.order.line"].create( + [ + { + "order_id": order.id, + "product_id": self.product_d.id, + "product_uom_qty": 300, + "edi_id": 4000, + }, + { + "order_id": order.id, + "product_id": self.product_d.id, + "product_uom_qty": 400, + "edi_id": 5000, + }, + ] + ) + order.invalidate_cache() + new_line1, new_line2 = order.order_line - lines + self.assertEqual(new_line1.origin_exchange_record_id, self.exc_record_in) + self.assertEqual(new_line2.origin_exchange_record_id, self.exc_record_in)