Skip to content

Commit 27e8995

Browse files
authored
Merge pull request #18722 from grokability/improve-maintenance-report
Improved asset maintenance report
2 parents da2dd79 + e2406e3 commit 27e8995

4 files changed

Lines changed: 216 additions & 24 deletions

File tree

app/Http/Controllers/Api/MaintenancesController.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,10 @@ public function index(Request $request): JsonResponse|array
126126
$total = $maintenances->count();
127127
$maintenances = $maintenances->skip($offset)->take($limit)->get();
128128

129+
if (request()->input('format') == 'flat') {
130+
return (new MaintenancesTransformer)->transformMaintenancesFlat($maintenances, $total);
131+
}
132+
129133
return (new MaintenancesTransformer)->transformMaintenances($maintenances, $total);
130134

131135
}

app/Http/Transformers/MaintenancesTransformer.php

Lines changed: 52 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ public function transformMaintenances(Collection $maintenances, $total)
1717
foreach ($maintenances as $assetmaintenance) {
1818
$array[] = self::transformMaintenance($assetmaintenance);
1919
}
20-
2120
return (new DatatablesTransformer)->transformDatatables($array, $total);
2221
}
2322

@@ -72,7 +71,7 @@ public function transformMaintenance(Maintenance $assetmaintenance)
7271
'cost' => Helper::formatCurrencyOutput($assetmaintenance->cost),
7372
'asset_maintenance_type' => e($assetmaintenance->asset_maintenance_type),
7473
'start_date' => Helper::getFormattedDateObject($assetmaintenance->start_date, 'date'),
75-
'asset_maintenance_time' => $assetmaintenance->asset_maintenance_time,
74+
'asset_maintenance_time' => (int) $assetmaintenance->asset_maintenance_time,
7675
'completion_date' => Helper::getFormattedDateObject($assetmaintenance->completion_date, 'date'),
7776
'user_id' => ($assetmaintenance->adminuser) ? [
7877
'id' => $assetmaintenance->adminuser->id,
@@ -84,7 +83,57 @@ public function transformMaintenance(Maintenance $assetmaintenance)
8483
] : null,
8584
'created_at' => Helper::getFormattedDateObject($assetmaintenance->created_at, 'datetime'),
8685
'updated_at' => Helper::getFormattedDateObject($assetmaintenance->updated_at, 'datetime'),
87-
'is_warranty' => $assetmaintenance->is_warranty,
86+
'is_warranty' => (bool) $assetmaintenance->is_warranty,
87+
88+
];
89+
90+
$permissions_array['available_actions'] = [
91+
'update' => (Gate::allows('update', Asset::class) && ((($assetmaintenance->asset) && $assetmaintenance->asset->deleted_at == ''))) ? true : false,
92+
'delete' => Gate::allows('delete', Asset::class),
93+
];
94+
95+
$array += $permissions_array;
96+
97+
return $array;
98+
}
99+
100+
public function transformMaintenancesFlat(Collection $maintenances, $total)
101+
{
102+
$array = [];
103+
foreach ($maintenances as $assetmaintenance) {
104+
$array[] = self::transformMaintenanceForReport($assetmaintenance);
105+
}
106+
return (new DatatablesTransformer)->transformDatatables($array, $total);
107+
}
108+
109+
public function transformMaintenanceForReport(Maintenance $assetmaintenance)
110+
{
111+
$array = [
112+
'id' => (int) $assetmaintenance->id,
113+
'asset_name' => ($assetmaintenance->asset->name) ? e($assetmaintenance->asset->name) : null,
114+
'asset_tag' => ($assetmaintenance->asset->asset_tag) ? e($assetmaintenance->asset->asset_tag) : null,
115+
'serial' => ($assetmaintenance->asset?->serial) ? e($assetmaintenance->asset->serial) : null,
116+
'image' => ($assetmaintenance->image != '') ? Storage::disk('public')->url('maintenances/' . e($assetmaintenance->image)) : null,
117+
'model' => ($assetmaintenance->asset?->model?->name) ? e($assetmaintenance->asset?->model?->name) : null,
118+
'model_number' => ($assetmaintenance->asset?->model?->model_number) ? e($assetmaintenance->asset?->model?->model_number) : null,
119+
'status_label' => ($assetmaintenance->asset?->assetstatus) ? e($assetmaintenance->asset?->assetstatus?->display_name) : null,
120+
'assigned_to' => ($assetmaintenance->asset?->assigned) ? e($assetmaintenance->asset?->assigned?->display_name) : null,
121+
'company' => ($assetmaintenance->asset?->company?->name) ? e($assetmaintenance->asset->company->name) : null,
122+
'name' => ($assetmaintenance->name) ? e($assetmaintenance->name) : null,
123+
'title' => ($assetmaintenance->name) ? e($assetmaintenance->name) : null, // legacy to not change the shape of the API
124+
'location' => (($assetmaintenance->asset) && ($assetmaintenance->asset->location)) ? e($assetmaintenance->asset->location->name) : null,
125+
'notes' => ($assetmaintenance->notes) ? Helper::parseEscapedMarkedownInline($assetmaintenance->notes) : null,
126+
'supplier' => ($assetmaintenance->supplier) ? e($assetmaintenance->supplier?->name) : null,
127+
'url' => ($assetmaintenance->url) ? e($assetmaintenance->url) : null,
128+
'cost' => Helper::formatCurrencyOutput($assetmaintenance->cost),
129+
'asset_maintenance_type' => e($assetmaintenance->asset_maintenance_type),
130+
'start_date' => Helper::getFormattedDateObject($assetmaintenance->start_date, 'date'),
131+
'asset_maintenance_time' => (int) $assetmaintenance->asset_maintenance_time,
132+
'completion_date' => Helper::getFormattedDateObject($assetmaintenance->completion_date, 'date'),
133+
'created_by' => ($assetmaintenance->adminuser) ? e($assetmaintenance->adminuser->display_name) : null,
134+
'created_at' => Helper::getFormattedDateObject($assetmaintenance->created_at, 'datetime'),
135+
'updated_at' => Helper::getFormattedDateObject($assetmaintenance->updated_at, 'datetime'),
136+
'is_warranty' => (bool) $assetmaintenance->is_warranty,
88137

89138
];
90139

app/Presenters/MaintenancesPresenter.php

Lines changed: 157 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,4 +187,161 @@ public static function dataTableLayout()
187187

188188
return json_encode($layout);
189189
}
190+
191+
public static function reportLayout()
192+
{
193+
$layout = [
194+
[
195+
'field' => 'company',
196+
'searchable' => true,
197+
'sortable' => true,
198+
'switchable' => true,
199+
'title' => trans('admin/companies/table.title'),
200+
'visible' => false,
201+
],
202+
[
203+
'field' => 'asset_tag',
204+
'searchable' => true,
205+
'sortable' => true,
206+
'title' => trans('admin/hardware/table.asset_tag'),
207+
],
208+
[
209+
'field' => 'asset_name',
210+
'searchable' => true,
211+
'sortable' => true,
212+
'title' => trans('admin/maintenances/table.asset_name'),
213+
],
214+
[
215+
'field' => 'name',
216+
'searchable' => true,
217+
'sortable' => true,
218+
'switchable' => true,
219+
'title' => trans('general.name'),
220+
'visible' => true,
221+
],
222+
[
223+
'field' => 'image',
224+
'searchable' => false,
225+
'sortable' => true,
226+
'switchable' => true,
227+
'title' => trans('general.image'),
228+
'visible' => true,
229+
'formatter' => 'imageFormatter',
230+
],
231+
[
232+
'field' => 'serial',
233+
'searchable' => true,
234+
'sortable' => true,
235+
'title' => trans('admin/hardware/table.serial'),
236+
], [
237+
'field' => 'status_label',
238+
'searchable' => true,
239+
'sortable' => true,
240+
'title' => trans('admin/hardware/table.status'),
241+
'visible' => true,
242+
], [
243+
'field' => 'model',
244+
'searchable' => true,
245+
'sortable' => true,
246+
'switchable' => true,
247+
'title' => trans('admin/hardware/form.model'),
248+
'visible' => false,
249+
], [
250+
'field' => 'model_number',
251+
'searchable' => true,
252+
'sortable' => true,
253+
'switchable' => true,
254+
'title' => trans('general.model_no'),
255+
'visible' => true,
256+
], [
257+
'field' => 'assigned_to',
258+
'searchable' => true,
259+
'sortable' => true,
260+
'title' => trans('admin/hardware/form.checkedout_to'),
261+
'visible' => true,
262+
],
263+
[
264+
'field' => 'supplier',
265+
'searchable' => true,
266+
'sortable' => true,
267+
'switchable' => true,
268+
'title' => trans('general.supplier'),
269+
'visible' => false,
270+
], [
271+
'field' => 'location',
272+
'searchable' => true,
273+
'sortable' => true,
274+
'title' => trans('general.location'),
275+
], [
276+
'field' => 'asset_maintenance_type',
277+
'searchable' => true,
278+
'sortable' => true,
279+
'title' => trans('admin/maintenances/form.asset_maintenance_type'),
280+
], [
281+
'field' => 'start_date',
282+
'searchable' => true,
283+
'sortable' => true,
284+
'title' => trans('admin/maintenances/form.start_date'),
285+
'formatter' => 'dateDisplayFormatter',
286+
], [
287+
'field' => 'completion_date',
288+
'searchable' => true,
289+
'sortable' => true,
290+
'title' => trans('admin/maintenances/form.completion_date'),
291+
'formatter' => 'dateDisplayFormatter',
292+
], [
293+
'field' => 'asset_maintenance_time',
294+
'searchable' => true,
295+
'sortable' => true,
296+
'title' => trans('admin/maintenances/form.asset_maintenance_time'),
297+
], [
298+
'field' => 'url',
299+
'searchable' => true,
300+
'sortable' => true,
301+
'title' => trans('general.url'),
302+
'formatter' => 'externalLinkFormatter',
303+
], [
304+
'field' => 'notes',
305+
'searchable' => true,
306+
'sortable' => true,
307+
'title' => trans('admin/maintenances/form.notes'),
308+
], [
309+
'field' => 'is_warranty',
310+
'searchable' => true,
311+
'sortable' => true,
312+
'title' => trans('admin/maintenances/table.is_warranty'),
313+
'formatter' => 'trueFalseFormatter',
314+
], [
315+
'field' => 'cost',
316+
'searchable' => true,
317+
'sortable' => true,
318+
'title' => trans('admin/maintenances/form.cost'),
319+
'class' => 'text-right',
320+
], [
321+
'field' => 'created_by',
322+
'searchable' => false,
323+
'sortable' => true,
324+
'title' => trans('general.created_by'),
325+
'visible' => false,
326+
], [
327+
'field' => 'created_at',
328+
'searchable' => true,
329+
'sortable' => true,
330+
'switchable' => true,
331+
'title' => trans('general.created_at'),
332+
'visible' => false,
333+
'formatter' => 'dateDisplayFormatter',
334+
], [
335+
'field' => 'updated_at',
336+
'searchable' => true,
337+
'sortable' => true,
338+
'switchable' => true,
339+
'title' => trans('general.updated_at'),
340+
'visible' => false,
341+
'formatter' => 'dateDisplayFormatter',
342+
],
343+
];
344+
345+
return json_encode($layout);
346+
}
190347
}

resources/views/reports/maintenances.blade.php

Lines changed: 3 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -12,38 +12,20 @@
1212
<x-box>
1313
<table
1414
data-cookie-id-table="maintenancesReport"
15+
data-columns="{{ \App\Presenters\MaintenancesPresenter::reportLayout() }}"
1516
data-show-footer="true"
1617
data-id-table="maintenancesReport"
1718
data-side-pagination="server"
1819
data-sort-order="asc"
1920
id="maintenancesReport"
2021
data-advanced-search="false"
21-
data-url="{{route('api.maintenances.index') }}"
22+
data-url="{{route('api.maintenances.index', ['format' => 'flat']) }}"
2223
class="table table-striped snipe-table"
2324
data-export-options='{
2425
"fileName": "maintenance-report-{{ date('Y-m-d') }}",
2526
"ignoreColumn": ["actions","image","change","checkbox","checkincheckout","icon"]
2627
}'>
27-
<thead>
28-
<tr>
29-
<th data-field="company" data-sortable="false" data-visible="false" data-formatter="companiesLinkObjFormatter">{{ trans('admin/companies/table.title') }}</th>
30-
<th data-sortable="true" data-field="id" data-visible="false">{{ trans('general.id') }}</th>
31-
<th data-sortable="true" data-field="asset_tag" data-formatter="assetTagLinkFormatter" data-visible="false">{{ trans('general.asset_tag') }}</th>
32-
<th data-sortable="false" data-field="asset_name" data-formatter="assetNameLinkFormatter">{{ trans('admin/maintenances/table.asset_name') }}</th>
33-
<th data-sortable="false" data-field="supplier" data-formatter="suppliersLinkObjFormatter">{{ trans('general.supplier') }}</th>
34-
<th data-searchable="true" data-sortable="true" data-field="asset_maintenance_type">{{ trans('admin/maintenances/form.asset_maintenance_type') }}</th>
35-
<th data-searchable="true" data-sortable="true" data-field="title">{{ trans('admin/maintenances/form.title') }}</th>
36-
<th data-searchable="true" data-sortable="false" data-field="start_date" data-formatter="dateDisplayFormatter">{{ trans('admin/maintenances/form.start_date') }}</th>
37-
<th data-searchable="true" data-sortable="true" data-field="completion_date" data-formatter="dateDisplayFormatter">{{ trans('admin/maintenances/form.completion_date') }}</th>
38-
<th data-searchable="true" data-sortable="true" data-field="asset_maintenance_time">{{ trans('admin/maintenances/form.asset_maintenance_time') }}</th>
39-
<th data-searchable="true" data-sortable="true" data-field="cost" class="text-right" data-footer-formatter="sumFormatter">{{ trans('admin/maintenances/form.cost') }}</th>
40-
<th data-sortable="true" data-field="location" data-formatter="deployedLocationFormatter" data-visible="false">{{ trans('general.location') }}</th>
41-
<th data-sortable="true" data-field="rtd_location" data-formatter="deployedLocationFormatter" data-visible="false">{{ trans('admin/hardware/form.default_location') }}</th>
42-
<th data-searchable="true" data-sortable="true" data-field="is_warranty" data-formatter="trueFalseFormatter">{{ trans('admin/maintenances/table.is_warranty') }}</th>
43-
<th data-searchable="true" data-sortable="true" data-field="user_id" data-formatter="usersLinkObjFormatter">{{ trans('general.created_by') }}</th>
44-
<th data-searchable="true" data-sortable="true" data-field="notes" data-visible="false">{{ trans('admin/maintenances/form.notes') }}</th>
45-
</tr>
46-
</thead>
28+
4729
</table>
4830
</x-box>
4931
</x-container>

0 commit comments

Comments
 (0)