ReportsController.php
Go to the documentation of this file.
1 <?php
2 namespace App\Http\Controllers;
3 
8 use Carbon\Carbon;
9 use Category;
15 use Input;
20 use Redirect;
22 use App\Models\User;
23 
31 {
32 
40  public function getAccessoryReport()
41  {
42  $accessories = Accessory::orderBy('created_at', 'DESC')->with('company')->get();
43 
44  return View::make('reports/accessories', compact('accessories'));
45  }
46 
56  public function exportAccessoryReport()
57  {
58  $accessories = Accessory::orderBy('created_at', 'DESC')->get();
59 
60  $rows = array();
61  $header = array(
62  trans('admin/accessories/table.title'),
63  trans('admin/accessories/general.accessory_category'),
64  trans('admin/accessories/general.total'),
65  trans('admin/accessories/general.remaining')
66  );
67  $header = array_map('trim', $header);
68  $rows[] = implode($header, ', ');
69 
70  // Row per accessory
71  foreach ($accessories as $accessory) {
72  $row = array();
73  $row[] = e($accessory->accessory_name);
74  $row[] = e($accessory->accessory_category);
75  $row[] = e($accessory->total);
76  $row[] = e($accessory->remaining);
77 
78  $rows[] = implode($row, ',');
79  }
80 
81  $csv = implode($rows, "\n");
82  $response = Response::make($csv, 200);
83  $response->header('Content-Type', 'text/csv');
84  $response->header('Content-disposition', 'attachment;filename=report.csv');
85 
86  return $response;
87  }
88 
96  public function getAssetsReport()
97  {
98  // Grab all the assets
99  $assets = Asset::with(
100  'model',
101  'assigneduser.userLoc',
102  'assetstatus',
103  'defaultLoc',
104  'assetlog',
105  'supplier',
106  'model.manufacturer',
107  'company'
108  )
109  ->orderBy('created_at', 'DESC')
110  ->get();
111 
112  return View::make('reports/asset', compact('assets'));
113  }
114 
122  public function exportAssetReport()
123  {
124  // Grab all the assets
125  $assets = Asset::orderBy('created_at', 'DESC')->get();
126 
127  $rows = [ ];
128 
129  // Create the header row
130  $header = [
131  trans('admin/hardware/table.asset_tag'),
132  trans('admin/hardware/form.manufacturer'),
133  trans('admin/hardware/form.model'),
134  trans('general.model_no'),
135  trans('general.name'),
136  trans('admin/hardware/table.serial'),
137  trans('general.status'),
138  trans('admin/hardware/table.purchase_date'),
139  trans('admin/hardware/table.purchase_cost'),
140  trans('admin/hardware/form.order'),
141  trans('admin/hardware/form.supplier'),
142  trans('admin/hardware/table.checkoutto'),
143  trans('admin/hardware/table.location'),
144  trans('general.notes'),
145  ];
146  $header = array_map('trim', $header);
147  $rows[] = implode($header, ',');
148 
149  // Create a row per asset
150  foreach ($assets as $asset) {
151  $row = [ ];
152  $row[] = e($asset->asset_tag);
153  if ($asset->model->manufacturer) {
154  $row[] = e($asset->model->manufacturer->name);
155  } else {
156  $row[] = '';
157  }
158  $row[] = '"' . e($asset->model->name) . '"';
159  $row[] = '"' . e($asset->model->modelno) . '"';
160  $row[] = e($asset->name);
161  $row[] = e($asset->serial);
162  if ($asset->assetstatus) {
163  $row[] = e($asset->assetstatus->name);
164  } else {
165  $row[] = '';
166  }
167  $row[] = $asset->purchase_date;
168  $row[] = '"' . number_format($asset->purchase_cost, 2) . '"';
169  if ($asset->order_number) {
170  $row[] = e($asset->order_number);
171  } else {
172  $row[] = '';
173  }
174  if ($asset->supplier_id) {
175  $row[] = e($asset->supplier->name);
176  } else {
177  $row[] = '';
178  }
179 
180  if ($asset->assigned_to > 0) {
181  $user = User::find($asset->assigned_to);
182  $row[] = e($user->fullName());
183  } else {
184  $row[] = ''; // Empty string if unassigned
185  }
186 
187  if (( $asset->assigned_to > 0 ) && ( $asset->assigneduser->location_id > 0 )) {
188  $location = Location::find($asset->assigneduser->location_id);
189  if ($location) {
190  $row[] = e($location->name);
191  } else {
192  $row[] = '';
193  }
194  } elseif ($asset->rtd_location_id) {
195  $location = Location::find($asset->rtd_location_id);
196  if ($location->name) {
197  $row[] = e($location->name);
198  } else {
199  $row[] = '';
200  }
201  } else {
202  $row[] = ''; // Empty string if location is not set
203  }
204 
205  if ($asset->notes) {
206  $row[] = '"' . e($asset->notes) . '"';
207  } else {
208  $row[] = '';
209  }
210 
211  $rows[] = implode($row, ',');
212  }
213 
214  // spit out a csv
215  $csv = implode($rows, "\n");
216  $response = Response::make($csv, 200);
217  $response->header('Content-Type', 'text/csv');
218  $response->header('Content-disposition', 'attachment;filename=report.csv');
219 
220  return $response;
221  }
222 
230  public function getDeprecationReport()
231  {
232 
233  // Grab all the assets
234  $assets = Asset::with('model', 'assigneduser', 'assetstatus', 'defaultLoc', 'assetlog', 'company')
235  ->orderBy('created_at', 'DESC')->get();
236 
237  return View::make('reports/depreciation', compact('assets'));
238  }
239 
248  public function exportDeprecationReport()
249  {
250 
251  // Grab all the assets
252  $assets = Asset::with('model', 'assigneduser', 'assetstatus', 'defaultLoc', 'assetlog')
253  ->orderBy('created_at', 'DESC')->get();
254 
255  $csv = \League\Csv\Writer::createFromFileObject(new \SplTempFileObject());
256  $csv->setOutputBOM(Reader::BOM_UTF16_BE);
257 
258  $rows = [ ];
259 
260  // Create the header row
261  $header = [
262  trans('admin/hardware/table.asset_tag'),
263  trans('admin/hardware/table.title'),
264  trans('admin/hardware/table.serial'),
265  trans('admin/hardware/table.checkoutto'),
266  trans('admin/hardware/table.location'),
267  trans('admin/hardware/table.purchase_date'),
268  trans('admin/hardware/table.purchase_cost'),
269  trans('admin/hardware/table.book_value'),
270  trans('admin/hardware/table.diff')
271  ];
272 
273  //we insert the CSV header
274  $csv->insertOne($header);
275 
276  // Create a row per asset
277  foreach ($assets as $asset) {
278  $row = [ ];
279  $row[] = e($asset->asset_tag);
280  $row[] = e($asset->name);
281  $row[] = e($asset->serial);
282 
283  if ($asset->assigned_to > 0) {
284  $user = User::find($asset->assigned_to);
285  $row[] = e($user->fullName());
286  } else {
287  $row[] = ''; // Empty string if unassigned
288  }
289 
290  if (( $asset->assigned_to > 0 ) && ( $asset->assigneduser->location_id > 0 )) {
291  $location = Location::find($asset->assigneduser->location_id);
292  if ($location->city) {
293  $row[] = e($location->city) . ', ' . e($location->state);
294  } elseif ($location->name) {
295  $row[] = e($location->name);
296  } else {
297  $row[] = '';
298  }
299  } else {
300  $row[] = ''; // Empty string if location is not set
301  }
302 
303  if ($asset->assetloc) {
304  $currency = e($asset->assetloc->currency);
305  } else {
306  $currency = e(Setting::first()->default_currency);
307  }
308 
309  $row[] = $asset->purchase_date;
310  $row[] = $currency . number_format($asset->purchase_cost, 2);
311  $row[] = $currency . number_format($asset->getDepreciatedValue(), 2);
312  $row[] = $currency . number_format(( $asset->purchase_cost - $asset->getDepreciatedValue() ), 2);
313  $csv->insertOne($row);
314  }
315 
316  $csv->output('depreciation-report-' . date('Y-m-d') . '.csv');
317  die;
318 
319  }
320 
328  public function getActivityReport()
329  {
330  $log_actions = Actionlog::orderBy('created_at', 'DESC')
331  ->with('adminlog')
332  ->with('accessorylog')
333  ->with('assetlog')
334  ->with('licenselog')
335  ->with('userlog')
336  ->orderBy('created_at', 'DESC')
337  ->get();
338 
339  return View::make('reports/activity', compact('log_actions'));
340  }
341 
349  public function getLicenseReport()
350  {
351 
352  $licenses = License::orderBy('created_at', 'DESC')
353  ->with('company')
354  ->get();
355 
356  return View::make('reports/licenses', compact('licenses'));
357  }
358 
367  public function exportLicenseReport()
368  {
369  $licenses = License::orderBy('created_at', 'DESC')->get();
370 
371  $rows = [ ];
372  $header = [
373  trans('admin/licenses/table.title'),
374  trans('admin/licenses/table.serial'),
375  trans('admin/licenses/form.seats'),
376  trans('admin/licenses/form.remaining_seats'),
377  trans('admin/licenses/form.expiration'),
378  trans('admin/licenses/form.date'),
379  trans('admin/licenses/form.cost')
380  ];
381 
382  $header = array_map('trim', $header);
383  $rows[] = implode($header, ', ');
384 
385  // Row per license
386  foreach ($licenses as $license) {
387  $row = [ ];
388  $row[] = e($license->name);
389  $row[] = e($license->serial);
390  $row[] = e($license->seats);
391  $row[] = $license->remaincount();
392  $row[] = $license->expiration_date;
393  $row[] = $license->purchase_date;
394  $row[] = '"' . number_format($license->purchase_cost, 2) . '"';
395 
396  $rows[] = implode($row, ',');
397  }
398 
399  $csv = implode($rows, "\n");
400  $response = Response::make($csv, 200);
401  $response->header('Content-Type', 'text/csv');
402  $response->header('Content-disposition', 'attachment;filename=report.csv');
403 
404  return $response;
405  }
406 
415  public function getCustomReport()
416  {
417 
418  return View::make('reports/custom');
419  }
420 
429  public function postCustom()
430  {
431  $assets = Asset::orderBy('created_at', 'DESC')->get();
432 
433  $rows = [ ];
434  $header = [ ];
435 
436  if (e(Input::get('asset_name')) == '1') {
437  $header[] = 'Asset Name';
438  }
439  if (e(Input::get('asset_tag')) == '1') {
440  $header[] = 'Asset Tag';
441  }
442  if (e(Input::get('manufacturer')) == '1') {
443  $header[] = 'Manufacturer';
444  }
445  if (e(Input::get('model')) == '1') {
446  $header[] = 'Model';
447  $header[] = 'Model Number';
448  }
449  if (e(Input::get('category')) == '1') {
450  $header[] = 'Category';
451  }
452  if (e(Input::get('serial')) == '1') {
453  $header[] = 'Serial';
454  }
455  if (e(Input::get('purchase_date')) == '1') {
456  $header[] = 'Purchase Date';
457  }
458  if (( e(Input::get('purchase_cost')) == '1' ) && ( e(Input::get('depreciation')) != '1' )) {
459  $header[] = 'Purchase Cost';
460  }
461  if (e(Input::get('order')) == '1') {
462  $header[] = 'Order Number';
463  }
464  if (e(Input::get('supplier')) == '1') {
465  $header[] = 'Supplier';
466  }
467  if (e(Input::get('location')) == '1') {
468  $header[] = 'Location';
469  }
470  if (e(Input::get('assigned_to')) == '1') {
471  $header[] = 'Assigned To';
472  }
473  if (e(Input::get('status')) == '1') {
474  $header[] = 'Status';
475  }
476  if (e(Input::get('warranty')) == '1') {
477  $header[] = 'Warranty';
478  $header[] = 'Warranty Expires';
479  }
480  if (e(Input::get('depreciation')) == '1') {
481  $header[] = 'Purchase Cost';
482  $header[] = 'Value';
483  $header[] = 'Diff';
484  }
485 
486  $header = array_map('trim', $header);
487  $rows[] = implode($header, ',');
488 
489  foreach ($assets as $asset) {
490  $row = [ ];
491  if (e(Input::get('asset_name')) == '1') {
492  $row[] = '"' .e($asset->name) . '"';
493  }
494  if (e(Input::get('asset_tag')) == '1') {
495  $row[] = e($asset->asset_tag);
496  }
497  if (e(Input::get('manufacturer')) == '1') {
498  if ($asset->model->manufacturer) {
499  $row[] = '"' .e($asset->model->manufacturer->name) . '"';
500  } else {
501  $row[] = '';
502  }
503  }
504  if (e(Input::get('model')) == '1') {
505  $row[] = '"' . e($asset->model->name) . '"';
506  $row[] = '"' . e($asset->model->modelno) . '"';
507  }
508  if (e(Input::get('category')) == '1') {
509  $row[] = '"' .e($asset->model->category->name) . '"';
510  }
511 
512  if (e(Input::get('serial')) == '1') {
513  $row[] = e($asset->serial);
514  }
515  if (e(Input::get('purchase_date')) == '1') {
516  $row[] = e($asset->purchase_date);
517  }
518  if (e(Input::get('purchase_cost')) == '1' && ( e(Input::get('depreciation')) != '1' )) {
519  $row[] = '"' . number_format($asset->purchase_cost, 2) . '"';
520  }
521  if (e(Input::get('order')) == '1') {
522  if ($asset->order_number) {
523  $row[] = e($asset->order_number);
524  } else {
525  $row[] = '';
526  }
527  }
528  if (e(Input::get('supplier')) == '1') {
529  if ($asset->supplier_id) {
530  $row[] = '"' .e($asset->supplier->name) . '"';
531  } else {
532  $row[] = '';
533  }
534  }
535  if (e(Input::get('location')) == '1') {
536  $show_loc = '';
537  if (( $asset->assigned_to > 0 ) && ( $asset->assigneduser->location_id !='' )) {
538  $location = Location::find($asset->assigneduser->location_id);
539  if ($location) {
540  $show_loc .= '"' .e($location->name). '"';
541  } else {
542  $show_loc .= 'User location '.$asset->assigneduser->location_id.' is invalid';
543  }
544  } elseif ($asset->rtd_location_id!='') {
545  $location = Location::find($asset->rtd_location_id);
546  if ($location) {
547  $show_loc .= '"' .e($location->name). '"';
548  } else {
549  $show_loc .= 'Default location '.$asset->rtd_location_id.' is invalid';
550  }
551  }
552 
553  $row[] = $show_loc;
554 
555  }
556  if (e(Input::get('assigned_to')) == '1') {
557  if ($asset->assigned_to > 0) {
558  $user = User::find($asset->assigned_to);
559  $row[] = '"' .e($user->fullName()). '"';
560  } else {
561  $row[] = ''; // Empty string if unassigned
562  }
563  }
564  if (e(Input::get('status')) == '1') {
565  if (( $asset->status_id == '0' ) && ( $asset->assigned_to == '0' )) {
566  $row[] = trans('general.ready_to_deploy');
567  } elseif (( $asset->status_id == '' ) && ( $asset->assigned_to == '0' )) {
568  $row[] = trans('general.pending');
569  } elseif ($asset->assetstatus) {
570  $row[] = '"' .e($asset->assetstatus->name). '"';
571  } else {
572  $row[] = '';
573  }
574  }
575  if (e(Input::get('warranty')) == '1') {
576  if ($asset->warranty_months) {
577  $row[] = $asset->warranty_months;
578  $row[] = $asset->warrantee_expires();
579  } else {
580  $row[] = '';
581  $row[] = '';
582  }
583  }
584  if (e(Input::get('depreciation')) == '1') {
585  $depreciation = $asset->getDepreciatedValue();
586  $row[] = '"' . number_format($asset->purchase_cost, 2) . '"';
587  $row[] = '"' . number_format($depreciation, 2) . '"';
588  $row[] = '"' . number_format($asset->purchase_cost - $depreciation, 2) . '"';
589  }
590  $rows[] = implode($row, ',');
591  }
592 
593  // spit out a csv
594  if (array_filter($rows)) {
595  $csv = implode($rows, "\n");
596  $response = Response::make($csv, 200);
597  $response->header('Content-Type', 'text/csv');
598  $response->header('Content-disposition', 'attachment;filename=report.csv');
599 
600  return $response;
601  } else {
602  return Redirect::to("reports/custom")
603  ->with('error', trans('admin/reports/message.error'));
604  }
605  }
606 
614  public function getAssetMaintenancesReport()
615  {
616  // Grab all the improvements
617  $assetMaintenances = AssetMaintenance::with('asset', 'supplier', 'asset.company')
618  ->orderBy('created_at', 'DESC')
619  ->get();
620 
621  return View::make('reports/asset_maintenances', compact('assetMaintenances'));
622 
623  }
624 
633  {
634  // Grab all the improvements
635  $assetMaintenances = AssetMaintenance::with('asset', 'supplier')
636  ->orderBy('created_at', 'DESC')
637  ->get();
638 
639  $rows = [ ];
640 
641  $header = [
642  trans('admin/asset_maintenances/table.asset_name'),
643  trans('admin/asset_maintenances/table.supplier_name'),
644  trans('admin/asset_maintenances/form.asset_maintenance_type'),
645  trans('admin/asset_maintenances/form.title'),
646  trans('admin/asset_maintenances/form.start_date'),
647  trans('admin/asset_maintenances/form.completion_date'),
648  trans('admin/asset_maintenances/form.asset_maintenance_time'),
649  trans('admin/asset_maintenances/form.cost')
650  ];
651 
652  $header = array_map('trim', $header);
653  $rows[] = implode($header, ',');
654 
655  foreach ($assetMaintenances as $assetMaintenance) {
656  $row = [ ];
657  $row[] = str_replace(',', '', e($assetMaintenance->asset->name));
658  $row[] = str_replace(',', '', e($assetMaintenance->supplier->name));
659  $row[] = e($assetMaintenance->improvement_type);
660  $row[] = e($assetMaintenance->title);
661  $row[] = e($assetMaintenance->start_date);
662  $row[] = e($assetMaintenance->completion_date);
663  if (is_null($assetMaintenance->asset_maintenance_time)) {
664  $improvementTime = intval(Carbon::now()
665  ->diffInDays(Carbon::parse($assetMaintenance->start_date)));
666  } else {
667  $improvementTime = intval($assetMaintenance->asset_maintenance_time);
668  }
669  $row[] = $improvementTime;
670  $row[] = trans('general.currency') . number_format($assetMaintenance->cost, 2);
671  $rows[] = implode($row, ',');
672  }
673 
674  // spit out a csv
675  $csv = implode($rows, "\n");
676  $response = Response::make($csv, 200);
677  $response->header('Content-Type', 'text/csv');
678  $response->header('Content-disposition', 'attachment;filename=report.csv');
679 
680  return $response;
681  }
682 
690  public function getAssetAcceptanceReport()
691  {
692  $assetsForReport = Asset::notYetAccepted()->with('company')->get();
693 
694  return View::make('reports/unaccepted_assets', compact('assetsForReport'));
695  }
696 
704  public function exportAssetAcceptanceReport()
705  {
706 
707  // Grab all the improvements
708  $assetsForReport = Actionlog::whereIn('id', $this->getAssetsNotAcceptedYet())
709  ->get();
710 
711  $rows = [ ];
712 
713  $header = [
714  trans('general.category'),
715  trans('admin/hardware/form.model'),
716  trans('admin/hardware/form.name'),
717  trans('admin/hardware/table.asset_tag'),
718  trans('admin/hardware/table.checkoutto'),
719  ];
720 
721  $header = array_map('trim', $header);
722  $rows[] = implode($header, ',');
723 
724  foreach ($assetsForReport as $assetItem) {
725  $row = [ ];
726  $row[] = str_replace(',', '', e($assetItem->assetlog->model->category->name));
727  $row[] = str_replace(',', '', e($assetItem->assetlog->model->name));
728  $row[] = str_replace(',', '', e($assetItem->assetlog->showAssetName()));
729  $row[] = str_replace(',', '', e($assetItem->assetlog->asset_tag));
730  $row[] = str_replace(',', '', e($assetItem->assetlog->assigneduser->fullName()));
731  $rows[] = implode($row, ',');
732  }
733 
734  // spit out a csv
735  $csv = implode($rows, "\n");
736  $response = Response::make($csv, 200);
737  $response->header('Content-Type', 'text/csv');
738  $response->header('Content-disposition', 'attachment;filename=report.csv');
739 
740  return $response;
741 
742  }
743 
753  protected function getCheckedOutAssetsRequiringAcceptance($modelsInCategoriesThatRequireAcceptance)
754  {
755  $assets = Asset::deployed()
756  ->inModelList($modelsInCategoriesThatRequireAcceptance)
757  ->select('id')
758  ->get()
759  ->toArray();
760 
761  return array_pluck($assets, 'id');
762  }
763 
772  protected function getModelsInCategoriesThatRequireAcceptance($assetCategoriesRequiringAcceptance)
773  {
774 
775  return array_pluck(Model::inCategory($assetCategoriesRequiringAcceptance)
776  ->select('id')
777  ->get()
778  ->toArray(), 'id');
779  }
780 
789  {
790 
791  return array_pluck(Category::requiresAcceptance()
792  ->select('id')
793  ->get()
794  ->toArray(), 'id');
795  }
796 
805  {
806 
809  );
810  }
811 
819  protected function getAssetsNotAcceptedYet()
820  {
821  return Asset::unaccepted();
822  }
823 }
getLicenseReport()
Displays license report.
exportAssetAcceptanceReport()
exportAssetAcceptanceReport
exportDeprecationReport()
Exports the depreciations to CSV.
getAssetMaintenancesReport()
getImprovementsReport
getCategoriesThatRequireAcceptance()
getCategoriesThatRequireAcceptance
getAssetsCheckedOutRequiringAcceptance()
getAssetsCheckedOutRequiringAcceptance
getCustomReport()
Returns a form that allows the user to generate a custom CSV report.
exportAccessoryReport()
Exports the accessories to CSV.
getAssetAcceptanceReport()
getAssetAcceptanceReport
This controller handles all actions related to Reports for the Snipe-IT Asset Management application...
exportLicenseReport()
Exports the licenses to CSV.
exportAssetReport()
Exports the assets to CSV.
getDeprecationReport()
Show depreciation report for assets.
getModelsInCategoriesThatRequireAcceptance($assetCategoriesRequiringAcceptance)
getModelsInCategoriesThatRequireAcceptance
getAccessoryReport()
Returns a view that displaysthe accessories report.
postCustom()
Exports the custom report to CSV.
getCheckedOutAssetsRequiringAcceptance($modelsInCategoriesThatRequireAcceptance)
getCheckedOutAssetsRequiringAcceptance
getActivityReport()
Displays activity report.
exportAssetMaintenancesReport()
exportImprovementsReport
getAssetsNotAcceptedYet()
getAssetsNotAcceptedYet