add checkoutable class, rework blade for unaccepted items

This commit is contained in:
Godfrey M
2025-09-16 15:52:41 -07:00
parent 9db65c6ae9
commit 58eac619ea
2 changed files with 90 additions and 49 deletions

View File

@@ -5,10 +5,14 @@ namespace App\Http\Controllers;
use App\Helpers\Helper;
use App\Mail\CheckoutAssetMail;
use App\Models\Accessory;
use App\Models\AccessoryCheckout;
use App\Models\Actionlog;
use App\Models\Asset;
use App\Models\AssetModel;
use App\Models\Category;
use App\Models\Checkoutable;
use App\Models\Component;
use App\Models\LicenseSeat;
use App\Models\Maintenance;
use App\Models\CheckoutAcceptance;
use App\Models\Company;
@@ -1111,14 +1115,14 @@ class ReportsController extends Controller
$showDeleted = $deleted == 'deleted';
$query = CheckoutAcceptance::pending()
->where('checkoutable_type', 'App\Models\Asset')
->with([
'checkoutable' => function (MorphTo $query) {
$query->morphWith([
AssetModel::class => ['model'],
Company::class => ['company'],
Asset::class => ['assignedTo'],
])->with('model.category');
Asset::class => ['model.category', 'assignedTo', 'company'],
Accessory::class => ['category','checkouts', 'company'],
LicenseSeat::class => ['user', 'license'],
Component::class => ['assignedTo', 'company'],
]);
},
'assignedTo' => function($query){
$query->withTrashed();
@@ -1129,15 +1133,20 @@ class ReportsController extends Controller
$query->withTrashed();
}
$assetsForReport = $query->get()
->map(function ($acceptance) {
return [
'assetItem' => $acceptance->checkoutable,
'acceptance' => $acceptance,
];
});
// $assetsForReport = $query->get()
// ->map(function ($acceptance) {
// return [
// 'assetItem' => $acceptance->checkoutable,
// 'acceptance' => $acceptance,
// ];
// });
// dd($assetsForReport);
// $assetsForReport = $query->get()->map(function ($unaccepted) {})
$itemsForReport = $query->get()->map(fn ($unaccepted) => Checkoutable::fromAcceptance($unaccepted));
return view('reports/unaccepted_assets', compact('assetsForReport','showDeleted' ));
return view('reports/unaccepted_assets', compact('itemsForReport','showDeleted' ));
}
/**

View File

@@ -49,6 +49,7 @@
<thead>
<tr role="row">
<th class="col-sm-1" data-searchable="false" data-field="created_at" data-sortable="true">{{ trans('general.date') }}</th>
<th class="col-sm-1" data-sortable="true" >{{ trans('general.type') }}</th>
<th class="col-sm-1" data-sortable="true" >{{ trans('admin/companies/table.title') }}</th>
<th class="col-sm-1" data-sortable="true" >{{ trans('general.category') }}</th>
<th class="col-sm-1" data-sortable="true" >{{ trans('admin/hardware/form.model') }}</th>
@@ -59,43 +60,74 @@
</tr>
</thead>
<tbody>
@if ($assetsForReport)
@foreach ($assetsForReport as $item)
@if ($item['assetItem'])
<tr @if($item['acceptance']->trashed()) style="text-decoration: line-through" @endif>
<td>{{ Helper::getFormattedDateObject($item['acceptance']->created_at, 'datetime', false) }}</td>
<td>{{ ($item['assetItem']->company) ? $item['assetItem']->company->name : '' }}</td>
<td>{!! $item['assetItem']->model->category->present()->nameUrl() !!}</td>
<td>{!! $item['assetItem']->present()->modelUrl() !!}</td>
<td>{!! $item['assetItem']->present()->nameUrl() !!}</td>
<td>{{ $item['assetItem']->asset_tag }}</td>
<td @if($item['acceptance']->assignedTo === null || $item['acceptance']->assignedTo->trashed()) style="text-decoration: line-through" @endif>{!! ($item['acceptance']->assignedTo) ? $item['acceptance']->assignedTo->present()->nameUrl() : trans('admin/reports/general.deleted_user') !!}</td>
<td class="white-space: nowrap;">
<nobr>
@if(!$item['acceptance']->trashed())
<form method="post" class="white-space: nowrap;" action="{{ route('reports/unaccepted_assets_sent_reminder') }}">
@if (($item['acceptance']->assignedTo) && ($item['acceptance']->assignedTo->email))
@csrf
<input type="hidden" name="acceptance_id" value="{{ $item['acceptance']->id }}">
<button class="btn btn-sm btn-warning" data-tooltip="true" data-title="{{ trans('admin/reports/general.send_reminder') }}">
<i class="fa fa-repeat" aria-hidden="true"></i>
</button>
@else
<span data-tooltip="true" data-title="{{ trans('admin/reports/general.cannot_send_reminder') }}">
<a class="btn btn-sm btn-warning disabled" href="#">
<i class="fa fa-repeat" aria-hidden="true"></i>
</a>
</span>
@endif
<a href="{{ route('reports/unaccepted_assets_delete', ['acceptanceId' => $item['acceptance']->id]) }}" class="btn btn-sm btn-danger delete-asset" data-tooltip="true" data-toggle="modal" data-content="{{ trans('general.delete_confirm', ['item' =>trans('admin/reports/general.acceptance_request')]) }}" data-title="{{ trans('general.delete') }}" onClick="return false;"><i class="fa fa-trash"></i></a>
</form>
@endif
@if ($itemsForReport)
@foreach ($itemsForReport as $item)
<tr @if($item->acceptance->trashed()) style="text-decoration: line-through" @endif>
{{-- Created date (already formatted) --}}
<td data-order="{{ $item->acceptance->created_at->getTimestamp() }}">
{{ Helper::getFormattedDateObject($item->acceptance->created_at, 'datetime', false) }}
</td>
{{-- Item Type --}}
<td>{{ $item->type }}</td>
{{-- Company name --}}
<td>{{ $item->company }}</td>
</nobr>
</td>
</tr>
@endif
@endforeach
{{-- Category --}}
<td>{!! $item->category !!}</td>
{{-- Model --}}
<td>{!! $item->model !!}</td>
{{-- Name --}}
<td>{!! $item->name !!}</td>
{{-- Asset tag or blank --}}
<td>{{ $item->asset_tag }}</td>
{{-- Assigned To (with soft-delete strike if needed) --}}
@php
$assignee = $item->acceptance->assignedTo;
$assigneeStruck = !$assignee || (method_exists($assignee, 'trashed') && $assignee->trashed());
@endphp
<td @if($assigneeStruck) style="text-decoration: line-through" @endif>
{!! $assignee
? optional($assignee->present())->nameUrl() ?? e($assignee->name)
: trans('admin/reports/general.deleted_user') !!}
</td>
{{-- Actions: send reminder / delete --}}
<td class="white-space: nowrap;">
<nobr>
@unless($item->acceptance->trashed())
<form method="post" class="white-space: nowrap;" action="{{ route('reports/unaccepted_assets_sent_reminder') }}">
@csrf
<input type="hidden" name="acceptance_id" value="{{ $item->acceptance_id }}">
@if ($assignee && $assignee->email)
<button class="btn btn-sm btn-warning" data-tooltip="true" data-title="{{ trans('admin/reports/general.send_reminder') }}">
<i class="fa fa-repeat" aria-hidden="true"></i>
</button>
@else
<span data-tooltip="true" data-title="{{ trans('admin/reports/general.cannot_send_reminder') }}">
<a class="btn btn-sm btn-warning disabled" href="#">
<i class="fa fa-repeat" aria-hidden="true"></i>
</a>
</span>
@endif
<a href="{{ route('reports/unaccepted_assets_delete', ['acceptanceId' => $item->acceptance_id]) }}"
class="btn btn-sm btn-danger delete-asset"
data-tooltip="true"
data-toggle="modal"
data-content="{{ trans('general.delete_confirm', ['item' => trans('admin/reports/general.acceptance_request')]) }}"
data-title="{{ trans('general.delete') }}"
onClick="return false;">
<i class="fa fa-trash"></i>
</a>
</form>
@endunless
</nobr>
</td>
</tr>
@endforeach
@endif
</tbody>
<tfoot>