From 11484a1a001b05165781034fc42d76b5b335dca3 Mon Sep 17 00:00:00 2001 From: Thierry Ducrest Date: Tue, 14 Nov 2023 11:34:41 +0100 Subject: [PATCH] shopfloor: improve checkout inheritance --- shopfloor/services/checkout.py | 35 ++++++++++++++----- shopfloor/tests/test_checkout_base.py | 1 + .../test_checkout_list_delivery_packaging.py | 1 + .../test_checkout_scan_package_action.py | 1 + .../test_checkout_select_package_base.py | 2 ++ 5 files changed, 32 insertions(+), 8 deletions(-) diff --git a/shopfloor/services/checkout.py b/shopfloor/services/checkout.py index 34297735d6..2432e878a4 100644 --- a/shopfloor/services/checkout.py +++ b/shopfloor/services/checkout.py @@ -94,17 +94,20 @@ def _response_for_manual_selection(self, message=None): data = {"pickings": self.data.pickings(pickings)} return self._response(next_state="manual_selection", data=data, message=message) + def _data_response_for_select_package(self, picking, lines): + return { + "selected_move_lines": self._data_for_move_lines(lines.sorted()), + "picking": self.data.picking(picking), + "packing_info": self._data_for_packing_info(picking), + "no_package_enabled": not self.options.get("checkout__disable_no_package"), + # Used by inheriting module + "package_allowed": True, + } + def _response_for_select_package(self, picking, lines, message=None): return self._response( next_state="select_package", - data={ - "selected_move_lines": self._data_for_move_lines(lines.sorted()), - "picking": self.data.picking(picking), - "packing_info": self._data_for_packing_info(picking), - "no_package_enabled": not self.options.get( - "checkout__disable_no_package" - ), - }, + data=self._data_response_for_select_package(picking, lines), message=message, ) @@ -960,6 +963,13 @@ def scan_package_action(self, picking_id, selected_line_ids, barcode): selected_lines = self.env["stock.move.line"].browse(selected_line_ids).exists() search_result = self._scan_package_find(picking, barcode) + message = self._check_scan_package_find(picking, search_result) + if message: + return self._response_for_select_package( + picking, + selected_lines, + message=message, + ) result_handler = getattr( self, "_scan_package_action_from_" + search_result.type ) @@ -984,6 +994,10 @@ def _scan_package_find(self, picking, barcode, search_types=None): ), ) + def _check_scan_package_find(self, picking, search_result): + # Used by inheriting modules + return False + def _find_line_to_increment(self, product_lines): """Find which line should have its qty incremented. @@ -1679,6 +1693,11 @@ def _states(self): "nullable": True, "required": False, }, + package_allowed={ + "type": "boolean", + "nullable": True, + "required": False, + }, ), "change_quantity": self._schema_selected_lines, "select_dest_package": self._schema_select_package, diff --git a/shopfloor/tests/test_checkout_base.py b/shopfloor/tests/test_checkout_base.py index 85241b317b..6e743b5e42 100644 --- a/shopfloor/tests/test_checkout_base.py +++ b/shopfloor/tests/test_checkout_base.py @@ -69,6 +69,7 @@ def _assert_select_package_qty_above(self, response, picking): "picking": self._picking_summary_data(picking), "packing_info": "", "no_package_enabled": True, + "package_allowed": True, }, message={ "message_type": "warning", diff --git a/shopfloor/tests/test_checkout_list_delivery_packaging.py b/shopfloor/tests/test_checkout_list_delivery_packaging.py index 48fc87c446..8097aca08e 100644 --- a/shopfloor/tests/test_checkout_list_delivery_packaging.py +++ b/shopfloor/tests/test_checkout_list_delivery_packaging.py @@ -115,6 +115,7 @@ def test_list_delivery_packaging_not_available(self): "no_package_enabled": not self.service.options.get( "checkout__disable_no_package" ), + "package_allowed": True, }, message=self.service.msg_store.no_delivery_packaging_available(), ) diff --git a/shopfloor/tests/test_checkout_scan_package_action.py b/shopfloor/tests/test_checkout_scan_package_action.py index 446f50debd..5c1e990ea6 100644 --- a/shopfloor/tests/test_checkout_scan_package_action.py +++ b/shopfloor/tests/test_checkout_scan_package_action.py @@ -176,6 +176,7 @@ def test_scan_package_action_scan_package_keep_source_package_error(self): "no_package_enabled": not self.service.options.get( "checkout__disable_no_package" ), + "package_allowed": True, }, message=self.service.msg_store.dest_package_not_valid(pack1), ) diff --git a/shopfloor/tests/test_checkout_select_package_base.py b/shopfloor/tests/test_checkout_select_package_base.py index 5f4ffe42ce..82e532a9c3 100644 --- a/shopfloor/tests/test_checkout_select_package_base.py +++ b/shopfloor/tests/test_checkout_select_package_base.py @@ -10,6 +10,7 @@ def _assert_selected_response( message=None, packing_info="", no_package_enabled=True, + package_allowed=True, ): picking = selected_lines.mapped("picking_id") self.assert_response( @@ -22,6 +23,7 @@ def _assert_selected_response( "picking": self._picking_summary_data(picking), "packing_info": packing_info, "no_package_enabled": no_package_enabled, + "package_allowed": package_allowed, }, message=message, )