diff --git a/app/Http/Controllers/LampiranDokumenController.php b/app/Http/Controllers/LampiranDokumenController.php new file mode 100644 index 0000000..33b21ab --- /dev/null +++ b/app/Http/Controllers/LampiranDokumenController.php @@ -0,0 +1,44 @@ +path_file, $lampiran->nama_file); + } + + 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', + ]); + + $lampiran = LampiranDokumen::uploadLampiran($request->all()); + + if ($lampiran) { + return response()->json(['message' => 'Lampiran uploaded successfully', 'data' => $lampiran]); + } else { + return response()->json(['message' => 'Unauthorized or upload failed'], 403); + } + } + + public function delete(LampiranDokumen $lampiran) + { + if ($lampiran->deleteLampiran()) { + return response()->json(['message' => 'Lampiran deleted successfully']); + } else { + return response()->json(['message' => 'Unauthorized or delete failed'], 403); + } + } + } diff --git a/app/Models/LampiranDokumen.php b/app/Models/LampiranDokumen.php new file mode 100644 index 0000000..9c98eaa --- /dev/null +++ b/app/Models/LampiranDokumen.php @@ -0,0 +1,67 @@ +belongsTo(Permohonan::class); + } + + /** + * Upload lampiran dokumen for penilai or administrator + * + * @param int $permohonanId + * @param array $fileData + * @return LampiranDokumen|null + */ + public static function uploadLampiran($fileData) + { + $user = Auth::user(); + + if ($user && ($user->hasRole('penilai') || $user->hasRole('administrator'))) { + $file = $fileData['file']; + $keterangan = $fileData['keterangan'] ?? null; + + $fileName = $fileData['nama_file'] ?? time() . '_' . $file->getClientOriginalName(); + $filePath = $file->storeAs('lampiran_dokumen', $fileName, 'public'); + + return self::create([ + 'permohonan_id' => $fileData['permohonan_id'] ?? null, + 'nama_file' => $fileName, + 'path_file' => $filePath, + 'keterangan' => $keterangan, + ]); + } + + return null; + } + + /** + * Delete lampiran dokumen + * + * @return bool + */ + public function deleteLampiran() + { + $user = Auth::user(); + + if ($user && ($user->hasRole('penilai') || $user->hasRole('administrator'))) { + // Delete the file from storage + Storage::disk('public')->delete($this->path_file); + + // Delete the database record + return $this->delete(); + } + + return false; + } +} diff --git a/app/Models/Permohonan.php b/app/Models/Permohonan.php index b6319e3..b3e881c 100644 --- a/app/Models/Permohonan.php +++ b/app/Models/Permohonan.php @@ -161,7 +161,8 @@ return $this->belongsTo(JenisFasilitasKredit::class); } - public function jenisPenilaian(){ + public function jenisPenilaian() + { return $this->belongsTo(JenisPenilaian::class); } @@ -170,7 +171,8 @@ return $this->belongsTo(Penilaian::class, 'nomor_registrasi', 'nomor_registrasi'); } - public function penilai(){ + public function penilai() + { return $this->belongsTo(Penilai::class, 'id', 'permohonan_id'); } @@ -199,27 +201,38 @@ return $this->hasMany(DokumenJaminan::class); } - public function pembatalan(){ + public function pembatalan() + { return $this->hasMany(PermohonanPembatalan::class); } - public function approveBayar(){ + public function approveBayar() + { return $this->belongsTo(User::class, 'approve_bayar_by', 'id'); } - public function approveEo(){ + public function approveEo() + { return $this->belongsTo(User::class, 'approval_eo', 'id'); } - public function approveDd(){ + public function approveDd() + { return $this->belongsTo(User::class, 'approval_dd', 'id'); } - public function approveSo(){ + public function approveSo() + { return $this->belongsTo(User::class, 'approval_so', 'id'); } - public function authorization(){ + public function authorization() + { return $this->belongsTo(Authorization::class, 'id', 'permohonan_id'); } + + public function lampiranDokumen() + { + return $this->hasMany(LampiranDokumen::class); + } } diff --git a/database/migrations/2025_03_09_032616_create_lampiran_dokumen_table.php b/database/migrations/2025_03_09_032616_create_lampiran_dokumen_table.php new file mode 100644 index 0000000..99d5c6a --- /dev/null +++ b/database/migrations/2025_03_09_032616_create_lampiran_dokumen_table.php @@ -0,0 +1,32 @@ +id(); + $table->unsignedBigInteger('permohonan_id'); + $table->string('nama_file'); + $table->string('path_file'); + $table->text('keterangan')->nullable(); + $table->timestamps(); + $table->softDeletes(); + + $table->unsignedBigInteger('created_by')->nullable(); + $table->unsignedBigInteger('updated_by')->nullable(); + $table->unsignedBigInteger('deleted_by')->nullable(); + + $table->foreign('permohonan_id')->references('id')->on('permohonan')->onDelete('cascade'); + }); + } + + public function down() + { + Schema::dropIfExists('lampiran_dokumen'); + } + } diff --git a/resources/views/component/detail-jaminan.blade.php b/resources/views/component/detail-jaminan.blade.php index fd74707..7381617 100644 --- a/resources/views/component/detail-jaminan.blade.php +++ b/resources/views/component/detail-jaminan.blade.php @@ -199,6 +199,8 @@ + +

@@ -348,6 +350,59 @@ @if (!isset($status))

+ +
+
+

+ Lampiran Dokumen +

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

{{ $lampiran->nama_file }}

+

Keterangan : {{ $lampiran->keterangan }}

+ + View + + + Download + +
+ @empty +

Tidak ada lampiran dokumen.

+ @endforelse +
+ + @if(Auth::user()->hasRole(['penilai', 'administrator'])) +
+ @csrf + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ +
+
+ @endif +
+
+ @include('lpj::component.history-permohonan') diff --git a/routes/web.php b/routes/web.php index 4565ada..e6033c1 100644 --- a/routes/web.php +++ b/routes/web.php @@ -16,7 +16,8 @@ use Modules\Lpj\Http\Controllers\JenisLaporanController; use Modules\Lpj\Http\Controllers\JenisLegalitasJaminanController; use Modules\Lpj\Http\Controllers\JenisPenilaianController; use Modules\Lpj\Http\Controllers\KJPPController; -use Modules\Lpj\Http\Controllers\LaporanController; + use Modules\Lpj\Http\Controllers\LampiranDokumenController; + use Modules\Lpj\Http\Controllers\LaporanController; use Modules\Lpj\Http\Controllers\LaporanExternalController; use Modules\Lpj\Http\Controllers\NilaiPlafondController; use Modules\Lpj\Http\Controllers\NocController; @@ -645,6 +646,9 @@ Route::middleware(['auth'])->group(function () { }); Route::resource('laporan-external', LaporanExternalController::class); + Route::get('/lampiran/download/{id}', [LampiranDokumenController::class, 'download'])->name('lampiran.download'); + Route::post('lampiran/upload', [LampiranDokumenController::class, 'upload'])->name('lampiran.upload'); + Route::delete('lampiran/{lampiran}', [LampiranDokumenController::class, 'delete'])->name('lampiran.delete'); });