summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiqdad <ahmadmiqdad27@gmail.com>2025-07-15 09:12:40 +0700
committerMiqdad <ahmadmiqdad27@gmail.com>2025-07-15 09:12:40 +0700
commit4f8f59f274e8ea19fcaa5f1c6b0e6e30400c66f7 (patch)
tree59533030e720989108805c94b069872ef8d02407
parent15198bbee7d54580fadec9be6cbf69fb4a2d500d (diff)
<miqdad> try
-rw-r--r--indoteknik_custom/models/tukar_guling.py2
-rw-r--r--indoteknik_custom/models/tukar_guling_po.py89
2 files changed, 44 insertions, 47 deletions
diff --git a/indoteknik_custom/models/tukar_guling.py b/indoteknik_custom/models/tukar_guling.py
index 89f5994d..7e857d02 100644
--- a/indoteknik_custom/models/tukar_guling.py
+++ b/indoteknik_custom/models/tukar_guling.py
@@ -205,6 +205,7 @@ class TukarGuling(models.Model):
raise ValidationError(
_("Tidak bisa memilih Return Type 'Revisi SO' karena dokumen %s sudah dibuat invoice.") % record.origin
)
+
@api.model
def create(self, vals):
# Generate sequence number
@@ -269,7 +270,6 @@ class TukarGuling(models.Model):
# else:
# _logger.info("hehhe")
-
if 'operations' in vals and not vals.get('origin'):
picking = self.env['stock.picking'].browse(vals['operations'])
if picking.origin:
diff --git a/indoteknik_custom/models/tukar_guling_po.py b/indoteknik_custom/models/tukar_guling_po.py
index ba2b3800..6d7d7335 100644
--- a/indoteknik_custom/models/tukar_guling_po.py
+++ b/indoteknik_custom/models/tukar_guling_po.py
@@ -390,49 +390,40 @@ class TukarGulingPO(models.Model):
created_returns = []
- # Ambil BU INPUT & BU PUT dari group yang sama
group = record.operations.group_id
- bu_input_to_return = bu_put_to_return = False
+ bu_inputs = bu_puts = self.env['stock.picking']
if group:
po_pickings = self.env['stock.picking'].search([
('group_id', '=', group.id),
('state', '=', 'done')
])
- bu_input_to_return = po_pickings.filtered(lambda p: p.picking_type_id.id == 28)
- bu_put_to_return = po_pickings.filtered(lambda p: p.picking_type_id.id == 75)
- bu_input_to_return = bu_input_to_return[0] if bu_input_to_return else False
- bu_put_to_return = bu_put_to_return[0] if bu_put_to_return else False
+ bu_inputs = po_pickings.filtered(lambda p: p.picking_type_id.id == 28)
+ bu_puts = po_pickings.filtered(lambda p: p.picking_type_id.id == 75)
else:
raise UserError("Group ID tidak ditemukan pada BU Operations.")
- # Fungsi buat return picking
+ PARTNER_LOCATION_ID = 4
+ BU_INPUT_LOCATION_ID = 58
+ BU_STOCK_LOCATION_ID = 57
+
def _create_return_from_picking(picking):
- grup = record.operations.group_id
+ if not picking:
+ return None
- PARTNER_LOCATION_ID = 4
- BU_INPUT_LOCATION_ID = 58
- BU_STOCK_LOCATION_ID = 57
+ grup = record.operations.group_id
- # Lokasi sesuai type
+ # Mapping lokasi sesuai picking type
if picking.picking_type_id.id == 28:
- # Retur dari BU INPUT → hasilnya jadi PRT (BU Input → Partner)
- # tapi wizard tetap diinput sebagai picking_id=28, dari input ke partner
default_location_id = BU_INPUT_LOCATION_ID
default_location_dest_id = PARTNER_LOCATION_ID
-
elif picking.picking_type_id.id == 75:
- # Retur dari BU PUT → hasilnya jadi VRT (BU Stock → BU Input)
default_location_id = BU_STOCK_LOCATION_ID
default_location_dest_id = BU_INPUT_LOCATION_ID
-
elif picking.picking_type_id.id == 77:
- # Retur dari VRT → hasilnya jadi PUT lagi (BU Input → BU Stock)
default_location_id = BU_INPUT_LOCATION_ID
default_location_dest_id = BU_STOCK_LOCATION_ID
-
elif picking.picking_type_id.id == 76:
- # Retur dari PRT → hasilnya jadi INPUT lagi (Partner → BU Input)
default_location_id = PARTNER_LOCATION_ID
default_location_dest_id = BU_INPUT_LOCATION_ID
else:
@@ -452,7 +443,7 @@ class TukarGulingPO(models.Model):
'original_location_id': default_location_id
})
- # Buat lines
+ # Sesuai line tukar guling
return_lines = []
for line in record.line_ids:
move = picking.move_lines.filtered(lambda m: m.product_id == line.product_id)
@@ -462,6 +453,11 @@ class TukarGulingPO(models.Model):
'quantity': line.product_uom_qty,
'move_id': move[0].id,
}))
+ else:
+ raise UserError(
+ _("Tidak ditemukan move line di picking %s untuk produk %s")
+ % (picking.name, line.product_id.display_name)
+ )
if not return_lines:
return None
@@ -470,7 +466,9 @@ class TukarGulingPO(models.Model):
return_vals = return_wizard.create_returns()
return_picking = self.env['stock.picking'].browse(return_vals.get('res_id'))
- # Paksa locations di picking & moves
+ if not return_picking:
+ raise UserError("Retur gagal dibuat. Hasil create_returns: %s" % str(return_vals))
+
return_picking.write({
'location_id': default_location_id,
'location_dest_id': default_location_dest_id,
@@ -478,46 +476,45 @@ class TukarGulingPO(models.Model):
'tukar_guling_po_id': record.id,
})
+ # Paksa lokasi di move lines juga
for move in return_picking.move_lines:
move.write({
'location_id': default_location_id,
'location_dest_id': default_location_dest_id,
})
- # # Rename BU INPUT jadi BU/INPUT/
- # if return_picking.picking_type_id.id == 28 and return_picking.name.startswith('BU/IN/'):
- # old_name = return_picking.name
- # return_picking.name = return_picking.name.replace('BU/IN/', 'BU/INPUT/', 1)
- # _logger.info("Rename %s -> %s", old_name, return_picking.name)
-
return return_picking
- # Kalau retur BU/INPUT Buat prt saja
+ # === Eksekusi pembuatan picking ===
if record.operations.picking_type_id.id == 28:
+ # Kalau dari BU INPUT → hanya PRT
prt = _create_return_from_picking(record.operations)
if prt:
created_returns.append(prt)
- # Kalau retur BU/PUT
else:
- vrt = _create_return_from_picking(bu_put_to_return)
- if vrt:
- created_returns.append(vrt)
-
- prt = None
- if bu_input_to_return:
- prt = _create_return_from_picking(bu_input_to_return)
+ # 1. Dari BU PUT buat VRT
+ for bu_put in bu_puts:
+ vrt = _create_return_from_picking(bu_put)
+ if vrt:
+ created_returns.append(vrt)
+
+ # 2. Dari BU INPUT buat PRT
+ for bu_input in bu_inputs:
+ prt = _create_return_from_picking(bu_input)
if prt:
created_returns.append(prt)
- if record.return_type == 'tukar_guling':
- if prt:
- bu_input = _create_return_from_picking(prt)
- if bu_input:
- created_returns.append(bu_input)
- if vrt:
- bu_put = _create_return_from_picking(vrt)
- if bu_put:
- created_returns.append(bu_put)
+ # 3. Kalau tukar guling buat lanjut INPUT & PUT
+ if record.return_type == 'tukar_guling':
+ for prt in created_returns.filtered(lambda p: p.picking_type_id.id == 76):
+ bu_input = _create_return_from_picking(prt)
+ if bu_input:
+ created_returns.append(bu_input)
+
+ for vrt in created_returns.filtered(lambda p: p.picking_type_id.id == 77):
+ bu_put = _create_return_from_picking(vrt)
+ if bu_put:
+ created_returns.append(bu_put)
if not created_returns:
raise UserError("Tidak ada dokumen retur yang berhasil dibuat.")