mirror of
https://github.com/snipe/snipe-it.git
synced 2025-02-21 03:15:45 -08:00
Merge branch 'develop'
This commit is contained in:
commit
2f6c0cee59
|
@ -800,6 +800,15 @@
|
|||
"contributions": [
|
||||
"code"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "techincolor",
|
||||
"name": "Danielle",
|
||||
"avatar_url": "https://avatars1.githubusercontent.com/u/14809698?v=4",
|
||||
"profile": "https://github.com/techincolor",
|
||||
"contributions": [
|
||||
"doc"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -12,7 +12,7 @@ APP_LOCALE=en
|
|||
# REQUIRED: DATABASE SETTINGS
|
||||
# --------------------------------------------
|
||||
DB_CONNECTION=mysql
|
||||
DB_HOST=localhost
|
||||
DB_HOST=127.0.0.1
|
||||
DB_DATABASE=null
|
||||
DB_USERNAME=null
|
||||
DB_PASSWORD=null
|
||||
|
|
7
.gitignore
vendored
7
.gitignore
vendored
|
@ -28,8 +28,15 @@ public/uploads/logo.svg
|
|||
public/uploads/models/*
|
||||
public/uploads/suppliers/*
|
||||
public/uploads/accessories/*
|
||||
public/uploads/locations/*
|
||||
public/uploads/manufacturers/*
|
||||
public/uploads/components/*
|
||||
public/uploads/consumables/*
|
||||
public/uploads/companies/*
|
||||
public/uploads/categories/*
|
||||
public/uploads/users/*
|
||||
storage/app/private_uploads/users/*
|
||||
public/uploads/departments/*
|
||||
storage/debugbar/
|
||||
storage/dumps/*
|
||||
storage/laravel-backups
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
[](https://travis-ci.org/snipe/snipe-it) [](http://waffle.io/snipe/snipe-it) []() [](https://crowdin.com/project/snipe-it) [](https://gitter.im/snipe/snipe-it?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [](https://hub.docker.com/r/snipe/snipe-it/) [](https://twitter.com/snipeyhead) [](https://zenhub.io) [](https://www.codacy.com/app/snipe/snipe-it?utm_source=github.com&utm_medium=referral&utm_content=snipe/snipe-it&utm_campaign=Badge_Grade)
|
||||
[](#contributors)
|
||||
[](#contributors)
|
||||
|
||||
|
||||
## Snipe-IT - Open Source Asset Management System
|
||||
|
@ -68,7 +68,7 @@ Thanks goes to all of these wonderful people ([emoji key](https://github.com/ken
|
|||
| [<img src="https://avatars2.githubusercontent.com/u/857740?v=3" width="110px;"/><br /><sub>Gil Rutkowski</sub>](http://FlashingCursor.com)<br />[💻](https://github.com/snipe/snipe-it/commits?author=flashingcursor "Code") | [<img src="https://avatars3.githubusercontent.com/u/129360?v=3" width="110px;"/><br /><sub>Desmond Morris</sub>](http://www.desmondmorris.com)<br />[💻](https://github.com/snipe/snipe-it/commits?author=desmondmorris "Code") | [<img src="https://avatars2.githubusercontent.com/u/52936?v=3" width="110px;"/><br /><sub>Nick Peelman</sub>](http://peelman.us)<br />[💻](https://github.com/snipe/snipe-it/commits?author=peelman "Code") | [<img src="https://avatars0.githubusercontent.com/u/53161?v=3" width="110px;"/><br /><sub>Abraham Vegh</sub>](https://abrahamvegh.com)<br />[💻](https://github.com/snipe/snipe-it/commits?author=abrahamvegh "Code") | [<img src="https://avatars0.githubusercontent.com/u/2818680?v=3" width="110px;"/><br /><sub>Mohamed Rashid</sub>](https://github.com/rashivkp)<br />[📖](https://github.com/snipe/snipe-it/commits?author=rashivkp "Documentation") | [<img src="https://avatars3.githubusercontent.com/u/1509456?v=3" width="110px;"/><br /><sub>Kasey</sub>](http://hinchk.github.io)<br />[💻](https://github.com/snipe/snipe-it/commits?author=HinchK "Code") | [<img src="https://avatars2.githubusercontent.com/u/10522541?v=3" width="110px;"/><br /><sub>Brett</sub>](https://github.com/BrettFagerlund)<br />[⚠️](https://github.com/snipe/snipe-it/commits?author=BrettFagerlund "Tests") |
|
||||
| [<img src="https://avatars2.githubusercontent.com/u/16108587?v=3" width="110px;"/><br /><sub>Jason Spriggs</sub>](http://jasonspriggs.com)<br />[💻](https://github.com/snipe/snipe-it/commits?author=jasonspriggs "Code") | [<img src="https://avatars2.githubusercontent.com/u/1134568?v=3" width="110px;"/><br /><sub>Nate Felton</sub>](http://n8felton.wordpress.com)<br />[💻](https://github.com/snipe/snipe-it/commits?author=n8felton "Code") | [<img src="https://avatars2.githubusercontent.com/u/14036694?v=3" width="110px;"/><br /><sub>Manasses Ferreira</sub>](http://homepages.dcc.ufmg.br/~manassesferreira)<br />[💻](https://github.com/snipe/snipe-it/commits?author=manassesferreira "Code") | [<img src="https://avatars0.githubusercontent.com/u/15913949?v=3" width="110px;"/><br /><sub>Steve</sub>](https://github.com/steveelwood)<br />[⚠️](https://github.com/snipe/snipe-it/commits?author=steveelwood "Tests") | [<img src="https://avatars1.githubusercontent.com/u/3361683?v=3" width="110px;"/><br /><sub>matc</sub>](http://twitter.com/matc)<br />[⚠️](https://github.com/snipe/snipe-it/commits?author=matc "Tests") | [<img src="https://avatars3.githubusercontent.com/u/7405702?v=3" width="110px;"/><br /><sub>Cole R. Davis</sub>](http://www.davisracingteam.com)<br />[⚠️](https://github.com/snipe/snipe-it/commits?author=VanillaNinjaD "Tests") | [<img src="https://avatars2.githubusercontent.com/u/10167681?v=3" width="110px;"/><br /><sub>gibsonjoshua55</sub>](https://github.com/gibsonjoshua55)<br />[💻](https://github.com/snipe/snipe-it/commits?author=gibsonjoshua55 "Code") |
|
||||
| [<img src="https://avatars2.githubusercontent.com/u/2809241?v=4" width="110px;"/><br /><sub>Robin Temme</sub>](https://github.com/zwerch)<br />[💻](https://github.com/snipe/snipe-it/commits?author=zwerch "Code") | [<img src="https://avatars0.githubusercontent.com/u/6961695?v=4" width="110px;"/><br /><sub>Iman</sub>](https://github.com/imanghafoori1)<br />[💻](https://github.com/snipe/snipe-it/commits?author=imanghafoori1 "Code") | [<img src="https://avatars1.githubusercontent.com/u/6551003?v=4" width="110px;"/><br /><sub>Richard Hofman</sub>](https://github.com/richardhofman6)<br />[💻](https://github.com/snipe/snipe-it/commits?author=richardhofman6 "Code") | [<img src="https://avatars0.githubusercontent.com/u/3697569?v=4" width="110px;"/><br /><sub>gizzmojr</sub>](https://github.com/gizzmojr)<br />[💻](https://github.com/snipe/snipe-it/commits?author=gizzmojr "Code") | [<img src="https://avatars3.githubusercontent.com/u/404729?v=4" width="110px;"/><br /><sub>Jenny Li</sub>](https://github.com/imjennyli)<br />[📖](https://github.com/snipe/snipe-it/commits?author=imjennyli "Documentation") | [<img src="https://avatars0.githubusercontent.com/u/869227?v=4" width="110px;"/><br /><sub>Geoff Young</sub>](https://github.com/GeoffYoung)<br />[💻](https://github.com/snipe/snipe-it/commits?author=GeoffYoung "Code") | [<img src="https://avatars3.githubusercontent.com/u/1068477?v=4" width="110px;"/><br /><sub>Elliot Blackburn</sub>](http://www.elliotblackburn.com)<br />[📖](https://github.com/snipe/snipe-it/commits?author=BlueHatbRit "Documentation") |
|
||||
| [<img src="https://avatars1.githubusercontent.com/u/6357451?v=4" width="110px;"/><br /><sub>Tõnis Ormisson</sub>](http://andmemasin.eu)<br />[💻](https://github.com/snipe/snipe-it/commits?author=TonisOrmisson "Code") | [<img src="https://avatars0.githubusercontent.com/u/449411?v=4" width="110px;"/><br /><sub>Nicolai Essig</sub>](http://www.nicolai-essig.de)<br />[💻](https://github.com/snipe/snipe-it/commits?author=thakilla "Code") |
|
||||
| [<img src="https://avatars1.githubusercontent.com/u/6357451?v=4" width="110px;"/><br /><sub>Tõnis Ormisson</sub>](http://andmemasin.eu)<br />[💻](https://github.com/snipe/snipe-it/commits?author=TonisOrmisson "Code") | [<img src="https://avatars0.githubusercontent.com/u/449411?v=4" width="110px;"/><br /><sub>Nicolai Essig</sub>](http://www.nicolai-essig.de)<br />[💻](https://github.com/snipe/snipe-it/commits?author=thakilla "Code") | [<img src="https://avatars1.githubusercontent.com/u/14809698?v=4" width="110px;"/><br /><sub>Danielle</sub>](https://github.com/techincolor)<br />[📖](https://github.com/snipe/snipe-it/commits?author=techincolor "Documentation") |
|
||||
<!-- ALL-CONTRIBUTORS-LIST:END -->
|
||||
|
||||
This project follows the [all-contributors](https://github.com/kentcdodds/all-contributors) specification. Contributions of any kind welcome!
|
||||
|
|
|
@ -54,14 +54,9 @@ class AccessoriesController extends Controller
|
|||
public function create(Request $request)
|
||||
{
|
||||
$this->authorize('create', Accessory::class);
|
||||
// Show the page
|
||||
return view('accessories/edit')
|
||||
->with('item', new Accessory)
|
||||
->with('category_list', Helper::categoryList('accessory'))
|
||||
->with('company_list', Helper::companyList())
|
||||
->with('supplier_list', Helper::suppliersList())
|
||||
->with('location_list', Helper::locationsList())
|
||||
->with('manufacturer_list', Helper::manufacturerList());
|
||||
$category_type = 'accessory';
|
||||
return view('accessories/edit')->with('category_type', $category_type)
|
||||
->with('item', new Accessory);
|
||||
}
|
||||
|
||||
|
||||
|
@ -130,19 +125,15 @@ class AccessoriesController extends Controller
|
|||
*/
|
||||
public function edit(Request $request, $accessoryId = null)
|
||||
{
|
||||
// Check if the accessory exists
|
||||
if (is_null($item = Accessory::find($accessoryId))) {
|
||||
return redirect()->route('accessories.index')->with('error', trans('admin/accessories/message.does_not_exist'));
|
||||
|
||||
if ($item = Accessory::find($accessoryId)) {
|
||||
$this->authorize($item);
|
||||
$category_type = 'accessory';
|
||||
return view('accessories/edit', compact('item'))->with('category_type', $category_type);
|
||||
}
|
||||
|
||||
$this->authorize($item);
|
||||
return redirect()->route('accessories.index')->with('error', trans('admin/accessories/message.does_not_exist'));
|
||||
|
||||
return view('accessories/edit', compact('item'))
|
||||
->with('category_list', Helper::categoryList('accessory'))
|
||||
->with('company_list', Helper::companyList())
|
||||
->with('location_list', Helper::locationsList())
|
||||
->with('supplier_list', Helper::suppliersList())
|
||||
->with('manufacturer_list', Helper::manufacturerList());
|
||||
}
|
||||
|
||||
|
||||
|
@ -271,7 +262,7 @@ class AccessoriesController extends Controller
|
|||
$this->authorize('checkout', $accessory);
|
||||
|
||||
// Get the dropdown of users and then pass it to the checkout view
|
||||
return view('accessories/checkout', compact('accessory'))->with('users_list', Helper::usersList());
|
||||
return view('accessories/checkout', compact('accessory'));
|
||||
|
||||
}
|
||||
|
||||
|
@ -296,7 +287,7 @@ class AccessoriesController extends Controller
|
|||
$this->authorize('checkout', $accessory);
|
||||
|
||||
if (!$user = User::find(Input::get('assigned_to'))) {
|
||||
return redirect()->route('accessories.index')->with('error', trans('admin/accessories/message.not_found'));
|
||||
return redirect()->route('checkout/accessory', $accessory->id)->with('error', trans('admin/accessories/message.checkout.user_does_not_exist'));
|
||||
}
|
||||
|
||||
// Update the accessory data
|
||||
|
@ -323,6 +314,7 @@ class AccessoriesController extends Controller
|
|||
$data['note'] = $logaction->note;
|
||||
$data['require_acceptance'] = $accessory->requireAcceptance();
|
||||
// TODO: Port this to new mail notifications
|
||||
|
||||
if ((($accessory->requireAcceptance()=='1') || ($accessory->getEula())) && ($user->email!='')) {
|
||||
|
||||
Mail::send('emails.accept-accessory', $data, function ($m) use ($user) {
|
||||
|
|
|
@ -100,8 +100,6 @@ class AccessoriesController extends Controller
|
|||
{
|
||||
$this->authorize('view', Accessory::class);
|
||||
$accessory = Accessory::findOrFail($id);
|
||||
$accessory_users = $accessory->users;
|
||||
|
||||
return (new AccessoriesTransformer)->transformAccessory($accessory);
|
||||
}
|
||||
|
||||
|
|
|
@ -8,6 +8,7 @@ use App\Helpers\Helper;
|
|||
use Illuminate\Http\Request;
|
||||
use App\Http\Transformers\AssetModelsTransformer;
|
||||
use App\Http\Transformers\AssetsTransformer;
|
||||
use App\Http\Transformers\SelectlistTransformer;
|
||||
|
||||
|
||||
/**
|
||||
|
@ -158,8 +159,51 @@ class AssetModelsController extends Controller
|
|||
return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/models/message.assoc_users')));
|
||||
}
|
||||
|
||||
if ($assetmodel->image) {
|
||||
try {
|
||||
unlink(public_path().'/uploads/models/'.$assetmodel->image);
|
||||
} catch (\Exception $e) {
|
||||
\Log::error($e);
|
||||
}
|
||||
}
|
||||
|
||||
$assetmodel->delete();
|
||||
return response()->json(Helper::formatStandardApiResponse('success', null, trans('admin/assetmodels/message.delete.success')));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a paginated collection for the select2 menus
|
||||
*
|
||||
* @author [A. Gianotto] [<snipe@snipe.net>]
|
||||
* @since [v4.0.16]
|
||||
* @see \App\Http\Transformers\SelectlistTransformer
|
||||
*
|
||||
*/
|
||||
public function selectlist(Request $request)
|
||||
{
|
||||
$this->authorize('view', AssetModel::class);
|
||||
|
||||
$assetmodels = AssetModel::select([
|
||||
'models.id',
|
||||
'models.name',
|
||||
'models.image',
|
||||
'models.model_number',
|
||||
]);
|
||||
|
||||
|
||||
if ($request->has('search')) {
|
||||
$assetmodels = $assetmodels->where('models.name', 'LIKE', '%'.$request->get('search').'%')
|
||||
->orWhere('models.model_number', 'LIKE', '%'.$request->get('search').'%');
|
||||
}
|
||||
$assetmodels = $assetmodels->paginate(50);
|
||||
|
||||
foreach ($assetmodels as $assetmodel) {
|
||||
$assetmodel->use_text = $assetmodel->present()->modelName;
|
||||
$assetmodel->use_image = ($assetmodel->image) ? url('/').'/uploads/models/'.$assetmodel->image : null;
|
||||
}
|
||||
|
||||
return (new SelectlistTransformer)->transformSelectlist($assetmodels);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -30,6 +30,7 @@ use Str;
|
|||
use TCPDF;
|
||||
use Validator;
|
||||
use View;
|
||||
use App\Http\Transformers\SelectlistTransformer;
|
||||
|
||||
|
||||
/**
|
||||
|
@ -69,7 +70,8 @@ class AssetsController extends Controller
|
|||
'created_at',
|
||||
'updated_at',
|
||||
'purchase_date',
|
||||
'purchase_cost'
|
||||
'purchase_cost',
|
||||
'warranty_months',
|
||||
];
|
||||
|
||||
$filter = array();
|
||||
|
@ -84,7 +86,7 @@ class AssetsController extends Controller
|
|||
}
|
||||
|
||||
$assets = Company::scopeCompanyables(Asset::select('assets.*'))->with(
|
||||
'assetloc', 'assetstatus', 'defaultLoc', 'assetlog', 'company',
|
||||
'location', 'assetstatus', 'assetlog', 'company', 'defaultLoc','assignedTo',
|
||||
'model.category', 'model.manufacturer', 'model.fieldset','supplier');
|
||||
|
||||
|
||||
|
@ -255,12 +257,54 @@ class AssetsController extends Controller
|
|||
*/
|
||||
public function show($id)
|
||||
{
|
||||
if ($asset = Asset::withTrashed()->find($id)) {
|
||||
if ($asset = Asset::with('assetstatus')->with('assignedTo')->withTrashed()->findOrFail($id)) {
|
||||
$this->authorize('view', $asset);
|
||||
return (new AssetsTransformer)->transformAsset($asset);
|
||||
}
|
||||
|
||||
return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/hardware/message.does_not_exist')), 200);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Gets a paginated collection for the select2 menus
|
||||
*
|
||||
* @author [A. Gianotto] [<snipe@snipe.net>]
|
||||
* @since [v4.0.16]
|
||||
* @see \App\Http\Transformers\SelectlistTransformer
|
||||
*
|
||||
*/
|
||||
public function selectlist(Request $request)
|
||||
{
|
||||
$this->authorize('view', Asset::class);
|
||||
|
||||
$assets = Company::scopeCompanyables(Asset::select([
|
||||
'assets.id',
|
||||
'assets.name',
|
||||
'assets.asset_tag',
|
||||
'assets.model_id',
|
||||
]))->with('model')->RTD();
|
||||
|
||||
|
||||
if ($request->has('search')) {
|
||||
$assets = $assets->where('assets.name', 'LIKE', '%'.$request->get('search').'%')
|
||||
->orWhere('assets.asset_tag', 'LIKE', '%'.$request->get('search').'%')
|
||||
->join('models AS assets_models',function ($join) use ($request) {
|
||||
$join->on('assets_models.id', "=", "assets.model_id");
|
||||
})->orWhere('assets_models.name','LIKE','%'.$request->get('search').'%');
|
||||
}
|
||||
|
||||
$assets = $assets->paginate(50);
|
||||
|
||||
// Loop through and set some custom properties for the transformer to use.
|
||||
// This lets us have more flexibility in special cases like assets, where
|
||||
// they may not have a ->name value but we want to display something anyway
|
||||
foreach ($assets as $asset) {
|
||||
$asset->use_text = $asset->present()->fullName;
|
||||
$asset->use_image = ($asset->getImageUrl()) ? $asset->getImageUrl() : null;
|
||||
}
|
||||
|
||||
return (new SelectlistTransformer)->transformSelectlist($assets);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -305,12 +349,12 @@ class AssetsController extends Controller
|
|||
$model = AssetModel::find($request->get('model_id'));
|
||||
if ($model->fieldset) {
|
||||
foreach ($model->fieldset->fields as $field) {
|
||||
$asset->{$field->convertUnicodeDbSlug()} = e($request->input($field->convertUnicodeDbSlug()));
|
||||
$asset->{$field->convertUnicodeDbSlug()} = e($request->input($field->convertUnicodeDbSlug(), null));
|
||||
}
|
||||
}
|
||||
|
||||
if ($asset->save()) {
|
||||
$asset->logCreate();
|
||||
|
||||
if ($request->get('assigned_user')) {
|
||||
$target = User::find(request('assigned_user'));
|
||||
} elseif ($request->get('assigned_asset')) {
|
||||
|
@ -481,11 +525,23 @@ class AssetsController extends Controller
|
|||
return response()->json(Helper::formatStandardApiResponse('error', $error_payload, 'No valid checkout target specified for asset '.e($asset->asset_tag).'.'));
|
||||
}
|
||||
|
||||
|
||||
|
||||
$checkout_at = request('checkout_at', date("Y-m-d H:i:s"));
|
||||
$expected_checkin = request('expected_checkin', null);
|
||||
$note = request('note', null);
|
||||
$asset_name = request('name', null);
|
||||
|
||||
// Set the location ID to the RTD location id if there is one
|
||||
if ($asset->rtd_location_id!='') {
|
||||
$asset->location_id = $target->rtd_location_id;
|
||||
}
|
||||
|
||||
// Overwrite that if the target has a location ID though
|
||||
if ($target->location_id!='') {
|
||||
$asset->location_id = $target->location_id;
|
||||
}
|
||||
|
||||
|
||||
if ($asset->checkOut($target, Auth::user(), $checkout_at, $expected_checkin, $note, $asset_name)) {
|
||||
return response()->json(Helper::formatStandardApiResponse('success', ['asset'=> e($asset->asset_tag)], trans('admin/hardware/message.checkout.success')));
|
||||
|
|
|
@ -7,6 +7,7 @@ use App\Http\Controllers\Controller;
|
|||
use App\Helpers\Helper;
|
||||
use App\Models\Category;
|
||||
use App\Http\Transformers\CategoriesTransformer;
|
||||
use App\Http\Transformers\SelectlistTransformer;
|
||||
|
||||
class CategoriesController extends Controller
|
||||
{
|
||||
|
@ -20,9 +21,9 @@ class CategoriesController extends Controller
|
|||
public function index(Request $request)
|
||||
{
|
||||
$this->authorize('view', Category::class);
|
||||
$allowed_columns = ['id', 'name','category_type','use_default_eula','eula_text', 'require_acceptance','checkin_email', 'assets_count', 'accessories_count', 'consumables_count', 'components_count'];
|
||||
$allowed_columns = ['id', 'name','category_type','use_default_eula','eula_text', 'require_acceptance','checkin_email', 'assets_count', 'accessories_count', 'consumables_count', 'components_count', 'image'];
|
||||
|
||||
$categories = Category::select(['id', 'created_at', 'updated_at', 'name','category_type','use_default_eula','eula_text', 'require_acceptance','checkin_email'])
|
||||
$categories = Category::select(['id', 'created_at', 'updated_at', 'name','category_type','use_default_eula','eula_text', 'require_acceptance','checkin_email','image'])
|
||||
->withCount('assets', 'accessories', 'consumables', 'components');
|
||||
|
||||
if ($request->has('search')) {
|
||||
|
@ -128,4 +129,41 @@ class CategoriesController extends Controller
|
|||
return response()->json(Helper::formatStandardApiResponse('success', null, trans('admin/categories/message.delete.success')));
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Gets a paginated collection for the select2 menus
|
||||
*
|
||||
* @author [A. Gianotto] [<snipe@snipe.net>]
|
||||
* @since [v4.0.16]
|
||||
* @see \App\Http\Transformers\SelectlistTransformer
|
||||
*
|
||||
*/
|
||||
public function selectlist(Request $request, $category_type = 'asset')
|
||||
{
|
||||
$this->authorize('view', Categories::class);
|
||||
|
||||
$categories = Category::select([
|
||||
'id',
|
||||
'name',
|
||||
'image',
|
||||
]);
|
||||
|
||||
if ($request->has('search')) {
|
||||
$categories = $categories->where('name', 'LIKE', '%'.$request->get('search').'%');
|
||||
}
|
||||
|
||||
$categories = $categories->where('category_type', $category_type)->orderBy('name', 'ASC')->paginate(50);
|
||||
|
||||
// Loop through and set some custom properties for the transformer to use.
|
||||
// This lets us have more flexibility in special cases like assets, where
|
||||
// they may not have a ->name value but we want to display something anyway
|
||||
foreach ($categories as $category) {
|
||||
$category->use_image = ($category->image) ? url('/').'/uploads/categories/'.$category->image : null;
|
||||
}
|
||||
|
||||
return (new SelectlistTransformer)->transformSelectlist($categories);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@ use Illuminate\Http\Request;
|
|||
use App\Http\Controllers\Controller;
|
||||
use App\Helpers\Helper;
|
||||
use App\Models\Company;
|
||||
use App\Http\Transformers\SelectlistTransformer;
|
||||
|
||||
class CompaniesController extends Controller
|
||||
{
|
||||
|
@ -141,4 +142,38 @@ class CompaniesController extends Controller
|
|||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a paginated collection for the select2 menus
|
||||
*
|
||||
* @author [A. Gianotto] [<snipe@snipe.net>]
|
||||
* @since [v4.0.16]
|
||||
* @see \App\Http\Transformers\SelectlistTransformer
|
||||
*
|
||||
*/
|
||||
public function selectlist(Request $request)
|
||||
{
|
||||
$this->authorize('view', Company::class);
|
||||
|
||||
$companies = Company::select([
|
||||
'companies.id',
|
||||
'companies.name',
|
||||
'companies.image',
|
||||
]);
|
||||
|
||||
if ($request->has('search')) {
|
||||
$companies = $companies->where('companies.name', 'LIKE', '%'.$request->get('search').'%');
|
||||
}
|
||||
|
||||
$companies = $companies->orderBy('name', 'ASC')->paginate(50);
|
||||
|
||||
// Loop through and set some custom properties for the transformer to use.
|
||||
// This lets us have more flexibility in special cases like assets, where
|
||||
// they may not have a ->name value but we want to display something anyway
|
||||
foreach ($companies as $company) {
|
||||
$company->use_image = ($company->image) ? url('/').'/uploads/companies/'.$company->image : null;
|
||||
}
|
||||
|
||||
return (new SelectlistTransformer)->transformSelectlist($companies);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -34,7 +34,7 @@ class ComponentsController extends Controller
|
|||
$offset = request('offset', 0);
|
||||
$limit = request('limit', 50);
|
||||
|
||||
$allowed_columns = ['id','name','min_amt','order_number','serial','purchase_date','purchase_cost','company','category','qty','location'];
|
||||
$allowed_columns = ['id','name','min_amt','order_number','serial','purchase_date','purchase_cost','company','category','qty','location','image'];
|
||||
$order = $request->input('order') === 'asc' ? 'asc' : 'desc';
|
||||
$sort = in_array($request->input('sort'), $allowed_columns) ? $request->input('sort') : 'created_at';
|
||||
|
||||
|
|
|
@ -43,7 +43,7 @@ class ConsumablesController extends Controller
|
|||
|
||||
$offset = request('offset', 0);
|
||||
$limit = request('limit', 50);
|
||||
$allowed_columns = ['id','name','order_number','min_amt','purchase_date','purchase_cost','company','category','model_number', 'item_no', 'manufacturer','location','qty'];
|
||||
$allowed_columns = ['id','name','order_number','min_amt','purchase_date','purchase_cost','company','category','model_number', 'item_no', 'manufacturer','location','qty','image'];
|
||||
$order = $request->input('order') === 'asc' ? 'asc' : 'desc';
|
||||
$sort = in_array($request->input('sort'), $allowed_columns) ? $request->input('sort') : 'created_at';
|
||||
|
||||
|
|
|
@ -57,15 +57,15 @@ class CustomFieldsController extends Controller
|
|||
*/
|
||||
public function destroy($field_id)
|
||||
{
|
||||
$field = CustomField::find($field_id);
|
||||
$field = CustomField::findOrFail($field_id);
|
||||
|
||||
if ($field->fieldset->count() >0) {
|
||||
return response()->json(Helper::formatStandardApiResponse('error', null, 'Field is in use.'));
|
||||
} else {
|
||||
$field->delete();
|
||||
return response()->json(Helper::formatStandardApiResponse('success', null, trans('admin/custom_fields/message.field.delete.success')));
|
||||
|
||||
}
|
||||
|
||||
$field->delete();
|
||||
return response()->json(Helper::formatStandardApiResponse('success', null, trans('admin/custom_fields/message.field.delete.success')));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -8,6 +8,7 @@ use App\Models\Department;
|
|||
use App\Http\Transformers\DepartmentsTransformer;
|
||||
use App\Helpers\Helper;
|
||||
use Auth;
|
||||
use App\Http\Transformers\SelectlistTransformer;
|
||||
|
||||
class DepartmentsController extends Controller
|
||||
{
|
||||
|
@ -21,7 +22,7 @@ class DepartmentsController extends Controller
|
|||
public function index(Request $request)
|
||||
{
|
||||
$this->authorize('view', Department::class);
|
||||
$allowed_columns = ['id','name'];
|
||||
$allowed_columns = ['id','name','image'];
|
||||
|
||||
$departments = Department::select([
|
||||
'id',
|
||||
|
@ -30,7 +31,8 @@ class DepartmentsController extends Controller
|
|||
'company_id',
|
||||
'manager_id',
|
||||
'created_at',
|
||||
'updated_at'
|
||||
'updated_at',
|
||||
'image'
|
||||
])->with('users')->with('location')->with('manager')->with('company')->withCount('users');
|
||||
|
||||
if ($request->has('search')) {
|
||||
|
@ -110,4 +112,39 @@ class DepartmentsController extends Controller
|
|||
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a paginated collection for the select2 menus
|
||||
*
|
||||
* @author [A. Gianotto] [<snipe@snipe.net>]
|
||||
* @since [v4.0.16]
|
||||
* @see \App\Http\Transformers\SelectlistTransformer
|
||||
*
|
||||
*/
|
||||
public function selectlist(Request $request)
|
||||
{
|
||||
$this->authorize('view', Department::class);
|
||||
|
||||
$departments = Department::select([
|
||||
'id',
|
||||
'name',
|
||||
'image',
|
||||
]);
|
||||
|
||||
if ($request->has('search')) {
|
||||
$departments = $departments->where('name', 'LIKE', '%'.$request->get('search').'%');
|
||||
}
|
||||
|
||||
$departments = $departments->orderBy('name', 'ASC')->paginate(50);
|
||||
|
||||
// Loop through and set some custom properties for the transformer to use.
|
||||
// This lets us have more flexibility in special cases like assets, where
|
||||
// they may not have a ->name value but we want to display something anyway
|
||||
foreach ($departments as $department) {
|
||||
$department->use_image = ($department->image) ? url('/').'/uploads/departments/'.$department->image : null;
|
||||
}
|
||||
|
||||
return (new SelectlistTransformer)->transformSelectlist($departments);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@ use App\Http\Controllers\Controller;
|
|||
use App\Helpers\Helper;
|
||||
use App\Models\Location;
|
||||
use App\Http\Transformers\LocationsTransformer;
|
||||
use App\Http\Transformers\SelectlistTransformer;
|
||||
|
||||
class LocationsController extends Controller
|
||||
{
|
||||
|
@ -20,8 +21,10 @@ class LocationsController extends Controller
|
|||
public function index(Request $request)
|
||||
{
|
||||
$this->authorize('view', Location::class);
|
||||
$allowed_columns = ['id','name','address','address2','city','state','country','zip','created_at',
|
||||
'updated_at','parent_id', 'manager_id'];
|
||||
$allowed_columns = [
|
||||
'id','name','address','address2','city','state','country','zip','created_at',
|
||||
'updated_at','parent_id', 'manager_id','image',
|
||||
'rtd_assets_count','users_count','assets_count'];
|
||||
|
||||
$locations = Location::with('parent', 'manager', 'childLocations')->select([
|
||||
'locations.id',
|
||||
|
@ -36,9 +39,9 @@ class LocationsController extends Controller
|
|||
'locations.manager_id',
|
||||
'locations.created_at',
|
||||
'locations.updated_at',
|
||||
'locations.image',
|
||||
'locations.currency'
|
||||
])->withCount('locationAssets')
|
||||
->withCount('assignedAssets')
|
||||
])->withCount('rtd_assets')
|
||||
->withCount('assets')
|
||||
->withCount('users');
|
||||
|
||||
|
@ -138,4 +141,41 @@ class LocationsController extends Controller
|
|||
$location->delete();
|
||||
return response()->json(Helper::formatStandardApiResponse('success', null, trans('admin/locations/message.delete.success')));
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a paginated collection for the select2 menus
|
||||
*
|
||||
* @author [A. Gianotto] [<snipe@snipe.net>]
|
||||
* @since [v4.0.16]
|
||||
* @see \App\Http\Transformers\SelectlistTransformer
|
||||
*
|
||||
*/
|
||||
public function selectlist(Request $request)
|
||||
{
|
||||
$this->authorize('view', Location::class);
|
||||
|
||||
$locations = Location::select([
|
||||
'locations.id',
|
||||
'locations.name',
|
||||
'locations.image',
|
||||
]);
|
||||
|
||||
if ($request->has('search')) {
|
||||
$locations = $locations->where('locations.name', 'LIKE', '%'.$request->get('search').'%');
|
||||
}
|
||||
|
||||
$locations = $locations->orderBy('name', 'ASC')->paginate(50);
|
||||
|
||||
// Loop through and set some custom properties for the transformer to use.
|
||||
// This lets us have more flexibility in special cases like assets, where
|
||||
// they may not have a ->name value but we want to display something anyway
|
||||
foreach ($locations as $location) {
|
||||
$location->use_text = $location->name;
|
||||
$location->use_image = ($location->image) ? url('/').'/uploads/locations/'.$location->image : null;
|
||||
}
|
||||
|
||||
return (new SelectlistTransformer)->transformSelectlist($locations);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -8,6 +8,7 @@ use App\Helpers\Helper;
|
|||
use App\Models\Manufacturer;
|
||||
use App\Http\Transformers\DatatablesTransformer;
|
||||
use App\Http\Transformers\ManufacturersTransformer;
|
||||
use App\Http\Transformers\SelectlistTransformer;
|
||||
|
||||
class ManufacturersController extends Controller
|
||||
{
|
||||
|
@ -21,10 +22,10 @@ class ManufacturersController extends Controller
|
|||
public function index(Request $request)
|
||||
{
|
||||
$this->authorize('view', Manufacturer::class);
|
||||
$allowed_columns = ['id','name','url','support_url','support_email','support_phone','created_at','updated_at'];
|
||||
$allowed_columns = ['id','name','url','support_url','support_email','support_phone','created_at','updated_at','image'];
|
||||
|
||||
$manufacturers = Manufacturer::select(
|
||||
array('id','name','url','support_url','support_email','support_phone','created_at','updated_at')
|
||||
array('id','name','url','support_url','support_email','support_phone','created_at','updated_at','image')
|
||||
)->withCount('assets')->withCount('licenses')->withCount('consumables')->withCount('accessories');
|
||||
|
||||
|
||||
|
@ -120,4 +121,40 @@ class ManufacturersController extends Controller
|
|||
return response()->json(Helper::formatStandardApiResponse('success', null, trans('admin/manufacturers/message.delete.success')));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a paginated collection for the select2 menus
|
||||
*
|
||||
* @author [A. Gianotto] [<snipe@snipe.net>]
|
||||
* @since [v4.0.16]
|
||||
* @see \App\Http\Transformers\SelectlistTransformer
|
||||
*
|
||||
*/
|
||||
public function selectlist(Request $request)
|
||||
{
|
||||
$this->authorize('view', Manufacturers::class);
|
||||
|
||||
$manufacturers = Manufacturer::select([
|
||||
'id',
|
||||
'name',
|
||||
'image',
|
||||
]);
|
||||
|
||||
if ($request->has('search')) {
|
||||
$manufacturers = $manufacturers->where('name', 'LIKE', '%'.$request->get('search').'%');
|
||||
}
|
||||
|
||||
$manufacturers = $manufacturers->orderBy('name', 'ASC')->paginate(50);
|
||||
|
||||
// Loop through and set some custom properties for the transformer to use.
|
||||
// This lets us have more flexibility in special cases like assets, where
|
||||
// they may not have a ->name value but we want to display something anyway
|
||||
foreach ($manufacturers as $manufacturer) {
|
||||
$manufacturer->use_text = $manufacturer->name;
|
||||
$manufacturer->use_image = ($manufacturer->image) ? url('/').'/uploads/manufacturers/'.$manufacturer->image : null;
|
||||
}
|
||||
|
||||
return (new SelectlistTransformer)->transformSelectlist($manufacturers);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,73 +11,8 @@ use Mail;
|
|||
|
||||
class SettingsController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
* @author [A. Gianotto] [<snipe@snipe.net>]
|
||||
* @since [v4.0]
|
||||
*
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
* @author [A. Gianotto] [<snipe@snipe.net>]
|
||||
* @since [v4.0]
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*
|
||||
* @author [A. Gianotto] [<snipe@snipe.net>]
|
||||
* @param int $id
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function show($id)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*
|
||||
* @author [A. Gianotto] [<snipe@snipe.net>]
|
||||
* @since [v4.0]
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param int $id
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function update(Request $request, $id)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*
|
||||
* @author [A. Gianotto] [<snipe@snipe.net>]
|
||||
* @since [v4.0]
|
||||
* @param int $id
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function destroy($id)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
public function ldaptest()
|
||||
{
|
||||
|
||||
|
|
|
@ -7,6 +7,8 @@ use App\Http\Controllers\Controller;
|
|||
use App\Helpers\Helper;
|
||||
use App\Models\Supplier;
|
||||
use App\Http\Transformers\SuppliersTransformer;
|
||||
use App\Http\Transformers\SelectlistTransformer;
|
||||
|
||||
|
||||
class SuppliersController extends Controller
|
||||
{
|
||||
|
@ -23,7 +25,7 @@ class SuppliersController extends Controller
|
|||
$allowed_columns = ['id','name','address','phone','contact','fax','email','image','assets_count','licenses_count', 'accessories_count'];
|
||||
|
||||
$suppliers = Supplier::select(
|
||||
array('id','name','address','address2','city','state','country','fax', 'phone','email','contact','created_at','updated_at','deleted_at')
|
||||
array('id','name','address','address2','city','state','country','fax', 'phone','email','contact','created_at','updated_at','deleted_at','image')
|
||||
)->withCount('assets')->withCount('licenses')->withCount('accessories')->whereNull('deleted_at');
|
||||
|
||||
|
||||
|
@ -133,4 +135,41 @@ class SuppliersController extends Controller
|
|||
return response()->json(Helper::formatStandardApiResponse('success', null, trans('admin/suppliers/message.delete.success')));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a paginated collection for the select2 menus
|
||||
*
|
||||
* @author [A. Gianotto] [<snipe@snipe.net>]
|
||||
* @since [v4.0.16]
|
||||
* @see \App\Http\Transformers\SelectlistTransformer
|
||||
*
|
||||
*/
|
||||
public function selectlist(Request $request)
|
||||
{
|
||||
$this->authorize('view', Supplier::class);
|
||||
|
||||
$suppliers = Supplier::select([
|
||||
'id',
|
||||
'name',
|
||||
'image',
|
||||
]);
|
||||
|
||||
if ($request->has('search')) {
|
||||
$suppliers = $suppliers->where('locations.name', 'LIKE', '%'.$request->get('search').'%');
|
||||
}
|
||||
|
||||
$suppliers = $suppliers->orderBy('name', 'ASC')->paginate(50);
|
||||
|
||||
// Loop through and set some custom properties for the transformer to use.
|
||||
// This lets us have more flexibility in special cases like assets, where
|
||||
// they may not have a ->name value but we want to display something anyway
|
||||
foreach ($suppliers as $supplier) {
|
||||
$supplier->use_text = $supplier->name;
|
||||
$supplier->use_image = ($supplier->image) ? url('/').'/uploads/suppliers/'.$supplier->image : null;
|
||||
}
|
||||
|
||||
return (new SelectlistTransformer)->transformSelectlist($suppliers);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@ use App\Helpers\Helper;
|
|||
use App\Http\Requests\SaveUserRequest;
|
||||
use App\Models\Asset;
|
||||
use App\Http\Transformers\AssetsTransformer;
|
||||
use App\Http\Transformers\SelectlistTransformer;
|
||||
|
||||
class UsersController extends Controller
|
||||
{
|
||||
|
@ -33,6 +34,11 @@ class UsersController extends Controller
|
|||
'users.jobtitle',
|
||||
'users.email',
|
||||
'users.phone',
|
||||
'users.address',
|
||||
'users.city',
|
||||
'users.state',
|
||||
'users.country',
|
||||
'users.zip',
|
||||
'users.username',
|
||||
'users.location_id',
|
||||
'users.manager_id',
|
||||
|
@ -47,7 +53,7 @@ class UsersController extends Controller
|
|||
'users.activated',
|
||||
'users.avatar',
|
||||
|
||||
])->with('manager', 'groups', 'userloc', 'company', 'department','throttle','assets','licenses','accessories','consumables')
|
||||
])->with('manager', 'groups', 'location', 'company', 'department','throttle','assets','licenses','accessories','consumables')
|
||||
->withCount('assets','licenses','accessories','consumables');
|
||||
$users = Company::scopeCompanyables($users);
|
||||
|
||||
|
@ -97,7 +103,8 @@ class UsersController extends Controller
|
|||
'last_name','first_name','email','jobtitle','username','employee_num',
|
||||
'assets','accessories', 'consumables','licenses','groups','activated','created_at',
|
||||
'two_factor_enrolled','two_factor_optin','last_login', 'assets_count', 'licenses_count',
|
||||
'consumables_count', 'accessories_count', 'phone'
|
||||
'consumables_count', 'accessories_count', 'phone', 'address', 'city', 'state',
|
||||
'country', 'zip'
|
||||
];
|
||||
|
||||
$sort = in_array($request->get('sort'), $allowed_columns) ? $request->get('sort') : 'first_name';
|
||||
|
@ -111,12 +118,12 @@ class UsersController extends Controller
|
|||
|
||||
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
* Gets a paginated collection for the select2 menus
|
||||
*
|
||||
* @author [A. Gianotto] [<snipe@snipe.net>]
|
||||
* @since [v4.0]
|
||||
* @since [v4.0.16]
|
||||
* @see \App\Http\Transformers\SelectlistTransformer
|
||||
*
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function selectlist(Request $request)
|
||||
{
|
||||
|
@ -137,15 +144,14 @@ class UsersController extends Controller
|
|||
$users = Company::scopeCompanyables($users);
|
||||
|
||||
if ($request->has('search')) {
|
||||
$users = $users->where('first_name', '=', '%'.$request->get('search').'%')
|
||||
$users = $users->where('first_name', 'LIKE', '%'.$request->get('search').'%')
|
||||
->orWhere('last_name', 'LIKE', '%'.$request->get('search').'%')
|
||||
->orWhere('username', 'LIKE', '%'.$request->get('search').'%')
|
||||
->orWhere('employee_num', '=', '%'.$request->get('search').'%');
|
||||
->orWhere('employee_num', 'LIKE', '%'.$request->get('search').'%');
|
||||
}
|
||||
|
||||
$users = $users->orderBy('last_name', 'asc');
|
||||
$users = $users->orderBy('last_name', 'asc')->orderBy('first_name', 'asc');
|
||||
$users = $users->paginate(50);
|
||||
$users_array = [];
|
||||
|
||||
foreach ($users as $user) {
|
||||
$name_str = '';
|
||||
|
@ -158,26 +164,12 @@ class UsersController extends Controller
|
|||
$name_str .= ' (#'.e($user->employee_num).')';
|
||||
}
|
||||
|
||||
$users_array[] =
|
||||
[
|
||||
'id' => $user->id,
|
||||
'text' => $name_str,
|
||||
'image' => ($user->present()->gravatar) ? $user->present()->gravatar : null,
|
||||
];
|
||||
$user->use_text = $name_str;
|
||||
$user->use_image = ($user->present()->gravatar) ? $user->present()->gravatar : null;
|
||||
}
|
||||
$results = [
|
||||
'items' => $users_array,
|
||||
'pagination' =>
|
||||
[
|
||||
'more' => ($users->currentPage() >= $users->lastPage()) ? false : true,
|
||||
'per_page' => $users->perPage()
|
||||
],
|
||||
'total_count' => $users->total(),
|
||||
'page' => $users->currentPage(),
|
||||
'page_count' => $users->lastPage()
|
||||
];
|
||||
|
||||
return $results;
|
||||
return (new SelectlistTransformer)->transformSelectlist($users);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -237,6 +229,9 @@ class UsersController extends Controller
|
|||
$user->password = bcrypt($request->input('password'));
|
||||
}
|
||||
|
||||
// Update the location of any assets checked out to this user
|
||||
Asset::where('assigned_type', User::class)
|
||||
->where('assigned_to', $user->id)->update(['location_id' => $request->input('location_id', null)]);
|
||||
|
||||
if ($user->save()) {
|
||||
return response()->json(Helper::formatStandardApiResponse('success', (new UsersTransformer)->transformUser($user), trans('admin/users/message.success.update')));
|
||||
|
@ -283,6 +278,5 @@ class UsersController extends Controller
|
|||
$this->authorize('view', User::class);
|
||||
$assets = Asset::where('assigned_to', '=', $id)->with('model')->get();
|
||||
return (new AssetsTransformer)->transformAssets($assets, $assets->count());
|
||||
// return response()->json($assets);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -115,8 +115,8 @@ class AssetMaintenancesController extends Controller
|
|||
);
|
||||
}
|
||||
|
||||
if (($maintenance->cost) && (isset($maintenance->asset)) && ($maintenance->asset->assetloc) && ($maintenance->asset->assetloc->currency!='')) {
|
||||
$maintenance_cost = $maintenance->asset->assetloc->currency.$maintenance->cost;
|
||||
if (($maintenance->cost) && (isset($maintenance->asset)) && ($maintenance->asset->location) && ($maintenance->asset->location->currency!='')) {
|
||||
$maintenance_cost = $maintenance->asset->location->currency.$maintenance->cost;
|
||||
} else {
|
||||
$maintenance_cost = $settings->default_currency.$maintenance->cost;
|
||||
}
|
||||
|
|
|
@ -35,7 +35,6 @@ class AssetModelsController extends Controller
|
|||
* the content for the accessories listing, which is generated in getDatatable.
|
||||
*
|
||||
* @author [A. Gianotto] [<snipe@snipe.net>]
|
||||
* @see AssetModelsController::getDatatable() method that generates the JSON response
|
||||
* @since [v1.0]
|
||||
* @return View
|
||||
*/
|
||||
|
@ -53,11 +52,9 @@ class AssetModelsController extends Controller
|
|||
*/
|
||||
public function create()
|
||||
{
|
||||
// Show the page
|
||||
return view('models/edit')
|
||||
->with('category_list', Helper::categoryList('asset'))
|
||||
$category_type = 'asset';
|
||||
return view('models/edit')->with('category_type',$category_type)
|
||||
->with('depreciation_list', Helper::depreciationList())
|
||||
->with('manufacturer_list', Helper::manufacturerList())
|
||||
->with('item', new AssetModel);
|
||||
}
|
||||
|
||||
|
@ -93,7 +90,7 @@ class AssetModelsController extends Controller
|
|||
if (Input::file('image')) {
|
||||
|
||||
$image = Input::file('image');
|
||||
$file_name = str_random(25) . "." . $image->getClientOriginalExtension();
|
||||
$file_name = slug($image->getClientOriginalName()) . "." . $image->getClientOriginalExtension();
|
||||
$path = public_path('uploads/models/');
|
||||
|
||||
if ($image->getClientOriginalExtension()!='svg') {
|
||||
|
@ -165,17 +162,15 @@ class AssetModelsController extends Controller
|
|||
*/
|
||||
public function edit($modelId = null)
|
||||
{
|
||||
// Check if the model exists
|
||||
if (is_null($item = AssetModel::find($modelId))) {
|
||||
// Redirect to the model management page
|
||||
return redirect()->route('models.index')->with('error', trans('admin/models/message.does_not_exist'));
|
||||
if ($item = AssetModel::find($modelId)) {
|
||||
$category_type = 'asset';
|
||||
$view = View::make('models/edit', compact('item','category_type'));
|
||||
$view->with('depreciation_list', Helper::depreciationList());
|
||||
return $view;
|
||||
}
|
||||
|
||||
$view = View::make('models/edit', compact('item'));
|
||||
$view->with('category_list', Helper::categoryList('asset'));
|
||||
$view->with('depreciation_list', Helper::depreciationList());
|
||||
$view->with('manufacturer_list', Helper::manufacturerList());
|
||||
return $view;
|
||||
return redirect()->route('models.index')->with('error', trans('admin/models/message.does_not_exist'));
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -213,9 +208,17 @@ class AssetModelsController extends Controller
|
|||
}
|
||||
|
||||
if (Input::file('image')) {
|
||||
|
||||
$image = Input::file('image');
|
||||
$file_name = str_random(25) . "." . $image->getClientOriginalExtension();
|
||||
$file_name = str_slug($image->getClientOriginalName()) . "." . $image->getClientOriginalExtension();
|
||||
$path = public_path('uploads/models/');
|
||||
$old_image = $path.$model->image;
|
||||
|
||||
try {
|
||||
unlink($old_image);
|
||||
} catch (\Exception $e) {
|
||||
\Log::error($e);
|
||||
}
|
||||
|
||||
if ($image->getClientOriginalExtension()!='svg') {
|
||||
Image::make($image->getRealPath())->resize(500, null, function ($constraint) {
|
||||
|
@ -259,6 +262,15 @@ class AssetModelsController extends Controller
|
|||
// Throw an error that this model is associated with assets
|
||||
return redirect()->route('models.index')->with('error', trans('admin/models/message.assoc_users'));
|
||||
}
|
||||
|
||||
if ($model->image) {
|
||||
try {
|
||||
unlink(public_path().'/uploads/models/'.$model->image);
|
||||
} catch (\Exception $e) {
|
||||
\Log::error($e);
|
||||
}
|
||||
}
|
||||
|
||||
// Delete the model
|
||||
$model->delete();
|
||||
|
||||
|
|
|
@ -110,17 +110,12 @@ class AssetsController extends Controller
|
|||
$this->authorize('create', Asset::class);
|
||||
$view = View::make('hardware/edit')
|
||||
->with('supplier_list', Helper::suppliersList())
|
||||
->with('company_list', Helper::companyList())
|
||||
->with('model_list', Helper::modelList())
|
||||
->with('statuslabel_list', Helper::statusLabelList())
|
||||
->with('location_list', Helper::locationsList())
|
||||
->with('item', new Asset)
|
||||
->with('manufacturer', Helper::manufacturerList()) //handled in modal now?
|
||||
->with('category', Helper::categoryList('asset')) //handled in modal now?
|
||||
->with('statuslabel_types', Helper::statusTypeList()) //handled in modal now?
|
||||
->with('users_list', Helper::usersList())
|
||||
->with('assets_list', Helper::assetsList())
|
||||
->with('locations_list', Helper::locationsList());
|
||||
->with('statuslabel_types', Helper::statusTypeList());
|
||||
|
||||
if ($request->has('model_id')) {
|
||||
$selected_model = AssetModel::find($request->input('model_id'));
|
||||
|
@ -139,17 +134,18 @@ class AssetsController extends Controller
|
|||
public function store(AssetRequest $request)
|
||||
{
|
||||
$this->authorize(Asset::class);
|
||||
// create a new model instance
|
||||
$asset = new Asset();
|
||||
$asset->model()->associate(AssetModel::find(e(Input::get('model_id'))));
|
||||
|
||||
$asset->name = Input::get('name');
|
||||
$asset->serial = Input::get('serial');
|
||||
$asset->company_id = Company::getIdForCurrentUser(Input::get('company_id'));
|
||||
$asset->model_id = Input::get('model_id');
|
||||
$asset->order_number = Input::get('order_number');
|
||||
$asset->notes = Input::get('notes');
|
||||
$asset->asset_tag = Input::get('asset_tag');
|
||||
|
||||
$asset = new Asset();
|
||||
$asset->model()->associate(AssetModel::find($request->input('model_id')));
|
||||
|
||||
$asset->name = $request->input('name');
|
||||
$asset->serial = $request->input('serial');
|
||||
$asset->company_id = Company::getIdForCurrentUser($request->input('company_id'));
|
||||
$asset->model_id = $request->input('model_id');
|
||||
$asset->order_number = $request->input('order_number');
|
||||
$asset->notes = $request->input('notes');
|
||||
$asset->asset_tag = $request->input('asset_tag');
|
||||
$asset->user_id = Auth::id();
|
||||
$asset->archived = '0';
|
||||
$asset->physical = '1';
|
||||
|
@ -164,8 +160,8 @@ class AssetsController extends Controller
|
|||
$asset->rtd_location_id = request('rtd_location_id', null);
|
||||
|
||||
// Create the image (if one was chosen.)
|
||||
if (Input::has('image')) {
|
||||
$image = Input::get('image');
|
||||
if ($request->has('image')) {
|
||||
$image = $request->input('image');
|
||||
|
||||
// After modification, the image is prefixed by mime info like the following:
|
||||
// data:image/jpeg;base64,; This causes the image library to be unhappy, so we need to remove it.
|
||||
|
@ -259,14 +255,8 @@ class AssetsController extends Controller
|
|||
|
||||
return view('hardware/edit', compact('item'))
|
||||
->with('model_list', Helper::modelList())
|
||||
->with('supplier_list', Helper::suppliersList())
|
||||
->with('company_list', Helper::companyList())
|
||||
->with('locations_list', Helper::locationsList())
|
||||
->with('statuslabel_list', Helper::statusLabelList())
|
||||
->with('assigned_to', Helper::usersList())
|
||||
->with('manufacturer', Helper::manufacturerList())
|
||||
->with('statuslabel_types', Helper::statusTypeList())
|
||||
->with('category', Helper::categoryList('asset'));
|
||||
->with('statuslabel_types', Helper::statusTypeList());
|
||||
}
|
||||
|
||||
|
||||
|
@ -404,9 +394,8 @@ class AssetsController extends Controller
|
|||
$logaction->item_id = $asset->id;
|
||||
$logaction->created_at = date("Y-m-d H:i:s");
|
||||
$logaction->user_id = Auth::user()->id;
|
||||
$log = $logaction->logaction('deleted');
|
||||
$logaction->logaction('deleted');
|
||||
|
||||
// Redirect to the asset management page
|
||||
return redirect()->route('hardware.index')->with('success', trans('admin/hardware/message.delete.success'));
|
||||
}
|
||||
|
||||
|
@ -430,10 +419,7 @@ class AssetsController extends Controller
|
|||
$this->authorize('checkout', $asset);
|
||||
|
||||
// Get the dropdown of users and then pass it to the checkout view
|
||||
return view('hardware/checkout', compact('asset'))
|
||||
->with('users_list', Helper::usersList())
|
||||
->with('assets_list', Helper::detailedAssetList())
|
||||
->with('locations_list', Helper::locationsList());
|
||||
return view('hardware/checkout', compact('asset'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -476,6 +462,17 @@ class AssetsController extends Controller
|
|||
} else {
|
||||
$expected_checkin = '';
|
||||
}
|
||||
|
||||
// Set the location ID to the RTD location id if there is one
|
||||
if ($asset->rtd_location_id!='') {
|
||||
$asset->location_id = $target->rtd_location_id;
|
||||
}
|
||||
|
||||
// Overwrite that if the target has a location ID though
|
||||
if ($target->location_id!='') {
|
||||
$asset->location_id = $target->location_id;
|
||||
}
|
||||
|
||||
if ($asset->checkOut($target, $admin, $checkout_at, $expected_checkin, e(Input::get('note')), Input::get('name'))) {
|
||||
// Redirect to the new asset page
|
||||
return redirect()->route("hardware.index")->with('success', trans('admin/hardware/message.checkout.success'));
|
||||
|
@ -547,6 +544,11 @@ class AssetsController extends Controller
|
|||
if (Input::has('status_id')) {
|
||||
$asset->status_id = e(Input::get('status_id'));
|
||||
}
|
||||
|
||||
if (Input::has('location_id')) {
|
||||
$asset->location_id = e(Input::get('location_id'));
|
||||
}
|
||||
|
||||
// Was the asset updated?
|
||||
if ($asset->save()) {
|
||||
$logaction = $asset->logCheckin($target, e(request('note')));
|
||||
|
@ -595,15 +597,17 @@ class AssetsController extends Controller
|
|||
$asset = Asset::withTrashed()->find($assetId);
|
||||
$this->authorize('view', $asset);
|
||||
$settings = Setting::getSettings();
|
||||
$audit_log = Actionlog::where('action_type', '=', 'audit')
|
||||
->where('item_id', '=', $assetId)
|
||||
->where('item_type', '=', Asset::class)
|
||||
->orderBy('created_at', 'DESC')->first();
|
||||
|
||||
|
||||
|
||||
if (isset($asset)) {
|
||||
if (!is_null($asset->assetloc)) {
|
||||
$use_currency = $asset->assetloc->currency;
|
||||
$audit_log = Actionlog::where('action_type', '=', 'audit')
|
||||
->where('item_id', '=', $assetId)
|
||||
->where('item_type', '=', Asset::class)
|
||||
->orderBy('created_at', 'DESC')->first();
|
||||
|
||||
if ($asset->location) {
|
||||
$use_currency = $asset->location->currency;
|
||||
} else {
|
||||
if ($settings->default_currency!='') {
|
||||
$use_currency = $settings->default_currency;
|
||||
|
@ -621,7 +625,7 @@ class AssetsController extends Controller
|
|||
->with('use_currency', $use_currency)->with('audit_log', $audit_log);
|
||||
}
|
||||
|
||||
return redirect()->route('hardware.index')->with('error', trans('admin/hardware/message.does_not_exist', compact('id')));
|
||||
return redirect()->route('hardware.index')->with('error', trans('admin/hardware/message.does_not_exist'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -712,18 +716,9 @@ class AssetsController extends Controller
|
|||
$asset->assigned_to = '';
|
||||
|
||||
return view('hardware/edit')
|
||||
->with('supplier_list', Helper::suppliersList())
|
||||
->with('model_list', Helper::modelList())
|
||||
->with('statuslabel_list', Helper::statusLabelList())
|
||||
->with('statuslabel_types', Helper::statusTypeList())
|
||||
->with('assigned_to', Helper::usersList())
|
||||
->with('item', $asset)
|
||||
->with('locations_list', Helper::locationsList())
|
||||
->with('manufacturer', Helper::manufacturerList())
|
||||
->with('category', Helper::categoryList('asset'))
|
||||
->with('users_list', Helper::usersList())
|
||||
->with('assets_list', Helper::assetsList())
|
||||
->with('company_list', Helper::companyList());
|
||||
->with('item', $asset);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -915,27 +910,23 @@ class AssetsController extends Controller
|
|||
if (!$asset = Asset::find($assetId)) {
|
||||
return redirect()->route('hardware.index')->with('error', trans('admin/hardware/message.does_not_exist'));
|
||||
}
|
||||
|
||||
$this->authorize('update', $asset);
|
||||
|
||||
$destinationPath = config('app.private_uploads').'/assets';
|
||||
|
||||
if (Input::hasFile('assetfile')) {
|
||||
foreach (Input::file('assetfile') as $file) {
|
||||
if ($request->hasFile('image')) {
|
||||
foreach ($request->file('image') as $file) {
|
||||
$extension = $file->getClientOriginalExtension();
|
||||
$filename = 'hardware-'.$asset->id.'-'.str_random(8);
|
||||
$filename .= '-'.str_slug($file->getClientOriginalName()).'.'.$extension;
|
||||
$upload_success = $file->move($destinationPath, $filename);
|
||||
//Log the deletion of seats to the log
|
||||
$file->move($destinationPath, $filename);
|
||||
$asset->logUpload($filename, e(Input::get('notes')));
|
||||
}
|
||||
} else {
|
||||
return redirect()->back()->with('error', trans('admin/hardware/message.upload.nofiles'));
|
||||
}
|
||||
|
||||
if ($upload_success) {
|
||||
return redirect()->back()->with('success', trans('admin/hardware/message.upload.success'));
|
||||
}
|
||||
return redirect()->back()->with('error', trans('admin/hardware/message.upload.error'));
|
||||
|
||||
return redirect()->back()->with('error', trans('admin/hardware/message.upload.nofiles'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -965,11 +956,9 @@ class AssetsController extends Controller
|
|||
$log->delete();
|
||||
return redirect()->back()->with('success', trans('admin/hardware/message.deletefile.success'));
|
||||
}
|
||||
// Prepare the error message
|
||||
$error = trans('admin/hardware/message.does_not_exist', compact('id'));
|
||||
|
||||
// Redirect to the hardware management page
|
||||
return redirect()->route('hardware.index')->with('error', $error);
|
||||
return redirect()->route('hardware.index')->with('error', trans('admin/hardware/message.does_not_exist'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1017,8 +1006,6 @@ class AssetsController extends Controller
|
|||
{
|
||||
$this->authorize('update', Asset::class);
|
||||
|
||||
|
||||
|
||||
if (!$request->has('ids')) {
|
||||
return redirect()->back()->with('error', 'No assets selected');
|
||||
}
|
||||
|
@ -1035,10 +1022,9 @@ class AssetsController extends Controller
|
|||
return view('hardware/labels')
|
||||
->with('assets', Asset::find($asset_ids))
|
||||
->with('settings', Setting::getSettings())
|
||||
->with('count', $count)
|
||||
->with('settings', Setting::getSettings());
|
||||
->with('count', $count);
|
||||
} elseif ($request->input('bulk_actions')=='delete') {
|
||||
$assets = Asset::with('assignedTo', 'assetloc')->find($asset_ids);
|
||||
$assets = Asset::with('assignedTo', 'location')->find($asset_ids);
|
||||
$assets->each(function ($asset) {
|
||||
$this->authorize('delete', $asset);
|
||||
});
|
||||
|
@ -1047,10 +1033,7 @@ class AssetsController extends Controller
|
|||
} elseif ($request->input('bulk_actions')=='edit') {
|
||||
return view('hardware/bulk')
|
||||
->with('assets', request('ids'))
|
||||
->with('supplier_list', Helper::suppliersList())
|
||||
->with('statuslabel_list', Helper::statusLabelList())
|
||||
->with('location_list', Helper::locationsList())
|
||||
->with('models_list', Helper::modelList())
|
||||
->with(
|
||||
'companies_list',
|
||||
array('' => '') + array('clear' => trans('general.remove_company')) + Helper::companyList()
|
||||
|
@ -1167,10 +1150,9 @@ class AssetsController extends Controller
|
|||
{
|
||||
$this->authorize('checkout', Asset::class);
|
||||
// Filter out assets that are not deployable.
|
||||
$assets_list = Company::scopeCompanyables(Asset::RTD()->get(), 'assets.company_id')->pluck('detailed_name', 'id')->toArray();
|
||||
|
||||
return view('hardware/bulk-checkout')
|
||||
->with('users_list', Helper::usersList())
|
||||
->with('assets_list', $assets_list);
|
||||
->with('users_list', Helper::usersList());
|
||||
}
|
||||
|
||||
public function postBulkCheckout(Request $request)
|
||||
|
@ -1222,21 +1204,21 @@ class AssetsController extends Controller
|
|||
}
|
||||
|
||||
|
||||
public function quickScan(Request $request)
|
||||
public function quickScan()
|
||||
{
|
||||
$this->authorize('audit', Asset::class);
|
||||
$dt = Carbon::now()->addMonths(12)->toDateString();
|
||||
return view('hardware/quickscan')->with('next_audit_date', $dt)->with('locations_list', Helper::locationsList());
|
||||
return view('hardware/quickscan')->with('next_audit_date', $dt);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public function audit(Request $request, $id)
|
||||
public function audit($id)
|
||||
{
|
||||
$this->authorize('audit', Asset::class);
|
||||
$dt = Carbon::now()->addMonths(12)->toDateString();
|
||||
$asset = Asset::findOrFail($id);
|
||||
return view('hardware/audit')->with('asset', $asset)->with('next_audit_date', $dt)->with('locations_list', Helper::locationsList());
|
||||
return view('hardware/audit')->with('asset', $asset)->with('next_audit_date', $dt)->with('locations_list');
|
||||
}
|
||||
|
||||
public function auditStore(Request $request, $id)
|
||||
|
|
|
@ -15,6 +15,8 @@ use Lang;
|
|||
use Redirect;
|
||||
use Str;
|
||||
use View;
|
||||
use Image;
|
||||
use App\Http\Requests\ImageUploadRequest;
|
||||
|
||||
/**
|
||||
* This class controls all actions related to Categories for
|
||||
|
@ -67,7 +69,7 @@ class CategoriesController extends Controller
|
|||
* @since [v1.0]
|
||||
* @return \Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
public function store(Request $request)
|
||||
public function store(ImageUploadRequest $request)
|
||||
{
|
||||
// create a new model instance
|
||||
$category = new Category();
|
||||
|
@ -80,6 +82,18 @@ class CategoriesController extends Controller
|
|||
$category->checkin_email = $request->input('checkin_email', '0');
|
||||
$category->user_id = Auth::id();
|
||||
|
||||
if ($request->file('image')) {
|
||||
$image = $request->file('image');
|
||||
$file_name = str_random(25).".".$image->getClientOriginalExtension();
|
||||
$path = public_path('uploads/categories/'.$file_name);
|
||||
Image::make($image->getRealPath())->resize(200, null, function ($constraint) {
|
||||
$constraint->aspectRatio();
|
||||
$constraint->upsize();
|
||||
})->save($path);
|
||||
$category->image = $file_name;
|
||||
}
|
||||
|
||||
|
||||
if ($category->save()) {
|
||||
return redirect()->route('categories.index')->with('success', trans('admin/categories/message.create.success'));
|
||||
}
|
||||
|
@ -118,7 +132,7 @@ class CategoriesController extends Controller
|
|||
* @return \Illuminate\Http\RedirectResponse
|
||||
* @since [v1.0]
|
||||
*/
|
||||
public function update(Request $request, $categoryId = null)
|
||||
public function update(ImageUploadRequest $request, $categoryId = null)
|
||||
{
|
||||
// Check if the blog post exists
|
||||
if (is_null($category = Category::find($categoryId))) {
|
||||
|
@ -136,6 +150,20 @@ class CategoriesController extends Controller
|
|||
$category->require_acceptance = $request->input('require_acceptance', '0');
|
||||
$category->checkin_email = $request->input('checkin_email', '0');
|
||||
|
||||
if ($request->file('image')) {
|
||||
$image = $request->file('image');
|
||||
$file_name = str_random(25).".".$image->getClientOriginalExtension();
|
||||
$path = public_path('uploads/categories/'.$file_name);
|
||||
Image::make($image->getRealPath())->resize(200, null, function ($constraint) {
|
||||
$constraint->aspectRatio();
|
||||
$constraint->upsize();
|
||||
})->save($path);
|
||||
$category->image = $file_name;
|
||||
} elseif ($request->input('image_delete')=='1') {
|
||||
$category->image = null;
|
||||
}
|
||||
|
||||
|
||||
if ($category->save()) {
|
||||
// Redirect to the new category page
|
||||
return redirect()->route('categories.index')->with('success', trans('admin/categories/message.update.success'));
|
||||
|
|
|
@ -7,6 +7,8 @@ use Lang;
|
|||
use Redirect;
|
||||
use View;
|
||||
use Illuminate\Http\Request;
|
||||
use Image;
|
||||
use App\Http\Requests\ImageUploadRequest;
|
||||
|
||||
/**
|
||||
* This controller handles all actions related to Companies for
|
||||
|
@ -50,11 +52,22 @@ final class CompaniesController extends Controller
|
|||
* @param Request $request
|
||||
* @return \Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
public function store(Request $request)
|
||||
public function store(ImageUploadRequest $request)
|
||||
{
|
||||
$company = new Company;
|
||||
$company->name = $request->input('name');
|
||||
|
||||
if ($request->file('image')) {
|
||||
$image = $request->file('image');
|
||||
$file_name = str_random(25).".".$image->getClientOriginalExtension();
|
||||
$path = public_path('uploads/companies/'.$file_name);
|
||||
Image::make($image->getRealPath())->resize(200, null, function ($constraint) {
|
||||
$constraint->aspectRatio();
|
||||
$constraint->upsize();
|
||||
})->save($path);
|
||||
$company->image = $file_name;
|
||||
}
|
||||
|
||||
if ($company->save()) {
|
||||
return redirect()->route('companies.index')
|
||||
->with('success', trans('admin/companies/message.create.success'));
|
||||
|
@ -89,7 +102,7 @@ final class CompaniesController extends Controller
|
|||
* @param int $companyId
|
||||
* @return \Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
public function update(Request $request, $companyId)
|
||||
public function update(ImageUploadRequest $request, $companyId)
|
||||
{
|
||||
if (is_null($company = Company::find($companyId))) {
|
||||
return redirect()->route('companies.index')->with('error', trans('admin/companies/message.does_not_exist'));
|
||||
|
@ -97,6 +110,20 @@ final class CompaniesController extends Controller
|
|||
|
||||
$company->name = $request->input('name');
|
||||
|
||||
if ($request->file('image')) {
|
||||
$image = $request->file('image');
|
||||
$file_name = str_random(25).".".$image->getClientOriginalExtension();
|
||||
$path = public_path('uploads/companies/'.$file_name);
|
||||
Image::make($image->getRealPath())->resize(200, null, function ($constraint) {
|
||||
$constraint->aspectRatio();
|
||||
$constraint->upsize();
|
||||
})->save($path);
|
||||
$company->image = $file_name;
|
||||
} elseif ($request->input('image_delete')=='1') {
|
||||
$company->image = null;
|
||||
}
|
||||
|
||||
|
||||
if ($company->save()) {
|
||||
return redirect()->route('companies.index')
|
||||
->with('success', trans('admin/companies/message.update.success'));
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Helpers\Helper;
|
||||
use App\Http\Requests\ImageUploadRequest;
|
||||
use App\Models\Company;
|
||||
use App\Models\Component;
|
||||
use App\Models\CustomField;
|
||||
|
@ -21,6 +22,7 @@ use View;
|
|||
use Validator;
|
||||
use Illuminate\Http\Request;
|
||||
use Gate;
|
||||
use Image;
|
||||
|
||||
/**
|
||||
* This class controls all actions related to Components for
|
||||
|
@ -57,12 +59,9 @@ class ComponentsController extends Controller
|
|||
public function create()
|
||||
{
|
||||
$this->authorize('create', Component::class);
|
||||
// Show the page
|
||||
return view('components/edit')
|
||||
->with('item', new Component)
|
||||
->with('category_list', Helper::categoryList('component'))
|
||||
->with('company_list', Helper::companyList())
|
||||
->with('location_list', Helper::locationsList());
|
||||
$category_type = 'component';
|
||||
return view('components/edit')->with('category_type',$category_type)
|
||||
->with('item', new Component);
|
||||
}
|
||||
|
||||
|
||||
|
@ -74,7 +73,7 @@ class ComponentsController extends Controller
|
|||
* @since [v3.0]
|
||||
* @return \Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
public function store(Request $request)
|
||||
public function store(ImageUploadRequest $request)
|
||||
{
|
||||
$this->authorize('create', Component::class);
|
||||
$component = new Component();
|
||||
|
@ -90,6 +89,18 @@ class ComponentsController extends Controller
|
|||
$component->qty = $request->input('qty');
|
||||
$component->user_id = Auth::id();
|
||||
|
||||
|
||||
if ($request->file('image')) {
|
||||
$image = $request->file('image');
|
||||
$file_name = str_random(25).".".$image->getClientOriginalExtension();
|
||||
$path = public_path('uploads/components/'.$file_name);
|
||||
Image::make($image->getRealPath())->resize(200, null, function ($constraint) {
|
||||
$constraint->aspectRatio();
|
||||
$constraint->upsize();
|
||||
})->save($path);
|
||||
$component->image = $file_name;
|
||||
}
|
||||
|
||||
if ($component->save()) {
|
||||
return redirect()->route('components.index')->with('success', trans('admin/components/message.create.success'));
|
||||
}
|
||||
|
@ -107,16 +118,18 @@ class ComponentsController extends Controller
|
|||
*/
|
||||
public function edit($componentId = null)
|
||||
{
|
||||
if (is_null($item = Component::find($componentId))) {
|
||||
return redirect()->route('components.index')->with('error', trans('admin/components/message.does_not_exist'));
|
||||
|
||||
|
||||
if ($item = Component::find($componentId)) {
|
||||
$this->authorize('update', $item);
|
||||
$category_type = 'component';
|
||||
return view('components/edit', compact('item'))->with('category_type', $category_type);
|
||||
}
|
||||
return redirect()->route('components.index')->with('error', trans('admin/components/message.does_not_exist'));
|
||||
|
||||
|
||||
|
||||
$this->authorize('update', $item);
|
||||
|
||||
return view('components/edit', compact('item'))
|
||||
->with('category_list', Helper::categoryList('component'))
|
||||
->with('company_list', Helper::companyList())
|
||||
->with('location_list', Helper::locationsList());
|
||||
}
|
||||
|
||||
|
||||
|
@ -129,7 +142,7 @@ class ComponentsController extends Controller
|
|||
* @since [v3.0]
|
||||
* @return \Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
public function update($componentId = null)
|
||||
public function update(ImageUploadRequest $request, $componentId = null)
|
||||
{
|
||||
if (is_null($component = Component::find($componentId))) {
|
||||
return redirect()->route('components.index')->with('error', trans('admin/components/message.does_not_exist'));
|
||||
|
@ -150,6 +163,19 @@ class ComponentsController extends Controller
|
|||
$component->purchase_cost = request('purchase_cost');
|
||||
$component->qty = Input::get('qty');
|
||||
|
||||
if ($request->file('image')) {
|
||||
$image = $request->file('image');
|
||||
$file_name = str_random(25).".".$image->getClientOriginalExtension();
|
||||
$path = public_path('uploads/components/'.$file_name);
|
||||
Image::make($image->getRealPath())->resize(200, null, function ($constraint) {
|
||||
$constraint->aspectRatio();
|
||||
$constraint->upsize();
|
||||
})->save($path);
|
||||
$component->image = $file_name;
|
||||
} elseif ($request->input('image_delete')=='1') {
|
||||
$component->image = null;
|
||||
}
|
||||
|
||||
if ($component->save()) {
|
||||
return redirect()->route('components.index')->with('success', trans('admin/components/message.update.success'));
|
||||
}
|
||||
|
@ -228,7 +254,7 @@ class ComponentsController extends Controller
|
|||
return redirect()->route('components.index')->with('error', trans('admin/components/message.not_found'));
|
||||
}
|
||||
$this->authorize('checkout', $component);
|
||||
return view('components/checkout', compact('component'))->with('assets_list', Helper::detailedAssetList());
|
||||
return view('components/checkout', compact('component'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -19,6 +19,8 @@ use Slack;
|
|||
use Str;
|
||||
use View;
|
||||
use Gate;
|
||||
use Image;
|
||||
use App\Http\Requests\ImageUploadRequest;
|
||||
|
||||
/**
|
||||
* This controller handles all actions related to Consumables for
|
||||
|
@ -54,13 +56,9 @@ class ConsumablesController extends Controller
|
|||
public function create()
|
||||
{
|
||||
$this->authorize('create', Consumable::class);
|
||||
// Show the page
|
||||
return view('consumables/edit')
|
||||
->with('item', new Consumable)
|
||||
->with('category_list', Helper::categoryList('consumable'))
|
||||
->with('company_list', Helper::companyList())
|
||||
->with('location_list', Helper::locationsList())
|
||||
->with('manufacturer_list', Helper::manufacturerList());
|
||||
$category_type = 'consumable';
|
||||
return view('consumables/edit')->with('category_type', $category_type)
|
||||
->with('item', new Consumable);
|
||||
}
|
||||
|
||||
|
||||
|
@ -72,24 +70,36 @@ class ConsumablesController extends Controller
|
|||
* @since [v1.0]
|
||||
* @return \Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
public function store()
|
||||
public function store(ImageUploadRequest $request)
|
||||
{
|
||||
$this->authorize('create', Consumable::class);
|
||||
$consumable = new Consumable();
|
||||
$consumable->name = Input::get('name');
|
||||
$consumable->category_id = Input::get('category_id');
|
||||
$consumable->location_id = Input::get('location_id');
|
||||
$consumable->company_id = Company::getIdForCurrentUser(Input::get('company_id'));
|
||||
$consumable->order_number = Input::get('order_number');
|
||||
$consumable->min_amt = Input::get('min_amt');
|
||||
$consumable->manufacturer_id = Input::get('manufacturer_id');
|
||||
$consumable->model_number = Input::get('model_number');
|
||||
$consumable->item_no = Input::get('item_no');
|
||||
$consumable->purchase_date = Input::get('purchase_date');
|
||||
$consumable->purchase_cost = Helper::ParseFloat(Input::get('purchase_cost'));
|
||||
$consumable->qty = Input::get('qty');
|
||||
$consumable->name = $request->input('name');
|
||||
$consumable->category_id = $request->input('category_id');
|
||||
$consumable->location_id = $request->input('location_id');
|
||||
$consumable->company_id = Company::getIdForCurrentUser($request->input('company_id'));
|
||||
$consumable->order_number = $request->input('order_number');
|
||||
$consumable->min_amt = $request->input('min_amt');
|
||||
$consumable->manufacturer_id = $request->input('manufacturer_id');
|
||||
$consumable->model_number = $request->input('model_number');
|
||||
$consumable->item_no = $request->input('item_no');
|
||||
$consumable->purchase_date = $request->input('purchase_date');
|
||||
$consumable->purchase_cost = Helper::ParseFloat($request->input('purchase_cost'));
|
||||
$consumable->qty = $request->input('qty');
|
||||
$consumable->user_id = Auth::id();
|
||||
|
||||
|
||||
if ($request->file('image')) {
|
||||
$image = $request->file('image');
|
||||
$file_name = str_random(25).".".$image->getClientOriginalExtension();
|
||||
$path = public_path('uploads/consumables/'.$file_name);
|
||||
Image::make($image->getRealPath())->resize(200, null, function ($constraint) {
|
||||
$constraint->aspectRatio();
|
||||
$constraint->upsize();
|
||||
})->save($path);
|
||||
$consumable->image = $file_name;
|
||||
}
|
||||
|
||||
if ($consumable->save()) {
|
||||
return redirect()->route('consumables.index')->with('success', trans('admin/consumables/message.create.success'));
|
||||
}
|
||||
|
@ -109,17 +119,14 @@ class ConsumablesController extends Controller
|
|||
*/
|
||||
public function edit($consumableId = null)
|
||||
{
|
||||
if (is_null($item = Consumable::find($consumableId))) {
|
||||
return redirect()->route('consumables.index')->with('error', trans('admin/consumables/message.does_not_exist'));
|
||||
if ($item = Consumable::find($consumableId)) {
|
||||
$this->authorize($item);
|
||||
$category_type = 'consumable';
|
||||
return view('consumables/edit', compact('item'))->with('category_type', $category_type);
|
||||
}
|
||||
|
||||
$this->authorize($item);
|
||||
return redirect()->route('consumables.index')->with('error', trans('admin/consumables/message.does_not_exist'));
|
||||
|
||||
return view('consumables/edit', compact('item'))
|
||||
->with('category_list', Helper::categoryList('consumable'))
|
||||
->with('company_list', Helper::companyList())
|
||||
->with('location_list', Helper::locationsList())
|
||||
->with('manufacturer_list', Helper::manufacturerList());
|
||||
}
|
||||
|
||||
|
||||
|
@ -132,7 +139,7 @@ class ConsumablesController extends Controller
|
|||
* @since [v1.0]
|
||||
* @return \Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
public function update($consumableId = null)
|
||||
public function update(ImageUploadRequest $request, $consumableId = null)
|
||||
{
|
||||
if (is_null($consumable = Consumable::find($consumableId))) {
|
||||
return redirect()->route('consumables.index')->with('error', trans('admin/consumables/message.does_not_exist'));
|
||||
|
@ -140,19 +147,32 @@ class ConsumablesController extends Controller
|
|||
|
||||
$this->authorize($consumable);
|
||||
|
||||
$consumable->name = Input::get('name');
|
||||
$consumable->category_id = Input::get('category_id');
|
||||
$consumable->location_id = Input::get('location_id');
|
||||
$consumable->company_id = Company::getIdForCurrentUser(Input::get('company_id'));
|
||||
$consumable->order_number = Input::get('order_number');
|
||||
$consumable->min_amt = Input::get('min_amt');
|
||||
$consumable->manufacturer_id = Input::get('manufacturer_id');
|
||||
$consumable->model_number = Input::get('model_number');
|
||||
$consumable->item_no = Input::get('item_no');
|
||||
$consumable->purchase_date = Input::get('purchase_date');
|
||||
$consumable->purchase_cost = Helper::ParseFloat(Input::get('purchase_cost'));
|
||||
$consumable->name = $request->input('name');
|
||||
$consumable->category_id = $request->input('category_id');
|
||||
$consumable->location_id = $request->input('location_id');
|
||||
$consumable->company_id = Company::getIdForCurrentUser($request->input('company_id'));
|
||||
$consumable->order_number = $request->input('order_number');
|
||||
$consumable->min_amt = $request->input('min_amt');
|
||||
$consumable->manufacturer_id = $request->input('manufacturer_id');
|
||||
$consumable->model_number = $request->input('model_number');
|
||||
$consumable->item_no = $request->input('item_no');
|
||||
$consumable->purchase_date = $request->input('purchase_date');
|
||||
$consumable->purchase_cost = Helper::ParseFloat(Input::get('purchase_cost'));
|
||||
$consumable->qty = Helper::ParseFloat(Input::get('qty'));
|
||||
|
||||
if ($request->file('image')) {
|
||||
$image = $request->file('image');
|
||||
$file_name = str_random(25).".".$image->getClientOriginalExtension();
|
||||
$path = public_path('uploads/consumables/'.$file_name);
|
||||
Image::make($image->getRealPath())->resize(200, null, function ($constraint) {
|
||||
$constraint->aspectRatio();
|
||||
$constraint->upsize();
|
||||
})->save($path);
|
||||
$consumable->image = $file_name;
|
||||
} elseif ($request->input('image_delete')=='1') {
|
||||
$consumable->image = null;
|
||||
}
|
||||
|
||||
if ($consumable->save()) {
|
||||
return redirect()->route('consumables.index')->with('success', trans('admin/consumables/message.update.success'));
|
||||
}
|
||||
|
@ -212,7 +232,7 @@ class ConsumablesController extends Controller
|
|||
return redirect()->route('consumables.index')->with('error', trans('admin/consumables/message.does_not_exist'));
|
||||
}
|
||||
$this->authorize('checkout', $consumable);
|
||||
return view('consumables/checkout', compact('consumable'))->with('users_list', Helper::usersList());
|
||||
return view('consumables/checkout', compact('consumable'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -238,7 +258,7 @@ class ConsumablesController extends Controller
|
|||
// Check if the user exists
|
||||
if (is_null($user = User::find($assigned_to))) {
|
||||
// Redirect to the consumable management page with error
|
||||
return redirect()->route('consumables.index')->with('error', trans('admin/consumables/message.user_does_not_exist'));
|
||||
return redirect()->route('checkout/consumable', $consumable)->with('error', trans('admin/consumables/message.checkout.user_does_not_exist'));
|
||||
}
|
||||
|
||||
// Update the consumable data
|
||||
|
@ -259,7 +279,7 @@ class ConsumablesController extends Controller
|
|||
$data['note'] = $logaction->note;
|
||||
$data['require_acceptance'] = $consumable->requireAcceptance();
|
||||
|
||||
if (($consumable->requireAcceptance()=='1') || ($consumable->getEula())) {
|
||||
if ((($consumable->requireAcceptance()=='1') || ($consumable->getEula())) && $user->email!='') {
|
||||
|
||||
Mail::send('emails.accept-asset', $data, function ($m) use ($user) {
|
||||
$m->to($user->email, $user->first_name . ' ' . $user->last_name);
|
||||
|
|
|
@ -6,6 +6,8 @@ use Illuminate\Http\Request;
|
|||
use App\Models\Department;
|
||||
use App\Helpers\Helper;
|
||||
use Auth;
|
||||
use Image;
|
||||
use App\Http\Requests\ImageUploadRequest;
|
||||
|
||||
class DepartmentsController extends Controller
|
||||
{
|
||||
|
@ -43,7 +45,7 @@ class DepartmentsController extends Controller
|
|||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function store(Request $request)
|
||||
public function store(ImageUploadRequest $request)
|
||||
{
|
||||
$this->authorize('create', Department::class);
|
||||
$department = new Department;
|
||||
|
@ -51,6 +53,17 @@ class DepartmentsController extends Controller
|
|||
$department->user_id = Auth::user()->id;
|
||||
$department->manager_id = ($request->has('manager_id' ) ? $request->input('manager_id') : null);
|
||||
|
||||
if ($request->file('image')) {
|
||||
$image = $request->file('image');
|
||||
$file_name = str_random(25).".".$image->getClientOriginalExtension();
|
||||
$path = public_path('uploads/departments/'.$file_name);
|
||||
Image::make($image->getRealPath())->resize(200, null, function ($constraint) {
|
||||
$constraint->aspectRatio();
|
||||
$constraint->upsize();
|
||||
})->save($path);
|
||||
$department->image = $file_name;
|
||||
}
|
||||
|
||||
if ($department->save()) {
|
||||
return redirect()->route("departments.index")->with('success', trans('admin/departments/message.create.success'));
|
||||
}
|
||||
|
@ -87,10 +100,7 @@ class DepartmentsController extends Controller
|
|||
*/
|
||||
public function create()
|
||||
{
|
||||
return view('departments/edit')->with('item', new Department)
|
||||
->with('manager_list', Helper::managerList())
|
||||
->with('location_list', Helper::locationsList())
|
||||
->with('company_list', Helper::companyList());
|
||||
return view('departments/edit')->with('item', new Department);
|
||||
}
|
||||
|
||||
|
||||
|
@ -131,10 +141,7 @@ class DepartmentsController extends Controller
|
|||
if (is_null($item = Department::find($id))) {
|
||||
return redirect()->back()->with('error', trans('admin/locations/message.does_not_exist'));
|
||||
}
|
||||
return view('departments/edit', compact('item'))
|
||||
->with('manager_list', Helper::managerList())
|
||||
->with('location_list', Helper::locationsList())
|
||||
->with('company_list', Helper::companyList());
|
||||
return view('departments/edit', compact('item'));
|
||||
}
|
||||
|
||||
public function update(Request $request, $id) {
|
||||
|
@ -145,6 +152,20 @@ class DepartmentsController extends Controller
|
|||
}
|
||||
|
||||
$department->fill($request->all());
|
||||
|
||||
if ($request->file('image')) {
|
||||
$image = $request->file('image');
|
||||
$file_name = str_random(25).".".$image->getClientOriginalExtension();
|
||||
$path = public_path('uploads/departments/'.$file_name);
|
||||
Image::make($image->getRealPath())->resize(200, null, function ($constraint) {
|
||||
$constraint->aspectRatio();
|
||||
$constraint->upsize();
|
||||
})->save($path);
|
||||
$department->image = $file_name;
|
||||
} elseif ($request->input('image_delete')=='1') {
|
||||
$department->image = null;
|
||||
}
|
||||
|
||||
$department->manager_id = ($request->has('manager_id' ) ? $request->input('manager_id') : null);
|
||||
|
||||
if ($department->save()) {
|
||||
|
|
|
@ -67,10 +67,7 @@ class LicensesController extends Controller
|
|||
return view('licenses/edit')
|
||||
//->with('license_options',$license_options)
|
||||
->with('depreciation_list', Helper::depreciationList())
|
||||
->with('supplier_list', Helper::suppliersList())
|
||||
->with('maintained_list', $maintained_list)
|
||||
->with('company_list', Helper::companyList())
|
||||
->with('manufacturer_list', Helper::manufacturerList())
|
||||
->with('item', new License);
|
||||
|
||||
}
|
||||
|
@ -144,10 +141,7 @@ class LicensesController extends Controller
|
|||
|
||||
return view('licenses/edit', compact('item'))
|
||||
->with('depreciation_list', Helper::depreciationList())
|
||||
->with('supplier_list', Helper::suppliersList())
|
||||
->with('company_list', Helper::companyList())
|
||||
->with('maintained_list', $maintained_list)
|
||||
->with('manufacturer_list', Helper::manufacturerList());
|
||||
->with('maintained_list', $maintained_list);
|
||||
}
|
||||
|
||||
|
||||
|
@ -254,9 +248,7 @@ class LicensesController extends Controller
|
|||
}
|
||||
|
||||
$this->authorize('checkout', $licenseSeat);
|
||||
return view('licenses/checkout', compact('licenseSeat'))
|
||||
->with('users_list', Helper::usersList())
|
||||
->with('asset_list', Helper::detailedAssetList());
|
||||
return view('licenses/checkout', compact('licenseSeat'));
|
||||
}
|
||||
|
||||
|
||||
|
@ -472,11 +464,8 @@ class LicensesController extends Controller
|
|||
// Show the page
|
||||
return view('licenses/edit')
|
||||
->with('depreciation_list', Helper::depreciationList())
|
||||
->with('supplier_list', Helper::suppliersList())
|
||||
->with('item', $license)
|
||||
->with('maintained_list', $maintained_list)
|
||||
->with('company_list', Helper::companyList())
|
||||
->with('manufacturer_list', Helper::manufacturerList());
|
||||
->with('maintained_list', $maintained_list);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -16,6 +16,8 @@ use Validator;
|
|||
use View;
|
||||
use Auth;
|
||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||
use Image;
|
||||
use App\Http\Requests\ImageUploadRequest;
|
||||
|
||||
/**
|
||||
* This controller handles all actions related to Locations for
|
||||
|
@ -63,8 +65,7 @@ class LocationsController extends Controller
|
|||
|
||||
return view('locations/edit')
|
||||
->with('location_options', $location_options)
|
||||
->with('item', new Location)
|
||||
->with('manager_list', Helper::managerList());
|
||||
->with('item', new Location);
|
||||
}
|
||||
|
||||
|
||||
|
@ -77,22 +78,33 @@ class LocationsController extends Controller
|
|||
* @since [v1.0]
|
||||
* @return \Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
public function store()
|
||||
public function store(ImageUploadRequest $request)
|
||||
{
|
||||
$location = new Location();
|
||||
$location->name = Input::get('name');
|
||||
$location->parent_id = Input::get('parent_id', null);
|
||||
$location->currency = Input::get('currency', '$');
|
||||
$location->address = Input::get('address');
|
||||
$location->address2 = Input::get('address2');
|
||||
$location->city = Input::get('city');
|
||||
$location->state = Input::get('state');
|
||||
$location->country = Input::get('country');
|
||||
$location->zip = Input::get('zip');
|
||||
$location->ldap_ou = Input::get('ldap_ou');
|
||||
$location->manager_id = Input::get('manager_id');
|
||||
$location->name = $request->input('name');
|
||||
$location->parent_id = $request->input('parent_id', null);
|
||||
$location->currency = $request->input('currency', '$');
|
||||
$location->address = $request->input('address');
|
||||
$location->address2 = $request->input('address2');
|
||||
$location->city = $request->input('city');
|
||||
$location->state = $request->input('state');
|
||||
$location->country = $request->input('country');
|
||||
$location->zip = $request->input('zip');
|
||||
$location->ldap_ou = $request->input('ldap_ou');
|
||||
$location->manager_id = $request->input('manager_id');
|
||||
$location->user_id = Auth::id();
|
||||
|
||||
if ($request->file('image')) {
|
||||
$image = $request->file('image');
|
||||
$file_name = str_random(25).".".$image->getClientOriginalExtension();
|
||||
$path = public_path('uploads/locations/'.$file_name);
|
||||
Image::make($image->getRealPath())->resize(200, null, function ($constraint) {
|
||||
$constraint->aspectRatio();
|
||||
$constraint->upsize();
|
||||
})->save($path);
|
||||
$location->image = $file_name;
|
||||
}
|
||||
|
||||
if ($location->save()) {
|
||||
return redirect()->route("locations.index")->with('success', trans('admin/locations/message.create.success'));
|
||||
}
|
||||
|
@ -108,7 +120,7 @@ class LocationsController extends Controller
|
|||
* @since [v1.0]
|
||||
* @return String JSON
|
||||
*/
|
||||
public function apiStore()
|
||||
public function apiStore(Request $request)
|
||||
{
|
||||
$new['currency']=Setting::first()->default_currency;
|
||||
|
||||
|
@ -116,13 +128,13 @@ class LocationsController extends Controller
|
|||
$location = new Location();
|
||||
|
||||
// Save the location data
|
||||
$location->name = Input::get('name');
|
||||
$location->name = $request->input('name');
|
||||
$location->currency = Setting::first()->default_currency; //e(Input::get('currency'));
|
||||
$location->address = ''; //e(Input::get('address'));
|
||||
// $location->address2 = e(Input::get('address2'));
|
||||
$location->city = Input::get('city');
|
||||
$location->city = $request->input('city');
|
||||
$location->state = '';//e(Input::get('state'));
|
||||
$location->country = Input::get('country');
|
||||
$location->country = $request->input('country');
|
||||
// $location->zip = e(Input::get('zip'));
|
||||
$location->user_id = Auth::id();
|
||||
|
||||
|
@ -172,7 +184,7 @@ class LocationsController extends Controller
|
|||
* @since [v1.0]
|
||||
* @return \Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
public function update($locationId = null)
|
||||
public function update(ImageUploadRequest $request, $locationId = null)
|
||||
{
|
||||
// Check if the location exists
|
||||
if (is_null($location = Location::find($locationId))) {
|
||||
|
@ -180,24 +192,35 @@ class LocationsController extends Controller
|
|||
}
|
||||
|
||||
// Update the location data
|
||||
$location->name = Input::get('name');
|
||||
$location->parent_id = Input::get('parent_id', null);
|
||||
$location->currency = Input::get('currency', '$');
|
||||
$location->address = Input::get('address');
|
||||
$location->address2 = Input::get('address2');
|
||||
$location->city = Input::get('city');
|
||||
$location->state = Input::get('state');
|
||||
$location->country = Input::get('country');
|
||||
$location->zip = Input::get('zip');
|
||||
$location->ldap_ou = Input::get('ldap_ou');
|
||||
$location->manager_id = Input::get('manager_id');
|
||||
$location->name = $request->input('name');
|
||||
$location->parent_id = $request->input('parent_id', null);
|
||||
$location->currency = $request->input('currency', '$');
|
||||
$location->address = $request->input('address');
|
||||
$location->address2 = $request->input('address2');
|
||||
$location->city = $request->input('city');
|
||||
$location->state = $request->input('state');
|
||||
$location->country = $request->input('country');
|
||||
$location->zip = $request->input('zip');
|
||||
$location->ldap_ou = $request->input('ldap_ou');
|
||||
$location->manager_id = $request->input('manager_id');
|
||||
|
||||
if ($request->file('image')) {
|
||||
$image = $request->file('image');
|
||||
$file_name = str_random(25).".".$image->getClientOriginalExtension();
|
||||
$path = public_path('uploads/locations/'.$file_name);
|
||||
Image::make($image->getRealPath())->resize(200, null, function ($constraint) {
|
||||
$constraint->aspectRatio();
|
||||
$constraint->upsize();
|
||||
})->save($path);
|
||||
$location->image = $file_name;
|
||||
} elseif ($request->input('image_delete')=='1') {
|
||||
$location->image = null;
|
||||
}
|
||||
|
||||
|
||||
// Was the location updated?
|
||||
if ($location->save()) {
|
||||
// Redirect to the saved location page
|
||||
return redirect()->route("locations.index")->with('success', trans('admin/locations/message.update.success'));
|
||||
}
|
||||
// Redirect to the location management page
|
||||
return redirect()->back()->withInput()->withInput()->withErrors($location->getErrors());
|
||||
}
|
||||
|
||||
|
@ -211,20 +234,22 @@ class LocationsController extends Controller
|
|||
*/
|
||||
public function destroy($locationId)
|
||||
{
|
||||
// Check if the location exists
|
||||
if (is_null($location = Location::find($locationId))) {
|
||||
// Redirect to the blogs management page
|
||||
return redirect()->to(route('locations.index'))->with('error', trans('admin/locations/message.not_found'));
|
||||
}
|
||||
|
||||
if ($location->users->count() > 0) {
|
||||
return redirect()->to(route('locations.index'))->with('error', trans('admin/locations/message.assoc_users'));
|
||||
|
||||
} elseif ($location->childLocations->count() > 0) {
|
||||
return redirect()->to(route('locations.index'))->with('error', trans('admin/locations/message.assoc_child_loc'));
|
||||
|
||||
} elseif ($location->assets->count() > 0) {
|
||||
return redirect()->to(route('locations.index'))->with('error', trans('admin/locations/message.assoc_assets'));
|
||||
|
||||
} elseif ($location->assignedassets->count() > 0) {
|
||||
return redirect()->to(route('locations.index'))->with('error', trans('admin/locations/message.assoc_assets'));
|
||||
|
||||
} else {
|
||||
$location->delete();
|
||||
return redirect()->to(route('locations.index'))->with('success', trans('admin/locations/message.delete.success'));
|
||||
|
@ -248,11 +273,8 @@ class LocationsController extends Controller
|
|||
if (isset($location->id)) {
|
||||
return view('locations/view', compact('location'));
|
||||
}
|
||||
// Prepare the error message
|
||||
$error = trans('admin/locations/message.does_not_exist', compact('id'));
|
||||
|
||||
// Redirect to the user management page
|
||||
return redirect()->route('locations.index')->with('error', $error);
|
||||
return redirect()->route('locations.index')->with('error', trans('admin/locations/message.does_not_exist', compact('id')));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Helpers\Helper;
|
||||
use App\Http\Requests\ImageUploadRequest;
|
||||
use App\Models\CustomField;
|
||||
use App\Models\Manufacturer;
|
||||
use Auth;
|
||||
|
@ -13,6 +14,7 @@ use Redirect;
|
|||
use Str;
|
||||
use View;
|
||||
use Illuminate\Http\Request;
|
||||
use Image;
|
||||
|
||||
/**
|
||||
* This controller handles all actions related to Manufacturers for
|
||||
|
@ -60,7 +62,7 @@ class ManufacturersController extends Controller
|
|||
* @param Request $request
|
||||
* @return \Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
public function store(Request $request)
|
||||
public function store(ImageUploadRequest $request)
|
||||
{
|
||||
|
||||
$manufacturer = new Manufacturer;
|
||||
|
@ -72,6 +74,18 @@ class ManufacturersController extends Controller
|
|||
$manufacturer->support_email = $request->input('support_email');
|
||||
|
||||
|
||||
if ($request->file('image')) {
|
||||
$image = $request->file('image');
|
||||
$file_name = str_slug($image->getClientOriginalName()).".".$image->getClientOriginalExtension();
|
||||
$path = public_path('uploads/manufacturers/'.$file_name);
|
||||
Image::make($image->getRealPath())->resize(200, null, function ($constraint) {
|
||||
$constraint->aspectRatio();
|
||||
$constraint->upsize();
|
||||
})->save($path);
|
||||
$manufacturer->image = $file_name;
|
||||
}
|
||||
|
||||
|
||||
|
||||
if ($manufacturer->save()) {
|
||||
return redirect()->route('manufacturers.index')->with('success', trans('admin/manufacturers/message.create.success'));
|
||||
|
@ -124,6 +138,29 @@ class ManufacturersController extends Controller
|
|||
$manufacturer->support_phone = $request->input('support_phone');
|
||||
$manufacturer->support_email = $request->input('support_email');
|
||||
|
||||
if ($request->file('image')) {
|
||||
$image = $request->file('image');
|
||||
$file_name = str_slug($image->getClientOriginalName()).".".$image->getClientOriginalExtension();
|
||||
$path = public_path('uploads/manufacturers/'.$file_name);
|
||||
$old_image = $path.$model->image;
|
||||
|
||||
try {
|
||||
unlink($old_image);
|
||||
} catch (\Exception $e) {
|
||||
\Log::error($e);
|
||||
}
|
||||
|
||||
|
||||
Image::make($image->getRealPath())->resize(200, null, function ($constraint) {
|
||||
$constraint->aspectRatio();
|
||||
$constraint->upsize();
|
||||
})->save($path);
|
||||
$manufacturer->image = $file_name;
|
||||
} elseif ($request->input('image_delete')=='1') {
|
||||
$manufacturer->image = null;
|
||||
}
|
||||
|
||||
|
||||
if ($manufacturer->save()) {
|
||||
return redirect()->route('manufacturers.index')->with('success', trans('admin/manufacturers/message.update.success'));
|
||||
}
|
||||
|
@ -150,6 +187,16 @@ class ManufacturersController extends Controller
|
|||
// Redirect to the asset management page
|
||||
return redirect()->route('manufacturers.index')->with('error', trans('admin/manufacturers/message.assoc_users'));
|
||||
}
|
||||
|
||||
if ($manufacturer->image) {
|
||||
try {
|
||||
unlink(public_path().'/uploads/manufacturers/'.$manufacturer->image);
|
||||
} catch (\Exception $e) {
|
||||
\Log::error($e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Delete the manufacturer
|
||||
$manufacturer->delete();
|
||||
// Redirect to the manufacturers management page
|
||||
|
@ -158,11 +205,10 @@ class ManufacturersController extends Controller
|
|||
|
||||
/**
|
||||
* Returns a view that invokes the ajax tables which actually contains
|
||||
* the content for the manufacturers detail listing, which is generated in getDatatable.
|
||||
* the content for the manufacturers detail listing, which is generated via API.
|
||||
* This data contains a listing of all assets that belong to that manufacturer.
|
||||
*
|
||||
* @author [A. Gianotto] [<snipe@snipe.net>]
|
||||
* @see ManufacturersController::getDataView()
|
||||
* @param int $manufacturerId
|
||||
* @since [v1.0]
|
||||
* @return \Illuminate\Contracts\View\View
|
||||
|
@ -174,43 +220,13 @@ class ManufacturersController extends Controller
|
|||
if (isset($manufacturer->id)) {
|
||||
return view('manufacturers/view', compact('manufacturer'));
|
||||
}
|
||||
// Prepare the error message
|
||||
$error = trans('admin/manufacturers/message.does_not_exist', compact('id'));
|
||||
|
||||
$error = trans('admin/manufacturers/message.does_not_exist');
|
||||
// Redirect to the user management page
|
||||
return redirect()->route('manufacturers')->with('error', $error);
|
||||
return redirect()->route('manufacturers.index')->with('error', $error);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Generates the JSON used to display the manufacturer detail.
|
||||
* This JSON returns data on all of the assets with the specified
|
||||
* manufacturer ID number.
|
||||
*
|
||||
* @author [A. Gianotto] [<snipe@snipe.net>]
|
||||
* @see ManufacturersController::getView()
|
||||
* @param int $manufacturerId
|
||||
* @param string $itemType
|
||||
* @param Request $request
|
||||
* @return String JSON* @since [v1.0]
|
||||
*/
|
||||
public function getDataView($manufacturerId, $itemType = null, Request $request)
|
||||
{
|
||||
$manufacturer = Manufacturer::find($manufacturerId);
|
||||
|
||||
switch ($itemType) {
|
||||
case "assets":
|
||||
return $this->getDataAssetsView($manufacturer, $request);
|
||||
case "licenses":
|
||||
return $this->getDataLicensesView($manufacturer, $request);
|
||||
case "accessories":
|
||||
return $this->getDataAccessoriesView($manufacturer, $request);
|
||||
case "consumables":
|
||||
return $this->getDataConsumablesView($manufacturer, $request);
|
||||
}
|
||||
|
||||
return "We shouldn't be here";
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -30,8 +30,7 @@ class ProfileController extends Controller
|
|||
public function getIndex()
|
||||
{
|
||||
$user = Auth::user();
|
||||
$location_list = Helper::locationsList();
|
||||
return view('account/profile', compact('user'))->with('location_list', $location_list);
|
||||
return view('account/profile', compact('user'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -144,10 +143,11 @@ class ProfileController extends Controller
|
|||
}
|
||||
|
||||
/**
|
||||
* Returns a page with the API token generation interface.
|
||||
* Save the menu state of open/closed when the user clicks on the hamburger
|
||||
* menu.
|
||||
*
|
||||
* We created a controller method for this because closures aren't allowed
|
||||
* in the routes file if you want to be able to cache the routes.
|
||||
* This URL is triggered via jquery in
|
||||
* resources/views/layouts/default.blade.php
|
||||
*
|
||||
* @author [A. Gianotto] [<snipe@snipe.net>]
|
||||
* @since [v4.0]
|
||||
|
|
|
@ -114,7 +114,7 @@ class ReportsController extends Controller
|
|||
// Open output stream
|
||||
$handle = fopen('php://output', 'w');
|
||||
|
||||
$assets = Asset::with('assignedTo', 'assetLoc','defaultLoc','assignedTo','model','supplier','assetstatus','model.manufacturer');
|
||||
$assets = Asset::with('assignedTo', 'location','defaultLoc','assignedTo','model','supplier','assetstatus','model.manufacturer');
|
||||
|
||||
// This is used by the sidenav, mostly
|
||||
switch ($request->input('status')) {
|
||||
|
@ -182,7 +182,7 @@ class ReportsController extends Controller
|
|||
($asset->supplier) ? e($asset->supplier->name) : '',
|
||||
($asset->assignedTo) ? e($asset->assignedTo->present()->name()) : '',
|
||||
($asset->last_checkout!='') ? e($asset->last_checkout) : '',
|
||||
($asset->assetLoc) ? e($asset->assetLoc->present()->name()) : '',
|
||||
($asset->location) ? e($asset->location->present()->name()) : '',
|
||||
($asset->notes) ? e($asset->notes) : '',
|
||||
];
|
||||
foreach ($customfields as $field) {
|
||||
|
@ -215,7 +215,7 @@ class ReportsController extends Controller
|
|||
{
|
||||
|
||||
// Grab all the assets
|
||||
$assets = Asset::with( 'assignedTo', 'assetstatus', 'defaultLoc', 'assetloc', 'assetlog', 'company', 'model.category', 'model.depreciation')
|
||||
$assets = Asset::with( 'assignedTo', 'assetstatus', 'defaultLoc', 'location', 'assetlog', 'company', 'model.category', 'model.depreciation')
|
||||
->orderBy('created_at', 'DESC')->get();
|
||||
|
||||
return view('reports/depreciation', compact('assets'));
|
||||
|
@ -270,7 +270,7 @@ class ReportsController extends Controller
|
|||
$row[] = ''; // Empty string if unassigned
|
||||
}
|
||||
|
||||
if (( $asset->assigned_to > 0 ) && ( $location = $asset->assetLoc )) {
|
||||
if (( $asset->assigned_to > 0 ) && ( $location = $asset->location )) {
|
||||
if ($location->city) {
|
||||
$row[] = e($location->city) . ', ' . e($location->state);
|
||||
} elseif ($location->name) {
|
||||
|
@ -282,8 +282,8 @@ class ReportsController extends Controller
|
|||
$row[] = ''; // Empty string if location is not set
|
||||
}
|
||||
|
||||
if ($asset->assetloc) {
|
||||
$currency = e($asset->assetloc->currency);
|
||||
if ($asset->location) {
|
||||
$currency = e($asset->location->currency);
|
||||
} else {
|
||||
$currency = e(Setting::first()->default_currency);
|
||||
}
|
||||
|
@ -562,8 +562,8 @@ class ReportsController extends Controller
|
|||
}
|
||||
|
||||
if (e(Input::get('location')) == '1') {
|
||||
if($asset->assetLoc) {
|
||||
$show_loc = $asset->assetLoc->present()->name();
|
||||
if($asset->location) {
|
||||
$show_loc = $asset->location->present()->name();
|
||||
} else {
|
||||
$show_loc = 'Default location '.$asset->rtd_location_id.' is invalid';
|
||||
}
|
||||
|
|
|
@ -32,18 +32,17 @@ class StatuslabelsController extends Controller
|
|||
|
||||
public function index()
|
||||
{
|
||||
return view('statuslabels/index', compact('statuslabels'));
|
||||
return view('statuslabels.index', compact('statuslabels'));
|
||||
}
|
||||
|
||||
public function show($id)
|
||||
{
|
||||
$statuslabel = Statuslabel::find($id);
|
||||
|
||||
if (isset($statuslabel->id)) {
|
||||
return view('statuslabels/view', compact('statuslabel'));
|
||||
if ($statuslabel = Statuslabel::find($id)) {
|
||||
return view('statuslabels.view')->with('statuslabel', $statuslabel);
|
||||
}
|
||||
|
||||
return redirect()->route('statuslabels.index')->with('error', trans('admin/locations/message.does_not_exist', compact('id')));
|
||||
return redirect()->route('statuslabels.index')->with('error', trans('admin/statuslabels/message.does_not_exist', compact('id')));
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -77,19 +77,18 @@ class SuppliersController extends Controller
|
|||
$supplier->url = $supplier->addhttp(request('url'));
|
||||
$supplier->user_id = Auth::id();
|
||||
|
||||
if (Input::file('image')) {
|
||||
if ($request->file('image')) {
|
||||
$image = $request->file('image');
|
||||
$file_name = str_random(25).".".$image->getClientOriginalExtension();
|
||||
$path = public_path('uploads/suppliers/'.$file_name);
|
||||
Image::make($image->getRealPath())->resize(300, null, function ($constraint) {
|
||||
Image::make($image->getRealPath())->resize(200, null, function ($constraint) {
|
||||
$constraint->aspectRatio();
|
||||
$constraint->upsize();
|
||||
})->save($path);
|
||||
$supplier->image = $file_name;
|
||||
$supplier->image = $file_name;
|
||||
}
|
||||
|
||||
if ($supplier->save()) {
|
||||
// Redirect to the nw supplier page
|
||||
return redirect()->route('suppliers.index')->with('success', trans('admin/suppliers/message.create.success'));
|
||||
}
|
||||
return redirect()->back()->withInput()->withErrors($supplier->getErrors());
|
||||
|
@ -160,16 +159,16 @@ class SuppliersController extends Controller
|
|||
$supplier->notes = request('notes');
|
||||
|
||||
|
||||
if (Input::file('image')) {
|
||||
if ($request->file('image')) {
|
||||
$image = $request->file('image');
|
||||
$file_name = 'suppliers-'.str_random(25).".".$image->getClientOriginalExtension();
|
||||
$file_name = str_random(25).".".$image->getClientOriginalExtension();
|
||||
$path = public_path('uploads/suppliers/'.$file_name);
|
||||
Image::make($image->getRealPath())->resize(300, null, function ($constraint) {
|
||||
Image::make($image->getRealPath())->resize(200, null, function ($constraint) {
|
||||
$constraint->aspectRatio();
|
||||
$constraint->upsize();
|
||||
})->save($path);
|
||||
$supplier->image = $file_name;
|
||||
} elseif (request('image_delete') == 1) {
|
||||
} elseif ($request->input('image_delete')=='1') {
|
||||
$supplier->image = null;
|
||||
}
|
||||
|
||||
|
|
|
@ -85,10 +85,6 @@ class UsersController extends Controller
|
|||
$permissions = $this->filterDisplayable($permissions);
|
||||
|
||||
return view('users/edit', compact('groups', 'userGroups', 'permissions', 'userPermissions'))
|
||||
->with('location_list', Helper::locationsList())
|
||||
->with('manager_list', Helper::managerList())
|
||||
->with('company_list', Helper::companyList())
|
||||
->with('department_list', Helper::departmentList())
|
||||
->with('user', new User);
|
||||
}
|
||||
|
||||
|
@ -123,6 +119,11 @@ class UsersController extends Controller
|
|||
$user->company_id = Company::getIdForUser($request->input('company_id', null));
|
||||
$user->manager_id = $request->input('manager_id', null);
|
||||
$user->notes = $request->input('notes');
|
||||
$user->address = $request->input('address', null);
|
||||
$user->city = $request->input('city', null);
|
||||
$user->state = $request->input('state', null);
|
||||
$user->country = $request->input('country', null);
|
||||
$user->zip = $request->input('zip', null);
|
||||
|
||||
// Strip out the superuser permission if the user isn't a superadmin
|
||||
$permissions_array = $request->input('permission');
|
||||
|
@ -232,9 +233,9 @@ class UsersController extends Controller
|
|||
|
||||
public function edit($id)
|
||||
{
|
||||
try {
|
||||
|
||||
$user = User::find($id);
|
||||
if ($user = User::find($id)) {
|
||||
|
||||
$this->authorize('update', $user);
|
||||
$permissions = config('permissions');
|
||||
|
||||
|
@ -244,19 +245,14 @@ class UsersController extends Controller
|
|||
$user->permissions = $user->decodePermissions();
|
||||
$userPermissions = Helper::selectedPermissionsArray($permissions, $user->permissions);
|
||||
$permissions = $this->filterDisplayable($permissions);
|
||||
|
||||
} catch (UserNotFoundException $e) {
|
||||
|
||||
$error = trans('admin/users/message.user_not_found', compact('id'));
|
||||
return redirect()->route('users.index')->with('error', $error);
|
||||
return view('users/edit', compact('user', 'groups', 'userGroups', 'permissions', 'userPermissions'))->with('item', $user);
|
||||
}
|
||||
|
||||
// Show the page
|
||||
return view('users/edit', compact('user', 'groups', 'userGroups', 'permissions', 'userPermissions'))
|
||||
->with('location_list', Helper::locationsList())
|
||||
->with('department_list', Helper::departmentList())
|
||||
->with('company_list', Helper::companyList())
|
||||
->with('manager_list', Helper::managerList());
|
||||
$error = trans('admin/users/message.user_not_found', compact('id'));
|
||||
return redirect()->route('users.index')->with('error', $error);
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -321,15 +317,24 @@ class UsersController extends Controller
|
|||
$user->locale = $request->input('locale');
|
||||
$user->employee_num = $request->input('employee_num');
|
||||
$user->activated = $request->input('activated', $user->activated);
|
||||
$user->jobtitle = $request->input('jobtitle');
|
||||
$user->jobtitle = $request->input('jobtitle', null);
|
||||
$user->phone = $request->input('phone');
|
||||
$user->location_id = $request->input('location_id', null);
|
||||
$user->company_id = Company::getIdForUser($request->input('company_id', null));
|
||||
$user->manager_id = $request->input('manager_id', null);
|
||||
$user->notes = $request->input('notes');
|
||||
$user->department_id = $request->input('department_id', null);
|
||||
$user->address = $request->input('address', null);
|
||||
$user->city = $request->input('city', null);
|
||||
$user->state = $request->input('state', null);
|
||||
$user->country = $request->input('country', null);
|
||||
$user->zip = $request->input('zip', null);
|
||||
|
||||
|
||||
// Update the location of any assets checked out to this user
|
||||
Asset::where('assigned_type', User::class)
|
||||
->where('assigned_to', $user->id)->update(['location_id' => $request->input('location_id', null)]);
|
||||
|
||||
// Do we want to update the user password?
|
||||
if ($request->has('password')) {
|
||||
$user->password = bcrypt($request->input('password'));
|
||||
|
@ -435,11 +440,6 @@ class UsersController extends Controller
|
|||
if ($request->input('bulk_actions')=='edit') {
|
||||
|
||||
return view('users/bulk-edit', compact('users'))
|
||||
->with('location_list', Helper::locationsList())
|
||||
->with('company_list', Helper::companyList())
|
||||
->with('manager_list', Helper::managerList())
|
||||
->with('manager_list', Helper::managerList())
|
||||
->with('department_list', Helper::departmentList())
|
||||
->with('groups', Group::pluck('name', 'id'));
|
||||
}
|
||||
|
||||
|
@ -725,7 +725,7 @@ class UsersController extends Controller
|
|||
$user->first_name = '';
|
||||
$user->last_name = '';
|
||||
$user->email = substr($user->email, ($pos = strpos($user->email, '@')) !== false ? $pos : 0);
|
||||
;
|
||||
|
||||
$user->id = null;
|
||||
|
||||
// Get this user groups
|
||||
|
@ -738,10 +738,6 @@ class UsersController extends Controller
|
|||
|
||||
// Show the page
|
||||
return view('users/edit', compact('permissions', 'userPermissions'))
|
||||
->with('location_list', Helper::locationsList())
|
||||
->with('company_list', Helper::companyList())
|
||||
->with('manager_list', Helper::managerList())
|
||||
->with('department_list', Helper::departmentList())
|
||||
->with('user', $user)
|
||||
->with('groups', Group::pluck('name', 'id'))
|
||||
->with('userGroups', $userGroups)
|
||||
|
|
|
@ -68,7 +68,7 @@ class ViewAssetsController extends Controller
|
|||
public function getRequestableIndex()
|
||||
{
|
||||
|
||||
$assets = Asset::with('model', 'defaultLoc', 'assetloc', 'assignedTo', 'requests')->Hardware()->RequestableAssets()->get();
|
||||
$assets = Asset::with('model', 'defaultLoc', 'location', 'assignedTo', 'requests')->Hardware()->RequestableAssets()->get();
|
||||
$models = AssetModel::with('category', 'requests', 'assets')->RequestableModels()->get();
|
||||
|
||||
return view('account/requestable-assets', compact('user', 'assets', 'models'));
|
||||
|
|
|
@ -30,7 +30,7 @@ class AssetsTransformer
|
|||
'id' => (int) $asset->model->id,
|
||||
'name'=> e($asset->model->name)
|
||||
] : null,
|
||||
'model_number' => ($asset->model) ? e($asset->model->model_number) : null,
|
||||
'model_number' => (($asset->model) && ($asset->model->model_number)) ? e($asset->model->model_number) : null,
|
||||
'status_label' => ($asset->assetstatus) ? [
|
||||
'id' => (int) $asset->assetstatus->id,
|
||||
'name'=> e($asset->present()->statusText),
|
||||
|
@ -48,15 +48,15 @@ class AssetsTransformer
|
|||
'id' => (int) $asset->supplier->id,
|
||||
'name'=> e($asset->supplier->name)
|
||||
] : null,
|
||||
'notes' => e($asset->notes),
|
||||
'order_number' => e($asset->order_number),
|
||||
'notes' => ($asset->notes) ? e($asset->notes) : null,
|
||||
'order_number' => ($asset->order_number) ? e($asset->order_number) : null,
|
||||
'company' => ($asset->company) ? [
|
||||
'id' => (int) $asset->company->id,
|
||||
'name'=> e($asset->company->name)
|
||||
] : null,
|
||||
'location' => ($asset->assetLoc) ? [
|
||||
'id' => (int) $asset->assetLoc->id,
|
||||
'name'=> e($asset->assetLoc->name)
|
||||
'location' => ($asset->location) ? [
|
||||
'id' => (int) $asset->location->id,
|
||||
'name'=> e($asset->location->name)
|
||||
] : null,
|
||||
'rtd_location' => ($asset->defaultLoc) ? [
|
||||
'id' => (int) $asset->defaultLoc->id,
|
||||
|
@ -64,10 +64,11 @@ class AssetsTransformer
|
|||
] : null,
|
||||
'image' => ($asset->getImageUrl()) ? $asset->getImageUrl() : null,
|
||||
'assigned_to' => $this->transformAssignedTo($asset),
|
||||
'warranty' => ($asset->warranty_months > 0) ? e($asset->warranty_months . ' ' . trans('admin/hardware/form.months')) : null,
|
||||
'warranty_months' => ($asset->warranty_months > 0) ? e($asset->warranty_months . ' ' . trans('admin/hardware/form.months')) : null,
|
||||
'warranty_expires' => ($asset->warranty_months > 0) ? Helper::getFormattedDateObject($asset->warranty_expires, 'date') : null,
|
||||
'created_at' => Helper::getFormattedDateObject($asset->created_at, 'datetime'),
|
||||
'updated_at' => Helper::getFormattedDateObject($asset->updated_at, 'datetime'),
|
||||
'deleted_at' => Helper::getFormattedDateObject($asset->deleted_at, 'datetime'),
|
||||
'purchase_date' => Helper::getFormattedDateObject($asset->purchase_date, 'date'),
|
||||
'last_checkout' => Helper::getFormattedDateObject($asset->last_checkout, 'datetime'),
|
||||
'expected_checkin' => Helper::getFormattedDateObject($asset->expected_checkin, 'date'),
|
||||
|
@ -129,19 +130,19 @@ class AssetsTransformer
|
|||
public function transformAssignedTo($asset)
|
||||
{
|
||||
if ($asset->checkedOutToUser()) {
|
||||
return $asset->assignedTo ? [
|
||||
'id' => (int) $asset->assignedTo->id,
|
||||
'username' => e($asset->assignedTo->username),
|
||||
'name' => e($asset->assignedTo->getFullNameAttribute()),
|
||||
'first_name'=> e($asset->assignedTo->first_name),
|
||||
'last_name'=> e($asset->assignedTo->last_name),
|
||||
'employee_number' => e($asset->assignedTo->employee_num),
|
||||
return $asset->assigned ? [
|
||||
'id' => (int) $asset->assigned->id,
|
||||
'username' => e($asset->assigned->username),
|
||||
'name' => e($asset->assigned->getFullNameAttribute()),
|
||||
'first_name'=> e($asset->assigned->first_name),
|
||||
'last_name'=> ($asset->assigned->last_name) ? e($asset->assigned->last_name) : null,
|
||||
'employee_number' => ($asset->assigned->employee_num) ? e($asset->assigned->employee_num) : null,
|
||||
'type' => 'user'
|
||||
] : null;
|
||||
}
|
||||
return $asset->assignedTo ? [
|
||||
'id' => $asset->assignedTo->id,
|
||||
'name' => $asset->assignedTo->display_name,
|
||||
return $asset->assigned ? [
|
||||
'id' => $asset->assigned->id,
|
||||
'name' => $asset->assigned->display_name,
|
||||
'type' => $asset->assignedType()
|
||||
] : null;
|
||||
}
|
||||
|
|
|
@ -25,6 +25,7 @@ class CategoriesTransformer
|
|||
$array = [
|
||||
'id' => (int) $category->id,
|
||||
'name' => e($category->name),
|
||||
'image' => ($category->image) ? e(url('/').'/uploads/categories/'.e($category->image)) : null,
|
||||
'type' => e($category->category_type),
|
||||
'eula' => ($category->getEula()) ? true : false,
|
||||
'checkin_email' => ($category->checkin_email =='1') ? true : false,
|
||||
|
|
|
@ -25,6 +25,7 @@ class CompaniesTransformer
|
|||
$array = [
|
||||
'id' => (int) $company->id,
|
||||
'name' => e($company->name),
|
||||
'image' => ($company->image) ? e(url('/').'/uploads/companies/'.e($company->image)) : null,
|
||||
"created_at" => Helper::getFormattedDateObject($company->created_at, 'datetime'),
|
||||
"updated_at" => Helper::getFormattedDateObject($company->updated_at, 'datetime'),
|
||||
"assets_count" => (int) $company->assets_count,
|
||||
|
|
|
@ -22,7 +22,8 @@ class ComponentsTransformer
|
|||
$array = [
|
||||
'id' => (int) $component->id,
|
||||
'name' => e($component->name),
|
||||
'serial_number' => e($component->serial),
|
||||
'image' => ($component->image) ? e(url('/').'/uploads/components/'.e($component->image)) : null,
|
||||
'serial_number' => ($component->serial) ? e($component->serial) : null,
|
||||
'location' => ($component->location) ? [
|
||||
'id' => (int) $component->location->id,
|
||||
'name' => e($component->location->name)
|
||||
|
|
|
@ -22,6 +22,8 @@ class ConsumablesTransformer
|
|||
{
|
||||
$array = [
|
||||
'id' => (int) $consumable->id,
|
||||
'name' => e($consumable->name),
|
||||
'image' => ($consumable->image) ? e(url('/').'/uploads/consumables/'.e($consumable->image)) : null,
|
||||
'category' => ($consumable->category) ? ['id' => $consumable->category->id, 'name' => e($consumable->category->name)] : null,
|
||||
'company' => ($consumable->company) ? ['id' => (int) $consumable->company->id, 'name' => e($consumable->company->name)] : null,
|
||||
'item_no' => e($consumable->item_no),
|
||||
|
@ -29,7 +31,6 @@ class ConsumablesTransformer
|
|||
'manufacturer' => ($consumable->manufacturer) ? ['id' => (int) $consumable->manufacturer->id, 'name' => e($consumable->manufacturer->name)] : null,
|
||||
'min_amt' => (int) $consumable->min_amt,
|
||||
'model_number' => e($consumable->model_number),
|
||||
'name' => e($consumable->name),
|
||||
'remaining' => $consumable->numRemaining(),
|
||||
'order_number' => e($consumable->order_number),
|
||||
'purchase_cost' => Helper::formatCurrencyOutput($consumable->purchase_cost),
|
||||
|
|
|
@ -25,6 +25,7 @@ class DepartmentsTransformer
|
|||
$array = [
|
||||
'id' => (int) $department->id,
|
||||
'name' => e($department->name),
|
||||
'image' => ($department->image) ? e(url('/').'/uploads/departments/'.e($department->image)) : null,
|
||||
'company' => ($department->company) ? [
|
||||
'id' => (int) $department->company->id,
|
||||
'name'=> e($department->company->name)
|
||||
|
|
|
@ -33,13 +33,15 @@ class LocationsTransformer
|
|||
$array = [
|
||||
'id' => (int) $location->id,
|
||||
'name' => e($location->name),
|
||||
'image' => ($location->image) ? e(url('/').'/uploads/locations/'.e($location->image)) : null,
|
||||
'address' => e($location->address),
|
||||
'city' => e($location->city),
|
||||
'state' => e($location->state),
|
||||
'country' => e($location->country),
|
||||
'zip' => e($location->zip),
|
||||
'assets_checkedout' => $location->location_assets_count,
|
||||
'assets_default' => $location->assigned_assets_count,
|
||||
'assets_count' => (int) $location->assets_count,
|
||||
'rtd_assets_count' => (int) $location->rtd_assets_count,
|
||||
'users_count' => (int) $location->users_count,
|
||||
|
||||
'created_at' => Helper::getFormattedDateObject($location->created_at, 'datetime'),
|
||||
'updated_at' => Helper::getFormattedDateObject($location->updated_at, 'datetime'),
|
||||
|
|
|
@ -26,6 +26,7 @@ class ManufacturersTransformer
|
|||
'id' => (int) $manufacturer->id,
|
||||
'name' => e($manufacturer->name),
|
||||
'url' => e($manufacturer->url),
|
||||
'image' => ($manufacturer->image) ? e(url('/').'/uploads/manufacturers/'.e($manufacturer->image)) : null,
|
||||
'support_url' => e($manufacturer->support_url),
|
||||
'support_phone' => e($manufacturer->support_phone),
|
||||
'support_email' => e($manufacturer->support_email),
|
||||
|
|
51
app/Http/Transformers/SelectlistTransformer.php
Normal file
51
app/Http/Transformers/SelectlistTransformer.php
Normal file
|
@ -0,0 +1,51 @@
|
|||
<?php
|
||||
namespace App\Http\Transformers;
|
||||
use Illuminate\Pagination\LengthAwarePaginator;
|
||||
|
||||
/**
|
||||
* Class SelectlistTransformer
|
||||
*
|
||||
* This handles the standardized formatting of the API response we need to provide for
|
||||
* the rich (text and images) Select2 javascript.
|
||||
*
|
||||
* @package App\Http\Transformers
|
||||
* @author [A. Gianotto] [<snipe@snipe.net>]
|
||||
* @since [v4.0.16]
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
|
||||
class SelectlistTransformer
|
||||
{
|
||||
|
||||
public function transformSelectlist (LengthAwarePaginator $select_items)
|
||||
{
|
||||
$items_array = [];
|
||||
|
||||
// Loop through the paginated collection to set the array values
|
||||
foreach ($select_items as $select_item) {
|
||||
$items_array[]= [
|
||||
'id' => (int) $select_item->id,
|
||||
'text' => ($select_item->use_text) ? e($select_item->use_text) : e($select_item->name),
|
||||
'image' => ($select_item->use_image) ? e($select_item->use_image) : null,
|
||||
|
||||
];
|
||||
|
||||
}
|
||||
|
||||
$results = [
|
||||
'items' => $items_array,
|
||||
'pagination' =>
|
||||
[
|
||||
'more' => ($select_items->currentPage() >= $select_items->lastPage()) ? false : true,
|
||||
'per_page' => $select_items->perPage()
|
||||
],
|
||||
'total_count' => $select_items->total(),
|
||||
'page' => $select_items->currentPage(),
|
||||
'page_count' => $select_items->lastPage()
|
||||
];
|
||||
|
||||
return $results;
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -25,6 +25,7 @@ class SuppliersTransformer
|
|||
$array = [
|
||||
'id' => (int) $supplier->id,
|
||||
'name' => e($supplier->name),
|
||||
'image' => ($supplier->image) ? e(url('/').'/uploads/suppliers/'.e($supplier->image)) : null,
|
||||
'address' => ($supplier->address) ? e($supplier->address) : null,
|
||||
'address2' => ($supplier->address2) ? e($supplier->address2) : null,
|
||||
'city' => ($supplier->city) ? e($supplier->city) : null,
|
||||
|
@ -38,7 +39,6 @@ class SuppliersTransformer
|
|||
'assets_count' => (int) $supplier->assets_count,
|
||||
'accessories_count' => (int) $supplier->accessories_count,
|
||||
'licenses_count' => (int) $supplier->licenses_count,
|
||||
'image' => ($supplier->image) ? url('/').'/uploads/suppliers/'.e($supplier->image) : null,
|
||||
'notes' => ($supplier->notes) ? e($supplier->notes) : null,
|
||||
'created_at' => Helper::getFormattedDateObject($supplier->created_at, 'datetime'),
|
||||
'updated_at' => Helper::getFormattedDateObject($supplier->updated_at, 'datetime'),
|
||||
|
|
|
@ -35,6 +35,11 @@ class UsersTransformer
|
|||
] : null,
|
||||
'jobtitle' => ($user->jobtitle) ? e($user->jobtitle) : null,
|
||||
'phone' => ($user->phone) ? e($user->phone) : null,
|
||||
'address' => ($user->address) ? e($user->address) : null,
|
||||
'city' => ($user->city) ? e($user->city) : null,
|
||||
'state' => ($user->state) ? e($user->state) : null,
|
||||
'country' => ($user->country) ? e($user->country) : null,
|
||||
'zip' => ($user->zip) ? e($user->zip) : null,
|
||||
'email' => e($user->email),
|
||||
'department' => ($user->department) ? [
|
||||
'id' => (int) $user->department->id,
|
||||
|
|
|
@ -67,7 +67,7 @@ class AssetImporter extends ItemImporter
|
|||
}
|
||||
|
||||
$this->item['image'] = $this->findCsvMatch($row, "image");
|
||||
$this->item['warranty_months'] = intval($this->findCsvMatch($row, "warranty"));
|
||||
$this->item['warranty_months'] = intval($this->findCsvMatch($row, "warranty_months"));
|
||||
$this->item['model_id'] = $this->createOrFetchAssetModel($row);
|
||||
|
||||
// If no status ID is found
|
||||
|
|
|
@ -21,8 +21,7 @@ use Illuminate\Notifications\Notifiable;
|
|||
class Asset extends Depreciable
|
||||
{
|
||||
protected $presenter = 'App\Presenters\AssetPresenter';
|
||||
use Loggable, Requestable, Presentable, Notifiable;
|
||||
use SoftDeletes;
|
||||
use Loggable, Requestable, Presentable, Notifiable, SoftDeletes, ValidatingTrait, UniqueUndeletedTrait;
|
||||
|
||||
const LOCATION = 'location';
|
||||
const ASSET = 'asset';
|
||||
|
@ -53,7 +52,6 @@ class Asset extends Depreciable
|
|||
];
|
||||
|
||||
|
||||
use ValidatingTrait, UniqueUndeletedTrait;
|
||||
|
||||
protected $rules = [
|
||||
'name' => 'max:255|nullable',
|
||||
|
@ -85,6 +83,7 @@ class Asset extends Depreciable
|
|||
'model_id',
|
||||
'name',
|
||||
'notes',
|
||||
'order_number',
|
||||
'purchase_cost',
|
||||
'purchase_date',
|
||||
'rtd_location_id',
|
||||
|
@ -94,6 +93,8 @@ class Asset extends Depreciable
|
|||
'warranty_months',
|
||||
];
|
||||
|
||||
|
||||
|
||||
public function getDisplayNameAttribute()
|
||||
{
|
||||
return $this->present()->name();
|
||||
|
@ -126,11 +127,10 @@ class Asset extends Depreciable
|
|||
|
||||
public function availableForCheckout()
|
||||
{
|
||||
return (
|
||||
empty($this->assigned_to) &&
|
||||
$this->assetstatus->deployable == 1 &&
|
||||
empty($this->deleted_at)
|
||||
);
|
||||
if ((empty($this->assigned_to)) && (empty($this->deleted_at)) && ($this->assetstatus->deployable == 1)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -254,23 +254,33 @@ class Asset extends Depreciable
|
|||
**/
|
||||
public function assetLoc()
|
||||
{
|
||||
static $iterations=0;
|
||||
static $first_asset;
|
||||
if (!empty($this->assignedType())) {
|
||||
// dd($this->assignedType());
|
||||
if ($this->assignedType() == self::ASSET) {
|
||||
return $this->assignedto->assetloc(); // Recurse until we have a final location
|
||||
$iterations++;
|
||||
if(!$first_asset) {
|
||||
$first_asset=$this;
|
||||
}
|
||||
if($iterations>10) {
|
||||
throw new \Exception("Asset assignment Loop for Asset ID: ".$first_asset->id);
|
||||
}
|
||||
$assigned_to=Asset::find($this->assigned_to); //have to do this this way because otherwise it errors
|
||||
return $assigned_to->assetLoc(); // Recurse until we have a final location
|
||||
}
|
||||
if ($this->assignedType() == self::LOCATION) {
|
||||
return $this->assignedTo();
|
||||
return $this->assignedTo;
|
||||
}
|
||||
if ($this->assignedType() == self::USER) {
|
||||
if (!$this->assignedTo) {
|
||||
return $this->defaultLoc();
|
||||
if (!$this->assignedTo->userLoc) {
|
||||
//this makes no sense
|
||||
return $this->defaultLoc;
|
||||
}
|
||||
return $this->assignedTo->userLoc();
|
||||
return $this->assignedTo->userLoc;
|
||||
}
|
||||
|
||||
}
|
||||
return $this->defaultLoc();
|
||||
return $this->defaultLoc;
|
||||
}
|
||||
|
||||
public function assignedType()
|
||||
|
@ -406,6 +416,12 @@ class Asset extends Depreciable
|
|||
}
|
||||
|
||||
|
||||
public function location()
|
||||
{
|
||||
return $this->belongsTo('\App\Models\Location', 'location_id');
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Get auto-increment
|
||||
|
|
|
@ -149,7 +149,7 @@ class AssetModel extends SnipeModel
|
|||
public function scopeTextSearch($query, $search)
|
||||
{
|
||||
|
||||
return $query->where('name', 'LIKE', "%$search%")
|
||||
return $query->where('models.name', 'LIKE', "%$search%")
|
||||
->orWhere('model_number', 'LIKE', "%$search%")
|
||||
->orWhere(function ($query) use ($search) {
|
||||
$query->whereHas('depreciation', function ($query) use ($search) {
|
||||
|
|
|
@ -37,12 +37,6 @@ class CheckoutRequest extends Model
|
|||
|
||||
public function location()
|
||||
{
|
||||
if ($this->itemType() == "asset") {
|
||||
$asset = $this->itemRequested();
|
||||
if ($asset->assignedTo) {
|
||||
return $asset->assetloc;
|
||||
}
|
||||
}
|
||||
return $this->itemRequested()->location;
|
||||
}
|
||||
|
||||
|
|
|
@ -192,4 +192,20 @@ final class Company extends SnipeModel
|
|||
{
|
||||
return $this->hasMany(Component::class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Query builder scope to search on text
|
||||
*
|
||||
* @param Illuminate\Database\Query\Builder $query Query builder instance
|
||||
* @param text $search Search term
|
||||
*
|
||||
* @return Illuminate\Database\Query\Builder Modified query builder
|
||||
*/
|
||||
public function scopeTextSearch($query, $search)
|
||||
{
|
||||
|
||||
return $query->where(function ($query) use ($search) {
|
||||
$query->where('name', 'LIKE', '%'.$search.'%');
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -54,10 +54,10 @@ class Location extends SnipeModel
|
|||
|
||||
public function assets()
|
||||
{
|
||||
return $this->hasManyThrough('\App\Models\Asset', '\App\Models\User', 'location_id', 'assigned_to', 'id')->where("assets.assigned_type",User::class);
|
||||
return $this->hasMany('\App\Models\Asset', 'location_id');
|
||||
}
|
||||
|
||||
public function locationAssets()
|
||||
public function rtd_assets()
|
||||
{
|
||||
/* This used to have an ...->orHas() clause that referred to
|
||||
assignedAssets, and that was probably incorrect, as well as
|
||||
|
@ -88,6 +88,7 @@ class Location extends SnipeModel
|
|||
return $this->hasMany('\App\Models\Location', 'parent_id');
|
||||
}
|
||||
|
||||
// I don't think we need this anymore since we de-normed location_id in assets?
|
||||
public function assignedAssets()
|
||||
{
|
||||
return $this->morphMany('App\Models\Asset', 'assigned', 'assigned_type', 'assigned_to')->withTrashed();
|
||||
|
|
|
@ -49,9 +49,10 @@ class Statuslabel extends SnipeModel
|
|||
return 'archived';
|
||||
} elseif (($this->pending == '0') && ($this->archived == '0') && ($this->deployable == '0')) {
|
||||
return 'undeployable';
|
||||
} else {
|
||||
return 'deployable';
|
||||
}
|
||||
|
||||
return 'deployable';
|
||||
|
||||
}
|
||||
|
||||
public function scopePending()
|
||||
|
@ -78,6 +79,11 @@ class Statuslabel extends SnipeModel
|
|||
|
||||
public static function getStatuslabelTypesForDB($type)
|
||||
{
|
||||
|
||||
$statustype['pending'] = 0;
|
||||
$statustype['deployable'] = 0;
|
||||
$statustype['archived'] = 0;
|
||||
|
||||
if ($type == 'pending') {
|
||||
$statustype['pending'] = 1;
|
||||
$statustype['deployable'] = 0;
|
||||
|
@ -92,12 +98,6 @@ class Statuslabel extends SnipeModel
|
|||
$statustype['pending'] = 0;
|
||||
$statustype['deployable'] = 0;
|
||||
$statustype['archived'] = 1;
|
||||
|
||||
} else {
|
||||
$statustype['pending'] = 0;
|
||||
$statustype['deployable'] = 0;
|
||||
$statustype['archived'] = 0;
|
||||
|
||||
}
|
||||
|
||||
return $statustype;
|
||||
|
|
|
@ -4,8 +4,10 @@ namespace App\Models;
|
|||
use App\Presenters\Presentable;
|
||||
use Illuminate\Auth\Authenticatable;
|
||||
use Illuminate\Auth\Passwords\CanResetPassword;
|
||||
use Illuminate\Foundation\Auth\Access\Authorizable;
|
||||
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
|
||||
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;
|
||||
use Illuminate\Contracts\Auth\Access\Authorizable as AuthorizableContract;
|
||||
use Watson\Validating\ValidatingTrait;
|
||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
use App\Http\Traits\UniqueUndeletedTrait;
|
||||
|
@ -16,7 +18,7 @@ class User extends SnipeModel implements AuthenticatableContract, CanResetPasswo
|
|||
{
|
||||
protected $presenter = 'App\Presenters\UserPresenter';
|
||||
use SoftDeletes, ValidatingTrait;
|
||||
use Authenticatable, CanResetPassword, HasApiTokens;
|
||||
use Authenticatable, Authorizable, CanResetPassword, HasApiTokens;
|
||||
use UniqueUndeletedTrait;
|
||||
use Notifiable;
|
||||
use Presentable;
|
||||
|
@ -36,6 +38,11 @@ class User extends SnipeModel implements AuthenticatableContract, CanResetPasswo
|
|||
'phone_number',
|
||||
'username',
|
||||
'first_name',
|
||||
'address',
|
||||
'city',
|
||||
'state',
|
||||
'country',
|
||||
'zip',
|
||||
];
|
||||
|
||||
protected $casts = [
|
||||
|
@ -53,7 +60,8 @@ class User extends SnipeModel implements AuthenticatableContract, CanResetPasswo
|
|||
'username' => 'required|string|min:1|unique_undeleted',
|
||||
'email' => 'email|nullable',
|
||||
'password' => 'required|min:6',
|
||||
'locale' => 'max:10|nullable'
|
||||
'locale' => 'max:10|nullable',
|
||||
'manager_id' => 'nullable|different:id',
|
||||
];
|
||||
|
||||
|
||||
|
@ -191,12 +199,22 @@ class User extends SnipeModel implements AuthenticatableContract, CanResetPasswo
|
|||
|
||||
/**
|
||||
* Get the asset's location based on the assigned user
|
||||
* @todo - this should be removed once we're sure we've switched it
|
||||
* to location()
|
||||
**/
|
||||
public function userloc()
|
||||
{
|
||||
return $this->belongsTo('\App\Models\Location', 'location_id')->withTrashed();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the asset's location based on the assigned user
|
||||
**/
|
||||
public function location()
|
||||
{
|
||||
return $this->belongsTo('\App\Models\Location', 'location_id')->withTrashed();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the user's manager based on the assigned user
|
||||
**/
|
||||
|
|
|
@ -2,118 +2,12 @@
|
|||
|
||||
namespace App\Policies;
|
||||
|
||||
use App\Models\Accessory;
|
||||
use App\Models\Company;
|
||||
use App\Models\User;
|
||||
use Illuminate\Auth\Access\HandlesAuthorization;
|
||||
use App\Policies\CheckoutablePermissionsPolicy;
|
||||
|
||||
class AccessoryPolicy
|
||||
class AccessoryPolicy extends CheckoutablePermissionsPolicy
|
||||
{
|
||||
use HandlesAuthorization;
|
||||
|
||||
public function before(User $user, $ability, $accessory)
|
||||
protected function columnName()
|
||||
{
|
||||
// Lets move all company related checks here.
|
||||
if ($accessory instanceof \App\Models\Accessory && !Company::isCurrentUserHasAccess($accessory)) {
|
||||
return false;
|
||||
}
|
||||
// If an admin, they can do all asset related tasks.
|
||||
if ($user->hasAccess('admin')) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public function index(User $user)
|
||||
{
|
||||
// dd('here');
|
||||
return $user->hasAccess('accessories.view');
|
||||
}
|
||||
/**
|
||||
* Determine whether the user can view the accessory.
|
||||
*
|
||||
* @param \App\User $user
|
||||
* @param \App\Accessory $accessory
|
||||
* @return mixed
|
||||
*/
|
||||
public function view(User $user, Accessory $accessory = null)
|
||||
{
|
||||
//
|
||||
return $user->hasAccess('accessories.view');
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether the user can create accessories.
|
||||
*
|
||||
* @param \App\User $user
|
||||
* @return mixed
|
||||
*/
|
||||
public function create(User $user)
|
||||
{
|
||||
//
|
||||
return $user->hasAccess('accessories.create');
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether the user can update the accessory.
|
||||
*
|
||||
* @param \App\User $user
|
||||
* @param \App\Accessory $accessory
|
||||
* @return mixed
|
||||
*/
|
||||
public function update(User $user, Accessory $accessory = null)
|
||||
{
|
||||
//
|
||||
return $user->hasAccess('accessories.edit');
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether the user can delete the accessory.
|
||||
*
|
||||
* @param \App\User $user
|
||||
* @param \App\Accessory $accessory
|
||||
* @return mixed
|
||||
*/
|
||||
public function delete(User $user, Accessory $accessory = null)
|
||||
{
|
||||
//
|
||||
return $user->hasAccess('accessories.delete');
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether the user can checkout the accessory.
|
||||
*
|
||||
* @param \App\User $user
|
||||
* @param \App\Accessory $accessory
|
||||
* @return mixed
|
||||
*/
|
||||
public function checkout(User $user, Accessory $accessory = null)
|
||||
{
|
||||
return $user->hasAccess('accessories.checkout');
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether the user can checkin the accessory.
|
||||
*
|
||||
* @param \App\User $user
|
||||
* @param \App\Accessory $accessory
|
||||
* @return mixed
|
||||
*/
|
||||
public function checkin(User $user, Accessory $accessory = null)
|
||||
{
|
||||
return $user->hasAccess('accessories.checkin');
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether the user can manage the accessory.
|
||||
*
|
||||
* @param \App\User $user
|
||||
* @param \App\Accessory $accessory
|
||||
* @return mixed
|
||||
*/
|
||||
public function manage(User $user, Accessory $accessory = null)
|
||||
{
|
||||
return $user->hasAccess('accessories.checkin')
|
||||
|| $user->hasAccess('accessories.edit')
|
||||
|| $user->hasAccess('accessories.checkout');
|
||||
return 'accessories';
|
||||
}
|
||||
}
|
||||
|
|
13
app/Policies/AssetModelPolicy.php
Normal file
13
app/Policies/AssetModelPolicy.php
Normal file
|
@ -0,0 +1,13 @@
|
|||
<?php
|
||||
|
||||
namespace App\Policies;
|
||||
|
||||
use App\Policies\SnipePermissionsPolicy;
|
||||
|
||||
class AssetModelPolicy extends SnipePermissionsPolicy
|
||||
{
|
||||
protected function columnName()
|
||||
{
|
||||
return 'models';
|
||||
}
|
||||
}
|
|
@ -2,79 +2,18 @@
|
|||
|
||||
namespace App\Policies;
|
||||
|
||||
use App\Models\Asset;
|
||||
use App\Models\Company;
|
||||
use App\Models\User;
|
||||
use Illuminate\Auth\Access\HandlesAuthorization;
|
||||
use App\Policies\CheckoutablePermissionsPolicy;
|
||||
|
||||
class AssetPolicy
|
||||
class AssetPolicy extends CheckoutablePermissionsPolicy
|
||||
{
|
||||
use HandlesAuthorization;
|
||||
|
||||
/**
|
||||
* Create a new policy instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
protected function columnName()
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
public function before(User $user, $ability, $asset)
|
||||
{
|
||||
// Lets move all company related checks here.
|
||||
if ($asset instanceof \App\Models\Asset && !Company::isCurrentUserHasAccess($asset)) {
|
||||
return false;
|
||||
}
|
||||
// If an admin, they can do all asset related tasks.
|
||||
if ($user->hasAccess('admin')) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
public function index(User $user)
|
||||
{
|
||||
return $user->hasAccess('assets.view');
|
||||
}
|
||||
public function view(User $user, Asset $asset)
|
||||
{
|
||||
return $user->hasAccess('assets.view');
|
||||
return 'assets';
|
||||
}
|
||||
|
||||
public function viewRequestable(User $user, Asset $asset = null)
|
||||
{
|
||||
return $user->hasAccess('assets.view.requestable');
|
||||
}
|
||||
|
||||
public function create(User $user)
|
||||
{
|
||||
return $user->hasAccess('assets.create');
|
||||
}
|
||||
|
||||
public function checkout(User $user, Asset $asset = null)
|
||||
{
|
||||
return $user->hasAccess('assets.checkout');
|
||||
}
|
||||
|
||||
public function checkin(User $user, Asset $asset = null)
|
||||
{
|
||||
return $user->hasAccess('assets.checkin');
|
||||
}
|
||||
|
||||
public function delete(User $user, Asset $asset = null)
|
||||
{
|
||||
return $user->hasAccess('assets.delete');
|
||||
}
|
||||
public function manage(User $user, Asset $asset = null)
|
||||
{
|
||||
return $user->hasAccess('assets.checkin')
|
||||
|| $user->hasAccess('assets.edit')
|
||||
|| $user->hasAccess('assets.delete')
|
||||
|| $user->hasAccess('assets.checkout');
|
||||
}
|
||||
|
||||
public function update(User $user, Asset $asset = null)
|
||||
{
|
||||
return $user->hasAccess('assets.edit');
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,98 +2,12 @@
|
|||
|
||||
namespace App\Policies;
|
||||
|
||||
use App\Models\Company;
|
||||
use App\Models\Category;
|
||||
use App\Models\User;
|
||||
use Illuminate\Auth\Access\HandlesAuthorization;
|
||||
use App\Policies\SnipePermissionsPolicy;
|
||||
|
||||
class CategoryPolicy
|
||||
class CategoryPolicy extends SnipePermissionsPolicy
|
||||
{
|
||||
use HandlesAuthorization;
|
||||
|
||||
|
||||
public function before(User $user, $category)
|
||||
protected function columnName()
|
||||
{
|
||||
// Lets move all company related checks here.
|
||||
if ($category instanceof \App\Models\Category && !Company::isCurrentUserHasAccess($category)) {
|
||||
return false;
|
||||
}
|
||||
// If an admin, they can do all asset related tasks.
|
||||
if ($user->hasAccess('admin')) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Determine whether the user can view the category.
|
||||
*
|
||||
* @param \App\Models\User $user
|
||||
* @param \App\Category $category
|
||||
* @return mixed
|
||||
*/
|
||||
public function view(User $user)
|
||||
{
|
||||
return $user->hasAccess('categories.view');
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether the user can create categories.
|
||||
*
|
||||
* @param \App\Models\User $user
|
||||
* @return mixed
|
||||
*/
|
||||
public function create(User $user)
|
||||
{
|
||||
return $user->hasAccess('categories.create');
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether the user can update the category.
|
||||
*
|
||||
* @param \App\Models\User $user
|
||||
* @param \App\Category $category
|
||||
* @return mixed
|
||||
*/
|
||||
public function update(User $user)
|
||||
{
|
||||
//
|
||||
return $user->hasAccess('categories.edit');
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether the user can delete the category.
|
||||
*
|
||||
* @param \App\Models\User $user
|
||||
* @param \App\Category $category
|
||||
* @return mixed
|
||||
*/
|
||||
public function delete(User $user)
|
||||
{
|
||||
//
|
||||
return $user->hasAccess('categories.delete');
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether the user can view the category index.
|
||||
*
|
||||
* @param \App\Models\User $user
|
||||
* @param \App\Models\Category $category
|
||||
* @return mixed
|
||||
*/
|
||||
|
||||
public function index(User $user)
|
||||
{
|
||||
return $user->hasAccess('categories.view');
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether the user can manage the category.
|
||||
*
|
||||
* @param \App\Models\User $user
|
||||
* @param \App\Models\Category $category
|
||||
* @return mixed
|
||||
*/
|
||||
public function manage(User $user)
|
||||
{
|
||||
return $user->hasAccess('categories.edit');
|
||||
return 'categories';
|
||||
}
|
||||
}
|
||||
|
|
44
app/Policies/CheckoutablePermissionsPolicy.php
Normal file
44
app/Policies/CheckoutablePermissionsPolicy.php
Normal file
|
@ -0,0 +1,44 @@
|
|||
<?php
|
||||
namespace App\Policies;
|
||||
|
||||
|
||||
use App\Models\User;
|
||||
use App\Policies\SnipePermissionsPolicy;
|
||||
|
||||
abstract class CheckoutablePermissionsPolicy extends SnipePermissionsPolicy
|
||||
{
|
||||
/**
|
||||
* Determine whether the user can checkout the accessory.
|
||||
*
|
||||
* @param \App\User $user
|
||||
* @return mixed
|
||||
*/
|
||||
public function checkout(User $user, $item = null)
|
||||
{
|
||||
return $user->hasAccess($this->columnName().'.checkout');
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether the user can checkin the accessory.
|
||||
*
|
||||
* @param \App\User $user
|
||||
* @return mixed
|
||||
*/
|
||||
public function checkin(User $user, $item = null)
|
||||
{
|
||||
return $user->hasAccess($this->columnName().'.checkin');
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether the user can manage the accessory.
|
||||
*
|
||||
* @param \App\User $user
|
||||
* @return mixed
|
||||
*/
|
||||
public function manage(User $user, $item = null)
|
||||
{
|
||||
return $user->hasAccess($this->columnName().'.checkin')
|
||||
|| $user->hasAccess($this->columnName().'.edit')
|
||||
|| $user->hasAccess($this->columnName().'.checkout');
|
||||
}
|
||||
}
|
|
@ -2,113 +2,12 @@
|
|||
|
||||
namespace App\Policies;
|
||||
|
||||
use App\Models\Company;
|
||||
use App\Models\Component;
|
||||
use App\Models\User;
|
||||
use Illuminate\Auth\Access\HandlesAuthorization;
|
||||
use App\Policies\CheckoutablePermissionsPolicy;
|
||||
|
||||
class ComponentPolicy
|
||||
class ComponentPolicy extends CheckoutablePermissionsPolicy
|
||||
{
|
||||
use HandlesAuthorization;
|
||||
|
||||
|
||||
public function before(User $user, $ability, $component)
|
||||
protected function columnName()
|
||||
{
|
||||
// Lets move all company related checks here.
|
||||
if ($component instanceof \App\Models\Component && !Company::isCurrentUserHasAccess($component)) {
|
||||
return false;
|
||||
}
|
||||
// If an admin, they can do all asset related tasks.
|
||||
if ($user->hasAccess('admin')) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Determine whether the user can view the component.
|
||||
*
|
||||
* @param \App\User $user
|
||||
* @param \App\Component $component
|
||||
* @return mixed
|
||||
*/
|
||||
public function view(User $user, Component $component = null)
|
||||
{
|
||||
//
|
||||
return $user->hasAccess('components.view');
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether the user can create components.
|
||||
*
|
||||
* @param \App\User $user
|
||||
* @return mixed
|
||||
*/
|
||||
public function create(User $user)
|
||||
{
|
||||
//
|
||||
return $user->hasAccess('components.create');
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether the user can update the component.
|
||||
*
|
||||
* @param \App\User $user
|
||||
* @param \App\Component $component
|
||||
* @return mixed
|
||||
*/
|
||||
public function update(User $user, Component $component = null)
|
||||
{
|
||||
//
|
||||
return $user->hasAccess('components.edit');
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether the user can delete the component.
|
||||
*
|
||||
* @param \App\User $user
|
||||
* @param \App\Component $component
|
||||
* @return mixed
|
||||
*/
|
||||
public function delete(User $user, Component $component = null)
|
||||
{
|
||||
//
|
||||
return $user->hasAccess('components.delete');
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether the user can checkout the component.
|
||||
*
|
||||
* @param \App\User $user
|
||||
* @param \App\Accessory $component
|
||||
* @return mixed
|
||||
*/
|
||||
public function checkout(User $user, Component $component = null)
|
||||
{
|
||||
return $user->hasAccess('components.checkout');
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether the user can checkin the component.
|
||||
*
|
||||
* @param \App\User $user
|
||||
* @param \App\Component $component
|
||||
* @return mixed
|
||||
*/
|
||||
public function checkin(User $user, Component $component = null)
|
||||
{
|
||||
return $user->hasAccess('components.checkin');
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether the user can manage the component.
|
||||
*
|
||||
* @param \App\User $user
|
||||
* @param \App\Component $component
|
||||
* @return mixed
|
||||
*/
|
||||
public function manage(User $user, Component $component = null)
|
||||
{
|
||||
return $user->hasAccess('components.checkin')
|
||||
|| $user->hasAccess('components.edit')
|
||||
|| $user->hasAccess('components.checkout');
|
||||
return 'components';
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,118 +2,12 @@
|
|||
|
||||
namespace App\Policies;
|
||||
|
||||
use App\Models\Company;
|
||||
use App\Models\Consumable;
|
||||
use App\Models\User;
|
||||
use Illuminate\Auth\Access\HandlesAuthorization;
|
||||
use App\Policies\CheckoutablePermissionsPolicy;
|
||||
|
||||
class ConsumablePolicy
|
||||
class ConsumablePolicy extends CheckoutablePermissionsPolicy
|
||||
{
|
||||
use HandlesAuthorization;
|
||||
|
||||
|
||||
public function before(User $user, $ability, $consumable)
|
||||
protected function columnName()
|
||||
{
|
||||
// Lets move all company related checks here.
|
||||
if ($consumable instanceof \App\Models\Consumable && !Company::isCurrentUserHasAccess($consumable)) {
|
||||
return false;
|
||||
}
|
||||
// If an admin, they can do all asset related tasks.
|
||||
if ($user->hasAccess('admin')) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Determine whether the user can view the consumable.
|
||||
*
|
||||
* @param \App\User $user
|
||||
* @param \App\Consumable $consumable
|
||||
* @return mixed
|
||||
*/
|
||||
public function view(User $user, Consumable $consumable = null)
|
||||
{
|
||||
//
|
||||
return $user->hasAccess('consumables.view');
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether the user can create consumables.
|
||||
*
|
||||
* @param \App\User $user
|
||||
* @return mixed
|
||||
*/
|
||||
public function create(User $user)
|
||||
{
|
||||
//
|
||||
return $user->hasAccess('consumables.create');
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether the user can update the consumable.
|
||||
*
|
||||
* @param \App\User $user
|
||||
* @param \App\Consumable $consumable
|
||||
* @return mixed
|
||||
*/
|
||||
public function update(User $user, Consumable $consumable = null)
|
||||
{
|
||||
//
|
||||
return $user->hasAccess('consumables.edit');
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether the user can delete the consumable.
|
||||
*
|
||||
* @param \App\User $user
|
||||
* @param \App\Consumable $consumable
|
||||
* @return mixed
|
||||
*/
|
||||
public function delete(User $user, Consumable $consumable = null)
|
||||
{
|
||||
//
|
||||
return $user->hasAccess('consumables.delete');
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether the user can checkout the consumable.
|
||||
*
|
||||
* @param \App\User $user
|
||||
* @param \App\Accessory $consumable
|
||||
* @return mixed
|
||||
*/
|
||||
public function checkout(User $user, Consumable $consumable = null)
|
||||
{
|
||||
return $user->hasAccess('consumables.checkout');
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether the user can checkin the consumable.
|
||||
*
|
||||
* @param \App\User $user
|
||||
* @param \App\Consumable $consumable
|
||||
* @return mixed
|
||||
*/
|
||||
public function checkin(User $user, Consumable $consumable = null)
|
||||
{
|
||||
return $user->hasAccess('consumables.checkin');
|
||||
}
|
||||
|
||||
public function index(User $user)
|
||||
{
|
||||
return $user->hasAccess('consumables.view');
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether the user can manage the consumable.
|
||||
*
|
||||
* @param \App\User $user
|
||||
* @param \App\Consumable $consumable
|
||||
* @return mixed
|
||||
*/
|
||||
public function manage(User $user, Consumable $consumable = null)
|
||||
{
|
||||
return $user->hasAccess('consumables.checkin')
|
||||
|| $user->hasAccess('consumables.edit')
|
||||
|| $user->hasAccess('consumables.checkout');
|
||||
return 'consumables';
|
||||
}
|
||||
}
|
||||
|
|
13
app/Policies/CustomFieldPolicy.php
Normal file
13
app/Policies/CustomFieldPolicy.php
Normal file
|
@ -0,0 +1,13 @@
|
|||
<?php
|
||||
|
||||
namespace App\Policies;
|
||||
|
||||
use App\Policies\SnipePermissionsPolicy;
|
||||
|
||||
class CustomFieldPolicy extends SnipePermissionsPolicy
|
||||
{
|
||||
protected function columnName()
|
||||
{
|
||||
return 'customfields';
|
||||
}
|
||||
}
|
13
app/Policies/DepartmentPolicy.php
Normal file
13
app/Policies/DepartmentPolicy.php
Normal file
|
@ -0,0 +1,13 @@
|
|||
<?php
|
||||
|
||||
namespace App\Policies;
|
||||
|
||||
use App\Policies\SnipePermissionsPolicy;
|
||||
|
||||
class DepartmentPolicy extends SnipePermissionsPolicy
|
||||
{
|
||||
protected function columnName()
|
||||
{
|
||||
return 'departments';
|
||||
}
|
||||
}
|
|
@ -2,102 +2,17 @@
|
|||
|
||||
namespace App\Policies;
|
||||
|
||||
use App\Models\Company;
|
||||
use App\Models\License;
|
||||
use App\Models\LicenseSeat;
|
||||
use App\Models\User;
|
||||
use Illuminate\Auth\Access\HandlesAuthorization;
|
||||
use App\Policies\CheckoutablePermissionsPolicy;
|
||||
|
||||
class LicensePolicy
|
||||
class LicensePolicy extends CheckoutablePermissionsPolicy
|
||||
{
|
||||
use HandlesAuthorization;
|
||||
|
||||
|
||||
public function before(User $user, $ability, $license)
|
||||
protected function columnName()
|
||||
{
|
||||
// Lets move all company related checks here.
|
||||
if ($license instanceof \App\Models\License && !Company::isCurrentUserHasAccess($license)) {
|
||||
return false;
|
||||
}
|
||||
// If an admin, they can do all asset related tasks.
|
||||
if ($user->hasAccess('admin')) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Determine whether the user can view the license.
|
||||
*
|
||||
* @param \App\User $user
|
||||
* @param \App\License $license
|
||||
* @return mixed
|
||||
*/
|
||||
public function view(User $user, License $license = null)
|
||||
{
|
||||
//
|
||||
return $user->hasAccess('licenses.view');
|
||||
return 'licenses';
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether the user can create licenses.
|
||||
*
|
||||
* @param \App\User $user
|
||||
* @return mixed
|
||||
*/
|
||||
public function create(User $user)
|
||||
{
|
||||
//
|
||||
return $user->hasAccess('licenses.create');
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether the user can update the license.
|
||||
*
|
||||
* @param \App\User $user
|
||||
* @param \App\License $license
|
||||
* @return mixed
|
||||
*/
|
||||
public function update(User $user, License $license = null)
|
||||
{
|
||||
//
|
||||
return $user->hasAccess('licenses.edit');
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether the user can delete the license.
|
||||
*
|
||||
* @param \App\User $user
|
||||
* @param \App\License $license
|
||||
* @return mixed
|
||||
*/
|
||||
public function delete(User $user, License $license = null)
|
||||
{
|
||||
//
|
||||
return $user->hasAccess('licenses.delete');
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether the user can checkout the license.
|
||||
*
|
||||
* @param \App\User $user
|
||||
* @param \App\Accessory $license
|
||||
* @return mixed
|
||||
*/
|
||||
public function checkout(User $user, LicenseSeat $license = null)
|
||||
{
|
||||
return $user->hasAccess('licenses.checkout');
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether the user can checkin the license.
|
||||
*
|
||||
* @param \App\User $user
|
||||
* @param \App\License $license
|
||||
* @return mixed
|
||||
*/
|
||||
public function checkin(User $user, LicenseSeat $license = null)
|
||||
{
|
||||
return $user->hasAccess('licenses.checkin');
|
||||
}
|
||||
/**
|
||||
* Determine whether the user can view license keys
|
||||
*
|
||||
|
@ -110,18 +25,4 @@ class LicensePolicy
|
|||
return $user->hasAccess('licenses.keys');
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether the user can manage the license.
|
||||
*
|
||||
* @param \App\User $user
|
||||
* @param \App\License $license
|
||||
* @return mixed
|
||||
*/
|
||||
public function manage(User $user, License $license = null)
|
||||
{
|
||||
return $user->hasAccess('licenses.checkin')
|
||||
|| $user->hasAccess('licenses.edit')
|
||||
|| $user->hasAccess('licenses.delete')
|
||||
|| $user->hasAccess('licenses.checkout');
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,98 +2,12 @@
|
|||
|
||||
namespace App\Policies;
|
||||
|
||||
use App\Models\Company;
|
||||
use App\Models\Location;
|
||||
use App\Models\User;
|
||||
use Illuminate\Auth\Access\HandlesAuthorization;
|
||||
use App\Policies\SnipePermissionsPolicy;
|
||||
|
||||
class LocationPolicy
|
||||
class LocationPolicy extends SnipePermissionsPolicy
|
||||
{
|
||||
use HandlesAuthorization;
|
||||
|
||||
|
||||
public function before(User $user, $location)
|
||||
protected function columnName()
|
||||
{
|
||||
// Lets move all company related checks here.
|
||||
if ($location instanceof \App\Models\Location && !Company::isCurrentUserHasAccess($location)) {
|
||||
return false;
|
||||
}
|
||||
// If an admin, they can do all asset related tasks.
|
||||
if ($user->hasAccess('admin')) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Determine whether the user can view the location.
|
||||
*
|
||||
* @param \App\Models\User $user
|
||||
* @param \App\Models\Location $location
|
||||
* @return mixed
|
||||
*/
|
||||
public function view(User $user)
|
||||
{
|
||||
return $user->hasAccess('locations.view');
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether the user can create locations.
|
||||
*
|
||||
* @param \App\Models\\User $user
|
||||
* @return mixed
|
||||
*/
|
||||
public function create(User $user)
|
||||
{
|
||||
return $user->hasAccess('locations.create');
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether the user can update the location.
|
||||
*
|
||||
* @param \App\Models\User $user
|
||||
* @param \App\Models\Location $location
|
||||
* @return mixed
|
||||
*/
|
||||
public function update(User $user)
|
||||
{
|
||||
//
|
||||
return $user->hasAccess('locations.edit');
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether the user can delete the location.
|
||||
*
|
||||
* @param \App\Models\User $user
|
||||
* @param \App\Models\Location $location
|
||||
* @return mixed
|
||||
*/
|
||||
public function delete(User $user)
|
||||
{
|
||||
//
|
||||
return $user->hasAccess('locations.delete');
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether the user can view the location index.
|
||||
*
|
||||
* @param \App\Models\User $user
|
||||
* @param \App\Models\Accessory $location
|
||||
* @return mixed
|
||||
*/
|
||||
|
||||
public function index(User $user)
|
||||
{
|
||||
return $user->hasAccess('locations.view');
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether the user can manage the location.
|
||||
*
|
||||
* @param \App\Models\User $user
|
||||
* @param \App\Models\Location $location
|
||||
* @return mixed
|
||||
*/
|
||||
public function manage(User $user)
|
||||
{
|
||||
return $user->hasAccess('locations.edit');
|
||||
return 'locations';
|
||||
}
|
||||
}
|
||||
|
|
90
app/Policies/SnipePermissionsPolicy.php
Normal file
90
app/Policies/SnipePermissionsPolicy.php
Normal file
|
@ -0,0 +1,90 @@
|
|||
<?php
|
||||
namespace App\Policies;
|
||||
|
||||
use App\Models\Company;
|
||||
use App\Models\User;
|
||||
use Illuminate\Auth\Access\HandlesAuthorization;
|
||||
|
||||
abstract class SnipePermissionsPolicy
|
||||
{
|
||||
// This should return the key of the model in the users json permission string.
|
||||
abstract protected function columnName();
|
||||
|
||||
use HandlesAuthorization;
|
||||
|
||||
public function before(User $user, $ability, $item)
|
||||
{
|
||||
// Lets move all company related checks here.
|
||||
if ($item instanceof \App\Models\SnipeModel && !Company::isCurrentUserHasAccess($item)) {
|
||||
return false;
|
||||
}
|
||||
// If an admin, they can do all asset related tasks.
|
||||
if ($user->hasAccess('admin')) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public function index(User $user)
|
||||
{
|
||||
// dd('here');
|
||||
return $user->hasAccess($this->columnName().'.view');
|
||||
}
|
||||
/**
|
||||
* Determine whether the user can view the accessory.
|
||||
*
|
||||
* @param \App\User $user
|
||||
* @return mixed
|
||||
*/
|
||||
public function view(User $user, $item = null)
|
||||
{
|
||||
//
|
||||
return $user->hasAccess($this->columnName().'.view');
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether the user can create accessories.
|
||||
*
|
||||
* @param \App\User $user
|
||||
* @return mixed
|
||||
*/
|
||||
public function create(User $user)
|
||||
{
|
||||
//
|
||||
return $user->hasAccess($this->columnName().'.create');
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether the user can update the accessory.
|
||||
*
|
||||
* @param \App\User $user
|
||||
* @return mixed
|
||||
*/
|
||||
public function update(User $user, $item = null)
|
||||
{
|
||||
//
|
||||
return $user->hasAccess($this->columnName().'.edit');
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether the user can delete the accessory.
|
||||
*
|
||||
* @param \App\User $user
|
||||
* @return mixed
|
||||
*/
|
||||
public function delete(User $user, $item = null)
|
||||
{
|
||||
//
|
||||
return $user->hasAccess($this->columnName().'.delete');
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether the user can manage the accessory.
|
||||
*
|
||||
* @param \App\User $user
|
||||
* @return mixed
|
||||
*/
|
||||
public function manage(User $user, $item = null)
|
||||
{
|
||||
return $user->hasAccess($this->columnName().'.edit');
|
||||
}
|
||||
}
|
13
app/Policies/StatuslabelPolicy.php
Normal file
13
app/Policies/StatuslabelPolicy.php
Normal file
|
@ -0,0 +1,13 @@
|
|||
<?php
|
||||
|
||||
namespace App\Policies;
|
||||
|
||||
use App\Policies\SnipePermissionsPolicy;
|
||||
|
||||
class StatuslabelPolicy extends SnipePermissionsPolicy
|
||||
{
|
||||
protected function columnName()
|
||||
{
|
||||
return 'statuslabels';
|
||||
}
|
||||
}
|
13
app/Policies/SupplierPolicy.php
Normal file
13
app/Policies/SupplierPolicy.php
Normal file
|
@ -0,0 +1,13 @@
|
|||
<?php
|
||||
|
||||
namespace App\Policies;
|
||||
|
||||
use App\Policies\SnipePermissionsPolicy;
|
||||
|
||||
class SupplierPolicy extends SnipePermissionsPolicy
|
||||
{
|
||||
protected function columnName()
|
||||
{
|
||||
return 'suppliers';
|
||||
}
|
||||
}
|
|
@ -2,87 +2,12 @@
|
|||
|
||||
namespace App\Policies;
|
||||
|
||||
use App\Models\Company;
|
||||
use App\Models\User;
|
||||
use Illuminate\Auth\Access\HandlesAuthorization;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use App\Policies\SnipePermissionsPolicy;
|
||||
|
||||
class UserPolicy
|
||||
class UserPolicy extends SnipePermissionsPolicy
|
||||
{
|
||||
use HandlesAuthorization;
|
||||
|
||||
|
||||
public function before(User $user, $ability, $targetUser)
|
||||
protected function columnName()
|
||||
{
|
||||
// Lets move all company related checks here.
|
||||
if ($targetUser instanceof \App\Models\User && !Company::isCurrentUserHasAccess($targetUser)) {
|
||||
return false;
|
||||
}
|
||||
// If an admin, they can do all user related tasks.
|
||||
if ($user->hasAccess('admin')) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Determine whether the user can view the targetUser.
|
||||
*
|
||||
* @param \App\Models\User $user
|
||||
* @param \App\Models\Consumable $targetUser
|
||||
* @return mixed
|
||||
*/
|
||||
public function view(User $user, User $targetUser = null)
|
||||
{
|
||||
//
|
||||
return $user->hasAccess('users.view');
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether the user can create users.
|
||||
*
|
||||
* @param \App\Models\User $user
|
||||
* @return mixed
|
||||
*/
|
||||
public function create(User $user)
|
||||
{
|
||||
return $user->hasAccess('users.create');
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether the user can update the targetUser.
|
||||
*
|
||||
* @param \App\Models\User $user
|
||||
* @param \App\Models\User $targetUser
|
||||
* @return mixed
|
||||
*/
|
||||
public function update(User $user, User $targetUser = null)
|
||||
{
|
||||
return $user->hasAccess('users.edit');
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether the user can delete the targetUser.
|
||||
*
|
||||
* @param \App\Models\User $user
|
||||
* @param \App\Models\User $targetUser
|
||||
* @return mixed
|
||||
*/
|
||||
public function delete(User $user, User $targetUser = null)
|
||||
{
|
||||
if ($targetUser) {
|
||||
//We can't delete ourselves.
|
||||
if ($user->id == $targetUser->id) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ((!Auth::user()->isSuperUser()) || (config('app.lock_passwords'))) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return $user->hasAccess('users.delete');
|
||||
}
|
||||
|
||||
public function index(User $user)
|
||||
{
|
||||
return $user->hasAccess('users.view');
|
||||
return 'users';
|
||||
}
|
||||
}
|
||||
|
|
|
@ -45,9 +45,14 @@ class AssetModelPresenter extends Presenter
|
|||
*/
|
||||
public function modelName()
|
||||
{
|
||||
$name = $this->model->manufacturer->name.' '.$this->name;
|
||||
$name = '';
|
||||
if ($this->model->manufacturer) {
|
||||
$name .= $this->model->manufacturer->name;
|
||||
}
|
||||
$name .= $this->name;
|
||||
|
||||
if ($this->model_number) {
|
||||
$name .=" / ".$this->model_number;
|
||||
$name .=" (#".$this->model_number.')';
|
||||
}
|
||||
return $name;
|
||||
}
|
||||
|
|
|
@ -148,6 +148,19 @@ class AssetPresenter extends Presenter
|
|||
"title" => trans('general.order_number'),
|
||||
'formatter' => "orderNumberObjFilterFormatter"
|
||||
], [
|
||||
"field" => "warranty_months",
|
||||
"searchable" => true,
|
||||
"sortable" => true,
|
||||
"visible" => false,
|
||||
"title" => trans('admin/hardware/form.warranty')
|
||||
],[
|
||||
"field" => "warranty_expires",
|
||||
"searchable" => false,
|
||||
"sortable" => false,
|
||||
"visible" => false,
|
||||
"title" => 'Warranty Expires',
|
||||
"formatter" => "dateDisplayFormatter"
|
||||
],[
|
||||
"field" => "notes",
|
||||
"searchable" => true,
|
||||
"sortable" => true,
|
||||
|
@ -273,14 +286,16 @@ class AssetPresenter extends Presenter
|
|||
**/
|
||||
public function name()
|
||||
{
|
||||
if (empty($this->name)) {
|
||||
if (isset($this->model)) {
|
||||
return $this->model->name.' ('.$this->asset_tag.')';
|
||||
|
||||
if (empty($this->model->name)) {
|
||||
if (isset($this->model->model)) {
|
||||
return $this->model->model->name.' ('.$this->model->asset_tag.')';
|
||||
}
|
||||
return $this->asset_tag;
|
||||
return $this->model->asset_tag;
|
||||
} else {
|
||||
return $this->name.' ('.$this->asset_tag.')';
|
||||
return $this->model->name . ' (' . $this->model->asset_tag . ')';
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -289,7 +304,18 @@ class AssetPresenter extends Presenter
|
|||
*/
|
||||
public function fullName()
|
||||
{
|
||||
return $this->name();
|
||||
$str = '';
|
||||
if ($this->model->name) {
|
||||
$str .= $this->name;
|
||||
}
|
||||
|
||||
if ($this->asset_tag) {
|
||||
$str .= ' ('.$this->model->asset_tag.')';
|
||||
}
|
||||
if ($this->model->model) {
|
||||
$str .= ' - '.$this->model->model->name;
|
||||
}
|
||||
return $str;
|
||||
}
|
||||
/**
|
||||
* Returns the date this item hits EOL.
|
||||
|
@ -333,7 +359,7 @@ class AssetPresenter extends Presenter
|
|||
*/
|
||||
public function statusMeta()
|
||||
{
|
||||
if ($this->model->assignedTo) {
|
||||
if ($this->model->assigned) {
|
||||
return strtolower(trans('general.deployed'));
|
||||
}
|
||||
return $this->model->assetstatus->getStatuslabelType();
|
||||
|
@ -346,7 +372,7 @@ class AssetPresenter extends Presenter
|
|||
*/
|
||||
public function statusText()
|
||||
{
|
||||
if ($this->model->assignedTo) {
|
||||
if ($this->model->assigned) {
|
||||
return trans('general.deployed');
|
||||
}
|
||||
return $this->model->assetstatus->name;
|
||||
|
|
|
@ -32,6 +32,13 @@ class CategoryPresenter extends Presenter
|
|||
"title" => trans('general.name'),
|
||||
"visible" => true,
|
||||
"formatter" => 'categoriesLinkFormatter',
|
||||
],[
|
||||
"field" => "image",
|
||||
"searchable" => false,
|
||||
"sortable" => true,
|
||||
"title" => trans('general.image'),
|
||||
"visible" => true,
|
||||
"formatter" => 'imageFormatter',
|
||||
],[
|
||||
"field" => "type",
|
||||
"searchable" => true,
|
||||
|
|
|
@ -30,6 +30,14 @@ class CompanyPresenter extends Presenter
|
|||
"title" => trans('admin/companies/table.name'),
|
||||
"visible" => true,
|
||||
"formatter" => 'companiesLinkFormatter',
|
||||
],[
|
||||
"field" => "image",
|
||||
"searchable" => false,
|
||||
"sortable" => true,
|
||||
"switchable" => true,
|
||||
"title" => trans('general.image'),
|
||||
"visible" => true,
|
||||
"formatter" => 'imageFormatter',
|
||||
],[
|
||||
"field" => "users_count",
|
||||
"searchable" => false,
|
||||
|
|
|
@ -42,6 +42,14 @@ class ComponentPresenter extends Presenter
|
|||
"title" => trans('general.name'),
|
||||
"visible" => true,
|
||||
"formatter" => 'componentsLinkFormatter',
|
||||
], [
|
||||
"field" => "image",
|
||||
"searchable" => false,
|
||||
"sortable" => true,
|
||||
"switchable" => true,
|
||||
"title" => trans('general.image'),
|
||||
"visible" => false,
|
||||
"formatter" => 'imageFormatter',
|
||||
], [
|
||||
"field" => "category",
|
||||
"searchable" => true,
|
||||
|
|
|
@ -41,6 +41,15 @@ class ConsumablePresenter extends Presenter
|
|||
"title" => trans('general.name'),
|
||||
"visible" => true,
|
||||
"formatter" => 'consumablesLinkFormatter',
|
||||
],
|
||||
[
|
||||
"field" => "image",
|
||||
"searchable" => false,
|
||||
"sortable" => true,
|
||||
"switchable" => true,
|
||||
"title" => trans('general.image'),
|
||||
"visible" => false,
|
||||
"formatter" => 'imageFormatter',
|
||||
], [
|
||||
"field" => "category",
|
||||
"searchable" => true,
|
||||
|
|
|
@ -35,6 +35,15 @@ class ManufacturerPresenter extends Presenter
|
|||
"visible" => true,
|
||||
"formatter" => "manufacturersLinkFormatter"
|
||||
],
|
||||
[
|
||||
"field" => "image",
|
||||
"searchable" => false,
|
||||
"sortable" => true,
|
||||
"switchable" => true,
|
||||
"title" => trans('general.image'),
|
||||
"visible" => true,
|
||||
"formatter" => "imageFormatter"
|
||||
],
|
||||
[
|
||||
"field" => "url",
|
||||
"searchable" => true,
|
||||
|
@ -44,7 +53,6 @@ class ManufacturerPresenter extends Presenter
|
|||
"visible" => true,
|
||||
"formatter" => "linkFormatter"
|
||||
],
|
||||
|
||||
[
|
||||
"field" => "support_url",
|
||||
"searchable" => true,
|
||||
|
|
|
@ -86,6 +86,46 @@ class UserPresenter extends Presenter
|
|||
"title" => trans('admin/users/table.phone'),
|
||||
"visible" => true,
|
||||
],
|
||||
[
|
||||
"field" => "address",
|
||||
"searchable" => true,
|
||||
"sortable" => true,
|
||||
"switchable" => true,
|
||||
"title" => trans('general.address'),
|
||||
"visible" => false,
|
||||
],
|
||||
[
|
||||
"field" => "city",
|
||||
"searchable" => true,
|
||||
"sortable" => true,
|
||||
"switchable" => true,
|
||||
"title" => trans('general.city'),
|
||||
"visible" => false,
|
||||
],
|
||||
[
|
||||
"field" => "state",
|
||||
"searchable" => true,
|
||||
"sortable" => true,
|
||||
"switchable" => true,
|
||||
"title" => trans('general.state'),
|
||||
"visible" => false,
|
||||
],
|
||||
[
|
||||
"field" => "country",
|
||||
"searchable" => true,
|
||||
"sortable" => true,
|
||||
"switchable" => true,
|
||||
"title" => trans('general.country'),
|
||||
"visible" => false,
|
||||
],
|
||||
[
|
||||
"field" => "zip",
|
||||
"searchable" => true,
|
||||
"sortable" => true,
|
||||
"switchable" => true,
|
||||
"title" => trans('general.zip'),
|
||||
"visible" => false,
|
||||
],
|
||||
[
|
||||
"field" => "username",
|
||||
"searchable" => true,
|
||||
|
|
|
@ -94,16 +94,7 @@ class AppServiceProvider extends ServiceProvider
|
|||
public function register()
|
||||
{
|
||||
$monolog = Log::getMonolog();
|
||||
|
||||
if (config('app.debug')) {
|
||||
$log_level = 'debug';
|
||||
} else {
|
||||
if (config('app.log_level')) {
|
||||
$log_level = config('app.log_level');
|
||||
} else {
|
||||
$log_level = 'error';
|
||||
}
|
||||
}
|
||||
$log_level = config('app.log_level');
|
||||
|
||||
if (($this->app->environment('production')) && (config('services.rollbar.access_token'))){
|
||||
$this->app->register(\Jenssegers\Rollbar\RollbarServiceProvider::class);
|
||||
|
|
|
@ -3,22 +3,32 @@
|
|||
namespace App\Providers;
|
||||
|
||||
use App\Models\Accessory;
|
||||
use Carbon\Carbon;
|
||||
use App\Models\Asset;
|
||||
use App\Models\Location;
|
||||
use App\Models\Component;
|
||||
use App\Models\AssetModel;
|
||||
use App\Models\Category;
|
||||
use App\Models\Component;
|
||||
use App\Models\Consumable;
|
||||
use App\Models\CustomField;
|
||||
use App\Models\Department;
|
||||
use App\Models\License;
|
||||
use App\Models\Location;
|
||||
use App\Models\Statuslabel;
|
||||
use App\Models\Supplier;
|
||||
use App\Models\User;
|
||||
use App\Policies\AccessoryPolicy;
|
||||
use App\Policies\AssetModelPolicy;
|
||||
use App\Policies\AssetPolicy;
|
||||
use App\Policies\CategoryPolicy;
|
||||
use App\Policies\ComponentPolicy;
|
||||
use App\Policies\ConsumablePolicy;
|
||||
use App\Policies\CustomFieldPolicy;
|
||||
use App\Policies\DepartmentPolicy;
|
||||
use App\Policies\LicensePolicy;
|
||||
use App\Policies\LocationPolicy;
|
||||
use App\Policies\CategoryPolicy;
|
||||
use App\Policies\StatuslabelPolicy;
|
||||
use App\Policies\SupplierPolicy;
|
||||
use App\Policies\UserPolicy;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
|
||||
use Illuminate\Support\Facades\Gate;
|
||||
use Laravel\Passport\Passport;
|
||||
|
@ -31,14 +41,19 @@ class AuthServiceProvider extends ServiceProvider
|
|||
* @var array
|
||||
*/
|
||||
protected $policies = [
|
||||
Asset::class => AssetPolicy::class,
|
||||
Accessory::class => AccessoryPolicy::class,
|
||||
Asset::class => AssetPolicy::class,
|
||||
AssetModel::class => AssetModelPolicy::class,
|
||||
Category::class => CategoryPolicy::class,
|
||||
Component::class => ComponentPolicy::class,
|
||||
Consumable::class => ConsumablePolicy::class,
|
||||
CustomField::class => CustomFieldPolicy::class,
|
||||
Department::class => DepartmentPolicy::class,
|
||||
License::class => LicensePolicy::class,
|
||||
User::class => UserPolicy::class,
|
||||
Location::class => LocationPolicy::class,
|
||||
Category::class => CategoryPolicy::class,
|
||||
Statuslabel::class => StatuslabelPolicy::class,
|
||||
Supplier::class => SupplierPolicy::class,
|
||||
User::class => UserPolicy::class,
|
||||
];
|
||||
|
||||
/**
|
||||
|
@ -54,7 +69,7 @@ class AuthServiceProvider extends ServiceProvider
|
|||
\Laravel\Passport\Console\ClientCommand::class,
|
||||
\Laravel\Passport\Console\KeysCommand::class,
|
||||
]);
|
||||
|
||||
|
||||
|
||||
$this->registerPolicies();
|
||||
Passport::routes();
|
||||
|
@ -101,5 +116,17 @@ class AuthServiceProvider extends ServiceProvider
|
|||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
Gate::define('backend.interact', function ($user) {
|
||||
return $user->can('view', \App\Models\Statuslabel::class)
|
||||
|| $user->can('view', \App\Models\AssetModel::class)
|
||||
|| $user->can('view', \App\Models\Category::class)
|
||||
|| $user->can('view', \App\Models\Manufacturer::class)
|
||||
|| $user->can('view', \App\Models\Supplier::class)
|
||||
|| $user->can('view', \App\Models\Department::class)
|
||||
|| $user->can('view', \App\Models\Location::class)
|
||||
|| $user->can('view', \App\Models\Company::class)
|
||||
|| $user->can('view', \App\Models\Depreciation::class);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
return array (
|
||||
'app_version' => 'v4.0.15',
|
||||
'build_version' => '384',
|
||||
'hash_version' => 'g4f80eac',
|
||||
'full_hash' => 'v4.0.15-384-g4f80eac',
|
||||
'app_version' => 'v4.1.0',
|
||||
'build_version' => 'beta2',
|
||||
'hash_version' => 'g3b498ef',
|
||||
'full_hash' => 'v4.1.0-beta2-3-g3b498ef',
|
||||
);
|
||||
|
|
|
@ -34,7 +34,8 @@ $factory->defineAs(Actionlog::class, 'asset-checkout-user', function (Faker\Gene
|
|||
->update(
|
||||
[
|
||||
'assigned_to' => $target->id,
|
||||
'assigned_type' => App\Models\User::class
|
||||
'assigned_type' => App\Models\User::class,
|
||||
'assigned_to' => $target->location_id,
|
||||
]
|
||||
);
|
||||
|
||||
|
@ -59,7 +60,8 @@ $factory->defineAs(Actionlog::class, 'asset-checkout-location', function (Faker\
|
|||
->update(
|
||||
[
|
||||
'assigned_to' => $target->id,
|
||||
'assigned_type' => App\Models\Location::class
|
||||
'assigned_type' => App\Models\Location::class,
|
||||
'assigned_to' => $target->id,
|
||||
]
|
||||
);
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@ use App\Models\Category;
|
|||
$factory->define(Asset::class, function (Faker\Generator $faker) {
|
||||
return [
|
||||
'name' => null,
|
||||
'rtd_location_id' => 1,
|
||||
'rtd_location_id' => rand(1,10),
|
||||
'serial' => $faker->uuid,
|
||||
'status_id' => 1,
|
||||
'user_id' => 1,
|
||||
|
|
|
@ -32,6 +32,7 @@ $factory->state(App\Models\AssetModel::class, 'mbp-13-model', function ($faker)
|
|||
'manufacturer_id' => 1,
|
||||
'eol' => '36',
|
||||
'depreciation_id' => 1,
|
||||
'image' => 'mbp.jpg',
|
||||
];
|
||||
});
|
||||
|
||||
|
@ -43,6 +44,7 @@ $factory->state(App\Models\AssetModel::class, 'mbp-air-model', function ($faker)
|
|||
'manufacturer_id' => 1,
|
||||
'eol' => '36',
|
||||
'depreciation_id' => 1,
|
||||
'image' => 'macbookair.jpg',
|
||||
];
|
||||
});
|
||||
|
||||
|
@ -54,6 +56,7 @@ $factory->state(App\Models\AssetModel::class, 'surface-model', function ($faker)
|
|||
'manufacturer_id' => 2,
|
||||
'eol' => '36',
|
||||
'depreciation_id' => 1,
|
||||
'image' => 'surface.jpg',
|
||||
];
|
||||
});
|
||||
|
||||
|
@ -65,6 +68,7 @@ $factory->state(App\Models\AssetModel::class, 'xps13-model', function ($faker) {
|
|||
'manufacturer_id' => 3,
|
||||
'eol' => '36',
|
||||
'depreciation_id' => 1,
|
||||
'image' => 'xps.jpg',
|
||||
];
|
||||
});
|
||||
|
||||
|
@ -76,6 +80,7 @@ $factory->state(App\Models\AssetModel::class, 'zenbook-model', function ($faker)
|
|||
'manufacturer_id' => 4,
|
||||
'eol' => '36',
|
||||
'depreciation_id' => 1,
|
||||
'image' => 'zenbook.jpg',
|
||||
];
|
||||
});
|
||||
|
||||
|
@ -87,6 +92,7 @@ $factory->state(App\Models\AssetModel::class, 'spectre-model', function ($faker)
|
|||
'manufacturer_id' => 5,
|
||||
'eol' => '36',
|
||||
'depreciation_id' => 1,
|
||||
'image' => 'spectre.jpg',
|
||||
];
|
||||
});
|
||||
|
||||
|
@ -98,6 +104,7 @@ $factory->state(App\Models\AssetModel::class, 'yoga-model', function ($faker) {
|
|||
'manufacturer_id' => 6,
|
||||
'eol' => '36',
|
||||
'depreciation_id' => 1,
|
||||
'image' => 'yoga.png',
|
||||
];
|
||||
});
|
||||
|
||||
|
@ -115,6 +122,7 @@ $factory->state(App\Models\AssetModel::class, 'macpro-model', function ($faker)
|
|||
'manufacturer_id' => 1,
|
||||
'eol' => '24',
|
||||
'depreciation_id' => 1,
|
||||
'image' => 'imacpro.jpg',
|
||||
];
|
||||
});
|
||||
|
||||
|
@ -125,6 +133,7 @@ $factory->state(App\Models\AssetModel::class, 'lenovo-i5-model', function ($fake
|
|||
'manufacturer_id' => 6,
|
||||
'eol' => '24',
|
||||
'depreciation_id' => 1,
|
||||
'image' => 'lenovoi5.png',
|
||||
];
|
||||
});
|
||||
|
||||
|
@ -136,6 +145,7 @@ $factory->state(App\Models\AssetModel::class, 'optiplex-model', function ($faker
|
|||
'model_number' => '5040 (MRR81)',
|
||||
'eol' => '24',
|
||||
'depreciation_id' => 1,
|
||||
'image' => 'optiplex.jpg',
|
||||
];
|
||||
});
|
||||
|
||||
|
@ -154,6 +164,7 @@ $factory->state(App\Models\AssetModel::class, 'polycom-model', function ($faker)
|
|||
'manufacturer_id' => 8,
|
||||
'eol' => '12',
|
||||
'depreciation_id' => 1,
|
||||
'image' => 'soundstation.jpg',
|
||||
];
|
||||
});
|
||||
|
||||
|
@ -164,6 +175,7 @@ $factory->state(App\Models\AssetModel::class, 'polycomcx-model', function ($fake
|
|||
'manufacturer_id' => 8,
|
||||
'eol' => '12',
|
||||
'depreciation_id' => 1,
|
||||
'image' => 'cx3000.png',
|
||||
];
|
||||
});
|
||||
|
||||
|
@ -181,6 +193,7 @@ $factory->state(App\Models\AssetModel::class, 'ipad-model', function ($faker) {
|
|||
'manufacturer_id' => 1,
|
||||
'eol' => '12',
|
||||
'depreciation_id' => 1,
|
||||
'image' => 'ipad.jpg',
|
||||
];
|
||||
});
|
||||
|
||||
|
@ -192,6 +205,7 @@ $factory->state(App\Models\AssetModel::class, 'tab3-model', function ($faker) {
|
|||
'manufacturer_id' => 6,
|
||||
'eol' => '12',
|
||||
'depreciation_id' => 1,
|
||||
'image' => 'tab3.png',
|
||||
];
|
||||
});
|
||||
|
||||
|
@ -209,6 +223,7 @@ $factory->state(App\Models\AssetModel::class, 'iphone6s-model', function ($faker
|
|||
'manufacturer_id' => 1,
|
||||
'eol' => '12',
|
||||
'depreciation_id' => 3,
|
||||
'image' => 'iphone6.jpg',
|
||||
];
|
||||
});
|
||||
|
||||
|
@ -219,6 +234,7 @@ $factory->state(App\Models\AssetModel::class, 'iphone7-model', function ($faker)
|
|||
'manufacturer_id' => 1,
|
||||
'eol' => '12',
|
||||
'depreciation_id' => 1,
|
||||
'image' => 'iphone7.jpg',
|
||||
];
|
||||
});
|
||||
|
||||
|
@ -235,6 +251,7 @@ $factory->state(App\Models\AssetModel::class, 'ultrafine', function ($faker) {
|
|||
'manufacturer_id' => 7,
|
||||
'eol' => '12',
|
||||
'depreciation_id' => 2,
|
||||
'image' => 'ultrafine.jpg',
|
||||
];
|
||||
});
|
||||
|
||||
|
@ -245,6 +262,7 @@ $factory->state(App\Models\AssetModel::class, 'ultrasharp', function ($faker) {
|
|||
'manufacturer_id' => 3,
|
||||
'eol' => '12',
|
||||
'depreciation_id' => 2,
|
||||
'image' => 'ultrasharp.jpg',
|
||||
];
|
||||
});
|
||||
|
||||
|
|
|
@ -24,7 +24,8 @@ $factory->state(App\Models\Manufacturer::class, 'apple', function ($faker) {
|
|||
return [
|
||||
'name' => 'Apple',
|
||||
'url' => 'https://apple.com',
|
||||
'support_url' => 'https://support.apple.com'
|
||||
'support_url' => 'https://support.apple.com',
|
||||
'image' => 'apple.jpg',
|
||||
];
|
||||
});
|
||||
|
||||
|
@ -33,7 +34,8 @@ $factory->state(App\Models\Manufacturer::class, 'microsoft', function ($faker) {
|
|||
return [
|
||||
'name' => 'Microsoft',
|
||||
'url' => 'https://microsoft.com',
|
||||
'support_url' => 'https://support.microsoft.com'
|
||||
'support_url' => 'https://support.microsoft.com',
|
||||
'image' => 'microsoft.png',
|
||||
];
|
||||
});
|
||||
|
||||
|
@ -42,7 +44,8 @@ $factory->state(App\Models\Manufacturer::class, 'dell', function ($faker) {
|
|||
return [
|
||||
'name' => 'Dell',
|
||||
'url' => 'https://dell.com',
|
||||
'support_url' => 'https://support.dell.com'
|
||||
'support_url' => 'https://support.dell.com',
|
||||
'image' => 'dell.png',
|
||||
];
|
||||
});
|
||||
|
||||
|
@ -51,7 +54,8 @@ $factory->state(App\Models\Manufacturer::class, 'asus', function ($faker) {
|
|||
return [
|
||||
'name' => 'Asus',
|
||||
'url' => 'https://asus.com',
|
||||
'support_url' => 'https://support.asus.com'
|
||||
'support_url' => 'https://support.asus.com',
|
||||
'image' => 'asus.png',
|
||||
];
|
||||
});
|
||||
|
||||
|
@ -60,7 +64,8 @@ $factory->state(App\Models\Manufacturer::class, 'hp', function ($faker) {
|
|||
return [
|
||||
'name' => 'HP',
|
||||
'url' => 'https://hp.com',
|
||||
'support_url' => 'https://support.hp.com'
|
||||
'support_url' => 'https://support.hp.com',
|
||||
'image' => 'hp.png',
|
||||
];
|
||||
});
|
||||
|
||||
|
@ -69,7 +74,8 @@ $factory->state(App\Models\Manufacturer::class, 'lenovo', function ($faker) {
|
|||
return [
|
||||
'name' => 'Lenovo',
|
||||
'url' => 'https://lenovo.com',
|
||||
'support_url' => 'https://support.lenovo.com'
|
||||
'support_url' => 'https://support.lenovo.com',
|
||||
'image' => 'lenovo.jpg',
|
||||
];
|
||||
});
|
||||
|
||||
|
@ -78,7 +84,8 @@ $factory->state(App\Models\Manufacturer::class, 'lg', function ($faker) {
|
|||
return [
|
||||
'name' => 'LG',
|
||||
'url' => 'https://lg.com',
|
||||
'support_url' => 'https://support.lg.com'
|
||||
'support_url' => 'https://support.lg.com',
|
||||
'image' => 'lg.jpg',
|
||||
];
|
||||
});
|
||||
|
||||
|
@ -87,7 +94,8 @@ $factory->state(App\Models\Manufacturer::class, 'polycom', function ($faker) {
|
|||
return [
|
||||
'name' => 'Polycom',
|
||||
'url' => 'https://polycom.com',
|
||||
'support_url' => 'https://support.polycom.com'
|
||||
'support_url' => 'https://support.polycom.com',
|
||||
'image' => 'polycom.png',
|
||||
];
|
||||
});
|
||||
|
||||
|
@ -96,7 +104,8 @@ $factory->state(App\Models\Manufacturer::class, 'adobe', function ($faker) {
|
|||
return [
|
||||
'name' => 'Adobe',
|
||||
'url' => 'https://adobe.com',
|
||||
'support_url' => 'https://support.adobe.com'
|
||||
'support_url' => 'https://support.adobe.com',
|
||||
'image' => 'adobe.jpg',
|
||||
];
|
||||
});
|
||||
|
||||
|
@ -106,7 +115,8 @@ $factory->state(App\Models\Manufacturer::class, 'avery', function ($faker) {
|
|||
return [
|
||||
'name' => 'Avery',
|
||||
'url' => 'https://avery.com',
|
||||
'support_url' => 'https://support.avery.com'
|
||||
'support_url' => 'https://support.avery.com',
|
||||
'image' => 'avery.png',
|
||||
];
|
||||
});
|
||||
|
||||
|
@ -115,7 +125,8 @@ $factory->state(App\Models\Manufacturer::class, 'crucial', function ($faker) {
|
|||
return [
|
||||
'name' => 'Crucial',
|
||||
'url' => 'https://crucial.com',
|
||||
'support_url' => 'https://support.crucial.com'
|
||||
'support_url' => 'https://support.crucial.com',
|
||||
'image' => 'crucial.jpg',
|
||||
];
|
||||
});
|
||||
|
||||
|
|
|
@ -55,7 +55,8 @@ $factory->define(App\Models\Location::class, function (Faker\Generator $faker) {
|
|||
'state' => $faker->stateAbbr,
|
||||
'country' => $faker->countryCode,
|
||||
'currency' => $faker->currencyCode,
|
||||
'zip' => $faker->postcode
|
||||
'zip' => $faker->postcode,
|
||||
'image' => rand(1,9).'.jpg',
|
||||
];
|
||||
});
|
||||
|
||||
|
|
|
@ -2,19 +2,17 @@
|
|||
|
||||
use App\Models\Company;
|
||||
|
||||
$password = bcrypt('password');
|
||||
|
||||
|
||||
$factory->define(App\Models\User::class, function (Faker\Generator $faker) {
|
||||
$factory->define(App\Models\User::class, function (Faker\Generator $faker) use ($password) {
|
||||
return [
|
||||
'first_name' => $faker->firstName,
|
||||
'last_name' => $faker->lastName,
|
||||
'username' => $faker->username,
|
||||
'password' => bcrypt('password'),
|
||||
'password' => $password,
|
||||
'permissions' => '{"user":"0"}',
|
||||
'email' => $faker->safeEmail,
|
||||
'company_id' => function () {
|
||||
return factory(App\Models\Company::class)->create()->id;
|
||||
},
|
||||
'company_id' => rand(1,4),
|
||||
'locale' => $faker->locale,
|
||||
'employee_num' => $faker->numberBetween(3500, 35050),
|
||||
'jobtitle' => $faker->jobTitle,
|
||||
|
|
|
@ -0,0 +1,71 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
|
||||
class AddImagesUploadsToLocationsManufacturersEtc extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::table('categories', function (Blueprint $table) {
|
||||
$table->string('image')->nullable()->default(null);
|
||||
});
|
||||
Schema::table('companies', function (Blueprint $table) {
|
||||
$table->string('image')->nullable()->default(null);
|
||||
});
|
||||
Schema::table('components', function (Blueprint $table) {
|
||||
$table->string('image')->nullable()->default(null);
|
||||
});
|
||||
Schema::table('consumables', function (Blueprint $table) {
|
||||
$table->string('image')->nullable()->default(null);
|
||||
});
|
||||
Schema::table('departments', function (Blueprint $table) {
|
||||
$table->string('image')->nullable()->default(null);
|
||||
});
|
||||
Schema::table('locations', function (Blueprint $table) {
|
||||
$table->string('image')->nullable()->default(null);
|
||||
});
|
||||
Schema::table('manufacturers', function (Blueprint $table) {
|
||||
$table->string('image')->nullable()->default(null);
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::table('categories', function (Blueprint $table) {
|
||||
$table->dropColumn('image');
|
||||
});
|
||||
Schema::table('companies', function (Blueprint $table) {
|
||||
$table->dropColumn('image');
|
||||
});
|
||||
Schema::table('components', function (Blueprint $table) {
|
||||
$table->dropColumn('image');
|
||||
});
|
||||
Schema::table('consumables', function (Blueprint $table) {
|
||||
$table->dropColumn('image');
|
||||
});
|
||||
Schema::table('departments', function (Blueprint $table) {
|
||||
$table->dropColumn('image');
|
||||
});
|
||||
Schema::table('locations', function (Blueprint $table) {
|
||||
$table->dropColumn('image');
|
||||
});
|
||||
Schema::table('manufacturers', function (Blueprint $table) {
|
||||
$table->dropColumn('image');
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,35 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
|
||||
|
||||
class DenormAssetLocations extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
// Add a new effective location ID to flatten out the assets queries
|
||||
Schema::table('assets', function (Blueprint $table) {
|
||||
$table->integer('location_id')->nullable()->default(null);
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::table('assets', function (Blueprint $table) {
|
||||
$table->dropColumn('location_id');
|
||||
});
|
||||
}
|
||||
}
|
|
@ -0,0 +1,97 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use App\Models\Asset;
|
||||
use App\Models\User;
|
||||
use App\Models\Location;
|
||||
|
||||
class MigrateDenormedAssetLocations extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
|
||||
// Unassigned
|
||||
$rtd_assets = Asset::whereNull('assigned_to')->with('defaultLoc')->get();
|
||||
\Log::info('Unasigned assets: ');
|
||||
foreach ($rtd_assets as $rtd_asset) {
|
||||
\Log::info('Setting asset '.$rtd_asset->id.' to location: '.$rtd_asset->rtd_location_id." Because asset's default location is: ".$rtd_asset->rtd_location_id);
|
||||
$rtd_asset->location_id=$rtd_asset->rtd_location_id;
|
||||
$rtd_asset->unsetEventDispatcher();
|
||||
$rtd_asset->save();
|
||||
}
|
||||
|
||||
// Assigned to users - ::with('assignedTo') //can't eager-load polymorphic relations?
|
||||
$assigned_user_assets = Asset::where('assigned_type',User::class)->whereNotNull('assigned_to')->get();
|
||||
\Log::debug('User-assigned assets:');
|
||||
foreach ($assigned_user_assets as $assigned_user_asset) {
|
||||
if ($assigned_user_asset->assignedTo->userLoc) {
|
||||
$new_location=$assigned_user_asset->assignedTo->userloc->id;
|
||||
\Log::info(' They are in '.$assigned_user_asset->assignedTo->userloc->name.' which is id: '.$new_location);
|
||||
} else {
|
||||
\Log::info('They have no location! ');
|
||||
$new_location=$assigned_user_asset->rtd_location_id;
|
||||
}
|
||||
$assigned_user_asset->location_id=$new_location;
|
||||
$assigned_user_asset->unsetEventDispatcher();
|
||||
$assigned_user_asset->save();
|
||||
|
||||
}
|
||||
|
||||
// Assigned to locations // with('assetloc')-> //can't eager-load polymorphic relationships
|
||||
$assigned_location_assets = Asset::where('assigned_type',Location::class)->get();
|
||||
\Log::info('Location-assigned assets: ');
|
||||
foreach ($assigned_location_assets as $assigned_location_asset) {
|
||||
$assigned_location_asset->location_id=$assigned_location_asset->assignedTo->id;
|
||||
\Log::info('(calculated to be: '.$assigned_location_asset->assetLoc());
|
||||
$assigned_location_asset->unsetEventDispatcher();
|
||||
$assigned_location_asset->save();
|
||||
}
|
||||
|
||||
// Assigned to assets
|
||||
$assigned_asset_assets = Asset::with('assetloc')->where('assigned_type',Asset::class)->get();
|
||||
\Log::info('Asset-assigned assets: ');
|
||||
foreach ($assigned_asset_assets as $assigned_asset_asset) {
|
||||
\Log::info('This asset is: '.$assigned_asset_asset->assignedTo->asset_tag);
|
||||
if ($assigned_asset_asset->assignedTo->location) {
|
||||
\Log::info('They are in '.$assigned_asset_asset->assignedTo->location->name);
|
||||
}
|
||||
\Log::info('User location is: '.$assigned_asset_asset->assetloc->name);
|
||||
\Log::info('Setting asset '.$assigned_asset_asset->id.' location to '.$assigned_asset_asset->assetloc->id.' ('.$assigned_asset_asset->assetloc->name.')');
|
||||
$assigned_asset_asset->location_id=$assigned_asset_asset->assetloc->id;
|
||||
|
||||
}
|
||||
|
||||
$unassigned_assets=Asset::whereNull("location_id")->get();
|
||||
foreach($unassigned_assets as $unassigned_asset) {
|
||||
\Log::info('Asset: '.$unassigned_asset->id.' still has no location');
|
||||
}
|
||||
|
||||
$assets = Asset::get();
|
||||
|
||||
foreach ($assets as $asset) {
|
||||
if (($asset) && ($asset->location_id != $asset->assetLoc()->id)) {
|
||||
\Log::info('MISMATCH MISMATCH '.$asset->id. "doesn't match its location");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
|
||||
class AddAddressToUser extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::table('users', function (Blueprint $table) {
|
||||
$table->string('address')->nullable()->default(null);
|
||||
$table->string('city')->nullable()->default(null);
|
||||
$table->string('state', 3)->nullable()->default(null);
|
||||
$table->string('zip', 10)->nullable()->default(null);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::table('users', function (Blueprint $table) {
|
||||
$table->dropColumn('address');
|
||||
$table->dropColumn('city');
|
||||
$table->dropColumn('state');
|
||||
$table->dropColumn('zip');
|
||||
|
||||
});
|
||||
}
|
||||
}
|
|
@ -7,7 +7,7 @@ class ActionlogSeeder extends Seeder
|
|||
public function run()
|
||||
{
|
||||
Actionlog::truncate();
|
||||
factory(Actionlog::class, 'asset-checkout-user',5)->create();
|
||||
factory(Actionlog::class, 'asset-checkout-location',5)->create();
|
||||
factory(Actionlog::class, 'asset-checkout-user',300)->create();
|
||||
factory(Actionlog::class, 'asset-checkout-location',100)->create();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -39,6 +39,23 @@ class AssetModelSeeder extends Seeder
|
|||
factory(AssetModel::class, 1)->states('ultrafine')->create(); // 17
|
||||
factory(AssetModel::class, 1)->states('ultrasharp')->create(); // 18
|
||||
|
||||
$src = public_path('/img/demo/models');
|
||||
$dst = public_path('/uploads/models');
|
||||
|
||||
$del_files = glob($dst."/*.*");
|
||||
|
||||
foreach($del_files as $del_file){ // iterate files
|
||||
if(is_file($del_file))
|
||||
unlink($del_file); // delete file
|
||||
}
|
||||
|
||||
|
||||
$add_files = glob($src."/*.*");
|
||||
foreach($add_files as $add_file){
|
||||
$file_to_copy = str_replace($src,$dst,$add_file);
|
||||
copy($add_file, $file_to_copy);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -8,19 +8,19 @@ class AssetSeeder extends Seeder
|
|||
public function run()
|
||||
{
|
||||
Asset::truncate();
|
||||
factory(Asset::class, 10)->states('laptop-mbp')->create();
|
||||
factory(Asset::class, 5)->states('laptop-mbp-pending')->create();
|
||||
factory(Asset::class, 5)->states('laptop-mbp-archived')->create();
|
||||
factory(Asset::class, 10)->states('laptop-air')->create();
|
||||
factory(Asset::class, 1000)->states('laptop-mbp')->create();
|
||||
factory(Asset::class, 50)->states('laptop-mbp-pending')->create();
|
||||
factory(Asset::class, 50)->states('laptop-mbp-archived')->create();
|
||||
factory(Asset::class, 50)->states('laptop-air')->create();
|
||||
factory(Asset::class, 5)->states('laptop-surface')->create();
|
||||
factory(Asset::class, 5)->states('laptop-xps')->create();
|
||||
factory(Asset::class, 5)->states('laptop-spectre')->create();
|
||||
factory(Asset::class, 5)->states('laptop-zenbook')->create();
|
||||
factory(Asset::class, 3)->states('laptop-yoga')->create();
|
||||
|
||||
factory(Asset::class, 3)->states('desktop-macpro')->create();
|
||||
factory(Asset::class, 3)->states('desktop-lenovo-i5')->create();
|
||||
factory(Asset::class, 10)->states('desktop-optiplex')->create();
|
||||
factory(Asset::class, 30)->states('desktop-macpro')->create();
|
||||
factory(Asset::class, 30)->states('desktop-lenovo-i5')->create();
|
||||
factory(Asset::class, 30)->states('desktop-optiplex')->create();
|
||||
|
||||
factory(Asset::class, 5)->states('conf-polycom')->create();
|
||||
factory(Asset::class, 2)->states('conf-polycomcx')->create();
|
||||
|
@ -35,5 +35,15 @@ class AssetSeeder extends Seeder
|
|||
factory(Asset::class, 10)->states('ultrasharp')->create();
|
||||
|
||||
|
||||
$dst = public_path('/uploads/assets');
|
||||
|
||||
$del_files = glob($dst."/*.*");
|
||||
|
||||
foreach($del_files as $del_file){ // iterate files
|
||||
if(is_file($del_file))
|
||||
unlink($del_file); // delete file
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,5 +15,23 @@ class CompanySeeder extends Seeder
|
|||
//
|
||||
Company::truncate();
|
||||
factory(Company::class, 4)->create();
|
||||
|
||||
$src = public_path('/img/demo/companies');
|
||||
$dst = public_path('/uploads/companies');
|
||||
|
||||
$del_files = glob($dst."/*.*");
|
||||
|
||||
foreach($del_files as $del_file){ // iterate files
|
||||
if(is_file($del_file))
|
||||
unlink($del_file); // delete file
|
||||
}
|
||||
|
||||
|
||||
$add_files = glob($src."/*.*");
|
||||
foreach($add_files as $add_file){
|
||||
$file_to_copy = str_replace($src,$dst,$add_file);
|
||||
copy($add_file, $file_to_copy);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,13 +1,27 @@
|
|||
<?php
|
||||
use Illuminate\Database\Seeder;
|
||||
use App\Models\CustomField;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
|
||||
|
||||
class CustomFieldSeeder extends Seeder
|
||||
{
|
||||
public function run()
|
||||
{
|
||||
$columns = DB::getSchemaBuilder()->getColumnListing('assets');
|
||||
|
||||
|
||||
foreach ($columns as $column) {
|
||||
if(strpos($column, '_snipeit_') !== FALSE) {
|
||||
|
||||
Schema::table('assets', function (Blueprint $table) use ($column) {
|
||||
$table->dropColumn($column);
|
||||
});
|
||||
}
|
||||
}
|
||||
CustomField::truncate();
|
||||
factory(CustomField::class, 4)->create();
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,6 +8,24 @@ class LocationSeeder extends Seeder
|
|||
public function run()
|
||||
{
|
||||
Location::truncate();
|
||||
factory(Location::class, 5)->create();
|
||||
factory(Location::class, 10)->create();
|
||||
|
||||
$src = public_path('/img/demo/locations');
|
||||
$dst = public_path('/uploads/locations');
|
||||
|
||||
$del_files = glob($dst."/*.*");
|
||||
|
||||
foreach($del_files as $del_file){ // iterate files
|
||||
if(is_file($del_file))
|
||||
unlink($del_file); // delete file
|
||||
}
|
||||
|
||||
|
||||
$add_files = glob($src."/*.*");
|
||||
foreach($add_files as $add_file){
|
||||
$file_to_copy = str_replace($src,$dst,$add_file);
|
||||
copy($add_file, $file_to_copy);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,6 +17,27 @@ class ManufacturerSeeder extends Seeder
|
|||
factory(Manufacturer::class, 1)->states('polycom')->create(); // 8
|
||||
factory(Manufacturer::class, 1)->states('adobe')->create(); // 9
|
||||
factory(Manufacturer::class, 1)->states('avery')->create(); // 10
|
||||
factory(Manufacturer::class, 1)->states('crucial')->create(); // 10
|
||||
|
||||
$src = public_path('/img/demo/manufacturers');
|
||||
$dst = public_path('/uploads/manufacturers');
|
||||
|
||||
$del_files = glob($dst."/*.*");
|
||||
|
||||
foreach($del_files as $del_file){ // iterate files
|
||||
if(is_file($del_file))
|
||||
unlink($del_file); // delete file
|
||||
}
|
||||
|
||||
|
||||
$add_files = glob($src."/*.*");
|
||||
foreach($add_files as $add_file){
|
||||
$file_to_copy = str_replace($src,$dst,$add_file);
|
||||
copy($add_file, $file_to_copy);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -8,5 +8,23 @@ class SupplierSeeder extends Seeder
|
|||
{
|
||||
Supplier::truncate();
|
||||
factory(Supplier::class, 5)->create();
|
||||
|
||||
$src = public_path('/img/demo/suppliers');
|
||||
$dst = public_path('/uploads/suppliers');
|
||||
|
||||
$del_files = glob($dst."/*.*");
|
||||
|
||||
foreach($del_files as $del_file){ // iterate files
|
||||
if(is_file($del_file))
|
||||
unlink($del_file); // delete file
|
||||
}
|
||||
|
||||
|
||||
$add_files = glob($src."/*.*");
|
||||
foreach($add_files as $add_file){
|
||||
$file_to_copy = str_replace($src,$dst,$add_file);
|
||||
copy($add_file, $file_to_copy);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,5 +18,6 @@ class UserSeeder extends Seeder
|
|||
factory(User::class, 3)->states('superuser')->create();
|
||||
factory(User::class, 3)->states('admin')->create();
|
||||
factory(User::class, 50)->states('view-assets')->create();
|
||||
|
||||
}
|
||||
}
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue