From 7a4c627da7645b3523ecc16040b40fb9cd69862a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Wed, 23 Aug 2023 19:56:35 +0200 Subject: [PATCH] Check customer product quantities for drop shipment --- modules/sale_supply_drop_shipment/CHANGELOG | 1 + modules/sale_supply_drop_shipment/stock.py | 25 ++++++++++++++++----- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/modules/sale_supply_drop_shipment/CHANGELOG b/modules/sale_supply_drop_shipment/CHANGELOG index 826d3f7c10..2bb369955b 100644 --- a/modules/sale_supply_drop_shipment/CHANGELOG +++ b/modules/sale_supply_drop_shipment/CHANGELOG @@ -1,3 +1,4 @@ +* Check customer product quantities for drop shipment Version 6.8.0 - 2023-05-01 -------------------------- diff --git a/modules/sale_supply_drop_shipment/stock.py b/modules/sale_supply_drop_shipment/stock.py index ac64e99d94..8ab8abeaf0 100644 --- a/modules/sale_supply_drop_shipment/stock.py +++ b/modules/sale_supply_drop_shipment/stock.py @@ -13,6 +13,7 @@ from trytond.model.exceptions import AccessError from trytond.modules.product import round_price from trytond.modules.purchase.stock import process_purchase from trytond.modules.sale.stock import process_sale +from trytond.modules.stock.shipment import ShipmentCheckQuantity from trytond.pool import Pool, PoolMeta from trytond.pyson import Eval, Id, If from trytond.tools import grouped_slice @@ -67,7 +68,7 @@ class ConfigurationSequence(metaclass=PoolMeta): return None -class ShipmentDrop(Workflow, ModelSQL, ModelView): +class ShipmentDrop(ShipmentCheckQuantity, Workflow, ModelSQL, ModelView): "Drop Shipment" __name__ = 'stock.shipment.drop' _rec_name = 'number' @@ -552,10 +553,16 @@ class ShipmentDrop(Workflow, ModelSQL, ModelView): Move = pool.get('stock.move') Date = pool.get('ir.date') cls.set_cost(shipments) - Move.delete([ - m for s in shipments for m in s.customer_moves - if not m.quantity]) - Move.do([m for s in shipments for m in s.customer_moves]) + customer_moves, to_delete = [], [] + for shipment in shipments: + shipment.check_quantity() + for move in shipment.customer_moves: + if move.quantity: + customer_moves.append(move) + else: + to_delete.append(move) + Move.delete(to_delete) + Move.do(customer_moves) for company, shipments in groupby(shipments, key=lambda s: s.company): with Transaction().set_context(company=company.id): today = Date.today() @@ -563,6 +570,14 @@ class ShipmentDrop(Workflow, ModelSQL, ModelView): 'effective_date': today, }) + @property + def _check_quantity_source_moves(self): + return self.supplier_moves + + @property + def _check_quantity_target_moves(self): + return self.customer_moves + class Move(metaclass=PoolMeta): __name__ = 'stock.move'