This commit is contained in:
salam committed 2025-09-23 16:04:31 +02:00
1 parent 0b1a1493b2
commit 527739b996
20 files changed
+546

No files matched your search

+41
View File
@@ -0,0 +1,41 @@
<?php
namespace App\Enums;
use Filament\Support\Contracts\HasColor;
use Filament\Support\Contracts\HasIcon;
use Filament\Support\Contracts\HasLabel;
enum ProkektStatus: string implements HasColor, HasIcon, HasLabel
{
case TEST = 'test';
case ENTWURF = 'entwurf';
case ENFASSUNG = 'endfassung';
public function getLabel(): ?string
{
return match ($this) {
self::TEST => 'Test',
self::ENTWURF => 'Entwurf',
self::ENFASSUNG => 'Endfassung',
};
}
public function getColor(): string|array|null
{
return match ($this) {
self::TEST => 'gray',
self::ENTWURF => 'primary',
self::ENFASSUNG => 'success',
};
}
public function getIcon(): ?string
{
return match ($this) {
self::TEST => 'lucide-file-cog',
self::ENTWURF => 'lucide-file-pen',
self::ENFASSUNG => 'lucide-file-check',
};
}
}
@@ -0,0 +1,14 @@
<?php
namespace App\Filament\Clusters\Projekte;
use BackedEnum;
use Filament\Clusters\Cluster;
use Filament\Pages\Enums\SubNavigationPosition;
class ProjekteCluster extends Cluster
{
protected static string|BackedEnum|null $navigationIcon = 'lucide-drafting-compass';
protected static ?SubNavigationPosition $subNavigationPosition = SubNavigationPosition::Start;
}
@@ -0,0 +1,66 @@
<?php
namespace App\Filament\Resources\Methodes;
use App\Filament\Clusters\Administration\AdministrationCluster;
use App\Filament\Resources\Methodes\Pages\CreateMethode;
use App\Filament\Resources\Methodes\Pages\EditMethode;
use App\Filament\Resources\Methodes\Pages\ListMethodes;
use App\Filament\Resources\Methodes\Schemas\MethodeForm;
use App\Filament\Resources\Methodes\Tables\MethodesTable;
use App\Models\Methode;
use BackedEnum;
use Filament\Resources\Resource;
use Filament\Schemas\Schema;
use Filament\Tables\Table;
use UnitEnum;
class MethodeResource extends Resource
{
protected static ?string $model = Methode::class;
protected static ?string $cluster = AdministrationCluster::class;
protected static string|UnitEnum|null $navigationGroup = 'Programm';
protected static string|BackedEnum|null $navigationIcon = 'lucide-calculator';
protected static ?string $recordTitleAttribute = 'name';
protected static ?string $navigationLabel = 'Methode';
protected static ?string $modelLabel = 'Methode';
protected static ?string $pluralModelLabel = 'Methoden';
public static function form(Schema $schema): Schema
{
return MethodeForm::configure($schema);
}
public static function table(Table $table): Table
{
return MethodesTable::configure($table);
}
public static function getRelations(): array
{
return [
//
];
}
public static function getPages(): array
{
return [
'index' => ListMethodes::route('/'),
'create' => CreateMethode::route('/create'),
'edit' => EditMethode::route('/{record}/edit'),
];
}
public static function getNavigationBadge(): ?string
{
return parent::getEloquentQuery()->count();
}
}
@@ -0,0 +1,11 @@
<?php
namespace App\Filament\Resources\Methodes\Pages;
use App\Filament\Resources\Methodes\MethodeResource;
use Filament\Resources\Pages\CreateRecord;
class CreateMethode extends CreateRecord
{
protected static string $resource = MethodeResource::class;
}
@@ -0,0 +1,19 @@
<?php
namespace App\Filament\Resources\Methodes\Pages;
use App\Filament\Resources\Methodes\MethodeResource;
use Filament\Actions\DeleteAction;
use Filament\Resources\Pages\EditRecord;
class EditMethode extends EditRecord
{
protected static string $resource = MethodeResource::class;
protected function getHeaderActions(): array
{
return [
DeleteAction::make(),
];
}
}
@@ -0,0 +1,19 @@
<?php
namespace App\Filament\Resources\Methodes\Pages;
use App\Filament\Resources\Methodes\MethodeResource;
use Filament\Actions\CreateAction;
use Filament\Resources\Pages\ListRecords;
class ListMethodes extends ListRecords
{
protected static string $resource = MethodeResource::class;
protected function getHeaderActions(): array
{
return [
CreateAction::make(),
];
}
}
@@ -0,0 +1,16 @@
<?php
namespace App\Filament\Resources\Methodes\Schemas;
use Filament\Schemas\Schema;
class MethodeForm
{
public static function configure(Schema $schema): Schema
{
return $schema
->components([
//
]);
}
}
@@ -0,0 +1,30 @@
<?php
namespace App\Filament\Resources\Methodes\Tables;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
use Filament\Actions\EditAction;
use Filament\Tables\Table;
class MethodesTable
{
public static function configure(Table $table): Table
{
return $table
->columns([
//
])
->filters([
//
])
->recordActions([
EditAction::make(),
])
->toolbarActions([
BulkActionGroup::make([
DeleteBulkAction::make(),
]),
]);
}
}
@@ -0,0 +1,11 @@
<?php
namespace App\Filament\Resources\Projektes\Pages;
use App\Filament\Resources\Projektes\ProjekteResource;
use Filament\Resources\Pages\CreateRecord;
class CreateProjekte extends CreateRecord
{
protected static string $resource = ProjekteResource::class;
}
@@ -0,0 +1,19 @@
<?php
namespace App\Filament\Resources\Projektes\Pages;
use App\Filament\Resources\Projektes\ProjekteResource;
use Filament\Actions\DeleteAction;
use Filament\Resources\Pages\EditRecord;
class EditProjekte extends EditRecord
{
protected static string $resource = ProjekteResource::class;
protected function getHeaderActions(): array
{
return [
DeleteAction::make(),
];
}
}
@@ -0,0 +1,19 @@
<?php
namespace App\Filament\Resources\Projektes\Pages;
use App\Filament\Resources\Projektes\ProjekteResource;
use Filament\Actions\CreateAction;
use Filament\Resources\Pages\ListRecords;
class ListProjektes extends ListRecords
{
protected static string $resource = ProjekteResource::class;
protected function getHeaderActions(): array
{
return [
CreateAction::make(),
];
}
}
@@ -0,0 +1,63 @@
<?php
namespace App\Filament\Resources\Projektes;
use App\Filament\Clusters\Projekte\ProjekteCluster;
use App\Filament\Resources\Projektes\Pages\CreateProjekte;
use App\Filament\Resources\Projektes\Pages\EditProjekte;
use App\Filament\Resources\Projektes\Pages\ListProjektes;
use App\Filament\Resources\Projektes\Schemas\ProjekteForm;
use App\Filament\Resources\Projektes\Tables\ProjektesTable;
use App\Models\Projekte;
use BackedEnum;
use Filament\Resources\Resource;
use Filament\Schemas\Schema;
use Filament\Tables\Table;
class ProjekteResource extends Resource
{
protected static ?string $model = Projekte::class;
protected static string|BackedEnum|null $navigationIcon = 'lucide-drafting-compass';
protected static ?string $cluster = ProjekteCluster::class;
protected static ?string $recordTitleAttribute = 'interner_name';
protected static ?string $navigationLabel = 'Projekte';
protected static ?string $modelLabel = 'Projekte';
protected static ?string $pluralModelLabel = 'Projekte';
public static function form(Schema $schema): Schema
{
return ProjekteForm::configure($schema);
}
public static function table(Table $table): Table
{
return ProjektesTable::configure($table);
}
public static function getRelations(): array
{
return [
//
];
}
public static function getPages(): array
{
return [
'index' => ListProjektes::route('/'),
'create' => CreateProjekte::route('/create'),
'edit' => EditProjekte::route('/{record}/edit'),
];
}
public static function getNavigationBadge(): ?string
{
return parent::getEloquentQuery()->count();
}
}
@@ -0,0 +1,16 @@
<?php
namespace App\Filament\Resources\Projektes\Schemas;
use Filament\Schemas\Schema;
class ProjekteForm
{
public static function configure(Schema $schema): Schema
{
return $schema
->components([
//
]);
}
}
@@ -0,0 +1,30 @@
<?php
namespace App\Filament\Resources\Projektes\Tables;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
use Filament\Actions\EditAction;
use Filament\Tables\Table;
class ProjektesTable
{
public static function configure(Table $table): Table
{
return $table
->columns([
//
])
->filters([
//
])
->recordActions([
EditAction::make(),
])
->toolbarActions([
BulkActionGroup::make([
DeleteBulkAction::make(),
]),
]);
}
}
+10
View File
@@ -0,0 +1,10 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Methode extends Model
{
//
}
+10
View File
@@ -0,0 +1,10 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Projekte extends Model
{
//
}
+70
View File
@@ -0,0 +1,70 @@
<?php
declare(strict_types=1);
namespace App\Policies;
use Illuminate\Foundation\Auth\User as AuthUser;
use App\Models\Projekte;
use Illuminate\Auth\Access\HandlesAuthorization;
class ProjektePolicy
{
use HandlesAuthorization;
public function viewAny(AuthUser $authUser): bool
{
return $authUser->can('ViewAny:Projekte');
}
public function view(AuthUser $authUser, Projekte $projekte): bool
{
return $authUser->can('View:Projekte');
}
public function create(AuthUser $authUser): bool
{
return $authUser->can('Create:Projekte');
}
public function update(AuthUser $authUser, Projekte $projekte): bool
{
return $authUser->can('Update:Projekte');
}
public function delete(AuthUser $authUser, Projekte $projekte): bool
{
return $authUser->can('Delete:Projekte');
}
public function restore(AuthUser $authUser, Projekte $projekte): bool
{
return $authUser->can('Restore:Projekte');
}
public function forceDelete(AuthUser $authUser, Projekte $projekte): bool
{
return $authUser->can('ForceDelete:Projekte');
}
public function forceDeleteAny(AuthUser $authUser): bool
{
return $authUser->can('ForceDeleteAny:Projekte');
}
public function restoreAny(AuthUser $authUser): bool
{
return $authUser->can('RestoreAny:Projekte');
}
public function replicate(AuthUser $authUser, Projekte $projekte): bool
{
return $authUser->can('Replicate:Projekte');
}
public function reorder(AuthUser $authUser): bool
{
return $authUser->can('Reorder:Projekte');
}
}
@@ -0,0 +1,29 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('methodes', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('description');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('methodes');
}
};
@@ -0,0 +1,36 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('projektes', function (Blueprint $table) {
$table->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');
}
};
+17
View File
@@ -0,0 +1,17 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class MethodeSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
//
}
}