diff --git a/app/Filament/Resources/Activities/RelationManagers/ParticipantsRelationManager.php b/app/Filament/Resources/Activities/RelationManagers/ParticipantsRelationManager.php index 7f3c9f0..d8bbd46 100644 --- a/app/Filament/Resources/Activities/RelationManagers/ParticipantsRelationManager.php +++ b/app/Filament/Resources/Activities/RelationManagers/ParticipantsRelationManager.php @@ -5,6 +5,7 @@ namespace App\Filament\Resources\Activities\RelationManagers; use App\Models\MemberPoint; use Filament\Actions\AttachAction; use Filament\Actions\BulkActionGroup; +use Filament\Actions\DetachAction; use Filament\Actions\DetachBulkAction; use Filament\Actions\EditAction; use Filament\Forms\Components\Select; @@ -63,7 +64,47 @@ class ParticipantsRelationManager extends RelationManager } }), ]) - ->recordActions([EditAction::make()]) - ->toolbarActions([BulkActionGroup::make([DetachBulkAction::make()])]); + ->recordActions([ + EditAction::make() + ->after(function (EditAction $action, $record, array $data) { + $activity = $this->getOwnerRecord(); + $existing = MemberPoint::where('user_id', $record->id) + ->where('source_type', 'activity') + ->where('source_id', $activity->id) + ->first(); + + if (($data['status'] ?? 'hadir') === 'hadir' && ! $existing) { + MemberPoint::create([ + 'user_id' => $record->id, + 'points' => 10, + 'reason' => "Hadir di kegiatan: {$activity->title}", + 'source_type' => 'activity', + 'source_id' => $activity->id, + ]); + } elseif (($data['status'] ?? 'hadir') !== 'hadir' && $existing) { + $existing->delete(); + } + }), + DetachAction::make() + ->after(function ($record) { + $activity = $this->getOwnerRecord(); + MemberPoint::where('user_id', $record->id) + ->where('source_type', 'activity') + ->where('source_id', $activity->id) + ->delete(); + }), + ]) + ->toolbarActions([ + BulkActionGroup::make([ + DetachBulkAction::make() + ->after(function ($records) { + $activity = $this->getOwnerRecord(); + MemberPoint::where('source_type', 'activity') + ->where('source_id', $activity->id) + ->whereIn('user_id', $records->pluck('id')) + ->delete(); + }), + ]), + ]); } }