From 9ab2c30e4d9336894cc05610042c2e759ced6900 Mon Sep 17 00:00:00 2001 From: vedatakd Date: Sat, 23 Jan 2021 17:31:24 +0300 Subject: [PATCH] location module refactor --- .../advs-module/src/Adv/AdvLoader.php | 6 +-- .../advs-module/src/Adv/AdvRepository.php | 5 -- .../advs-module/src/Adv/AdvResolver.php | 2 +- .../advs-module/src/Adv/Command/GetAd.php | 2 +- .../Adv/Contract/AdvRepositoryInterface.php | 2 - .../src/Http/Controller/advsController.php | 2 +- .../Table/OptionConfigurationTableColumns.php | 2 +- .../ads-list/partials/location-fields.twig | 2 +- .../location-module/src/City/CityCriteria.php | 6 ++- .../location-module/src/City/CityModel.php | 22 --------- .../src/City/CityRepository.php | 12 +++-- .../src/City/Contract/CityInterface.php | 2 +- .../City/Contract/CityRepositoryInterface.php | 4 +- .../src/City/Events/DeletedCities.php | 17 +++++++ .../src/City/Listeners/DeletedCountry.php | 28 +++++++++++ .../src/City/Table/CityTableBuilder.php | 5 +- .../src/City/Table/Handler/Delete.php | 24 +++++++++ .../src/Country/Contract/CountryInterface.php | 2 +- .../Contract/CountryRepositoryInterface.php | 4 -- .../src/Country/CountryModel.php | 5 +- .../src/Country/CountryRepository.php | 8 --- .../src/Country/Events/DeletedCountry.php | 17 +++++++ .../src/Country/Table/CountryTableBuilder.php | 5 +- .../src/Country/Table/Handler/Delete.php | 49 +++++++++++++++++++ .../Contract/DistrictRepositoryInterface.php | 2 + .../src/District/DistrictModel.php | 18 ------- .../src/District/DistrictRepository.php | 7 +++ .../src/District/Events/DeletedDistricts.php | 17 +++++++ .../src/District/Listeners/DeletedCities.php | 30 ++++++++++++ .../District/Table/DistrictTableBuilder.php | 5 +- .../src/District/Table/Handler/Delete.php | 24 +++++++++ .../Controller/Admin/CitiesController.php | 15 ++---- .../Controller/Admin/CountriesController.php | 8 --- .../Controller/Admin/DistrictsController.php | 14 ++---- .../Admin/NeighborhoodsController.php | 14 ++---- .../Controller/Admin/VillageController.php | 7 +-- .../src/LocationModuleServiceProvider.php | 19 +++++++ .../NeighborhoodRepositoryInterface.php | 2 + .../Events/DeletedNeighborhoods.php | 17 +++++++ .../Listeners/DeletedDistricts.php | 31 ++++++++++++ .../src/Neighborhood/NeighborhoodModel.php | 18 ------- .../Neighborhood/NeighborhoodRepository.php | 8 +++ .../src/Neighborhood/Table/Handler/Delete.php | 24 +++++++++ .../Table/NeighborhoodTableBuilder.php | 5 +- .../Contract/VillageRepositoryInterface.php | 2 + .../Listeners/DeletedNeighborhoods.php | 27 ++++++++++ .../src/Village/VillageModel.php | 10 ---- .../src/Village/VillageRepository.php | 5 ++ 48 files changed, 404 insertions(+), 158 deletions(-) create mode 100644 addons/default/visiosoft/location-module/src/City/Events/DeletedCities.php create mode 100644 addons/default/visiosoft/location-module/src/City/Listeners/DeletedCountry.php create mode 100644 addons/default/visiosoft/location-module/src/City/Table/Handler/Delete.php create mode 100644 addons/default/visiosoft/location-module/src/Country/Events/DeletedCountry.php create mode 100644 addons/default/visiosoft/location-module/src/Country/Table/Handler/Delete.php create mode 100644 addons/default/visiosoft/location-module/src/District/Events/DeletedDistricts.php create mode 100644 addons/default/visiosoft/location-module/src/District/Listeners/DeletedCities.php create mode 100644 addons/default/visiosoft/location-module/src/District/Table/Handler/Delete.php create mode 100644 addons/default/visiosoft/location-module/src/Neighborhood/Events/DeletedNeighborhoods.php create mode 100644 addons/default/visiosoft/location-module/src/Neighborhood/Listeners/DeletedDistricts.php create mode 100644 addons/default/visiosoft/location-module/src/Neighborhood/Table/Handler/Delete.php create mode 100644 addons/default/visiosoft/location-module/src/Village/Listeners/DeletedNeighborhoods.php diff --git a/addons/default/visiosoft/advs-module/src/Adv/AdvLoader.php b/addons/default/visiosoft/advs-module/src/Adv/AdvLoader.php index 455b8adc2..0d18b2581 100644 --- a/addons/default/visiosoft/advs-module/src/Adv/AdvLoader.php +++ b/addons/default/visiosoft/advs-module/src/Adv/AdvLoader.php @@ -10,7 +10,7 @@ use Visiosoft\AdvsModule\Adv\Contract\AdvInterface; use Anomaly\Streams\Platform\View\ViewTemplate; use Visiosoft\CatsModule\Category\Contract\CategoryInterface; use Visiosoft\LocationModule\City\Contract\CityInterface; -use Visiosoft\LocationModule\Country\Contract\CountryInterface; +use Visiosoft\LocationModule\Country\Contract\CountryRepositoryInterface; class AdvLoader { @@ -21,8 +21,8 @@ class AdvLoader { $this->template = $template; } - public function load(AdvInterface $adv, CategoryInterface $cats, CityInterface $city, CountryInterface $country) { + public function load(AdvInterface $adv, CategoryInterface $cats, CityInterface $city, CountryRepositoryInterface $country) { $this->template->set('adv', $adv); - $this->template->set('country', $country->getCountry($adv->country_id)); + $this->template->set('country', $country->find($adv->country_id)); } } \ No newline at end of file diff --git a/addons/default/visiosoft/advs-module/src/Adv/AdvRepository.php b/addons/default/visiosoft/advs-module/src/Adv/AdvRepository.php index 4bf44eba9..34fbea314 100644 --- a/addons/default/visiosoft/advs-module/src/Adv/AdvRepository.php +++ b/addons/default/visiosoft/advs-module/src/Adv/AdvRepository.php @@ -31,11 +31,6 @@ class AdvRepository extends EntryRepository implements AdvRepositoryInterface $this->folderRepository = $folderRepository; } - public function findById($id) - { - return $this->model->orderBy('created_at', 'DESC')->where('advs_advs.id', $id)->first(); - } - public function searchAdvs( $type, $param = null, $customParameters = [], $limit = null, $category = null, $city = null, $paginate = true diff --git a/addons/default/visiosoft/advs-module/src/Adv/AdvResolver.php b/addons/default/visiosoft/advs-module/src/Adv/AdvResolver.php index 25b13ed2f..3e70e0bb5 100644 --- a/addons/default/visiosoft/advs-module/src/Adv/AdvResolver.php +++ b/addons/default/visiosoft/advs-module/src/Adv/AdvResolver.php @@ -16,6 +16,6 @@ class AdvResolver { } public function resolve() { - return $this->adv->findById($this->route->parameter('id')); + return $this->adv->find($this->route->parameter('id')); } } \ No newline at end of file diff --git a/addons/default/visiosoft/advs-module/src/Adv/Command/GetAd.php b/addons/default/visiosoft/advs-module/src/Adv/Command/GetAd.php index 17ec929c5..b415264e9 100644 --- a/addons/default/visiosoft/advs-module/src/Adv/Command/GetAd.php +++ b/addons/default/visiosoft/advs-module/src/Adv/Command/GetAd.php @@ -27,7 +27,7 @@ class GetAd public function handle(AdvRepositoryInterface $groups) { if ($this->id) { - return $groups->findById($this->id); + return $groups->find($this->id); } return null; } diff --git a/addons/default/visiosoft/advs-module/src/Adv/Contract/AdvRepositoryInterface.php b/addons/default/visiosoft/advs-module/src/Adv/Contract/AdvRepositoryInterface.php index 6338739ab..36b7c5b6e 100644 --- a/addons/default/visiosoft/advs-module/src/Adv/Contract/AdvRepositoryInterface.php +++ b/addons/default/visiosoft/advs-module/src/Adv/Contract/AdvRepositoryInterface.php @@ -4,8 +4,6 @@ use Anomaly\Streams\Platform\Entry\Contract\EntryRepositoryInterface; interface AdvRepositoryInterface extends EntryRepositoryInterface { - public function findById($id); - public function searchAdvs( $type, $param = null, $customParameters = null, $limit = null, $category = null, $city = null, $paginate = true diff --git a/addons/default/visiosoft/advs-module/src/Http/Controller/advsController.php b/addons/default/visiosoft/advs-module/src/Http/Controller/advsController.php index bf63667c7..0def40984 100644 --- a/addons/default/visiosoft/advs-module/src/Http/Controller/advsController.php +++ b/addons/default/visiosoft/advs-module/src/Http/Controller/advsController.php @@ -145,7 +145,7 @@ class AdvsController extends PublicController $param = $this->requestHttp->toArray(); - $countries = $this->country_repository->viewAll(); + $countries = $this->country_repository->newQuery()->get(); $isActiveDopings = $this->adv_model->is_enabled('dopings'); diff --git a/addons/default/visiosoft/advs-module/src/OptionConfiguration/Table/OptionConfigurationTableColumns.php b/addons/default/visiosoft/advs-module/src/OptionConfiguration/Table/OptionConfigurationTableColumns.php index 1b8f11618..c822cdab3 100644 --- a/addons/default/visiosoft/advs-module/src/OptionConfiguration/Table/OptionConfigurationTableColumns.php +++ b/addons/default/visiosoft/advs-module/src/OptionConfiguration/Table/OptionConfigurationTableColumns.php @@ -18,7 +18,7 @@ class OptionConfigurationTableColumns 'value' => function (EntryModel $entry, AdvRepositoryInterface $advRepository) { - $adv = $advRepository->findById($entry->parent_adv_id); + $adv = $advRepository->find($entry->parent_adv_id); return "parent_adv_id]) . "'>$adv->name"; } ], diff --git a/addons/default/visiosoft/location-module/resources/views/ads-list/partials/location-fields.twig b/addons/default/visiosoft/location-module/resources/views/ads-list/partials/location-fields.twig index 48771252c..defea5ef8 100644 --- a/addons/default/visiosoft/location-module/resources/views/ads-list/partials/location-fields.twig +++ b/addons/default/visiosoft/location-module/resources/views/ads-list/partials/location-fields.twig @@ -124,5 +124,5 @@ diff --git a/addons/default/visiosoft/location-module/src/City/CityCriteria.php b/addons/default/visiosoft/location-module/src/City/CityCriteria.php index ee57d86bd..356e70070 100644 --- a/addons/default/visiosoft/location-module/src/City/CityCriteria.php +++ b/addons/default/visiosoft/location-module/src/City/CityCriteria.php @@ -1,10 +1,12 @@ query->where('parent_country_id', $city)->get(); + public function getCitiesByCountryId($country_id) { + $city_repository = app(CityRepositoryInterface::class); + return $city_repository->getCitiesByCountryId($country_id); } } diff --git a/addons/default/visiosoft/location-module/src/City/CityModel.php b/addons/default/visiosoft/location-module/src/City/CityModel.php index 5a9283fa9..b6483c28f 100644 --- a/addons/default/visiosoft/location-module/src/City/CityModel.php +++ b/addons/default/visiosoft/location-module/src/City/CityModel.php @@ -2,30 +2,8 @@ use Visiosoft\LocationModule\City\Contract\CityInterface; use Anomaly\Streams\Platform\Model\Location\LocationCitiesEntryModel; -use Visiosoft\LocationModule\District\DistrictModel; class CityModel extends LocationCitiesEntryModel implements CityInterface { - public function getCities($id = null) { - if($id != null) - { - return CityModel::query()->where('location_cities.id', $id)->first(); - } - return CityModel::all(); - } - public function getSubCities($country) { - return $this->query()->where('parent_country_id', $country)->orderBy('order','ASC')->get(); - } - - public function deleteCitiesByCountry($id) { - $districts = new DistrictModel(); - $city = $this->where('parent_country_id',$id); - $city_id = $city->orderBy('id','DESC')->get(); - foreach ($city_id as $item) - { - $districts->deleteDistrictByCity($item->id); - } - return $city->delete(); - } } diff --git a/addons/default/visiosoft/location-module/src/City/CityRepository.php b/addons/default/visiosoft/location-module/src/City/CityRepository.php index 26c711983..9968eae76 100644 --- a/addons/default/visiosoft/location-module/src/City/CityRepository.php +++ b/addons/default/visiosoft/location-module/src/City/CityRepository.php @@ -30,11 +30,6 @@ class CityRepository extends EntryRepository implements CityRepositoryInterface $this->citiesEntryTranslationsModel = $citiesEntryTranslationsModel; } - public function findById($id) - { - return $this->model->orderBy('created_at', 'DESC')->where('location_cities.id', $id)->first(); - } - public function getByEntryIDsAndOrderByTransCol($entryIDs, $orderBy, $direction = 'asc') { return $this->citiesEntryTranslationsModel->newQuery() @@ -48,4 +43,11 @@ class CityRepository extends EntryRepository implements CityRepositoryInterface ->orderBy($orderBy, $direction) ->get(); } + + public function getCitiesByCountryId($country_id) { + return $this->newQuery() + ->where('parent_country_id', $country_id) + ->orderBy('order','ASC') + ->get(); + } } diff --git a/addons/default/visiosoft/location-module/src/City/Contract/CityInterface.php b/addons/default/visiosoft/location-module/src/City/Contract/CityInterface.php index b5891fa0b..ec19657d2 100644 --- a/addons/default/visiosoft/location-module/src/City/Contract/CityInterface.php +++ b/addons/default/visiosoft/location-module/src/City/Contract/CityInterface.php @@ -4,5 +4,5 @@ use Anomaly\Streams\Platform\Entry\Contract\EntryInterface; interface CityInterface extends EntryInterface { - public function getCities(); + } diff --git a/addons/default/visiosoft/location-module/src/City/Contract/CityRepositoryInterface.php b/addons/default/visiosoft/location-module/src/City/Contract/CityRepositoryInterface.php index 2e8993d9d..9952563bd 100644 --- a/addons/default/visiosoft/location-module/src/City/Contract/CityRepositoryInterface.php +++ b/addons/default/visiosoft/location-module/src/City/Contract/CityRepositoryInterface.php @@ -4,7 +4,7 @@ use Anomaly\Streams\Platform\Entry\Contract\EntryRepositoryInterface; interface CityRepositoryInterface extends EntryRepositoryInterface { - public function findById($id); - public function getByEntryIDsAndOrderByTransCol($entryIDs, $orderBy, $direction = 'asc'); + + public function getCitiesByCountryId($country_id); } diff --git a/addons/default/visiosoft/location-module/src/City/Events/DeletedCities.php b/addons/default/visiosoft/location-module/src/City/Events/DeletedCities.php new file mode 100644 index 000000000..062aa7c68 --- /dev/null +++ b/addons/default/visiosoft/location-module/src/City/Events/DeletedCities.php @@ -0,0 +1,17 @@ +cities = $cities; + } + + public function getCities() + { + return $this->cities; + } +} + diff --git a/addons/default/visiosoft/location-module/src/City/Listeners/DeletedCountry.php b/addons/default/visiosoft/location-module/src/City/Listeners/DeletedCountry.php new file mode 100644 index 000000000..e99a20fdd --- /dev/null +++ b/addons/default/visiosoft/location-module/src/City/Listeners/DeletedCountry.php @@ -0,0 +1,28 @@ +cityRepository = $cityRepository; + } + + public function handle(\Visiosoft\LocationModule\Country\Events\DeletedCountry $event) + { + $country = $event->getCountry(); + + $query = $this->cityRepository->newQuery() + ->where('parent_country_id', $country->id); + + if (count($cities = $query->get())) { + $query->delete(); + + event(new DeletedCities($cities)); + } + } +} \ No newline at end of file diff --git a/addons/default/visiosoft/location-module/src/City/Table/CityTableBuilder.php b/addons/default/visiosoft/location-module/src/City/Table/CityTableBuilder.php index a63daae89..5d14f7a64 100644 --- a/addons/default/visiosoft/location-module/src/City/Table/CityTableBuilder.php +++ b/addons/default/visiosoft/location-module/src/City/Table/CityTableBuilder.php @@ -1,6 +1,7 @@ [ + 'handler' => Delete::class, + ], ]; /** diff --git a/addons/default/visiosoft/location-module/src/City/Table/Handler/Delete.php b/addons/default/visiosoft/location-module/src/City/Table/Handler/Delete.php new file mode 100644 index 000000000..ec2612192 --- /dev/null +++ b/addons/default/visiosoft/location-module/src/City/Table/Handler/Delete.php @@ -0,0 +1,24 @@ +newQuery()->whereIn('location_cities.id', $selected); + + if ($count = count($cities = $query->get())) { + $query->delete(); + + event(new DeletedCities($cities)); + } + + if ($selected && $count > 0) { + $this->messages->success(trans('streams::message.delete_success', compact('count'))); + } + } +} \ No newline at end of file diff --git a/addons/default/visiosoft/location-module/src/Country/Contract/CountryInterface.php b/addons/default/visiosoft/location-module/src/Country/Contract/CountryInterface.php index 385275a13..1099e9332 100644 --- a/addons/default/visiosoft/location-module/src/Country/Contract/CountryInterface.php +++ b/addons/default/visiosoft/location-module/src/Country/Contract/CountryInterface.php @@ -4,5 +4,5 @@ use Anomaly\Streams\Platform\Entry\Contract\EntryInterface; interface CountryInterface extends EntryInterface { - public function getCountry($id); + } diff --git a/addons/default/visiosoft/location-module/src/Country/Contract/CountryRepositoryInterface.php b/addons/default/visiosoft/location-module/src/Country/Contract/CountryRepositoryInterface.php index b4659e6ac..769b547c3 100644 --- a/addons/default/visiosoft/location-module/src/Country/Contract/CountryRepositoryInterface.php +++ b/addons/default/visiosoft/location-module/src/Country/Contract/CountryRepositoryInterface.php @@ -4,9 +4,5 @@ use Anomaly\Streams\Platform\Entry\Contract\EntryRepositoryInterface; interface CountryRepositoryInterface extends EntryRepositoryInterface { - public function findById($id); - - public function viewAll(); - public function getByEntryIDsAndOrderByTransCol($entryIDs, $orderBy, $direction = 'asc'); } diff --git a/addons/default/visiosoft/location-module/src/Country/CountryModel.php b/addons/default/visiosoft/location-module/src/Country/CountryModel.php index 7bb3202c5..b2c69af14 100644 --- a/addons/default/visiosoft/location-module/src/Country/CountryModel.php +++ b/addons/default/visiosoft/location-module/src/Country/CountryModel.php @@ -5,8 +5,5 @@ use Anomaly\Streams\Platform\Model\Location\LocationCountriesEntryModel; class CountryModel extends LocationCountriesEntryModel implements CountryInterface { - public function getCountry($id) - { - return CountryModel::query()->where('location_countries.id', $id)->first(); - } + } diff --git a/addons/default/visiosoft/location-module/src/Country/CountryRepository.php b/addons/default/visiosoft/location-module/src/Country/CountryRepository.php index a8a25a6e2..8931d5100 100644 --- a/addons/default/visiosoft/location-module/src/Country/CountryRepository.php +++ b/addons/default/visiosoft/location-module/src/Country/CountryRepository.php @@ -32,14 +32,6 @@ class CountryRepository extends EntryRepository implements CountryRepositoryInte $this->model = $model; $this->countriesEntryTranslationsModel = $countriesEntryTranslationsModel; } - public function findById($id) - { - return $this->model->orderBy('created_at', 'DESC')->where('location_countries.id', $id)->first(); - } - - public function viewAll(){ - return $this->model->get(); - } public function getByEntryIDsAndOrderByTransCol($entryIDs, $orderBy, $direction = 'asc') { diff --git a/addons/default/visiosoft/location-module/src/Country/Events/DeletedCountry.php b/addons/default/visiosoft/location-module/src/Country/Events/DeletedCountry.php new file mode 100644 index 000000000..98f541e89 --- /dev/null +++ b/addons/default/visiosoft/location-module/src/Country/Events/DeletedCountry.php @@ -0,0 +1,17 @@ +country = $country; + } + + public function getCountry() + { + return $this->country; + } +} + diff --git a/addons/default/visiosoft/location-module/src/Country/Table/CountryTableBuilder.php b/addons/default/visiosoft/location-module/src/Country/Table/CountryTableBuilder.php index 733277656..a77e7019e 100644 --- a/addons/default/visiosoft/location-module/src/Country/Table/CountryTableBuilder.php +++ b/addons/default/visiosoft/location-module/src/Country/Table/CountryTableBuilder.php @@ -1,6 +1,7 @@ [ + 'handler' => Delete::class, + ], ]; /** diff --git a/addons/default/visiosoft/location-module/src/Country/Table/Handler/Delete.php b/addons/default/visiosoft/location-module/src/Country/Table/Handler/Delete.php new file mode 100644 index 000000000..2f2471d21 --- /dev/null +++ b/addons/default/visiosoft/location-module/src/Country/Table/Handler/Delete.php @@ -0,0 +1,49 @@ +getTableModel(); + + /* @var EloquentModel $entry */ + foreach ($selected as $id) { + + $entry = $model->find($id); + + $deletable = true; + + if ($entry instanceof EloquentModel) { + $deletable = $entry->isDeletable(); + } + + if ($entry && $deletable && $entry->delete()) { + $builder->fire('row_deleted', compact('builder', 'model', 'entry')); + + event(new DeletedCountry($entry)); + + $count++; + } + } + + if ($count) { + $builder->fire('rows_deleted', compact('count', 'builder', 'model')); + } + + if ($selected && $count > 0) { + $this->messages->success(trans('streams::message.delete_success', compact('count'))); + } + + if ($selected && $count === 0) { + $this->messages->warning(trans('streams::message.delete_success', compact('count'))); + } + } +} \ No newline at end of file diff --git a/addons/default/visiosoft/location-module/src/District/Contract/DistrictRepositoryInterface.php b/addons/default/visiosoft/location-module/src/District/Contract/DistrictRepositoryInterface.php index 465cb1a16..f5a63d7e1 100644 --- a/addons/default/visiosoft/location-module/src/District/Contract/DistrictRepositoryInterface.php +++ b/addons/default/visiosoft/location-module/src/District/Contract/DistrictRepositoryInterface.php @@ -5,4 +5,6 @@ use Anomaly\Streams\Platform\Entry\Contract\EntryRepositoryInterface; interface DistrictRepositoryInterface extends EntryRepositoryInterface { public function getByEntryIDsAndOrderByTransCol($entryIDs, $orderBy, $direction = 'asc'); + + public function getDistrictByCityId($city); } diff --git a/addons/default/visiosoft/location-module/src/District/DistrictModel.php b/addons/default/visiosoft/location-module/src/District/DistrictModel.php index 5f7799002..9e705a3a1 100644 --- a/addons/default/visiosoft/location-module/src/District/DistrictModel.php +++ b/addons/default/visiosoft/location-module/src/District/DistrictModel.php @@ -2,26 +2,8 @@ use Visiosoft\LocationModule\District\Contract\DistrictInterface; use Anomaly\Streams\Platform\Model\Location\LocationDistrictsEntryModel; -use Visiosoft\LocationModule\Neighborhood\NeighborhoodModel; class DistrictModel extends LocationDistrictsEntryModel implements DistrictInterface { - public function getDistricts() { - return DistrictModel::all(); - } - public function getSubDistricts($city) { - return $this->query()->where('parent_city_id', $city)->orderBy('order','ASC')->get(); - } - - public function deleteDistrictByCity($id) { - $neighborhood = new NeighborhoodModel(); - $districts = $this->where('parent_city_id',$id); - $districts_id = $districts->orderBy('id','DESC')->get(); - foreach ($districts_id as $item) - { - $neighborhood->deleteNeighborhoodByDistrict($item->id); - } - return $districts->delete(); - } } diff --git a/addons/default/visiosoft/location-module/src/District/DistrictRepository.php b/addons/default/visiosoft/location-module/src/District/DistrictRepository.php index 3790d78f9..c5fd7e5e6 100644 --- a/addons/default/visiosoft/location-module/src/District/DistrictRepository.php +++ b/addons/default/visiosoft/location-module/src/District/DistrictRepository.php @@ -46,4 +46,11 @@ class DistrictRepository extends EntryRepository implements DistrictRepositoryIn ->orderBy($orderBy, $direction) ->get(); } + + public function getDistrictByCityId($city) { + return $this->newQuery() + ->where('parent_city_id', $city) + ->orderBy('order','ASC') + ->get(); + } } diff --git a/addons/default/visiosoft/location-module/src/District/Events/DeletedDistricts.php b/addons/default/visiosoft/location-module/src/District/Events/DeletedDistricts.php new file mode 100644 index 000000000..131ca72e9 --- /dev/null +++ b/addons/default/visiosoft/location-module/src/District/Events/DeletedDistricts.php @@ -0,0 +1,17 @@ +districts = $districts; + } + + public function getDistricts() + { + return $this->districts; + } +} + diff --git a/addons/default/visiosoft/location-module/src/District/Listeners/DeletedCities.php b/addons/default/visiosoft/location-module/src/District/Listeners/DeletedCities.php new file mode 100644 index 000000000..b55345ebc --- /dev/null +++ b/addons/default/visiosoft/location-module/src/District/Listeners/DeletedCities.php @@ -0,0 +1,30 @@ +districtRepository = $districtRepository; + } + + public function handle(\Visiosoft\LocationModule\City\Events\DeletedCities $event) + { + $cities = $event->getCities(); + + $cities = $cities->pluck('id')->all(); + + $query = $this->districtRepository->newQuery() + ->whereIn('parent_city_id', $cities); + + if (count($districts = $query->get())) { + $query->delete(); + + event(new DeletedDistricts($districts)); + } + } +} \ No newline at end of file diff --git a/addons/default/visiosoft/location-module/src/District/Table/DistrictTableBuilder.php b/addons/default/visiosoft/location-module/src/District/Table/DistrictTableBuilder.php index 4769f45ed..d61fe5312 100644 --- a/addons/default/visiosoft/location-module/src/District/Table/DistrictTableBuilder.php +++ b/addons/default/visiosoft/location-module/src/District/Table/DistrictTableBuilder.php @@ -1,6 +1,7 @@ [ + 'handler' => Delete::class, + ], ]; /** diff --git a/addons/default/visiosoft/location-module/src/District/Table/Handler/Delete.php b/addons/default/visiosoft/location-module/src/District/Table/Handler/Delete.php new file mode 100644 index 000000000..2a22b9cd3 --- /dev/null +++ b/addons/default/visiosoft/location-module/src/District/Table/Handler/Delete.php @@ -0,0 +1,24 @@ +newQuery()->whereIn('location_districts.id', $selected); + + if ($count = count($cities = $query->get())) { + $query->delete(); + + event(new DeletedDistricts($cities)); + } + + if ($selected && $count > 0) { + $this->messages->success(trans('streams::message.delete_success', compact('count'))); + } + } +} \ No newline at end of file diff --git a/addons/default/visiosoft/location-module/src/Http/Controller/Admin/CitiesController.php b/addons/default/visiosoft/location-module/src/Http/Controller/Admin/CitiesController.php index 2441a31ab..7774eff75 100644 --- a/addons/default/visiosoft/location-module/src/Http/Controller/Admin/CitiesController.php +++ b/addons/default/visiosoft/location-module/src/Http/Controller/Admin/CitiesController.php @@ -1,28 +1,21 @@ request->action == "delete") { - $disticts = new DistrictModel(); - foreach ($this->request->id as $item) - { - $disticts->deleteDistrictByCity($item); - } - } - $cities = new CityModel(); + $cities = app(CityRepositoryInterface::class); + if(!isset($request->country) || $request->country==""){ return $table->render(); } else { - $cities = $cities->getSubCities($request->country); + $cities = $cities->getCitiesByCountryId($request->country); if (count($cities) == 0) { $this->messages->error('Selected country has no related city.'); return redirect('/admin/location/countries'); diff --git a/addons/default/visiosoft/location-module/src/Http/Controller/Admin/CountriesController.php b/addons/default/visiosoft/location-module/src/Http/Controller/Admin/CountriesController.php index 20a0e810d..ea743be29 100644 --- a/addons/default/visiosoft/location-module/src/Http/Controller/Admin/CountriesController.php +++ b/addons/default/visiosoft/location-module/src/Http/Controller/Admin/CountriesController.php @@ -1,6 +1,5 @@ request->action == "delete") { - $city = new CityModel(); - foreach ($this->request->id as $item) - { - $city->deleteCitiesByCountry($item); - } - } return $table->render(); } diff --git a/addons/default/visiosoft/location-module/src/Http/Controller/Admin/DistrictsController.php b/addons/default/visiosoft/location-module/src/Http/Controller/Admin/DistrictsController.php index dc391e261..f827f1f80 100644 --- a/addons/default/visiosoft/location-module/src/Http/Controller/Admin/DistrictsController.php +++ b/addons/default/visiosoft/location-module/src/Http/Controller/Admin/DistrictsController.php @@ -1,28 +1,20 @@ request->action == "delete") { - $neighborhoods = new NeighborhoodModel(); - foreach ($this->request->id as $item) - { - $neighborhoods->deleteNeighborhoodByDistrict($item); - } - } - $districts = new DistrictModel(); + $districts = app(DistrictRepositoryInterface::class); if(!isset($request->city) || $request->city==""){ return $table->render(); }else{ - $districts = $districts->getSubDistricts($request->city); + $districts = $districts->getDistrictByCityId($request->city); if (count($districts) == 0) { $this->messages->error('Selected city has no related district.'); return redirect('/admin/location/cities'); diff --git a/addons/default/visiosoft/location-module/src/Http/Controller/Admin/NeighborhoodsController.php b/addons/default/visiosoft/location-module/src/Http/Controller/Admin/NeighborhoodsController.php index 6fea82c3c..77bb8bce6 100644 --- a/addons/default/visiosoft/location-module/src/Http/Controller/Admin/NeighborhoodsController.php +++ b/addons/default/visiosoft/location-module/src/Http/Controller/Admin/NeighborhoodsController.php @@ -1,28 +1,20 @@ request->action == "delete") { - $village = new VillageModel(); - foreach ($this->request->id as $item) - { - $village->deleteVillageByNeighborhood($item); - } - } - $neighborhoods = new NeighborhoodModel(); + $neighborhoods = app(NeighborhoodRepositoryInterface::class); if(!isset($request->district) || $request->district==""){ return $table->render(); }else{ - $neighborhoods = $neighborhoods->getSubNeighborhoods($request->district); + $neighborhoods = $neighborhoods->getNeighborhoodsByDistrictId($request->district); if (count($neighborhoods) == 0) { $this->messages->error('Selected district has no related neighborhood.'); return redirect('/admin/location/districts'); diff --git a/addons/default/visiosoft/location-module/src/Http/Controller/Admin/VillageController.php b/addons/default/visiosoft/location-module/src/Http/Controller/Admin/VillageController.php index a09533472..2aa5225f7 100644 --- a/addons/default/visiosoft/location-module/src/Http/Controller/Admin/VillageController.php +++ b/addons/default/visiosoft/location-module/src/Http/Controller/Admin/VillageController.php @@ -1,20 +1,21 @@ neighborhood) || $request->neighborhood==""){ return $table->render(); }else{ - $villages = $villages->getSubVillages($request->neighborhood); + $villages = $villages->getVillagesByNeighborhoodId($request->neighborhood); if (count($villages) == 0) { $this->messages->error('Selected neighborhood has no related village.'); return back(); diff --git a/addons/default/visiosoft/location-module/src/LocationModuleServiceProvider.php b/addons/default/visiosoft/location-module/src/LocationModuleServiceProvider.php index 18343e219..dead6ab68 100644 --- a/addons/default/visiosoft/location-module/src/LocationModuleServiceProvider.php +++ b/addons/default/visiosoft/location-module/src/LocationModuleServiceProvider.php @@ -8,10 +8,14 @@ use Anomaly\Streams\Platform\Model\Location\LocationVillageEntryModel; use Visiosoft\LocationModule\City\CityModel; use Visiosoft\LocationModule\City\CityRepository; use Visiosoft\LocationModule\City\Contract\CityRepositoryInterface; +use Visiosoft\LocationModule\City\Events\DeletedCities; +use Visiosoft\LocationModule\Country\Events\DeletedCountry; use Visiosoft\LocationModule\District\Contract\DistrictRepositoryInterface; use Visiosoft\LocationModule\District\DistrictModel; use Visiosoft\LocationModule\District\DistrictRepository; +use Visiosoft\LocationModule\District\Events\DeletedDistricts; use Visiosoft\LocationModule\Neighborhood\Contract\NeighborhoodRepositoryInterface; +use Visiosoft\LocationModule\Neighborhood\Events\DeletedNeighborhoods; use Visiosoft\LocationModule\Neighborhood\NeighborhoodModel; use Visiosoft\LocationModule\Neighborhood\NeighborhoodRepository; use Visiosoft\LocationModule\Village\Contract\VillageRepositoryInterface; @@ -85,4 +89,19 @@ class LocationModuleServiceProvider extends AddonServiceProvider VillageRepositoryInterface::class => VillageRepository::class, CountryRepositoryInterface::class => CountryRepository::class, ]; + + protected $listeners = [ + DeletedCountry::class => [ + \Visiosoft\LocationModule\City\Listeners\DeletedCountry::class, + ], + DeletedCities::class => [ + \Visiosoft\LocationModule\District\Listeners\DeletedCities::class, + ], + DeletedDistricts::class => [ + \Visiosoft\LocationModule\Neighborhood\Listeners\DeletedDistricts::class, + ], + DeletedNeighborhoods::class => [ + \Visiosoft\LocationModule\Village\Listeners\DeletedNeighborhoods::class + ], + ]; } diff --git a/addons/default/visiosoft/location-module/src/Neighborhood/Contract/NeighborhoodRepositoryInterface.php b/addons/default/visiosoft/location-module/src/Neighborhood/Contract/NeighborhoodRepositoryInterface.php index f1dceaf15..ee82c6b5d 100644 --- a/addons/default/visiosoft/location-module/src/Neighborhood/Contract/NeighborhoodRepositoryInterface.php +++ b/addons/default/visiosoft/location-module/src/Neighborhood/Contract/NeighborhoodRepositoryInterface.php @@ -5,4 +5,6 @@ use Anomaly\Streams\Platform\Entry\Contract\EntryRepositoryInterface; interface NeighborhoodRepositoryInterface extends EntryRepositoryInterface { public function getByEntryIDsAndOrderByTransCol($entryIDs, $orderBy, $direction = 'asc'); + + public function getNeighborhoodsByDistrictId($district); } diff --git a/addons/default/visiosoft/location-module/src/Neighborhood/Events/DeletedNeighborhoods.php b/addons/default/visiosoft/location-module/src/Neighborhood/Events/DeletedNeighborhoods.php new file mode 100644 index 000000000..f1b9f18ab --- /dev/null +++ b/addons/default/visiosoft/location-module/src/Neighborhood/Events/DeletedNeighborhoods.php @@ -0,0 +1,17 @@ +neighborhood = $neighborhood; + } + + public function getNeighborhoods() + { + return $this->neighborhood; + } +} + diff --git a/addons/default/visiosoft/location-module/src/Neighborhood/Listeners/DeletedDistricts.php b/addons/default/visiosoft/location-module/src/Neighborhood/Listeners/DeletedDistricts.php new file mode 100644 index 000000000..dab4bca6b --- /dev/null +++ b/addons/default/visiosoft/location-module/src/Neighborhood/Listeners/DeletedDistricts.php @@ -0,0 +1,31 @@ +neighborhoodRepository = $neighborhoodRepository; + } + + public function handle(\Visiosoft\LocationModule\District\Events\DeletedDistricts $event) + { + $districts = $event->getDistricts(); + + $districts = $districts->pluck('id')->all(); + + $query = $this->neighborhoodRepository->newQuery() + ->whereIn('parent_district_id', $districts); + + if (count($neighborhoods = $query->get())) { + $query->delete(); + + event(new DeletedNeighborhoods($neighborhoods)); + } + } +} \ No newline at end of file diff --git a/addons/default/visiosoft/location-module/src/Neighborhood/NeighborhoodModel.php b/addons/default/visiosoft/location-module/src/Neighborhood/NeighborhoodModel.php index 282d0fcf7..2f70ffb91 100644 --- a/addons/default/visiosoft/location-module/src/Neighborhood/NeighborhoodModel.php +++ b/addons/default/visiosoft/location-module/src/Neighborhood/NeighborhoodModel.php @@ -2,26 +2,8 @@ use Visiosoft\LocationModule\Neighborhood\Contract\NeighborhoodInterface; use Anomaly\Streams\Platform\Model\Location\LocationNeighborhoodsEntryModel; -use Visiosoft\LocationModule\Village\VillageModel; class NeighborhoodModel extends LocationNeighborhoodsEntryModel implements NeighborhoodInterface { - public function getNeighborhoods() { - return NeighborhoodModel::all(); - } - public function getSubNeighborhoods($district) { - return $this->query()->where('parent_district_id', $district)->orderBy('order','ASC')->get(); - } - - public function deleteNeighborhoodByDistrict($id) { - $village = new VillageModel(); - $neighborhood = $this->where('parent_district_id',$id); - $neighborhoods_id = $neighborhood->orderBy('id','DESC')->get(); - foreach ($neighborhoods_id as $item) - { - $village->deleteVillageByNeighborhood($item->id); - } - return $neighborhood->delete(); - } } diff --git a/addons/default/visiosoft/location-module/src/Neighborhood/NeighborhoodRepository.php b/addons/default/visiosoft/location-module/src/Neighborhood/NeighborhoodRepository.php index 75023993e..714038f07 100644 --- a/addons/default/visiosoft/location-module/src/Neighborhood/NeighborhoodRepository.php +++ b/addons/default/visiosoft/location-module/src/Neighborhood/NeighborhoodRepository.php @@ -46,4 +46,12 @@ class NeighborhoodRepository extends EntryRepository implements NeighborhoodRepo ->orderBy($orderBy, $direction) ->get(); } + + public function getNeighborhoodsByDistrictId($district) + { + return $this->newQuery() + ->where('parent_district_id', $district) + ->orderBy('order', 'ASC') + ->get(); + } } diff --git a/addons/default/visiosoft/location-module/src/Neighborhood/Table/Handler/Delete.php b/addons/default/visiosoft/location-module/src/Neighborhood/Table/Handler/Delete.php new file mode 100644 index 000000000..da47f1e88 --- /dev/null +++ b/addons/default/visiosoft/location-module/src/Neighborhood/Table/Handler/Delete.php @@ -0,0 +1,24 @@ +newQuery()->whereIn('location_neighborhoods.id', $selected); + + if ($count = count($cities = $query->get())) { + $query->delete(); + + event(new DeletedNeighborhoods($cities)); + } + + if ($selected && $count > 0) { + $this->messages->success(trans('streams::message.delete_success', compact('count'))); + } + } +} \ No newline at end of file diff --git a/addons/default/visiosoft/location-module/src/Neighborhood/Table/NeighborhoodTableBuilder.php b/addons/default/visiosoft/location-module/src/Neighborhood/Table/NeighborhoodTableBuilder.php index 729f125ac..7dd43d1c5 100644 --- a/addons/default/visiosoft/location-module/src/Neighborhood/Table/NeighborhoodTableBuilder.php +++ b/addons/default/visiosoft/location-module/src/Neighborhood/Table/NeighborhoodTableBuilder.php @@ -1,6 +1,7 @@ [ + 'handler' => Delete::class, + ], ]; /** diff --git a/addons/default/visiosoft/location-module/src/Village/Contract/VillageRepositoryInterface.php b/addons/default/visiosoft/location-module/src/Village/Contract/VillageRepositoryInterface.php index 65f259fdf..d331e84de 100644 --- a/addons/default/visiosoft/location-module/src/Village/Contract/VillageRepositoryInterface.php +++ b/addons/default/visiosoft/location-module/src/Village/Contract/VillageRepositoryInterface.php @@ -5,4 +5,6 @@ use Anomaly\Streams\Platform\Entry\Contract\EntryRepositoryInterface; interface VillageRepositoryInterface extends EntryRepositoryInterface { public function getByEntryIDsAndOrderByTransCol($entryIDs, $orderBy, $direction = 'asc'); + + public function getVillagesByNeighborhoodId($neighborhood); } diff --git a/addons/default/visiosoft/location-module/src/Village/Listeners/DeletedNeighborhoods.php b/addons/default/visiosoft/location-module/src/Village/Listeners/DeletedNeighborhoods.php new file mode 100644 index 000000000..d5806d11b --- /dev/null +++ b/addons/default/visiosoft/location-module/src/Village/Listeners/DeletedNeighborhoods.php @@ -0,0 +1,27 @@ +villageRepository = $villageRepository; + } + + public function handle(\Visiosoft\LocationModule\Neighborhood\Events\DeletedNeighborhoods $event) + { + $neighborhoods = $event->getNeighborhoods(); + + $neighborhoods = $neighborhoods->pluck('id')->all(); + + $query = $this->villageRepository->newQuery() + ->whereIn('parent_neighborhood_id', $neighborhoods); + + if (count($villages = $query->get())) { + $query->delete(); + } + } +} \ No newline at end of file diff --git a/addons/default/visiosoft/location-module/src/Village/VillageModel.php b/addons/default/visiosoft/location-module/src/Village/VillageModel.php index 1df42043f..bcd1883a5 100644 --- a/addons/default/visiosoft/location-module/src/Village/VillageModel.php +++ b/addons/default/visiosoft/location-module/src/Village/VillageModel.php @@ -5,15 +5,5 @@ use Anomaly\Streams\Platform\Model\Location\LocationVillageEntryModel; class VillageModel extends LocationVillageEntryModel implements VillageInterface { - public function getVillages() { - return VillageModel::all(); - } - public function getSubVillages($neighborhood) { - return $this->query()->where('parent_neighborhood_id', $neighborhood)->orderBy('order','ASC')->get(); - } - - public function deleteVillageByNeighborhood($id) { - $this->where('parent_neighborhood_id',$id)->orderBy('id','DESC')->delete(); - } } diff --git a/addons/default/visiosoft/location-module/src/Village/VillageRepository.php b/addons/default/visiosoft/location-module/src/Village/VillageRepository.php index 4f7d64d9b..f3b7be1de 100644 --- a/addons/default/visiosoft/location-module/src/Village/VillageRepository.php +++ b/addons/default/visiosoft/location-module/src/Village/VillageRepository.php @@ -46,4 +46,9 @@ class VillageRepository extends EntryRepository implements VillageRepositoryInte ->orderBy($orderBy, $direction) ->get(); } + + public function getVillagesByNeighborhoodId($neighborhood) + { + return $this->newQuery()->where('parent_neighborhood_id', $neighborhood)->orderBy('order','ASC')->get(); + } }