mirror of
https://github.com/snipe/snipe-it.git
synced 2025-01-12 06:17:28 -08:00
Merge branch 'develop' of github.com:snipe/snipe-it into develop
This commit is contained in:
commit
45ac1de6bb
|
@ -69,3 +69,4 @@ SECURE_COOKIES=false
|
|||
# OPTIONAL: APP LOG FORMAT
|
||||
# --------------------------------------------
|
||||
APP_LOG=single
|
||||
APP_LOG_LEVEL=debug
|
||||
|
|
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -40,3 +40,5 @@ tests/_support/_generated/*
|
|||
/npm-debug.log
|
||||
/storage/oauth-private.key
|
||||
/storage/oauth-public.key
|
||||
|
||||
*.cache
|
||||
|
|
|
@ -51,7 +51,6 @@ class AssetsController extends Controller
|
|||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
|
||||
$this->authorize('index', Asset::class);
|
||||
|
||||
$allowed_columns = [
|
||||
|
@ -114,7 +113,7 @@ class AssetsController extends Controller
|
|||
}
|
||||
|
||||
if ($request->has('company_id')) {
|
||||
$assets->where('assets.company_id','=',$request->input('company_id'));
|
||||
$assets->where('assets.company_id', '=', $request->input('company_id'));
|
||||
}
|
||||
|
||||
if ($request->has('manufacturer_id')) {
|
||||
|
@ -189,7 +188,6 @@ class AssetsController extends Controller
|
|||
$total = $assets->count();
|
||||
$assets = $assets->skip($offset)->take($limit)->get();
|
||||
return (new AssetsTransformer)->transformAssets($assets, $total);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -203,15 +201,12 @@ class AssetsController extends Controller
|
|||
*/
|
||||
public function show($id)
|
||||
{
|
||||
|
||||
if ($asset = Asset::withTrashed()->find($id)) {
|
||||
$this->authorize('view', $asset);
|
||||
return (new AssetsTransformer)->transformAsset($asset);
|
||||
|
||||
}
|
||||
|
||||
return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/hardware/message.does_not_exist')), 404);
|
||||
|
||||
return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/hardware/message.does_not_exist')), 200);
|
||||
}
|
||||
|
||||
|
||||
|
@ -225,10 +220,10 @@ class AssetsController extends Controller
|
|||
*/
|
||||
public function store(AssetRequest $request)
|
||||
{
|
||||
$this->authorize('create', Asset::class);
|
||||
// $this->authorize('create', Asset::class);
|
||||
|
||||
$asset = new Asset();
|
||||
$asset->model()->associate(AssetModel::find(e($request->get('model_id'))));
|
||||
$asset->model()->associate(AssetModel::find((int) $request->get('model_id')));
|
||||
|
||||
$asset->name = $request->get('name');
|
||||
$asset->serial = $request->get('serial');
|
||||
|
@ -261,22 +256,19 @@ class AssetsController extends Controller
|
|||
|
||||
if ($asset->save()) {
|
||||
$asset->logCreate();
|
||||
if($request->get('assigned_user')) {
|
||||
if ($request->get('assigned_user')) {
|
||||
$target = User::find(request('assigned_user'));
|
||||
} elseif($request->get('assigned_asset')) {
|
||||
} elseif ($request->get('assigned_asset')) {
|
||||
$target = Asset::find(request('assigned_asset'));
|
||||
} elseif($request->get('assigned_location')) {
|
||||
} elseif ($request->get('assigned_location')) {
|
||||
$target = Location::find(request('assigned_location'));
|
||||
}
|
||||
if (isset($target)) {
|
||||
$asset->checkOut($target, Auth::user(), date('Y-m-d H:i:s'), '', 'Checked out on asset creation', e($request->get('name')));
|
||||
}
|
||||
return response()->json(Helper::formatStandardApiResponse('success', $asset->id, trans('admin/hardware/message.create.success')));
|
||||
|
||||
}
|
||||
return response()->json(Helper::formatStandardApiResponse('error', null, $asset->getErrors()), 500);
|
||||
|
||||
|
||||
return response()->json(Helper::formatStandardApiResponse('error', null, $asset->getErrors()), 200);
|
||||
}
|
||||
|
||||
|
||||
|
@ -293,7 +285,6 @@ class AssetsController extends Controller
|
|||
$this->authorize('create', Asset::class);
|
||||
|
||||
if ($asset = Asset::find($id)) {
|
||||
|
||||
($request->has('model_id')) ?
|
||||
$asset->model()->associate(AssetModel::find($request->get('model_id'))) : '';
|
||||
($request->has('name')) ? $asset->name = $request->get('name') : '';
|
||||
|
@ -301,7 +292,7 @@ class AssetsController extends Controller
|
|||
($request->has('model_id')) ? $asset->model_id = $request->get('model_id') : '';
|
||||
($request->has('order_number')) ? $asset->order_number = $request->get('order_number') : '';
|
||||
($request->has('notes')) ? $asset->notes = $request->get('notes') : '';
|
||||
($request->has('asset_tag')) ? $asset->asset_tag = $request->get('asset_tag') : '';
|
||||
($request->has('asset_tag')) ? $asset->asset_tag = $request->input('asset_tag') : '';
|
||||
($request->has('archived')) ? $asset->archived = $request->get('archived') : '';
|
||||
($request->has('status_id')) ? $asset->status_id = $request->get('status_id') : '';
|
||||
($request->has('warranty_months')) ? $asset->warranty_months = $request->get('warranty_months') : '';
|
||||
|
@ -322,21 +313,17 @@ class AssetsController extends Controller
|
|||
if ($request->has($field->convertUnicodeDbSlug())) {
|
||||
$asset->{$field->convertUnicodeDbSlug()} = e($request->input($field->convertUnicodeDbSlug()));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
if ($asset->save()) {
|
||||
|
||||
$asset->logCreate();
|
||||
if($request->get('assigned_user')) {
|
||||
if ($request->get('assigned_user')) {
|
||||
$target = User::find(request('assigned_user'));
|
||||
} elseif($request->get('assigned_asset')) {
|
||||
} elseif ($request->get('assigned_asset')) {
|
||||
$target = Asset::find(request('assigned_asset'));
|
||||
} elseif($request->get('assigned_location')) {
|
||||
} elseif ($request->get('assigned_location')) {
|
||||
$target = Location::find(request('assigned_location'));
|
||||
}
|
||||
|
||||
|
@ -345,16 +332,12 @@ class AssetsController extends Controller
|
|||
}
|
||||
|
||||
return response()->json(Helper::formatStandardApiResponse('success', $asset, trans('admin/hardware/message.update.success')));
|
||||
|
||||
}
|
||||
return response()->json(Helper::formatStandardApiResponse('error', null, $asset->getErrors()), 500);
|
||||
|
||||
return response()->json(Helper::formatStandardApiResponse('error', null, $asset->getErrors()), 200);
|
||||
}
|
||||
|
||||
|
||||
return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/hardware/message.does_not_exist')), 404);
|
||||
|
||||
|
||||
return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/hardware/message.does_not_exist')), 200);
|
||||
}
|
||||
|
||||
|
||||
|
@ -368,7 +351,6 @@ class AssetsController extends Controller
|
|||
*/
|
||||
public function destroy($id)
|
||||
{
|
||||
|
||||
if ($asset = Asset::find($id)) {
|
||||
$this->authorize('delete', $asset);
|
||||
|
||||
|
@ -377,11 +359,11 @@ class AssetsController extends Controller
|
|||
->update(array('assigned_to' => null));
|
||||
|
||||
$asset->delete();
|
||||
|
||||
return response()->json(Helper::formatStandardApiResponse('success', null, trans('admin/hardware/message.delete.success')));
|
||||
|
||||
}
|
||||
return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/hardware/message.does_not_exist')), 404);
|
||||
|
||||
return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/hardware/message.does_not_exist')), 200);
|
||||
}
|
||||
|
||||
|
||||
|
@ -394,8 +376,8 @@ class AssetsController extends Controller
|
|||
* @since [v4.0]
|
||||
* @return JsonResponse
|
||||
*/
|
||||
public function checkout(Request $request, $asset_id) {
|
||||
|
||||
public function checkout(Request $request, $asset_id)
|
||||
{
|
||||
$this->authorize('checkout', Asset::class);
|
||||
$asset = Asset::findOrFail($asset_id);
|
||||
|
||||
|
@ -428,7 +410,6 @@ class AssetsController extends Controller
|
|||
}
|
||||
|
||||
return response()->json(Helper::formatStandardApiResponse('error', ['asset'=> e($asset->asset_tag)], trans('admin/hardware/message.checkout.error')))->withErrors($asset->getErrors());
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -440,8 +421,8 @@ class AssetsController extends Controller
|
|||
* @since [v4.0]
|
||||
* @return JsonResponse
|
||||
*/
|
||||
public function checkin($asset_id) {
|
||||
|
||||
public function checkin($asset_id)
|
||||
{
|
||||
$this->authorize('checkin', Asset::class);
|
||||
$asset = Asset::findOrFail($asset_id);
|
||||
$this->authorize('checkin', $asset);
|
||||
|
@ -487,8 +468,5 @@ class AssetsController extends Controller
|
|||
}
|
||||
|
||||
return response()->json(Helper::formatStandardApiResponse('success', ['asset'=> e($asset->asset_tag)], trans('admin/hardware/message.checkin.error')));
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -89,10 +89,15 @@ class ComponentsController extends Controller
|
|||
public function show($id)
|
||||
{
|
||||
$this->authorize('view', Component::class);
|
||||
$component = Component::findOrFail($id);
|
||||
$component = Component::find($id);
|
||||
|
||||
if ($component) {
|
||||
return (new ComponentsTransformer)->transformComponent($component);
|
||||
}
|
||||
|
||||
return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/components/message.does_not_exist')));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
|
|
|
@ -7,11 +7,9 @@ use App\Http\Transformers\UsersTransformer;
|
|||
use Gate;
|
||||
use App\Helpers\Helper;
|
||||
|
||||
|
||||
class AssetsTransformer
|
||||
{
|
||||
|
||||
public function transformAssets (Collection $assets, $total)
|
||||
public function transformAssets(Collection $assets, $total)
|
||||
{
|
||||
$array = array();
|
||||
foreach ($assets as $asset) {
|
||||
|
@ -21,67 +19,83 @@ class AssetsTransformer
|
|||
}
|
||||
|
||||
|
||||
public function transformAsset (Asset $asset)
|
||||
public function transformAsset(Asset $asset)
|
||||
{
|
||||
|
||||
$array = [
|
||||
'id' => $asset->id,
|
||||
'id' => (int) $asset->id,
|
||||
'name' => e($asset->name),
|
||||
'asset_tag' => e($asset->asset_tag),
|
||||
'serial' => e($asset->serial),
|
||||
'model' => ($asset->model) ? ['id' => $asset->model->id,'name'=> e($asset->model->name)] : '',
|
||||
'model' => ($asset->model) ? [
|
||||
'id' => (int) $asset->model->id,
|
||||
'name'=> e($asset->model->name)
|
||||
] : null,
|
||||
'model_number' => ($asset->model) ? e($asset->model->model_number) : null,
|
||||
'status_label' => ($asset->assetstatus) ? ['id' => $asset->assetstatus->id,'name'=> e($asset->assetstatus->name)] : null,
|
||||
'category' => ($asset->model->category) ? ['id' => $asset->model->category->id,'name'=> e($asset->model->category->name)] : null,
|
||||
'manufacturer' => ($asset->model->manufacturer) ? ['id' => $asset->model->manufacturer->id,'name'=> e($asset->model->manufacturer->name)] : null,
|
||||
'notes' => $asset->notes,
|
||||
'order_number' => $asset->order_number,
|
||||
'company' => ($asset->company) ? ['id' => $asset->company->id,'name'=> e($asset->company->name)] : null,
|
||||
'location' => ($asset->assetLoc) ? ['id' => $asset->assetLoc->id,'name'=> e($asset->assetLoc->name)] : null,
|
||||
'rtd_location' => ($asset->defaultLoc) ? ['id' => $asset->defaultLoc->id,'name'=> e($asset->defaultLoc->name)] : null,
|
||||
'status_label' => ($asset->assetstatus) ? [
|
||||
'id' => (int) $asset->assetstatus->id,
|
||||
'name'=> e($asset->assetstatus->name)
|
||||
] : null,
|
||||
'category' => ($asset->model->category) ? [
|
||||
'id' => (int) $asset->model->category->id,
|
||||
'name'=> e($asset->model->category->name)
|
||||
] : null,
|
||||
'manufacturer' => ($asset->model->manufacturer) ? [
|
||||
'id' => (int) $asset->model->manufacturer->id,
|
||||
'name'=> e($asset->model->manufacturer->name)
|
||||
] : null,
|
||||
'notes' => e($asset->notes),
|
||||
'order_number' => e($asset->order_number),
|
||||
'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)
|
||||
] : null,
|
||||
'rtd_location' => ($asset->defaultLoc) ? [
|
||||
'id' => (int) $asset->defaultLoc->id,
|
||||
'name'=> e($asset->defaultLoc->name)
|
||||
] : null,
|
||||
'image' => ($asset->getImageUrl()) ? $asset->getImageUrl() : null,
|
||||
'assigned_to' => ($asset->assigneduser) ? ['id' => $asset->assigneduser->id, 'name' => $asset->assigneduser->getFullNameAttribute(), 'first_name'=> e( $asset->assigneduser->first_name), 'last_name'=> e( $asset->assigneduser->last_name)] : null,
|
||||
'warranty' => ($asset->warranty_months > 0) ? e($asset->warranty_months).' '.trans('admin/hardware/form.months') : null,
|
||||
'warranty_expires' => ($asset->warranty_months > 0) ? $asset->present()->warrantee_expires() : null,
|
||||
'assigned_to' => ($asset->assigneduser) ? [
|
||||
'id' => (int) $asset->assigneduser->id,
|
||||
'name' => e($asset->assigneduser->getFullNameAttribute()),
|
||||
'first_name'=> e($asset->assigneduser->first_name),
|
||||
'last_name'=> e($asset->assigneduser->last_name)
|
||||
] : null,
|
||||
'warranty' => ($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'),
|
||||
'purchase_date' => Helper::getFormattedDateObject($asset->purchase_date, 'date'),
|
||||
'last_checkout' => Helper::getFormattedDateObject($asset->last_checkout, 'datetime'),
|
||||
'expected_checkin' => Helper::getFormattedDateObject($asset->expected_checkin, 'date'),
|
||||
'purchase_cost' => $asset->purchase_cost,
|
||||
'user_can_checkout' => $asset->availableForCheckout(),
|
||||
|
||||
'purchase_cost' => Helper::formatCurrencyOutput($asset->purchase_cost),
|
||||
'user_can_checkout' => (bool) $asset->availableForCheckout(),
|
||||
];
|
||||
|
||||
|
||||
$permissions_array['available_actions'] = [
|
||||
'checkout' => Gate::allows('checkout', Asset::class) ? true : false,
|
||||
'checkin' => Gate::allows('checkin', Asset::class) ? true : false,
|
||||
'update' => Gate::allows('update', Asset::class) ? true : false,
|
||||
'delete' => Gate::allows('delete', Asset::class) ? true : false,
|
||||
'checkout' => (bool) Gate::allows('checkout', Asset::class),
|
||||
'checkin' => (bool) Gate::allows('checkin', Asset::class),
|
||||
'update' => (bool) Gate::allows('update', Asset::class),
|
||||
'delete' => (bool) Gate::allows('delete', Asset::class),
|
||||
];
|
||||
|
||||
$array += $permissions_array;
|
||||
|
||||
|
||||
|
||||
if ($asset->model->fieldset) {
|
||||
|
||||
foreach($asset->model->fieldset->fields as $field) {
|
||||
foreach ($asset->model->fieldset->fields as $field) {
|
||||
$fields_array = [$field->name => $asset->{$field->convertUnicodeDbSlug()}];
|
||||
$array += $fields_array;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
return $array;
|
||||
}
|
||||
|
||||
public function transformAssetsDatatable($assets) {
|
||||
public function transformAssetsDatatable($assets)
|
||||
{
|
||||
return (new DatatablesTransformer)->transformDatatables($assets);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -8,8 +8,7 @@ use Gate;
|
|||
|
||||
class ComponentsTransformer
|
||||
{
|
||||
|
||||
public function transformComponents (Collection $components, $total)
|
||||
public function transformComponents(Collection $components, $total)
|
||||
{
|
||||
$array = array();
|
||||
foreach ($components as $component) {
|
||||
|
@ -18,44 +17,39 @@ class ComponentsTransformer
|
|||
return (new DatatablesTransformer)->transformDatatables($array, $total);
|
||||
}
|
||||
|
||||
public function transformComponent (Component $component)
|
||||
public function transformComponent(Component $component)
|
||||
{
|
||||
$array = [
|
||||
|
||||
'id' => $component->id,
|
||||
'id' => (int) $component->id,
|
||||
'name' => e($component->name),
|
||||
'serial_number' => e($component->serial),
|
||||
'location' => ($component->location) ?
|
||||
[
|
||||
'id' => $component->location->id,
|
||||
'name' => $component->location->name
|
||||
'location' => ($component->location) ? [
|
||||
'id' => (int) $component->location->id,
|
||||
'name' => e($component->location->name)
|
||||
] : null,
|
||||
'qty' => number_format($component->qty),
|
||||
'min_amt' => e($component->min_amt),
|
||||
'category' => ($component->category) ?
|
||||
[
|
||||
'id' => $component->category->id,
|
||||
'category' => ($component->category) ? [
|
||||
'id' => (int) $component->category->id,
|
||||
'name' => e($component->category->name)
|
||||
] : null,
|
||||
'order_number' => e($component->order_number),
|
||||
'purchase_date' => Helper::getFormattedDateObject($component->purchase_date, 'date'),
|
||||
'purchase_cost' => Helper::formatCurrencyOutput($component->purchase_cost),
|
||||
'remaining' => $component->numRemaining(),
|
||||
'company' => ($component->company) ?
|
||||
[
|
||||
'id' => $component->company->id,
|
||||
'remaining' => (int) $component->numRemaining(),
|
||||
'company' => ($component->company) ? [
|
||||
'id' => (int) $component->company->id,
|
||||
'name' => e($component->company->name)
|
||||
] : null,
|
||||
'created_at' => Helper::getFormattedDateObject($component->created_at, 'datetime'),
|
||||
'updated_at' => Helper::getFormattedDateObject($component->updated_at, 'datetime'),
|
||||
|
||||
];
|
||||
|
||||
$permissions_array['available_actions'] = [
|
||||
'checkout' => Gate::allows('checkout', Component::class) ? true : false,
|
||||
'checkin' => Gate::allows('checkin', Component::class) ? true : false,
|
||||
'update' => Gate::allows('update', Component::class) ? true : false,
|
||||
'delete' => Gate::allows('delete', Component::class) ? true : false,
|
||||
'checkout' => (bool) Gate::allows('checkout', Component::class),
|
||||
'checkin' => (bool) Gate::allows('checkin', Component::class),
|
||||
'update' => (bool) Gate::allows('update', Component::class),
|
||||
'delete' => (bool) Gate::allows('delete', Component::class),
|
||||
];
|
||||
$array += $permissions_array;
|
||||
|
||||
|
@ -63,16 +57,12 @@ class ComponentsTransformer
|
|||
}
|
||||
|
||||
|
||||
public function transformCheckedoutComponents (Collection $components_users, $total)
|
||||
public function transformCheckedoutComponents(Collection $components_users, $total)
|
||||
{
|
||||
|
||||
$array = array();
|
||||
foreach ($components_users as $user) {
|
||||
$array[] = (new UsersTransformer)->transformUser($user);
|
||||
}
|
||||
return (new DatatablesTransformer)->transformDatatables($array, $total);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -95,6 +95,25 @@ class Asset extends Depreciable
|
|||
return $this->present()->name();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the warranty expiration date as Carbon object
|
||||
* @return \Carbon|null
|
||||
*/
|
||||
public function getWarrantyExpiresAttribute()
|
||||
{
|
||||
if (isset($this->attributes['warranty_months']) && isset($this->attributes['purchase_date'])) {
|
||||
if (is_string($this->attributes['purchase_date']) || is_string($this->attributes['purchase_date'])) {
|
||||
$purchase_date = \Carbon\Carbon::parse($this->attributes['purchase_date']);
|
||||
} else {
|
||||
$purchase_date = \Carbon\Carbon::instance($this->attributes['purchase_date']);
|
||||
}
|
||||
$purchase_date->setTime(0, 0, 0);
|
||||
return $purchase_date->addMonths((int) $this->attributes['warranty_months']);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public function company()
|
||||
{
|
||||
return $this->belongsTo('\App\Models\Company', 'company_id');
|
||||
|
@ -151,7 +170,6 @@ class Asset extends Depreciable
|
|||
return true;
|
||||
}
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
public function checkOutNotifyMail($log_id, $user, $checkout_at, $expected_checkin, $note)
|
||||
|
@ -168,14 +186,12 @@ class Asset extends Depreciable
|
|||
$data['require_acceptance'] = $this->requireAcceptance();
|
||||
|
||||
if ((($this->requireAcceptance()=='1') || ($this->getEula())) && (!config('app.lock_passwords'))) {
|
||||
|
||||
\Mail::send('emails.accept-asset', $data, function ($m) use ($user) {
|
||||
$m->to($user->email, $user->first_name . ' ' . $user->last_name);
|
||||
$m->replyTo(config('mail.reply_to.address'), config('mail.reply_to.name'));
|
||||
$m->subject(trans('mail.Confirm_asset_delivery'));
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public function getDetailedNameAttribute()
|
||||
|
@ -222,7 +238,6 @@ class Asset extends Depreciable
|
|||
*/
|
||||
public function uploads()
|
||||
{
|
||||
|
||||
return $this->hasMany('\App\Models\Actionlog', 'item_id')
|
||||
->where('item_type', '=', Asset::class)
|
||||
->where('action_type', '=', 'uploaded')
|
||||
|
@ -257,17 +272,16 @@ class Asset extends Depreciable
|
|||
**/
|
||||
public function assetLoc()
|
||||
{
|
||||
if($this->assignedTo) {
|
||||
if ($this->assignedTo) {
|
||||
return $this->assignedTo->userLoc();
|
||||
}
|
||||
|
||||
if(!empty($this->assignedType())) {
|
||||
if (!empty($this->assignedType())) {
|
||||
if ($this->assignedType() == self::ASSET) {
|
||||
return $this->assignedTo->assetloc(); // Recurse until we have a final location
|
||||
} elseif ($this->assignedType() == self::LOCATION) {
|
||||
return $this->assignedTo();
|
||||
}
|
||||
|
||||
}
|
||||
return $this->defaultLoc();
|
||||
}
|
||||
|
@ -285,7 +299,8 @@ class Asset extends Depreciable
|
|||
}
|
||||
|
||||
|
||||
public function getImageUrl() {
|
||||
public function getImageUrl()
|
||||
{
|
||||
if ($this->image && !empty($this->image)) {
|
||||
return url('/').'/uploads/assets/'.$this->image;
|
||||
} elseif ($this->model && !empty($this->model->image)) {
|
||||
|
@ -317,7 +332,6 @@ class Asset extends Depreciable
|
|||
*/
|
||||
public function assetmaintenances()
|
||||
{
|
||||
|
||||
return $this->hasMany('\App\Models\AssetMaintenance', 'asset_id')
|
||||
->orderBy('created_at', 'desc');
|
||||
}
|
||||
|
@ -335,7 +349,6 @@ class Asset extends Depreciable
|
|||
*/
|
||||
public static function assetcount()
|
||||
{
|
||||
|
||||
return Company::scopeCompanyables(Asset::where('physical', '=', '1'))
|
||||
->whereNull('deleted_at', 'and')
|
||||
->count();
|
||||
|
@ -349,7 +362,6 @@ class Asset extends Depreciable
|
|||
return Asset::RTD()
|
||||
->whereNull('deleted_at')
|
||||
->count();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -357,11 +369,9 @@ class Asset extends Depreciable
|
|||
*/
|
||||
public static function getRequestable()
|
||||
{
|
||||
|
||||
return Asset::Requestable()
|
||||
->whereNull('deleted_at')
|
||||
->count();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -379,7 +389,6 @@ class Asset extends Depreciable
|
|||
|
||||
public static function getExpiringWarrantee($days = 30)
|
||||
{
|
||||
|
||||
return Asset::where('archived', '=', '0')
|
||||
->whereNotNull('warranty_months')
|
||||
->whereNotNull('purchase_date')
|
||||
|
@ -416,7 +425,6 @@ class Asset extends Depreciable
|
|||
*/
|
||||
public static function autoincrement_asset()
|
||||
{
|
||||
|
||||
$settings = \App\Models\Setting::getSettings();
|
||||
|
||||
if ($settings->auto_increment_assets == '1') {
|
||||
|
@ -455,7 +463,6 @@ class Asset extends Depreciable
|
|||
|
||||
public function getEula()
|
||||
{
|
||||
|
||||
$Parsedown = new \Parsedown();
|
||||
|
||||
if ($this->model->category->eula_text) {
|
||||
|
@ -465,7 +472,6 @@ class Asset extends Depreciable
|
|||
} else {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -485,7 +491,6 @@ class Asset extends Depreciable
|
|||
|
||||
public function scopeHardware($query)
|
||||
{
|
||||
|
||||
return $query->where('physical', '=', '1');
|
||||
}
|
||||
|
||||
|
@ -499,9 +504,7 @@ class Asset extends Depreciable
|
|||
|
||||
public function scopePending($query)
|
||||
{
|
||||
|
||||
return $query->whereHas('assetstatus', function ($query) {
|
||||
|
||||
$query->where('deployable', '=', 0)
|
||||
->where('pending', '=', 1)
|
||||
->where('archived', '=', 0);
|
||||
|
@ -520,12 +523,9 @@ class Asset extends Depreciable
|
|||
public function scopeAssetsByLocation($query, $location)
|
||||
{
|
||||
return $query->where(function ($query) use ($location) {
|
||||
|
||||
$query->whereHas('assigneduser', function ($query) use ($location) {
|
||||
|
||||
$query->where('users.location_id', '=', $location->id);
|
||||
})->orWhere(function ($query) use ($location) {
|
||||
|
||||
$query->where('assets.rtd_location_id', '=', $location->id);
|
||||
$query->whereNull('assets.assigned_to');
|
||||
});
|
||||
|
@ -543,10 +543,8 @@ class Asset extends Depreciable
|
|||
|
||||
public function scopeRTD($query)
|
||||
{
|
||||
|
||||
return $query->whereNULL('assigned_to')
|
||||
->whereHas('assetstatus', function ($query) {
|
||||
|
||||
$query->where('deployable', '=', 1)
|
||||
->where('pending', '=', 0)
|
||||
->where('archived', '=', 0);
|
||||
|
@ -563,9 +561,7 @@ class Asset extends Depreciable
|
|||
|
||||
public function scopeUndeployable($query)
|
||||
{
|
||||
|
||||
return $query->whereHas('assetstatus', function ($query) {
|
||||
|
||||
$query->where('deployable', '=', 0)
|
||||
->where('pending', '=', 0)
|
||||
->where('archived', '=', 0);
|
||||
|
@ -582,9 +578,7 @@ class Asset extends Depreciable
|
|||
|
||||
public function scopeNotArchived($query)
|
||||
{
|
||||
|
||||
return $query->whereHas('assetstatus', function ($query) {
|
||||
|
||||
$query->where('archived', '=', 0);
|
||||
});
|
||||
}
|
||||
|
@ -599,9 +593,7 @@ class Asset extends Depreciable
|
|||
|
||||
public function scopeArchived($query)
|
||||
{
|
||||
|
||||
return $query->whereHas('assetstatus', function ($query) {
|
||||
|
||||
$query->where('deployable', '=', 0)
|
||||
->where('pending', '=', 0)
|
||||
->where('archived', '=', 1);
|
||||
|
@ -618,7 +610,6 @@ class Asset extends Depreciable
|
|||
|
||||
public function scopeDeployed($query)
|
||||
{
|
||||
|
||||
return $query->where('assigned_to', '>', '0');
|
||||
}
|
||||
|
||||
|
@ -632,10 +623,8 @@ class Asset extends Depreciable
|
|||
|
||||
public function scopeRequestableAssets($query)
|
||||
{
|
||||
|
||||
return Company::scopeCompanyables($query->where('requestable', '=', 1))
|
||||
->whereHas('assetstatus', function ($query) {
|
||||
|
||||
$query->where('deployable', '=', 1)
|
||||
->where('pending', '=', 0)
|
||||
->where('archived', '=', 0);
|
||||
|
@ -723,7 +712,6 @@ class Asset extends Depreciable
|
|||
$search = explode(' OR ', $search);
|
||||
|
||||
return $query->where(function ($query) use ($search) {
|
||||
|
||||
foreach ($search as $search) {
|
||||
$query->whereHas('model', function ($query) use ($search) {
|
||||
$query->whereHas('category', function ($query) use ($search) {
|
||||
|
@ -787,10 +775,8 @@ class Asset extends Depreciable
|
|||
*/
|
||||
public function scopeByFilter($query, $filter)
|
||||
{
|
||||
|
||||
return $query->where(function ($query) use ($filter) {
|
||||
foreach ($filter as $key => $search_val) {
|
||||
|
||||
if ($key =='asset_tag') {
|
||||
$query->where('assets.asset_tag', 'LIKE', '%'.$search_val.'%');
|
||||
}
|
||||
|
@ -887,8 +873,6 @@ class Asset extends Depreciable
|
|||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
foreach (CustomField::all() as $field) {
|
||||
|
@ -896,7 +880,6 @@ class Asset extends Depreciable
|
|||
$query->orWhere($field->db_column_name(), 'LIKE', "%$search_val%");
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -979,7 +962,7 @@ class Asset extends Depreciable
|
|||
public function scopeInCategory($query, $category_id)
|
||||
{
|
||||
return $query->join('models', 'assets.model_id', '=', 'models.id')
|
||||
->join('categories', 'models.category_id', '=', 'categories.id')->where('models.category_id','=',$category_id);
|
||||
->join('categories', 'models.category_id', '=', 'categories.id')->where('models.category_id', '=', $category_id);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -993,7 +976,7 @@ class Asset extends Depreciable
|
|||
public function scopeByManufacturer($query, $manufacturer_id)
|
||||
{
|
||||
return $query->join('models', 'assets.model_id', '=', 'models.id')
|
||||
->join('manufacturers', 'models.manufacturer_id', '=', 'manufacturers.id')->where('models.manufacturer_id','=',$manufacturer_id);
|
||||
->join('manufacturers', 'models.manufacturer_id', '=', 'manufacturers.id')->where('models.manufacturer_id', '=', $manufacturer_id);
|
||||
}
|
||||
|
||||
|
||||
|
@ -1052,7 +1035,6 @@ class Asset extends Depreciable
|
|||
*/
|
||||
public function scopeByLocationId($query, $search)
|
||||
{
|
||||
|
||||
return $query->where(function ($query) use ($search) {
|
||||
$query->whereHas('defaultLoc', function ($query) use ($search) {
|
||||
$query->where('locations.id', '=', $search);
|
||||
|
@ -1064,6 +1046,5 @@ class Asset extends Depreciable
|
|||
});
|
||||
});
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -32,14 +32,12 @@ class CustomField extends Model
|
|||
|
||||
public static function name_to_db_name($name)
|
||||
{
|
||||
return "_snipeit_".preg_replace("/[^a-zA-Z0-9]/", "_", strtolower($name));
|
||||
return "_snipeit_" . preg_replace("/[^a-zA-Z0-9]/", "_", strtolower($name));
|
||||
}
|
||||
|
||||
public static function boot()
|
||||
{
|
||||
self::created(function ($custom_field)
|
||||
{
|
||||
|
||||
self::created(function ($custom_field) {
|
||||
\Log::debug("\n\nCreating Original Name: ".$custom_field->name);
|
||||
\Log::debug('Creating Column Name: '.$custom_field->convertUnicodeDbSlug());
|
||||
|
||||
|
@ -55,36 +53,30 @@ class CustomField extends Model
|
|||
|
||||
$custom_field->db_column = $custom_field->convertUnicodeDbSlug();
|
||||
$custom_field->save();
|
||||
|
||||
});
|
||||
|
||||
|
||||
self::updating(function ($custom_field)
|
||||
{
|
||||
self::updating(function ($custom_field) {
|
||||
\Log::debug('Updating column name');
|
||||
\Log::debug('Updating Original Name: '.$custom_field->getOriginal("name"));
|
||||
\Log::debug('Updating New Column Name: '.$custom_field->convertUnicodeDbSlug());
|
||||
|
||||
if ($custom_field->isDirty("name")) {
|
||||
|
||||
if (Schema::hasColumn(CustomField::$table_name, $custom_field->convertUnicodeDbSlug()))
|
||||
{
|
||||
if (Schema::hasColumn(CustomField::$table_name, $custom_field->convertUnicodeDbSlug())) {
|
||||
\Log::debug('Column already exists. Nothing to update.');
|
||||
return true;
|
||||
}
|
||||
|
||||
\Log::debug('Updating column name to.'.$custom_field->convertUnicodeDbSlug());
|
||||
|
||||
return Schema::table(CustomField::$table_name, function ($table) use ($custom_field) {
|
||||
$table->renameColumn($custom_field->convertUnicodeDbSlug($custom_field->getOriginal("name")), $custom_field->convertUnicodeDbSlug());
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
return true;
|
||||
});
|
||||
|
||||
self::deleting(function ($custom_field)
|
||||
{
|
||||
self::deleting(function ($custom_field) {
|
||||
return Schema::table(CustomField::$table_name, function ($table) use ($custom_field) {
|
||||
$table->dropColumn($custom_field->convertUnicodeDbSlug());
|
||||
});
|
||||
|
@ -154,7 +146,6 @@ class CustomField extends Model
|
|||
$result[$arr_parts[0]] = $arr_parts[0];
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -176,16 +167,11 @@ class CustomField extends Model
|
|||
$id = $this->id ? $this->id : 'xx';
|
||||
|
||||
if (!function_exists('transliterator_transliterate')) {
|
||||
$long_slug = str_slug('_snipeit_'.\Patchwork\Utf8::utf8_encode(trim($name)),'_');
|
||||
$long_slug = '_snipeit_' . str_slug(\Patchwork\Utf8::utf8_encode(trim($name)), '_');
|
||||
} else {
|
||||
$long_slug = '_snipeit_'.Utf8Slugger::slugify($name,'_');
|
||||
$long_slug = '_snipeit_' . Utf8Slugger::slugify($name, '_');
|
||||
}
|
||||
|
||||
return substr($long_slug, 0, 50).'_'.$id;
|
||||
|
||||
return substr($long_slug, 0, 50) . '_' . $id;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -21,9 +21,7 @@ class ApiAssetsCest
|
|||
$I->wantTo('Get a list of assets');
|
||||
|
||||
// setup
|
||||
$assets = factory(\App\Models\Asset::class, 'asset', 10)->create([
|
||||
'user_id' => $this->user->id,
|
||||
]);
|
||||
$assets = factory(\App\Models\Asset::class, 'asset', 10)->create();
|
||||
|
||||
// call
|
||||
$I->sendGET('/hardware');
|
||||
|
@ -36,36 +34,81 @@ class ApiAssetsCest
|
|||
$asset = $assets->random();
|
||||
|
||||
$I->seeResponseContainsJson([
|
||||
'id' => $asset->id,
|
||||
'id' => (int) $asset->id,
|
||||
'name' => e($asset->name),
|
||||
'asset_tag' => $asset->asset_tag,
|
||||
'serial' => $asset->serial,
|
||||
'model' => [
|
||||
'id' => $asset->model_id,
|
||||
'name' => e($asset->model->name),
|
||||
'asset_tag' => e($asset->asset_tag),
|
||||
'serial' => e($asset->serial),
|
||||
'model' => ($asset->model) ? [
|
||||
'id' => (int) $asset->model->id,
|
||||
'name'=> e($asset->model->name)
|
||||
] : null,
|
||||
'model_number' => ($asset->model) ? e($asset->model->model_number) : null,
|
||||
'status_label' => ($asset->assetstatus) ? [
|
||||
'id' => (int) $asset->assetstatus->id,
|
||||
'name'=> e($asset->assetstatus->name)
|
||||
] : null,
|
||||
'category' => ($asset->model->category) ? [
|
||||
'id' => (int) $asset->model->category->id,
|
||||
'name'=> e($asset->model->category->name)
|
||||
] : null,
|
||||
'manufacturer' => ($asset->model->manufacturer) ? [
|
||||
'id' => (int) $asset->model->manufacturer->id,
|
||||
'name'=> e($asset->model->manufacturer->name)
|
||||
] : null,
|
||||
'notes' => e($asset->notes),
|
||||
'order_number' => e($asset->order_number),
|
||||
'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)
|
||||
] : null,
|
||||
'rtd_location' => ($asset->defaultLoc) ? [
|
||||
'id' => (int) $asset->defaultLoc->id,
|
||||
'name'=> e($asset->defaultLoc->name)
|
||||
] : null,
|
||||
'image' => ($asset->getImageUrl()) ? $asset->getImageUrl() : null,
|
||||
'assigned_to' => ($asset->assigneduser) ? [
|
||||
'id' => (int) $asset->assigneduser->id,
|
||||
'name' => e($asset->assigneduser->getFullNameAttribute()),
|
||||
'first_name'=> e($asset->assigneduser->first_name),
|
||||
'last_name'=> e($asset->assigneduser->last_name)
|
||||
] : null,
|
||||
'warranty' => ($asset->warranty_months > 0) ? e($asset->warranty_months . ' ' . trans('admin/hardware/form.months')) : null,
|
||||
'warranty_expires' => ($asset->warranty_months > 0) ? [
|
||||
'datetime' => $asset->created_at->format('Y-m-d'),
|
||||
'formatted' => $asset->created_at->format('Y-m-d'),
|
||||
] : null,
|
||||
// 'created_at' => ($asset->created_at) ? [
|
||||
// 'datetime' => $asset->created_at->format('Y-m-d H:i:s'),
|
||||
// 'formatted' => $asset->created_at->format('Y-m-d H:i a'),
|
||||
// ] : null,
|
||||
// 'updated_at' => ($asset->updated_at) ? [
|
||||
// 'datetime' => $asset->updated_at->format('Y-m-d H:i:s'),
|
||||
// 'formatted' => $asset->updated_at->format('Y-m-d H:i a'),
|
||||
// ] : null,
|
||||
// 'purchase_date' => ($asset->purchase_date) ? [
|
||||
// 'datetime' => $asset->purchase_date->format('Y-m-d'),
|
||||
// 'formatted' => $asset->purchase_date->format('Y-m-d'),
|
||||
// ] : null,
|
||||
// 'last_checkout' => ($asset->last_checkout) ? [
|
||||
// 'datetime' => $asset->last_checkout->format('Y-m-d'),
|
||||
// 'formatted' => $asset->last_checkout->format('Y-m-d'),
|
||||
// ] : null,
|
||||
// 'expected_checkin' => ($asset->created_at) ? [
|
||||
// 'date' => $asset->created_at->format('Y-m-d'),
|
||||
// 'formatted' => $asset->created_at->format('Y-m-d'),
|
||||
// ] : null,
|
||||
// 'purchase_cost' => (float) $asset->purchase_cost,
|
||||
'user_can_checkout' => (bool) $asset->availableForCheckout(),
|
||||
'available_actions' => [
|
||||
'checkout' => (bool) Gate::allows('checkout', Asset::class),
|
||||
'checkin' => (bool) Gate::allows('checkin', Asset::class),
|
||||
'update' => (bool) Gate::allows('update', Asset::class),
|
||||
'delete' => (bool) Gate::allows('delete', Asset::class),
|
||||
],
|
||||
// TODO: model_label
|
||||
'last_checkout' => $asset->last_checkout,
|
||||
// TODO: category [id, name]
|
||||
// TODO: manufacturer [id, name]
|
||||
'notes' => $asset->notes,
|
||||
'expected_checkin' => $asset->expected_checkin,
|
||||
'order_number' => $asset->order_number,
|
||||
'company' => [
|
||||
'id' => $asset->company->id,
|
||||
'name' => $asset->company->name,
|
||||
],
|
||||
// TODO: location [id, name]
|
||||
// TODO: rtd_location [id, name]
|
||||
'image' => $asset->image,
|
||||
'assigned_to' => $asset->assigned_to,
|
||||
'warranty' => $asset->warranty,
|
||||
'warranty_expires' => $asset->warranty_expires,
|
||||
// TODO: created_at
|
||||
'purchase_date' => $asset->purchase_date->format('Y-m-d'),
|
||||
'purchase_cost' => \App\Helpers\Helper::formatCurrencyOutput($asset->purchase_cost),
|
||||
// TODO: user_can_checkout
|
||||
// TODO: available actions
|
||||
]);
|
||||
}
|
||||
|
||||
|
@ -94,12 +137,10 @@ class ApiAssetsCest
|
|||
'warranty_months' => $temp_asset->warranty_months,
|
||||
];
|
||||
|
||||
$scenario->incomplete('When I POST to /hardware i am redirected to html login page 😰');
|
||||
// create
|
||||
$I->sendPOST('/hardware', $data);
|
||||
$I->seeResponseIsJson();
|
||||
$I->seeResponseCodeIs(200);
|
||||
|
||||
}
|
||||
|
||||
/** @test */
|
||||
|
@ -140,21 +181,102 @@ class ApiAssetsCest
|
|||
|
||||
$response = json_decode($I->grabResponse());
|
||||
$I->assertEquals('success', $response->status);
|
||||
$I->assertEquals(trans('admin/hardware/message.update.success'), $response->messages);
|
||||
|
||||
$I->assertEquals($asset->id, $response->payload->id);
|
||||
$I->assertEquals($data['name'], $response->payload->name);
|
||||
$I->assertEquals($data['asset_tag'], $response->payload->asset_tag);
|
||||
$I->assertEquals($data['model_id'], $response->payload->model_id);
|
||||
|
||||
// dd($response, $asset->getAttributes());
|
||||
|
||||
// verify
|
||||
$scenario->incomplete('[BadMethodCallException] Call to undefined method Illuminate\Database\Query\Builder::detail() 🤔');
|
||||
// $scenario->incomplete('[BadMethodCallException] Call to undefined method Illuminate\Database\Query\Builder::detail() 🤔');
|
||||
$I->sendGET('/hardware/' . $asset->id);
|
||||
|
||||
$I->seeResponseIsJson();
|
||||
$I->seeResponseCodeIs(200);
|
||||
$I->seeResponseContainsJson([
|
||||
'name' => $data['name'],
|
||||
'id' => $asset->id,
|
||||
'id' => (int) $asset->id,
|
||||
'name' => e($temp_asset->name), // TODO: name should change
|
||||
'asset_tag' => e($temp_asset->asset_tag), // TODO: asset_tag should change
|
||||
'serial' => e($temp_asset->serial),
|
||||
'model' => ($temp_asset->model) ? [
|
||||
'id' => (int) $temp_asset->model->id,
|
||||
'name'=> e($temp_asset->model->name)
|
||||
] : null,
|
||||
'model_number' => ($temp_asset->model) ? e($temp_asset->model->model_number) : null,
|
||||
'status_label' => ($temp_asset->assetstatus) ? [
|
||||
'id' => (int) $temp_asset->assetstatus->id,
|
||||
'name'=> e($temp_asset->assetstatus->name)
|
||||
] : null,
|
||||
'category' => ($temp_asset->model->category) ? [
|
||||
'id' => (int) $temp_asset->model->category->id,
|
||||
'name'=> e($temp_asset->model->category->name)
|
||||
] : null,
|
||||
'manufacturer' => ($temp_asset->model->manufacturer) ? [
|
||||
'id' => (int) $temp_asset->model->manufacturer->id,
|
||||
'name'=> e($temp_asset->model->manufacturer->name)
|
||||
] : null,
|
||||
'notes' => e($temp_asset->notes),
|
||||
'order_number' => e($asset->order_number),
|
||||
'company' => ($temp_asset->company) ? [
|
||||
'id' => (int) $temp_asset->company->id,
|
||||
'name'=> e($temp_asset->company->name)
|
||||
] : null,
|
||||
'location' => ($asset->assetLoc) ? [
|
||||
'id' => (int) $asset->assetLoc->id,
|
||||
'name'=> e($asset->assetLoc->name)
|
||||
] : null,
|
||||
'rtd_location' => ($asset->defaultLoc) ? [
|
||||
'id' => (int) $asset->defaultLoc->id,
|
||||
'name'=> e($asset->defaultLoc->name)
|
||||
] : null,
|
||||
'image' => ($asset->getImageUrl()) ? $asset->getImageUrl() : null,
|
||||
'assigned_to' => ($temp_asset->assigneduser) ? [
|
||||
'id' => (int) $temp_asset->assigneduser->id,
|
||||
'name' => e($temp_asset->assigneduser->getFullNameAttribute()),
|
||||
'first_name'=> e($temp_asset->assigneduser->first_name),
|
||||
'last_name'=> e($temp_asset->assigneduser->last_name)
|
||||
] : null,
|
||||
'warranty' => ($asset->warranty_months > 0) ? e($asset->warranty_months . ' ' . trans('admin/hardware/form.months')) : null,
|
||||
'warranty_expires' => ($asset->warranty_months > 0) ? [
|
||||
'datetime' => $asset->created_at->format('Y-m-d'),
|
||||
'formatted' => $asset->created_at->format('Y-m-d'),
|
||||
] : null,
|
||||
// 'created_at' => ($asset->created_at) ? [
|
||||
// 'datetime' => $asset->created_at->format('Y-m-d H:i:s'),
|
||||
// 'formatted' => $asset->created_at->format('Y-m-d H:i a'),
|
||||
// ] : null,
|
||||
// 'updated_at' => ($asset->updated_at) ? [
|
||||
// 'datetime' => $asset->updated_at->format('Y-m-d H:i:s'),
|
||||
// 'formatted' => $asset->updated_at->format('Y-m-d H:i a'),
|
||||
// ] : null,
|
||||
// 'purchase_date' => ($asset->purchase_date) ? [
|
||||
// 'datetime' => $asset->purchase_date->format('Y-m-d'),
|
||||
// 'formatted' => $asset->purchase_date->format('Y-m-d'),
|
||||
// ] : null,
|
||||
// 'last_checkout' => ($asset->last_checkout) ? [
|
||||
// 'datetime' => $asset->last_checkout->format('Y-m-d'),
|
||||
// 'formatted' => $asset->last_checkout->format('Y-m-d'),
|
||||
// ] : null,
|
||||
// 'expected_checkin' => ($asset->created_at) ? [
|
||||
// 'date' => $asset->created_at->format('Y-m-d'),
|
||||
// 'formatted' => $asset->created_at->format('Y-m-d'),
|
||||
// ] : null,
|
||||
// 'purchase_cost' => (float) $asset->purchase_cost,
|
||||
'user_can_checkout' => (bool) $temp_asset->availableForCheckout(),
|
||||
'available_actions' => [
|
||||
'checkout' => (bool) Gate::allows('checkout', Asset::class),
|
||||
'checkin' => (bool) Gate::allows('checkin', Asset::class),
|
||||
'update' => (bool) Gate::allows('update', Asset::class),
|
||||
'delete' => (bool) Gate::allows('delete', Asset::class),
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
/** @test */
|
||||
/* public function updateAssetWithPut(ApiTester $I)
|
||||
public function updateAssetWithPut(ApiTester $I)
|
||||
{
|
||||
$I->wantTo('Update a asset with PUT');
|
||||
|
||||
|
@ -162,8 +284,11 @@ class ApiAssetsCest
|
|||
$asset = factory(\App\Models\Asset::class, 'asset')->create();
|
||||
$I->assertInstanceOf(\App\Models\Asset::class, $asset);
|
||||
|
||||
$company = \App\Models\Company::inRandomOrder()->first();
|
||||
|
||||
$data = [
|
||||
'name' => $this->faker->sentence(3),
|
||||
'company_id' => $company->id,
|
||||
];
|
||||
|
||||
$I->assertNotEquals($asset->name, $data['name']);
|
||||
|
@ -175,20 +300,94 @@ class ApiAssetsCest
|
|||
|
||||
$response = json_decode($I->grabResponse());
|
||||
$I->assertEquals('success', $response->status);
|
||||
$I->assertEquals(trans('admin/hardware/message.update.success'), $response->messages);
|
||||
$I->assertEquals($asset->id, $response->payload->id);
|
||||
|
||||
// verify
|
||||
$I->sendGET('/hardware/' . $asset->id);
|
||||
$I->seeResponseIsJson();
|
||||
$I->seeResponseCodeIs(200);
|
||||
$I->seeResponseContainsJson([
|
||||
'id' => (int) $asset->id,
|
||||
'name' => e($data['name']),
|
||||
'id' => e($asset->id),
|
||||
'qty' => e($asset->qty),
|
||||
'asset_tag' => e($asset->asset_tag),
|
||||
'serial' => e($asset->serial),
|
||||
'model' => ($asset->model) ? [
|
||||
'id' => (int) $asset->model->id,
|
||||
'name'=> e($asset->model->name)
|
||||
] : null,
|
||||
'model_number' => ($asset->model) ? e($asset->model->model_number) : null,
|
||||
'status_label' => ($asset->assetstatus) ? [
|
||||
'id' => (int) $asset->assetstatus->id,
|
||||
'name'=> e($asset->assetstatus->name)
|
||||
] : null,
|
||||
'category' => ($asset->model->category) ? [
|
||||
'id' => (int) $asset->model->category->id,
|
||||
'name'=> e($asset->model->category->name)
|
||||
] : null,
|
||||
'manufacturer' => ($asset->model->manufacturer) ? [
|
||||
'id' => (int) $asset->model->manufacturer->id,
|
||||
'name'=> e($asset->model->manufacturer->name)
|
||||
] : null,
|
||||
'notes' => e($asset->notes),
|
||||
'order_number' => e($asset->order_number),
|
||||
'company' => ($asset->company) ? [
|
||||
'id' => (int) $data['company_id'],
|
||||
'name'=> e($company->name)
|
||||
] : null,
|
||||
'location' => ($asset->assetLoc) ? [
|
||||
'id' => (int) $asset->assetLoc->id,
|
||||
'name'=> e($asset->assetLoc->name)
|
||||
] : null,
|
||||
'rtd_location' => ($asset->defaultLoc) ? [
|
||||
'id' => (int) $asset->defaultLoc->id,
|
||||
'name'=> e($asset->defaultLoc->name)
|
||||
] : null,
|
||||
'image' => ($asset->getImageUrl()) ? $asset->getImageUrl() : null,
|
||||
'assigned_to' => ($asset->assigneduser) ? [
|
||||
'id' => (int) $asset->assigneduser->id,
|
||||
'name' => e($asset->assigneduser->getFullNameAttribute()),
|
||||
'first_name'=> e($asset->assigneduser->first_name),
|
||||
'last_name'=> e($asset->assigneduser->last_name)
|
||||
] : null,
|
||||
'warranty' => ($asset->warranty_months > 0) ? e($asset->warranty_months . ' ' . trans('admin/hardware/form.months')) : null,
|
||||
'warranty_expires' => ($asset->warranty_months > 0) ? [
|
||||
'datetime' => $asset->created_at->format('Y-m-d'),
|
||||
'formatted' => $asset->created_at->format('Y-m-d'),
|
||||
] : null,
|
||||
// 'created_at' => ($asset->created_at) ? [
|
||||
// 'datetime' => $asset->created_at->format('Y-m-d H:i:s'),
|
||||
// 'formatted' => $asset->created_at->format('Y-m-d H:i a'),
|
||||
// ] : null,
|
||||
// 'updated_at' => ($asset->updated_at) ? [
|
||||
// 'datetime' => $asset->updated_at->format('Y-m-d H:i:s'),
|
||||
// 'formatted' => $asset->updated_at->format('Y-m-d H:i a'),
|
||||
// ] : null,
|
||||
// 'purchase_date' => ($asset->purchase_date) ? [
|
||||
// 'datetime' => $asset->purchase_date->format('Y-m-d'),
|
||||
// 'formatted' => $asset->purchase_date->format('Y-m-d'),
|
||||
// ] : null,
|
||||
// 'last_checkout' => ($asset->last_checkout) ? [
|
||||
// 'datetime' => $asset->last_checkout->format('Y-m-d'),
|
||||
// 'formatted' => $asset->last_checkout->format('Y-m-d'),
|
||||
// ] : null,
|
||||
// 'expected_checkin' => ($asset->created_at) ? [
|
||||
// 'date' => $asset->created_at->format('Y-m-d'),
|
||||
// 'formatted' => $asset->created_at->format('Y-m-d'),
|
||||
// ] : null,
|
||||
// 'purchase_cost' => (float) $asset->purchase_cost,
|
||||
'user_can_checkout' => (bool) $asset->availableForCheckout(),
|
||||
'available_actions' => [
|
||||
'checkout' => (bool) Gate::allows('checkout', Asset::class),
|
||||
'checkin' => (bool) Gate::allows('checkin', Asset::class),
|
||||
'update' => (bool) Gate::allows('update', Asset::class),
|
||||
'delete' => (bool) Gate::allows('delete', Asset::class),
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
/** @test */
|
||||
/* public function deleteAssetTest(ApiTester $I, $scenario)
|
||||
public function deleteAssetTest(ApiTester $I, $scenario)
|
||||
{
|
||||
$I->wantTo('Delete an asset');
|
||||
|
||||
|
@ -201,10 +400,16 @@ class ApiAssetsCest
|
|||
$I->seeResponseIsJson();
|
||||
$I->seeResponseCodeIs(200);
|
||||
|
||||
// verify, expect a 404
|
||||
$response = json_decode($I->grabResponse());
|
||||
$I->assertEquals('success', $response->status);
|
||||
$I->assertEquals(trans('admin/hardware/message.delete.success'), $response->messages);
|
||||
|
||||
// verify, expect a 200
|
||||
$I->sendGET('/hardware/' . $asset->id);
|
||||
$I->seeResponseCodeIs(404);
|
||||
// $I->seeResponseIsJson(); // @todo: response is not JSON
|
||||
$scenario->incomplete('404 response should be JSON, receiving HTML instead');
|
||||
} // */
|
||||
$I->seeResponseCodeIs(200);
|
||||
$I->seeResponseIsJson(); // @todo: response is not JSON
|
||||
|
||||
|
||||
// $scenario->incomplete('not found response should be JSON, receiving HTML instead');
|
||||
}
|
||||
}
|
||||
|
|
|
@ -75,23 +75,29 @@ class ApiComponentsCest
|
|||
$I->seeResponseIsJson();
|
||||
$I->seeResponseCodeIs(200);
|
||||
$I->seeResponseContainsJson([
|
||||
'id' => $id,
|
||||
'category' => [
|
||||
'id' => $data['category_id'],
|
||||
'name' => e($category->name),
|
||||
],
|
||||
'company' => [
|
||||
'id' => $data['company_id'],
|
||||
'name' => e($company->name),
|
||||
],
|
||||
'id' => (int) $id,
|
||||
'name' => e($data['name']),
|
||||
// 'serial_number' => e($component->serial),
|
||||
'location' => [
|
||||
'id' => $data['location_id'],
|
||||
'id' => (int) $data['location_id'],
|
||||
'name' => e($location->name),
|
||||
],
|
||||
'name' => $data['name'],
|
||||
'qty' => $data['qty'],
|
||||
'qty' => number_format($data['qty']),
|
||||
// 'min_amt' => e($component->min_amt),
|
||||
'category' => [
|
||||
'id' => (int) $data['category_id'],
|
||||
'name' => e($category->name),
|
||||
],
|
||||
// 'order_number' => e($component->order_number),
|
||||
'purchase_date' => \App\Helpers\Helper::getFormattedDateObject($data['purchase_date'], 'date'),
|
||||
'purchase_cost' => \App\Helpers\Helper::formatCurrencyOutput($data['purchase_cost']),
|
||||
'purchase_date' => $data['purchase_date'],
|
||||
// 'remaining' => (int) $component->numRemaining(),
|
||||
'company' => [
|
||||
'id' => (int) $data['company_id'],
|
||||
'name' => e($company->name),
|
||||
],
|
||||
// 'created_at' => Helper::getFormattedDateObject($component->created_at, 'datetime'),
|
||||
// 'updated_at' => Helper::getFormattedDateObject($component->updated_at, 'datetime'),
|
||||
]);
|
||||
}
|
||||
|
||||
|
@ -178,10 +184,10 @@ class ApiComponentsCest
|
|||
$I->seeResponseIsJson();
|
||||
$I->seeResponseCodeIs(200);
|
||||
|
||||
// verify, expect a 404
|
||||
// verify, expect a 200 with an error message
|
||||
$I->sendGET('/components/' . $component->id);
|
||||
$I->seeResponseCodeIs(404);
|
||||
// $I->seeResponseIsJson(); // @todo: response is not JSON
|
||||
$scenario->incomplete('404 response should be JSON, receiving HTML instead');
|
||||
$I->seeResponseCodeIs(200);
|
||||
$I->seeResponseIsJson(); // @todo: response is not JSON
|
||||
// $scenario->incomplete('Resource not found response should be JSON, receiving HTML instead');
|
||||
}
|
||||
}
|
||||
|
|
|
@ -27,4 +27,38 @@ class AssetTest extends \Codeception\TestCase\Test
|
|||
$this->tester->seeRecord('assets', $values);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function testWarrantyExpiresAttribute()
|
||||
{
|
||||
$asset = factory(\App\Models\Asset::class, 'asset')->create();
|
||||
|
||||
$asset->purchase_date = \Carbon\Carbon::createFromDate(2017, 1, 1);
|
||||
$asset->warranty_months = 24;
|
||||
$asset->save();
|
||||
|
||||
$saved_asset = \App\Models\Asset::find($asset->id);
|
||||
|
||||
$this->tester->assertInstanceOf(\DateTime::class, $saved_asset->purchase_date);
|
||||
$this->tester->assertEquals(
|
||||
\Carbon\Carbon::createFromDate(2017,1,1)->format('Y-m-d'),
|
||||
$saved_asset->purchase_date->format('Y-m-d')
|
||||
);
|
||||
$this->tester->assertEquals(
|
||||
\Carbon\Carbon::createFromDate(2017,1,1)->setTime(0,0,0),
|
||||
$saved_asset->purchase_date
|
||||
);
|
||||
$this->tester->assertEquals(24, $saved_asset->warranty_months);
|
||||
$this->tester->assertInstanceOf(\DateTime::class, $saved_asset->warranty_expires);
|
||||
$this->tester->assertEquals(
|
||||
\Carbon\Carbon::createFromDate(2019,1,1)->format('Y-m-d'),
|
||||
$saved_asset->warranty_expires->format('Y-m-d')
|
||||
);
|
||||
$this->tester->assertEquals(
|
||||
\Carbon\Carbon::createFromDate(2019,1,1)->setTime(0,0,0),
|
||||
$saved_asset->warranty_expires
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,7 +5,6 @@ use Illuminate\Foundation\Testing\WithoutMiddleware;
|
|||
use Illuminate\Foundation\Testing\DatabaseMigrations;
|
||||
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
||||
|
||||
|
||||
/*
|
||||
* Test strings for db column names gathered from
|
||||
* http://www.omniglot.com/language/phrases/hovercraft.htm
|
||||
|
@ -15,11 +14,13 @@ class CustomFieldTest extends \Codeception\TestCase\Test
|
|||
protected $tester;
|
||||
use DatabaseMigrations;
|
||||
|
||||
public function testConstructor() {
|
||||
public function testConstructor()
|
||||
{
|
||||
$customfield = new CustomField();
|
||||
}
|
||||
|
||||
public function testFormat() {
|
||||
public function testFormat()
|
||||
{
|
||||
$customfield = factory(CustomField::class, 'customfield-ip')->make();
|
||||
$values = [
|
||||
'name' => $customfield->name,
|
||||
|
@ -27,71 +28,101 @@ class CustomFieldTest extends \Codeception\TestCase\Test
|
|||
'element' => $customfield->element,
|
||||
];
|
||||
|
||||
$this->assertEquals($customfield->getAttributes()['format'],CustomField::$PredefinedFormats['IP']); //this seems undocumented...
|
||||
$this->assertEquals($customfield->format,"IP");
|
||||
$this->assertEquals($customfield->getAttributes()['format'], CustomField::$PredefinedFormats['IP']); //this seems undocumented...
|
||||
$this->assertEquals($customfield->format, "IP");
|
||||
}
|
||||
|
||||
public function testDbNameAscii() {
|
||||
public function testDbNameAscii()
|
||||
{
|
||||
$customfield = new CustomField();
|
||||
$customfield->name="My hovercraft is full of eels";
|
||||
$customfield->name = "My hovercraft is full of eels";
|
||||
$customfield->id = 1337;
|
||||
$this->assertEquals($customfield->convertUnicodeDbSlug(),"_snipeit_my_hovercraft_is_full_of_eels_1337");
|
||||
$this->assertEquals($customfield->convertUnicodeDbSlug(), "_snipeit_my_hovercraft_is_full_of_eels_1337");
|
||||
}
|
||||
|
||||
// Western Europe
|
||||
public function testDbNameLatin() {
|
||||
public function testDbNameLatin()
|
||||
{
|
||||
$customfield=new CustomField();
|
||||
$customfield->name="My hovercraft is full of eels";
|
||||
$customfield->id = 1337;
|
||||
$this->assertEquals($customfield->convertUnicodeDbSlug(),"_snipeit_my_hovercraft_is_full_of_eels_1337");
|
||||
$this->assertEquals($customfield->convertUnicodeDbSlug(), "_snipeit_my_hovercraft_is_full_of_eels_1337");
|
||||
}
|
||||
|
||||
|
||||
// Asian
|
||||
public function testDbNameChinese() {
|
||||
public function testDbNameChinese()
|
||||
{
|
||||
$customfield=new CustomField();
|
||||
$customfield->name="我的氣墊船裝滿了鱔魚";
|
||||
$customfield->id = 1337;
|
||||
$this->assertEquals($customfield->convertUnicodeDbSlug(),"_snipeit_wo_de_qi_dian_chuan_zhuang_man_le_shan_yu_1337");
|
||||
if (function_exists('transliterator_transliterate')) {
|
||||
$this->assertEquals($customfield->convertUnicodeDbSlug(), "_snipeit_wo_de_qi_dian_chuan_zhuang_man_le_shan_yu_1337");
|
||||
} else {
|
||||
$this->assertEquals($customfield->convertUnicodeDbSlug(), "_snipeit_aecsae0ase1eaeaeoees_1337");
|
||||
}
|
||||
}
|
||||
|
||||
public function testDbNameJapanese() {
|
||||
public function testDbNameJapanese()
|
||||
{
|
||||
$customfield=new CustomField();
|
||||
$customfield->name="私のホバークラフトは鰻でいっぱいです";
|
||||
$customfield->id = 1337;
|
||||
$this->assertEquals($customfield->convertUnicodeDbSlug(),"_snipeit_sinohohakurafutoha_manteihhaitesu_1337");
|
||||
if (function_exists('transliterator_transliterate')) {
|
||||
$this->assertEquals($customfield->convertUnicodeDbSlug(), "_snipeit_sinohohakurafutoha_manteihhaitesu_1337");
|
||||
} else {
|
||||
$this->assertEquals($customfield->convertUnicodeDbSlug(), "_snipeit_caafafafaafcafafae0aaaaaaa_1337");
|
||||
}
|
||||
}
|
||||
|
||||
public function testDbNameKorean() {
|
||||
$customfield=new CustomField();
|
||||
$customfield->name="내 호버크라프트는 장어로 가득 차 있어요";
|
||||
public function testDbNameKorean()
|
||||
{
|
||||
$customfield = new CustomField();
|
||||
$customfield->name = "내 호버크라프트는 장어로 가득 차 있어요";
|
||||
$customfield->id = 1337;
|
||||
$this->assertEquals($customfield->convertUnicodeDbSlug(),"_snipeit_nae_hobeokeulapeuteuneun_jang_eolo_gadeug_1337");
|
||||
if (function_exists('transliterator_transliterate')) {
|
||||
$this->assertEquals($customfield->convertUnicodeDbSlug(), "_snipeit_nae_hobeokeulapeuteuneun_jang_eolo_gadeug_1337");
|
||||
} else {
|
||||
$this->assertEquals($customfield->convertUnicodeDbSlug(), "_snipeit_e_ie2ieiises_izieoe_e0e_i0_iziis_1337");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Nordic languages
|
||||
public function testDbNameNonLatinEuro() {
|
||||
$customfield=new CustomField();
|
||||
$customfield->name="Mój poduszkowiec jest pełen węgorzy";
|
||||
public function testDbNameNonLatinEuro()
|
||||
{
|
||||
$customfield = new CustomField();
|
||||
$customfield->name = "Mój poduszkowiec jest pełen węgorzy";
|
||||
$customfield->id = 1337;
|
||||
$this->assertEquals($customfield->convertUnicodeDbSlug(),"_snipeit_moj_poduszkowiec_jest_pelen_wegorzy_1337");
|
||||
if (function_exists('transliterator_transliterate')) {
|
||||
$this->assertEquals($customfield->convertUnicodeDbSlug(), "_snipeit_moj_poduszkowiec_jest_pelen_wegorzy_1337");
|
||||
} else {
|
||||
$this->assertEquals($customfield->convertUnicodeDbSlug(), "_snipeit_ma3j_poduszkowiec_jest_peaen_waegorzy_1337");
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
public function testDbNameTurkish() {
|
||||
$customfield=new CustomField();
|
||||
$customfield->name="Hoverkraftım yılan balığı dolu";
|
||||
public function testDbNameTurkish()
|
||||
{
|
||||
$customfield = new CustomField();
|
||||
$customfield->name = "Hoverkraftım yılan balığı dolu";
|
||||
$customfield->id = 1337;
|
||||
$this->assertEquals($customfield->convertUnicodeDbSlug(),"_snipeit_hoverkraftim_yilan_baligi_dolu_1337");
|
||||
if (function_exists('transliterator_transliterate')) {
|
||||
$this->assertEquals($customfield->convertUnicodeDbSlug(), "_snipeit_hoverkraftim_yilan_baligi_dolu_1337");
|
||||
} else {
|
||||
$this->assertEquals($customfield->convertUnicodeDbSlug(), "_snipeit_hoverkraftaem_yaelan_balaeaeyae_dolu_1337");
|
||||
}
|
||||
}
|
||||
|
||||
public function testDbNameArabic() {
|
||||
public function testDbNameArabic()
|
||||
{
|
||||
$customfield=new CustomField();
|
||||
$customfield->name="حَوّامتي مُمْتِلئة بِأَنْقَلَيْسون";
|
||||
$customfield->id = 1337;
|
||||
$this->assertEquals($customfield->convertUnicodeDbSlug(),"_snipeit_hwamty_mmtlyt_banqlyswn_1337");
|
||||
if (function_exists('transliterator_transliterate')) {
|
||||
$this->assertEquals($customfield->convertUnicodeDbSlug(), "_snipeit_hwamty_mmtlyt_banqlyswn_1337");
|
||||
} else {
|
||||
$this->assertEquals($customfield->convertUnicodeDbSlug(), "_snipeit_ouzuuouoaus_uuuuoauuooc_ououzuuuuzuuzusuo_1337");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -420,10 +420,8 @@ class PermissionsTest extends TestCase
|
|||
$this->actingAs($user);
|
||||
|
||||
foreach ($routes as $route => $response) {
|
||||
// dd($this->get(route($route)));
|
||||
// echo($this->get(route($route))->dump());
|
||||
$this->get($route)
|
||||
->assertResponseStatus($response);
|
||||
->assertStatus($response);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue