Compare commits

...

4 Commits

Author SHA1 Message Date
9ecdaa0cdd Update Module Debitur
penambahan default cif 0x10 dan di buat mandatory
update field npwp input harus minimal 15 dan maksimal 16 digit
penambahan rules
2024-09-13 14:15:10 +07:00
5619c52b0a Update Module Approval Permohonan, Chnage reject to Revisi 2024-09-13 14:11:35 +07:00
dcf9e4fd5e Remove Module Jenis Jaminan 2024-09-13 14:11:14 +07:00
72e4ff3160 Update Module Permohonan, penambahan field jenis_fasilitas_kredit dan nilai_plafond 2024-09-13 14:10:40 +07:00
14 changed files with 228 additions and 61 deletions

View File

@ -28,6 +28,8 @@
$row->branch->name, $row->branch->name,
$row->tujuanPenilaian->name, $row->tujuanPenilaian->name,
$row->debiture->name, $row->debiture->name,
$row->fasilitasKredit->name,
$row->plafond->name,
$row->status, $row->status,
$row->authorized_at, $row->authorized_at,
$row->authorized_status, $row->authorized_status,
@ -47,7 +49,9 @@
'Branch Pemohon', 'Branch Pemohon',
'Tujuan Penilaian', 'Tujuan Penilaian',
'Debitur', 'Debitur',
'Status', 'Jenis Fasilitas Kredit',
'Nilai Plafond',
'Status Permohonan',
'Tanggal Pengesahan', 'Tanggal Pengesahan',
'Status Pengesahan', 'Status Pengesahan',
'Pengesah', 'Pengesah',
@ -61,7 +65,8 @@
return [ return [
'A' => NumberFormat::FORMAT_NUMBER, 'A' => NumberFormat::FORMAT_NUMBER,
'C' => NumberFormat::FORMAT_DATE_DATETIME, 'C' => NumberFormat::FORMAT_DATE_DATETIME,
'L' => NumberFormat::FORMAT_DATE_DATETIME 'K' => NumberFormat::FORMAT_DATE_DATETIME,
'N' => NumberFormat::FORMAT_DATE_DATETIME
]; ];
} }
} }

View File

@ -71,6 +71,7 @@
public function update(DebitureRequest $request, $id) public function update(DebitureRequest $request, $id)
{ {
//print_r($request->all());exit;
$validate = $request->validated(); $validate = $request->validated();
if ($validate) { if ($validate) {

View File

@ -15,6 +15,8 @@
use Modules\Lpj\Models\Branch; use Modules\Lpj\Models\Branch;
use Modules\Lpj\Models\Debiture; use Modules\Lpj\Models\Debiture;
use Modules\Lpj\Models\DokumenJaminan; use Modules\Lpj\Models\DokumenJaminan;
use Modules\Lpj\Models\JenisFasilitasKredit;
use Modules\Lpj\Models\NilaiPlafond;
use Modules\Lpj\Models\Permohonan; use Modules\Lpj\Models\Permohonan;
use Modules\Lpj\Models\StatusPermohonan; use Modules\Lpj\Models\StatusPermohonan;
use Modules\Lpj\Models\TujuanPenilaian; use Modules\Lpj\Models\TujuanPenilaian;
@ -30,8 +32,8 @@
public function store(PermohonanRequest $request) public function store(PermohonanRequest $request)
{ {
$validate = $request->validated();
$validate = $request->validated();
if ($validate) { if ($validate) {
try { try {
// Save to database // Save to database
@ -63,8 +65,13 @@
$debitur = Debiture::find($debitur); $debitur = Debiture::find($debitur);
$tujuanPenilaian = TujuanPenilaian::all(); $tujuanPenilaian = TujuanPenilaian::all();
$status = StatusPermohonan::all(); $status = StatusPermohonan::all();
$fasilitasKredit = JenisFasilitasKredit::all();
$plafond = NilaiPlafond::all();
return view('lpj::permohonan.form', compact('branches', 'debitur', 'tujuanPenilaian', 'status')); return view(
'lpj::permohonan.form',
compact('branches', 'debitur', 'tujuanPenilaian', 'status', 'fasilitasKredit', 'plafond'),
);
} }
public function edit($id) public function edit($id)
@ -78,7 +85,10 @@
$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(); $districts = District::where('city_code', $debitur->city_code)->get();
$villages = Village::where('district_code', $debitur->district_code)->get(); $villages = Village::where('district_code', $debitur->district_code)->get();
$documents = DokumenJaminan::with('pemilik', 'detail')->where('debiture_id', $id)->get(); $documents = DokumenJaminan::with('pemilik', 'detail')->where('debiture_id', $id)->get();
$fasilitasKredit = JenisFasilitasKredit::all();
$plafond = NilaiPlafond::all();
return view( return view(
'lpj::permohonan.form', 'lpj::permohonan.form',
@ -92,7 +102,9 @@
'cities', 'cities',
'districts', 'districts',
'villages', 'villages',
'documents' 'documents',
'fasilitasKredit',
'plafond',
), ),
); );
} }

View File

@ -3,6 +3,7 @@
namespace Modules\Lpj\Http\Requests; namespace Modules\Lpj\Http\Requests;
use Illuminate\Foundation\Http\FormRequest; use Illuminate\Foundation\Http\FormRequest;
use Modules\Lpj\Rules\UniqueCifExceptZero;
class DebitureRequest extends FormRequest class DebitureRequest extends FormRequest
{ {
@ -21,7 +22,7 @@
'nomor_rekening' => 'nullable|string|max:50', 'nomor_rekening' => 'nullable|string|max:50',
'name' => 'required', 'name' => 'required',
'registered_at' => 'nullable|date', 'registered_at' => 'nullable|date',
'npwp' => 'nullable|string|max:16', 'npwp' => 'nullable|string|min:15|max:16',
'email' => 'nullable|email', 'email' => 'nullable|email',
'phone' => 'nullable|string|max:15', 'phone' => 'nullable|string|max:15',
'address' => 'nullable|string', 'address' => 'nullable|string',
@ -29,10 +30,10 @@
'status' => 'nullable|boolean' 'status' => 'nullable|boolean'
]; ];
if ($this->method() == 'PUT') { if($this->method() == 'PUT'){
$rules['cif'] = 'nullable|unique:debitures,cif,' . $this->id; $rules['cif'] = ['required', new UniqueCifExceptZero($this->id)];
} else { }else{
$rules['cif'] = 'nullable|unique:debitures,cif'; $rules['cif'] = ['required', new UniqueCifExceptZero(null)];
} }
return $rules; return $rules;

View File

@ -14,13 +14,15 @@
: array : array
{ {
$rules = [ $rules = [
'nomor_registrasi' => 'nullable|string|max:10', 'nomor_registrasi' => 'nullable|string|max:10',
'tanggal_permohonan' => 'nullable|date', 'tanggal_permohonan' => 'nullable|date',
'user_id' => 'nullable|exists:users,id', 'user_id' => 'nullable|exists:users,id',
'branch_id' => 'required|exists:branches,id', 'branch_id' => 'required|exists:branches,id',
'tujuan_penilaian_id' => 'required|exists:tujuan_penilaian,id', 'tujuan_penilaian_id' => 'required|exists:tujuan_penilaian,id',
'debiture_id' => 'required|exists:debitures,id', 'debiture_id' => 'required|exists:debitures,id',
'status' => 'required|string', 'status' => 'required|string',
'jenis_fasilitas_kredit_id' => 'required|exists:jenis_fasilitas_kredit,id',
'nilai_plafond_id' => 'required|exists:nilai_plafond,id',
]; ];
return $rules; return $rules;

View File

@ -18,6 +18,8 @@ class Permohonan extends Base
'tujuan_penilaian_id', 'tujuan_penilaian_id',
'debiture_id', 'debiture_id',
'keterangan', 'keterangan',
'jenis_fasilitas_kredit_id',
'nilai_plafond_id',
'status', 'status',
'authorized_at', 'authorized_at',
'authorized_status', 'authorized_status',
@ -44,4 +46,12 @@ class Permohonan extends Base
public function documents(){ public function documents(){
return $this->hasMany(DokumenJaminan::class); return $this->hasMany(DokumenJaminan::class);
} }
public function nilaiPlafond(){
return $this->belongsTo(NilaiPlafond::class);
}
public function jenisFasilitasKredit(){
return $this->belongsTo(JenisFasilitasKredit::class);
}
} }

View File

@ -0,0 +1,25 @@
<?php
namespace Modules\Lpj\Rules;
use Closure;
use Illuminate\Contracts\Validation\ValidationRule;
use Modules\Lpj\Models\Debiture;
class UniqueCifExceptZero implements ValidationRule
{
public function __construct($id = null)
{
$this->id = $id;
}
public function validate($attribute, $value, $fail): void
{
if (Debiture::where($attribute, $value)
->where('id', '!=', $this->id)
->where($attribute, '!=', '000000')
->exists()) {
$fail('The :attribute field must be uniquse.'.$this->id);
}
}
}

View File

@ -0,0 +1,33 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use Modules\Lpj\Models\JenisFasilitasKredit;
use Modules\Lpj\Models\NilaiPlafond;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('permohonan', function (Blueprint $table) {
$table->foreignIdFor(JenisFasilitasKredit::class)->nullable()->onDelete('cascade');
$table->foreignIdFor(NilaiPlafond::class)->nullable()->onDelete('cascade');
$table->string('status')->default('order')->change();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('permohonan', function (Blueprint $table) {
$table->dropForeign(['fasilitas_kredit_id']);
$table->dropForeign(['nilai_plafond_id']);
});
}
};

View File

@ -111,17 +111,9 @@
"permission": "", "permission": "",
"roles": [] "roles": []
}, },
{
"title": "Jenis Jaminan",
"path": "basicdata.jenis-jaminan",
"classes": "",
"attributes": [],
"permission": "",
"roles": []
},
{ {
"title": "Jenis Aset", "title": "Jenis Aset",
"path": "basicdata.jenis-aset", "path": "basicdata.jenis-jaminan",
"classes": "", "classes": "",
"attributes": [], "attributes": [],
"permission": "", "permission": "",

View File

@ -1,5 +1,6 @@
<form action="{{ isset($debitur->id) ? route('debitur.update', $debitur->id) : route('debitur.store') }}" method="POST" class="grid gap-5"> <form action="{{ isset($debitur->id) ? route('debitur.update', $debitur->id) : route('debitur.store') }}" method="POST" class="grid gap-5">
@if(isset($debitur->id)) @if(isset($debitur->id))
<input type="hidden" name="id" value="{{ $debitur->id }}">
@method('PUT') @method('PUT')
@endif @endif
@csrf @csrf
@ -29,7 +30,7 @@
CIF CIF
</label> </label>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<input class="input @error('cif') border-danger bg-danger-light @enderror" type="number" name="cif" value="{{ $debitur->cif ?? '' }}"> <input class="input @error('cif') border-danger bg-danger-light @enderror" type="number" name="cif" value="{{ $debitur->cif ?? '0000000000' }}">
@error('cif') @error('cif')
<em class="alert text-danger text-sm">{{ $message }}</em> <em class="alert text-danger text-sm">{{ $message }}</em>
@enderror @enderror

View File

@ -247,8 +247,8 @@
<button type="submit" name="status" value="register" class="btn btn-success"> <button type="submit" name="status" value="register" class="btn btn-success">
Approve Approve
</button> </button>
<button type="submit" name="status" value="revisi" class="btn btn-danger ml-3"> <button type="submit" name="status" value="revisi" class="btn btn-warning ml-3">
Reject Revisi
</button> </button>
</div> </div>
</form> </form>

View File

@ -22,9 +22,9 @@
@if(request()->get('from') == 'permohonan') @if(request()->get('from') == 'permohonan')
<a href="{{ route('permohonan.create') }}" class="btn btn-xs btn-info"><i class="ki-filled ki-exit-left"></i> Back</a> <a href="{{ route('permohonan.create') }}" class="btn btn-xs btn-info"><i class="ki-filled ki-exit-left"></i> Back</a>
@elseif($permohonan->id) @elseif($permohonan->id)
<a href="{{ route('permohonan.index') }}" class="btn btn-xs btn-info"><i class="ki-filled ki-exit-left"></i> Back</a> <a href="{{ route('permohonan.index') }}" class="btn btn-xs btn-info"><i class="ki-filled ki-exit-left"></i> Back</a>
@else @else
<a href="{{ route('debitur.index') }}" class="btn btn-xs btn-info"><i class="ki-filled ki-exit-left"></i> Back</a> <a href="{{ route('debitur.index') }}" class="btn btn-xs btn-info"><i class="ki-filled ki-exit-left"></i> Back</a>
@endif @endif
</div> </div>
@ -74,6 +74,60 @@
</div> </div>
</div> </div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Fasilitas Kredit
</label>
<div class="flex flex-wrap items-baseline w-full">
<select class="input tomselect w-full @error('jenis_fasilitas_kredit_id') border-danger bg-danger-light @enderror" name="jenis_fasilitas_kredit_id" id="jenis_fasilitas_kredit_id">
<option value="">Pilih Fasilitas Kredit</option>
@if(isset($fasilitasKredit))
@foreach($fasilitasKredit as $row)
@if(isset($permohonan))
<option value="{{ $row->id }}" {{ isset($permohonan->jenis_fasilitas_kredit_id) && $permohonan->jenis_fasilitas_kredit_id == $row->id ?'selected' : '' }}>
{{ $row->name }}
</option>
@else
<option value="{{ $row->id }}">
{{ $row->name }}
</option>
@endif
@endforeach
@endif
</select>
@error('status')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Nilai Plafond
</label>
<div class="flex flex-wrap items-baseline w-full">
<select class="input tomselect w-full @error('nilai_plafond_id') border-danger bg-danger-light @enderror" name="nilai_plafond_id" id="nilai_plafond_id">
<option value="">Pilih Nilai Flafond</option>
@if(isset($plafond))
@foreach($plafond as $row)
@if(isset($permohonan))
<option value="{{ $row->id }}" {{ isset($permohonan->nilai_plafond_id) && $permohonan->nilai_plafond_id == $row->id ?'selected' : '' }}>
{{ $row->name }}
</option>
@else
<option value="{{ $row->id }}">
{{ $row->name }}
</option>
@endif
@endforeach
@endif
</select>
@error('status')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5"> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56"> <label class="form-label max-w-56">
Status Permohonan Status Permohonan
@ -174,12 +228,66 @@
</div> </div>
</div> </div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Fasilitas Kredit
</label>
<div class="flex flex-wrap items-baseline w-full">
<select class="input tomselect w-full @error('jenis_fasilitas_kredit_id') border-danger bg-danger-light @enderror" name="jenis_fasilitas_kredit_id" id="jenis_fasilitas_kredit_id">
<option value="">Pilih Fasilitas Kredit</option>
@if(isset($fasilitasKredit))
@foreach($fasilitasKredit as $row)
@if(isset($permohonan))
<option value="{{ $row->id }}" {{ isset($permohonan->jenis_fasilitas_kredit_id) && $permohonan->jenis_fasilitas_kredit_id == $row->id ?'selected' : '' }}>
{{ $row->name }}
</option>
@else
<option value="{{ $row->id }}">
{{ $row->name }}
</option>
@endif
@endforeach
@endif
</select>
@error('status')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Nilai Plafond
</label>
<div class="flex flex-wrap items-baseline w-full">
<select class="input tomselect w-full @error('nilai_plafond_id') border-danger bg-danger-light @enderror" name="nilai_plafond_id" id="nilai_plafond_id">
<option value="">Pilih Nilai Flafond</option>
@if(isset($plafond))
@foreach($plafond as $row)
@if(isset($permohonan))
<option value="{{ $row->id }}" {{ isset($permohonan->nilai_plafond_id) && $permohonan->nilai_plafond_id == $row->id ?'selected' : '' }}>
{{ $row->name }}
</option>
@else
<option value="{{ $row->id }}">
{{ $row->name }}
</option>
@endif
@endforeach
@endif
</select>
@error('status')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5"> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56"> <label class="form-label max-w-56">
Status Permohonan Status Permohonan
</label> </label>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<select class="input tomselect w-full @error('branch_id') border-danger bg-danger-light @enderror" name="status" id="status"> <select class="input tomselect w-full @error('status') border-danger bg-danger-light @enderror" name="status" id="status">
<option value="">Pilih Status Permohonan</option> <option value="">Pilih Status Permohonan</option>
@if(isset($status)) @if(isset($status))
@foreach($status as $row) @foreach($status as $row)

View File

@ -39,17 +39,17 @@
Breadcrumbs::for('basicdata.jenis-jaminan', function (BreadcrumbTrail $trail) { Breadcrumbs::for('basicdata.jenis-jaminan', function (BreadcrumbTrail $trail) {
$trail->parent('basicdata'); $trail->parent('basicdata');
$trail->push('Jenis Jaminan', route('basicdata.jenis-jaminan.index')); $trail->push('Jenis Aset', route('basicdata.jenis-jaminan.index'));
}); });
Breadcrumbs::for('basicdata.jenis-jaminan.create', function (BreadcrumbTrail $trail) { Breadcrumbs::for('basicdata.jenis-jaminan.create', function (BreadcrumbTrail $trail) {
$trail->parent('basicdata.jenis-jaminan'); $trail->parent('basicdata.jenis-jaminan');
$trail->push('Tambah Jenis Jaminan', route('basicdata.jenis-jaminan.create')); $trail->push('Tambah Jenis Aset', route('basicdata.jenis-jaminan.create'));
}); });
Breadcrumbs::for('basicdata.jenis-jaminan.edit', function (BreadcrumbTrail $trail) { Breadcrumbs::for('basicdata.jenis-jaminan.edit', function (BreadcrumbTrail $trail) {
$trail->parent('basicdata.jenis-jaminan'); $trail->parent('basicdata.jenis-jaminan');
$trail->push('Edit Jenis Jaminan'); $trail->push('Edit Jenis Aset');
}); });
Breadcrumbs::for('basicdata.tujuan-penilaian', function (BreadcrumbTrail $trail) { Breadcrumbs::for('basicdata.tujuan-penilaian', function (BreadcrumbTrail $trail) {
@ -67,21 +67,6 @@
$trail->push('Edit Tujuan Penilaian'); $trail->push('Edit Tujuan Penilaian');
}); });
Breadcrumbs::for('basicdata.jenis-aset', function (BreadcrumbTrail $trail) {
$trail->parent('basicdata');
$trail->push('Jenis Aset', route('basicdata.jenis-aset.index'));
});
Breadcrumbs::for('basicdata.jenis-aset.create', function (BreadcrumbTrail $trail) {
$trail->parent('basicdata.jenis-aset');
$trail->push('Tambah Jenis Aset', route('basicdata.jenis-aset.create'));
});
Breadcrumbs::for('basicdata.jenis-aset.edit', function (BreadcrumbTrail $trail) {
$trail->parent('basicdata.jenis-aset');
$trail->push('Edit Jenis Aset');
});
Breadcrumbs::for('basicdata.jenis-dokumen', function (BreadcrumbTrail $trail) { Breadcrumbs::for('basicdata.jenis-dokumen', function (BreadcrumbTrail $trail) {
$trail->parent('basicdata'); $trail->parent('basicdata');
$trail->push('Jenis Dokumen', route('basicdata.jenis-dokumen.index')); $trail->push('Jenis Dokumen', route('basicdata.jenis-dokumen.index'));

View File

@ -48,7 +48,7 @@
}); });
Route::resource('jenis-legalitas-jaminan', JenisLegalitasJaminanController::class); Route::resource('jenis-legalitas-jaminan', JenisLegalitasJaminanController::class);
Route::name('jenis-jaminan.')->prefix('jenis-jaminan')->group(function () { Route::name('jenis-jaminan.')->prefix('jenis-aset')->group(function () {
Route::get('legalitas/{id}', [JenisJaminanController::class, 'legalitasJaminan'])->name('legalitas'); Route::get('legalitas/{id}', [JenisJaminanController::class, 'legalitasJaminan'])->name('legalitas');
Route::get('restore/{id}', [JenisJaminanController::class, 'restore'])->name('restore'); Route::get('restore/{id}', [JenisJaminanController::class, 'restore'])->name('restore');
Route::get('datatables', [JenisJaminanController::class, 'dataForDatatables']) Route::get('datatables', [JenisJaminanController::class, 'dataForDatatables'])
@ -65,14 +65,6 @@
}); });
Route::resource('tujuan-penilaian', TujuanPenilaianController::class); Route::resource('tujuan-penilaian', TujuanPenilaianController::class);
Route::name('jenis-aset.')->prefix('jenis-aset')->group(function () {
Route::get('restore/{id}', [JenisAsetController::class, 'restore'])->name('restore');
Route::get('datatables', [JenisAsetController::class, 'dataForDatatables'])
->name('datatables');
Route::get('export', [JenisAsetController::class, 'export'])->name('export');
});
Route::resource('jenis-aset', JenisAsetController::class);
Route::name('jenis-dokumen.')->prefix('jenis-dokumen')->group(function () { Route::name('jenis-dokumen.')->prefix('jenis-dokumen')->group(function () {
Route::get('restore/{id}', [JenisDokumenController::class, 'restore'])->name('restore'); Route::get('restore/{id}', [JenisDokumenController::class, 'restore'])->name('restore');
Route::get('datatables', [JenisDokumenController::class, 'dataForDatatables']) Route::get('datatables', [JenisDokumenController::class, 'dataForDatatables'])