From e686904520343231fed37624002bc277ee2d0e4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Tue, 19 Mar 2024 09:22:08 +0100 Subject: [PATCH] Split customer moves when splitting supplier moves of drop shipment --- modules/sale_supply_drop_shipment/CHANGELOG | 1 + modules/sale_supply_drop_shipment/__init__.py | 4 +++ modules/sale_supply_drop_shipment/message.xml | 3 ++ modules/sale_supply_drop_shipment/setup.py | 5 ++- modules/sale_supply_drop_shipment/stock.py | 31 +++++++++++++++++++ .../tests/test_module.py | 1 + modules/sale_supply_drop_shipment/tryton.cfg | 2 ++ 7 files changed, 46 insertions(+), 1 deletion(-) diff --git a/modules/sale_supply_drop_shipment/CHANGELOG b/modules/sale_supply_drop_shipment/CHANGELOG index 6f08c35333..002c18f450 100644 --- a/modules/sale_supply_drop_shipment/CHANGELOG +++ b/modules/sale_supply_drop_shipment/CHANGELOG @@ -1,3 +1,4 @@ +* Split customer moves when splitting supplier moves * Rename 'done' button to 'do' Version 7.0.0 - 2023-10-30 diff --git a/modules/sale_supply_drop_shipment/__init__.py b/modules/sale_supply_drop_shipment/__init__.py index 16194fbfcd..ac66c3782f 100644 --- a/modules/sale_supply_drop_shipment/__init__.py +++ b/modules/sale_supply_drop_shipment/__init__.py @@ -30,3 +30,7 @@ def register(): party.Replace, party.Erase, module='sale_supply_drop_shipment', type_='wizard') + Pool.register( + stock.MoveSplit, + module='sale_supply_drop_shipment', type_='model', + depends=['stock_split']) diff --git a/modules/sale_supply_drop_shipment/message.xml b/modules/sale_supply_drop_shipment/message.xml index 6b41a1d8fa..e77aa6d7fd 100644 --- a/modules/sale_supply_drop_shipment/message.xml +++ b/modules/sale_supply_drop_shipment/message.xml @@ -12,5 +12,8 @@ this repository contains the full copyright notices and license terms. --> To delete drop shipment "%(shipment)s" you must cancel it. + + To split move from drop shipment, you must use the split wizard. + diff --git a/modules/sale_supply_drop_shipment/setup.py b/modules/sale_supply_drop_shipment/setup.py index 6d9e9d8591..4c57999688 100755 --- a/modules/sale_supply_drop_shipment/setup.py +++ b/modules/sale_supply_drop_shipment/setup.py @@ -47,7 +47,10 @@ for dep in info.get('depends', []): requires.append(get_require_version('trytond_%s' % dep)) requires.append(get_require_version('trytond')) -tests_require = [get_require_version('proteus')] +tests_require = [ + get_require_version('proteus'), + get_require_version('trytond_stock_split'), + ] setup(name=name, version=version, diff --git a/modules/sale_supply_drop_shipment/stock.py b/modules/sale_supply_drop_shipment/stock.py index ac29b78a31..c19d46cbcd 100644 --- a/modules/sale_supply_drop_shipment/stock.py +++ b/modules/sale_supply_drop_shipment/stock.py @@ -588,6 +588,37 @@ class Move(metaclass=PoolMeta): @classmethod def copy(cls, moves, default=None): + context = Transaction().context + if (context.get('_stock_move_split') + and not context.get('_stock_move_split_drop')): + for move in moves: + if move.moves_drop: + raise AccessError( + gettext('sale_supply_drop_shipment' + '.msg_move_split_drop')) default = default.copy() if default is not None else {} default.setdefault('moves_drop') return super().copy(moves, default=default) + + +class MoveSplit(metaclass=PoolMeta): + __name__ = 'stock.move' + + def split(self, quantity, unit, count=None): + with Transaction().set_context(_stock_move_split_drop=True): + moves = super().split(quantity, unit, count=count) + if self.moves_drop: + to_save = [] + moves_drop = list(self.moves_drop) + for move in moves: + remainder = move.quantity + while remainder > 0 and moves_drop: + move_drop = moves_drop.pop(0) + splits = move_drop.split(remainder, move.unit, count=1) + move_drop.origin_drop = move + remainder -= move_drop.quantity + to_save.append(move_drop) + splits.remove(move_drop) + moves_drop.extend(splits) + self.__class__.save(to_save) + return moves diff --git a/modules/sale_supply_drop_shipment/tests/test_module.py b/modules/sale_supply_drop_shipment/tests/test_module.py index ada7543af8..6929aab7e9 100644 --- a/modules/sale_supply_drop_shipment/tests/test_module.py +++ b/modules/sale_supply_drop_shipment/tests/test_module.py @@ -10,6 +10,7 @@ class SaleSupplyDropShipmentTestCase( PartyCompanyCheckEraseMixin, CompanyTestMixin, ModuleTestCase): 'Test SaleSupplyDropShipment module' module = 'sale_supply_drop_shipment' + extras = ['stock_split'] del ModuleTestCase diff --git a/modules/sale_supply_drop_shipment/tryton.cfg b/modules/sale_supply_drop_shipment/tryton.cfg index 418412b74a..7b45c8fe09 100644 --- a/modules/sale_supply_drop_shipment/tryton.cfg +++ b/modules/sale_supply_drop_shipment/tryton.cfg @@ -9,6 +9,8 @@ depends: sale sale_supply stock +extras_depend: + stock_split xml: stock.xml sale.xml