diff --git a/app/Http/Controllers/ReportsController.php b/app/Http/Controllers/ReportsController.php index 74d709adca21..ffc769e73793 100644 --- a/app/Http/Controllers/ReportsController.php +++ b/app/Http/Controllers/ReportsController.php @@ -1152,4 +1152,35 @@ protected function getAssetsCheckedOutRequiringAcceptance() $this->getModelsInCategoriesThatRequireAcceptance($this->getCategoriesThatRequireAcceptance()) ); } + + /** + * getAssetsNotAcceptedYet + * + * @return array + * @author Vincent Sposato + * @version v1.0 + */ + protected function getAssetsNotAcceptedYet() + { + $this->authorize('reports.view'); + + return Asset::unaccepted(); + } + + + /** + * Displays EOL report. + * + * @author [A. Rahardianto] [] + * @since [v6.0.3] + * @return View + */ + public function getEOLReport() + { + $this->authorize('reports.view'); + $eol_assets = Asset::orderBy('created_at', 'DESC')->whereNotNull('purchase_date')->get(); + + return view('reports/eol_assets', compact('eol_assets')); + } + } diff --git a/app/Presenters/AssetPresenter.php b/app/Presenters/AssetPresenter.php index f334906c812b..18a11eb9a22d 100644 --- a/app/Presenters/AssetPresenter.php +++ b/app/Presenters/AssetPresenter.php @@ -526,4 +526,62 @@ public function glyph() { return ''; } + + /** + * Returns the EOL date basen on purchase date. + * @author [A. Rahardianto] [] + * @since [v6.0.3] + * @return null|DateTime + */ + public function get_expiry_days() + { + $date = null; + if (($this->purchase_date) && ($this->model->model) && ($this->model->model->eol)) { + $date = date_create($this->purchase_date); + date_add($date, date_interval_create_from_date_string($this->model->model->eol . " " . trans('general.months'))); + } + return $date; + } + + /** + * Returns the days this item until hits EOL. + * @author [A. Rahardianto] [] + * @since [v6.0.3] + * @return false|string + */ + public function days_until_eol_date() + { + $from = date_create(date("Y-m-d")); + $diff = date_diff($from,$this->get_expiry_days()); + + if ($this->get_expiry_status($diff)) + { + $past_prefix = trans('general.obsolete') . ' ('; + $past_suffix = ')'; + } else + { + $past_prefix = ''; + $past_suffix = ''; + } + + return($diff->format($past_prefix . "%y " . trans('general.years') . " %m " . trans('general.months') . " %d " .trans('general.days') . $past_suffix)); + + } + + /** + * get EOL status whether obsolete (in the past already) / not + * @author [A. Rahardianto] [] + * @since [v6.0.3] + * @return true|false + */ + public function get_expiry_status($datediff) + { + $expiry_status = false; + if ($datediff->invert == 1) + { + $expiry_status = true; + } + return $expiry_status; + } + } diff --git a/app/Presenters/DepreciationPresenter.php b/app/Presenters/DepreciationPresenter.php index 2a293a46ffba..f6c76c4da45f 100644 --- a/app/Presenters/DepreciationPresenter.php +++ b/app/Presenters/DepreciationPresenter.php @@ -39,10 +39,10 @@ public static function dataTableLayout() ], [ - "field" => 'depreciation_min', + "field" => 'purchase_date', "searchable" => false, "sortable" => true, - "title" => trans('admin/depreciations/table.depreciation_min'), + "title" => trans('admin/asset/table.purchase_date'), "visible" => true, ], [ diff --git a/app/Presenters/EolAssetPresenter.php b/app/Presenters/EolAssetPresenter.php new file mode 100644 index 000000000000..94cd3e8d0ee4 --- /dev/null +++ b/app/Presenters/EolAssetPresenter.php @@ -0,0 +1,83 @@ + 'name', + 'searchable' => false, + 'sortable' => true, + 'switchable' => true, + 'title' => trans('admin/hardware/form.name'), + 'visible' => true, + ], [ + 'field' => 'asset_tag', + 'searchable' => true, + 'sortable' => true, + 'title' => trans('admin/hardware/table.asset_tag'), + 'visible' => true, + ],[ + 'field' => 'asset_model', + 'searchable' => true, + 'sortable' => true, + 'title' => trans('admin/hardware/table.asset_model'), + 'visible' => true, + ],[ + "field" => 'model_number', + "searchable" => false, + "sortable" => true, + "title" => trans('admin/hardware/table.serial'), + "visible" => true, + ],[ + 'field' => 'purchase_date', + 'searchable' => true, + 'sortable' => true, + 'switchable' => false, + 'title' => trans('general.purchase_date'), + 'visible' => true, + + ],[ + 'field' => 'notes', + 'searchable' => true, + 'sortable' => false, + 'switchable' => false, + 'title' => trans('admin/hardware/form.notes'), + 'visible' => true, + ],[ + 'field' => 'eol_date', + 'searchable' => true, + 'sortable' => true, + 'switchable' => false, + 'title' => trans('admin/hardware/table.eol_date'), + 'visible' => true, + ],[ + 'field' => 'expiry_status', + 'searchable' => true, + 'sortable' => true, + 'switchable' => true, + 'title' => trans('admin/hardware/table.eol_status'), + 'visible' => true, + ],[ + 'field' => 'days_before_eol', + 'searchable' => true, + 'sortable' => true, + 'switchable' => false, + 'title' => trans('admin/hardware/table.eol_duration'), + 'visible' => true, + ], + ]; + + return json_encode($layout); + } +} diff --git a/resources/lang/en/admin/hardware/table.php b/resources/lang/en/admin/hardware/table.php index 6166ba804506..b73af2fe3778 100644 --- a/resources/lang/en/admin/hardware/table.php +++ b/resources/lang/en/admin/hardware/table.php @@ -27,4 +27,7 @@ 'requested_date' => 'Requested Date', 'changed' => 'Changed', 'icon' => 'Icon', + 'eol_date' => 'EOL Date', + 'eol_status' => 'Asset Status', + 'eol_duration' => 'Time to EOL', ]; diff --git a/resources/lang/en/general.php b/resources/lang/en/general.php index 43e9e4fbe29a..267840c884a5 100644 --- a/resources/lang/en/general.php +++ b/resources/lang/en/general.php @@ -368,6 +368,10 @@ 'bulk_soft_delete' =>'Also soft-delete these users. Their asset history will remain intact unless/until you purge deleted records in the Admin Settings.', 'bulk_checkin_delete_success' => 'Your selected users have been deleted and their items have been checked in.', 'bulk_checkin_success' => 'The items for the selected users have been checked in.', - + 'eol_assets_report' => 'EOL Assets Report', + 'obsolete' => 'Obsolete', + 'years' => 'Years', + 'months' => 'Months', + 'days' => 'Days', ]; \ No newline at end of file diff --git a/resources/views/layouts/default.blade.php b/resources/views/layouts/default.blade.php index 2379b1f550bf..8d26522d3ef8 100644 --- a/resources/views/layouts/default.blade.php +++ b/resources/views/layouts/default.blade.php @@ -718,6 +718,11 @@ {{ trans('general.accessory_report') }} +
  • + + {{ trans('general.eol_assets_report') }} + +
  • {{ trans('general.custom_report') }} diff --git a/resources/views/reports/eol_assets.blade.php b/resources/views/reports/eol_assets.blade.php new file mode 100644 index 000000000000..6ac39812140c --- /dev/null +++ b/resources/views/reports/eol_assets.blade.php @@ -0,0 +1,86 @@ +@extends('layouts/default') + +{{-- Page title --}} +@section('title') + {{ trans('general.eol_assets_report') }} + @parent +@stop + + +{{-- Page content --}} +@section('content') +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + @if($eol_assets->count()) + @foreach ($eol_assets as $asset) + @if($asset->present()->get_expiry_days()) + + + + + + + + + + + + @endif + @endforeach + @endif + +
    {{ trans('admin/hardware/form.name') }}){{ trans('admin/hardware/table.asset_tag') }}{{ trans('admin/hardware/table.asset_model') }}{{ trans('admin/hardware/table.serial') }}{{ trans('general.purchase_date') }}{{ trans('admin/hardware/form.notes') }}{{ trans('admin/hardware/table.eol_date') }}{{ trans('admin/hardware/table.eol_status') }}{{ trans('admin/hardware/table.eol_duration') }}
    {{ $asset->name}}{{ $asset->present()->asset_tag}}{{ $asset->model->name}}{{ $asset->model->model_number}}{{ date_format($asset->purchase_date, 'Y-m-d')}}{{ $asset->present()->notes}}{{ ($asset->purchase_date != '') ? $asset->present()->eol_date() : ''}}{{ ($asset->present()->get_expiry_status(date_diff(now(),$asset->present()->get_expiry_days())) != 1) ? 'Active' : 'End of Life'}}{{ $asset->present()->days_until_eol_date()}}
    + + +
    +
    +
    +
    +
    + + + +@stop + +@section('moar_scripts') + @include ('partials.bootstrap-table') + +@stop + + diff --git a/routes/web.php b/routes/web.php index b783c341f727..da07ed45af44 100644 --- a/routes/web.php +++ b/routes/web.php @@ -342,6 +342,10 @@ 'reports/unaccepted_assets/{deleted?}', [ReportsController::class, 'postAssetAcceptanceReport'] )->name('reports/export/unaccepted_assets'); + Route::get( + 'reports/eol_assets', + [ReportsController::class, 'getEOLReport'] + )->name('reports.eol_assets'); }); Route::get(