Set negative package quantity when return sales

#049954
This commit is contained in:
Raimon Esteve 2022-03-07 10:08:35 +01:00
parent f45a146fb8
commit f7e1ae83ff
3 changed files with 41 additions and 1 deletions

View file

@ -14,4 +14,5 @@ def register():
Pool.register(
sale.HandleShipmentException,
sale.HandleInvoiceException,
sale.ReturnSale,
module='sale_product_package', type_='wizard')

21
sale.py
View file

@ -8,7 +8,7 @@ from trytond.i18n import gettext
from trytond.exceptions import UserError
__all__ = ['Sale', 'SaleLine',
'HandleShipmentException', 'HandleInvoiceException']
'HandleShipmentException', 'HandleInvoiceException', 'ReturnSale']
class Sale(metaclass=PoolMeta):
@ -142,3 +142,22 @@ class HandleInvoiceException(metaclass=PoolMeta):
def transition_handle(self):
with Transaction().set_context(validate_package=False):
return super(HandleInvoiceException, self).transition_handle()
class ReturnSale(metaclass=PoolMeta):
__name__ = 'sale.return_sale'
def do_return_(self, action):
action, data = super().do_return_(action)
if data.get('res_id'):
sales = self.model.browse(data['res_id'])
for sale in sales:
for line in sale.lines:
if line.type == 'line' and line.package_quantity:
line.package_quantity *= -1
sale.lines = sale.lines # Force saving
self.model.save(sales)
return action, data

View file

@ -140,4 +140,24 @@ Sale products with package::
>>> line.quantity = 12
>>> line.package_quantity
2
>>> line = sale.lines.new()
>>> line.type = 'comment'
>>> line.description = 'Test comment'
>>> sale.save()
>>> sale.click('quote')
>>> sale.click('confirm')
>>> sale.state
'processing'
Return sale::
>>> return_sale = Wizard('sale.return_sale', [sale])
>>> return_sale.execute('return_')
>>> returned_sale, = Sale.find([
... ('state', '=', 'draft'),
... ])
>>> returned_sale.origin == sale
True
>>> sorted([(x.quantity or 0, x.package_quantity or 0) for x in returned_sale.lines])
[(-12.0, -2), (0, 0)]