Merge remote-tracking branch 'origin/develop'
This commit is contained in:
commit
f76c68f0ed
4 changed files with 430 additions and 407 deletions
|
@ -576,26 +576,20 @@ class AssetsController extends Controller
|
|||
* @since [v1.0]
|
||||
* @return \Illuminate\Contracts\View\View
|
||||
*/
|
||||
public function getClone($assetId = null)
|
||||
public function getClone(Asset $asset)
|
||||
{
|
||||
// Check if the asset exists
|
||||
if (is_null($asset_to_clone = Asset::find($assetId))) {
|
||||
// Redirect to the asset management page
|
||||
return redirect()->route('hardware.index')->with('error', trans('admin/hardware/message.does_not_exist'));
|
||||
}
|
||||
|
||||
$this->authorize('create', $asset_to_clone);
|
||||
|
||||
$asset = clone $asset_to_clone;
|
||||
$asset->id = null;
|
||||
$asset->asset_tag = '';
|
||||
$asset->serial = '';
|
||||
$asset->assigned_to = '';
|
||||
$this->authorize('create', $asset);
|
||||
$cloned = clone $asset;
|
||||
$cloned->id = null;
|
||||
$cloned->asset_tag = '';
|
||||
$cloned->serial = '';
|
||||
$cloned->assigned_to = '';
|
||||
$cloned->deleted_at = '';
|
||||
|
||||
return view('hardware/edit')
|
||||
->with('statuslabel_list', Helper::statusLabelList())
|
||||
->with('statuslabel_types', Helper::statusTypeList())
|
||||
->with('item', $asset);
|
||||
->with('item', $cloned);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
{{-- Page content --}}
|
||||
@section('content')
|
||||
|
||||
|
||||
<div class="row">
|
||||
|
||||
@if (!$asset->model)
|
||||
|
@ -36,22 +37,9 @@
|
|||
</div>
|
||||
@endif
|
||||
|
||||
@if ($asset->deleted_at!='')
|
||||
<div class="col-md-12">
|
||||
<div class="alert alert-danger">
|
||||
<i class="fas fa-exclamation-triangle faa-pulse animated" aria-hidden="true"></i>
|
||||
<strong>{{ trans('general.notification_warning') }} </strong>
|
||||
{{ trans('general.asset_deleted_warning') }}
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<div class="col-md-12">
|
||||
|
||||
|
||||
<!-- Custom Tabs -->
|
||||
<div class="nav-tabs-custom">
|
||||
<ul class="nav nav-tabs">
|
||||
<ul class="nav nav-tabs hidden-print">
|
||||
|
||||
<li class="active">
|
||||
<a href="#details" data-toggle="tab">
|
||||
|
@ -129,6 +117,7 @@
|
|||
</a>
|
||||
</li>
|
||||
|
||||
@can('view', $asset->model)
|
||||
<li>
|
||||
<a href="#modelfiles" data-toggle="tab">
|
||||
<span class="hidden-lg hidden-md">
|
||||
|
@ -140,6 +129,7 @@
|
|||
</span>
|
||||
</a>
|
||||
</li>
|
||||
@endcan
|
||||
|
||||
|
||||
@can('update', \App\Models\Asset::class)
|
||||
|
@ -151,24 +141,180 @@
|
|||
</li>
|
||||
@endcan
|
||||
|
||||
|
||||
</ul>
|
||||
|
||||
<div class="tab-content">
|
||||
|
||||
<div class="tab-pane fade in active" id="details">
|
||||
<div class="row">
|
||||
<div class="col-md-8">
|
||||
|
||||
<!-- start striped rows -->
|
||||
<div class="container row-striped">
|
||||
@if ($asset->deleted_at!='')
|
||||
<div class="col-md-12">
|
||||
<div class="callout callout-warning">
|
||||
<i class="icon fas fa-exclamation-triangle"></i>
|
||||
{{ trans('admin/users/message.user_deleted_warning') }}
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<!-- Start button column -->
|
||||
<div class="col-md-3 col-xs-12 col-sm-push-9">
|
||||
|
||||
<div class="col-md-12 text-center">
|
||||
@if (($asset->image) || (($asset->model) && ($asset->model->image!='')))
|
||||
<div class="text-center col-md-12" style="padding-bottom: 15px;">
|
||||
<a href="{{ ($asset->getImageUrl()) ? $asset->getImageUrl() : null }}" data-toggle="lightbox">
|
||||
<img src="{{ ($asset->getImageUrl()) ? $asset->getImageUrl() : null }}" class="assetimg img-responsive" alt="{{ $asset->getDisplayNameAttribute() }}">
|
||||
</a>
|
||||
</div>
|
||||
@else
|
||||
<!-- generic image goes here -->
|
||||
@endif
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
@if (($asset->assetstatus) && ($asset->assetstatus->deployable=='1'))
|
||||
@if (($asset->assigned_to != '') && ($asset->deleted_at==''))
|
||||
@can('checkin', \App\Models\Asset::class)
|
||||
<div class="col-md-12">
|
||||
<span class="tooltip-wrapper"{!! (!$asset->model ? ' data-tooltip="true" title="'.trans('admin/hardware/general.model_invalid_fix').'"' : '') !!}>
|
||||
<a role="button" href="{{ route('hardware.checkin.create', $asset->id) }}" class="btn btn-sm btn-primary btn-block hidden-print{{ (!$asset->model ? ' disabled' : '') }}">
|
||||
{{ trans('admin/hardware/general.checkin') }}
|
||||
</a>
|
||||
</span>
|
||||
</div>
|
||||
@endcan
|
||||
@elseif (($asset->assigned_to == '') && ($asset->deleted_at==''))
|
||||
@can('checkout', \App\Models\Asset::class)
|
||||
<div class="col-md-12" style="padding-top: 5px;">
|
||||
<span class="tooltip-wrapper"{!! (!$asset->model ? ' data-tooltip="true" title="'.trans('admin/hardware/general.model_invalid_fix').'"' : '') !!}>
|
||||
<a href="{{ route('hardware.checkout.create', $asset->id) }}" class="btn btn-sm btn-primary btn-block hidden-print{{ (!$asset->model ? ' disabled' : '') }}">
|
||||
{{ trans('admin/hardware/general.checkout') }}
|
||||
</a>
|
||||
</span>
|
||||
</div>
|
||||
@endcan
|
||||
@endif
|
||||
@endif
|
||||
|
||||
@if ($asset->deleted_at=='')
|
||||
@can('update', $asset)
|
||||
<div class="col-md-12" style="padding-top: 5px;">
|
||||
<a href="{{ route('hardware.edit', $asset->id) }}" class="btn btn-sm btn-primary btn-block hidden-print">
|
||||
{{ trans('admin/hardware/general.edit') }}
|
||||
</a>
|
||||
</div>
|
||||
@endcan
|
||||
|
||||
@can('audit', \App\Models\Asset::class)
|
||||
<div class="col-md-12" style="padding-top: 5px;">
|
||||
<span class="tooltip-wrapper"{!! (!$asset->model ? ' data-tooltip="true" title="'.trans('admin/hardware/general.model_invalid_fix').'"' : '') !!}>
|
||||
<a href="{{ route('asset.audit.create', $asset->id) }}" class="btn btn-sm btn-primary btn-block hidden-print{{ (!$asset->model ? ' disabled' : '') }}">
|
||||
{{ trans('general.audit') }}
|
||||
</a>
|
||||
</span>
|
||||
</div>
|
||||
@endcan
|
||||
@endif
|
||||
|
||||
@can('create', $asset)
|
||||
<div class="col-md-12" style="padding-top: 5px;">
|
||||
<a href="{{ route('clone/hardware', $asset->id) }}" class="btn btn-sm btn-primary btn-block hidden-print">
|
||||
{{ trans('admin/hardware/general.clone') }}
|
||||
</a>
|
||||
</div>
|
||||
@endcan
|
||||
|
||||
@can('delete', $asset)
|
||||
<div class="col-md-12" style="padding-top: 30px; padding-bottom: 30px;">
|
||||
@if ($asset->deleted_at=='')
|
||||
<button class="btn btn-sm btn-block btn-danger delete-asset" data-toggle="modal" data-title="{{ trans('general.delete') }}" data-content="{{ trans('general.sure_to_delete_var', ['item' => $asset->asset_tag]) }}" data-target="#dataConfirmModal">{{ trans('general.delete') }}
|
||||
</button>
|
||||
<span class="sr-only">{{ trans('general.delete') }}</span>
|
||||
@else
|
||||
<form method="POST" action="{{ route('restore/hardware', ['assetId' => $asset->id]) }}">
|
||||
@csrf
|
||||
<button class="btn btn-sm btn-warning btn-block">{{ trans('general.restore') }}</button>
|
||||
</form>
|
||||
@endif
|
||||
</div>
|
||||
@endcan
|
||||
|
||||
@if (($asset->assignedTo) && ($asset->deleted_at==''))
|
||||
<div class="col-md-12" style="text-align: left">
|
||||
<h2>
|
||||
{{ trans('admin/hardware/form.checkedout_to') }}
|
||||
</h2>
|
||||
<p>
|
||||
@if (($asset->checkedOutToUser()) && ($asset->assignedTo->present()->gravatar()))
|
||||
<img src="{{ $asset->assignedTo->present()->gravatar() }}" class="user-image-inline" alt="{{ $asset->assignedTo->present()->fullName() }}">
|
||||
@endif
|
||||
</p>
|
||||
{!! $asset->assignedTo->present()->glyph() . ' ' .$asset->assignedTo->present()->nameUrl() !!}
|
||||
|
||||
|
||||
<ul class="list-unstyled" style="line-height: 25px;">
|
||||
@if ((isset($asset->assignedTo->email)) && ($asset->assignedTo->email!=''))
|
||||
<li>
|
||||
<i class="far fa-envelope" aria-hidden="true"></i>
|
||||
<a href="mailto:{{ $asset->assignedTo->email }}">{{ $asset->assignedTo->email }}</a>
|
||||
</li>
|
||||
@endif
|
||||
|
||||
@if ((isset($asset->assignedTo)) && ($asset->assignedTo->phone!=''))
|
||||
<li>
|
||||
<i class="fas fa-phone" aria-hidden="true"></i>
|
||||
<a href="tel:{{ $asset->assignedTo->phone }}">{{ $asset->assignedTo->phone }}</a>
|
||||
</li>
|
||||
@endif
|
||||
|
||||
@if((isset($asset->assignedTo)) && ($asset->assignedTo->department))
|
||||
<li>{{ trans('admin/hardware/general.user_department') }}: {{ $asset->assignedTo->department->name}}</li>
|
||||
@endif
|
||||
|
||||
@if (isset($asset->location))
|
||||
<li><i class="fas fa-map-marker-alt" aria-hidden="true"></i> {{ $asset->location->name }}</li>
|
||||
<li>{{ $asset->location->address }}
|
||||
@if ($asset->location->address2!='')
|
||||
{{ $asset->location->address2 }}
|
||||
@endif
|
||||
</li>
|
||||
|
||||
<li>{{ $asset->location->city }}
|
||||
@if (($asset->location->city!='') && ($asset->location->state!=''))
|
||||
,
|
||||
@endif
|
||||
{{ $asset->location->state }} {{ $asset->location->zip }}
|
||||
</li>
|
||||
@endif
|
||||
<li>
|
||||
<i class="fas fa-calendar"></i> {{ trans('admin/hardware/form.checkout_date') }}: {{ Helper::getFormattedDateObject($asset->last_checkout, 'date', false) }}
|
||||
</li>
|
||||
@if (isset($asset->expected_checkin))
|
||||
<li>
|
||||
<i class="fas fa-calendar"></i> {{ trans('admin/hardware/form.expected_checkin') }}: {{ Helper::getFormattedDateObject($asset->expected_checkin, 'date', false) }}
|
||||
</li>
|
||||
@endif
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@endif
|
||||
<br><br>
|
||||
</div>
|
||||
|
||||
<!-- End button column -->
|
||||
|
||||
<div class="col-md-9 col-xs-12 col-sm-pull-3">
|
||||
|
||||
<div class="row-new-striped">
|
||||
|
||||
|
||||
@if ($asset->deleted_at!='')
|
||||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
<div class="col-md-3">
|
||||
<span class="text-danger"><strong>{{ trans('general.deleted') }}</strong></span>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="col-md-9">
|
||||
{{ \App\Helpers\Helper::getFormattedDateObject($asset->deleted_at, 'date', false) }}
|
||||
|
||||
</div>
|
||||
|
@ -180,10 +326,10 @@
|
|||
@if ($asset->assetstatus)
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
<div class="col-md-3">
|
||||
<strong>{{ trans('general.status') }}</strong>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="col-md-9">
|
||||
@if (($asset->assignedTo) && ($asset->deleted_at==''))
|
||||
<i class="fas fa-circle text-blue"></i>
|
||||
{{ $asset->assetstatus->name }}
|
||||
|
@ -211,10 +357,10 @@
|
|||
|
||||
@if ($asset->company)
|
||||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
<div class="col-md-3">
|
||||
<strong>{{ trans('general.company') }}</strong>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="col-md-9">
|
||||
<a href="{{ url('/companies/' . $asset->company->id) }}">{{ $asset->company->name }}</a>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -222,10 +368,10 @@
|
|||
|
||||
@if ($asset->name)
|
||||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
<div class="col-md-3">
|
||||
<strong>{{ trans('admin/hardware/form.name') }}</strong>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="col-md-9">
|
||||
{{ $asset->name }}
|
||||
</div>
|
||||
</div>
|
||||
|
@ -233,10 +379,10 @@
|
|||
|
||||
@if ($asset->serial)
|
||||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
<div class="col-md-3">
|
||||
<strong>{{ trans('admin/hardware/form.serial') }}</strong>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="col-md-9">
|
||||
<span class="js-copy">{{ $asset->serial }}</span>
|
||||
|
||||
<i class="fa-regular fa-clipboard js-copy-link" data-clipboard-target=".js-copy" aria-hidden="true" data-tooltip="true" data-placement="top" title="{{ trans('general.copy_to_clipboard') }}">
|
||||
|
@ -248,12 +394,12 @@
|
|||
|
||||
@if ((isset($audit_log)) && ($audit_log->created_at))
|
||||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
<div class="col-md-3">
|
||||
<strong>
|
||||
{{ trans('general.last_audit') }}
|
||||
</strong>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="col-md-9">
|
||||
{!! $asset->checkInvalidNextAuditDate() ? '<i class="fas fa-exclamation-triangle text-orange" aria-hidden="true"></i>' : '' !!}
|
||||
{{ Helper::getFormattedDateObject($audit_log->created_at, 'date', false) }}
|
||||
@if ($audit_log->user)
|
||||
|
@ -266,12 +412,12 @@
|
|||
|
||||
@if ($asset->next_audit_date)
|
||||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
<div class="col-md-3">
|
||||
<strong>
|
||||
{{ trans('general.next_audit_date') }}
|
||||
</strong>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="col-md-9">
|
||||
{!! $asset->checkInvalidNextAuditDate() ? '<i class="fas fa-exclamation-triangle text-orange" aria-hidden="true"></i>' : '' !!}
|
||||
{{ Helper::getFormattedDateObject($asset->next_audit_date, 'date', false) }}
|
||||
</div>
|
||||
|
@ -280,12 +426,12 @@
|
|||
|
||||
@if (($asset->model) && ($asset->model->manufacturer))
|
||||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
<div class="col-md-3">
|
||||
<strong>
|
||||
{{ trans('admin/hardware/form.manufacturer') }}
|
||||
</strong>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="col-md-9">
|
||||
<ul class="list-unstyled">
|
||||
@can('view', \App\Models\Manufacturer::class)
|
||||
|
||||
|
@ -353,12 +499,12 @@
|
|||
@endif
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
<div class="col-md-3">
|
||||
<strong>
|
||||
{{ trans('general.category') }}
|
||||
</strong>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="col-md-9">
|
||||
@if (($asset->model) && ($asset->model->category))
|
||||
|
||||
@can('view', \App\Models\Category::class)
|
||||
|
@ -377,12 +523,12 @@
|
|||
|
||||
@if ($asset->model)
|
||||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
<div class="col-md-3">
|
||||
<strong>
|
||||
{{ trans('admin/hardware/form.model') }}
|
||||
</strong>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="col-md-9">
|
||||
@if ($asset->model)
|
||||
|
||||
@can('view', \App\Models\AssetModel::class)
|
||||
|
@ -399,22 +545,22 @@
|
|||
@endif
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
<div class="col-md-3">
|
||||
<strong>
|
||||
{{ trans('admin/models/table.modelnumber') }}
|
||||
</strong>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="col-md-9">
|
||||
{{ ($asset->model) ? $asset->model->model_number : ''}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- byod -->
|
||||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
<div class="col-md-3">
|
||||
<strong>{{ trans('general.byod') }}</strong>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="col-md-9">
|
||||
{!! ($asset->byod=='1') ? '<i class="fas fa-check text-success" aria-hidden="true"></i> '.trans('general.yes') : '<i class="fas fa-times text-danger" aria-hidden="true"></i> '.trans('general.no') !!}
|
||||
</div>
|
||||
</div>
|
||||
|
@ -422,12 +568,12 @@
|
|||
@if (($asset->model) && ($asset->model->fieldset))
|
||||
@foreach($asset->model->fieldset->fields as $field)
|
||||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
<div class="col-md-3">
|
||||
<strong>
|
||||
{{ $field->name }}
|
||||
</strong>
|
||||
</div>
|
||||
<div class="col-md-6{{ (($field->format=='URL') && ($asset->{$field->db_column_name()}!='')) ? ' ellipsis': '' }}">
|
||||
<div class="col-md-9{{ (($field->format=='URL') && ($asset->{$field->db_column_name()}!='')) ? ' ellipsis': '' }}">
|
||||
@if (($field->field_encrypted=='1') && ($asset->{$field->db_column_name()}!=''))
|
||||
<i class="fas fa-lock" data-tooltip="true" data-placement="top" title="{{ trans('admin/custom_fields/general.value_encrypted') }}" onclick="showHideEncValue(this)" id="text-{{ $field->id }}"></i>
|
||||
@endif
|
||||
|
@ -480,12 +626,12 @@
|
|||
|
||||
@if ($asset->purchase_date)
|
||||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
<div class="col-md-3">
|
||||
<strong>
|
||||
{{ trans('admin/hardware/form.date') }}
|
||||
</strong>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="col-md-9">
|
||||
{{ Helper::getFormattedDateObject($asset->purchase_date, 'date', false) }}
|
||||
-
|
||||
{{ Carbon::parse($asset->purchase_date)->diff(Carbon::now())->format('%y years, %m months and %d days')}}
|
||||
|
@ -496,12 +642,12 @@
|
|||
|
||||
@if ($asset->purchase_cost)
|
||||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
<div class="col-md-3">
|
||||
<strong>
|
||||
{{ trans('admin/hardware/form.cost') }}
|
||||
</strong>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="col-md-9">
|
||||
@if (($asset->id) && ($asset->location))
|
||||
{{ $asset->location->currency }}
|
||||
@elseif (($asset->id) && ($asset->location))
|
||||
|
@ -516,12 +662,12 @@
|
|||
@endif
|
||||
@if(($asset->components->count() > 0) && ($asset->purchase_cost))
|
||||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
<div class="col-md-3">
|
||||
<strong>
|
||||
{{ trans('admin/hardware/table.components_cost') }}
|
||||
</strong>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="col-md-9">
|
||||
@if (($asset->id) && ($asset->location))
|
||||
{{ $asset->location->currency }}
|
||||
@elseif (($asset->id) && ($asset->location))
|
||||
|
@ -535,12 +681,12 @@
|
|||
@endif
|
||||
@if (($asset->model) && ($asset->depreciation) && ($asset->purchase_date))
|
||||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
<div class="col-md-3">
|
||||
<strong>
|
||||
{{ trans('admin/hardware/table.current_value') }}
|
||||
</strong>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="col-md-9">
|
||||
@if (($asset->id) && ($asset->location))
|
||||
{{ $asset->location->currency }}
|
||||
@elseif (($asset->id) && ($asset->location))
|
||||
|
@ -556,12 +702,12 @@
|
|||
@endif
|
||||
@if ($asset->order_number)
|
||||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
<div class="col-md-3">
|
||||
<strong>
|
||||
{{ trans('general.order_number') }}
|
||||
</strong>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="col-md-9">
|
||||
<a href="{{ route('hardware.index', ['order_number' => $asset->order_number]) }}">#{{ $asset->order_number }}</a>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -569,12 +715,12 @@
|
|||
|
||||
@if ($asset->supplier)
|
||||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
<div class="col-md-3">
|
||||
<strong>
|
||||
{{ trans('general.supplier') }}
|
||||
</strong>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="col-md-9">
|
||||
@can ('superuser')
|
||||
<a href="{{ route('suppliers.show', $asset->supplier_id) }}">
|
||||
{{ $asset->supplier->name }}
|
||||
|
@ -589,12 +735,12 @@
|
|||
|
||||
@if ($asset->warranty_months)
|
||||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
<div class="col-md-3">
|
||||
<strong>
|
||||
{{ trans('admin/hardware/form.warranty') }}
|
||||
</strong>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="col-md-9">
|
||||
{{ $asset->warranty_months }}
|
||||
{{ trans('admin/hardware/form.months') }}
|
||||
|
||||
|
@ -607,7 +753,7 @@
|
|||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
<div class="col-md-3">
|
||||
<strong>
|
||||
{{ trans('admin/hardware/form.warranty_expires') }}
|
||||
@if ($asset->purchase_date)
|
||||
|
@ -616,7 +762,7 @@
|
|||
|
||||
</strong>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="col-md-9">
|
||||
@if ($asset->purchase_date)
|
||||
{{ Helper::getFormattedDateObject($asset->present()->warranty_expires(), 'date', false) }}
|
||||
-
|
||||
|
@ -631,24 +777,24 @@
|
|||
|
||||
@if (($asset->model) && ($asset->depreciation))
|
||||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
<div class="col-md-3">
|
||||
<strong>
|
||||
{{ trans('general.depreciation') }}
|
||||
</strong>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="col-md-9">
|
||||
{{ $asset->depreciation->name }}
|
||||
({{ $asset->depreciation->months }}
|
||||
{{ trans('admin/hardware/form.months') }})
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
<div class="col-md-3">
|
||||
<strong>
|
||||
{{ trans('admin/hardware/form.fully_depreciated') }}
|
||||
</strong>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="col-md-9">
|
||||
@if ($asset->purchase_date)
|
||||
{{ Helper::getFormattedDateObject($asset->depreciated_date()->format('Y-m-d'), 'date', false) }}
|
||||
-
|
||||
|
@ -663,12 +809,12 @@
|
|||
|
||||
@if (($asset->asset_eol_date) && ($asset->purchase_date))
|
||||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
<div class="col-md-3">
|
||||
<strong>
|
||||
{{ trans('admin/hardware/form.eol_rate') }}
|
||||
</strong>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="col-md-9">
|
||||
{{ Carbon::parse($asset->asset_eol_date)->diffInMonths($asset->purchase_date) }}
|
||||
{{ trans('admin/hardware/form.months') }}
|
||||
|
||||
|
@ -677,7 +823,7 @@
|
|||
@endif
|
||||
@if ($asset->asset_eol_date)
|
||||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
<div class="col-md-3">
|
||||
<strong>
|
||||
{{ trans('admin/hardware/form.eol_date') }}
|
||||
@if ($asset->purchase_date)
|
||||
|
@ -685,7 +831,7 @@
|
|||
@endif
|
||||
</strong>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="col-md-9">
|
||||
@if ($asset->asset_eol_date)
|
||||
{{ Helper::getFormattedDateObject($asset->asset_eol_date, 'date', false) }}
|
||||
-
|
||||
|
@ -708,24 +854,24 @@
|
|||
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
<div class="col-md-3">
|
||||
<strong>
|
||||
{{ trans('admin/hardware/form.notes') }}
|
||||
</strong>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="col-md-9">
|
||||
{!! nl2br(Helper::parseEscapedMarkedownInline($asset->notes)) !!}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@if ($asset->location)
|
||||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
<div class="col-md-3">
|
||||
<strong>
|
||||
{{ trans('general.location') }}
|
||||
</strong>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="col-md-9">
|
||||
@can('superuser')
|
||||
<a href="{{ route('locations.show', ['location' => $asset->location->id]) }}">
|
||||
{{ $asset->location->name }}
|
||||
|
@ -739,12 +885,12 @@
|
|||
|
||||
@if ($asset->defaultLoc)
|
||||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
<div class="col-md-3">
|
||||
<strong>
|
||||
{{ trans('admin/hardware/form.default_location') }}
|
||||
</strong>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="col-md-9">
|
||||
@can('superuser')
|
||||
<a href="{{ route('locations.show', ['location' => $asset->defaultLoc->id]) }}">
|
||||
{{ $asset->defaultLoc->name }}
|
||||
|
@ -758,12 +904,12 @@
|
|||
|
||||
@if ($asset->created_at!='')
|
||||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
<div class="col-md-3">
|
||||
<strong>
|
||||
{{ trans('general.created_at') }}
|
||||
</strong>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="col-md-9">
|
||||
{{ Helper::getFormattedDateObject($asset->created_at, 'datetime', false) }}
|
||||
</div>
|
||||
</div>
|
||||
|
@ -771,36 +917,36 @@
|
|||
|
||||
@if ($asset->updated_at!='')
|
||||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
<div class="col-md-3">
|
||||
<strong>
|
||||
{{ trans('general.updated_at') }}
|
||||
</strong>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="col-md-9">
|
||||
{{ Helper::getFormattedDateObject($asset->updated_at, 'datetime', false) }}
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
@if ($asset->last_checkout!='')
|
||||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
<div class="col-md-3">
|
||||
<strong>
|
||||
{{ trans('admin/hardware/table.checkout_date') }}
|
||||
</strong>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="col-md-9">
|
||||
{{ Helper::getFormattedDateObject($asset->last_checkout, 'datetime', false) }}
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
@if ($asset->expected_checkin!='')
|
||||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
<div class="col-md-3">
|
||||
<strong>
|
||||
{{ trans('admin/hardware/form.expected_checkin') }}
|
||||
</strong>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="col-md-9">
|
||||
{{ Helper::getFormattedDateObject($asset->expected_checkin, 'date', false) }}
|
||||
</div>
|
||||
</div>
|
||||
|
@ -808,12 +954,12 @@
|
|||
|
||||
@if ($asset->last_checkin!='')
|
||||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
<div class="col-md-3">
|
||||
<strong>
|
||||
{{ trans('admin/hardware/table.last_checkin_date') }}
|
||||
</strong>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="col-md-9">
|
||||
{{ Helper::getFormattedDateObject($asset->last_checkin, 'datetime', false) }}
|
||||
</div>
|
||||
</div>
|
||||
|
@ -822,46 +968,46 @@
|
|||
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
<div class="col-md-3">
|
||||
<strong>
|
||||
{{ trans('general.checkouts_count') }}
|
||||
</strong>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="col-md-9">
|
||||
{{ ($asset->checkouts) ? (int) $asset->checkouts->count() : '0' }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
<div class="col-md-3">
|
||||
<strong>
|
||||
{{ trans('general.checkins_count') }}
|
||||
</strong>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="col-md-9">
|
||||
{{ ($asset->checkins) ? (int) $asset->checkins->count() : '0' }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
<div class="col-md-3">
|
||||
<strong>
|
||||
{{ trans('general.user_requests_count') }}
|
||||
</strong>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="col-md-9">
|
||||
{{ ($asset->userRequests) ? (int) $asset->userRequests->count() : '0' }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
<div class="col-md-3">
|
||||
<strong>
|
||||
Labels
|
||||
</strong>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="col-md-9">
|
||||
{{ Form::open([
|
||||
'method' => 'POST',
|
||||
'route' => ['hardware/bulkedit'],
|
||||
|
@ -875,162 +1021,11 @@
|
|||
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- end row-striped -->
|
||||
|
||||
</div><!-- /col-md-8 -->
|
||||
|
||||
<div class="col-md-4">
|
||||
|
||||
@if (($asset->image) || (($asset->model) && ($asset->model->image!='')))
|
||||
<div class="text-center col-md-12" style="padding-bottom: 15px;">
|
||||
<a href="{{ ($asset->getImageUrl()) ? $asset->getImageUrl() : null }}" data-toggle="lightbox">
|
||||
<img src="{{ ($asset->getImageUrl()) ? $asset->getImageUrl() : null }}" class="assetimg img-responsive" alt="{{ $asset->getDisplayNameAttribute() }}">
|
||||
</a>
|
||||
</div>
|
||||
@else
|
||||
<!-- generic image goes here -->
|
||||
@endif
|
||||
|
||||
<!-- Start side button column -->
|
||||
|
||||
@if (($asset->assetstatus) && ($asset->assetstatus->deployable=='1'))
|
||||
@if (($asset->assigned_to != '') && ($asset->deleted_at==''))
|
||||
@can('checkin', \App\Models\Asset::class)
|
||||
<div class="col-md-12">
|
||||
<span class="tooltip-wrapper"{!! (!$asset->model ? ' data-tooltip="true" title="'.trans('admin/hardware/general.model_invalid_fix').'"' : '') !!}>
|
||||
<a role="button" href="{{ route('hardware.checkin.create', $asset->id) }}" class="btn btn-sm btn-primary btn-block hidden-print{{ (!$asset->model ? ' disabled' : '') }}">
|
||||
{{ trans('admin/hardware/general.checkin') }}
|
||||
</a>
|
||||
</span>
|
||||
</div>
|
||||
@endcan
|
||||
@elseif (($asset->assigned_to == '') && ($asset->deleted_at==''))
|
||||
@can('checkout', \App\Models\Asset::class)
|
||||
<div class="col-md-12" style="padding-top: 5px;">
|
||||
<span class="tooltip-wrapper"{!! (!$asset->model ? ' data-tooltip="true" title="'.trans('admin/hardware/general.model_invalid_fix').'"' : '') !!}>
|
||||
<a href="{{ route('hardware.checkout.create', $asset->id) }}" class="btn btn-sm btn-primary btn-block hidden-print{{ (!$asset->model ? ' disabled' : '') }}">
|
||||
{{ trans('admin/hardware/general.checkout') }}
|
||||
</a>
|
||||
</span>
|
||||
</div>
|
||||
@endcan
|
||||
@endif
|
||||
@endif
|
||||
|
||||
|
||||
@can('update', $asset)
|
||||
@if ($asset->deleted_at=='')
|
||||
<div class="col-md-12" style="padding-top: 5px;">
|
||||
<a href="{{ route('hardware.edit', $asset->id) }}" class="btn btn-sm btn-primary btn-block hidden-print">
|
||||
{{ trans('admin/hardware/general.edit') }}
|
||||
</a>
|
||||
</div>
|
||||
@endif
|
||||
@endcan
|
||||
|
||||
@can('create', $asset)
|
||||
<div class="col-md-12" style="padding-top: 5px;">
|
||||
<a href="{{ route('clone/hardware', $asset->id) }}" class="btn btn-sm btn-primary btn-block hidden-print">
|
||||
{{ trans('admin/hardware/general.clone') }}
|
||||
</a>
|
||||
</div>
|
||||
@endcan
|
||||
|
||||
@can('audit', \App\Models\Asset::class)
|
||||
<div class="col-md-12" style="padding-top: 5px;">
|
||||
<span class="tooltip-wrapper"{!! (!$asset->model ? ' data-tooltip="true" title="'.trans('admin/hardware/general.model_invalid_fix').'"' : '') !!}>
|
||||
<a href="{{ route('asset.audit.create', $asset->id) }}" class="btn btn-sm btn-primary btn-block hidden-print{{ (!$asset->model ? ' disabled' : '') }}">
|
||||
{{ trans('general.audit') }}
|
||||
</a>
|
||||
</span>
|
||||
</div>
|
||||
@endcan
|
||||
|
||||
@can('delete', $asset)
|
||||
<div class="col-md-12" style="padding-top: 30px; padding-bottom: 30px;">
|
||||
@if ($asset->deleted_at=='')
|
||||
<button class="btn btn-sm btn-block btn-danger delete-asset" data-toggle="modal" data-title="{{ trans('general.delete') }}" data-content="{{ trans('general.sure_to_delete_var', ['item' => $asset->asset_tag]) }}" data-target="#dataConfirmModal">{{ trans('general.delete') }}
|
||||
</button>
|
||||
<span class="sr-only">{{ trans('general.delete') }}</span>
|
||||
@else
|
||||
<form method="POST" action="{{ route('restore/hardware', ['assetId' => $asset->id]) }}">
|
||||
@csrf
|
||||
<button class="btn btn-sm btn-warning btn-block">{{ trans('general.restore') }}</button>
|
||||
</form>
|
||||
@endif
|
||||
</div>
|
||||
@endcan
|
||||
|
||||
@if (($asset->assignedTo) && ($asset->deleted_at==''))
|
||||
<div style="text-align: left">
|
||||
<h2>
|
||||
{{ trans('admin/hardware/form.checkedout_to') }}
|
||||
</h2>
|
||||
<p>
|
||||
@if (($asset->checkedOutToUser()) && ($asset->assignedTo->present()->gravatar()))
|
||||
<img src="{{ $asset->assignedTo->present()->gravatar() }}" class="user-image-inline" alt="{{ $asset->assignedTo->present()->fullName() }}">
|
||||
@endif
|
||||
</p>
|
||||
{!! $asset->assignedTo->present()->glyph() . ' ' .$asset->assignedTo->present()->nameUrl() !!}
|
||||
</p>
|
||||
|
||||
<ul class="list-unstyled" style="line-height: 25px;">
|
||||
@if ((isset($asset->assignedTo->email)) && ($asset->assignedTo->email!=''))
|
||||
<li>
|
||||
<i class="far fa-envelope" aria-hidden="true"></i>
|
||||
<a href="mailto:{{ $asset->assignedTo->email }}">{{ $asset->assignedTo->email }}</a>
|
||||
</li>
|
||||
@endif
|
||||
|
||||
@if ((isset($asset->assignedTo)) && ($asset->assignedTo->phone!=''))
|
||||
<li>
|
||||
<i class="fas fa-phone" aria-hidden="true"></i>
|
||||
<a href="tel:{{ $asset->assignedTo->phone }}">{{ $asset->assignedTo->phone }}</a>
|
||||
</li>
|
||||
@endif
|
||||
|
||||
@if((isset($asset->assignedTo)) && ($asset->assignedTo->department))
|
||||
<li>{{ trans('admin/hardware/general.user_department') }}: {{ $asset->assignedTo->department->name}}</li>
|
||||
@endif
|
||||
|
||||
@if (isset($asset->location))
|
||||
<li><i class="fas fa-map-marker-alt" aria-hidden="true"></i> {{ $asset->location->name }}</li>
|
||||
<li>{{ $asset->location->address }}
|
||||
@if ($asset->location->address2!='')
|
||||
{{ $asset->location->address2 }}
|
||||
@endif
|
||||
</li>
|
||||
|
||||
<li>{{ $asset->location->city }}
|
||||
@if (($asset->location->city!='') && ($asset->location->state!=''))
|
||||
,
|
||||
@endif
|
||||
{{ $asset->location->state }} {{ $asset->location->zip }}
|
||||
</li>
|
||||
@endif
|
||||
<li>
|
||||
<i class="fas fa-calendar"></i> {{ trans('admin/hardware/form.checkout_date') }}: {{ Helper::getFormattedDateObject($asset->last_checkout, 'date', false) }}
|
||||
</li>
|
||||
@if (isset($asset->expected_checkin))
|
||||
<li>
|
||||
<i class="fas fa-calendar"></i> {{ trans('admin/hardware/form.expected_checkin') }}: {{ Helper::getFormattedDateObject($asset->expected_checkin, 'date', false) }}
|
||||
</li>
|
||||
@endif
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@endif
|
||||
|
||||
@if ($snipeSettings->qr_code=='1')
|
||||
<div class="col-md-12" style="padding-top: 15px;">
|
||||
<img src="{{ config('app.url') }}/hardware/{{ $asset->id }}/qr_code" class="img-thumbnail pull-right" style="height: 100px; width: 100px; margin-right: 10px;" alt="QR code for {{ $asset->getDisplayNameAttribute() }}">
|
||||
</div>
|
||||
@endif
|
||||
|
||||
</div> <!-- div.col-md-4 -->
|
||||
</div><!-- /row -->
|
||||
</div><!-- /.tab-pane asset details -->
|
||||
|
||||
</div> <!--/end striped container-->
|
||||
</div> <!-- end col-md-9 -->
|
||||
</div> <!--/.row-->
|
||||
</div><!-- /.tab-pane -->
|
||||
|
||||
<div class="tab-pane fade" id="software">
|
||||
<div class="row">
|
||||
|
@ -1386,6 +1381,7 @@
|
|||
</div> <!-- /.row -->
|
||||
</div> <!-- /.tab-pane files -->
|
||||
|
||||
@can('view', $asset->model)
|
||||
<div class="tab-pane fade" id="modelfiles">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
|
@ -1487,18 +1483,17 @@
|
|||
</div> <!-- /.col-md-12 -->
|
||||
</div> <!-- /.row -->
|
||||
</div> <!-- /.tab-pane files -->
|
||||
</div> <!-- /. tab-content -->
|
||||
</div> <!-- /.nav-tabs-custom -->
|
||||
</div> <!-- /. col-md-12 -->
|
||||
</div> <!-- /. row -->
|
||||
@endcan
|
||||
</div><!-- /.tab-content -->
|
||||
</div><!-- nav-tabs-custom -->
|
||||
</div>
|
||||
|
||||
@can('update', \App\Models\Asset::class)
|
||||
@include ('modals.upload-file', ['item_type' => 'asset', 'item_id' => $asset->id])
|
||||
@endcan
|
||||
|
||||
@stop
|
||||
|
||||
@section('moar_scripts')
|
||||
@section('moar_scripts')
|
||||
<script>
|
||||
|
||||
$('#dataConfirmModal').on('show.bs.modal', function (event) {
|
||||
|
|
|
@ -78,17 +78,14 @@ Route::group(
|
|||
[AssetsController::class, 'getAssetBySerial']
|
||||
)->where('any', '.*')->name('findbyserial/hardware');
|
||||
|
||||
Route::get('{assetId}/clone',
|
||||
Route::get('{asset}/clone',
|
||||
[AssetsController::class, 'getClone']
|
||||
)->name('clone/hardware');
|
||||
)->name('clone/hardware')->withTrashed();
|
||||
|
||||
Route::get('{assetId}/label',
|
||||
[AssetsController::class, 'getLabel']
|
||||
)->name('label/hardware');
|
||||
|
||||
Route::post('{assetId}/clone',
|
||||
[AssetsController::class, 'postCreate']
|
||||
);
|
||||
|
||||
Route::get('{assetId}/checkout',
|
||||
[AssetCheckoutController::class, 'create']
|
||||
|
|
37
tests/Feature/Assets/Ui/CloneAssetTest.php
Normal file
37
tests/Feature/Assets/Ui/CloneAssetTest.php
Normal file
|
@ -0,0 +1,37 @@
|
|||
<?php
|
||||
|
||||
namespace Feature\Assets\Ui;
|
||||
|
||||
use App\Models\Asset;
|
||||
use App\Models\User;
|
||||
use Tests\TestCase;
|
||||
|
||||
class CloneAssetTest extends TestCase
|
||||
{
|
||||
public function testPermissionRequiredToCreateAssetModel()
|
||||
{
|
||||
$asset = Asset::factory()->create();
|
||||
$this->actingAs(User::factory()->create())
|
||||
->get(route('clone/hardware', $asset))
|
||||
->assertForbidden();
|
||||
}
|
||||
|
||||
public function testPageCanBeAccessed(): void
|
||||
{
|
||||
$asset = Asset::factory()->create();
|
||||
$response = $this->actingAs(User::factory()->createAssets()->create())
|
||||
->get(route('clone/hardware', $asset));
|
||||
$response->assertStatus(200);
|
||||
}
|
||||
|
||||
public function testAssetCanBeCloned()
|
||||
{
|
||||
$asset_to_clone = Asset::factory()->create(['name'=>'Asset to clone']);
|
||||
$this->actingAs(User::factory()->createAssets()->create())
|
||||
->get(route('clone/hardware', $asset_to_clone))
|
||||
->assertOk()
|
||||
->assertSee([
|
||||
'Asset to clone'
|
||||
], false);
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue