diff --git a/app/Http/Controllers/DebitureController.php b/app/Http/Controllers/DebitureController.php index e1c5432..03b8b49 100644 --- a/app/Http/Controllers/DebitureController.php +++ b/app/Http/Controllers/DebitureController.php @@ -12,8 +12,13 @@ use Modules\Location\Models\Village; use Modules\Lpj\Exports\DebitureExport; use Modules\Lpj\Http\Requests\DebitureRequest; + use Modules\Lpj\Http\Requests\DokumenJaminanRequest; use Modules\Lpj\Models\Branch; use Modules\Lpj\Models\Debiture; + use Modules\Lpj\Models\DokumenJaminan; + use Modules\Lpj\Models\JenisJaminan; + use Modules\Lpj\Models\JenisLegalitasJaminan; + use Modules\Lpj\Models\PemilikJaminan; class DebitureController extends Controller { @@ -52,13 +57,162 @@ public function edit($id) { - $debitur = Debiture::find($id); - $branches = Branch::all(); + $debitur = Debiture::find($id); + $branches = Branch::all(); $provinces = Province::all(); - $cities = City::where('province_code', $debitur->province_code)->get(); + $cities = City::where('province_code', $debitur->province_code)->get(); $districts = District::where('city_code', $debitur->city_code)->get(); - $villages = Village::where('district_code', $debitur->district_code)->get(); - return view('lpj::debitur.create', compact('debitur', 'branches', 'provinces', 'cities', 'districts', 'villages')); + $villages = Village::where('district_code', $debitur->district_code)->get(); + return view( + 'lpj::debitur.edit', + compact('debitur', 'branches', 'provinces', 'cities', 'districts', 'villages'), + ); + } + + public function jaminan($id) + { + $debitur = Debiture::find($id); + $documents = DokumenJaminan::with('pemilik')->where('debiture_id', $id)->get(); + + return view( + 'lpj::debitur.edit', + compact('debitur', 'documents'), + ); + } + + public function createJaminan($id) + { + $debitur = Debiture::find($id); + $provinces = Province::all(); + $jenisJaminan = JenisJaminan::all(); + $jenisLegalitasJaminan = JenisLegalitasJaminan::all(); + + return view( + 'lpj::debitur.jaminan', + compact('debitur', 'provinces', 'jenisJaminan', 'jenisLegalitasJaminan'), + ); + } + + public function storeJaminan(DokumenJaminanRequest $request, $id) + { + $debitur = Debiture::find($id); + + $validate = $request->validated(); + if ($validate) { + try { + $validate['debiture_id'] = $id; + + if ($validate['pemilik_jaminan_id'] == 0) { + $pemilik_jaminan = [ + 'npwp' => $debitur->npwp, + 'email' => $debitur->email, + 'phone' => $debitur->phone, + 'province_code' => $debitur->province_code, + 'city_code' => $debitur->city_code, + 'district_code' => $debitur->district_code, + 'village_code' => $debitur->village_code, + 'postal_code' => $debitur->postal_code, + 'address' => $debitur->address, + ]; + + $pemilikJaminan = PemilikJaminan::updateOrCreate([ + 'debiture_id' => $id, + 'name' => $debitur->name, + ], $pemilik_jaminan); + } + + if ($request->hasFile('dokumen_jaminan')) { + $file = $request->file('dokumen_jaminan'); + $file_name = $file->getClientOriginalName(); + $file->storeAs('public/jaminan/' . $debitur->id, $file_name); + $validate['dokumen_jaminan'] = 'jaminan/' . $debitur->id . '/' . $file_name; + } + + $validate['pemilik_jaminan_id'] = $pemilikJaminan->id; + DokumenJaminan::create($validate); + + + return redirect()->route('debitur.jaminan', $id); + } catch (Exception $e) { + print_r($e->getMessage()); + exit; + } + } + } + + public function updateJaminan(DokumenJaminanRequest $request, $id, $jaminan) + { + $debitur = Debiture::find($id); + + $validate = $request->validated(); + if ($validate) { + try { + $validate['debiture_id'] = $id; + + if ($validate['pemilik_jaminan_id'] == 0) { + $pemilik_jaminan = [ + 'npwp' => $debitur->npwp, + 'email' => $debitur->email, + 'phone' => $debitur->phone, + 'province_code' => $debitur->province_code, + 'city_code' => $debitur->city_code, + 'district_code' => $debitur->district_code, + 'village_code' => $debitur->village_code, + 'postal_code' => $debitur->postal_code, + 'address' => $debitur->address, + ]; + + $pemilikJaminan = PemilikJaminan::updateOrCreate([ + 'debiture_id' => $id, + 'name' => $debitur->name, + ], $pemilik_jaminan); + } + + if ($request->hasFile('dokumen_jaminan')) { + $file = $request->file('dokumen_jaminan'); + $file_name = $file->getClientOriginalName(); + $file->storeAs('public/jaminan/' . $debitur->id, $file_name); + $validate['dokumen_jaminan'] = 'jaminan/' . $debitur->id . '/' . $file_name; + } + + $document = DokumenJaminan::find($jaminan); + $document->update($validate); + + + return redirect()->route('debitur.jaminan', $id); + } catch (Exception $e) { + print_r($e->getMessage()); + exit; + } + } + } + + public function editJaminan($id, $jaminan) + { + $document = DokumenJaminan::find($jaminan); + $debitur = Debiture::find($document->debiture_id); + $provinces = Province::all(); + $cities = City::where('province_code', $document->province_code)->get(); + $districts = District::where('city_code', $document->city_code)->get(); + $villages = Village::where('district_code', $document->district_code)->get(); + $jenisJaminan = JenisJaminan::all(); + $jenisLegalitasJaminan = JenisLegalitasJaminan::all(); + $pemilikJaminan = PemilikJaminan::all(); + + return view( + 'lpj::debitur.jaminan', + compact( + 'debitur', + 'provinces', + 'jenisJaminan', + 'jenisLegalitasJaminan', + 'document', + 'cities', + 'districts', + 'villages', + 'pemilikJaminan', + ), + ); } public function update(DebitureRequest $request, $id) @@ -94,6 +248,17 @@ } } + public function destroyJaminan($id, $jaminan_id) + { + try { + $jaminan = DokumenJaminan::find($jaminan_id); + $jaminan->delete(); + echo json_encode(['success' => true, 'message' => 'Dokumen Jaminan deleted successfully']); + } catch (Exception $e) { + echo json_encode(['success' => false, 'message' => 'Failed to delete Dokumen Jaminan']); + } + } + public function dataForDatatables(Request $request) { if (is_null($this->user) || !$this->user->can('debitur.view')) { @@ -166,4 +331,10 @@ { return Excel::download(new DebitureExport, 'debitur.xlsx'); } + + public function download($id) + { + $document = DokumenJaminan::find($id); + return response()->download(storage_path('app/public/' . $document->dokumen_jaminan)); + } } diff --git a/app/Http/Requests/DebitureRequest.php b/app/Http/Requests/DebitureRequest.php index 1a71510..ff87263 100644 --- a/app/Http/Requests/DebitureRequest.php +++ b/app/Http/Requests/DebitureRequest.php @@ -22,7 +22,6 @@ 'name' => 'required', 'registered_at' => 'nullable|date', 'npwp' => 'nullable|string|max:16', - 'nomor_id' => 'nullable|string|max:16', 'email' => 'nullable|email', 'phone' => 'nullable|string|max:15', 'address' => 'nullable|string', @@ -31,9 +30,9 @@ ]; if ($this->method() == 'PUT') { - $rules['cif'] = 'required|unique:debitures,cif,' . $this->id; + $rules['cif'] = 'nullable|unique:debitures,cif,' . $this->id; } else { - $rules['cif'] = 'required|unique:debitures,cif'; + $rules['cif'] = 'nullable|unique:debitures,cif'; } return $rules; diff --git a/app/Http/Requests/DokumenJaminanRequest.php b/app/Http/Requests/DokumenJaminanRequest.php new file mode 100644 index 0000000..0fa33d6 --- /dev/null +++ b/app/Http/Requests/DokumenJaminanRequest.php @@ -0,0 +1,42 @@ + 'required', + 'jenis_jaminan_id' => 'required', + 'jenis_legalitas_jaminan_id' => 'required', + 'dokumen_jaminan' => 'nullable|file|mimes:pdf', + 'keterangan' => 'nullable|string|max:255', + 'province_code' => 'nullable|exists:provinces,code', + 'city_code' => 'nullable|exists:cities,code', + 'district_code' => 'nullable|exists:districts,code', + 'village_code' => 'nullable|exists:villages,code', + 'name' => 'required', + 'address' => 'nullable|string', + 'postal_code' => 'nullable|string|max:10', + 'status' => 'nullable|boolean', + ]; + + return $rules; + } + + /** + * Determine if the user is authorized to make this request. + */ + public function authorize() + : bool + { + return true; + } + } diff --git a/app/Models/Debiture.php b/app/Models/Debiture.php index 39b13d9..df5b9d2 100644 --- a/app/Models/Debiture.php +++ b/app/Models/Debiture.php @@ -16,7 +16,6 @@ 'name', 'registered_at', 'npwp', - 'nomor_id', 'email', 'phone', 'nomor_rekening', diff --git a/app/Models/DokumenJaminan.php b/app/Models/DokumenJaminan.php new file mode 100644 index 0000000..8c5b944 --- /dev/null +++ b/app/Models/DokumenJaminan.php @@ -0,0 +1,69 @@ +belongsTo(Province::class, 'province_code', 'code'); + } + + public function city() + { + return $this->belongsTo(City::class, 'city_code', 'code'); + } + + public function district() + { + return $this->belongsTo(District::class, 'district_code', 'code'); + } + + public function village() + { + return $this->belongsTo(Village::class, 'village_code', 'code'); + } + + public function debiture(){ + return $this->belongsTo(Debiture::class, 'debiture_id', 'id'); + } + + public function pemilik(){ + return $this->belongsTo(PemilikJaminan::class, 'pemilik_jaminan_id', 'id'); + } + + public function jenisJaminan(){ + return $this->belongsTo(JenisJaminan::class, 'jenis_jaminan_id', 'id'); + } + + public function jenisLegalitasJaminan(){ + return $this->belongsTo(JenisLegalitasJaminan::class, 'jenis_legalitas_jaminan_id', 'id'); + } + } diff --git a/database/migrations/2024_08_12_022026_create_debitures_table.php b/database/migrations/2024_08_12_022026_create_debitures_table.php index 31537aa..583c859 100644 --- a/database/migrations/2024_08_12_022026_create_debitures_table.php +++ b/database/migrations/2024_08_12_022026_create_debitures_table.php @@ -23,10 +23,10 @@ $table->string('email', 100)->nullable(); $table->string('phone', 15)->nullable(); $table->string('nomor_rekening', 50)->nullable(); - $table->string('province_code')->index(); - $table->string('city_code')->index(); - $table->string('district_code')->index(); - $table->string('village_code')->index(); + $table->string('province_code')->nullable()->index(); + $table->string('city_code')->nullable()->index(); + $table->string('district_code')->nullable()->index(); + $table->string('village_code')->nullable()->index(); $table->string('postal_code', 5)->nullable(); $table->text('address')->nullable(); diff --git a/database/migrations/2024_08_20_090400_create_dokumen_jaminan_table.php b/database/migrations/2024_08_20_090400_create_dokumen_jaminan_table.php new file mode 100644 index 0000000..a6db5c4 --- /dev/null +++ b/database/migrations/2024_08_20_090400_create_dokumen_jaminan_table.php @@ -0,0 +1,54 @@ +id(); + $table->string('name'); + $table->foreignIdFor(Debiture::class)->constrained()->onDelete('cascade'); + $table->foreignIdFor(JenisJaminan::class)->constrained()->onDelete('cascade'); + $table->foreignIdFor(PemilikJaminan::class)->constrained()->onDelete('cascade'); + $table->foreignIdFor(JenisLegalitasJaminan::class)->constrained()->onDelete('cascade'); + $table->string('province_code')->nullable()->index(); + $table->string('city_code')->nullable()->index(); + $table->string('district_code')->nullable()->index(); + $table->string('village_code')->nullable()->index(); + $table->string('postal_code', 5)->nullable(); + $table->text('address')->nullable(); + $table->string('dokumen_jaminan')->nullable(); + $table->string('keterangan')->nullable(); + + $table->boolean('status')->default(true)->nullable(); + $table->timestamps(); + $table->timestamp('authorized_at')->nullable(); + $table->char('authorized_status', 1)->nullable(); + $table->softDeletes(); + + $table->unsignedBigInteger('created_by')->nullable(); + $table->unsignedBigInteger('updated_by')->nullable(); + $table->unsignedBigInteger('deleted_by')->nullable(); + $table->unsignedBigInteger('authorized_by')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('dokumen_jaminan'); + } +}; diff --git a/resources/views/debitur/components/debitur.blade.php b/resources/views/debitur/components/debitur.blade.php new file mode 100644 index 0000000..0e22694 --- /dev/null +++ b/resources/views/debitur/components/debitur.blade.php @@ -0,0 +1,206 @@ +
diff --git a/resources/views/debitur/components/dokumen.blade.php b/resources/views/debitur/components/dokumen.blade.php new file mode 100644 index 0000000..cda5aa5 --- /dev/null +++ b/resources/views/debitur/components/dokumen.blade.php @@ -0,0 +1,243 @@ + diff --git a/resources/views/debitur/components/jaminan.blade.php b/resources/views/debitur/components/jaminan.blade.php new file mode 100644 index 0000000..d5009fc --- /dev/null +++ b/resources/views/debitur/components/jaminan.blade.php @@ -0,0 +1,162 @@ ++ {{ $document->pemilik->name }} +
++ {{ $document->keterangan }} +
++ {{ $document->address.', '.$document->village->name.', '.$document->city->name.', '.$document->province->name.', '.$document->postal_code }} +
+