feat(jenis-legalitas-jaminan): tambahkan dukungan untuk custom fields

- Menambahkan kolom 'custom_fields' pada tabel 'jenis_legalitas_jaminan'.
- Memperbarui model untuk mengizinkan pengisian 'custom_fields' sebagai array.
- Memperbarui request untuk validasi 'custom_fields' sebagai array.
- Memperbarui controller untuk mengambil dan mengirimkan custom fields saat membuat dan mengedit jenis legalitas jaminan.
This commit is contained in:
Daeng Deni Mardaeni
2025-01-30 16:34:37 +07:00
parent 18cbb0bbc5
commit d746f53941
5 changed files with 149 additions and 78 deletions

View File

@@ -8,6 +8,7 @@
use Maatwebsite\Excel\Facades\Excel; use Maatwebsite\Excel\Facades\Excel;
use Modules\Lpj\Exports\JenisLegalitasJaminanExport; use Modules\Lpj\Exports\JenisLegalitasJaminanExport;
use Modules\Lpj\Http\Requests\JenisLegalitasJaminanRequest; use Modules\Lpj\Http\Requests\JenisLegalitasJaminanRequest;
use Modules\Lpj\Models\customField;
use Modules\Lpj\Models\JenisLegalitasJaminan; use Modules\Lpj\Models\JenisLegalitasJaminan;
class JenisLegalitasJaminanController extends Controller class JenisLegalitasJaminanController extends Controller
@@ -40,13 +41,15 @@
public function create() public function create()
{ {
return view('lpj::jenis_legalitas_jaminan.create'); $customFields = CustomField::orderBy('urutan_prioritas', 'asc')->get();
return view('lpj::jenis_legalitas_jaminan.create',compact('customFields'));
} }
public function edit($id) public function edit($id)
{ {
$jenisLegalitasJaminan = JenisLegalitasJaminan::find($id); $jenisLegalitasJaminan = JenisLegalitasJaminan::find($id);
return view('lpj::jenis_legalitas_jaminan.create', compact('jenisLegalitasJaminan')); $customFields = CustomField::orderBy('urutan_prioritas', 'asc')->get();
return view('lpj::jenis_legalitas_jaminan.create', compact('jenisLegalitasJaminan', 'customFields'));
} }
public function update(JenisLegalitasJaminanRequest $request, $id) public function update(JenisLegalitasJaminanRequest $request, $id)

View File

@@ -20,6 +20,8 @@
'slug' => 'required|max:255', 'slug' => 'required|max:255',
'custom_field' => 'nullable|max:255', 'custom_field' => 'nullable|max:255',
'custom_field_type' => 'nullable|max:255', 'custom_field_type' => 'nullable|max:255',
'custom_fields' => 'nullable|array',
'custom_fields.*' => 'required|string|max:255',
]; ];
} }
@@ -46,5 +48,10 @@
'slug' => Str::slug($this->name), 'slug' => Str::slug($this->name),
]); ]);
} }
// Ensure custom_fields is always an array
if (!is_array($this->custom_fields)) {
$this->merge(['custom_fields' => []]);
}
} }
} }

View File

@@ -7,5 +7,14 @@
class JenisLegalitasJaminan extends Base class JenisLegalitasJaminan extends Base
{ {
protected $table = 'jenis_legalitas_jaminan'; protected $table = 'jenis_legalitas_jaminan';
protected $fillable = ['code', 'name','slug','custom_field','custom_field_type']; protected $fillable = ['code', 'name','slug','custom_field','custom_field_type','custom_fields'];
protected $casts = [
'custom_fields' => 'array',
];
public function customFields()
{
return $this->hasMany(CustomField::class);
}
} }

View File

@@ -0,0 +1,28 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('jenis_legalitas_jaminan', function (Blueprint $table) {
$table->string('custom_fields')->nullable();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('jenis_legalitas_jaminan', function (Blueprint $table) {
$table->dropColumn('custom_fields');
});
}
};

View File

@@ -10,83 +10,107 @@
<form action="{{ route('basicdata.jenis-legalitas-jaminan.update', $jenisLegalitasJaminan->id) }}" method="POST"> <form action="{{ route('basicdata.jenis-legalitas-jaminan.update', $jenisLegalitasJaminan->id) }}" method="POST">
<input type="hidden" name="id" value="{{ $jenisLegalitasJaminan->id }}"> <input type="hidden" name="id" value="{{ $jenisLegalitasJaminan->id }}">
@method('PUT') @method('PUT')
@else @else
<form method="POST" action="{{ route('basicdata.jenis-legalitas-jaminan.store') }}"> <form method="POST" action="{{ route('basicdata.jenis-legalitas-jaminan.store') }}">
@endif @endif
@csrf @csrf
<div class="card border border-agi-100 pb-2.5"> <div class="card border border-agi-100 pb-2.5">
<div class="card-header bg-agi-50" id="basic_settings"> <div class="card-header bg-agi-50" id="basic_settings">
<h3 class="card-title"> <h3 class="card-title">
{{ isset($jenisLegalitasJaminan->id) ? 'Edit' : 'Tambah' }} Jenis Legalitas Jaminan {{ isset($jenisLegalitasJaminan->id) ? 'Edit' : 'Tambah' }} Jenis Legalitas Jaminan
</h3> </h3>
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<a href="{{ route('basicdata.jenis-legalitas-jaminan.index') }}" class="btn btn-xs btn-info"><i class="ki-filled ki-exit-left"></i> Back</a> <a href="{{ route('basicdata.jenis-legalitas-jaminan.index') }}" class="btn btn-xs btn-info"><i class="ki-filled ki-exit-left"></i> Back</a>
</div> </div>
</div> </div>
<div class="card-body grid gap-5"> <div class="card-body grid gap-5">
@if(isset($jenisLegalitasJaminan->id)) @if(isset($jenisLegalitasJaminan->id))
<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">
Code Code
</label> </label>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<input readonly class="input border-warning bg-warning-light @error('code') border-danger bg-danger-light @enderror" type="text" name="code" value="{{ $jenisLegalitasJaminan->code ?? '' }}"> <input readonly class="input border-warning bg-warning-light @error('code') border-danger bg-danger-light @enderror" type="text" name="code" value="{{ $jenisLegalitasJaminan->code ?? '' }}">
@error('code') @error('code')
<em class="alert text-danger text-sm">{{ $message }}</em> <em class="alert text-danger text-sm">{{ $message }}</em>
@enderror @enderror
</div> </div>
</div> </div>
@endif @endif
<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">
Name Name
</label> </label>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<input class="input @error('name') border-danger bg-danger-light @enderror" type="text" name="name" value="{{ $jenisLegalitasJaminan->name ?? '' }}"> <input class="input @error('name') border-danger bg-danger-light @enderror" type="text" name="name" value="{{ $jenisLegalitasJaminan->name ?? '' }}">
@error('name') @error('name')
<em class="alert text-danger text-sm">{{ $message }}</em> <em class="alert text-danger text-sm">{{ $message }}</em>
@enderror @enderror
</div> </div>
</div> </div>
<!-- Tambahkan inputan custom_field --> <!-- Tambahkan inputan custom_field -->
<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">
Custom Field Custom Field
</label> </label>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<input class="input @error('custom_field') border-danger bg-danger-light @enderror" type="text" name="custom_field" value="{{ $jenisLegalitasJaminan->custom_field ?? '' }}"> <input class="input @error('custom_field') border-danger bg-danger-light @enderror" type="text" name="custom_field" value="{{ $jenisLegalitasJaminan->custom_field ?? '' }}">
@error('custom_field') @error('custom_field')
<em class="alert text-danger text-sm">{{ $message }}</em> <em class="alert text-danger text-sm">{{ $message }}</em>
@enderror @enderror
</div> </div>
</div> </div>
<!-- Tambahkan inputan custom_field_type --> <!-- Tambahkan inputan custom_field_type -->
<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">
Custom Field Type Custom Field Type
</label> </label>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<select class="input tomselect @error('custom_field_type') border-danger bg-danger-light @enderror" name="custom_field_type"> <select class="input tomselect @error('custom_field_type') border-danger bg-danger-light @enderror" name="custom_field_type">
<option value="">Pilih Tipe</option> <option value="">Pilih Tipe</option>
<option value="text" {{ (isset($jenisLegalitasJaminan) && $jenisLegalitasJaminan->custom_field_type == 'text') ? 'selected' : '' }}>Text</option> <option value="text" {{ (isset($jenisLegalitasJaminan) && $jenisLegalitasJaminan->custom_field_type == 'text') ? 'selected' : '' }}>Text</option>
<option value="number" {{ (isset($jenisLegalitasJaminan) && $jenisLegalitasJaminan->custom_field_type == 'number') ? 'selected' : '' }}>Number</option> <option value="number" {{ (isset($jenisLegalitasJaminan) && $jenisLegalitasJaminan->custom_field_type == 'number') ? 'selected' : '' }}>Number</option>
<option value="date" {{ (isset($jenisLegalitasJaminan) && $jenisLegalitasJaminan->custom_field_type == 'date') ? 'selected' : '' }}>Date</option> <option value="date" {{ (isset($jenisLegalitasJaminan) && $jenisLegalitasJaminan->custom_field_type == 'date') ? 'selected' : '' }}>Date</option>
</select> </select>
@error('custom_field_type') @error('custom_field_type')
<em class="alert text-danger text-sm">{{ $message }}</em> <em class="alert text-danger text-sm">{{ $message }}</em>
@enderror @enderror
</div> </div>
</div> </div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Custom Fields
</label>
<div class="grid grid-cols-3 lg:grid-cols-4 w-full gap-2.5">
@foreach($customFields as $customField)
<label class="switch">
@if ( isset($jenisLegalitasJaminan) && !empty($jenisLegalitasJaminan->custom_fields))
<input type="checkbox" @if (in_array($customField->id, $jenisLegalitasJaminan->custom_fields))
{{ 'checked' }}
@endif
value="{{ $customField->id }}" name="custom_fields[]"/>
@else
<input type="checkbox" value="{{ $customField->id }}"
name="custom_fields[]"/>
@endif
<span class="switch-label">
{{ $customField->urutan_prioritas.'. '.$customField->label }}
</span>
</label>
@endforeach
</div>
</div>
<div class="flex justify-end">
<button type="submit" class="btn btn-primary"> <div class="flex justify-end">
Save <button type="submit" class="btn btn-primary">
</button> Save
</div> </button>
</div> </div>
</div> </div>
</form> </div>
</form>
</div> </div>
@endsection @endsection