From 3fc9e8fd0c22c877cf8a4430e97dac29ef102eb9 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Thu, 22 Aug 2024 14:52:36 +0700 Subject: [PATCH] Feature #15 : Pemilik Jaminan --- .../Controllers/PemilikJaminanController.php | 111 ++++++++ app/Http/Requests/DokumenJaminanRequest.php | 1 + app/Http/Requests/PemilikJaminanRequest.php | 44 ++++ app/Models/PemilikJaminan.php | 67 +++++ ...20_090307_create_pemilik_jaminan_table.php | 52 ++++ .../debitur/components/dokumen.blade.php | 6 +- .../debitur/components/pemilik.blade.php | 172 +++++++++++++ resources/views/debitur/edit.blade.php | 5 +- .../views/pemilik_jaminan/form.blade.php | 236 ++++++++++++++++++ .../views/pemilik_jaminan/index.blade.php | 24 ++ routes/breadcrumbs.php | 16 ++ routes/web.php | 16 +- 12 files changed, 743 insertions(+), 7 deletions(-) create mode 100644 app/Http/Controllers/PemilikJaminanController.php create mode 100644 app/Http/Requests/PemilikJaminanRequest.php create mode 100644 app/Models/PemilikJaminan.php create mode 100644 database/migrations/2024_08_20_090307_create_pemilik_jaminan_table.php create mode 100644 resources/views/pemilik_jaminan/form.blade.php create mode 100644 resources/views/pemilik_jaminan/index.blade.php diff --git a/app/Http/Controllers/PemilikJaminanController.php b/app/Http/Controllers/PemilikJaminanController.php new file mode 100644 index 0000000..63a0724 --- /dev/null +++ b/app/Http/Controllers/PemilikJaminanController.php @@ -0,0 +1,111 @@ +get(); + + return view( + 'lpj::debitur.edit', + compact('debitur', 'pemilikJaminan'), + ); + } + + public function store(PemilikJaminanRequest $request, $id) + { + $validate = $request->validated(); + if ($validate) { + try { + PemilikJaminan::create($validate); + + return redirect()->route('debitur.pemilik.index', $id); + } catch (Exception $e) { + print_r($e->getMessage()); + exit; + } + } + } + + public function create($id) + { + $debitur = Debiture::find($id); + $provinces = Province::all(); + $hubunganPemilik = HubunganPemilikJaminan::all(); + + return view( + 'lpj::pemilik_jaminan.form', + compact('debitur', 'provinces', 'hubunganPemilik'), + ); + } + + public function update(PemilikJaminanRequest $request, $id, $pemilik) + { + $validate = $request->validated(); + if ($validate) { + try { + $pemilik = PemilikJaminan::find($pemilik); + $pemilik->update($validate); + + return redirect()->route('debitur.pemilik.index', $id); + } catch (Exception $e) { + print_r($e->getMessage()); + exit; + } + } + } + + public function edit($id, $pemilik) + { + $pemilik = PemilikJaminan::find($pemilik); + $debitur = Debiture::find($pemilik->debiture_id); + $provinces = Province::all(); + $cities = City::where('province_code', $pemilik->province_code)->get(); + $districts = District::where('city_code', $pemilik->city_code)->get(); + $villages = Village::where('district_code', $pemilik->district_code)->get(); + $hubunganPemilik = HubunganPemilikJaminan::all(); + + return view( + 'lpj::pemilik_jaminan.form', + compact( + 'debitur', + 'provinces', + 'cities', + 'districts', + 'villages', + 'hubunganPemilik', + 'pemilik', + ), + ); + } + + public function destroy($id, $pemilik_id) + { + try { + $jaminan = PemilikJaminan::find($pemilik_id); + $jaminan->delete(); + echo json_encode(['success' => true, 'message' => 'Pemilik Jaminan deleted successfully']); + } catch (Exception $e) { + echo json_encode(['success' => false, 'message' => 'Failed to delete Pemilik Jaminan']); + } + } + } diff --git a/app/Http/Requests/DokumenJaminanRequest.php b/app/Http/Requests/DokumenJaminanRequest.php index 0fa33d6..427b732 100644 --- a/app/Http/Requests/DokumenJaminanRequest.php +++ b/app/Http/Requests/DokumenJaminanRequest.php @@ -13,6 +13,7 @@ : array { $rules = [ + 'debiture_id' => 'required|exists:debtures,id', 'pemilik_jaminan_id' => 'required', 'jenis_jaminan_id' => 'required', 'jenis_legalitas_jaminan_id' => 'required', diff --git a/app/Http/Requests/PemilikJaminanRequest.php b/app/Http/Requests/PemilikJaminanRequest.php new file mode 100644 index 0000000..dd4a11d --- /dev/null +++ b/app/Http/Requests/PemilikJaminanRequest.php @@ -0,0 +1,44 @@ + 'required|exists:debitures,id', + 'npwp' => 'nullable|string|max:16', + 'email' => 'nullable|email|max:100', + 'phone' => 'nullable|string|max:20', + 'hubungan_pemilik_jaminan_id' => 'nullable|exists:hubungan_pemilik_jaminan,id', + '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', + ]; + + $rules['nomor_id'] = 'nullable|max:16|unique:pemilik_jaminan,nomor_id,debiture_id,' . $this->debiture_id; + + return $rules; + } + + /** + * Determine if the user is authorized to make this request. + */ + public function authorize() + : bool + { + return true; + } + } diff --git a/app/Models/PemilikJaminan.php b/app/Models/PemilikJaminan.php new file mode 100644 index 0000000..d92dc0c --- /dev/null +++ b/app/Models/PemilikJaminan.php @@ -0,0 +1,67 @@ +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 debitur(){ + return $this->belongsTo(Debiture::class, 'debiture_id', 'id'); + } + + public function dokumen(){ + return $this->hasMany(DokumenJaminan::class, 'pemilik_jaminan_id', 'id'); + } + + public function hubungan_pemilik(){ + return $this->belongsTo(HubunganPemilikJaminan::class, 'hubungan_pemilik_jaminan_id', 'id'); + } +} diff --git a/database/migrations/2024_08_20_090307_create_pemilik_jaminan_table.php b/database/migrations/2024_08_20_090307_create_pemilik_jaminan_table.php new file mode 100644 index 0000000..3c41137 --- /dev/null +++ b/database/migrations/2024_08_20_090307_create_pemilik_jaminan_table.php @@ -0,0 +1,52 @@ +id(); + $table->foreignIdFor(Debiture::class)->constrained('debitures')->onDelete('cascade'); + $table->foreignIdFor(HubunganPemilikJaminan::class)->constrained('hubungan_pemilik_jaminan')->onDelete('cascade'); + $table->string('name'); + $table->string('npwp', 16)->nullable(); + $table->string('nomor_id', 16)->nullable(); + $table->string('email', 100)->nullable(); + $table->string('phone', 15)->nullable(); + $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->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('pemilik_jaminan'); + } +}; diff --git a/resources/views/debitur/components/dokumen.blade.php b/resources/views/debitur/components/dokumen.blade.php index ac632a0..0361015 100644 --- a/resources/views/debitur/components/dokumen.blade.php +++ b/resources/views/debitur/components/dokumen.blade.php @@ -9,7 +9,7 @@ Debitur
- +

{{ $debitur->name }} | {{ $debitur->address.', '.$debitur->village->name.', '.$debitur->city->name.', '.$debitur->province->name.', '.$debitur->postal_code }}

@@ -29,8 +29,8 @@ {{ $pemilik->name }} @else - @endif @endforeach diff --git a/resources/views/debitur/components/pemilik.blade.php b/resources/views/debitur/components/pemilik.blade.php index e69de29..16fb025 100644 --- a/resources/views/debitur/components/pemilik.blade.php +++ b/resources/views/debitur/components/pemilik.blade.php @@ -0,0 +1,172 @@ +
+ @foreach($pemilikJaminan as $pemilik) +
+
+
+
+ + + + + + +
+ + +
+
+
+ + {{ $pemilik->name }} + + + {{ $pemilik->hubungan_pemilik->name }} + +
+
+ +
+
+
+ + nomor id/ktp + +

+ {{ $pemilik->nomor_id }} +

+
+
+
+
+ + npwp + +

+ {{ $pemilik->npwp }} +

+
+
+
+
+ + nomor telepon + +

+ {{ $pemilik->phone }} +

+
+
+
+
+ + Email + +

+ {{ $pemilik->email }} +

+
+
+
+
+ + alamat + +

+ {{ $pemilik->address.', '.$pemilik->village->name.', '.$pemilik->city->name.', '.$pemilik->province->name.', '.$pemilik->postal_code }} +

+
+
+
+ @endforeach + + +
+
+
+
+ + + + + + +
+ + +
+
+
+
+ + Pemilik Jaminan + + + Tambah Pemilik + +
+
+
+
+
+ + +@push('scripts') + + +@endpush diff --git a/resources/views/debitur/edit.blade.php b/resources/views/debitur/edit.blade.php index 8f5d89b..a8cca46 100644 --- a/resources/views/debitur/edit.blade.php +++ b/resources/views/debitur/edit.blade.php @@ -11,7 +11,8 @@
Back @@ -20,6 +21,8 @@
@if(request()->routeIs('debitur.edit', $debitur)) @include('lpj::debitur.components.debitur') + @elseif(request()->routeIs('debitur.pemilik.index', $debitur)) + @include('lpj::debitur.components.pemilik') @else @include('lpj::debitur.components.jaminan') @endif diff --git a/resources/views/pemilik_jaminan/form.blade.php b/resources/views/pemilik_jaminan/form.blade.php new file mode 100644 index 0000000..3ceb16a --- /dev/null +++ b/resources/views/pemilik_jaminan/form.blade.php @@ -0,0 +1,236 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render(request()->route()->getName()) }} +@endsection + +@section('content') +
+ +
+
+

+ {{ isset($pemilik->id) ? 'Edit' : 'Tambah' }} Pemilik Jaminan +

+
+ Back +
+
+
+
+ @if(isset($pemilik->id)) + @method('PUT') + @endif + @csrf + +
+ +
+ +

{{ $debitur->name }} | {{ $debitur->address.', '.$debitur->village->name.', '.$debitur->city->name.', '.$debitur->province->name.', '.$debitur->postal_code }}

+
+
+
+ +
+ + @error('hubungan_pemilik_jaminan_id') + {{ $message }} + @enderror +
+
+
+ +
+ + @error('name') + {{ $message }} + @enderror +
+
+
+ +
+ + @error('nomor_id') + {{ $message }} + @enderror +
+
+ +
+ +
+ + @error('npwp') + {{ $message }} + @enderror +
+
+
+ +
+ + @error('email') + {{ $message }} + @enderror +
+
+
+ +
+ + @error('phone') + {{ $message }} + @enderror +
+
+ +
+ +
+
+
+ + @error('province_code') + {{ $message }} + @enderror +
+
+ + @error('city_code') + {{ $message }} + @enderror +
+
+
+
+ + @error('district_code') + {{ $message }} + @enderror +
+
+ + @error('district_code') + {{ $message }} + @enderror +
+
+ + @error('postal_code') + {{ $message }} + @enderror +
+
+
+ + @error('address') + {{ $message }} + @enderror +
+
+
+
+ +
+
+ +
+
+
+@endsection diff --git a/resources/views/pemilik_jaminan/index.blade.php b/resources/views/pemilik_jaminan/index.blade.php new file mode 100644 index 0000000..5c4cae3 --- /dev/null +++ b/resources/views/pemilik_jaminan/index.blade.php @@ -0,0 +1,24 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render(request()->route()->getName()) }} +@endsection + +@section('content') +
+ +
+
+

+ {{ isset($document->id) ? 'Edit' : 'Tambah' }} Pemilik Jaminan +

+
+ Back +
+
+
+ @include('lpj::debitur.form') +
+
+
+@endsection diff --git a/routes/breadcrumbs.php b/routes/breadcrumbs.php index bacd59b..d2cdf88 100644 --- a/routes/breadcrumbs.php +++ b/routes/breadcrumbs.php @@ -217,3 +217,19 @@ $trail->push('Edit Data Jaminan Debitur'); }); + + Breadcrumbs::for('debitur.pemilik.index', function (BreadcrumbTrail $trail) { + $trail->parent('debitur'); + $trail->push('Data Pemilik Jaminan Debitur'); + }); + + Breadcrumbs::for('debitur.pemilik.create', function (BreadcrumbTrail $trail) { + $trail->parent('debitur.pemilik.index'); + $trail->push('Tambah Data Pemilik Jaminan Debitur'); + }); + + Breadcrumbs::for('debitur.pemilik.edit', function (BreadcrumbTrail $trail) { + $trail->parent('debitur.pemilik.index'); + $trail->push('Edit Data Pemilik Jaminan Debitur'); + }); + diff --git a/routes/web.php b/routes/web.php index 09c641c..aa609f4 100644 --- a/routes/web.php +++ b/routes/web.php @@ -14,6 +14,7 @@ use Modules\Lpj\Http\Controllers\JenisJaminanController; use Modules\Lpj\Http\Controllers\JenisLegalitasJaminanController; use Modules\Lpj\Http\Controllers\NilaiPlafondController; + use Modules\Lpj\Http\Controllers\PemilikJaminanController; use Modules\Lpj\Http\Controllers\TujuanPenilaianController; /* @@ -156,14 +157,23 @@ Route::get('export', [DebitureController::class, 'export'])->name('export'); - Route::name('jaminan.')->prefix('{id}/jaminan')->group(function(){ + Route::name('jaminan.')->prefix('{id}/jaminan')->group(function () { Route::get('/', [DokumenJaminanController::class, 'index'])->name('index'); Route::get('create', [DokumenJaminanController::class, 'create'])->name('create'); - Route::get('{jaminan}/edit', [DokumenJaminanController::class,'edit'])->name('edit'); + Route::get('{jaminan}/edit', [DokumenJaminanController::class, 'edit'])->name('edit'); Route::put('{jaminan}', [DokumenJaminanController::class, 'update'])->name('update'); - Route::post('store', [DokumenJaminanController::class,'store'])->name('store'); + Route::post('store', [DokumenJaminanController::class, 'store'])->name('store'); Route::delete('{jaminan}', [DokumenJaminanController::class, 'destroy'])->name('destroy'); }); + + Route::name('pemilik.')->prefix('{id}/pemilik')->group(function () { + Route::get('/', [PemilikJaminanController::class, 'index'])->name('index'); + Route::get('create', [PemilikJaminanController::class, 'create'])->name('create'); + Route::get('{pemilik}/edit', [PemilikJaminanController::class, 'edit'])->name('edit'); + Route::put('{pemilik}', [PemilikJaminanController::class, 'update'])->name('update'); + Route::post('store', [PemilikJaminanController::class, 'store'])->name('store'); + Route::delete('{pemilik}', [PemilikJaminanController::class, 'destroy'])->name('destroy'); + }); }); Route::resource('debitur', DebitureController::class);