diff options
| author | Miqdad <ahmadmiqdad27@gmail.com> | 2025-07-15 09:12:40 +0700 |
|---|---|---|
| committer | Miqdad <ahmadmiqdad27@gmail.com> | 2025-07-15 09:12:40 +0700 |
| commit | 4f8f59f274e8ea19fcaa5f1c6b0e6e30400c66f7 (patch) | |
| tree | 59533030e720989108805c94b069872ef8d02407 | |
| parent | 15198bbee7d54580fadec9be6cbf69fb4a2d500d (diff) | |
<miqdad> try
| -rw-r--r-- | indoteknik_custom/models/tukar_guling.py | 2 | ||||
| -rw-r--r-- | indoteknik_custom/models/tukar_guling_po.py | 89 |
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.") |
