diff --git a/app/Filament/Resources/MailAdressens/MailAdressenResource.php b/app/Filament/Resources/MailAdressens/MailAdressenResource.php index 3705bb7..b922e8b 100644 --- a/app/Filament/Resources/MailAdressens/MailAdressenResource.php +++ b/app/Filament/Resources/MailAdressens/MailAdressenResource.php @@ -17,9 +17,11 @@ class MailAdressenResource extends Resource { protected static ?string $model = MailAdressen::class; + protected static ?int $navigationSort = 2; + protected static ?string $cluster = NewsletterCluster::class; - protected static string|BackedEnum|null $navigationIcon = Heroicon::OutlinedRectangleStack; + protected static string|BackedEnum|null $navigationIcon = Heroicon::OutlinedUserCircle; protected static ?string $navigationLabel = 'Mail Adressen'; diff --git a/app/Filament/Resources/MailAdressens/Tables/MailAdressensTable.php b/app/Filament/Resources/MailAdressens/Tables/MailAdressensTable.php index b022ae2..0691a7d 100644 --- a/app/Filament/Resources/MailAdressens/Tables/MailAdressensTable.php +++ b/app/Filament/Resources/MailAdressens/Tables/MailAdressensTable.php @@ -3,17 +3,19 @@ namespace App\Filament\Resources\MailAdressens\Tables; use App\Models\MailAdressen; +use App\Models\MailGruppen; use Filament\Actions\BulkAction; use Filament\Actions\BulkActionGroup; use Filament\Actions\DeleteAction; use Filament\Actions\DeleteBulkAction; use Filament\Actions\EditAction; use Filament\Forms\Components\DatePicker; +use Filament\Forms\Components\Select; +use Filament\Forms\Components\Toggle; use Filament\Tables\Columns\TextColumn; use Filament\Tables\Columns\ToggleColumn; use Filament\Tables\Enums\FiltersLayout; use Filament\Tables\Filters\Filter; -use Filament\Tables\Filters\TernaryFilter; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Collection; @@ -41,15 +43,31 @@ class MailAdressensTable TextColumn::make('last_name')->label('Nachname'), ]) ->filters([ - TernaryFilter::make('im_newsletter')->label('Im Newsletter'), - Filter::make('vereidigung') + Filter::make('mail_gruppen_id') + ->columnSpanFull() + ->columns(4) ->schema([ - DatePicker::make('vereidigung_von')->native(false), - DatePicker::make('vereidigung_bis')->native(false), + Select::make('mail_gruppen_id') + ->hiddenLabel() + ->preload() + ->default(1) + ->selectablePlaceholder(false) + ->options(function (): array { + return MailGruppen::pluck('name', 'id')->toArray(); + }), + Toggle::make('im_newsletter')->label('Im Newsletter'), + DatePicker::make('vereidigung_von')->native(false)->hiddenLabel()->placeholder('Vereidigung von'), + DatePicker::make('vereidigung_bis')->native(false)->hiddenLabel()->placeholder('Vereidigung bis'), ]) ->query(function (Builder $query, array $data): Builder { return $query ->when( + $data['mail_gruppen_id'], + fn (Builder $query, $mail_gruppen_id): Builder => $query->where('mail_gruppen_id', $mail_gruppen_id), + )->when( + $data['im_newsletter'], + fn (Builder $query, $im_newsletter): Builder => $query->where('im_newsletter', $im_newsletter), + )->when( $data['vereidigung_von'], fn (Builder $query, $date): Builder => $query->whereDate('vereidigung', '>=', $date), ) @@ -58,7 +76,10 @@ class MailAdressensTable fn (Builder $query, $date): Builder => $query->whereDate('vereidigung', '<=', $date), ); }), - ], layout: FiltersLayout::Modal) + ], layout: FiltersLayout::AboveContent) + ->filtersResetActionPosition(null) + ->hiddenFilterIndicators() + ->deferFilters(false) ->recordActions([ EditAction::make()->iconButton(), DeleteAction::make()->iconButton(), diff --git a/app/Filament/Resources/MailGruppens/MailGruppenResource.php b/app/Filament/Resources/MailGruppens/MailGruppenResource.php new file mode 100644 index 0000000..6636a6d --- /dev/null +++ b/app/Filament/Resources/MailGruppens/MailGruppenResource.php @@ -0,0 +1,48 @@ + ListMailGruppens::route('/'), + ]; + } +} diff --git a/app/Filament/Resources/MailGruppens/Pages/CreateMailGruppen.php b/app/Filament/Resources/MailGruppens/Pages/CreateMailGruppen.php new file mode 100644 index 0000000..a8ed5cd --- /dev/null +++ b/app/Filament/Resources/MailGruppens/Pages/CreateMailGruppen.php @@ -0,0 +1,11 @@ +createAnother(false), + ]; + } +} diff --git a/app/Filament/Resources/MailGruppens/Schemas/MailGruppenForm.php b/app/Filament/Resources/MailGruppens/Schemas/MailGruppenForm.php new file mode 100644 index 0000000..67b81c9 --- /dev/null +++ b/app/Filament/Resources/MailGruppens/Schemas/MailGruppenForm.php @@ -0,0 +1,17 @@ +components([ + TextInput::make('name'), + ])->columns(1); + } +} diff --git a/app/Filament/Resources/MailGruppens/Tables/MailGruppensTable.php b/app/Filament/Resources/MailGruppens/Tables/MailGruppensTable.php new file mode 100644 index 0000000..5cf6d54 --- /dev/null +++ b/app/Filament/Resources/MailGruppens/Tables/MailGruppensTable.php @@ -0,0 +1,28 @@ +columns([ + TextColumn::make('id'), + TextColumn::make('name'), + ]) + ->recordActions([ + EditAction::make()->iconButton(), + DeleteAction::make()->iconButton() + ->requiresConfirmation() + ->modalHeading('Adressen Gruppe') + ->modalDescription('Alle Mail Adressen die sich in dieser Gruppe befinden werden auch gelöscht. Dies kann nicht mehr rückgängig gemacht werden.') + ->modalSubmitActionLabel('Löschen'), + ]); + } +} diff --git a/app/Filament/Resources/MailVersands/MailVersandResource.php b/app/Filament/Resources/MailVersands/MailVersandResource.php new file mode 100644 index 0000000..9077b8f --- /dev/null +++ b/app/Filament/Resources/MailVersands/MailVersandResource.php @@ -0,0 +1,48 @@ + ListMailVersands::route('/'), + ]; + } +} diff --git a/app/Filament/Resources/MailVersands/Pages/CreateMailVersand.php b/app/Filament/Resources/MailVersands/Pages/CreateMailVersand.php new file mode 100644 index 0000000..6d2e356 --- /dev/null +++ b/app/Filament/Resources/MailVersands/Pages/CreateMailVersand.php @@ -0,0 +1,11 @@ +createAnother(false), + ]; + } +} diff --git a/app/Filament/Resources/MailVersands/Schemas/MailVersandForm.php b/app/Filament/Resources/MailVersands/Schemas/MailVersandForm.php new file mode 100644 index 0000000..0ea02ac --- /dev/null +++ b/app/Filament/Resources/MailVersands/Schemas/MailVersandForm.php @@ -0,0 +1,26 @@ +components([ + TextInput::make('name')->label('Benennung')->required(), + DateTimePicker::make('sende_zeitpunkt')->native(false)->required(), + Select::make('mail_gruppen_id') + ->required() + ->relationship(name: 'mail_gruppen', titleAttribute: 'name'), + Select::make('mail_vorlage_id') + ->required() + ->relationship(name: 'mail_vorlage', titleAttribute: 'titel'), + ]); + } +} diff --git a/app/Filament/Resources/MailVersands/Tables/MailVersandsTable.php b/app/Filament/Resources/MailVersands/Tables/MailVersandsTable.php new file mode 100644 index 0000000..615552d --- /dev/null +++ b/app/Filament/Resources/MailVersands/Tables/MailVersandsTable.php @@ -0,0 +1,43 @@ +columns([ + TextColumn::make('name')->label('Benennung'), + SelectColumn::make('mail_gruppen_id') + ->optionsRelationship(name: 'mail_gruppen', titleAttribute: 'name') + ->label('Versand an Gruppe'), + SelectColumn::make('mail_vorlage_id') + ->optionsRelationship(name: 'mail_vorlage', titleAttribute: 'titel') + ->label('Vorlage'), + TextColumn::make('sende_zeitpunkt')->dateTime()->label('Sende Zeitpunkt'), + TextColumn::make('versand_am')->dateTime(), + SelectColumn::make('status') + ->native(false) + ->disabled(fn ($record): bool => $record->ist_active ? true : false) + ->options([ + 'wartend' => 'Wartend', + 'versand' => 'Mail Versand', + ]) + ->allowOptionsHtml(), + ToggleColumn::make('ist_active')->onColor('success'), + ]) + ->filters([ + // + ]) + ->recordActions([ + EditAction::make()->iconButton(), + ]); + } +} diff --git a/app/Filament/Resources/MailVorlages/MailVorlageResource.php b/app/Filament/Resources/MailVorlages/MailVorlageResource.php index 8b3a824..f689c41 100644 --- a/app/Filament/Resources/MailVorlages/MailVorlageResource.php +++ b/app/Filament/Resources/MailVorlages/MailVorlageResource.php @@ -17,9 +17,11 @@ class MailVorlageResource extends Resource { protected static ?string $model = MailVorlage::class; + protected static ?int $navigationSort = 3; + protected static ?string $cluster = NewsletterCluster::class; - protected static string|BackedEnum|null $navigationIcon = Heroicon::OutlinedRectangleStack; + protected static string|BackedEnum|null $navigationIcon = Heroicon::OutlinedDocumentText; protected static ?string $navigationLabel = 'Mail Vorlagen'; diff --git a/app/Filament/Resources/MailVorlages/Pages/ListMailVorlages.php b/app/Filament/Resources/MailVorlages/Pages/ListMailVorlages.php index f55470f..b1c0278 100644 --- a/app/Filament/Resources/MailVorlages/Pages/ListMailVorlages.php +++ b/app/Filament/Resources/MailVorlages/Pages/ListMailVorlages.php @@ -10,6 +10,11 @@ class ListMailVorlages extends ListRecords { protected static string $resource = MailVorlageResource::class; + // protected function getTableRecordsPerPageSelectOptions(): array + // { + // return [1]; + // } + protected function getHeaderActions(): array { return [ diff --git a/app/Filament/Resources/MailVorlages/Schemas/MailVorlageForm.php b/app/Filament/Resources/MailVorlages/Schemas/MailVorlageForm.php index c7c93d5..c771e9e 100644 --- a/app/Filament/Resources/MailVorlages/Schemas/MailVorlageForm.php +++ b/app/Filament/Resources/MailVorlages/Schemas/MailVorlageForm.php @@ -5,6 +5,7 @@ namespace App\Filament\Resources\MailVorlages\Schemas; use Filament\Forms\Components\RichEditor; use Filament\Forms\Components\TextInput; use Filament\Schemas\Schema; +use Illuminate\Support\HtmlString; class MailVorlageForm { @@ -14,9 +15,9 @@ class MailVorlageForm ->components([ TextInput::make('titel')->suffix('Nur zur Kennung'), RichEditor::make('inhalt') - ->belowContent('Im Text konnen Vornamen und Nachnamen des Empfängers mit den Platzhaltern ###vorname### und ###nachname### ersetzen werden. Für die Anrede ###anrede### wird je nach Geschlecht "Sehr geehrte Frau" oder "Sehr geehrter Herr" verwended. Ansonnsten einfach "Hallo" verwenden.') + ->belowContent(new HtmlString('