From ff928b6257d53a86d342485f1cbb3123b5e72ea6 Mon Sep 17 00:00:00 2001 From: majid Date: Thu, 13 Mar 2025 11:14:47 +0700 Subject: [PATCH 1/9] fix(penilai): perbaikkan urutan data di menu penilai, dan perbaikkan waktu print sederhana --- app/Http/Controllers/PenilaiController.php | 1 + .../penilai/components/print-out-sederhana.blade.php | 11 +++++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/app/Http/Controllers/PenilaiController.php b/app/Http/Controllers/PenilaiController.php index 8eb6ead..94d4c7e 100644 --- a/app/Http/Controllers/PenilaiController.php +++ b/app/Http/Controllers/PenilaiController.php @@ -558,6 +558,7 @@ class PenilaiController extends Controller $query = Permohonan::query(); // Apply search filter if provided + $query = $query->orderBy('nomor_registrasi', 'desc'); if ($request->has('search') && !empty($request->get('search'))) { $search = $request->get('search'); $columns = ['debiture.name', 'branch.name', 'user.name', 'tujuanPenilaian.name', 'jenisfasilitasKredit.name']; diff --git a/resources/views/penilai/components/print-out-sederhana.blade.php b/resources/views/penilai/components/print-out-sederhana.blade.php index 02cee4c..37b938c 100644 --- a/resources/views/penilai/components/print-out-sederhana.blade.php +++ b/resources/views/penilai/components/print-out-sederhana.blade.php @@ -57,7 +57,7 @@ Tanggal Survey : - {{ formatTanggalIndonesia($permohonan->penilaian->tanggal_kunjungan) }} + {{ formatTanggalIndonesia($permohonan->penilaian->updated_at) }} User @@ -115,7 +115,7 @@ Waktu Penyelesaian : - {{ hitungHariKerja($permohonan->penilaian->tanggal_kunjungan, $tanggalLaporan) }} + {{ hitungHariKerja($permohonan->penilaian->updated_at, $tanggalLaporan) }} @@ -183,9 +183,12 @@ + +
+ + - @@ -689,7 +692,7 @@
A. STATUS KEPEMILIKAN, HUBUNGAN DAN PENGHUNI
- +
From addbfde055c3be124580832de9248b7c480410f8 Mon Sep 17 00:00:00 2001 From: majid Date: Thu, 13 Mar 2025 11:16:44 +0700 Subject: [PATCH 2/9] fix(surveyor): perbaikkan urutan data desc di surveyor --- app/Http/Controllers/SurveyorController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/SurveyorController.php b/app/Http/Controllers/SurveyorController.php index f695013..fd04033 100644 --- a/app/Http/Controllers/SurveyorController.php +++ b/app/Http/Controllers/SurveyorController.php @@ -2008,7 +2008,7 @@ class SurveyorController extends Controller } $query = Permohonan::query(); - + $query = $query->orderBy('nomor_registrasi', 'desc'); if ($request->has('search') && !empty($request->get('search'))) { $search = $request->get('search'); $query->where(function ($q) use ($search) { From a5bd5417b70ab3dd1f6605f144af7a76cc2c5f9e Mon Sep 17 00:00:00 2001 From: majid Date: Thu, 13 Mar 2025 11:33:49 +0700 Subject: [PATCH 3/9] fix(penilai): perbaikkan tampilan detail penilai --- resources/views/penilai/show.blade.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/resources/views/penilai/show.blade.php b/resources/views/penilai/show.blade.php index a9a1696..91a9b76 100644 --- a/resources/views/penilai/show.blade.php +++ b/resources/views/penilai/show.blade.php @@ -105,10 +105,11 @@ {{ str_replace('_', ' ', $permohonan->status_bayar) }} - + @endif + @foreach ($permohonan->documents as $dokumen) From a3b3793fcd4eabb249c7d122bde9acde853ef661 Mon Sep 17 00:00:00 2001 From: majid Date: Fri, 14 Mar 2025 08:49:40 +0700 Subject: [PATCH 4/9] fix(penilai/so): prbaikkan pindah penilai dan tambah filter role penilai --- app/Http/Controllers/ActivityController.php | 139 ++++++--- app/Http/Controllers/PenilaiController.php | 2 +- app/Http/Controllers/PenilaianController.php | 20 +- app/Http/Controllers/SurveyorController.php | 2 +- .../activity/progres_activity/index.blade.php | 275 +++++++++++------- 5 files changed, 282 insertions(+), 156 deletions(-) diff --git a/app/Http/Controllers/ActivityController.php b/app/Http/Controllers/ActivityController.php index f0ad060..8c04b89 100644 --- a/app/Http/Controllers/ActivityController.php +++ b/app/Http/Controllers/ActivityController.php @@ -73,7 +73,8 @@ class ActivityController extends Controller public function updateTeamAssingment(Request $request) { try { - // Validasi input + + // dd($request->all()); $validatedData = $request->validate([ 'id' => 'required|integer', // penilaian_id 'team_member_id' => 'nullable|integer', @@ -81,6 +82,7 @@ class ActivityController extends Controller 'permohonan_id' => 'required|integer', 'user_id' => 'required|integer', 'team_id' => 'required|integer', + 'penugasan' => 'required|string', ], [ 'team_member_id.required_without' => 'Field team harus diisi.', '.required_without' => 'Field harus diisi.', @@ -93,6 +95,7 @@ class ActivityController extends Controller $permohonanId = $validatedData['permohonan_id']; $userId = $validatedData['user_id']; $teamId = $validatedData['team_id']; + $penugasan = $validatedData['penugasan']; // Cek apakah permohonan ada $permohonan = Permohonan::findOrFail($permohonanId); @@ -106,55 +109,101 @@ class ActivityController extends Controller // } // Ambil tim berdasarkan penilaian_id dan user_id - $teams = PenilaianTeam::where('penilaian_id', $penilaianId) + + if ($penugasan === 'sama') { + $teams = PenilaianTeam::where('penilaian_id', $penilaianId) ->where('user_id', $userId) ->get(); + // Cek apakah tim ditemukan + if ($teams->isEmpty()) { + return response()->json([ + 'status' => 'error', + 'message' => 'Data tim tidak ditemukan.', + ]); + } - // Cek apakah tim ditemukan - if ($teams->isEmpty()) { - return response()->json([ - 'status' => 'error', - 'message' => 'Data tim tidak ditemukan.', - ]); - } + // Mulai transaksi + DB::beginTransaction(); + $updated = false; - // Mulai transaksi - DB::beginTransaction(); - $updated = false; + $status_permohonan = $permohonan->status; - // Proses update berdasarkan region_id - if ($regionId) { - foreach ($teams as $team) { - if ($team->role === 'surveyor') { - $team->update([ - 'team_id' => $regionId, - 'user_id' => null]); - $permohonan->update([ - 'status' => 'registered']); - $updated = true; + // Proses update berdasarkan region_id + if ($regionId) { + foreach ($teams as $team) { + if ($team->role === 'surveyor') { + $team->update([ + 'team_id' => $regionId, + 'user_id' => null, + 'status' => $status_permohonan, + ]); + $permohonan->update([ + 'status' => 'reassign' + ]); + $updated = true; + } + + if ($team->role === 'penilai') { + $team->update([ + 'team_id' => $regionId, + 'user_id' => null, + 'status' => $status_permohonan + ]); + $permohonan->update([ + 'status' => 'reassign', + 'region_id' => $regionId, + ]); + $updated = true; + } } + } - if ($team->role === 'penilai') { - $team->update([ - 'team_id' => $regionId, - 'user_id' => null, - ]); - $permohonan->update([ - 'status' => 'registered', - 'region_id' => $regionId, - ]); - $updated = true; + // Proses update berdasarkan team_member_id + if ($teamMemberId) { + foreach ($teams as $team) { + if ($team->role === 'surveyor' || $team->role === 'penilai') { + $team->update(['user_id' => $teamMemberId]); + $updated = true; + } } } } - // Proses update berdasarkan team_member_id - if ($teamMemberId) { - foreach ($teams as $team) { - if ($team->role === 'surveyor' || $team->role === 'penilai') { - $team->update(['user_id' => $teamMemberId]); - $updated = true; - } + if ($penugasan === 'surveyor' || $penugasan === 'penilai') { + $teams = PenilaianTeam::where('penilaian_id', $penilaianId) + ->where('user_id', $userId) + ->where('role', $penugasan) + ->first(); + + // Cek apakah tim ditemukan + if (!$teams) { + return response()->json([ + 'status' => 'error', + 'message' => 'Data tim tidak ditemukan.', + ]); + } + + // Mulai transaksi + DB::beginTransaction(); + $updated = false; + + // Proses update berdasarkan region_id + if ($regionId) { + $teams->update([ + 'team_id' => $regionId, + 'user_id' => null + ]); + $permohonan->update([ + 'status' => $status_permohonan, + 'region_id' => $regionId, + ]); + $updated = true; + } + + // Proses update berdasarkan team_member_id + if ($teamMemberId) { + $teams->update(['user_id' => $teamMemberId]); + $updated = true; } } @@ -306,7 +355,7 @@ class ActivityController extends Controller } // Filter for specific roles - if (in_array($userRole, ['surveyor', 'surveyor-penilai'])) { + if (in_array($userRole, ['surveyor', 'penilai'])) { $query->whereHas('penilaian.userPenilai', function ($q) use ($user) { $q->where('user_id', $user->id); }); @@ -451,17 +500,17 @@ class ActivityController extends Controller $hari = $hariPaparan = 0; - if($type_report == "sederhana"){ + if ($type_report == "sederhana") { $hari = 2; $item->paparan = 'Tidak Ada'; - } else{ + } else { if ($plafond == '< 2M') { $item->paparan = 'Tidak Ada'; $hari = 3; - }else if($plafond == '2 M - 5 M'){ + } elseif ($plafond == '2 M - 5 M') { $hari = 3; $hariPaparan = 2; - }else { + } else { $hari = 5; $hariPaparan = 3; } @@ -495,7 +544,7 @@ class ActivityController extends Controller if (!$tanggalMulai instanceof Carbon) { $tanggalMulai = Carbon::parse($tanggalMulai); } - $hariKerjaBerikutnya = hitungHariKerja($tanggalMulai->toDateString(),$tanggalMulai->copy()->addDays(1)); + $hariKerjaBerikutnya = hitungHariKerja($tanggalMulai->toDateString(), $tanggalMulai->copy()->addDays(1)); $hariKerjaBerikutnya = max($hariKerjaBerikutnya, 1); $tanggalMulai = $tanggalMulai->copy()->addDays($hariKerjaBerikutnya); diff --git a/app/Http/Controllers/PenilaiController.php b/app/Http/Controllers/PenilaiController.php index 94d4c7e..e46ea62 100644 --- a/app/Http/Controllers/PenilaiController.php +++ b/app/Http/Controllers/PenilaiController.php @@ -576,7 +576,7 @@ class PenilaiController extends Controller if (!Auth::user()->hasRole('administrator')) { $query->whereHas('penilaian.userPenilai', function ($q) { $q - ->where('role', 'penilai') + ->where('role', ['surveyor','penilai']) ->where('user_id', Auth::user()->id); }); } diff --git a/app/Http/Controllers/PenilaianController.php b/app/Http/Controllers/PenilaianController.php index 78849d4..a18f8d5 100644 --- a/app/Http/Controllers/PenilaianController.php +++ b/app/Http/Controllers/PenilaianController.php @@ -253,7 +253,7 @@ class PenilaianController extends Controller $teamPenilai = $userTeam->flatMap(function ($team) { return $team->teamsUsers->filter(function ($teamUser) { return $teamUser->user->roles->contains(function ($role) { - return $role->name === 'surveyor' || $role->name === 'surveyor-penilai' || $role->name === 'administrator'; + return $role->name === 'surveyor' || $role->name === 'penilai' || $role->name === 'administrator'; }); })->map(function ($teamUser) { return $teamUser->user; @@ -279,6 +279,8 @@ class PenilaianController extends Controller $penilaianTeam = PenilaianTeam::where('penilaian_id', $penilaian->id)->get(); } + // dd($penilaianTeam); + return view( 'lpj::penilaian.form', compact( @@ -347,8 +349,9 @@ class PenilaianController extends Controller $query->whereIn('status', ['registered', 'registrasi-final', 'reassign']); - // Filter berdasarkan role + if (Auth::user()->roles[0]->name !== 'administrator') { + $query->whereHas('region.teams.teamsUsers.user', function ($q) { $q->where('id', Auth::user()->id); }); @@ -376,7 +379,8 @@ class PenilaianController extends Controller $filteredRecords = $query->count(); $data = $query->with( - ['user', 'debiture', 'branch', 'tujuanPenilaian', 'jenisPenilaian', 'region.teams.teamsUsers.user'], + ['user', 'debiture', 'branch', 'tujuanPenilaian', 'jenisPenilaian', 'region.teams.teamsUsers.user', + ] )->get(); $pageCount = ceil($totalRecords / $size); @@ -738,8 +742,8 @@ class PenilaianController extends Controller 'tujuanPenilaian', 'nilaiPlafond', 'penilaian.userPenilai' => function ($q) { - $q->where('role', 'penilai')->with(['user', 'team.regions']); -}, + $q->where('role', 'penilai')->with(['user', 'team.regions']); + }, 'penilai', 'approveSo', 'approveEo', @@ -900,7 +904,7 @@ class PenilaianController extends Controller public function revisiLaporan(Request $request, $id) { // dd($id); - if($request->dataHeader=='Paparan' || $request->dataHeader=='Freze SLA'){ + if ($request->dataHeader == 'Paparan' || $request->dataHeader == 'Freze SLA') { $authorization = Authorization::find($id); $permohonan = Permohonan::find($authorization->permohonan_id); } else { @@ -914,13 +918,13 @@ class PenilaianController extends Controller } $status = 'revisi-paparan'; - }else if($permohonan->status === 'request-freeze'){ + } elseif ($permohonan->status === 'request-freeze') { if ($authorization) { $authorization->delete(); } $status = 'reject-freeze'; - }elseif ($permohonan->status === 'proses-laporan' && $userRole === 'EO Appraisal') { + } elseif ($permohonan->status === 'proses-laporan' && $userRole === 'EO Appraisal') { $permohonan->update([ 'approval_so' => 0, 'approval_so_at' => null, diff --git a/app/Http/Controllers/SurveyorController.php b/app/Http/Controllers/SurveyorController.php index fd04033..b4efc41 100644 --- a/app/Http/Controllers/SurveyorController.php +++ b/app/Http/Controllers/SurveyorController.php @@ -2028,7 +2028,7 @@ class SurveyorController extends Controller if (!Auth::user()->hasRole('administrator')) { $query->whereHas('penilaian.userPenilai', function ($q) { $q->where('user_id', Auth::user()->id); - $q->where('role', 'surveyor'); + $q->where('role', ['surveyor', 'penilai']); }); } diff --git a/resources/views/activity/progres_activity/index.blade.php b/resources/views/activity/progres_activity/index.blade.php index 844fce5..dbee2b7 100644 --- a/resources/views/activity/progres_activity/index.blade.php +++ b/resources/views/activity/progres_activity/index.blade.php @@ -292,10 +292,16 @@ }, actions: { title: 'Action', - render: (item, data) => ` - + render: (item, data) => { + const roles = data.user_penilai.map(d => d.role) + let htmlData = '' + + htmlData = ` - `, + ` + + return htmlData; + }, }, }, }; @@ -326,114 +332,181 @@ @endpush From f14a0c634303fccebe972e2120b625e77dd1e376 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Fri, 14 Mar 2025 09:23:35 +0700 Subject: [PATCH 5/9] feat(jenis-lampiran): tambahkan fitur jenis lampiran - Menambahkan model JenisLampiran dengan relasi ke LampiranDokumen. - Membuat migrasi untuk tabel jenis_lampiran. - Menambahkan rute dan kontroler untuk operasi CRUD jenis lampiran. - Menambahkan permintaan validasi untuk jenis lampiran. - Menambahkan tampilan untuk membuat dan mengedit jenis lampiran. - Menambahkan breadcrumb untuk navigasi jenis lampiran. - Menambahkan fitur ekspor data jenis lampiran ke Excel. --- app/Exports/JenisLampiranExport.php | 46 +++++ .../Controllers/JenisLampiranController.php | 172 ++++++++++++++++++ app/Http/Requests/JenisLampiranRequest.php | 54 ++++++ app/Models/JenisLampiran.php | 20 ++ ..._14_013452_create_jenis_lampiran_table.php | 34 ++++ module.json | 11 ++ .../views/jenis_lampiran/create.blade.php | 62 +++++++ .../views/jenis_lampiran/index.blade.php | 145 +++++++++++++++ routes/breadcrumbs.php | 15 ++ routes/web.php | 12 +- 10 files changed, 570 insertions(+), 1 deletion(-) create mode 100644 app/Exports/JenisLampiranExport.php create mode 100644 app/Http/Controllers/JenisLampiranController.php create mode 100644 app/Http/Requests/JenisLampiranRequest.php create mode 100644 app/Models/JenisLampiran.php create mode 100644 database/migrations/2025_03_14_013452_create_jenis_lampiran_table.php create mode 100644 resources/views/jenis_lampiran/create.blade.php create mode 100644 resources/views/jenis_lampiran/index.blade.php diff --git a/app/Exports/JenisLampiranExport.php b/app/Exports/JenisLampiranExport.php new file mode 100644 index 0000000..5873a6e --- /dev/null +++ b/app/Exports/JenisLampiranExport.php @@ -0,0 +1,46 @@ +id, + $row->nama, + $row->deskripsi, + $row->created_at + ]; + } + + public function headings(): array + { + return [ + 'ID', + 'Nama', + 'Deskripsi', + 'Created At' + ]; + } + + public function columnFormats(): array + { + return [ + 'A' => NumberFormat::FORMAT_NUMBER, + 'D' => NumberFormat::FORMAT_DATE_DATETIME + ]; + } +} diff --git a/app/Http/Controllers/JenisLampiranController.php b/app/Http/Controllers/JenisLampiranController.php new file mode 100644 index 0000000..6588dd7 --- /dev/null +++ b/app/Http/Controllers/JenisLampiranController.php @@ -0,0 +1,172 @@ +validated(); + $validated['created_by'] = Auth::id(); + + $jenisLampiran = JenisLampiran::create($validated); + + DB::commit(); + return redirect() + ->route('basicdata.jenis-lampiran.index') + ->with('success', 'Jenis Lampiran berhasil ditambahkan.'); + } catch (Exception $e) { + DB::rollBack(); + return redirect() + ->back() + ->with('error', 'Gagal menambahkan Jenis Lampiran: ' . $e->getMessage()) + ->withInput(); + } + } + + public function create() + { + return view('lpj::jenis_lampiran.create'); + } + + public function show($id) + { + $jenisLampiran = JenisLampiran::findOrFail($id); + return view('lpj::jenis_lampiran.show', compact('jenisLampiran')); + } + + public function edit($id) + { + $jenisLampiran = JenisLampiran::findOrFail($id); + return view('lpj::jenis_lampiran.create', compact('jenisLampiran')); + } + + public function update(JenisLampiranRequest $request, $id) + { + DB::beginTransaction(); + try { + $jenisLampiran = JenisLampiran::findOrFail($id); + $validated = $request->validated(); + $validated['updated_by'] = Auth::id(); + + $jenisLampiran->update($validated); + + DB::commit(); + return redirect() + ->route('basicdata.jenis-lampiran.index') + ->with('success', 'Jenis Lampiran berhasil diperbarui.'); + } catch (Exception $e) { + DB::rollBack(); + return redirect() + ->back() + ->with('error', 'Gagal memperbarui Jenis Lampiran: ' . $e->getMessage()) + ->withInput(); + } + } + + public function destroy($id) + { + DB::beginTransaction(); + try { + $jenisLampiran = JenisLampiran::findOrFail($id); + $jenisLampiran->deleted_by = Auth::id(); + $jenisLampiran->save(); + + $jenisLampiran->delete(); + + DB::commit(); + echo json_encode(['success' => true, 'message' => 'Jenis Lampiran berhasil dihapus.']); + + } catch (Exception $e) { + DB::rollBack(); + echo json_encode([ + 'success' => false, + 'message' => 'Gagal menghapus Jenis Lampiran: ' . $e->getMessage() + ]); + } + } + + public function dataForDatatables(Request $request) + { + // Retrieve data from the database + $query = JenisLampiran::query(); + + // Apply search filter if provided + if ($request->has('search') && !empty($request->get('search'))) { + $search = $request->get('search'); + $query->where(function ($q) use ($search) { + $q->where('nama', 'LIKE', "%$search%") + ->orWhere('deskripsi', 'LIKE', "%$search%"); + }); + } + + // Apply sorting if provided + if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) { + $order = $request->get('sortOrder'); + $column = $request->get('sortField'); + $query->orderBy($column, $order); + } + + // Get the total count of records + $totalRecords = $query->count(); + + // Apply pagination if provided + if ($request->has('page') && $request->has('size')) { + $page = $request->get('page'); + $size = $request->get('size'); + $offset = ($page - 1) * $size; // Calculate the offset + + $query->skip($offset)->take($size); + } + + // Get the filtered count of records + $filteredRecords = $query->count(); + + // Get the data for the current page + $data = $query->get(); + + // Calculate the page count + $pageCount = ceil($totalRecords / $request->get('size')); + + // Calculate the current page number + $currentPage = $request->get('page', 1); + + // Return the response data as a JSON object + return response()->json([ + 'draw' => $request->get('draw'), + 'recordsTotal' => $totalRecords, + 'recordsFiltered' => $filteredRecords, + 'pageCount' => $pageCount, + 'page' => $currentPage, + 'totalCount' => $totalRecords, + 'data' => $data, + ]); + } + + public function export() + { + if (is_null($this->user) || !$this->user->can('jenis_lampiran.export')) { + abort(403, 'Sorry! You are not allowed to export jenis lampiran.'); + } + + return Excel::download(new JenisLampiranExport, 'jenis_lampiran.xlsx'); + } + } diff --git a/app/Http/Requests/JenisLampiranRequest.php b/app/Http/Requests/JenisLampiranRequest.php new file mode 100644 index 0000000..7ba379b --- /dev/null +++ b/app/Http/Requests/JenisLampiranRequest.php @@ -0,0 +1,54 @@ + [ + 'required', + 'string', + 'max:255', + Rule::unique('jenis_lampiran')->where(function ($query) { + return $query->whereNull('deleted_at'); + })->ignore($this->route('jenis_lampiran')), + ], + 'deskripsi' => 'nullable|string', + ]; + + return $rules; + } + + /** + * Get custom messages for validator errors. + * + * @return array + */ + public function messages() + { + return [ + 'nama.required' => 'Nama jenis lampiran harus diisi.', + 'nama.max' => 'Nama jenis lampiran tidak boleh lebih dari 255 karakter.', + ]; + } + } diff --git a/app/Models/JenisLampiran.php b/app/Models/JenisLampiran.php new file mode 100644 index 0000000..dbd52bc --- /dev/null +++ b/app/Models/JenisLampiran.php @@ -0,0 +1,20 @@ +hasMany(LampiranDokumen::class); + } +} diff --git a/database/migrations/2025_03_14_013452_create_jenis_lampiran_table.php b/database/migrations/2025_03_14_013452_create_jenis_lampiran_table.php new file mode 100644 index 0000000..5b4d73a --- /dev/null +++ b/database/migrations/2025_03_14_013452_create_jenis_lampiran_table.php @@ -0,0 +1,34 @@ +id(); + $table->string('nama'); + $table->text('deskripsi')->nullable(); + $table->timestamps(); + $table->softDeletes(); + + $table->unsignedBigInteger('created_by')->nullable(); + $table->unsignedBigInteger('updated_by')->nullable(); + $table->unsignedBigInteger('deleted_by')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('jenis_lampiran'); + } +}; diff --git a/module.json b/module.json index 74efc94..694f353 100644 --- a/module.json +++ b/module.json @@ -880,6 +880,17 @@ "administrator", "admin" ] + }, + { + "title": "Jenis Lampiran", + "path": "basicdata.jenis-lampiran", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "admin" + ] } ] } diff --git a/resources/views/jenis_lampiran/create.blade.php b/resources/views/jenis_lampiran/create.blade.php new file mode 100644 index 0000000..4ed347f --- /dev/null +++ b/resources/views/jenis_lampiran/create.blade.php @@ -0,0 +1,62 @@ +@extends('layouts.main') + +@section('breadcrumbs') + @if(isset($jenisLampiran->id)) + {{ Breadcrumbs::render(request()->route()->getName(),$jenisLampiran->id) }} + @else + {{ Breadcrumbs::render(request()->route()->getName()) }} + @endif +@endsection + +@section('content') +
+ @if(isset($jenisLampiran->id)) +
+ + @method('PUT') + @else + + @endif + @csrf +
+
+

+ {{ isset($jenisLampiran->id) ? 'Edit' : 'Tambah' }} Jenis Lampiran +

+
+ Back +
+
+
+
+ +
+ + @error('nama') + {{ $message }} + @enderror +
+
+
+ +
+ + @error('deskripsi') + {{ $message }} + @enderror +
+
+
+ +
+
+
+ +
+@endsection diff --git a/resources/views/jenis_lampiran/index.blade.php b/resources/views/jenis_lampiran/index.blade.php new file mode 100644 index 0000000..2fa9275 --- /dev/null +++ b/resources/views/jenis_lampiran/index.blade.php @@ -0,0 +1,145 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render('basicdata.jenis-lampiran') }} +@endsection + +@section('content') +
+
+
+

+ Daftar Jenis Lampiran +

+ +
+
+
+
+ + + + + + + + +
+ + + Nama + + + Deskripsi + + Action
+
+ + + + +@endsection + +@push('scripts') + + +@endpush diff --git a/routes/breadcrumbs.php b/routes/breadcrumbs.php index b62b23d..7e554b8 100644 --- a/routes/breadcrumbs.php +++ b/routes/breadcrumbs.php @@ -699,5 +699,20 @@ Breadcrumbs::for('noc', function (BreadcrumbTrail $trail) { $trail->push('Data Laporan External'); }); + Breadcrumbs::for('basicdata.jenis-lampiran', function (BreadcrumbTrail $trail) { + $trail->parent('basicdata'); + $trail->push('Jenis Lampiran', route('basicdata.jenis-lampiran.index')); + }); + + Breadcrumbs::for('basicdata.jenis-lampiran.create', function (BreadcrumbTrail $trail) { + $trail->parent('basicdata.jenis-lampiran'); + $trail->push('Tambah Jenis Lampiran', route('basicdata.jenis-lampiran.create')); + }); + + Breadcrumbs::for('basicdata.jenis-lampiran.edit', function (BreadcrumbTrail $trail, $id) { + $trail->parent('basicdata.jenis-lampiran'); + $trail->push('Edit Jenis Lampiran', route('basicdata.jenis-lampiran.edit', $id)); + }); + // add andy require __DIR__ . '/breadcrumbs_registrasi.php'; diff --git a/routes/web.php b/routes/web.php index b497718..8c36181 100644 --- a/routes/web.php +++ b/routes/web.php @@ -12,7 +12,8 @@ use Modules\Lpj\Http\Controllers\IjinUsahaController; use Modules\Lpj\Http\Controllers\JenisDokumenController; use Modules\Lpj\Http\Controllers\JenisFasilitasKreditController; use Modules\Lpj\Http\Controllers\JenisJaminanController; -use Modules\Lpj\Http\Controllers\JenisLaporanController; + use Modules\Lpj\Http\Controllers\JenisLampiranController; + use Modules\Lpj\Http\Controllers\JenisLaporanController; use Modules\Lpj\Http\Controllers\JenisLegalitasJaminanController; use Modules\Lpj\Http\Controllers\JenisPenilaianController; use Modules\Lpj\Http\Controllers\KJPPController; @@ -55,6 +56,13 @@ Route::middleware(['auth'])->group(function () { Route::name('basicdata.')->prefix('basic-data')->group(function () { + Route::name('jenis-lampiran.')->prefix('jenis-lampiran')->group(function () { + Route::get('datatables', [JenisLampiranController::class, 'dataForDatatables'])->name('datatables'); + Route::get('export', [JenisLampiranController::class, 'export'])->name('export'); + }); + Route::delete('jenis-lampiran/{id}', [JenisLampiranController::class, 'destroy'])->name('jenis-lampiran.destroy'); + Route::resource('jenis-lampiran', JenisLampiranController::class); + Route::name('custom-field.')->prefix('custom-field')->group(function () { Route::get('restore/{id}', [CustomFieldController::class, 'restore'])->name('restore'); Route::get('datatables', [CustomFieldController::class, 'dataForDatatables'])->name( @@ -650,6 +658,8 @@ Route::middleware(['auth'])->group(function () { Route::post('lampiran/upload', [LampiranDokumenController::class, 'upload'])->name('lampiran.upload'); Route::delete('lampiran/{lampiran}', [LampiranDokumenController::class, 'delete'])->name('lampiran.delete'); + + }); require __DIR__ . '/registrasi.php'; From ed8a60aa531a88a49a31146c889104d5614ccdb5 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Fri, 14 Mar 2025 09:37:18 +0700 Subject: [PATCH 6/9] feat(lampiran-dokumen): tambahkan jenis lampiran pada upload dokumen - Menambahkan validasi untuk 'jenis_lampiran_id' pada metode upload. - Memperbarui atribut yang dapat diisi pada model LampiranDokumen. - Menambahkan relasi jenisLampiran pada model LampiranDokumen. - Membuat migrasi untuk menambahkan kolom 'jenis_lampiran_id' pada tabel lampiran_dokumen. - Menghapus bagian tampilan yang tidak diperlukan dan menggantinya dengan komponen yang ada. --- .../Controllers/LampiranDokumenController.php | 9 ++- app/Models/LampiranDokumen.php | 8 +- ..._lampiran_id_to_lampiran_dokumen_table.php | 30 ++++++++ .../views/activity/activitydetail.blade.php | 66 +--------------- .../views/component/detail-jaminan.blade.php | 67 +---------------- .../component/lampiran-dokumen.blade.php | 75 +++++++++++++++++++ 6 files changed, 119 insertions(+), 136 deletions(-) create mode 100644 database/migrations/2025_03_14_013537_add_jenis_lampiran_id_to_lampiran_dokumen_table.php create mode 100644 resources/views/component/lampiran-dokumen.blade.php diff --git a/app/Http/Controllers/LampiranDokumenController.php b/app/Http/Controllers/LampiranDokumenController.php index 5e1a1ec..d187a82 100644 --- a/app/Http/Controllers/LampiranDokumenController.php +++ b/app/Http/Controllers/LampiranDokumenController.php @@ -18,10 +18,11 @@ public function upload(Request $request) { $request->validate([ - 'permohonan_id' => 'required|exists:permohonan,id', - 'nama_file' => 'nullable|string|max:255', - 'file' => 'required|file|max:10240', - 'keterangan' => 'nullable|string|max:255', + 'permohonan_id' => 'required|exists:permohonan,id', + 'jenis_lampiran_id' => 'required|exists:jenis_lampiran,id', + 'nama_file' => 'nullable|string|max:255', + 'file' => 'required|file|max:10240', + 'keterangan' => 'nullable|string|max:255', ]); $lampiran = LampiranDokumen::uploadLampiran($request->all()); diff --git a/app/Models/LampiranDokumen.php b/app/Models/LampiranDokumen.php index af514f5..7a0654d 100644 --- a/app/Models/LampiranDokumen.php +++ b/app/Models/LampiranDokumen.php @@ -9,7 +9,7 @@ class LampiranDokumen extends Base { protected $table = 'lampiran_dokumen'; - protected $fillable = ['permohonan_id', 'nama_file', 'path_file', 'keterangan']; + protected $fillable = ['permohonan_id', 'nama_file', 'path_file', 'keterangan','jenis_lampiran_id']; public function permohonan() { @@ -34,6 +34,7 @@ class LampiranDokumen extends Base return self::create([ 'permohonan_id' => $fileData['permohonan_id'] ?? null, + 'jenis_lampiran_id' => $fileData['jenis_lampiran_id'] ?? null, 'nama_file' => $fileName, 'path_file' => $filePath, 'keterangan' => $fileData['keterangan'] ?? null, @@ -62,4 +63,9 @@ class LampiranDokumen extends Base return false; } + + public function jenisLampiran() + { + return $this->belongsTo(JenisLampiran::class); + } } diff --git a/database/migrations/2025_03_14_013537_add_jenis_lampiran_id_to_lampiran_dokumen_table.php b/database/migrations/2025_03_14_013537_add_jenis_lampiran_id_to_lampiran_dokumen_table.php new file mode 100644 index 0000000..981c9a8 --- /dev/null +++ b/database/migrations/2025_03_14_013537_add_jenis_lampiran_id_to_lampiran_dokumen_table.php @@ -0,0 +1,30 @@ +unsignedBigInteger('jenis_lampiran_id')->after('permohonan_id'); + $table->foreign('jenis_lampiran_id')->references('id')->on('jenis_lampiran')->onDelete('restrict'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('lampiran_dokumen', function (Blueprint $table) { + $table->dropForeign(['jenis_lampiran_id']); + $table->dropColumn('jenis_lampiran_id'); + }); + } +}; diff --git a/resources/views/activity/activitydetail.blade.php b/resources/views/activity/activitydetail.blade.php index 3ecbaa8..220c55f 100644 --- a/resources/views/activity/activitydetail.blade.php +++ b/resources/views/activity/activitydetail.blade.php @@ -93,71 +93,7 @@ @endforeach @endif - -
-
-

- Lampiran Dokumen -

-
-
-
- @forelse($permohonan->lampiranDokumen as $lampiran) -
-

{{ $lampiran->nama_file }}

-

Keterangan : {{ $lampiran->keterangan }}

-
- - @if(Auth::user()->hasRole('administrator')) -
- @csrf - @method('DELETE') - -
- @endif -
-
- @empty -

Tidak ada lampiran dokumen.

- @endforelse -
- - @if(Auth::user()->hasRole(['Penilai', 'administrator','penilai','admin'])) -
- @csrf - -
-
- - -
-
- - -
-
- - -
-
-
- -
-
- @endif -
-
+ @include('lpj::component.lampiran-dokumen')
@include('lpj::component.history-permohonan') diff --git a/resources/views/component/detail-jaminan.blade.php b/resources/views/component/detail-jaminan.blade.php index d7d2882..e42982d 100644 --- a/resources/views/component/detail-jaminan.blade.php +++ b/resources/views/component/detail-jaminan.blade.php @@ -352,72 +352,7 @@ @if (!isset($status))
- -
-
-

- Lampiran Dokumen -

-
-
-
- @forelse($permohonan->lampiranDokumen as $lampiran) -
-

{{ $lampiran->nama_file }}

-

Keterangan : {{ $lampiran->keterangan }}

-
- - @if(Auth::user()->hasRole('administrator')) -
- @csrf - @method('DELETE') - -
- @endif -
-
- @empty -

Tidak ada lampiran dokumen.

- @endforelse -
- - @if(Auth::user()->hasRole(['Penilai', 'administrator','penilai','admin','surveyor'])) -
- @csrf - -
-
- - -
-
- - -
-
- - -
-
-
- -
-
- @endif -
-
- + @include('lpj::component.lampiran-dokumen') @include('lpj::component.history-permohonan') diff --git a/resources/views/component/lampiran-dokumen.blade.php b/resources/views/component/lampiran-dokumen.blade.php new file mode 100644 index 0000000..21880aa --- /dev/null +++ b/resources/views/component/lampiran-dokumen.blade.php @@ -0,0 +1,75 @@ + +
+
+

+ Lampiran Dokumen +

+
+
+
+ @forelse($permohonan->lampiranDokumen as $lampiran) +
+

{{ $lampiran->nama_file }}

+

Keterangan : {{ $lampiran->keterangan }}

+

Jenis Lampiran : {{ str_replace('-',' ',$lampiran->jenisLampiran->nama) }}

+
+ + @if(Auth::user()->hasRole('administrator')) +
+ @csrf + @method('DELETE') + +
+ @endif +
+
+ @empty +

Tidak ada lampiran dokumen.

+ @endforelse +
+ + @if(Auth::user()->hasRole(['Penilai', 'administrator','penilai','admin','surveyor'])) +
+ @csrf + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ +
+
+ @endif +
+
From 950c5470457dcea5f64c7d9d64fea233f84a47be Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Fri, 14 Mar 2025 09:40:23 +0700 Subject: [PATCH 7/9] feat(migration): tambahkan foreign key jenis_lampiran_id pada tabel lampiran_dokumen - Mengubah kolom jenis_lampiran_id menjadi foreign key yang terhubung dengan tabel jenis_lampiran. - Menggunakan metode foreignIdFor untuk mendefinisikan relasi dan mengatur onDelete menjadi cascade. --- ...3537_add_jenis_lampiran_id_to_lampiran_dokumen_table.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/database/migrations/2025_03_14_013537_add_jenis_lampiran_id_to_lampiran_dokumen_table.php b/database/migrations/2025_03_14_013537_add_jenis_lampiran_id_to_lampiran_dokumen_table.php index 981c9a8..c7134ac 100644 --- a/database/migrations/2025_03_14_013537_add_jenis_lampiran_id_to_lampiran_dokumen_table.php +++ b/database/migrations/2025_03_14_013537_add_jenis_lampiran_id_to_lampiran_dokumen_table.php @@ -3,8 +3,9 @@ use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; + use Modules\Lpj\Models\JenisLampiran; -return new class extends Migration + return new class extends Migration { /** * Run the migrations. @@ -12,8 +13,7 @@ return new class extends Migration public function up(): void { Schema::table('lampiran_dokumen', function (Blueprint $table) { - $table->unsignedBigInteger('jenis_lampiran_id')->after('permohonan_id'); - $table->foreign('jenis_lampiran_id')->references('id')->on('jenis_lampiran')->onDelete('restrict'); + $table->foreignIdFor(JenisLampiran::class)->constrained('jenis_lampiran')->onDelete('cascade'); }); } From 9210cae2db39068dfdd95f818d2dcb23825dba61 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Fri, 14 Mar 2025 09:42:21 +0700 Subject: [PATCH 8/9] feat(migration): ubah kolom jenis_lampiran_id menjadi nullable - Mengubah kolom jenis_lampiran_id pada tabel lampiran_dokumen agar dapat bernilai null. - Memastikan integritas data saat penghapusan jenis lampiran dengan opsi onDelete cascade. --- ...4_013537_add_jenis_lampiran_id_to_lampiran_dokumen_table.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/database/migrations/2025_03_14_013537_add_jenis_lampiran_id_to_lampiran_dokumen_table.php b/database/migrations/2025_03_14_013537_add_jenis_lampiran_id_to_lampiran_dokumen_table.php index c7134ac..ebd6637 100644 --- a/database/migrations/2025_03_14_013537_add_jenis_lampiran_id_to_lampiran_dokumen_table.php +++ b/database/migrations/2025_03_14_013537_add_jenis_lampiran_id_to_lampiran_dokumen_table.php @@ -13,7 +13,7 @@ use Illuminate\Support\Facades\Schema; public function up(): void { Schema::table('lampiran_dokumen', function (Blueprint $table) { - $table->foreignIdFor(JenisLampiran::class)->constrained('jenis_lampiran')->onDelete('cascade'); + $table->foreignIdFor(JenisLampiran::class)->constrained('jenis_lampiran')->onDelete('cascade')->nullable(); }); } From 5f9ebc3b136e773409a9f354f92a400aec5e30d8 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Fri, 14 Mar 2025 10:05:47 +0700 Subject: [PATCH 9/9] refactor(routes): hapus route destroy untuk jenis lampiran - Menghapus route untuk menghapus jenis lampiran dari file routes/web.php. - Memperbarui query pada PenilaianController untuk memuat relasi lampiran dokumen dan jenis lampiran. --- app/Http/Controllers/PenilaianController.php | 6 +- .../views/penilaian/otorisator/sla.blade.php | 362 +++++++++--------- routes/web.php | 1 - 3 files changed, 193 insertions(+), 176 deletions(-) diff --git a/app/Http/Controllers/PenilaianController.php b/app/Http/Controllers/PenilaianController.php index a18f8d5..3c88325 100644 --- a/app/Http/Controllers/PenilaianController.php +++ b/app/Http/Controllers/PenilaianController.php @@ -437,10 +437,10 @@ class PenilaianController extends Controller $header = $headers[$type] ?? 'Pelaporan'; $authorization = null; if ($header === 'SLA') { - $authorization = Authorization::with(['user'])->find($id); - $permohonan = Permohonan::find($authorization->permohonan_id); + $authorization = Authorization::with(['user','permohonan.lampiranDokumen.jenisLampiran'])->find($id); + $permohonan = Permohonan::with(['lampiranDokumen.jenisLampiran'])->find($authorization->permohonan_id); } else { - $permohonan = Permohonan::find($id); + $permohonan = Permohonan::with(['lampiranDokumen.jenisLampiran'])->find($id); } if ($header === 'SLA') { return view('lpj::penilaian.otorisator.sla', compact('permohonan', 'header', 'authorization')); diff --git a/resources/views/penilaian/otorisator/sla.blade.php b/resources/views/penilaian/otorisator/sla.blade.php index c5f399a..e119b58 100644 --- a/resources/views/penilaian/otorisator/sla.blade.php +++ b/resources/views/penilaian/otorisator/sla.blade.php @@ -82,18 +82,18 @@ {{ $authorization->keterangan ?? '' }} - - - - - - - - - - - - + + + + + + + + + + + +
Pemohon{{ $authorization->user->name }}
Alasan{{ $authorization->keterangan }}
Tanggal Permohonan{{ formatTanggalIndonesia($authorization->created_at, 1) }}
Pemohon{{ $authorization->user->name }}
Alasan{{ $authorization->keterangan }}
Tanggal Permohonan{{ formatTanggalIndonesia($authorization->created_at, 1) }}
@@ -116,28 +116,28 @@
+ + + + + + @if ($authorization->approve_eo != null) - - - + + - @if ($authorization->approve_eo != null) - - - - - - @endif - @if (in_array($authorization->nilai_eafond_id, [1, 4]) && $authorization->approve_dd != null) - - - - - - @endif + @endif + @if (in_array($authorization->nilai_eafond_id, [1, 4]) && $authorization->approve_dd != null) + + + + + + @endif
Diperiksa Oleh{{ getUser($authorization->approve_so)->name ?? 'N/A' }}{{ $authorization->approve_so_at ? formatTanggalIndonesia($authorization->approve_so_at, 1) : 'N/A' }} +
Diperiksa Oleh{{ getUser($authorization->approve_so)->name ?? 'N/A' }}{{ $authorization->approve_so_at ? formatTanggalIndonesia($authorization->approve_so_at, 1) : 'N/A' }} + Disetujui Oleh (EO){{ getUser($authorization->approve_eo)->name ?? 'N/A' }}{{ $authorization->approve_eo_at ? formatTanggalIndonesia($authorization->approve_eo_at, 1) : 'N/A' }}
Disetujui Oleh (EO){{ getUser($authorization->approve_eo)->name ?? 'N/A' }}{{ $authorization->approve_eo_at ? formatTanggalIndonesia($authorization->approve_eo_at, 1) : 'N/A' }} -
Disetujui Oleh (DD){{ getUser($authorization->approve_dd)->name ?? 'N/A' }}{{ $authorization->approve_dd_at ? formatTanggalIndonesia($authorization->approve_dd_at, 1) : 'N/A' }} -
Disetujui Oleh (DD){{ getUser($authorization->approve_dd)->name ?? 'N/A' }}{{ $authorization->approve_dd_at ? formatTanggalIndonesia($authorization->approve_dd_at, 1) : 'N/A' }} +
@@ -161,14 +161,14 @@ @if ($dataHeader == 'pelaporan') + href="{{ route('otorisator.view-laporan') }}?permohonanId={{ $permohonan->id }}&documentId={{ $documentId }}&inspeksiId={{ $inspeksiId }}&jaminanId={{ $jenisJaminanId }}&statusLpj={{ true }}"> Lihat Laporan @endif @if (Auth::user()->hasAnyRole(['administrator', 'senior-officer']) && $authorization->approve_so == null) @@ -178,7 +178,7 @@ $authorization->approve_so && $authorization->approve_eo == null) @@ -189,117 +189,135 @@ $authorization->approve_dd == null && in_array($permohonan->nilai_plafond_id, [1, 4])) @endif @if ( - (Auth::user()->hasAnyRole(['administrator', 'senior-officer']) && - $authorization->approve_so != null && - $authorization->approve_eo != null) || - $authorization->approve_dd != null) - + (Auth::user()->hasAnyRole(['administrator', 'senior-officer']) && + $authorization->approve_so != null && + $authorization->approve_eo != null) || + $authorization->approve_dd != null + ) + @php + $memoDeviasiExists = false; + if ($authorization->permohonan && $authorization->permohonan->lampiranDokumen) { + $memoDeviasiExists = $authorization->permohonan->lampiranDokumen() + ->whereHas('jenisLampiran', function($query) { + $query->where('nama', 'memo-deviasi'); + }) + ->exists(); + } + @endphp + + @if ($memoDeviasiExists) + + @else + + Memo Deviasi Belum Ada + + @endif @endif - @endsection + @endsection - @push('scripts') - + }); + } + @endpush diff --git a/routes/web.php b/routes/web.php index 8c36181..676f125 100644 --- a/routes/web.php +++ b/routes/web.php @@ -60,7 +60,6 @@ Route::middleware(['auth'])->group(function () { Route::get('datatables', [JenisLampiranController::class, 'dataForDatatables'])->name('datatables'); Route::get('export', [JenisLampiranController::class, 'export'])->name('export'); }); - Route::delete('jenis-lampiran/{id}', [JenisLampiranController::class, 'destroy'])->name('jenis-lampiran.destroy'); Route::resource('jenis-lampiran', JenisLampiranController::class); Route::name('custom-field.')->prefix('custom-field')->group(function () {