141 lines
4.3 KiB
PHP
141 lines
4.3 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Api\Ekosistem;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Http\JsonResponse;
|
|
use Illuminate\Support\Facades\Gate;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
use App\Models\Ekosistem\TabelBasisData;
|
|
use App\Models\Ekosistem\KolomBasisData;
|
|
use App\Models\Core\Program;
|
|
|
|
|
|
class FormBasisDataController extends Controller
|
|
{
|
|
/**
|
|
* Display a listing of the resource.
|
|
*/
|
|
public function index(Request $request, string $tabelId): JsonResponse
|
|
{
|
|
if (!Gate::any(['super_admin', 'admin', 'fasilitator'])) {
|
|
abort(403);
|
|
}
|
|
|
|
$tabel = TabelBasisData::with('kolom')
|
|
->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)
|
|
{
|
|
//
|
|
}
|
|
}
|