diff --git a/app/Http/Controllers/MemoController.php b/app/Http/Controllers/MemoController.php new file mode 100644 index 0000000..41efdc0 --- /dev/null +++ b/app/Http/Controllers/MemoController.php @@ -0,0 +1,238 @@ +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, + ]); + } +} diff --git a/app/Models/Base.php b/app/Models/Base.php index 63f172b..d138394 100644 --- a/app/Models/Base.php +++ b/app/Models/Base.php @@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\SoftDeletes; use Spatie\Activitylog\LogOptions; use Spatie\Activitylog\Traits\LogsActivity; - use Wildside\Userstamps\Userstamps; + use Mattiverse\Userstamps\Traits\Userstamps; use Illuminate\Notifications\Notifiable; diff --git a/module.json b/module.json index 0b63135..c187f88 100644 --- a/module.json +++ b/module.json @@ -624,6 +624,23 @@ "EO Appraisal", "senior-officer" ] + }, + { + "title": "Memo Penyelesaian", + "path": "memo", + "icon": "ki-filled ki-document text-lg text-primary", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "pemohon-ao", + "pemohon-eo", + "admin", + "DD Appraisal", + "EO Appraisal", + "senior-officer" + ] } ], "master": [ diff --git a/resources/views/memo/create.blade.php b/resources/views/memo/create.blade.php new file mode 100644 index 0000000..a471ea7 --- /dev/null +++ b/resources/views/memo/create.blade.php @@ -0,0 +1,243 @@ +@extends('layouts.main') + +@section('content') +
| + + | ++ Nomor Registrasi + + | ++ Debitur + + | ++ Pemohon(Cabang/Direktorat) + + | ++ AO + + | ++ Tujuan Penilaian + + | ++ Fasilitas Kredit + + | ++ Tanggal Survei + + | ++ Due Date SLA + + | +Status | +Actions | +
|---|
+ {{ $permohonan->memo_penyelesaian_title ?? 'Belum ada memo' }} +
++ @if($permohonan->memo_penyelesaian_date) + {{ \Carbon\Carbon::parse($permohonan->memo_penyelesaian_date)->format('d F Y') }} + @else + - + @endif +
++ @if($permohonan->status === 'memo-penyelesaian') + {{ $permohonan->status }} + @else + {{ $permohonan->status }} + @endif +
++ @if($permohonan->memo_penyelesaian_created_at) + {{ \Carbon\Carbon::parse($permohonan->memo_penyelesaian_created_at)->format('d F Y H:i') }} + @else + - + @endif +
+{{ $permohonan->nomor_registrasi }}
+{{ $permohonan->debiture->name ?? '-' }}
+{{ $permohonan->branch->name ?? '-' }}
+{{ $permohonan->user->name ?? '-' }}
++ @if($permohonan->tujuanPenilaian) + {{ $permohonan->tujuanPenilaian->name }} + @else + - + @endif +
+{{ $permohonan->jenisFasilitasKredit->name ?? '-' }}
++ @if($permohonan->tanggal_permohonan) + {{ \Carbon\Carbon::parse($permohonan->tanggal_permohonan)->format('d F Y') }} + @else + - + @endif +
++ Rp {{ number_format($permohonan->nilai_liquidasi, 0, ',', '.') }} +
++ {{ \Carbon\Carbon::parse($permohonan->penilaian->waktu_penilaian)->format('d F Y H:i') }} +
++ {{ $permohonan->penilai->type_penilai ?? '-' }} +
++ {{ \Carbon\Carbon::parse($permohonan->penilaian->created_at)->format('d F Y H:i') }} +
+
+ @if($permohonan->approval_so_at)
+ Disetujui pada
+ {{ \Carbon\Carbon::parse($permohonan->approval_so_at)->format('d F Y H:i') }}
+ @else
+ Menunggu Persetujuan
+ @endif
+
+ @if($permohonan->approval_eo_at)
+ Disetujui pada
+ {{ \Carbon\Carbon::parse($permohonan->approval_eo_at)->format('d F Y H:i') }}
+ @else
+ Menunggu Persetujuan
+ @endif
+
+ @if($permohonan->approval_dd_at)
+ Disetujui pada
+ {{ \Carbon\Carbon::parse($permohonan->approval_dd_at)->format('d F Y H:i') }}
+ @else
+ Menunggu Persetujuan
+ @endif
+