From 2475daca4b7a12693f363d1abff192bd6307d801 Mon Sep 17 00:00:00 2001 From: Mulanga Date: Thu, 12 Mar 2026 17:51:32 +0200 Subject: [PATCH] fix: set assigned_by when syncing shift staff pivot records --- src/app/Filament/Resources/ShiftResource.php | 2 +- .../Resources/ShiftResource/Pages/CreateShift.php | 13 +++++++++++++ .../Resources/ShiftResource/Pages/EditShift.php | 10 ++++++++++ .../RelationManagers/StaffRelationManager.php | 8 +++++++- src/app/Services/ShiftService.php | 6 ++++++ src/database/seeders/DatabaseSeeder.php | 13 +++++++++++++ 6 files changed, 50 insertions(+), 2 deletions(-) diff --git a/src/app/Filament/Resources/ShiftResource.php b/src/app/Filament/Resources/ShiftResource.php index c5f8d13..49a4c2e 100644 --- a/src/app/Filament/Resources/ShiftResource.php +++ b/src/app/Filament/Resources/ShiftResource.php @@ -56,7 +56,7 @@ public static function form(Form $form): Form Forms\Components\Select::make('staffMembers') ->label('Assign Staff') ->multiple() - ->relationship('staff', 'name') + ->options(User::query()->pluck('name', 'id')) ->preload() ->searchable(), ]) diff --git a/src/app/Filament/Resources/ShiftResource/Pages/CreateShift.php b/src/app/Filament/Resources/ShiftResource/Pages/CreateShift.php index 527f3d9..9ae8bf4 100644 --- a/src/app/Filament/Resources/ShiftResource/Pages/CreateShift.php +++ b/src/app/Filament/Resources/ShiftResource/Pages/CreateShift.php @@ -17,4 +17,17 @@ protected function mutateFormDataBeforeCreate(array $data): array return $data; } + + protected function afterCreate(): void + { + $staffIds = $this->data['staffMembers'] ?? []; + + if (empty($staffIds)) { + return; + } + $this->record->staff()->syncWithPivotValues( + $staffIds, + ['assigned_by' => auth()->id()] + ); + } } diff --git a/src/app/Filament/Resources/ShiftResource/Pages/EditShift.php b/src/app/Filament/Resources/ShiftResource/Pages/EditShift.php index 91cdcaa..57340b3 100644 --- a/src/app/Filament/Resources/ShiftResource/Pages/EditShift.php +++ b/src/app/Filament/Resources/ShiftResource/Pages/EditShift.php @@ -54,4 +54,14 @@ protected function getHeaderActions(): array ->visible(fn () => $this->record->isPlanned()), ]; } + + protected function afterSave(): void + { + $staffIds = $this->data['staffMembers'] ?? []; + + $this->record->staff()->syncWithPivotValues( + $staffIds, + ['assigned_by' => auth()->id()] + ); + } } diff --git a/src/app/Filament/Resources/ShiftResource/RelationManagers/StaffRelationManager.php b/src/app/Filament/Resources/ShiftResource/RelationManagers/StaffRelationManager.php index 8bca0d3..3f09e83 100644 --- a/src/app/Filament/Resources/ShiftResource/RelationManagers/StaffRelationManager.php +++ b/src/app/Filament/Resources/ShiftResource/RelationManagers/StaffRelationManager.php @@ -31,7 +31,13 @@ public function table(Table $table): Table Tables\Actions\AttachAction::make() ->label('Add Staff') ->preloadRecordSelect() - ->visible(fn () => $this->getOwnerRecord()->isPlanned()), + ->visible(fn () => $this->getOwnerRecord()->isPlanned()) + ->action(function (array $data, $ownerRecord) { + $staffId = $data['record'] ?? null; + if ($staffId) { + app(\App\Services\ShiftService::class)->assignStaff($ownerRecord, [$staffId]); + } + }), ]) ->actions([ Tables\Actions\DetachAction::make() diff --git a/src/app/Services/ShiftService.php b/src/app/Services/ShiftService.php index 3dd0e61..d19c3be 100644 --- a/src/app/Services/ShiftService.php +++ b/src/app/Services/ShiftService.php @@ -29,6 +29,7 @@ public function createShift(array $data, ?array $staffIds = null): Shift ]); if ($staffIds) { + logger()->info('Staff IDs:', $staffIds); $this->assignStaff($shift, $staffIds); } @@ -102,6 +103,11 @@ public function assignStaff(Shift $shift, array $staffIds): void } $managerId = Auth::id(); + + if(!$managerId) { + throw new InvalidArgumentException('Authenticated user is required to assign staff.'); + } + $syncData = []; foreach ($staffIds as $staffId) { diff --git a/src/database/seeders/DatabaseSeeder.php b/src/database/seeders/DatabaseSeeder.php index d9e8f74..8efc4e1 100644 --- a/src/database/seeders/DatabaseSeeder.php +++ b/src/database/seeders/DatabaseSeeder.php @@ -13,11 +13,24 @@ class DatabaseSeeder extends Seeder */ public function run(): void { + // Create the admin user User::factory()->create([ 'name' => 'Admin User', 'email' => 'admin@example.com', ]); + // Create 10 random staff users + User::factory()->create(['name' => 'Staff One', 'email' => 'staff1@example.com']); + User::factory()->create(['name' => 'Staff Two', 'email' => 'staff2@example.com']); + User::factory()->create(['name' => 'Staff Three', 'email' => 'staff3@example.com']); + User::factory()->create(['name' => 'Staff Four', 'email' => 'staff4@example.com']); + User::factory()->create(['name' => 'Staff Five', 'email' => 'staff5@example.com']); + User::factory()->create(['name' => 'Staff Six', 'email' => 'staff6@example.com']); + User::factory()->create(['name' => 'Staff Seven', 'email' => 'staff7@example.com']); + User::factory()->create(['name' => 'Staff Eight', 'email' => 'staff8@example.com']); + User::factory()->create(['name' => 'Staff Nine', 'email' => 'staff9@example.com']); + User::factory()->create(['name' => 'Staff Ten', 'email' => 'staff10@example.com']); + $this->call(RolePermissionSeeder::class); } }