diff --git a/app/Filament/Resources/Auftraggebers/Pages/ListAuftraggebers.php b/app/Filament/Resources/Auftraggebers/Pages/ListAuftraggebers.php index e8dde24..4d8c63b 100644 --- a/app/Filament/Resources/Auftraggebers/Pages/ListAuftraggebers.php +++ b/app/Filament/Resources/Auftraggebers/Pages/ListAuftraggebers.php @@ -13,7 +13,7 @@ class ListAuftraggebers extends ListRecords protected function getHeaderActions(): array { return [ - CreateAction::make(), + CreateAction::make()->createAnother(false), ]; } } diff --git a/app/Filament/Resources/Gutachters/Pages/ListGutachters.php b/app/Filament/Resources/Gutachters/Pages/ListGutachters.php index a0570bd..72de18c 100644 --- a/app/Filament/Resources/Gutachters/Pages/ListGutachters.php +++ b/app/Filament/Resources/Gutachters/Pages/ListGutachters.php @@ -13,7 +13,7 @@ class ListGutachters extends ListRecords protected function getHeaderActions(): array { return [ - CreateAction::make(), + CreateAction::make()->createAnother(false), ]; } } diff --git a/app/Filament/Resources/Projektes/Pages/ListProjektes.php b/app/Filament/Resources/Projektes/Pages/ListProjektes.php index d3a4974..ca01612 100644 --- a/app/Filament/Resources/Projektes/Pages/ListProjektes.php +++ b/app/Filament/Resources/Projektes/Pages/ListProjektes.php @@ -13,7 +13,13 @@ class ListProjektes extends ListRecords protected function getHeaderActions(): array { return [ - CreateAction::make(), + CreateAction::make() + ->createAnother(false) + ->mutateDataUsing(function (array $data): array { + $data['konto_id'] = auth()->user()->konto_id; + + return $data; + }), ]; } } diff --git a/app/Filament/Resources/Projektes/ProjekteResource.php b/app/Filament/Resources/Projektes/ProjekteResource.php index 44a5652..c3c1a2c 100644 --- a/app/Filament/Resources/Projektes/ProjekteResource.php +++ b/app/Filament/Resources/Projektes/ProjekteResource.php @@ -14,6 +14,7 @@ use Filament\Resources\Resource; use Filament\Schemas\Schema; use Filament\Support\Icons\Heroicon; use Filament\Tables\Table; +use Illuminate\Database\Eloquent\Builder; class ProjekteResource extends Resource { @@ -53,12 +54,17 @@ class ProjekteResource extends Resource return [ 'index' => ListProjektes::route('/'), // 'create' => CreateProjekte::route('/create'), - // 'edit' => EditProjekte::route('/{record}/edit'), + 'edit' => EditProjekte::route('/{record}/edit'), ]; } + public static function getEloquentQuery(): Builder + { + return parent::getEloquentQuery()->where('konto_id', auth()->user()->konto_id); + } + public static function getNavigationBadge(): ?string { - return parent::getEloquentQuery()->count(); + return parent::getEloquentQuery()->where('konto_id', auth()->user()->konto_id)->count(); } } diff --git a/app/Filament/Resources/Projektes/Schemas/ProjekteForm.php b/app/Filament/Resources/Projektes/Schemas/ProjekteForm.php index 6a47d82..022174c 100644 --- a/app/Filament/Resources/Projektes/Schemas/ProjekteForm.php +++ b/app/Filament/Resources/Projektes/Schemas/ProjekteForm.php @@ -5,9 +5,10 @@ namespace App\Filament\Resources\Projektes\Schemas; use App\Enums\ProjektStatus; use Filament\Forms\Components\DatePicker; use Filament\Forms\Components\Radio; +use Filament\Forms\Components\RichEditor; use Filament\Forms\Components\Select; -use Filament\Forms\Components\Textarea; use Filament\Forms\Components\TextInput; +use Filament\Schemas\Components\Section; use Filament\Schemas\Schema; class ProjekteForm @@ -16,13 +17,25 @@ class ProjekteForm { return $schema ->components([ - Select::make('auftraggeber_id')->relationship(name: 'auftraggeber', titleAttribute: 'name'), - Select::make('gutachter_id')->relationship(name: 'gutachter', titleAttribute: 'name'), - Radio::make('status')->options(ProjektStatus::class), - TextInput::make('interner_name'), - TextInput::make('ofizieller_name'), - Textarea::make('beschreibung'), - DatePicker::make('erstellung')->helperText('Datum am Gutachten'), + Section::make('Benennung') + ->schema([ + TextInput::make('interner_name')->columns(1)->label('Interner Name')->required(), + TextInput::make('offizieller_name')->columns(1)->label('Offizieller Name')->required(), + DatePicker::make('erstellung')->helperText('Datum am Gutachten')->required(), + ]), + Section::make('Zuordnung') + ->schema([ + Select::make('auftraggeber_id')->relationship(name: 'auftraggeber', titleAttribute: 'name')->required(), + Select::make('gutachter_id')->relationship(name: 'gutachter', titleAttribute: 'name')->required(), + Radio::make('status')->options(ProjektStatus::class)->required(), + ]), + RichEditor::make('beschreibung') + ->toolbarButtons([ + ['bold', 'italic', 'underline', 'strike', 'subscript', 'superscript', 'link'], + ['h2', 'h3', 'alignStart', 'alignCenter', 'alignEnd'], + ['bulletList', 'orderedList', 'table'], + ['undo', 'redo'], + ])->columnSpanFull(), ]); } } diff --git a/app/Filament/Resources/Projektes/Tables/ProjektesTable.php b/app/Filament/Resources/Projektes/Tables/ProjektesTable.php index 851dcce..661e5e3 100644 --- a/app/Filament/Resources/Projektes/Tables/ProjektesTable.php +++ b/app/Filament/Resources/Projektes/Tables/ProjektesTable.php @@ -2,9 +2,11 @@ namespace App\Filament\Resources\Projektes\Tables; -use Filament\Actions\BulkActionGroup; -use Filament\Actions\DeleteBulkAction; +use App\Enums\ProjektStatus; use Filament\Actions\EditAction; +use Filament\Tables\Columns\SelectColumn; +use Filament\Tables\Columns\TextColumn; +use Filament\Tables\Filters\SelectFilter; use Filament\Tables\Table; class ProjektesTable @@ -13,18 +15,30 @@ class ProjektesTable { return $table ->columns([ - // + TextColumn::make('interner_name') + ->label('Interner Name') + ->badge() + ->color('info') + ->searchable(), + TextColumn::make('offizieller_name') + ->searchable() + ->label('Offizieller Name'), + TextColumn::make('gutachter.company'), + TextColumn::make('auftraggeber.company'), + TextColumn::make('erstellung'), + SelectColumn::make('status')->options(ProjektStatus::class), + ]) ->filters([ - // + SelectFilter::make('status') + ->options(ProjektStatus::class), + SelectFilter::make('gutachter') + ->relationship('gutachter', 'company'), + SelectFilter::make('auftraggeber') + ->relationship('auftraggeber', 'company'), ]) ->recordActions([ - EditAction::make(), - ]) - ->toolbarActions([ - BulkActionGroup::make([ - DeleteBulkAction::make(), - ]), + EditAction::make()->iconButton()->color('gray'), ]); } } diff --git a/app/Models/Auftraggeber.php b/app/Models/Auftraggeber.php index 44f2522..58676db 100644 --- a/app/Models/Auftraggeber.php +++ b/app/Models/Auftraggeber.php @@ -2,6 +2,7 @@ namespace App\Models; +use App\Models\Scopes\KontoScope; use Database\Factories\AuftraggeberFactory; use Illuminate\Database\Eloquent\Factories\Factory; use Illuminate\Database\Eloquent\Factories\HasFactory; @@ -36,6 +37,11 @@ class Auftraggeber extends Model ]; } + protected static function booted(): void + { + static::addGlobalScope(new KontoScope); + } + protected static function newFactory(): Factory { return AuftraggeberFactory::new(); diff --git a/app/Models/Projekt.php b/app/Models/Projekt.php deleted file mode 100644 index de2f494..0000000 --- a/app/Models/Projekt.php +++ /dev/null @@ -1,29 +0,0 @@ -belongsTo(Auftraggeber::class); - } - - public function gutachter() - { - return $this->belongsTo(Gutachter::class); - } -} diff --git a/app/Models/Projekte.php b/app/Models/Projekte.php index 7a33dbb..b327995 100644 --- a/app/Models/Projekte.php +++ b/app/Models/Projekte.php @@ -6,6 +6,17 @@ use Illuminate\Database\Eloquent\Model; class Projekte extends Model { + protected $fillable = [ + 'konto_id', + 'auftraggeber_id', + 'gutachter_id', + 'offizieller_name', + 'interner_name', + 'beschreibung', + 'erstellung', + 'status', + ]; + public function auftraggeber() { return $this->belongsTo(Auftraggeber::class); diff --git a/database/migrations/2025_11_23_131440_create_projektes_table.php b/database/migrations/2025_11_23_131440_create_projektes_table.php deleted file mode 100644 index 384529d..0000000 --- a/database/migrations/2025_11_23_131440_create_projektes_table.php +++ /dev/null @@ -1,36 +0,0 @@ -id(); - $table->foreignId('konto_id')->constrained(); - $table->foreignId('auftraggeber_id')->constrained(); - $table->foreignId('gutachter_id')->constrained(); - $table->string('interner_name'); - $table->string('ofizieller_name'); - $table->text('beschreibung')->nullable(); - $table->string('erstellung')->nullable(); - $table->string('status')->default('entwurf'); - $table->timestamps(); - $table->softDeletes(); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('projektes'); - } -}; diff --git a/database/migrations/2025_11_23_131440_create_projekts_table.php b/database/migrations/2025_11_23_131440_create_projekts_table.php index e76a8ed..5af4861 100644 --- a/database/migrations/2025_11_23_131440_create_projekts_table.php +++ b/database/migrations/2025_11_23_131440_create_projekts_table.php @@ -17,7 +17,7 @@ return new class extends Migration $table->foreignId('auftraggeber_id')->constrained(); $table->foreignId('gutachter_id')->constrained(); $table->string('interner_name'); - $table->string('ofizieller_name'); + $table->string('offizieller_name'); $table->text('beschreibung')->nullable(); $table->string('erstellung')->nullable(); $table->string('status')->default('entwurf');