get('selected_ids', []); $selectedIds = explode(',', $selectedIds); $permohonanList = []; if (!empty($selectedIds)) { try { $permohonanList = Permohonan::with([ 'user', 'debiture', 'branch', 'tujuanPenilaian', 'penilaian', 'jenisFasilitasKredit', 'documents.inspeksi', 'penilai', 'documents.detail', 'noc' ])->whereIn('id', $selectedIds)->get(); } catch (Exception $e) { Log::error('MemoController: Error saat mengambil data permohonan - ' . $e->getMessage()); return redirect()->back()->with('error', 'Terjadi kesalahan saat memuat data'); } } return view('lpj::memo.create', compact('permohonanList')); } /** * Menyimpan memo penyelesaian yang telah dibuat * * @param Request $request * @return \Illuminate\Http\RedirectResponse */ public function store(Request $request) { Log::info('MemoController: Memulai proses penyimpanan memo penyelesaian'); DB::beginTransaction(); try { // Validasi input $request->validate([ 'permohonan_ids' => 'required|array', 'permohonan_ids.*' => 'exists:permohonan,id', 'memo_title' => 'required|string|max:255', 'memo_content' => 'required|string', 'memo_date' => 'required|date' ]); $permohonanIds = $request->permohonan_ids; $memoTitle = $request->memo_title; $memoContent = $request->memo_content; $memoDate = $request->memo_date; dd($request->all()); DB::commit(); Log::info('MemoController: Berhasil menyimpan memo penyelesaian untuk ' . count($permohonanIds) . ' permohonan'); return redirect()->route('memo.index') ->with('success', 'Memo penyelesaian berhasil dibuat untuk ' . count($permohonanIds) . ' permohonan'); } catch (Exception $e) { DB::rollback(); Log::error('MemoController: Error saat menyimpan memo penyelesaian - ' . $e->getMessage()); return redirect()->back() ->withInput() ->with('error', 'Terjadi kesalahan saat menyimpan memo penyelesaian: ' . $e->getMessage()); } } /** * Menampilkan detail memo penyelesaian * * @param int $id * @return \Illuminate\View\View */ public function show($id) { Log::info('MemoController: Mengakses detail memo penyelesaian ID: ' . $id); $permohonan = Permohonan::with([ 'user', 'debiture', 'branch', 'tujuanPenilaian', 'penilaian', 'jenisFasilitasKredit', 'documents.inspeksi', 'penilai', 'documents.detail', 'noc' ])->findOrFail($id); return view('lpj::memo.show', compact('permohonan')); } /** * Mengambil data untuk datatables pada halaman memo penyelesaian * * @param Request $request * @return \Illuminate\Http\JsonResponse */ public function dataForDatatables(Request $request) { Log::info('MemoController: Mengambil data untuk datatables'); if (is_null($this->user) || !$this->user->can('debitur.view')) { Log::warning('MemoController: User tidak memiliki permission untuk melihat data'); // abort(403, 'Sorry! You are not allowed to view users.'); } // Mengambil data dari database dengan kondisi yang sama seperti LaporanController $query = Permohonan::query() ->whereIn('status', ['proses-laporan', 'done', 'paparan', 'proses-paparan', 'memo-penyelesaian']) ->whereNotNull('approval_so_at') ->whereNotNull('approval_eo_at') ->where(function ($q) { $q->whereIn('nilai_plafond_id', [1, 4]) ->whereNotNull('approval_dd_at') ->orWhereIn('nilai_plafond_id', [2, 3]); }); $query = $query->orderBy('nomor_registrasi', 'desc'); // Apply search filter jika ada if ($request->has('search') && !empty($request->get('search'))) { $search = $request->get('search'); $query->where(function ($q) use ($search) { $q->where('nomor_registrasi', 'LIKE', '%' . $search . '%'); $q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search . '%'); $q->orWhereRelation('user', 'name', 'LIKE', '%' . $search . '%'); $q->orWhereRelation('debiture', 'name', 'LIKE', '%' . $search . '%'); $q->orWhereRelation('tujuanPenilaian', 'name', 'LIKE', '%' . $search . '%'); $q->orWhereRelation('branch', 'name', 'LIKE', '%' . $search . '%'); $q->orWhere('status', 'LIKE', '%' . $search . '%'); }); } // Apply sorting jika ada if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) { $order = $request->get('sortOrder'); $column = $request->get('sortField'); $query->orderBy($column, $order); } // Mendapatkan total count records $totalRecords = $query->count(); $size = $request->get('size', 10); if ($size == 0) { $size = 10; } // Apply pagination jika ada if ($request->has('page') && $request->has('size')) { $page = $request->get('page'); $size = $request->get('size'); $offset = ($page - 1) * $size; $query->skip($offset)->take($size); } // Mendapatkan filtered count records $filteredRecords = $query->count(); // Mendapatkan data untuk halaman saat ini $data = $query->with([ 'user', 'debiture', 'branch', 'tujuanPenilaian', 'penilaian', 'jenisFasilitasKredit', 'documents.inspeksi', 'penilai', 'documents.detail', 'noc' ])->get(); // Menghitung page count $pageCount = ceil($totalRecords / $size); // Menghitung current page number $currentPage = max(1, $request->get('page', 1)); Log::info('MemoController: Berhasil mengambil data datatables - Total: ' . $totalRecords . ', Filtered: ' . $filteredRecords); // Return response data sebagai JSON object return response()->json([ 'draw' => $request->get('draw'), 'recordsTotal' => $totalRecords, 'recordsFiltered' => $filteredRecords, 'pageCount' => $pageCount, 'page' => $currentPage, 'totalCount' => $totalRecords, 'data' => $data, ]); } }