diff --git a/app/Http/Controllers/Api/LocationsController.php b/app/Http/Controllers/Api/LocationsController.php index ad3f139f4d..4534b8eea9 100644 --- a/app/Http/Controllers/Api/LocationsController.php +++ b/app/Http/Controllers/Api/LocationsController.php @@ -21,7 +21,7 @@ class LocationsController extends Controller { $this->authorize('view', Location::class); $allowed_columns = ['id','name','address','address2','city','state','country','zip','created_at', - 'updated_at','parent_id']; + 'updated_at','parent_id', 'manager_id']; $locations = Location::select([ 'locations.id', @@ -33,6 +33,7 @@ class LocationsController extends Controller 'locations.zip', 'locations.country', 'locations.parent_id', + 'locations.manager_id', 'locations.created_at', 'locations.updated_at', 'locations.currency' diff --git a/app/Http/Controllers/LocationsController.php b/app/Http/Controllers/LocationsController.php index c8b36ab8b4..c1e45a574a 100755 --- a/app/Http/Controllers/LocationsController.php +++ b/app/Http/Controllers/LocationsController.php @@ -63,7 +63,8 @@ class LocationsController extends Controller return view('locations/edit') ->with('location_options', $location_options) - ->with('item', new Location); + ->with('item', new Location) + ->with('manager_list', Helper::managerList()); } @@ -88,6 +89,7 @@ class LocationsController extends Controller $location->state = Input::get('state'); $location->country = Input::get('country'); $location->zip = Input::get('zip'); + $location->manager_id = Input::get('manager_id'); $location->user_id = Auth::id(); if ($location->save()) { @@ -154,7 +156,10 @@ class LocationsController extends Controller $location_options = Location::flattenLocationsArray($location_options_array); $location_options = array('' => 'Top Level') + $location_options; - return view('locations/edit', compact('item'))->with('location_options', $location_options); + + return view('locations/edit', compact('item')) + ->with('location_options', $location_options) + ->with('manager_list', Helper::managerList()); } @@ -185,6 +190,7 @@ class LocationsController extends Controller $location->country = Input::get('country'); $location->zip = Input::get('zip'); $location->ldap_ou = Input::get('ldap_ou'); + $location->manager_id = Input::get('manager_id'); // Was the location updated? if ($location->save()) { diff --git a/app/Http/Controllers/UsersController.php b/app/Http/Controllers/UsersController.php index 9e220edc9b..a4c624aef1 100755 --- a/app/Http/Controllers/UsersController.php +++ b/app/Http/Controllers/UsersController.php @@ -376,7 +376,6 @@ class UsersController extends Controller } if ($user->licenses()->count() > 0) { - // Redirect to the user management page return redirect()->route('users.index')->with('error', 'This user still has ' . $user->licenses()->count() . ' licenses associated with them.'); } @@ -386,6 +385,11 @@ class UsersController extends Controller return redirect()->route('users.index')->with('error', 'This user still has ' . $user->accessories()->count() . ' accessories associated with them.'); } + if ($user->managedLocations()->count() > 0) { + // Redirect to the user management page + return redirect()->route('users.index')->with('error', 'This user still has ' . $user->managedLocations()->count() . ' locations that they manage.'); + } + // Delete the user $user->delete(); diff --git a/app/Http/Transformers/LocationsTransformer.php b/app/Http/Transformers/LocationsTransformer.php index adbf9b26ee..bd69834319 100644 --- a/app/Http/Transformers/LocationsTransformer.php +++ b/app/Http/Transformers/LocationsTransformer.php @@ -9,7 +9,7 @@ use App\Helpers\Helper; class LocationsTransformer { - public function transformLocations (Collection $locations, $total) + public function transformLocations(Collection $locations, $total) { $array = array(); foreach ($locations as $location) { @@ -18,17 +18,16 @@ class LocationsTransformer return (new DatatablesTransformer)->transformDatatables($array, $total); } - public function transformLocation (Location $location = null) + public function transformLocation(Location $location = null) { if ($location) { - $assets_arr = []; - foreach($location->assets() as $asset) { + foreach ($location->assets() as $asset) { $assets_arr = ['id' => $asset->id]; } - + $children_arr = []; - foreach($location->childLocations() as $child) { + foreach ($location->childLocations() as $child) { $children_arr = ['id' => $child->id]; } @@ -45,6 +44,7 @@ class LocationsTransformer 'created_at' => Helper::getFormattedDateObject($location->created_at, 'datetime'), 'updated_at' => Helper::getFormattedDateObject($location->updated_at, 'datetime'), 'parent_id' => e($location->parent_id), + 'manager' => ($location->manager) ? (new UsersTransformer)->transformUser($location->manager) : '', 'children' => $children_arr, ]; @@ -54,13 +54,7 @@ class LocationsTransformer ]; $array += $permissions_array; - return $array; } - - } - - - } diff --git a/app/Models/Location.php b/app/Models/Location.php index aeb49acccb..2327d137da 100755 --- a/app/Models/Location.php +++ b/app/Models/Location.php @@ -24,6 +24,7 @@ class Location extends SnipeModel 'address' => 'max:80|nullable', 'address2' => 'max:80|nullable', 'zip' => 'min:3|max:10|nullable', + // 'manager_id' => 'exists:users' ); /** @@ -66,6 +67,11 @@ class Location extends SnipeModel return $this->belongsTo('\App\Models\Location', 'parent_id'); } + public function manager() + { + return $this->belongsTo('\App\Models\User', 'manager_id'); + } + public function childLocations() { return $this->hasMany('\App\Models\Location', 'parent_id'); diff --git a/app/Models/User.php b/app/Models/User.php index 42c584fef2..1b641c4c03 100755 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -193,6 +193,14 @@ class User extends SnipeModel implements AuthenticatableContract, CanResetPasswo return $this->belongsTo('\App\Models\User', 'manager_id')->withTrashed(); } + /** + * Get any locations the user manages. + **/ + public function managedLocations() + { + return $this->hasMany('\App\Models\Location', 'manager_id')->withTrashed(); + } + /** * Get user groups */ diff --git a/database/migrations/2017_05_22_233509_add_manager_to_locations_table.php b/database/migrations/2017_05_22_233509_add_manager_to_locations_table.php new file mode 100644 index 0000000000..a103a85560 --- /dev/null +++ b/database/migrations/2017_05_22_233509_add_manager_to_locations_table.php @@ -0,0 +1,34 @@ +integer('manager_id')->nullable()->default(null); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('locations', function (Blueprint $table) { + // + $table->dropColumn('manager_id'); + }); + } +} diff --git a/resources/lang/en/admin/users/table.php b/resources/lang/en/admin/users/table.php index 56a5354d69..9bbe883e19 100644 --- a/resources/lang/en/admin/users/table.php +++ b/resources/lang/en/admin/users/table.php @@ -19,6 +19,7 @@ return array( 'location' => 'Location', 'lock_passwords' => 'Login details cannot be changed on this installation.', 'manager' => 'Manager', + 'managed_locations' => 'Managed Locations', 'name' => 'Name', 'notes' => 'Notes', 'password_confirm' => 'Confirm Password', diff --git a/resources/views/locations/edit.blade.php b/resources/views/locations/edit.blade.php index 2c249f602c..59235e3f2c 100755 --- a/resources/views/locations/edit.blade.php +++ b/resources/views/locations/edit.blade.php @@ -21,6 +21,17 @@ + +
+ +
+ {!! Form::select('manager_id', $manager_list , Input::old('manager_id', $item->manager_id), array('class'=>'select2 parent', 'style'=>'width:350px')) !!} + {!! $errors->first('manager_id', ' :message') !!} +
+
+
+ +
+
+ + + + + + + + + @foreach ($user->managedLocations as $location) + + + + + @endforeach + +
{{ trans('general.name') }}{{ trans('general.date') }}
{!! $location->present()->nameUrl() !!}{{ $location->created_at }}
+
+