From 015ea5ea1dd5894d900fbc88b074254cacd865ba Mon Sep 17 00:00:00 2001 From: "daeng.deni@dharma.or.id" Date: Sat, 10 Jun 2023 18:44:00 +0700 Subject: [PATCH] Add function to get json data for select2 --- Http/Controllers/CityController.php | 31 ++++++++++------- Http/Controllers/DistrictController.php | 35 ++++++++++++++++---- Http/Controllers/ProvinceController.php | 33 ++++++++++-------- Resources/views/city/index.blade.php | 2 +- Resources/views/district/index.blade.php | 4 +-- Resources/views/sub-district/index.blade.php | 6 ++-- Routes/web.php | 7 ++++ 7 files changed, 79 insertions(+), 39 deletions(-) diff --git a/Http/Controllers/CityController.php b/Http/Controllers/CityController.php index 4171451..5b9d711 100644 --- a/Http/Controllers/CityController.php +++ b/Http/Controllers/CityController.php @@ -35,17 +35,12 @@ * * @return Renderable */ - public function index(CityDataTable $dataTable, Request $request) + public function index(CityDataTable $dataTable) { if (is_null($this->user) || !$this->user->can($this->module->alias . '.read')) { abort(403, 'Sorry !! You are Unauthorized to view any ' . $this->module->alias . ' !'); } - if (isset($request->province_id) && !empty($request->province_id)) { - $this->show($request); - return; - } - addVendor('chained-select'); $countries = Country::all(); @@ -111,20 +106,32 @@ abort(403, 'Sorry !! You are Unauthorized to view any ' . $this->module->alias . ' !'); } - $cities = City::where('province_id', $request->province_id)->get(); + abort(404); + } + + public function select2(Request $request) + { + if (is_null($this->user) || !$this->user->can($this->module->alias . '.read')) { + abort(403, 'Sorry !! You are Unauthorized to view any ' . $this->module->alias . ' !'); + } $data = []; - foreach ($cities as $row) { - $result = [ - $row->id => $row->name, - ]; + if ($request->has('province_id') && $request->province_id != '') { + $cities = City::where('province_id', $request->province_id)->get(); - $data[] = $result; + foreach ($cities as $row) { + $result = [ + $row->id => $row->name, + ]; + + $data[] = $result; + } } echo json_encode($data); } + /** * Show the form for editing the specified resource. * diff --git a/Http/Controllers/DistrictController.php b/Http/Controllers/DistrictController.php index 12b46f0..0515401 100644 --- a/Http/Controllers/DistrictController.php +++ b/Http/Controllers/DistrictController.php @@ -35,15 +35,12 @@ * * @return Renderable */ - public function index(DistrictDataTable $dataTable, Request $request) + public function index(DistrictDataTable $dataTable) { if (is_null($this->user) || !$this->user->can($this->module->alias . '.read')) { abort(403, 'Sorry !! You are Unauthorized to view any ' . $this->module->alias . ' !'); } - if (isset($request->city_id) && !empty($request->city_id)) { - $this->show($request); - return; - } + addVendor('chained-select'); $countries = Country::all(); return $dataTable->render($this->module->alias . '::district.index', compact('countries')); @@ -72,7 +69,7 @@ $this->model::create($validated); echo json_encode(['status' => 'success', 'message' => $this->module->name . ' district created successfully.']); } catch (Exception $e) { - echo json_encode(['status' => 'error', 'message' => $this->module->name . ' district created failed.'. $e]); + echo json_encode(['status' => 'error', 'message' => $this->module->name . ' district created failed.' . $e]); } return; } @@ -103,7 +100,7 @@ */ public function show(Request $request) { - if(is_null($this->user) || !$this->user->can($this->module->alias . '.read')) { + if (is_null($this->user) || !$this->user->can($this->module->alias . '.read')) { abort(403, 'Sorry !! You are Unauthorized to view any ' . $this->module->alias . ' !'); } @@ -121,6 +118,30 @@ echo json_encode($data); } + public function select2(Request $request) + { + if (is_null($this->user) || !$this->user->can($this->module->alias . '.read')) { + abort(403, 'Sorry !! You are Unauthorized to view any ' . $this->module->alias . ' !'); + } + + $data = []; + if ($request->has('city_id') && $request->city_id != '') { + + $districts = District::where('city_id', $request->city_id)->get(); + + foreach ($districts as $row) { + $result = [ + 'id' => $row->id, + 'text' => $row->name, + ]; + + $data[] = $result; + } + } + + echo json_encode($data); + } + /** * Show the form for editing the specified resource. * diff --git a/Http/Controllers/ProvinceController.php b/Http/Controllers/ProvinceController.php index 3c401ac..7990434 100644 --- a/Http/Controllers/ProvinceController.php +++ b/Http/Controllers/ProvinceController.php @@ -35,17 +35,12 @@ * * @return Renderable */ - public function index(ProvinceDataTable $dataTable, Request $request) + public function index(ProvinceDataTable $dataTable) { if (is_null($this->user) || !$this->user->can($this->module->alias . '.read')) { abort(403, 'Sorry !! You are Unauthorized to view any ' . $this->module->alias . ' !'); } - if (isset($request->country_id) && !empty($request->country_id)) { - $this->show($request); - return; - } - $countries = Country::all(); return $dataTable->render($this->module->alias . '::province.index', compact('countries')); @@ -64,17 +59,27 @@ abort(403, 'Sorry !! You are Unauthorized to view any ' . $this->module->alias . ' !'); } - $provinces = Province::where('country_id', $request->country_id)->get(); + abort(404); + } - $data = []; - foreach ($provinces as $row) { - $result = [ - $row->id => $row->name, - ]; - - $data[] = $result; + public function select2(Request $request) + { + if (is_null($this->user) || !$this->user->can($this->module->alias . '.read')) { + abort(403, 'Sorry !! You are Unauthorized to view any ' . $this->module->alias . ' !'); } + $data = []; + if ($request->has('country_id') && $request->country_id != '') { + $provinces = Province::where('country_id', $request->country_id)->get(); + + foreach ($provinces as $row) { + $result = [ + $row->id => $row->name, + ]; + + $data[] = $result; + } + } echo json_encode($data); } diff --git a/Resources/views/city/index.blade.php b/Resources/views/city/index.blade.php index 546e73f..7be6261 100644 --- a/Resources/views/city/index.blade.php +++ b/Resources/views/city/index.blade.php @@ -134,7 +134,7 @@ $("#{{$route[0].'_'.$route[1]}}_province_id").remoteChained({ parents: "#{{$route[0].'_'.$route[1]}}_country_id", - url: "/master/province" + url: "/master/province-select2" }); Inputmask({ diff --git a/Resources/views/district/index.blade.php b/Resources/views/district/index.blade.php index e000b1f..45aa8d2 100644 --- a/Resources/views/district/index.blade.php +++ b/Resources/views/district/index.blade.php @@ -135,12 +135,12 @@ $("#{{$route[0].'_'.$route[1]}}_province_id").remoteChained({ parents: "#{{$route[0].'_'.$route[1]}}_country_id", - url: "/master/province" + url: "/master/province-select2" }); $("#{{$route[0].'_'.$route[1]}}_city_id").remoteChained({ parents: "#{{$route[0].'_'.$route[1]}}_province_id", - url: "/master/city" + url: "/master/city-select2" }); Inputmask({ diff --git a/Resources/views/sub-district/index.blade.php b/Resources/views/sub-district/index.blade.php index 183c846..56b8ce5 100644 --- a/Resources/views/sub-district/index.blade.php +++ b/Resources/views/sub-district/index.blade.php @@ -136,17 +136,17 @@ $("#{{$route[0].'_'.$route[1]}}_province_id").remoteChained({ parents: "#{{$route[0].'_'.$route[1]}}_country_id", - url: "/master/province" + url: "/master/province-select2" }); $("#{{$route[0].'_'.$route[1]}}_city_id").remoteChained({ parents: "#{{$route[0].'_'.$route[1]}}_province_id", - url: "/master/city" + url: "/master/city-select2" }); $("#{{$route[0].'_'.$route[1]}}_district_id").remoteChained({ parents: "#{{$route[0].'_'.$route[1]}}_city_id", - url: "/master/district" + url: "/master/district-select2" }); Inputmask({ diff --git a/Routes/web.php b/Routes/web.php index d3f7d7d..2fcf8dd 100644 --- a/Routes/web.php +++ b/Routes/web.php @@ -37,8 +37,15 @@ Route::resource('card', CardController::class); Route::resource('country', CountryController::class); Route::resource('province', ProvinceController::class); + Route::get('province-select2', [ProvinceController::class, 'select2'])->name('province.select2'); + Route::resource('city', CityController::class); + Route::get('city-select2', [CityController::class, 'select2'])->name('city.select2'); + Route::resource('district', DistrictController::class); + Route::get('district-select2', [DistrictController::class, 'select2'])->name('district.select2'); + Route::resource('sub-district', SubDistrictController::class); + }); });