summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--indoteknik_custom/models/stock_picking.py36
1 files changed, 17 insertions, 19 deletions
diff --git a/indoteknik_custom/models/stock_picking.py b/indoteknik_custom/models/stock_picking.py
index 0e425f68..be033b39 100644
--- a/indoteknik_custom/models/stock_picking.py
+++ b/indoteknik_custom/models/stock_picking.py
@@ -943,8 +943,8 @@ class StockPicking(models.Model):
if len(self.scan_koli_lines) == 0 and 'BU/OUT/' in self.name and self.picking_type_code == 'outgoing':
raise UserError(_("Tidak ada scan koli! Harap periksa kembali."))
- if self.driver_departure_date == False and 'BU/OUT/' in self.name and self.picking_type_code == 'outgoing':
- raise UserError(_("Isi Driver Departure Date dulu sebelum validate"))
+ # if self.driver_departure_date == False and 'BU/OUT/' in self.name and self.picking_type_code == 'outgoing':
+ # raise UserError(_("Isi Driver Departure Date dulu sebelum validate"))
if len(self.check_koli_lines) == 0 and 'BU/PICK/' in self.name:
raise UserError(_("Tidak ada koli! Harap periksa kembali."))
@@ -1594,21 +1594,17 @@ class ScanKoli(models.Model):
if not self.koli_id:
return
- # Pastikan konfirm_koli_lines tidak kosong
if not self.picking_id.konfirm_koli_lines:
raise UserError(_('Mapping Koli Harus Diisi!'))
- # Ambil origin picking dari koli yang dipilih
koli_picking = self.koli_id.picking_id._origin
- # Kumpulkan semua origin picking dari konfirm koli lines
konfirm_pick_ids = [
line.pick_id._origin
for line in self.picking_id.konfirm_koli_lines
if line.pick_id
]
- # Validasi apakah koli_picking ada dalam daftar konfirmasi
if koli_picking not in konfirm_pick_ids:
raise UserError(_('Koli tidak sesuai dengan mapping koli, pastikan picking terkait benar!'))
@@ -1619,20 +1615,18 @@ class ScanKoli(models.Model):
existing_koli = self.search([
('picking_id', '=', record.picking_id.id),
('koli_id', '=', record.koli_id.id),
- ('id', '!=', record.id) # Exclude current record
+ ('id', '!=', record.id)
])
if existing_koli:
raise ValidationError(f"⚠️ Koli '{record.koli_id.display_name}' sudah discan untuk picking ini!")
def unlink(self):
- picking_ids = set(self.mapped('koli_id.picking_id.id')) # Ambil semua picking_id yang terpengaruh
+ picking_ids = set(self.mapped('koli_id.picking_id.id'))
for scan in self:
koli = scan.koli_id.koli_id
if koli:
- # Hapus reserved_id saat scan dihapus
koli.reserved_id = False
- # Periksa ulang apakah masih ada scan.koli yang tersisa untuk setiap picking_id
for picking_id in picking_ids:
remaining_scans = self.env['sales.order.koli'].search_count([
('koli_id.picking_id', '=', picking_id)
@@ -1640,8 +1634,6 @@ class ScanKoli(models.Model):
delete_koli = len(self.filtered(lambda rec: rec.koli_id.picking_id.id == picking_id))
-
- # Jika tidak ada scan.koli lain yang tersisa, set linked_out_picking_id ke False
if remaining_scans == delete_koli:
picking = self.env['stock.picking'].browse(picking_id)
picking.linked_out_picking_id = False
@@ -1666,7 +1658,6 @@ class ScanKoli(models.Model):
scan.koli_id.koli_id.picking_id.linked_out_picking_id = scan.picking_id.id.origin
def _compute_scan_koli_progress(self):
- """ Menghitung progres scan koli dalam format 'X/Y' """
for scan in self:
if scan.picking_id:
all_scans = self.env['scan.koli'].search([('picking_id', '=', scan.picking_id.id)], order='id')
@@ -1676,7 +1667,6 @@ class ScanKoli(models.Model):
@api.constrains('picking_id', 'picking_id.total_so_koli')
def _check_koli_validation(self):
- """ Validasi jika jumlah scan koli melebihi total SO koli """
for scan in self.picking_id.scan_koli_lines:
scan.koli_id.koli_id.reserved_id = scan.picking_id.id
scan.koli_id.koli_id.picking_id.linked_out_picking_id = scan.picking_id.id
@@ -1709,24 +1699,21 @@ class ScanKoli(models.Model):
koli_count_by_picking = defaultdict(int)
for scan in self:
- koli_count_by_picking[scan.koli_id.picking_id.id] += 1 # Hitung jumlah koli per picking
+ koli_count_by_picking[scan.koli_id.picking_id.id] += 1
for picking_id, total_koli in koli_count_by_picking.items():
picking = self.env['stock.picking'].browse(picking_id)
if total_koli == picking.quantity_koli:
- # Ambil stock moves dari BU/PICK dan BU/OUT berdasarkan picking_id
pick_moves = self.env['stock.move.line'].search([('picking_id', '=', picking_id)])
out_moves = self.env['stock.move.line'].search([('picking_id', '=', picking.linked_out_picking_id.id)])
- # Sesuaikan product_id di BU/OUT dengan BU/PICK
for pick_move in pick_moves:
corresponding_out_move = out_moves.filtered(lambda m: m.product_id == pick_move.product_id)
if corresponding_out_move:
corresponding_out_move.qty_done += pick_move.qty_done
def _reset_qty_done_if_no_scan(self, picking_id):
- """Set qty_done ke 0 hanya jika tidak ada scan.koli tersisa untuk picking_id tersebut."""
product_bu_pick = self.env['stock.move.line'].search([('picking_id', '=', picking_id)])
for move in product_bu_pick:
@@ -1756,6 +1743,18 @@ class KonfirmKoli(models.Model):
)
pick_id = fields.Many2one('stock.picking', string='Pick')
+ @api.constrains('pick_id')
+ def _check_duplicate_pick_id(self):
+ for rec in self:
+ exist = self.search([
+ ('pick_id', '=', rec.pick_id.id),
+ ('picking_id', '=', rec.picking_id.id),
+ ('id', '!=', rec.id),
+ ])
+
+ if exist:
+ raise UserError(f"⚠️ '{rec.pick_id.display_name}' sudah discan untuk picking ini!")
+
class WarningModalWizard(models.TransientModel):
_name = 'warning.modal.wizard'
_description = 'Peringatan Koli Belum Diperiksa'
@@ -1765,7 +1764,6 @@ class WarningModalWizard(models.TransientModel):
picking_id = fields.Many2one('stock.picking')
def action_continue(self):
- """Lanjutkan validasi setelah menutup wizard"""
if self.picking_id:
return self.picking_id.with_context(skip_koli_check=True).button_validate()
return {'type': 'ir.actions.act_window_close'}