diff --git a/app/Http/Controllers/Api/LocationsController.php b/app/Http/Controllers/Api/LocationsController.php index e1c79dfbe..b46c13e13 100644 --- a/app/Http/Controllers/Api/LocationsController.php +++ b/app/Http/Controllers/Api/LocationsController.php @@ -235,7 +235,13 @@ class LocationsController extends Controller public function destroy($id) { $this->authorize('delete', Location::class); - $location = Location::findOrFail($id); + $location = Location::withCount('assignedAssets as assigned_assets_count') + ->withCount('assets as assets_count') + ->withCount('rtd_assets as rtd_assets_count') + ->withCount('children as children_count') + ->withCount('users as users_count') + ->findOrFail($id); + if (! $location->isDeletable()) { return response() ->json(Helper::formatStandardApiResponse('error', null, trans('admin/companies/message.assoc_users'))); diff --git a/app/Http/Controllers/LocationsController.php b/app/Http/Controllers/LocationsController.php index 7a3691684..897d12758 100755 --- a/app/Http/Controllers/LocationsController.php +++ b/app/Http/Controllers/LocationsController.php @@ -320,7 +320,12 @@ class LocationsController extends Controller $locations_raw_array = $request->input('ids'); if ((is_array($locations_raw_array)) && (count($locations_raw_array) > 0)) { - $locations = Location::whereIn('id', $locations_raw_array)->get(); + $locations = Location::whereIn('id', $locations_raw_array) + ->withCount('assignedAssets as assigned_assets_count') + ->withCount('assets as assets_count') + ->withCount('rtd_assets as rtd_assets_count') + ->withCount('children as children_count') + ->withCount('users as users_count')->get(); $success_count = 0; $error_count = 0; @@ -351,7 +356,7 @@ class LocationsController extends Controller if ($error_count > 0) { return redirect() ->route('locations.index') - ->with('warning', trans('general.bulk.partial_success', + ->with('warning', trans('general.bulk.delete.partial', ['success' => $success_count, 'error' => $error_count, 'object_type' => trans('general.locations')] )); } diff --git a/app/Models/Location.php b/app/Models/Location.php index 2965ff2fc..9f4c55126 100755 --- a/app/Models/Location.php +++ b/app/Models/Location.php @@ -106,6 +106,7 @@ class Location extends SnipeModel */ public function isDeletable() { + return Gate::allows('delete', $this) && ($this->assets_count === 0) && ($this->assigned_assets_count === 0)