From c62161ecb60077ec195ff0344fdf073458a05377 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Sun, 12 Mar 2023 22:48:06 +0100 Subject: [PATCH] Return sale using a single copy call This avoid to update the origin which is forbidden when it is an opportunity. Closes #12116 --- modules/sale/sale.py | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/modules/sale/sale.py b/modules/sale/sale.py index cd9862dc6b..42db08a8d3 100644 --- a/modules/sale/sale.py +++ b/modules/sale/sale.py @@ -2148,14 +2148,13 @@ class ReturnSale(Wizard): def do_return_(self, action): sales = self.records - return_sales = self.model.copy(sales) - for return_sale, sale in zip(return_sales, sales): - return_sale.origin = sale - for line in return_sale.lines: - if line.type == 'line': - line.quantity *= -1 - return_sale.lines = return_sale.lines # Force saving - self.model.save(return_sales) + return_sales = self.model.copy(sales, default={ + 'origin': lambda data: ( + '%s,%s' % (self.model.__name__, data['id'])), + 'lines.quantity': lambda data: ( + data['quantity'] * -1 if data['type'] == 'line' + else data['quantity']), + }) data = {'res_id': [s.id for s in return_sales]} if len(return_sales) == 1: