From c8f1676de91e4defd2fdc30f2369a1d99858c9ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E5=B0=A7?= Date: Tue, 1 Jul 2025 17:55:07 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E9=87=87=E8=B4=AD=E7=94=B3?= =?UTF-8?q?=E8=AF=B7=E5=88=9B=E5=BB=BA=E7=9A=84=E9=87=87=E8=B4=AD=E5=8D=95?= =?UTF-8?q?=E5=8F=96=E6=B6=88=E5=90=8E=E5=AF=BC=E8=87=B4=E8=B0=83=E6=8B=A8?= =?UTF-8?q?=E5=8D=95=E4=B8=8D=E8=83=BD=E5=B0=B1=E7=BB=AA=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../models/purchase_order.py | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/jikimo_purchase_request/models/purchase_order.py b/jikimo_purchase_request/models/purchase_order.py index 95f81e9f..5284be7a 100644 --- a/jikimo_purchase_request/models/purchase_order.py +++ b/jikimo_purchase_request/models/purchase_order.py @@ -34,9 +34,43 @@ class PurchaseOrder(models.Model): 将取消的采购订单关联的库存移动撤销 """ move_ids = self.order_line.move_dest_ids.filtered(lambda move: move.state != 'done' and not move.scrapped) + move_line_ids = {} + move_states = { move_id.id: move_id.state for move_id in move_ids } + move_orig_ids = move_ids.move_orig_ids + move_dest_ids = move_ids.move_dest_ids + for move_line_id in move_ids.move_line_ids: + move_line_ids[move_line_id.move_id.id] = move_line_id.copy() + move_line_ids[move_line_id.move_id.id].move_id = False + move_line_ids[move_line_id.move_id.id].reserved_uom_qty = move_line_id.reserved_uom_qty + res =super(PurchaseOrder, self).button_cancel() + if move_ids.mapped('created_purchase_request_line_id'): + # 如果采购订单关联了采购申请,则将库存移动的状态设置为等待 move_ids.write({'state': 'waiting', 'is_done': False}) + move_ids.write({'move_orig_ids': [(4, move_orig_id.id, 0) for move_orig_id in move_orig_ids]}) + move_ids.write({'move_dest_ids': [(4, move_dest_id.id, 0) for move_dest_id in move_dest_ids]}) + for move_id in move_ids: + move_id.write({'procure_method': 'make_to_order', 'state': move_states[move_id.id]}) + move_id.write({'move_line_ids': [(4, move_line_ids[move_id.id].id, 0)]}) + move_id._action_assign() + origin_move_id = move_id + # 追回原mto的库存移动 + link_move_ids = self.env['stock.move'].search([ + ('origin','=',move_id.origin), + ('procure_method','=','make_to_stock'), + ('product_id','=',move_id.product_id.id), + ('id', '!=', move_id.id) + ]) + while link_move_ids: + link_move_id = link_move_ids.filtered(lambda move: move.location_id == origin_move_id.location_dest_id) + link_move_id.write({ + 'move_orig_ids': [(4, origin_move_id.id, 0)] if origin_move_id != link_move_id else [], + 'procure_method': 'make_to_order', + }) + origin_move_id = link_move_id + link_move_ids -= link_move_id + return res def write(self, vals):