From 64e33b09b56b7e07e6c2c9751116908e5e77b997 Mon Sep 17 00:00:00 2001 From: William Shaw Date: Mon, 8 Dec 2025 03:14:55 +0000 Subject: [PATCH 1/2] Display VT applications for an account --- .../Admin/Resources/AccountResource.php | 1 + .../VisitTransferRelationManager.php | 43 +++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 app/Filament/Admin/Resources/AccountResource/RelationManagers/VisitTransferRelationManager.php diff --git a/app/Filament/Admin/Resources/AccountResource.php b/app/Filament/Admin/Resources/AccountResource.php index 0ae1e0c0b..b9efd656d 100644 --- a/app/Filament/Admin/Resources/AccountResource.php +++ b/app/Filament/Admin/Resources/AccountResource.php @@ -165,6 +165,7 @@ public static function getRelations(): array \App\Filament\Admin\Resources\AccountResource\RelationManagers\EndorsementsRelationManager::class, \App\Filament\Training\Resources\AccountResource\RelationManagers\WaitingListsRelationManager::class, \App\Filament\Admin\Resources\AccountResource\RelationManagers\RetentionChecksRelationManager::class, + \App\Filament\Admin\Resources\AccountResource\RelationManagers\VisitTransferRelationManager::class, ]; } diff --git a/app/Filament/Admin/Resources/AccountResource/RelationManagers/VisitTransferRelationManager.php b/app/Filament/Admin/Resources/AccountResource/RelationManagers/VisitTransferRelationManager.php new file mode 100644 index 000000000..b75d5ac9b --- /dev/null +++ b/app/Filament/Admin/Resources/AccountResource/RelationManagers/VisitTransferRelationManager.php @@ -0,0 +1,43 @@ +recordTitleAttribute('id') + ->columns([ + Tables\Columns\TextColumn::make('type')->label('Type')->formatStateUsing(fn ($state) => $state === Application::TYPE_VISIT ? 'Visit' : 'Transfer'), + Tables\Columns\TextColumn::make('facility.name')->label('Facility'), + Tables\Columns\BadgeColumn::make('status')->label('Status')->formatStateUsing(fn ($state, $record) => $record->status_string)->colors([ + 'success' => fn ($state) => in_array($state, [Application::STATUS_ACCEPTED, Application::STATUS_COMPLETED]), + 'warning' => fn ($state) => in_array($state, [Application::STATUS_UNDER_REVIEW, Application::STATUS_IN_PROGRESS, Application::STATUS_SUBMITTED]), + 'danger' => fn ($state) => in_array($state, [Application::STATUS_REJECTED, Application::STATUS_CANCELLED, Application::STATUS_WITHDRAWN, Application::STATUS_EXPIRED, Application::STATUS_LAPSED]), + ]), + Tables\Columns\TextColumn::make('created_at')->label('Submitted At')->dateTime()->isoDateTimeFormat('lll'), + Tables\Columns\TextColumn::make('updated_at')->label('Last Updated')->dateTime()->isoDateTimeFormat('lll'), + ]) + ->actions([ + Tables\Actions\ViewAction::make('View') + ->label('View Application') + ->url(fn ($record) => route('adm.visiting.application.view', ['application' => $record->id])) + ->color('primary') + ->visible(fn () => auth()->user()->can('adm/visit-transfer')), + ]) + ->defaultSort('created_at', 'desc'); + } +} From 2d9dd8f314a25c57a3fbd3cd6eaaf28a016343d3 Mon Sep 17 00:00:00 2001 From: William Shaw Date: Tue, 9 Dec 2025 20:14:00 +0000 Subject: [PATCH 2/2] Optimisations Decided to use the colours elsewhere on another branch so this makes more sense --- .../VisitTransferRelationManager.php | 10 +++------- app/Models/VisitTransfer/Application.php | 20 +++++++++++++++++++ 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/app/Filament/Admin/Resources/AccountResource/RelationManagers/VisitTransferRelationManager.php b/app/Filament/Admin/Resources/AccountResource/RelationManagers/VisitTransferRelationManager.php index b75d5ac9b..983410b74 100644 --- a/app/Filament/Admin/Resources/AccountResource/RelationManagers/VisitTransferRelationManager.php +++ b/app/Filament/Admin/Resources/AccountResource/RelationManagers/VisitTransferRelationManager.php @@ -2,7 +2,6 @@ namespace App\Filament\Admin\Resources\AccountResource\RelationManagers; -use App\Models\VisitTransfer\Application; use Filament\Resources\RelationManagers\RelationManager; use Filament\Tables; use Filament\Tables\Table; @@ -21,13 +20,10 @@ public function table(Table $table): Table return $table ->recordTitleAttribute('id') ->columns([ - Tables\Columns\TextColumn::make('type')->label('Type')->formatStateUsing(fn ($state) => $state === Application::TYPE_VISIT ? 'Visit' : 'Transfer'), + Tables\Columns\TextColumn::make('type_string')->label('Type'), Tables\Columns\TextColumn::make('facility.name')->label('Facility'), - Tables\Columns\BadgeColumn::make('status')->label('Status')->formatStateUsing(fn ($state, $record) => $record->status_string)->colors([ - 'success' => fn ($state) => in_array($state, [Application::STATUS_ACCEPTED, Application::STATUS_COMPLETED]), - 'warning' => fn ($state) => in_array($state, [Application::STATUS_UNDER_REVIEW, Application::STATUS_IN_PROGRESS, Application::STATUS_SUBMITTED]), - 'danger' => fn ($state) => in_array($state, [Application::STATUS_REJECTED, Application::STATUS_CANCELLED, Application::STATUS_WITHDRAWN, Application::STATUS_EXPIRED, Application::STATUS_LAPSED]), - ]), + Tables\Columns\BadgeColumn::make('status')->label('Status')->formatStateUsing(fn ($state, $record) => $record->status_string) + ->color(fn ($record) => $record->status_color), Tables\Columns\TextColumn::make('created_at')->label('Submitted At')->dateTime()->isoDateTimeFormat('lll'), Tables\Columns\TextColumn::make('updated_at')->label('Last Updated')->dateTime()->isoDateTimeFormat('lll'), ]) diff --git a/app/Models/VisitTransfer/Application.php b/app/Models/VisitTransfer/Application.php index 81dd7e9e1..9e523c028 100644 --- a/app/Models/VisitTransfer/Application.php +++ b/app/Models/VisitTransfer/Application.php @@ -462,6 +462,26 @@ public function getStatusStringAttribute() } } + public function getStatusColorAttribute() + { + return match ($this->status) { + self::STATUS_ACCEPTED, + self::STATUS_COMPLETED => 'success', + + self::STATUS_IN_PROGRESS, + self::STATUS_SUBMITTED, + self::STATUS_UNDER_REVIEW => 'warning', + + self::STATUS_WITHDRAWN, + self::STATUS_EXPIRED, + self::STATUS_LAPSED, + self::STATUS_CANCELLED, + self::STATUS_REJECTED => 'danger', + + default => 'gray', + }; + } + public function getIsVisitAttribute() { return $this->type == self::TYPE_VISIT;