from odoo import models, fields, api from odoo.tools.float_utils import float_compare class StockBackorderConfirmation(models.TransientModel): _inherit = 'stock.backorder.confirmation' def process(self): res = super(StockBackorderConfirmation, self).process() pickings_to_do = self.env['stock.picking'] for line in self.backorder_confirmation_line_ids: if line.to_backorder: pickings_to_do |= line.picking_id for pick in pickings_to_do: # Mencari backorder yang baru terbentuk backorder = self.env['stock.picking'].search([('backorder_id', '=', pick.id)], limit=1) if backorder: # Cari BU/OUT terbaru berdasarkan sale_id latest_out_picking = self.env['stock.picking'].search([ ('sale_id', '=', pick.sale_id.id), ('picking_type_id.code', '=', 'outgoing') ], order='id desc', limit=1) # Update linked_out_picking_id pada backorder BU/PICK if latest_out_picking: backorder.linked_out_picking_id = latest_out_picking.id else: backorder.linked_out_picking_id = pick.linked_out_picking_id # 🚀 Cek apakah ada backorder baru dari BU/OUT for pick in self.env['stock.picking'].search([ ('picking_type_id.code', '=', 'outgoing'), ('backorder_id', '!=', False) ]): # Backorder BU/OUT terbaru latest_out_backorder = self.env['stock.picking'].search([ ('backorder_id', '=', pick.id) ], order='id desc', limit=1) if latest_out_backorder: # 🚀 Update semua BU/PICK yang belum `done` atau `cancel` self.env['stock.picking'].search([ ('sale_id', '=', pick.sale_id.id), ('picking_type_id.code', '=', 'incoming'), ('state', 'not in', ['done', 'cancel']) ]).write({'linked_out_picking_id': latest_out_backorder.id}) return res