diff --git a/app/Http/Controllers/LampiranDokumenController.php b/app/Http/Controllers/LampiranDokumenController.php new file mode 100644 index 0000000..5e1a1ec --- /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 redirect()->back()->with('success', 'Lampiran uploaded successfully'); + } else { + return redirect()->back()->with('error', 'Unauthorized or upload failed'); + } + } + + public function delete(LampiranDokumen $lampiran) + { + if ($lampiran->deleteLampiran()) { + return redirect()->back()->with('success', 'Lampiran deleted successfully'); + } else { + return redirect()->back()->with('error', 'Unauthorized or delete failed'); + } + } + } diff --git a/app/Http/Controllers/PembayaranController.php b/app/Http/Controllers/PembayaranController.php index 806a411..f6fe6de 100644 --- a/app/Http/Controllers/PembayaranController.php +++ b/app/Http/Controllers/PembayaranController.php @@ -10,7 +10,6 @@ use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Validator; use Maatwebsite\Excel\Facades\Excel; use Modules\Lpj\Http\Requests\PersetujuanPenawaranRequest; -use Modules\Lpj\Models\LaporanExternal; use Modules\Lpj\Models\PenawaranTender; use Modules\Lpj\Models\Permohonan; use Modules\Lpj\Models\PersetujuanPenawaran; @@ -236,13 +235,6 @@ class PembayaranController extends Controller 'updated_by' => Auth::id(), 'updated_at' => now(), ]); - - LaporanExternal::create([ - 'permohonan_id' => $permohonan->id, - 'nomor_laporan' => $permohonan->nomor_registrasi, - 'tanggal_laporan' => now(), - 'created_by' => Auth::id(), - ]); } } diff --git a/app/Http/Controllers/SurveyorController.php b/app/Http/Controllers/SurveyorController.php index c8a9a6f..2b22ff9 100644 --- a/app/Http/Controllers/SurveyorController.php +++ b/app/Http/Controllers/SurveyorController.php @@ -18,6 +18,7 @@ use Illuminate\Support\Carbon; use Illuminate\Support\Facades\Mail; use Illuminate\Http\Response; use Modules\Lpj\Models\Debiture; +use Modules\Lpj\Models\LaporanExternal; use Modules\Lpj\Models\Permohonan; use Modules\Lpj\Models\Branch; use Modules\Lpj\Models\Surveyor; @@ -768,6 +769,15 @@ class SurveyorController extends Controller 'submitted_at' => now() ]); + LaporanExternal::updateOrCreate( + ['permohonan_id' => $permohonan->id], + [ + 'nomor_laporan' => $permohonan->nomor_registrasi, + 'tanggal_laporan' => now(), + 'created_by' => Auth::id(), + ] + ); + return response()->json([ 'success' => true, 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..59d5661 100644 --- a/resources/views/component/detail-jaminan.blade.php +++ b/resources/views/component/detail-jaminan.blade.php @@ -199,6 +199,8 @@ + +

@@ -348,6 +350,72 @@ @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'])) +
+ @csrf + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ +
+
+ @endif +
+
+ @include('lpj::component.history-permohonan') diff --git a/resources/views/laporan_external/index.blade.php b/resources/views/laporan_external/index.blade.php index 18152a1..9108a47 100644 --- a/resources/views/laporan_external/index.blade.php +++ b/resources/views/laporan_external/index.blade.php @@ -150,7 +150,7 @@ tujuan_penilaian: { title: 'Tujuan Penilaian', render: (item, data) => { - return `${data.permohonan.penawaran?.tujuanPenilaianKjpp.name}` ?? ''; + return `${data.permohonan.penawaran?.tujuan_penilaian_kjpp?.name}` ?? ''; } }, jenis_jaminan: { diff --git a/resources/views/permohonan/print.blade.php b/resources/views/permohonan/print.blade.php index dc38774..f4c63e5 100644 --- a/resources/views/permohonan/print.blade.php +++ b/resources/views/permohonan/print.blade.php @@ -1,212 +1,155 @@ @extends('layouts.auth') + +@push('styles') + +@endpush + @section('content') -
-
-
-
-
-
-

- Nomor Register Permohonan -

- - : {{ $permohonan->nomor_registrasi }} - -
+
-
-

- Pemohon -

- - : {{ $permohonan->user->nik }} | {{ $permohonan->user->name }} - -
+
+
+ + + + + +
+ @include('lpj::component.logo-bag') + +

PT BANK ARTHA GRAHA INTERNASIONAL

+

Sub Direktorat Appraisal

+

Jl. Kwitang Raya No. 24-26,
Jakarta – 10420, Indonesia

+

Telp. (021) 3903040

+
+
+
-
-

- Tujan Permohonan -

- - : {{ $permohonan->tujuanPenilaian->name }} - -
-
-
-
-

- Status Permohonan -

- - : {{ ucwords($permohonan->status) }} - -
- -
-

- Cabang Pemohon -

- - : {{ $permohonan->user->branch->name }} - -
- -
-

- Tanggal Permohonan -

- - : {{ formatTanggalIndonesia($permohonan->created_at) }} - -
-
+
+
+
+
+

Nomor Register: {{ $permohonan->nomor_registrasi }}

+

Pemohon: {{ $permohonan->user->nik }} | {{ $permohonan->user->name }}

+

Tujuan Permohonan: {{ $permohonan->tujuanPenilaian->name }}

+
+
+

Status Permohonan: {{ ucwords($permohonan->status) }}

+

Cabang Pemohon: {{ $permohonan->user->branch->name }}

+

Tanggal Permohonan: {{ formatTanggalIndonesia($permohonan->created_at) }}

-
-
-
-
-

- 1. Fasilitas Kredit -

-
-
-
-

- Jenis Fasilitas -

- - : {{ $permohonan->jenisFasilitasKredit->name }} - -
+
-
-

- Nilai Plafond -

- - : {{ $permohonan->nilaiPlafond->name }} - -
-
-
- -
-
-

- 2. Identitas Debutur -

-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - -
- Name - - {{ $permohonan->debiture->name ?? "" }} -
- Cabang - - {{ $permohonan->debiture->branch->name ?? "" }} -
- CIF - - {{ $permohonan->debiture->cif ?? "" }} -
- Alamat - - {{ $permohonan->debiture->address ?? "" }} -
-   - - {{ $permohonan->debiture->village->name ?? "" }}, {{ $permohonan->debiture->district->name ?? "" }}, {{ $permohonan->debiture->city->name ?? "" }}, {{ $permohonan->debiture->province->name ?? "" }} - {{ $permohonan->debiture->village->postal_code ?? "" }} -
-
-
-
+
+
+
+
1. Fasilitas Kredit
+
+

Jenis Fasilitas: {{ $permohonan->jenisFasilitasKredit->name }}

+

Nilai Plafond: {{ $permohonan->nilaiPlafond->name }}

-
-
-
-

- Data Jaminan -

-
-
- @foreach($permohonan->documents as $dokumen) -
- - Jaminan {{ $loop->index + 1 }} - -
-

- Pemilik Jaminan -

- - : {{ $dokumen->pemilik->name?? "" }} - -
-
-

- Jenis Jaminan: -

- - : {{ $dokumen->jenisJaminan->name?? "" }} - -
-
-

- Hubungan Pemilik Jaminan: -

- - : {{ $dokumen->pemilik->hubungan_pemilik->name?? "" }} - -
-
-

- Alamat Pemilik Jaminan: -

- - : {{ $dokumen->pemilik->address ?? ""}}, -
{{ $dokumen->pemilik->village->name ?? "" }}, {{ $dokumen->pemilik->district->name ?? "" }}, {{ $dokumen->pemilik->city->name ?? "" }}, {{ $dokumen->pemilik->province->name ?? "" }} - {{ $dokumen->pemilik->village->postal_code ?? "" }} -
-
-
- @endforeach -
+
+
2. Identitas Debitur
+
+

Nama: {{ $permohonan->debiture->name ?? "" }}

+

Cabang: {{ $permohonan->debiture->branch->name ?? "" }}

+

CIF: {{ $permohonan->debiture->cif ?? "" }}

+

Alamat: {{ $permohonan->debiture->address ?? "" }}

+

{{ $permohonan->debiture->village->name ?? "" }}, {{ $permohonan->debiture->district->name ?? "" }}, {{ $permohonan->debiture->city->name ?? "" }}, {{ $permohonan->debiture->province->name ?? "" }} - {{ $permohonan->debiture->village->postal_code ?? "" }}

+ +
+
+
3. Data Jaminan
+
+ @foreach($permohonan->documents as $index => $dokumen) +

Jaminan {{ $index + 1 }}

+

Pemilik Jaminan: {{ $dokumen->pemilik->name ?? "" }}

+

Jenis Jaminan: {{ $dokumen->jenisJaminan->name ?? "" }}

+

Hubungan Pemilik Jaminan: {{ $dokumen->pemilik->hubungan_pemilik->name ?? "" }}

+ @if(!$loop->last)
@endif + @endforeach +
+
+
+
+
@endsection @push('scripts') - + @endpush 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'); });