summaryrefslogtreecommitdiff
path: root/indoteknik_custom/models/stock_backorder_confirmation.py
blob: 0fd7c34e54c5a54164779f797a0bb5bdfaf1b54c (plain)
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