diff --git a/app/Filament/Resources/MemberGroups/MemberGroupResource.php b/app/Filament/Resources/MemberGroups/MemberGroupResource.php index 6ed3a83..e33280c 100644 --- a/app/Filament/Resources/MemberGroups/MemberGroupResource.php +++ b/app/Filament/Resources/MemberGroups/MemberGroupResource.php @@ -5,6 +5,8 @@ namespace App\Filament\Resources\MemberGroups; use App\Filament\Resources\MemberGroups\Pages\CreateMemberGroup; use App\Filament\Resources\MemberGroups\Pages\EditMemberGroup; use App\Filament\Resources\MemberGroups\Pages\ListMemberGroups; +use App\Filament\Resources\MemberGroups\RelationManagers\MemberRelationManager; +use App\Filament\Resources\MemberGroups\RelationManagers\MembersRelationManager; use App\Filament\Resources\MemberGroups\Schemas\MemberGroupForm; use App\Filament\Resources\MemberGroups\Tables\MemberGroupsTable; use App\Models\MemberGroup; @@ -35,7 +37,7 @@ class MemberGroupResource extends Resource public static function getRelations(): array { return [ - // + MembersRelationManager::class, ]; } diff --git a/app/Filament/Resources/MemberGroups/RelationManagers/MembersRelationManager.php b/app/Filament/Resources/MemberGroups/RelationManagers/MembersRelationManager.php new file mode 100644 index 0000000..efa48e9 --- /dev/null +++ b/app/Filament/Resources/MemberGroups/RelationManagers/MembersRelationManager.php @@ -0,0 +1,76 @@ +components([ + // + ]); + } + + public function table(Table $table): Table + { + return $table + ->recordTitleAttribute('name') + ->columns([ + TextColumn::make('lastname') + ->label(Member::getAttributeLabel('lastname')) + ->searchable(), + TextColumn::make('firstname') + ->label(Member::getAttributeLabel('firstname')) + ->searchable(), + TextColumn::make('status') + ->label(Member::getAttributeLabel('status')) + ->formatStateUsing(fn (string $state) => Member::getAttributeLabel($state)) + ->badge() + ->color(fn (string $state): string => match ($state) { + 'draft' => 'gray', + 'pending' => 'warning', + 'valid' => 'success', + 'cancelled' => 'danger', + 'excluded' => 'black', + }), + + ]) + ->filters([ + // + ]) + ->headerActions([ + CreateAction::make(), + AssociateAction::make(), + ]) + ->recordActions([ + EditAction::make(), + DissociateAction::make(), + DeleteAction::make(), + ]) + ->toolbarActions([ + BulkActionGroup::make([ + DissociateBulkAction::make(), + DeleteBulkAction::make(), + ]), + ]); + } +} diff --git a/app/Filament/Resources/Memberships/Schemas/MembershipForm.php b/app/Filament/Resources/Memberships/Schemas/MembershipForm.php index bc589b5..e19d2ee 100644 --- a/app/Filament/Resources/Memberships/Schemas/MembershipForm.php +++ b/app/Filament/Resources/Memberships/Schemas/MembershipForm.php @@ -50,6 +50,7 @@ class MembershipForm ->label(Membership::getAttributeLabel('package_id')) ->placeholder(Membership::getAttributeLabel('select_package')) ->relationship('package', 'name') + ->required() ->default(null), Select::make('payment_status') ->label(Membership::getAttributeLabel('payment_status')) diff --git a/app/Models/MemberGroup.php b/app/Models/MemberGroup.php index c0523dd..4431189 100644 --- a/app/Models/MemberGroup.php +++ b/app/Models/MemberGroup.php @@ -20,6 +20,6 @@ class MemberGroup extends Model public function members(): HasMany { - return $this->hasMany(Member::class); + return $this->hasMany(Member::class, 'group_id'); } } diff --git a/app/Models/Membership.php b/app/Models/Membership.php index bc580af..a502d64 100644 --- a/app/Models/Membership.php +++ b/app/Models/Membership.php @@ -37,9 +37,9 @@ class Membership extends Model return $this->belongsTo(User::class, 'admin_id'); } - public function package(): HasOne + public function package(): BelongsTo { - return $this->hasOne(Package::class); + return $this->belongsTo(Package::class); } public function services(): BelongsToMany diff --git a/app/Models/Package.php b/app/Models/Package.php index 252b0e7..27504e5 100644 --- a/app/Models/Package.php +++ b/app/Models/Package.php @@ -19,8 +19,4 @@ class Package extends Model return __('packages.fields.' . $attribute); } - public function memberships(): HasMany - { - return $this->hasMany(Membership::class); - } }