From e1c4eb747d9150e3e60bbe0daa3763acf542c8e6 Mon Sep 17 00:00:00 2001 From: Dampfklon Date: Mon, 3 May 2021 21:06:12 +0200 Subject: [PATCH] Unaccepted Assets Report Actions (send reminder, delete) added Unaccepted Assets Export fixed --- app/Http/Controllers/ReportsController.php | 95 ++++++++++++++++--- resources/lang/en/admin/reports/general.php | 7 +- resources/lang/en/general.php | 1 + .../views/reports/unaccepted_assets.blade.php | 21 ++-- routes/web.php | 8 ++ 5 files changed, 111 insertions(+), 21 deletions(-) diff --git a/app/Http/Controllers/ReportsController.php b/app/Http/Controllers/ReportsController.php index 4b92634b4d6b..e2ccf7ff2014 100644 --- a/app/Http/Controllers/ReportsController.php +++ b/app/Http/Controllers/ReportsController.php @@ -11,8 +11,10 @@ use App\Models\Depreciation; use App\Models\License; use App\Models\Setting; +use App\Notifications\CheckoutAssetNotification; use Carbon\Carbon; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Notification; use Illuminate\Support\Facades\Response; use Illuminate\Support\Facades\View; use Input; @@ -929,6 +931,7 @@ public function exportAssetMaintenancesReport() * getAssetAcceptanceReport * * @return mixed + * @throws \Illuminate\Auth\Access\AuthorizationException * @author Vincent Sposato * @version v1.0 */ @@ -939,20 +942,78 @@ public function getAssetAcceptanceReport() /** * Get all assets with pending checkout acceptances */ - - $acceptances = CheckoutAcceptance::pending()->get(); + $acceptances = CheckoutAcceptance::pending()->with(['assignedTo', 'checkoutable.assignedTo', 'checkoutable.model'])->get(); $assetsForReport = $acceptances ->filter(function($acceptance) { return $acceptance->checkoutable_type == 'App\Models\Asset'; }) ->map(function($acceptance) { - return $acceptance->checkoutable; + return ['assetItem' => $acceptance->checkoutable, 'acceptance' => $acceptance]; }); return view('reports/unaccepted_assets', compact('assetsForReport')); } + /** + * sentAssetAcceptanceReminder + * + * @param integer|null $acceptanceId + * @return \Illuminate\Http\RedirectResponse + * @throws \Illuminate\Auth\Access\AuthorizationException + * @version v1.0 + */ + public function sentAssetAcceptanceReminder($acceptanceId = null) + { + $this->authorize('reports.view'); + + if (!$acceptance = CheckoutAcceptance::pending()->find($acceptanceId)) { + // Redirect to the unaccepted assets report page with error + return redirect()->route('reports/unaccepted_assets')->with('error', trans('general.bad_data')); + } + $assetItem = $acceptance->checkoutable; + + $logItem = $assetItem->checkouts()->where('created_at', '=', $acceptance->created_at)->get()[0]; + + if(!$assetItem->assignedTo->locale){ + Notification::locale(Setting::getSettings()->locale)->send( + $assetItem->assignedTo, + new CheckoutAssetNotification($assetItem, $assetItem->assignedTo, $logItem->user, $acceptance, $logItem->note) + ); + } else { + Notification::send( + $assetItem->assignedTo, + new CheckoutAssetNotification($assetItem, $assetItem->assignedTo, $logItem->user, $acceptance, $logItem->note) + ); + } + + return redirect()->route('reports/unaccepted_assets')->with('success', trans('admin/reports/general.reminder_sent')); + } + + /** + * sentAssetAcceptanceReminder + * + * @param integer|null $acceptanceId + * @return \Illuminate\Http\RedirectResponse + * @throws \Illuminate\Auth\Access\AuthorizationException + * @version v1.0 + */ + public function deleteAssetAcceptance($acceptanceId = null) + { + $this->authorize('reports.view'); + + if (!$acceptance = CheckoutAcceptance::pending()->find($acceptanceId)) { + // Redirect to the unaccepted assets report page with error + return redirect()->route('reports/unaccepted_assets')->with('error', trans('general.bad_data')); + } + + if($acceptance->delete()) { + return redirect()->route('reports/unaccepted_assets')->with('success', trans('admin/reports/general.acceptance_deleted')); + } else { + return redirect()->route('reports/unaccepted_assets')->with('error', trans('general.deletion_failed')); + } + } + /** * exportAssetAcceptanceReport * @@ -963,9 +1024,19 @@ public function getAssetAcceptanceReport() public function exportAssetAcceptanceReport() { $this->authorize('reports.view'); - // Grab all the improvements - $assetsForReport = Actionlog::whereIn('id', $this->getAssetsNotAcceptedYet()) - ->get(); + + /** + * Get all assets with pending checkout acceptances + */ + $acceptances = CheckoutAcceptance::pending()->with(['assignedTo', 'checkoutable.assignedTo', 'checkoutable.model'])->get(); + + $assetsForReport = $acceptances + ->filter(function($acceptance) { + return $acceptance->checkoutable_type == 'App\Models\Asset'; + }) + ->map(function($acceptance) { + return ['assetItem' => $acceptance->checkoutable, 'acceptance' => $acceptance]; + }); $rows = [ ]; @@ -980,13 +1051,13 @@ public function exportAssetAcceptanceReport() $header = array_map('trim', $header); $rows[] = implode($header, ','); - foreach ($assetsForReport as $assetItem) { + foreach ($assetsForReport as $item) { $row = [ ]; - $row[] = str_replace(',', '', e($assetItem->assetlog->model->category->name)); - $row[] = str_replace(',', '', e($assetItem->assetlog->model->name)); - $row[] = str_replace(',', '', e($assetItem->assetlog->present()->name())); - $row[] = str_replace(',', '', e($assetItem->assetlog->asset_tag)); - $row[] = str_replace(',', '', e($assetItem->assetlog->assignedTo->present()->name())); + $row[] = str_replace(',', '', e($item['assetItem']->model->category->name)); + $row[] = str_replace(',', '', e($item['assetItem']->model->name)); + $row[] = str_replace(',', '', e($item['assetItem']->name)); + $row[] = str_replace(',', '', e($item['assetItem']->asset_tag)); + $row[] = str_replace(',', '', e(($item['acceptance']->assignedTo) ? $item['acceptance']->assignedTo->present()->name() : trans('admin/reports/general.deleted_user'))); $rows[] = implode($row, ','); } diff --git a/resources/lang/en/admin/reports/general.php b/resources/lang/en/admin/reports/general.php index b03b97546fc4..264a0582b88f 100644 --- a/resources/lang/en/admin/reports/general.php +++ b/resources/lang/en/admin/reports/general.php @@ -1,5 +1,10 @@ 'Select the options you want for your asset report.' + 'info' => 'Select the options you want for your asset report.', + 'deleted_user' => 'Deleted user', + 'send_reminder' => 'Send reminder', + 'reminder_sent' => 'Reminder sent', + 'acceptance_deleted' => 'Acceptance request deleted', + 'acceptance_request' => 'Acceptance request' ); diff --git a/resources/lang/en/general.php b/resources/lang/en/general.php index 539a01a13faf..f60dcc1a89e5 100644 --- a/resources/lang/en/general.php +++ b/resources/lang/en/general.php @@ -73,6 +73,7 @@ 'delete_confirm' => 'Are you sure you wish to delete :item?', 'deleted' => 'Deleted', 'delete_seats' => 'Deleted Seats', + 'deletion_failed' => 'Deletion failed', 'departments' => 'Departments', 'department' => 'Department', 'deployed' => 'Deployed', diff --git a/resources/views/reports/unaccepted_assets.blade.php b/resources/views/reports/unaccepted_assets.blade.php index 45b6f163a397..8432f25b8f41 100644 --- a/resources/views/reports/unaccepted_assets.blade.php +++ b/resources/views/reports/unaccepted_assets.blade.php @@ -41,19 +41,24 @@ class="table table-striped snipe-table" {{ trans('admin/hardware/form.name') }} {{ trans('admin/hardware/table.asset_tag') }} {{ trans('admin/hardware/table.checkoutto') }} + {{ trans('table.actions') }} @if ($assetsForReport) - @foreach ($assetsForReport as $assetItem) - @if ($assetItem) + @foreach ($assetsForReport as $item) + @if ($item['assetItem']) - {{ ($assetItem->company) ? $assetItem->company->name : '' }} - {{ $assetItem->model->category->name }} - {{ $assetItem->model->name }} - {!! $assetItem->present()->nameUrl() !!} - {{ $assetItem->asset_tag }} - {!! ($assetItem->assignedTo) ? $assetItem->assignedTo->present()->nameUrl() : 'Deleted user' !!} + {{ ($item['assetItem']->company) ? $assetItem->company->name : '' }} + {!! $item['assetItem']->model->category->present()->nameUrl() !!} + {!! $item['assetItem']->present()->modelUrl() !!} + {!! $item['assetItem']->present()->nameUrl() !!} + {{ $item['assetItem']->asset_tag }} + {!! ($item['acceptance']->assignedTo) ? $item['acceptance']->assignedTo->present()->nameUrl() : trans('admin/reports/general.deleted_user') !!} + + @if ($item['acceptance']->assignedTo){{ trans('admin/reports/general.send_reminder') }}@endif + + @endif @endforeach diff --git a/routes/web.php b/routes/web.php index 21600d9f1137..555ebb108adb 100644 --- a/routes/web.php +++ b/routes/web.php @@ -342,6 +342,14 @@ 'reports/unaccepted_assets', [ 'as' => 'reports/unaccepted_assets', 'uses' => 'ReportsController@getAssetAcceptanceReport' ] ); + Route::get( + 'reports/unaccepted_assets/{acceptanceId}/sent_reminder', + [ 'as' => 'reports/unaccepted_assets_sent_reminder', 'uses' => 'ReportsController@sentAssetAcceptanceReminder' ] + ); + Route::delete( + 'reports/unaccepted_assets/{acceptanceId}/delete', + [ 'as' => 'reports/unaccepted_assets_delete', 'uses' => 'ReportsController@deleteAssetAcceptance' ] + ); Route::get( 'reports/export/unaccepted_assets', [ 'as' => 'reports/export/unaccepted_assets', 'uses' => 'ReportsController@exportAssetAcceptanceReport' ]