summaryrefslogtreecommitdiff
path: root/indoteknik_custom/models/partial_delivery.py
diff options
context:
space:
mode:
Diffstat (limited to 'indoteknik_custom/models/partial_delivery.py')
-rw-r--r--indoteknik_custom/models/partial_delivery.py52
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'