1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
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
|