validate([ 'slik_id' => 'required|exists:sliks,id' ]); $slik = Slik::findOrFail($request->slik_id); // Cek apakah data sudah ada di laporan_slik $existing = LaporanSlik::where('slik_id', $slik->id)->first(); if ($existing) { return response()->json([ 'success' => false, 'message' => 'Data sudah ada di laporan SLIK' ], 422); } // Copy data dari tabel slik ke laporan_slik $laporanSlik = LaporanSlik::create([ 'slik_id' => $slik->id, 'sandi_bank' => $slik->sandi_bank, 'kode_kantor' => $slik->kode_kantor, 'kode_cabang' => $slik->kode_cabang, 'tahun' => $slik->tahun, 'bulan' => $slik->bulan, 'no_rekening' => $slik->no_rekening, 'cif' => $slik->cif, 'kode_jenis' => $slik->kode_jenis, 'kode_jenis_ket' => $slik->kode_jenis_ket, 'kode_sifat' => $slik->kode_sifat, 'kode_sifat_ket' => $slik->kode_sifat_ket, 'kode_valuta' => $slik->kode_valuta, 'kode_valuta_ket' => $slik->kode_valuta_ket, 'baki_debet' => $slik->baki_debet, 'kolektibilitas' => $slik->kolektibilitas, 'kolektibilitas_ket' => $slik->kolektibilitas_ket, 'tanggal_mulai' => $slik->tanggal_mulai, 'tanggal_jatuh_tempo' => $slik->tanggal_jatuh_tempo, 'tanggal_selesai' => $slik->tanggal_selesai, 'tanggal_restrukturisasi' => $slik->tanggal_restrukturisasi, 'kode_sebab_macet' => $slik->kode_sebab_macet, 'kode_sebab_macet_ket' => $slik->kode_sebab_macet_ket, 'tanggal_macet' => $slik->tanggal_macet, 'kode_kondisi' => $slik->kode_kondisi, 'kode_kondisi_ket' => $slik->kode_kondisi_ket, 'tanggal_kondisi' => $slik->tanggal_kondisi, 'nilai_agunan' => $slik->nilai_agunan, 'nilai_agunan_ket' => $slik->nilai_agunan_ket, 'jenis_agunan' => $slik->jenis_agunan, 'kode_agunan' => $slik->kode_agunan, 'kode_agunan_ket' => $slik->kode_agunan_ket, 'peringkat_agunan' => $slik->peringkat_agunan, 'peringkat_agunan_ket' => $slik->peringkat_agunan_ket, 'nama_debitur' => $slik->nama_debitur, 'npwp' => $slik->npwp, 'no_ktp' => $slik->no_ktp, 'no_telp' => $slik->no_telp, 'kode_kab_kota' => $slik->kode_kab_kota, 'kode_kab_kota_ket' => $slik->kode_kab_kota_ket, 'kode_negara_domisili' => $slik->kode_negara_domisili, 'kode_negara_domisili_ket' => $slik->kode_negara_domisili_ket, 'kode_pos' => $slik->kode_pos, 'alamat' => $slik->alamat, 'fasilitas' => $slik->fasilitas, 'status_agunan' => $slik->status_agunan, 'tanggal_lapor' => $slik->tanggal_lapor, 'status' => 'active', 'created_by' => auth()->id(), 'updated_by' => auth()->id(), ]); // Hapus data dari tabel slik setelah berhasil dipindahkan $slik->delete(); return response()->json([ 'success' => true, 'message' => 'Data berhasil dipindahkan ke laporan SLIK', 'data' => $laporanSlik ]); } catch (\Exception $e) { Log::error('Error moving SLIK to laporan: ' . $e->getMessage()); return response()->json([ 'success' => false, 'message' => 'Terjadi kesalahan saat memindahkan data' ], 500); } } /** * Get data for DataTables */ public function datatables(Request $request) { try { $query = LaporanSlik::query() ->select([ 'id', 'sandi_bank', 'tahun', 'bulan', 'no_rekening', 'cif', 'nama_debitur', 'kolektibilitas', 'fasilitas', 'nilai_agunan', 'status_agunan', 'created_at' ]); // Apply filters if ($request->has('search') && $request->search['value']) { $search = $request->search['value']; $query->where(function($q) use ($search) { $q->where('nama_debitur', 'like', "%{$search}%") ->orWhere('no_rekening', 'like', "%{$search}%") ->orWhere('cif', 'like', "%{$search}%") ->orWhere('fasilitas', 'like', "%{$search}%"); }); } if ($request->has('year') && $request->year) { $query->where('tahun', $request->year); } if ($request->has('month') && $request->month) { $query->where('bulan', $request->month); } if ($request->has('status') && $request->status) { $query->where('status', $request->status); } $totalRecords = $query->count(); $filteredRecords = $totalRecords; // Apply pagination $start = $request->input('start', 0); $length = $request->input('length', 10); $data = $query->offset($start)->limit($length)->get(); // Format data $formattedData = $data->map(function($item) { return [ 'id' => $item->id, 'sandi_bank' => $item->sandi_bank, 'tahun' => $item->tahun, 'bulan' => $item->bulan, 'no_rekening' => $item->no_rekening, 'cif' => $item->cif, 'nama_debitur' => $item->nama_debitur, 'kolektibilitas' => $item->kolektibilitas, 'fasilitas' => $item->fasilitas, 'nilai_agunan_formatted' => $item->nilai_agunan_formatted, 'status_agunan' => $item->status_agunan, 'status_badge' => $item->status_badge, 'created_at' => $item->created_at->format('d/m/Y H:i'), ]; }); return response()->json([ 'draw' => intval($request->input('draw', 1)), 'recordsTotal' => $totalRecords, 'recordsFiltered' => $filteredRecords, 'data' => $formattedData ]); } catch (\Exception $e) { Log::error('Error in laporan slik datatables: ' . $e->getMessage()); return response()->json([ 'draw' => intval($request->input('draw', 1)), 'recordsTotal' => 0, 'recordsFiltered' => 0, 'data' => [] ]); } } /** * Export laporan SLIK to Excel */ public function export(Request $request) { try { $query = LaporanSlik::query(); // Apply filters if ($request->has('search') && $request->search) { $search = $request->search; $query->where(function($q) use ($search) { $q->where('nama_debitur', 'like', "%{$search}%") ->orWhere('no_rekening', 'like', "%{$search}%") ->orWhere('cif', 'like', "%{$search}%"); }); } if ($request->has('year') && $request->year) { $query->where('tahun', $request->year); } if ($request->has('month') && $request->month) { $query->where('bulan', $request->month); } if ($request->has('status') && $request->status) { $query->where('status', $request->status); } $filename = 'laporan-slik-' . now()->format('Y-m-d-His') . '.xlsx'; return Excel::download(new LaporanSlikExport($query), $filename); } catch (\Exception $e) { Log::error('Error exporting laporan slik: ' . $e->getMessage()); return back()->with('error', 'Gagal export data: ' . $e->getMessage()); } } }