diff options
Diffstat (limited to 'indoteknik_custom/models/partial_delivery.py')
| -rw-r--r-- | indoteknik_custom/models/partial_delivery.py | 52 |
1 files changed, 18 insertions, 34 deletions
diff --git a/indoteknik_custom/models/partial_delivery.py b/indoteknik_custom/models/partial_delivery.py index 83fe9981..4df7da1e 100644 --- a/indoteknik_custom/models/partial_delivery.py +++ b/indoteknik_custom/models/partial_delivery.py @@ -46,7 +46,6 @@ class PartialDeliveryWizard(models.TransientModel): raise UserError(_("Tidak ada produk yang dipilih.")) for line in self.line_ids: line.selected = True - # return action supaya wizard gak nutup return { 'type': 'ir.actions.act_window', 'res_model': self._name, @@ -60,7 +59,6 @@ class PartialDeliveryWizard(models.TransientModel): raise UserError(_("Tidak ada produk yang dipilih.")) for line in self.line_ids: line.selected = False - # juga reload biar tetap di wizard return { 'type': 'ir.actions.act_window', 'res_model': self._name, @@ -76,7 +74,6 @@ class PartialDeliveryWizard(models.TransientModel): self.line_ids = [(5, 0, 0)] return - # ๐งน hapus line lama dulu if self.line_ids: self.line_ids.unlink() @@ -95,7 +92,7 @@ class PartialDeliveryWizard(models.TransientModel): 'wizard_id': self.id, 'product_id': move.product_id.id, 'reserved_qty': reserved_qty, - 'selected_qty': reserved_qty, # biar langsung keisi default + # 'selected_qty': reserved_qty, 'move_id': move.id, 'sale_line_id': move.sale_line_id.id if move.sale_line_id else False, }) @@ -124,20 +121,26 @@ class PartialDeliveryWizard(models.TransientModel): if not selected_lines: raise UserError(_("Tidak ada produk yang dipilih atau diisi jumlahnya.")) - # ๐ง Tambahan: kalau semua line dipilih (full delivery) - all_selected = len(selected_lines) == len(self.line_ids) - full_selected = all_selected and all( - (line.selected_qty or line.reserved_qty) >= line.reserved_qty - for line in selected_lines + # ๐ง Cek apakah semua move di DO sudah muncul di wizard dan semua dipilih + picking_move_ids = picking.move_ids_without_package.ids + wizard_move_ids = self.line_ids.mapped('move_id').ids + + # Semua move DO muncul di wizard, dan semua baris dipilih + full_selected = ( + set(picking_move_ids) == set(wizard_move_ids) + and len(selected_lines) == len(self.line_ids) + and all( + (line.selected_qty or line.reserved_qty) >= line.reserved_qty + for line in selected_lines + ) ) if full_selected: # ๐ก Gak perlu bikin picking baru, langsung ubah state_reserve picking.write({'state_reserve': 'partial'}) - # Tambahin log aja biar ada jejak picking.message_post( - body=f"<b>Full Picking Confirmed</b> dari wizard partial delivery oleh {self.env.user.name}", + body=f"<b>Full Picking Confirmed</b> via wizard partial delivery oleh {self.env.user.name} (tanpa DO baru)", message_type="comment", subtype_xmlid="mail.mt_note", ) @@ -150,11 +153,12 @@ class PartialDeliveryWizard(models.TransientModel): "target": "current", "effect": { "fadeout": "slow", - "message": f"โ
Semua produk dikirim penuh โ tidak dibuat DO baru.", + "message": f"โ
Semua produk dari DO ini dikirim penuh โ tidak dibuat DO baru.", "type": "rainbow_man", }, } + # ๐งฉ Kalau bukan full selected, lanjut bikin DO baru new_picking = StockPicking.create({ 'origin': picking.origin, 'partner_id': picking.partner_id.id, @@ -171,11 +175,9 @@ class PartialDeliveryWizard(models.TransientModel): move = line.move_id move._do_unreserve() - # kalau cuma selected tanpa isi qty, otomatis set selected_qty = reserved_qty if line.selected and not line.selected_qty: line.selected_qty = line.reserved_qty - # MODE 1 โ Prioritas kalau ada selected_qty if line.selected_qty > 0: if line.selected_qty > move.product_uom_qty: raise UserError(_( @@ -184,7 +186,6 @@ class PartialDeliveryWizard(models.TransientModel): if line.selected_qty < move.product_uom_qty: qty_to_keep = move.product_uom_qty - line.selected_qty - # split move new_move = move.copy(default={ 'product_uom_qty': line.selected_qty, 'picking_id': new_picking.id, @@ -192,35 +193,21 @@ class PartialDeliveryWizard(models.TransientModel): }) move.write({'product_uom_qty': qty_to_keep}) else: - # full pindah move.write({'picking_id': new_picking.id, 'partial': True}) - - - # Confirm & assign DO baru new_picking.action_confirm() new_picking.action_assign() - - # Reassign DO lama biar sisa qty ke-update picking.action_assign() - # --- ๐ข Rename picking baru dengan format "/(Nomor urut)" --- existing_partials = self.env['stock.picking'].search([ ('origin', '=', picking.origin), ('state_reserve', '=', 'partial'), ('id', '!=', new_picking.id), ], order='name asc') - suffix_number = len(existing_partials) - if suffix_number == 0: - suffix_number = 1 - else: - suffix_number += 1 + suffix_number = len(existing_partials) + 1 + new_picking.name = f"{picking.name}/{suffix_number}" - new_name = f"{picking.name}/{suffix_number}" - new_picking.name = new_name - - # --- ๐ฌ Post message ke SO --- if picking.origin: sale_order = self.env['sale.order'].search([('name', '=', picking.origin)], limit=1) if sale_order: @@ -231,7 +218,6 @@ class PartialDeliveryWizard(models.TransientModel): subtype_xmlid="mail.mt_note", ) - # --- ๐ Log di DO baru --- new_picking.message_post( body=f"<b>Partial Picking created</b> dari {picking.name} oleh {self.env.user.name}", message_type="comment", @@ -251,8 +237,6 @@ class PartialDeliveryWizard(models.TransientModel): }, } - - class PartialDeliveryWizardLine(models.TransientModel): _name = 'partial.delivery.wizard.line' _description = 'Partial Delivery Wizard Line' |
