mirror of
https://github.com/OCA/rma.git
synced 2025-02-16 17:11:47 +02:00
[FIX] rma_sale: chained returns
Using move_dest_ids we can easily end in an infinite loop situation as the return of the return of the return ends with some original moves on in move_dest_ids. We must ensure to drop them to avoid the infinite loop. TT29886
This commit is contained in:
@@ -130,12 +130,19 @@ class SaleOrderLine(models.Model):
|
||||
qty = move.product_uom_qty
|
||||
qty_returned = 0
|
||||
move_dest = destination_moves(move)
|
||||
# With the return of the return of the return we could have an
|
||||
# infinite loop, so we should avoid it dropping already explored
|
||||
# move_dest_ids
|
||||
visited_moves = move + move_dest
|
||||
while move_dest:
|
||||
qty_returned -= sum(move_dest.mapped("product_uom_qty"))
|
||||
move_dest = destination_moves(move_dest)
|
||||
move_dest = destination_moves(move_dest) - visited_moves
|
||||
if move_dest:
|
||||
visited_moves += move_dest
|
||||
qty += sum(move_dest.mapped("product_uom_qty"))
|
||||
move_dest = destination_moves(move_dest)
|
||||
move_dest = (
|
||||
destination_moves(move_dest) - visited_moves
|
||||
)
|
||||
# If by chance we get a negative qty we should ignore it
|
||||
qty = max(0, sum((qty, qty_returned)))
|
||||
data.append(
|
||||
|
||||
Reference in New Issue
Block a user