whereHas('kolom', function ($query) { $query->where('is_active', true); })->find($tabelId); if (!$tabel) { abort(404, 'Data tabel tidak ditemukan.'); } $kolom = KolomBasisData::where('tabel_id', $tabelId) ->where('is_active', true)->get(); if ($kolom->isEmpty()) { abort(404, 'Data kolom tidak ditemukan untuk tabel ini.'); } $program = null; if (app()->has('SystemProgram')) { $program = app('SystemProgram'); } else { if ($request->has('program_id') && $request->query('program_id')) { $programId = $request->query('program_id'); $program = Program::find($programId); } } if (!$program) { abort(400, 'Program tidak ditemukan.'); } $method = $request->query('method', 'add'); $list_relasi = null; if ($method == 'add' || $method == 'edit') { $list_relasi = []; foreach ($kolom as $k) { if ($k->tipe == 'foreign_key') { $relasi['kolom_id'] = $k->id; try { $options_kolom = DB::table($k->relasi_tabel)->selectRaw($k->relasi_kolom_label . ' as label, ' . $k->relasi_kolom_id . ' as value')->whereNull('deleted_at'); $relasi['options'] = $options_kolom->get(); $relasi['sql'] = $options_kolom->toSql(); } catch (\Throwable $th) { $relasi['options'] = []; } $list_relasi[] = $relasi; } } $list_relasi = collect($list_relasi); } elseif ($method == 'view') { $id = $request->query('value_id'); if (!$id) { abort(400, 'value_id query parameter diperlukan untuk view method.'); } $values = ValueBasisData::query() ->where('tabel_id', $tabelId) ->where('value_id', $id) ->where('program_id', $program->id) ->get(); if ($values->isEmpty()) { abort(404, 'Data tidak ditemukan.'); } foreach ($values as $v) { $k = $kolom->where('id', $v->kolom_id)->first(); if ($k->tipe == 'foreign_key') { $v->value_relasi_label = DB::table($k->relasi_tabel)->where($k->relasi_kolom_id, $v->value_relasi)->value($k->relasi_kolom_label); } else if ($k->tipe == 'enum') { $opsi = collect($k->enum_opsi); $found = $opsi->first(function ($item) use ($v) { return (string) $item['value'] === (string) $v->value_enum; }); $v->value_enum_label = $found['label'] ?? null; } } $value_id = $id; } $errors = $request->query('errors', null); return response()->json($tabel->renderHtml($method, $errors, $list_relasi)); } /** * Store a newly created resource in storage. */ public function store(Request $request) { // } /** * Display the specified resource. */ public function show(string $id) { // } /** * Update the specified resource in storage. */ public function update(Request $request, string $id) { // } /** * Remove the specified resource from storage. */ public function destroy(string $id) { // } }