diff --git a/CHANGELOG b/CHANGELOG index 033f3d0261..1c45008ab0 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,4 @@ +* Check pending shipment to erase party * Define how inventory non filled lines are managed * Do not fill inventory quantity automatically * Assign supplier return shipment using children when location is a view diff --git a/__init__.py b/__init__.py index 166b1bb5cd..0173b4b6c4 100644 --- a/__init__.py +++ b/__init__.py @@ -9,7 +9,7 @@ from .move import * from .product import * from .inventory import * from .configuration import * -from .party import PartyReplace +from . import party def register(): @@ -47,7 +47,8 @@ def register(): AssignShipmentInternal, AssignShipmentInReturn, RecomputeCostPrice, - PartyReplace, + party.PartyReplace, + party.PartyErase, module='stock', type_='wizard') Pool.register( DeliveryNote, diff --git a/party.py b/party.py index 1ad130722d..ca6c119064 100644 --- a/party.py +++ b/party.py @@ -1,8 +1,8 @@ # This file is part of Tryton. The COPYRIGHT file at the top level of # this repository contains the full copyright notices and license terms. -from trytond.pool import PoolMeta +from trytond.pool import PoolMeta, Pool -__all__ = ['PartyReplace'] +__all__ = ['PartyReplace', 'PartyErase'] class PartyReplace: @@ -17,3 +17,42 @@ class PartyReplace: ('stock.shipment.out', 'customer'), ('stock.shipment.out.return', 'customer'), ] + + +class PartyErase: + __metaclass__ = PoolMeta + __name__ = 'party.erase' + + @classmethod + def __setup__(cls): + super(PartyErase, cls).__setup__() + cls._error_messages.update({ + 'pending_shipment': ( + 'The party "%(party)s" can not be erased ' + 'because he has pending shipments' + 'for the company "%(company)s".'), + }) + + def check_erase_company(self, party, company): + pool = Pool() + ShipmentIn = pool.get('stock.shipment.in') + ShipmentInReturn = pool.get('stock.shipment.in.return') + ShipmentOut = pool.get('stock.shipment.out') + ShipmentOutReturn = pool.get('stock.shipment.out.return') + super(PartyErase, self).check_erase_company(party, company) + + for Shipment, field in [ + (ShipmentIn, 'supplier'), + (ShipmentInReturn, 'supplier'), + (ShipmentOut, 'customer'), + (ShipmentOutReturn, 'customer'), + ]: + shipments = Shipment.search([ + (field, '=', party.id), + ('state', 'not in', ['done', 'cancel']), + ]) + if shipments: + self.raise_user_error('pending_shipment', { + 'party': party.rec_name, + 'company': company.rec_name, + })