summaryrefslogtreecommitdiff
path: root/indoteknik_custom/models/stock_backorder_confirmation.py
diff options
context:
space:
mode:
authorAzka Nathan <darizkyfaz@gmail.com>2025-02-19 09:38:46 +0700
committerAzka Nathan <darizkyfaz@gmail.com>2025-02-19 09:38:46 +0700
commit99b252edaefc372fcd4ef59e065284d8feeb669c (patch)
treee8b782c355517eb7fe01ee6321fc36c7ba2672ef /indoteknik_custom/models/stock_backorder_confirmation.py
parentc99bf4c49859450ce4cb081c920edda2077b3b1a (diff)
push
Diffstat (limited to 'indoteknik_custom/models/stock_backorder_confirmation.py')
-rw-r--r--indoteknik_custom/models/stock_backorder_confirmation.py50
1 files changed, 50 insertions, 0 deletions
diff --git a/indoteknik_custom/models/stock_backorder_confirmation.py b/indoteknik_custom/models/stock_backorder_confirmation.py
new file mode 100644
index 00000000..0fd7c34e
--- /dev/null
+++ b/indoteknik_custom/models/stock_backorder_confirmation.py
@@ -0,0 +1,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