Skip to content

Commit 50c9104

Browse files
committed
Merge remote-tracking branch 'origin/develop'
2 parents e2c3386 + 88a84e9 commit 50c9104

File tree

9 files changed

+107
-25
lines changed

9 files changed

+107
-25
lines changed

app/Http/Controllers/Api/AssetMaintenancesController.php

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ public function index(Request $request)
3636
{
3737
$this->authorize('view', Asset::class);
3838

39-
$maintenances = AssetMaintenance::select('asset_maintenances.*')->with('asset', 'asset.model', 'asset.location', 'asset.defaultLoc', 'supplier', 'asset.company', 'admin');
39+
$maintenances = AssetMaintenance::select('asset_maintenances.*')
40+
->with('asset', 'asset.model', 'asset.location', 'asset.defaultLoc', 'supplier', 'asset.company', 'asset.assetstatus', 'admin');
4041

4142
if ($request->filled('search')) {
4243
$maintenances = $maintenances->TextSearch($request->input('search'));
@@ -70,10 +71,13 @@ public function index(Request $request)
7071
'notes',
7172
'asset_tag',
7273
'asset_name',
74+
'serial',
7375
'user_id',
7476
'supplier',
7577
'is_warranty',
78+
'status_label',
7679
];
80+
7781
$order = $request->input('order') === 'asc' ? 'asc' : 'desc';
7882
$sort = in_array($request->input('sort'), $allowed_columns) ? e($request->input('sort')) : 'created_at';
7983

@@ -90,6 +94,12 @@ public function index(Request $request)
9094
case 'asset_name':
9195
$maintenances = $maintenances->OrderByAssetName($order);
9296
break;
97+
case 'serial':
98+
$maintenances = $maintenances->OrderByAssetSerial($order);
99+
break;
100+
case 'status_label':
101+
$maintenances = $maintenances->OrderStatusName($order);
102+
break;
93103
default:
94104
$maintenances = $maintenances->orderBy($sort, $order);
95105
break;

app/Http/Controllers/AssetMaintenancesController.php

Lines changed: 11 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -148,30 +148,20 @@ public function store(Request $request)
148148
*/
149149
public function edit($assetMaintenanceId = null)
150150
{
151+
$this->authorize('update', Asset::class);
152+
// Check if the asset maintenance exists
151153
$this->authorize('update', Asset::class);
152154
// Check if the asset maintenance exists
153155
if (is_null($assetMaintenance = AssetMaintenance::find($assetMaintenanceId))) {
154-
// Redirect to the improvement management page
155-
return redirect()->route('maintenances.index')
156-
->with('error', trans('admin/asset_maintenances/message.not_found'));
157-
} elseif (! $assetMaintenance->asset) {
158-
return redirect()->route('maintenances.index')
159-
->with('error', 'The asset associated with this maintenance does not exist.');
156+
// Redirect to the asset maintenance management page
157+
return redirect()->route('maintenances.index')->with('error', trans('admin/asset_maintenances/message.not_found'));
158+
} elseif ((!$assetMaintenance->asset) || ($assetMaintenance->asset->deleted_at!='')) {
159+
// Redirect to the asset maintenance management page
160+
return redirect()->route('maintenances.index')->with('error', 'asset does not exist');
160161
} elseif (! Company::isCurrentUserHasAccess($assetMaintenance->asset)) {
161162
return static::getInsufficientPermissionsRedirect();
162163
}
163164

164-
if ($assetMaintenance->completion_date == '0000-00-00') {
165-
$assetMaintenance->completion_date = null;
166-
}
167-
168-
if ($assetMaintenance->start_date == '0000-00-00') {
169-
$assetMaintenance->start_date = null;
170-
}
171-
172-
if ($assetMaintenance->cost == '0.00') {
173-
$assetMaintenance->cost = null;
174-
}
175165

176166
// Prepare Improvement Type List
177167
$assetMaintenanceType = [
@@ -203,8 +193,10 @@ public function update(Request $request, $assetMaintenanceId = null)
203193
// Check if the asset maintenance exists
204194
if (is_null($assetMaintenance = AssetMaintenance::find($assetMaintenanceId))) {
205195
// Redirect to the asset maintenance management page
206-
return redirect()->route('maintenances.index')
207-
->with('error', trans('admin/asset_maintenances/message.not_found'));
196+
return redirect()->route('maintenances.index')->with('error', trans('admin/asset_maintenances/message.not_found'));
197+
} elseif ((!$assetMaintenance->asset) || ($assetMaintenance->asset->deleted_at!='')) {
198+
// Redirect to the asset maintenance management page
199+
return redirect()->route('maintenances.index')->with('error', 'asset does not exist');
208200
} elseif (! Company::isCurrentUserHasAccess($assetMaintenance->asset)) {
209201
return static::getInsufficientPermissionsRedirect();
210202
}

app/Http/Transformers/AssetMaintenancesTransformer.php

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,20 @@ public function transformAssetMaintenance(AssetMaintenance $assetmaintenance)
2828
'id' => (int) $assetmaintenance->asset->id,
2929
'name'=> ($assetmaintenance->asset->name) ? e($assetmaintenance->asset->name) : null,
3030
'asset_tag'=> e($assetmaintenance->asset->asset_tag),
31-
31+
'serial'=> e($assetmaintenance->asset->serial),
32+
'deleted_at'=> e($assetmaintenance->asset->deleted_at),
33+
'created_at'=> e($assetmaintenance->asset->created_at),
3234
] : null,
3335
'model' => (($assetmaintenance->asset) && ($assetmaintenance->asset->model)) ? [
3436
'id' => (int) $assetmaintenance->asset->model->id,
3537
'name'=> ($assetmaintenance->asset->model->name) ? e($assetmaintenance->asset->model->name).' '.e($assetmaintenance->asset->model->model_number) : null,
3638
] : null,
39+
'status_label' => ($assetmaintenance->asset->assetstatus) ? [
40+
'id' => (int) $assetmaintenance->asset->assetstatus->id,
41+
'name'=> e($assetmaintenance->asset->assetstatus->name),
42+
'status_type'=> e($assetmaintenance->asset->assetstatus->getStatuslabelType()),
43+
'status_meta' => e($assetmaintenance->asset->present()->statusMeta),
44+
] : null,
3745
'company' => (($assetmaintenance->asset) && ($assetmaintenance->asset->company)) ? [
3846
'id' => (int) $assetmaintenance->asset->company->id,
3947
'name'=> ($assetmaintenance->asset->company->name) ? e($assetmaintenance->asset->company->name) : null,
@@ -64,7 +72,7 @@ public function transformAssetMaintenance(AssetMaintenance $assetmaintenance)
6472
];
6573

6674
$permissions_array['available_actions'] = [
67-
'update' => Gate::allows('update', Asset::class),
75+
'update' => (Gate::allows('update', Asset::class) && ($assetmaintenance->asset->deleted_at=='')) ? true : false,
6876
'delete' => Gate::allows('delete', Asset::class),
6977
];
7078

app/Models/Asset.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1560,7 +1560,7 @@ public function scopeByFilter($query, $filter)
15601560
*
15611561
* In short, this set of statements tells the query builder to ONLY query against an
15621562
* actual field that's being passed if it doesn't meet known relational fields. This
1563-
* allows us to query custom fields directly in the assetsv table
1563+
* allows us to query custom fields directly in the assets table
15641564
* (regardless of their name) and *skip* any fields that we already know can only be
15651565
* searched through relational searches that we do earlier in this method.
15661566
*

app/Models/AssetMaintenance.php

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,17 +62,26 @@ class AssetMaintenance extends Model implements ICompanyableChild
6262
*
6363
* @var array
6464
*/
65-
protected $searchableAttributes = ['title', 'notes', 'asset_maintenance_type', 'cost', 'start_date', 'completion_date'];
65+
protected $searchableAttributes =
66+
[
67+
'title',
68+
'notes',
69+
'asset_maintenance_type',
70+
'cost',
71+
'start_date',
72+
'completion_date'
73+
];
6674

6775
/**
6876
* The relations and their attributes that should be included when searching the model.
6977
*
7078
* @var array
7179
*/
7280
protected $searchableRelations = [
73-
'asset' => ['name', 'asset_tag'],
81+
'asset' => ['name', 'asset_tag', 'serial'],
7482
'asset.model' => ['name', 'model_number'],
7583
'asset.supplier' => ['name'],
84+
'asset.assetstatus' => ['name'],
7685
'supplier' => ['name'],
7786
];
7887

@@ -197,6 +206,7 @@ public function scopeOrderBySupplier($query, $order)
197206
->orderBy('suppliers_maintenances.name', $order);
198207
}
199208

209+
200210
/**
201211
* Query builder scope to order on admin user
202212
*
@@ -239,4 +249,33 @@ public function scopeOrderByAssetName($query, $order)
239249
return $query->leftJoin('assets', 'asset_maintenances.asset_id', '=', 'assets.id')
240250
->orderBy('assets.name', $order);
241251
}
252+
253+
/**
254+
* Query builder scope to order on serial
255+
*
256+
* @param \Illuminate\Database\Query\Builder $query Query builder instance
257+
* @param string $order Order
258+
*
259+
* @return \Illuminate\Database\Query\Builder Modified query builder
260+
*/
261+
public function scopeOrderByAssetSerial($query, $order)
262+
{
263+
return $query->leftJoin('assets', 'asset_maintenances.asset_id', '=', 'assets.id')
264+
->orderBy('assets.serial', $order);
265+
}
266+
267+
/**
268+
* Query builder scope to order on status label name
269+
*
270+
* @param \Illuminate\Database\Query\Builder $query Query builder instance
271+
* @param text $order Order
272+
*
273+
* @return \Illuminate\Database\Query\Builder Modified query builder
274+
*/
275+
public function scopeOrderStatusName($query, $order)
276+
{
277+
return $query->join('assets as maintained_asset', 'asset_maintenances.asset_id', '=', 'maintained_asset.id')
278+
->leftjoin('status_labels as maintained_asset_status', 'maintained_asset_status.id', '=', 'maintained_asset.status_id')
279+
->orderBy('maintained_asset_status.name', $order);
280+
}
242281
}

app/Presenters/AssetMaintenancesPresenter.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,19 @@ public static function dataTableLayout()
4141
'sortable' => true,
4242
'title' => trans('admin/hardware/table.asset_tag'),
4343
'formatter' => 'assetTagLinkFormatter',
44+
], [
45+
'field' => 'serial',
46+
'searchable' => true,
47+
'sortable' => true,
48+
'title' => trans('admin/hardware/table.serial'),
49+
'formatter' => 'assetSerialLinkFormatter',
50+
], [
51+
'field' => 'status_label',
52+
'searchable' => true,
53+
'sortable' => true,
54+
'title' => trans('admin/hardware/table.status'),
55+
'visible' => true,
56+
'formatter' => 'statuslabelsLinkObjFormatter',
4457
], [
4558
'field' => 'model',
4659
'searchable' => true,

resources/lang/en-US/general.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -459,6 +459,7 @@
459459
'no_autoassign_licenses_help' => 'Do not include user for bulk-assigning through the license UI or cli tools.',
460460
'modal_confirm_generic' => 'Are you sure?',
461461
'cannot_be_deleted' => 'This item cannot be deleted',
462+
'cannot_be_edited' => 'This item cannot be edited.',
462463
'undeployable_tooltip' => 'This item cannot be checked out. Check the quantity remaining.',
463464
'serial_number' => 'Serial Number',
464465
'item_notes' => ':item Notes',

resources/views/hardware/view.blade.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -872,11 +872,13 @@
872872

873873

874874
@can('update', $asset)
875+
@if ($asset->deleted_at=='')
875876
<div class="col-md-12" style="padding-top: 5px;">
876877
<a href="{{ route('hardware.edit', $asset->id) }}" style="width: 100%;" class="btn btn-sm btn-primary hidden-print">
877878
{{ trans('admin/hardware/general.edit') }}
878879
</a>
879880
</div>
881+
@endif
880882
@endcan
881883

882884
@can('create', $asset)

resources/views/partials/bootstrap-table.blade.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,10 @@ function genericActionsFormatter(owner_name, element_name) {
296296
297297
if ((row.available_actions) && (row.available_actions.update === true)) {
298298
actions += '<a href="{{ config('app.url') }}/' + dest + '/' + row.id + '/edit" class="actions btn btn-sm btn-warning" data-tooltip="true" title="{{ trans('general.update') }}"><i class="fas fa-pencil-alt" aria-hidden="true"></i><span class="sr-only">{{ trans('general.update') }}</span></a>&nbsp;';
299+
} else {
300+
if ((row.available_actions) && (row.available_actions.update != true)) {
301+
actions += '<span data-tooltip="true" title="{{ trans('general.cannot_be_edited') }}"><a class="btn btn-warning btn-sm disabled" onClick="return false;"><i class="fas fa-pencil-alt"></i></a></span>&nbsp;';
302+
}
299303
}
300304
301305
if ((row.available_actions) && (row.available_actions.delete === true)) {
@@ -623,6 +627,9 @@ function groupsAdminLinkFormatter(value, row) {
623627
624628
function assetTagLinkFormatter(value, row) {
625629
if ((row.asset) && (row.asset.id)) {
630+
if (row.asset.deleted_at!='') {
631+
return '<span style="white-space: nowrap;"><i class="fas fa-times text-danger"></i><span class="sr-only">deleted</span> <del><a href="{{ config('app.url') }}/hardware/' + row.asset.id + '" data-tooltip="true" title="{{ trans('admin/hardware/general.deleted') }}">' + row.asset.asset_tag + '</a></del></span>';
632+
}
626633
return '<a href="{{ config('app.url') }}/hardware/' + row.asset.id + '">' + row.asset.asset_tag + '</a>';
627634
}
628635
return '';
@@ -640,7 +647,17 @@ function assetNameLinkFormatter(value, row) {
640647
if ((row.asset) && (row.asset.name)) {
641648
return '<a href="{{ config('app.url') }}/hardware/' + row.asset.id + '">' + row.asset.name + '</a>';
642649
}
650+
}
643651
652+
function assetSerialLinkFormatter(value, row) {
653+
654+
if ((row.asset) && (row.asset.serial)) {
655+
if (row.asset.deleted_at!='') {
656+
return '<span style="white-space: nowrap;"><i class="fas fa-times text-danger"></i><span class="sr-only">deleted</span> <del><a href="{{ config('app.url') }}/hardware/' + row.asset.id + '" data-tooltip="true" title="{{ trans('admin/hardware/general.deleted') }}">' + row.asset.serial + '</a></del></span>';
657+
}
658+
return '<a href="{{ config('app.url') }}/hardware/' + row.asset.id + '">' + row.asset.serial + '</a>';
659+
}
660+
return '';
644661
}
645662
646663
function trueFalseFormatter(value) {

0 commit comments

Comments
 (0)