From 4ff573a3ba0978c163173e618583ffb127cdd1f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20=C3=89vrard?= Date: Tue, 17 Nov 2015 17:32:14 -0300 Subject: [PATCH] Cancel sales move when cancelling a purchase request issue5107 review19591002 --- __init__.py | 3 +++ purchase.py | 24 +++++++++++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/__init__.py b/__init__.py index c9e6c5cbe3..39bdb569c7 100644 --- a/__init__.py +++ b/__init__.py @@ -17,3 +17,6 @@ def register(): ShipmentIn, Template, module='sale_supply', type_='model') + Pool.register( + HandlePurchaseCancellationException, + module='sale_supply', type_='wizard') diff --git a/purchase.py b/purchase.py index 5abadbadcf..2edec35398 100644 --- a/purchase.py +++ b/purchase.py @@ -7,7 +7,8 @@ from trytond.pool import Pool, PoolMeta from trytond.transaction import Transaction from trytond.tools import grouped_slice -__all__ = ['PurchaseRequest', 'Purchase'] +__all__ = ['PurchaseRequest', 'Purchase', + 'HandlePurchaseCancellationException'] __metaclass__ = PoolMeta @@ -81,3 +82,24 @@ class Purchase: def cancel(cls, purchases): super(Purchase, cls).cancel(purchases) cls._sale_supply_process(purchases) + + +class HandlePurchaseCancellationException: + __name__ = 'purchase.request.handle.purchase.cancellation' + + def transition_cancel_request(self): + pool = Pool() + SaleLine = pool.get('sale.line') + Move = pool.get('stock.move') + + next_state = super(HandlePurchaseCancellationException, + self).transition_cancel_request() + moves = [] + for sub_ids in grouped_slice(Transaction().context['active_ids']): + sale_lines = SaleLine.search([ + ('purchase_request', 'in', sub_ids), + ]) + moves += [m for line in sale_lines for m in line.moves] + if moves: + Move.cancel(moves) + return next_state