diff --git a/app/Http/Controllers/Web/Ekosistem/KolomBasisDataController.php b/app/Http/Controllers/Web/Ekosistem/KolomBasisDataController.php index d29fb2c..fb58d87 100644 --- a/app/Http/Controllers/Web/Ekosistem/KolomBasisDataController.php +++ b/app/Http/Controllers/Web/Ekosistem/KolomBasisDataController.php @@ -145,6 +145,13 @@ class KolomBasisDataController extends Controller 'is_browse' => ['nullable', 'boolean'], ]); + if (!empty($validated['enum_opsi'])) { + $validated['enum_opsi'] = json_decode($validated['enum_opsi'], true); + } + if (!empty($validated['validasi'])) { + $validated['validasi'] = json_decode($validated['validasi'], true); + } + $kolom->update([...$validated, 'updated_by' => auth()->id(), ]); diff --git a/app/Http/Controllers/Web/Ekosistem/ValueBasisDataController.php b/app/Http/Controllers/Web/Ekosistem/ValueBasisDataController.php index 57b90bf..cc4b085 100644 --- a/app/Http/Controllers/Web/Ekosistem/ValueBasisDataController.php +++ b/app/Http/Controllers/Web/Ekosistem/ValueBasisDataController.php @@ -13,6 +13,8 @@ use Illuminate\Http\JsonResponse; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Str; use Illuminate\Support\Arr; +use Illuminate\Support\Facades\Hash; +use Illuminate\Validation\Rule; use App\Models\Ekosistem\TabelBasisData; use App\Models\Ekosistem\KolomBasisData; @@ -207,7 +209,7 @@ class ValueBasisDataController extends Controller if ($k->tipe == 'foreign_key') { $relasi['kolom_id'] = $k->id; try { - $modelClass = Arr::get($this->tableModelClassMap, 'master_desa_kelurahan'); + $modelClass = Arr::get($this->tableModelClassMap, $k->relasi_tabel); if ($modelClass) { $options_kolom = $modelClass::select($k->relasi_kolom_label . ' as label', $k->relasi_kolom_id . ' as value')->limit(10000); } else { @@ -226,6 +228,70 @@ class ValueBasisDataController extends Controller return view('ekosistem.value-basis-data.add', compact('tabel', 'kolom', 'program', 'list_relasi')); } + private function prepareValidationRules($kolom) + { + $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('size', $k->validasi) && ($k->tipe == 'varchar')) { + $rules[$k->kolom][] = 'size: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][] = 'size: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): RedirectResponse { if (!Gate::any(['super_admin', 'admin'])) { @@ -258,15 +324,7 @@ class ValueBasisDataController extends Controller } } - $validationRules = []; - 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); + $validated = $request->validate($this->prepareValidationRules($kolom)); DB::transaction(function () use ($program, $tabelId, $validated, $kolom) { $maxId = ValueBasisData::where('tabel_id', $tabelId) @@ -425,9 +483,6 @@ class ValueBasisDataController extends Controller return view('ekosistem.value-basis-data.edit', compact('tabel', 'kolom', 'program', 'values', 'value_id', 'list_relasi')); } - /** - * Update the specified resource in storage. - */ public function update(Request $request, string $tabelId, string $id): RedirectResponse { if (!Gate::any(['super_admin', 'admin'])) { @@ -469,15 +524,7 @@ class ValueBasisDataController extends Controller abort(404, 'Data tidak ditemukan.'); } - $validationRules = []; - 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); + $validated = $request->validate($this->prepareValidationRules($kolom)); DB::transaction(function () use ($program, $tabelId, $validated, $kolom, $id, $values) { foreach ($validated as $kol => $val) {