From 3489641aecd47ac6d94d37b69ae049c60662b108 Mon Sep 17 00:00:00 2001 From: Thierry Ducrest Date: Fri, 17 Jan 2025 09:19:05 +0100 Subject: [PATCH] fixup! Add stock_split_picking_kit --- stock_split_picking_kit/README.rst | 8 +++- stock_split_picking_kit/__manifest__.py | 2 +- .../readme/CONTRIBUTORS.rst | 1 + .../readme/DESCRIPTION.rst | 6 ++- .../static/description/index.html | 7 ++- .../tests/test_stock_split_picking_kit.py | 45 ++----------------- .../wizards/stock_split_picking.py | 13 +++--- 7 files changed, 29 insertions(+), 53 deletions(-) diff --git a/stock_split_picking_kit/README.rst b/stock_split_picking_kit/README.rst index e773c0e725ea..7ab034a63441 100644 --- a/stock_split_picking_kit/README.rst +++ b/stock_split_picking_kit/README.rst @@ -30,7 +30,11 @@ Stock Split Picking Kit This module adds a new splitting mode to the `stock_split_picking` module. -The new mode `Quantity of kits` allows to split a transfer by a specified number of kits. +The new mode `Quantity of kits` allows splitting a transfer by a specified number of kits. +A new field on the wizard also allows specifying a sort order for the stock moves before +splitting the transfer. + +Multi level boms are not supported. **Table of contents** @@ -54,12 +58,14 @@ Authors ~~~~~~~ * Camptocamp +* BCIM * Contributors ~~~~~~~~~~~~ * Thierry Ducrest +* Jacques-Etienne Baudoux (BCIM) Maintainers ~~~~~~~~~~~ diff --git a/stock_split_picking_kit/__manifest__.py b/stock_split_picking_kit/__manifest__.py index 03ec521f0fd9..0d85fca56482 100644 --- a/stock_split_picking_kit/__manifest__.py +++ b/stock_split_picking_kit/__manifest__.py @@ -5,7 +5,7 @@ "summary": "Split a picking by a number of kits.", "version": "14.0.1.0.0", "category": "Inventory", - "author": "Camptocamp, " "Odoo Community Association (OCA),", + "author": "Camptocamp, BCIM, Odoo Community Association (OCA),", "license": "AGPL-3", "website": "https://github.com/OCA/stock-logistics-workflow", "depends": ["stock_split_picking", "mrp"], diff --git a/stock_split_picking_kit/readme/CONTRIBUTORS.rst b/stock_split_picking_kit/readme/CONTRIBUTORS.rst index 0dd376faecb9..fae6a9d370e0 100644 --- a/stock_split_picking_kit/readme/CONTRIBUTORS.rst +++ b/stock_split_picking_kit/readme/CONTRIBUTORS.rst @@ -1 +1,2 @@ * Thierry Ducrest +* Jacques-Etienne Baudoux (BCIM) diff --git a/stock_split_picking_kit/readme/DESCRIPTION.rst b/stock_split_picking_kit/readme/DESCRIPTION.rst index 88f59733683a..ec43a6c1dd99 100644 --- a/stock_split_picking_kit/readme/DESCRIPTION.rst +++ b/stock_split_picking_kit/readme/DESCRIPTION.rst @@ -1,5 +1,7 @@ This module adds a new splitting mode to the `stock_split_picking` module. -The new mode `Quantity of kits` allows to split a transfer by a specified number of kits. -A new field on the wizard also allows specify a sort order for the stock moves before +The new mode `Quantity of kits` allows splitting a transfer by a specified number of kits. +A new field on the wizard also allows specifying a sort order for the stock moves before splitting the transfer. + +Multi level boms are not supported. diff --git a/stock_split_picking_kit/static/description/index.html b/stock_split_picking_kit/static/description/index.html index 767ace55ba17..742a960d3d38 100644 --- a/stock_split_picking_kit/static/description/index.html +++ b/stock_split_picking_kit/static/description/index.html @@ -371,7 +371,10 @@

Stock Split Picking Kit

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

Beta License: AGPL-3 OCA/stock-logistics-workflow Translate me on Weblate Try me on Runboat

This module adds a new splitting mode to the stock_split_picking module.

-

The new mode Quantity of kits allows to split a transfer by a specified number of kits.

+

The new mode Quantity of kits allows splitting a transfer by a specified number of kits. +A new field on the wizard also allows specifying a sort order for the stock moves before +splitting the transfer.

+

Multi level boms are not supported.

Table of contents

@@ -405,6 +409,7 @@

Authors

Contributors

diff --git a/stock_split_picking_kit/tests/test_stock_split_picking_kit.py b/stock_split_picking_kit/tests/test_stock_split_picking_kit.py index a16a08d1dc66..9c276df16d3a 100644 --- a/stock_split_picking_kit/tests/test_stock_split_picking_kit.py +++ b/stock_split_picking_kit/tests/test_stock_split_picking_kit.py @@ -18,24 +18,6 @@ def setUpClass(cls): cls.partner = cls.env["res.partner"].create({"name": "Test partner"}) cls.product_model = cls.env["product.product"] - # TODO: How should we handle kit with multiple level - # cls.product_garden_furniture = cls.product_model.create( - # { - # "name": "GARDEN FURNITURE", - # "type": "product", - # "sale_ok": False, - # "purchase_ok": True, - # } - # ) - # cls.tmpl_garden_furniture = cls.product_garden_furniture.product_tmpl_id - # cls.product_garden_chair = cls.product_model.create( - # { - # "name": "GARDEN CHAIR", - # "type": "product", - # "sale_ok": True, - # "purchase_ok": True, - # } - # ) cls.product_garden_table = cls.product_model.create( { "name": "GARDEN TABLE", @@ -86,25 +68,6 @@ def setUpClass(cls): ], } ) - # cls.bom_garden_furniture = cls.bom_model.create( - # { - # "product_tmpl_id": cls.tmpl_garden_furniture.id, - # "product_id": cls.product_garden_furniture.id, - # "type": "phantom", - # "bom_line_ids": [ - # ( - # 0, - # 0, - # {"product_id": cls.product_garden_chair.id, "product_qty": 4.0}, - # ), - # ( - # 0, - # 0, - # {"product_id": cls.product_garden_table.id, "product_qty": 1.0}, - # ), - # ], - # } - # ) @classmethod def _create_picking(cls, lines): @@ -129,13 +92,13 @@ def _get_picking_ids_from_action(self, res, expected_quantity): def _get_kit_quantity(cls, picking, bom): """Returns the quantity of kits in a transfer.""" filters = { - "incoming_moves": lambda m: m.location_id.usage == "supplier", - "outgoing_moves": lambda m: m.location_id.usage != "supplier", + "incoming_moves": lambda m: True, + "outgoing_moves": lambda m: False, } kit_quantity = picking.move_lines._compute_kit_quantities( - bom.product_id, 100, bom, filters + bom.product_id, max(picking.move_lines.mapped("product_qty")), bom, filters ) - return abs(kit_quantity) + return kit_quantity def _check_move_lines(self, picking, move_lines): moves = [] diff --git a/stock_split_picking_kit/wizards/stock_split_picking.py b/stock_split_picking_kit/wizards/stock_split_picking.py index 18235453c951..fb6665e95e8b 100644 --- a/stock_split_picking_kit/wizards/stock_split_picking.py +++ b/stock_split_picking_kit/wizards/stock_split_picking.py @@ -17,16 +17,16 @@ class StockSplitPicking(models.TransientModel): def _apply_kit_quantity(self): pickings = self.env["stock.picking"] - for picking in self.mapped("picking_ids"): + for picking in self.picking_ids: pickings |= self._split_by_kit_quantity(picking) return self._picking_action(pickings) def _split_by_kit_quantity(self, picking): filters = { - "incoming_moves": lambda m: m.location_id.usage == "supplier", - "outgoing_moves": lambda m: m.location_id.usage != "supplier", + "incoming_moves": lambda m: True, + "outgoing_moves": lambda m: False, } - move_lines = picking.move_lines + move_lines = picking.move_lines.filtered(lambda m: m.state not in ["done", "cancel"]) if self.split_kit_order_move: move_lines = move_lines.sorted(self.split_kit_order_move) moves_to_backorder = self.env["stock.move"] @@ -48,7 +48,7 @@ def _split_by_kit_quantity(self, picking): # Non kit moves, their quantity is the number of slots used for move in moves: quantity = move.product_qty - if available_slots >= move.product_qty: + if available_slots >= quantity: used_slots += quantity available_slots = max_slots - used_slots elif available_slots <= 0: @@ -67,7 +67,6 @@ def _split_by_kit_quantity(self, picking): bom, filters, ) - kit_quantity = abs(kit_quantity) if kit_quantity <= available_slots: used_slots += kit_quantity else: @@ -82,7 +81,7 @@ def _split_by_kit_quantity(self, picking): if moves_to_backorder: new_picking = picking._create_split_backorder() moves_to_backorder.write({"picking_id": new_picking.id}) - moves_to_backorder.mapped("move_line_ids").write( + moves_to_backorder.move_line_ids.write( {"picking_id": new_picking.id} )