relasi wilayah ekosistem

This commit is contained in:
2026-06-08 13:25:33 +07:00
parent f11be9d288
commit 482c3fc474
11 changed files with 470 additions and 70 deletions
@@ -16,9 +16,7 @@ use App\Models\Core\Program;
class ValueBasisDataController extends Controller class ValueBasisDataController extends Controller
{ {
/**
* Display a listing of the resource.
*/
public function index(Request $request, string $tabelId): JsonResponse public function index(Request $request, string $tabelId): JsonResponse
{ {
if (!Gate::any(['super_admin', 'admin', 'fasilitator'])) { if (!Gate::any(['super_admin', 'admin', 'fasilitator'])) {
@@ -149,9 +147,70 @@ class ValueBasisDataController extends Controller
return response()->json($values); return response()->json($values);
} }
/** private function prepareValidationRules($kolom)
* Store a newly created resource in storage. {
*/ $rules = [];
foreach ($kolom as $k) {
if ($k->validasi && is_array($k->validasi)) {
$rules[$k->kolom] = $k->validasi;
if (!in_array('required', $k->validasi) && !in_array('nullable', $k->validasi)) {
$rules[$k->kolom][] = 'nullable';
}
if (!in_array('string', $k->validasi) && ($k->tipe == 'varchar' || $k->tipe == 'text')) {
$rules[$k->kolom][] = 'string';
}
if (!in_array('max', $k->validasi) && ($k->tipe == 'varchar')) {
$rules[$k->kolom][] = 'max:255';
}
if (!in_array('integer', $k->validasi) && $k->tipe == 'integer') {
$rules[$k->kolom][] = 'integer';
}
if (!in_array('boolean', $k->validasi) && $k->tipe == 'boolean') {
$rules[$k->kolom][] = 'boolean';
}
if (!in_array('date', $k->validasi) && ($k->tipe == 'date' || $k->tipe == 'datetime')) {
$rules[$k->kolom][] = 'date';
}
if ($k->tipe == 'foreign_key') {
$rules[$k->kolom][] = 'exists:' . $k->relasi_tabel . ',' . $k->relasi_kolom_id;
}
if ($k->tipe == 'enum') {
$enumValues = collect($k->enum_opsi)->pluck('value')->toArray();
$rules[$k->kolom][] = Rule::in($enumValues);
}
} else {
$rules[$k->kolom] = ['nullable'];
if ($k->tipe == 'varchar' || $k->tipe == 'text') {
$rules[$k->kolom][] = 'string';
}
if ($k->tipe == 'varchar') {
$rules[$k->kolom][] = 'max:255';
}
if ($k->tipe == 'integer') {
$rules[$k->kolom][] = 'integer';
}
if ($k->tipe == 'boolean') {
$rules[$k->kolom][] = 'boolean';
}
if ($k->tipe == 'date' || $k->tipe == 'datetime') {
$rules[$k->kolom][] = 'date';
}
if ($k->tipe == 'foreign_key') {
$rules[$k->kolom][] = 'exists:' . $k->relasi_tabel . ',' . $k->relasi_kolom_id;
}
if ($k->tipe == 'enum') {
$enumValues = collect($k->enum_opsi)->pluck('value')->toArray();
$rules[$k->kolom][] = Rule::in($enumValues);
}
}
}
return $rules;
}
public function store(Request $request, string $tabelId): JsonResponse public function store(Request $request, string $tabelId): JsonResponse
{ {
if (!Gate::any(['super_admin', 'admin', 'fasilitator'])) { if (!Gate::any(['super_admin', 'admin', 'fasilitator'])) {
@@ -183,15 +242,7 @@ class ValueBasisDataController extends Controller
} }
} }
$validationRules = []; $validated = $request->validate($this->prepareValidationRules($kolom));
foreach ($kolom as $k) {
if ($k->validasi && is_array($k->validasi)) {
$validationRules[$k->kolom] = $k->validasi;
} else {
$validationRules[$k->kolom] = ['nullable'];
}
}
$validated = $request->validate($validationRules);
DB::transaction(function () use ($program, $tabelId, $validated, $kolom) { DB::transaction(function () use ($program, $tabelId, $validated, $kolom) {
$maxId = ValueBasisData::where('tabel_id', $tabelId) $maxId = ValueBasisData::where('tabel_id', $tabelId)
@@ -220,17 +271,11 @@ class ValueBasisDataController extends Controller
return response()->json(['message' => 'Data berhasil disimpan.']); return response()->json(['message' => 'Data berhasil disimpan.']);
} }
/**
* Display the specified resource.
*/
public function show(string $id) public function show(string $id)
{ {
// //
} }
/**
* Update the specified resource in storage.
*/
public function update(Request $request, string $tabelId, string $id): JsonResponse public function update(Request $request, string $tabelId, string $id): JsonResponse
{ {
if (!Gate::any(['super_admin', 'admin', 'fasilitator'])) { if (!Gate::any(['super_admin', 'admin', 'fasilitator'])) {
@@ -271,15 +316,7 @@ class ValueBasisDataController extends Controller
abort(404, 'Data tidak ditemukan.'); abort(404, 'Data tidak ditemukan.');
} }
$validationRules = []; $validated = $request->validate($this->prepareValidationRules($kolom));
foreach ($kolom as $k) {
if ($k->validasi && is_array($k->validasi)) {
$validationRules[$k->kolom] = $k->validasi;
} else {
$validationRules[$k->kolom] = ['nullable'];
}
}
$validated = $request->validate($validationRules);
DB::transaction(function () use ($program, $tabelId, $validated, $kolom, $id, $values) { DB::transaction(function () use ($program, $tabelId, $validated, $kolom, $id, $values) {
foreach ($validated as $kol => $val) { foreach ($validated as $kol => $val) {
@@ -315,9 +352,6 @@ class ValueBasisDataController extends Controller
return response()->json(['message' => 'Data berhasil diperbarui.']); return response()->json(['message' => 'Data berhasil diperbarui.']);
} }
/**
* Remove the specified resource from storage.
*/
public function destroy(Request $request, string $tabelId, string $id): JsonResponse public function destroy(Request $request, string $tabelId, string $id): JsonResponse
{ {
if (!Gate::any(['super_admin', 'admin', 'fasilitator'])) { if (!Gate::any(['super_admin', 'admin', 'fasilitator'])) {
@@ -24,12 +24,13 @@ use App\Models\Core\Program;
class ValueBasisDataController extends Controller class ValueBasisDataController extends Controller
{ {
private $tableModelClassMap = [ private $tableExceptionModelClassMap = [
'master_provinsi' => \App\Models\Wilayah\Provinsi::class, 'master_provinsi' => \App\Models\Wilayah\Provinsi::class,
'master_kabupaten_kota' => \App\Models\Wilayah\KabupatenKota::class, 'master_kabupaten_kota' => \App\Models\Wilayah\KabupatenKota::class,
'master_kecamatan' => \App\Models\Wilayah\Kecamatan::class, 'master_kecamatan' => \App\Models\Wilayah\Kecamatan::class,
'master_desa_kelurahan' => \App\Models\Wilayah\DesaKelurahan::class, 'master_desa_kelurahan' => \App\Models\Wilayah\DesaKelurahan::class,
]; ];
private $tableModelClassMap = [];
public function index(Request $request, string $tabelId): View public function index(Request $request, string $tabelId): View
{ {
@@ -209,6 +210,22 @@ class ValueBasisDataController extends Controller
if ($k->tipe == 'foreign_key') { if ($k->tipe == 'foreign_key') {
$relasi['kolom_id'] = $k->id; $relasi['kolom_id'] = $k->id;
try { try {
$exceptionModelClass = Arr::get($this->tableExceptionModelClassMap, $k->relasi_tabel);
if ($exceptionModelClass) {
$relasi['options'] = [];
if ($errors = session('errors')) {
$oldValue = old($k->kolom);
if ($oldValue) {
$option = $exceptionModelClass::where($k->relasi_kolom_id, $oldValue)->first();
if ($option) {
$relasi['options'][] = (object) [
'value' => $option->{$k->relasi_kolom_id},
'label' => $option->{$k->relasi_kolom_label},
];
}
}
}
} else {
$modelClass = Arr::get($this->tableModelClassMap, $k->relasi_tabel); $modelClass = Arr::get($this->tableModelClassMap, $k->relasi_tabel);
if ($modelClass) { if ($modelClass) {
$options_kolom = $modelClass::select($k->relasi_kolom_label . ' as label', $k->relasi_kolom_id . ' as value')->limit(10000); $options_kolom = $modelClass::select($k->relasi_kolom_label . ' as label', $k->relasi_kolom_id . ' as value')->limit(10000);
@@ -217,6 +234,7 @@ class ValueBasisDataController extends Controller
} }
$relasi['options'] = $options_kolom->get(); $relasi['options'] = $options_kolom->get();
$relasi['sql'] = $options_kolom->toSql(); $relasi['sql'] = $options_kolom->toSql();
}
} catch (\Throwable $th) { } catch (\Throwable $th) {
$relasi['options'] = []; $relasi['options'] = [];
} }
@@ -242,8 +260,8 @@ class ValueBasisDataController extends Controller
if (!in_array('string', $k->validasi) && ($k->tipe == 'varchar' || $k->tipe == 'text')) { if (!in_array('string', $k->validasi) && ($k->tipe == 'varchar' || $k->tipe == 'text')) {
$rules[$k->kolom][] = 'string'; $rules[$k->kolom][] = 'string';
} }
if (!in_array('size', $k->validasi) && ($k->tipe == 'varchar')) { if (!in_array('max', $k->validasi) && ($k->tipe == 'varchar')) {
$rules[$k->kolom][] = 'size:255'; $rules[$k->kolom][] = 'max:255';
} }
if (!in_array('integer', $k->validasi) && $k->tipe == 'integer') { if (!in_array('integer', $k->validasi) && $k->tipe == 'integer') {
$rules[$k->kolom][] = 'integer'; $rules[$k->kolom][] = 'integer';
@@ -269,7 +287,7 @@ class ValueBasisDataController extends Controller
$rules[$k->kolom][] = 'string'; $rules[$k->kolom][] = 'string';
} }
if ($k->tipe == 'varchar') { if ($k->tipe == 'varchar') {
$rules[$k->kolom][] = 'size:255'; $rules[$k->kolom][] = 'max:255';
} }
if ($k->tipe == 'integer') { if ($k->tipe == 'integer') {
$rules[$k->kolom][] = 'integer'; $rules[$k->kolom][] = 'integer';
@@ -464,7 +482,26 @@ class ValueBasisDataController extends Controller
if ($k->tipe == 'foreign_key') { if ($k->tipe == 'foreign_key') {
$relasi['kolom_id'] = $k->id; $relasi['kolom_id'] = $k->id;
try { try {
$modelClass = Arr::get($this->tableModelClassMap, 'master_desa_kelurahan'); $exceptionModelClass = Arr::get($this->tableExceptionModelClassMap, $k->relasi_tabel);
if ($exceptionModelClass) {
$relasi['options'] = [];
if ($errors = session('errors')) {
$oldValue = old($k->kolom);
if ($oldValue) {
$option = $exceptionModelClass::where($k->relasi_kolom_id, $oldValue)->first();
if ($option) {
$relasi['options'][] = (object) [
'value' => $option->{$k->relasi_kolom_id},
'label' => $option->{$k->relasi_kolom_label},
];
}
}
} else {
$options_kolom = $exceptionModelClass::select($k->relasi_kolom_label . ' as label', $k->relasi_kolom_id . ' as value')->limit(10000);
$relasi['options'] = $options_kolom->get();
}
} else {
$modelClass = Arr::get($this->tableModelClassMap, $k->relasi_tabel);
if ($modelClass) { if ($modelClass) {
$options_kolom = $modelClass::select($k->relasi_kolom_label . ' as label', $k->relasi_kolom_id . ' as value')->limit(10000); $options_kolom = $modelClass::select($k->relasi_kolom_label . ' as label', $k->relasi_kolom_id . ' as value')->limit(10000);
} else { } else {
@@ -472,6 +509,7 @@ class ValueBasisDataController extends Controller
} }
$relasi['options'] = $options_kolom->get(); $relasi['options'] = $options_kolom->get();
$relasi['sql'] = $options_kolom->toSql(); $relasi['sql'] = $options_kolom->toSql();
}
} catch (\Throwable $th) { } catch (\Throwable $th) {
$relasi['options'] = []; $relasi['options'] = [];
} }
@@ -7,6 +7,8 @@ use Illuminate\Http\Request;
use App\Models\Wilayah\DesaKelurahan; use App\Models\Wilayah\DesaKelurahan;
use App\Models\Wilayah\Provinsi; use App\Models\Wilayah\Provinsi;
use Illuminate\Support\Facades\Validator; use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
use Illuminate\Support\Str;
class DesaKelurahanController extends Controller class DesaKelurahanController extends Controller
{ {
@@ -14,15 +16,15 @@ class DesaKelurahanController extends Controller
{ {
$title = 'Master Desa/Kelurahan'; $title = 'Master Desa/Kelurahan';
$perPage = $request->query('per_page', 10); $perPage = $request->query('per_page', 10);
$search = $request->query('search', ''); $search = Str::lower($request->query('search', ''));
$provinsi = Provinsi::orderBy('kode', 'asc')->get(); $provinsi = Provinsi::orderBy('kode', 'asc')->get();
$desakelurahan = DesaKelurahan::with('kecamatan') $desakelurahan = DesaKelurahan::with('kecamatan')
->where('nama', 'like', "%$search%") ->whereRaw('lower(nama) like ?', ["%$search%"])
->orWhere('kode', 'like', "%$search%") ->orWhereRaw('lower(kode) like ?', ["%$search%"])
->orWhereHas('kecamatan', function($query) use ($search) { ->orWhereHas('kecamatan', function($query) use ($search) {
$query->where('nama', 'like', "%$search%"); $query->whereRaw('lower(nama) like ?', ["%$search%"]);
}) })
->orderBy('kode', 'asc') ->orderBy('kode', 'asc')
->paginate($perPage); ->paginate($perPage);
@@ -30,6 +32,25 @@ class DesaKelurahanController extends Controller
return view('master.desakelurahan.index', compact('title', 'desakelurahan', 'provinsi')); return view('master.desakelurahan.index', compact('title', 'desakelurahan', 'provinsi'));
} }
public function list(Request $request)
{
$perPage = $request->query('per_page', 50);
$search = Str::lower($request->query('search', ''));
$desa = DesaKelurahan::where(function($query) use ($search) {
$query->whereRaw('lower(nama) like ?', ["%$search%"])
->orWhereRaw('lower(kode) like ?', ["%$search%"])
->orWhereHas('kecamatan', function($q) use ($search) {
$q->whereRaw('lower(nama) like ?', ["%$search%"]);
});
})
->where('kecamatan_id', $request->query('kecamatan_id'))
->orderBy('kode', 'asc')
->paginate($perPage);
return response()->json($desa);
}
public function getByKecamatan($kecamatan_id) public function getByKecamatan($kecamatan_id)
{ {
$desa = DesaKelurahan::where('kecamatan_id', $kecamatan_id) $desa = DesaKelurahan::where('kecamatan_id', $kecamatan_id)
@@ -8,6 +8,7 @@ use App\Models\Wilayah\Provinsi;
use App\Models\Wilayah\KabupatenKota; use App\Models\Wilayah\KabupatenKota;
use Illuminate\Support\Facades\Validator; use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule; use Illuminate\Validation\Rule;
use Illuminate\Support\Str;
class KabupatenKotaController extends Controller class KabupatenKotaController extends Controller
{ {
@@ -15,15 +16,15 @@ class KabupatenKotaController extends Controller
{ {
$title = 'Master Kabupaten/Kota'; $title = 'Master Kabupaten/Kota';
$perPage = $request->query('per_page', 10); $perPage = $request->query('per_page', 10);
$search = $request->query('search', ''); $search = Str::lower($request->query('search', ''));
$provinsi = Provinsi::all(); $provinsi = Provinsi::all();
$kabupatenkota = KabupatenKota::with('provinsi') $kabupatenkota = KabupatenKota::with('provinsi')
->where('nama', 'like', "%$search%") ->whereRaw('lower(nama) like ?', ["%$search%"])
->orWhere('kode', 'like', "%$search%") ->orWhereRaw('lower(kode) like ?', ["%$search%"])
->orWhereHas('provinsi', function($query) use ($search) { ->orWhereHas('provinsi', function($query) use ($search) {
$query->where('nama', 'like', "%$search%"); $query->whereRaw('lower(nama) like ?', ["%$search%"]);
}) })
->orderBy('kode', 'asc') ->orderBy('kode', 'asc')
->paginate($perPage); ->paginate($perPage);
@@ -31,6 +32,25 @@ class KabupatenKotaController extends Controller
return view('master.kabupatenkota.index', compact('title', 'kabupatenkota', 'provinsi')); return view('master.kabupatenkota.index', compact('title', 'kabupatenkota', 'provinsi'));
} }
public function list(Request $request)
{
$perPage = $request->query('per_page', 50);
$search = Str::lower($request->query('search', ''));
$kabupaten = KabupatenKota::where(function($query) use ($search) {
$query->whereRaw('lower(nama) like ?', ["%$search%"])
->orWhereRaw('lower(kode) like ?', ["%$search%"])
->orWhereHas('provinsi', function($q) use ($search) {
$q->whereRaw('lower(nama) like ?', ["%$search%"]);
});
})
->where('provinsi_id', $request->query('provinsi_id'))
->orderBy('kode', 'asc')
->paginate($perPage);
return response()->json($kabupaten);
}
public function getByProvinsi($provinsi_id) public function getByProvinsi($provinsi_id)
{ {
$kabupaten = KabupatenKota::where('provinsi_id', $provinsi_id) $kabupaten = KabupatenKota::where('provinsi_id', $provinsi_id)
@@ -7,6 +7,8 @@ use Illuminate\Http\Request;
use App\Models\Wilayah\Kecamatan; use App\Models\Wilayah\Kecamatan;
use App\Models\Wilayah\Provinsi; use App\Models\Wilayah\Provinsi;
use Illuminate\Support\Facades\Validator; use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
use Illuminate\Support\Str;
class KecamatanController extends Controller class KecamatanController extends Controller
{ {
@@ -14,15 +16,15 @@ class KecamatanController extends Controller
{ {
$title = 'Master Kecamatan'; $title = 'Master Kecamatan';
$perPage = $request->query('per_page', 10); $perPage = $request->query('per_page', 10);
$search = $request->query('search', ''); $search = Str::lower($request->query('search', ''));
$provinsi = Provinsi::all(); $provinsi = Provinsi::all();
$kecamatan = Kecamatan::with('kabupatenKota') $kecamatan = Kecamatan::with('kabupatenKota')
->where('nama', 'like', "%$search%") ->whereRaw('lower(nama) like ?', ["%$search%"])
->orWhere('kode', 'like', "%$search%") ->orWhereRaw('lower(kode) like ?', ["%$search%"])
->orWhereHas('kabupatenKota', function($query) use ($search) { ->orWhereHas('kabupatenKota', function($query) use ($search) {
$query->where('nama', 'like', "%$search%"); $query->whereRaw('lower(nama) like ?', ["%$search%"]);
}) })
->orderBy('kode', 'asc') ->orderBy('kode', 'asc')
->paginate($perPage); ->paginate($perPage);
@@ -30,6 +32,25 @@ class KecamatanController extends Controller
return view('master.kecamatan.index', compact('title', 'kecamatan', 'provinsi')); return view('master.kecamatan.index', compact('title', 'kecamatan', 'provinsi'));
} }
public function list(Request $request)
{
$perPage = $request->query('per_page', 50);
$search = Str::lower($request->query('search', ''));
$kecamatan = Kecamatan::where(function($query) use ($search) {
$query->whereRaw('lower(nama) like ?', ["%$search%"])
->orWhereRaw('lower(kode) like ?', ["%$search%"])
->orWhereHas('kabupatenKota', function($q) use ($search) {
$q->whereRaw('lower(nama) like ?', ["%$search%"]);
});
})
->where('kabupaten_kota_id', $request->query('kabupaten_kota_id'))
->orderBy('kode', 'asc')
->paginate($perPage);
return response()->json($kecamatan);
}
public function getByKabupaten($kabupaten_id) public function getByKabupaten($kabupaten_id)
{ {
$kecamatan = Kecamatan::where('kabupaten_kota_id', $kabupaten_id) $kecamatan = Kecamatan::where('kabupaten_kota_id', $kabupaten_id)
@@ -7,6 +7,7 @@ use Illuminate\Http\Request;
use App\Models\Wilayah\Provinsi; use App\Models\Wilayah\Provinsi;
use Illuminate\Support\Facades\Validator; use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule; use Illuminate\Validation\Rule;
use Illuminate\Support\Str;
class ProvinsiController extends Controller class ProvinsiController extends Controller
{ {
@@ -15,23 +16,33 @@ class ProvinsiController extends Controller
$title = 'Master Provinsi'; $title = 'Master Provinsi';
$perPage = $request->query('per_page', 10); $perPage = $request->query('per_page', 10);
$search = $request->query('search', ''); $search = Str::lower($request->query('search', ''));
$provinsi = Provinsi::withCount('kabupatenKota') $provinsi = Provinsi::withCount('kabupatenKota')
->where(function($query) use ($search) { ->where(function($query) use ($search) {
$query->where('nama', 'like', "%$search%") $query->whereRaw('lower(nama) like ?', ["%$search%"])
->orWhere('kode', 'like', "%$search%") ->orWhereRaw('lower(kode) like ?', ["%$search%"])
->orWhere('iso', 'like', "%$search%"); ->orWhereRaw('lower(iso) like ?', ["%$search%"]);
}) })
->paginate($perPage); ->paginate($perPage);
return view('master.provinsi.index', compact('title', 'provinsi')); return view('master.provinsi.index', compact('title', 'provinsi'));
} }
public function getProvinsi() public function list(Request $request)
{ {
$provinsi = Provinsi::select(['id', 'kode', 'nama', 'iso'])->get(); $perPage = $request->query('per_page', 50);
return response()->json(['data' => $provinsi]); $search = Str::lower($request->query('search', ''));
$provinsi = Provinsi::where(function($query) use ($search) {
$query->whereRaw('lower(nama) like ?', ["%$search%"])
->orWhereRaw('lower(kode) like ?', ["%$search%"])
->orWhereRaw('lower(iso) like ?', ["%$search%"]);
})
->orderBy('kode', 'asc')
->paginate($perPage);
return response()->json($provinsi);
} }
public function store(Request $request) public function store(Request $request)
+9
View File
@@ -242,6 +242,7 @@ class FormBasisData extends Model
} else { } else {
$html .= '<select class="form-select tipe-foreign_key kolom_error" id="value-data-kolom_name" name="kolom_name">'; $html .= '<select class="form-select tipe-foreign_key kolom_error" id="value-data-kolom_name" name="kolom_name">';
if ($optionsFK && $optionsFK->where('kolom_id', $k->id)->first() != null) { if ($optionsFK && $optionsFK->where('kolom_id', $k->id)->first() != null) {
// dd($optionsFK->where('kolom_id', $k->id)->first());
foreach ($optionsFK->where('kolom_id', $k->id)->first()['options'] as $option) { foreach ($optionsFK->where('kolom_id', $k->id)->first()['options'] as $option) {
$html .= '<option value="'.$option->value.'" '.(old($k->kolom) == $option->value ? 'selected' : '').'>'.$option->label.'</option>'; $html .= '<option value="'.$option->value.'" '.(old($k->kolom) == $option->value ? 'selected' : '').'>'.$option->label.'</option>';
} }
@@ -376,6 +377,14 @@ class FormBasisData extends Model
->replace('kolom_value', e($value ? $value['value_'.$k->tipe] : null)); ->replace('kolom_value', e($value ? $value['value_'.$k->tipe] : null));
} }
} }
if ($errors && $errors->has($k->kolom)) {
if ($framework == 'tailwind') {
$html .= '<p className="mt-2 text-sm text-red-600">'.$errors->first($k->kolom).'</p>';
} else {
$html .= '<div class="invalid-feedback">'.$errors->first($k->kolom).'</div>';
}
}
} }
return $html; return $html;
@@ -160,7 +160,7 @@
<div class="d-flex justify-content-between align-items-center"> <div class="d-flex justify-content-between align-items-center">
<span>{{ $grandchildForm->tipe->label() }} <span>{{ $grandchildForm->tipe->label() }}
@if($grandchildForm->tipe->value == 'form-value') @if($grandchildForm->tipe->value == 'form-value')
: {{ $grandchildForm->kolom->label }} : {{ $grandchildForm->kolom == null ? '-undefined-' : $grandchildForm->kolom->label }}
@endif @endif
</span> </span>
<div class="align-text-bottom"> <div class="align-text-bottom">
@@ -52,6 +52,127 @@
$(element).removeClass('is-invalid'); $(element).removeClass('is-invalid');
} }
}); });
$('[name="provinsi"]').select2({
ajax: {
url: '{{ route("provinsi.list") }}',
dataType: 'json',
delay: 250,
data: function (params) {
return {
search: params.term, // search term
page: params.page || 1
};
},
processResults: function (data, params) {
params.page = params.page || 1;
return {
results: data.data.map(function (provinsi) {
return { id: provinsi.id, text: provinsi.nama };
}),
pagination: {
more: data.current_page < data.last_page
}
};
},
cache: true
},
placeholder: 'Pilih provinsi',
minimumInputLength: 1,
}).change(function() {
$('[name="kabupaten_kota"]').empty().trigger('change');
$('[name="kecamatan"]').empty().trigger('change');
$('[name="desa_kelurahan"]').empty().trigger('change');
});
$('[name="kabupaten_kota"]').select2({
ajax: {
url: '{{ route("kabupatenkota.list") }}',
dataType: 'json',
delay: 250,
data: function (params) {
return {
search: params.term, // search term
page: params.page || 1,
provinsi_id: $('[name="provinsi"]').val() // filter by selected provinsi
};
},
processResults: function (data, params) {
params.page = params.page || 1;
return {
results: data.data.map(function (kabupatenKota) {
return { id: kabupatenKota.id, text: kabupatenKota.nama };
}),
pagination: {
more: data.current_page < data.last_page
}
};
},
cache: true
},
placeholder: 'Pilih kabupaten/kota',
minimumInputLength: 1,
}).change(function() {
$('[name="kecamatan"]').empty().trigger('change');
$('[name="desa_kelurahan"]').empty().trigger('change');
});
$('[name="kecamatan"]').select2({
ajax: {
url: '{{ route("kecamatan.list") }}',
dataType: 'json',
delay: 250,
data: function (params) {
return {
search: params.term, // search term
page: params.page || 1,
kabupaten_kota_id: $('[name="kabupaten_kota"]').val() // filter by selected kabupaten/kota
};
},
processResults: function (data, params) {
params.page = params.page || 1;
return {
results: data.data.map(function (kecamatan) {
return { id: kecamatan.id, text: kecamatan.nama };
}),
pagination: {
more: data.current_page < data.last_page
}
};
},
cache: true
},
placeholder: 'Pilih kecamatan',
minimumInputLength: 1,
}).change(function() {
$('[name="desa_kelurahan"]').empty().trigger('change');
});
$('[name="desa_kelurahan"]').select2({
ajax: {
url: '{{ route("desakelurahan.list") }}',
dataType: 'json',
delay: 250,
data: function (params) {
return {
search: params.term, // search term
page: params.page || 1,
kecamatan_id: $('[name="kecamatan"]').val() // filter by selected kecamatan
};
},
processResults: function (data, params) {
params.page = params.page || 1;
return {
results: data.data.map(function (desaKelurahan) {
return { id: desaKelurahan.id, text: desaKelurahan.nama };
}),
pagination: {
more: data.current_page < data.last_page
}
};
},
cache: true
},
placeholder: 'Pilih desa/kelurahan',
minimumInputLength: 1,
});
}); });
</script> </script>
@endpush @endpush
@@ -28,7 +28,7 @@
<script> <script>
'use strict'; 'use strict';
$(document).ready(function () { $(document).ready(function () {
$('#add-data-program,.tipe-boolean, .tipe-fk').select2(); $('#add-data-program,.tipe-boolean, .tipe-fk, .tipe-enum').select2();
$('#addNewDataForm').validate({ $('#addNewDataForm').validate({
rules: { rules: {
@@ -53,6 +53,127 @@
$(element).removeClass('is-invalid'); $(element).removeClass('is-invalid');
} }
}); });
$('[name="provinsi"]').select2({
ajax: {
url: '{{ route("provinsi.list") }}',
dataType: 'json',
delay: 250,
data: function (params) {
return {
search: params.term, // search term
page: params.page || 1
};
},
processResults: function (data, params) {
params.page = params.page || 1;
return {
results: data.data.map(function (provinsi) {
return { id: provinsi.id, text: provinsi.nama };
}),
pagination: {
more: data.current_page < data.last_page
}
};
},
cache: true
},
placeholder: 'Pilih provinsi',
minimumInputLength: 1,
}).change(function() {
$('[name="kabupaten_kota"]').empty().trigger('change');
$('[name="kecamatan"]').empty().trigger('change');
$('[name="desa_kelurahan"]').empty().trigger('change');
});
$('[name="kabupaten_kota"]').select2({
ajax: {
url: '{{ route("kabupatenkota.list") }}',
dataType: 'json',
delay: 250,
data: function (params) {
return {
search: params.term, // search term
page: params.page || 1,
provinsi_id: $('[name="provinsi"]').val() // filter by selected provinsi
};
},
processResults: function (data, params) {
params.page = params.page || 1;
return {
results: data.data.map(function (kabupatenKota) {
return { id: kabupatenKota.id, text: kabupatenKota.nama };
}),
pagination: {
more: data.current_page < data.last_page
}
};
},
cache: true
},
placeholder: 'Pilih kabupaten/kota',
minimumInputLength: 1,
}).change(function() {
$('[name="kecamatan"]').empty().trigger('change');
$('[name="desa_kelurahan"]').empty().trigger('change');
});
$('[name="kecamatan"]').select2({
ajax: {
url: '{{ route("kecamatan.list") }}',
dataType: 'json',
delay: 250,
data: function (params) {
return {
search: params.term, // search term
page: params.page || 1,
kabupaten_kota_id: $('[name="kabupaten_kota"]').val() // filter by selected kabupaten/kota
};
},
processResults: function (data, params) {
params.page = params.page || 1;
return {
results: data.data.map(function (kecamatan) {
return { id: kecamatan.id, text: kecamatan.nama };
}),
pagination: {
more: data.current_page < data.last_page
}
};
},
cache: true
},
placeholder: 'Pilih kecamatan',
minimumInputLength: 1,
}).change(function() {
$('[name="desa_kelurahan"]').empty().trigger('change');
});
$('[name="desa_kelurahan"]').select2({
ajax: {
url: '{{ route("desakelurahan.list") }}',
dataType: 'json',
delay: 250,
data: function (params) {
return {
search: params.term, // search term
page: params.page || 1,
kecamatan_id: $('[name="kecamatan"]').val() // filter by selected kecamatan
};
},
processResults: function (data, params) {
params.page = params.page || 1;
return {
results: data.data.map(function (desaKelurahan) {
return { id: desaKelurahan.id, text: desaKelurahan.nama };
}),
pagination: {
more: data.current_page < data.last_page
}
};
},
cache: true
},
placeholder: 'Pilih desa/kelurahan',
minimumInputLength: 1,
});
}); });
</script> </script>
@endpush @endpush
+4
View File
@@ -33,6 +33,7 @@ Route::middleware('auth')
Route::patch('/users/{user}/verify', [App\Http\Controllers\Web\Konfigurasi\UserController::class, 'verify'])->name('users.verify'); Route::patch('/users/{user}/verify', [App\Http\Controllers\Web\Konfigurasi\UserController::class, 'verify'])->name('users.verify');
// Provinsi // Provinsi
Route::get('/provinsi/list', [App\Http\Controllers\Web\Master\ProvinsiController::class, 'list'])->name('provinsi.list');
Route::get('/provinsi', [App\Http\Controllers\Web\Master\ProvinsiController::class, 'index'])->name('provinsi.index'); Route::get('/provinsi', [App\Http\Controllers\Web\Master\ProvinsiController::class, 'index'])->name('provinsi.index');
Route::post('/provinsi', [App\Http\Controllers\Web\Master\ProvinsiController::class, 'store'])->name('provinsi.store'); Route::post('/provinsi', [App\Http\Controllers\Web\Master\ProvinsiController::class, 'store'])->name('provinsi.store');
Route::get('/provinsi/{id}', [App\Http\Controllers\Web\Master\ProvinsiController::class, 'view'])->name('provinsi.view'); Route::get('/provinsi/{id}', [App\Http\Controllers\Web\Master\ProvinsiController::class, 'view'])->name('provinsi.view');
@@ -40,6 +41,7 @@ Route::middleware('auth')
Route::delete('/provinsi/{id}', [App\Http\Controllers\Web\Master\ProvinsiController::class, 'destroy'])->name('provinsi.destroy'); Route::delete('/provinsi/{id}', [App\Http\Controllers\Web\Master\ProvinsiController::class, 'destroy'])->name('provinsi.destroy');
// Kabupaten // Kabupaten
Route::get('/kabupatenkota/list', [App\Http\Controllers\Web\Master\KabupatenKotaController::class, 'list'])->name('kabupatenkota.list');
Route::get('/kabupatenkota', [App\Http\Controllers\Web\Master\KabupatenKotaController::class, 'index'])->name('kabupatenkota.index'); Route::get('/kabupatenkota', [App\Http\Controllers\Web\Master\KabupatenKotaController::class, 'index'])->name('kabupatenkota.index');
Route::get('/kabupatenkotabyprovinsi/{provinsi_id}', [App\Http\Controllers\Web\Master\KabupatenKotaController::class, 'getByProvinsi'])->name('kabupatenkota.byprovinsi'); Route::get('/kabupatenkotabyprovinsi/{provinsi_id}', [App\Http\Controllers\Web\Master\KabupatenKotaController::class, 'getByProvinsi'])->name('kabupatenkota.byprovinsi');
Route::post('/kabupatenkota', [App\Http\Controllers\Web\Master\KabupatenKotaController::class, 'store'])->name('kabupatenkota.store'); Route::post('/kabupatenkota', [App\Http\Controllers\Web\Master\KabupatenKotaController::class, 'store'])->name('kabupatenkota.store');
@@ -48,6 +50,7 @@ Route::middleware('auth')
Route::delete('/kabupatenkota/{id}', [App\Http\Controllers\Web\Master\KabupatenKotaController::class, 'destroy'])->name('kabupatenkota.destroy'); Route::delete('/kabupatenkota/{id}', [App\Http\Controllers\Web\Master\KabupatenKotaController::class, 'destroy'])->name('kabupatenkota.destroy');
// Kecamatan // Kecamatan
Route::get('/kecamatan/list', [App\Http\Controllers\Web\Master\KecamatanController::class, 'list'])->name('kecamatan.list');
Route::get('/kecamatan', [App\Http\Controllers\Web\Master\KecamatanController::class, 'index'])->name('kecamatan.index'); Route::get('/kecamatan', [App\Http\Controllers\Web\Master\KecamatanController::class, 'index'])->name('kecamatan.index');
Route::get('/kecamatanbykabupatenkota/{kabupaten_id}', [App\Http\Controllers\Web\Master\KecamatanController::class, 'getByKabupaten'])->name('kecamatan.bykabupatenkota'); Route::get('/kecamatanbykabupatenkota/{kabupaten_id}', [App\Http\Controllers\Web\Master\KecamatanController::class, 'getByKabupaten'])->name('kecamatan.bykabupatenkota');
Route::post('/kecamatan', [App\Http\Controllers\Web\Master\KecamatanController::class, 'store'])->name('kecamatan.store'); Route::post('/kecamatan', [App\Http\Controllers\Web\Master\KecamatanController::class, 'store'])->name('kecamatan.store');
@@ -56,6 +59,7 @@ Route::middleware('auth')
Route::delete('/kecamatan/{id}', [App\Http\Controllers\Web\Master\KecamatanController::class, 'destroy'])->name('kecamatan.destroy'); Route::delete('/kecamatan/{id}', [App\Http\Controllers\Web\Master\KecamatanController::class, 'destroy'])->name('kecamatan.destroy');
// Kelurahan // Kelurahan
Route::get('/desakelurahan/list', [App\Http\Controllers\Web\Master\DesaKelurahanController::class, 'list'])->name('desakelurahan.list');
Route::get('/desakelurahan', [App\Http\Controllers\Web\Master\DesaKelurahanController::class, 'index'])->name('desakelurahan.index'); Route::get('/desakelurahan', [App\Http\Controllers\Web\Master\DesaKelurahanController::class, 'index'])->name('desakelurahan.index');
Route::get('/desakelurahanbykecamatan/{kecamatan_id}', [App\Http\Controllers\Web\Master\DesaKelurahanController::class, 'getByKecamatan'])->name('desakelurahan.bykecamatan'); Route::get('/desakelurahanbykecamatan/{kecamatan_id}', [App\Http\Controllers\Web\Master\DesaKelurahanController::class, 'getByKecamatan'])->name('desakelurahan.bykecamatan');
Route::post('/desakelurahan', [App\Http\Controllers\Web\Master\DesaKelurahanController::class, 'store'])->name('desakelurahan.store'); Route::post('/desakelurahan', [App\Http\Controllers\Web\Master\DesaKelurahanController::class, 'store'])->name('desakelurahan.store');