From 13e3a4bf7769ff5bebc42ad7dcdfc6f77441bf32 Mon Sep 17 00:00:00 2001 From: Christopher Ormaza Date: Mon, 7 Feb 2022 09:03:08 -0500 Subject: [PATCH] [FIX] rma: add lot to pickings created from wizard on RMA lines --- rma/models/stock.py | 6 +++++ rma/wizards/rma_make_picking.py | 44 +++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/rma/models/stock.py b/rma/models/stock.py index 01d79647..2cab4bb3 100644 --- a/rma/models/stock.py +++ b/rma/models/stock.py @@ -60,3 +60,9 @@ class StockMove(models.Model): return self.move_dest_ids[0]._get_last_usage() else: return self.location_dest_id.usage + + def _should_bypass_reservation(self): + res = super(StockMove, self)._should_bypass_reservation() + if self.env.context.get("force_no_bypass_reservation"): + return False + return res diff --git a/rma/wizards/rma_make_picking.py b/rma/wizards/rma_make_picking.py index 5a446c57..ef904584 100644 --- a/rma/wizards/rma_make_picking.py +++ b/rma/wizards/rma_make_picking.py @@ -189,11 +189,55 @@ class RmaMakePicking(models.TransientModel): def action_create_picking(self): self._create_picking() + move_line_model = self.env["stock.move.line"] picking_type = self.env.context.get("picking_type") + pickings = self.env["stock.picking"].browse() if picking_type == "outgoing": + pickings = self.mapped("item_ids.line_id")._get_out_pickings() action = self.item_ids.line_id.action_view_out_shipments() else: + pickings = self.mapped("item_ids.line_id")._get_in_pickings() action = self.item_ids.line_id.action_view_in_shipments() + for move in pickings.move_lines.filtered( + lambda x: x.state not in ("draft", "cancel", "done") + and x.rma_line_id + and x.product_id.tracking in ("lot", "serial") + and x.rma_line_id.lot_id + ): + move.move_line_ids.unlink() + if move.product_id.tracking == "serial": + move.write( + { + "lot_ids": [(6, 0, move.rma_line_id.lot_id.ids)], + } + ) + move.move_line_ids.write( + { + "product_uom_qty": 1, + "qty_done": 0, + } + ) + elif move.product_id.tracking == "lot": + if picking_type == "incoming": + qty = self.item_ids.filtered( + lambda x: x.line_id.id == move.rma_line_id.id + ).qty_to_receive + else: + qty = self.item_ids.filtered( + lambda x: x.line_id.id == move.rma_line_id.id + ).qty_to_deliver + move_line_data = move._prepare_move_line_vals() + move_line_data.update( + { + "lot_id": move.rma_line_id.lot_id.id, + "product_uom_id": move.product_id.uom_id.id, + "qty_done": 0, + "product_uom_qty": qty, + } + ) + move_line_model.create(move_line_data) + if picking_type == "incoming": + pickings.with_context(force_no_bypass_reservation=True).action_assign() return action def action_cancel(self):