relasi wilayah ekosistem
This commit is contained in:
@@ -16,9 +16,7 @@ use App\Models\Core\Program;
|
||||
|
||||
class ValueBasisDataController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*/
|
||||
|
||||
public function index(Request $request, string $tabelId): JsonResponse
|
||||
{
|
||||
if (!Gate::any(['super_admin', 'admin', 'fasilitator'])) {
|
||||
@@ -149,9 +147,70 @@ class ValueBasisDataController extends Controller
|
||||
return response()->json($values);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*/
|
||||
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('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
|
||||
{
|
||||
if (!Gate::any(['super_admin', 'admin', 'fasilitator'])) {
|
||||
@@ -183,15 +242,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)
|
||||
@@ -220,17 +271,11 @@ class ValueBasisDataController extends Controller
|
||||
return response()->json(['message' => 'Data berhasil disimpan.']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*/
|
||||
public function show(string $id)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*/
|
||||
public function update(Request $request, string $tabelId, string $id): JsonResponse
|
||||
{
|
||||
if (!Gate::any(['super_admin', 'admin', 'fasilitator'])) {
|
||||
@@ -271,15 +316,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) {
|
||||
@@ -315,9 +352,6 @@ class ValueBasisDataController extends Controller
|
||||
return response()->json(['message' => 'Data berhasil diperbarui.']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*/
|
||||
public function destroy(Request $request, string $tabelId, string $id): JsonResponse
|
||||
{
|
||||
if (!Gate::any(['super_admin', 'admin', 'fasilitator'])) {
|
||||
|
||||
@@ -24,12 +24,13 @@ use App\Models\Core\Program;
|
||||
|
||||
class ValueBasisDataController extends Controller
|
||||
{
|
||||
private $tableModelClassMap = [
|
||||
private $tableExceptionModelClassMap = [
|
||||
'master_provinsi' => \App\Models\Wilayah\Provinsi::class,
|
||||
'master_kabupaten_kota' => \App\Models\Wilayah\KabupatenKota::class,
|
||||
'master_kecamatan' => \App\Models\Wilayah\Kecamatan::class,
|
||||
'master_desa_kelurahan' => \App\Models\Wilayah\DesaKelurahan::class,
|
||||
];
|
||||
private $tableModelClassMap = [];
|
||||
|
||||
public function index(Request $request, string $tabelId): View
|
||||
{
|
||||
@@ -209,14 +210,31 @@ class ValueBasisDataController extends Controller
|
||||
if ($k->tipe == 'foreign_key') {
|
||||
$relasi['kolom_id'] = $k->id;
|
||||
try {
|
||||
$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);
|
||||
$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 = DB::table($k->relasi_tabel)->selectRaw($k->relasi_kolom_label . ' as label, ' . $k->relasi_kolom_id . ' as value')->whereNull('deleted_at')->limit(10000);
|
||||
$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 {
|
||||
$options_kolom = DB::table($k->relasi_tabel)->selectRaw($k->relasi_kolom_label . ' as label, ' . $k->relasi_kolom_id . ' as value')->whereNull('deleted_at')->limit(10000);
|
||||
}
|
||||
$relasi['options'] = $options_kolom->get();
|
||||
$relasi['sql'] = $options_kolom->toSql();
|
||||
}
|
||||
$relasi['options'] = $options_kolom->get();
|
||||
$relasi['sql'] = $options_kolom->toSql();
|
||||
} catch (\Throwable $th) {
|
||||
$relasi['options'] = [];
|
||||
}
|
||||
@@ -242,8 +260,8 @@ class ValueBasisDataController extends Controller
|
||||
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('max', $k->validasi) && ($k->tipe == 'varchar')) {
|
||||
$rules[$k->kolom][] = 'max:255';
|
||||
}
|
||||
if (!in_array('integer', $k->validasi) && $k->tipe == 'integer') {
|
||||
$rules[$k->kolom][] = 'integer';
|
||||
@@ -269,7 +287,7 @@ class ValueBasisDataController extends Controller
|
||||
$rules[$k->kolom][] = 'string';
|
||||
}
|
||||
if ($k->tipe == 'varchar') {
|
||||
$rules[$k->kolom][] = 'size:255';
|
||||
$rules[$k->kolom][] = 'max:255';
|
||||
}
|
||||
if ($k->tipe == 'integer') {
|
||||
$rules[$k->kolom][] = 'integer';
|
||||
@@ -464,14 +482,34 @@ class ValueBasisDataController extends Controller
|
||||
if ($k->tipe == 'foreign_key') {
|
||||
$relasi['kolom_id'] = $k->id;
|
||||
try {
|
||||
$modelClass = Arr::get($this->tableModelClassMap, 'master_desa_kelurahan');
|
||||
if ($modelClass) {
|
||||
$options_kolom = $modelClass::select($k->relasi_kolom_label . ' as label', $k->relasi_kolom_id . ' as value')->limit(10000);
|
||||
$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 {
|
||||
$options_kolom = DB::table($k->relasi_tabel)->selectRaw($k->relasi_kolom_label . ' as label, ' . $k->relasi_kolom_id . ' as value')->whereNull('deleted_at')->limit(10000);
|
||||
$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 {
|
||||
$options_kolom = DB::table($k->relasi_tabel)->selectRaw($k->relasi_kolom_label . ' as label, ' . $k->relasi_kolom_id . ' as value')->whereNull('deleted_at')->limit(10000);
|
||||
}
|
||||
$relasi['options'] = $options_kolom->get();
|
||||
$relasi['sql'] = $options_kolom->toSql();
|
||||
}
|
||||
$relasi['options'] = $options_kolom->get();
|
||||
$relasi['sql'] = $options_kolom->toSql();
|
||||
} catch (\Throwable $th) {
|
||||
$relasi['options'] = [];
|
||||
}
|
||||
|
||||
@@ -7,6 +7,8 @@ use Illuminate\Http\Request;
|
||||
use App\Models\Wilayah\DesaKelurahan;
|
||||
use App\Models\Wilayah\Provinsi;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Validation\Rule;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class DesaKelurahanController extends Controller
|
||||
{
|
||||
@@ -14,15 +16,15 @@ class DesaKelurahanController extends Controller
|
||||
{
|
||||
$title = 'Master Desa/Kelurahan';
|
||||
$perPage = $request->query('per_page', 10);
|
||||
$search = $request->query('search', '');
|
||||
$search = Str::lower($request->query('search', ''));
|
||||
|
||||
$provinsi = Provinsi::orderBy('kode', 'asc')->get();
|
||||
|
||||
$desakelurahan = DesaKelurahan::with('kecamatan')
|
||||
->where('nama', 'like', "%$search%")
|
||||
->orWhere('kode', 'like', "%$search%")
|
||||
->whereRaw('lower(nama) like ?', ["%$search%"])
|
||||
->orWhereRaw('lower(kode) like ?', ["%$search%"])
|
||||
->orWhereHas('kecamatan', function($query) use ($search) {
|
||||
$query->where('nama', 'like', "%$search%");
|
||||
$query->whereRaw('lower(nama) like ?', ["%$search%"]);
|
||||
})
|
||||
->orderBy('kode', 'asc')
|
||||
->paginate($perPage);
|
||||
@@ -30,6 +32,25 @@ class DesaKelurahanController extends Controller
|
||||
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)
|
||||
{
|
||||
$desa = DesaKelurahan::where('kecamatan_id', $kecamatan_id)
|
||||
|
||||
@@ -8,6 +8,7 @@ use App\Models\Wilayah\Provinsi;
|
||||
use App\Models\Wilayah\KabupatenKota;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Validation\Rule;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class KabupatenKotaController extends Controller
|
||||
{
|
||||
@@ -15,15 +16,15 @@ class KabupatenKotaController extends Controller
|
||||
{
|
||||
$title = 'Master Kabupaten/Kota';
|
||||
$perPage = $request->query('per_page', 10);
|
||||
$search = $request->query('search', '');
|
||||
$search = Str::lower($request->query('search', ''));
|
||||
|
||||
$provinsi = Provinsi::all();
|
||||
|
||||
$kabupatenkota = KabupatenKota::with('provinsi')
|
||||
->where('nama', 'like', "%$search%")
|
||||
->orWhere('kode', 'like', "%$search%")
|
||||
->whereRaw('lower(nama) like ?', ["%$search%"])
|
||||
->orWhereRaw('lower(kode) like ?', ["%$search%"])
|
||||
->orWhereHas('provinsi', function($query) use ($search) {
|
||||
$query->where('nama', 'like', "%$search%");
|
||||
$query->whereRaw('lower(nama) like ?', ["%$search%"]);
|
||||
})
|
||||
->orderBy('kode', 'asc')
|
||||
->paginate($perPage);
|
||||
@@ -31,6 +32,25 @@ class KabupatenKotaController extends Controller
|
||||
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)
|
||||
{
|
||||
$kabupaten = KabupatenKota::where('provinsi_id', $provinsi_id)
|
||||
|
||||
@@ -7,6 +7,8 @@ use Illuminate\Http\Request;
|
||||
use App\Models\Wilayah\Kecamatan;
|
||||
use App\Models\Wilayah\Provinsi;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Validation\Rule;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class KecamatanController extends Controller
|
||||
{
|
||||
@@ -14,15 +16,15 @@ class KecamatanController extends Controller
|
||||
{
|
||||
$title = 'Master Kecamatan';
|
||||
$perPage = $request->query('per_page', 10);
|
||||
$search = $request->query('search', '');
|
||||
$search = Str::lower($request->query('search', ''));
|
||||
|
||||
$provinsi = Provinsi::all();
|
||||
|
||||
$kecamatan = Kecamatan::with('kabupatenKota')
|
||||
->where('nama', 'like', "%$search%")
|
||||
->orWhere('kode', 'like', "%$search%")
|
||||
->whereRaw('lower(nama) like ?', ["%$search%"])
|
||||
->orWhereRaw('lower(kode) like ?', ["%$search%"])
|
||||
->orWhereHas('kabupatenKota', function($query) use ($search) {
|
||||
$query->where('nama', 'like', "%$search%");
|
||||
$query->whereRaw('lower(nama) like ?', ["%$search%"]);
|
||||
})
|
||||
->orderBy('kode', 'asc')
|
||||
->paginate($perPage);
|
||||
@@ -30,6 +32,25 @@ class KecamatanController extends Controller
|
||||
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)
|
||||
{
|
||||
$kecamatan = Kecamatan::where('kabupaten_kota_id', $kabupaten_id)
|
||||
|
||||
@@ -7,6 +7,7 @@ use Illuminate\Http\Request;
|
||||
use App\Models\Wilayah\Provinsi;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Validation\Rule;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class ProvinsiController extends Controller
|
||||
{
|
||||
@@ -15,23 +16,33 @@ class ProvinsiController extends Controller
|
||||
$title = 'Master Provinsi';
|
||||
|
||||
$perPage = $request->query('per_page', 10);
|
||||
$search = $request->query('search', '');
|
||||
$search = Str::lower($request->query('search', ''));
|
||||
|
||||
$provinsi = Provinsi::withCount('kabupatenKota')
|
||||
->where(function($query) use ($search) {
|
||||
$query->where('nama', 'like', "%$search%")
|
||||
->orWhere('kode', 'like', "%$search%")
|
||||
->orWhere('iso', 'like', "%$search%");
|
||||
$query->whereRaw('lower(nama) like ?', ["%$search%"])
|
||||
->orWhereRaw('lower(kode) like ?', ["%$search%"])
|
||||
->orWhereRaw('lower(iso) like ?', ["%$search%"]);
|
||||
})
|
||||
->paginate($perPage);
|
||||
|
||||
return view('master.provinsi.index', compact('title', 'provinsi'));
|
||||
}
|
||||
|
||||
public function getProvinsi()
|
||||
public function list(Request $request)
|
||||
{
|
||||
$provinsi = Provinsi::select(['id', 'kode', 'nama', 'iso'])->get();
|
||||
return response()->json(['data' => $provinsi]);
|
||||
$perPage = $request->query('per_page', 50);
|
||||
$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)
|
||||
|
||||
Reference in New Issue
Block a user