From 9f60cfb32e5b2ba512db2b2310e0661fc221074e Mon Sep 17 00:00:00 2001 From: Dr Masroor Ehsan Date: Wed, 29 Jan 2025 23:53:03 +0600 Subject: [PATCH] wip --- app/DAL/Radiologists.php | 15 +++ .../Resources/DicomRoutingRuleResource.php | 126 ++++++++++++++++++ .../Pages/CreateDicomRoutingRule.php | 11 ++ .../Pages/EditDicomRoutingRule.php | 19 +++ .../Pages/ListDicomRoutingRules.php | 19 +++ 5 files changed, 190 insertions(+) create mode 100644 app/Filament/Resources/DicomRoutingRuleResource.php create mode 100644 app/Filament/Resources/DicomRoutingRuleResource/Pages/CreateDicomRoutingRule.php create mode 100644 app/Filament/Resources/DicomRoutingRuleResource/Pages/EditDicomRoutingRule.php create mode 100644 app/Filament/Resources/DicomRoutingRuleResource/Pages/ListDicomRoutingRules.php diff --git a/app/DAL/Radiologists.php b/app/DAL/Radiologists.php index f36333b..3b0baf4 100644 --- a/app/DAL/Radiologists.php +++ b/app/DAL/Radiologists.php @@ -50,4 +50,19 @@ public static function worklist_stats(int $days, int $workflow_level) return $rows; } + + public static function activeRads(): array + { + return cache() + ->remember('active_rads', + now()->addMinutes(5), + fn () => DB::table('users') + ->join('model_has_roles', 'users.id', '=', 'model_has_roles.model_id') + ->join('roles', 'model_has_roles.role_id', '=', 'roles.id') + ->where('roles.name', Role::Radiologist->value) + ->where('users.is_active', true) + ->orderBy('users.display_name') + ->pluck('users.display_name', 'users.id') + ->toArray()); + } } diff --git a/app/Filament/Resources/DicomRoutingRuleResource.php b/app/Filament/Resources/DicomRoutingRuleResource.php new file mode 100644 index 0000000..a8594f4 --- /dev/null +++ b/app/Filament/Resources/DicomRoutingRuleResource.php @@ -0,0 +1,126 @@ +schema([ + Toggle::make('is_active') + ->required(), + Select::make('organization_id') + ->label('Organization') + ->relationship('organization', 'name') + ->required(), + Select::make('department_id') + ->label('Department') + ->relationship('department', 'name'), + Select::make('user_id') + ->label('Radiologist') + ->relationship('radiologist', 'display_name') + ->options(Radiologists::activeRads()), + Select::make('assignment_panel_id') + ->label('Panel') + ->relationship('panel', 'name'), + TextInput::make('name') + ->maxLength(255), + Textarea::make('condition') + ->columnSpanFull() + ->required(), + TextInput::make('priority') + ->required() + ->numeric() + ->default(0), + ]); + } + + public static function table(Table $table): Table + { + return $table + ->columns([ + IconColumn::make('is_active') + ->label('') + ->boolean(), + TextColumn::make('name') + ->searchable(), + TextColumn::make('condition') + ->label('Rule') + ->limit(20) + ->searchable(), + TextColumn::make('priority') + ->numeric() + ->sortable(), + TextColumn::make('organization.name') + ->label('Org') + ->numeric() + ->sortable(), + TextColumn::make('department.name') + ->label('Dept') + ->numeric() + ->sortable(), + TextColumn::make('user_id') + ->label('Rad') + ->numeric() + ->sortable(), + TextColumn::make('assignment_panel_id') + ->label('Panel') + ->numeric() + ->sortable(), + TextColumn::make('created_at') + ->dateTime() + ->sortable() + ->toggleable(isToggledHiddenByDefault: true), + TextColumn::make('updated_at') + ->dateTime() + ->sortable() + ->toggleable(isToggledHiddenByDefault: true), + ]) + ->filters([ + // + ]) + ->actions([ + Tables\Actions\EditAction::make(), + ]) + ->bulkActions([ + Tables\Actions\BulkActionGroup::make([ + Tables\Actions\DeleteBulkAction::make(), + ]), + ]); + } + + public static function getRelations(): array + { + return [ + // + ]; + } + + public static function getPages(): array + { + return [ + 'index' => Pages\ListDicomRoutingRules::route('/'), + 'create' => Pages\CreateDicomRoutingRule::route('/create'), + 'edit' => Pages\EditDicomRoutingRule::route('/{record}/edit'), + ]; + } +} diff --git a/app/Filament/Resources/DicomRoutingRuleResource/Pages/CreateDicomRoutingRule.php b/app/Filament/Resources/DicomRoutingRuleResource/Pages/CreateDicomRoutingRule.php new file mode 100644 index 0000000..5e25383 --- /dev/null +++ b/app/Filament/Resources/DicomRoutingRuleResource/Pages/CreateDicomRoutingRule.php @@ -0,0 +1,11 @@ +