From e5ea9205795e6fd5e98e5c21926030be48e98dbc Mon Sep 17 00:00:00 2001 From: salam Date: Mon, 22 Sep 2025 10:02:08 +0200 Subject: [PATCH] konto optionen --- Erweiterungen.md | 4 ++ .../KontoOptions/KontoOptionResource.php | 61 ++++++++++++++++ .../KontoOptions/Pages/CreateKontoOption.php | 11 +++ .../KontoOptions/Pages/EditKontoOption.php | 19 +++++ .../KontoOptions/Pages/ListKontoOptions.php | 19 +++++ .../Schemas/KontoOptionForm.php} | 4 +- .../Tables/KontoOptionTable.php} | 14 ++-- .../Kontooptionens/KontooptionenResource.php | 61 ---------------- .../Pages/CreateKontooptionen.php | 11 --- .../Pages/EditKontooptionen.php | 19 ----- .../Pages/ListKontooptionens.php | 19 ----- .../Resources/Kontos/Tables/KontosTable.php | 5 +- .../Permissions/PermissionResource.php | 2 +- app/Models/Konto.php | 15 ++-- app/Models/KontoOption.php | 14 ++++ .../{Kontooptionen.php => PaymentPlan.php} | 2 +- app/Policies/KontoOptionPolicy.php | 70 +++++++++++++++++++ app/Policies/KontooptionenPolicy.php | 45 ++++++------ ...0001_01_01_000000__create_kontos_table.php | 1 + ...9_06_143006_create_konto_option_table.php} | 5 +- ...09_22_070431_create_payment_plan_table.php | 29 ++++++++ database/seeders/DatabaseSeeder.php | 2 +- database/seeders/KontoOptionSeeder.php | 31 ++++++++ database/seeders/KontooptionenSeeder.php | 22 ------ .../filament-shield/de/filament-shield.php | 2 +- 25 files changed, 309 insertions(+), 178 deletions(-) create mode 100644 app/Filament/Resources/KontoOptions/KontoOptionResource.php create mode 100644 app/Filament/Resources/KontoOptions/Pages/CreateKontoOption.php create mode 100644 app/Filament/Resources/KontoOptions/Pages/EditKontoOption.php create mode 100644 app/Filament/Resources/KontoOptions/Pages/ListKontoOptions.php rename app/Filament/Resources/{Kontooptionens/Schemas/KontooptionenForm.php => KontoOptions/Schemas/KontoOptionForm.php} (71%) rename app/Filament/Resources/{Kontooptionens/Tables/KontooptionensTable.php => KontoOptions/Tables/KontoOptionTable.php} (65%) delete mode 100644 app/Filament/Resources/Kontooptionens/KontooptionenResource.php delete mode 100644 app/Filament/Resources/Kontooptionens/Pages/CreateKontooptionen.php delete mode 100644 app/Filament/Resources/Kontooptionens/Pages/EditKontooptionen.php delete mode 100644 app/Filament/Resources/Kontooptionens/Pages/ListKontooptionens.php create mode 100644 app/Models/KontoOption.php rename app/Models/{Kontooptionen.php => PaymentPlan.php} (70%) create mode 100644 app/Policies/KontoOptionPolicy.php rename database/migrations/{2025_09_06_143006_create_kontooptionens_table.php => 2025_09_06_143006_create_konto_option_table.php} (78%) create mode 100644 database/migrations/2025_09_22_070431_create_payment_plan_table.php create mode 100644 database/seeders/KontoOptionSeeder.php delete mode 100644 database/seeders/KontooptionenSeeder.php diff --git a/Erweiterungen.md b/Erweiterungen.md index 018b3f3..766be6f 100644 --- a/Erweiterungen.md +++ b/Erweiterungen.md @@ -15,3 +15,7 @@ FILAMENT 6. https://packagist.org/packages/swisnl/filament-backgrounds 1. https://filamentphp.com/plugins/maartenpaauw-cashier-billing-provider + + +https://github.com/mollie/laravel-cashier-mollie +https://www.cashiermollie.com/ \ No newline at end of file diff --git a/app/Filament/Resources/KontoOptions/KontoOptionResource.php b/app/Filament/Resources/KontoOptions/KontoOptionResource.php new file mode 100644 index 0000000..8eb7017 --- /dev/null +++ b/app/Filament/Resources/KontoOptions/KontoOptionResource.php @@ -0,0 +1,61 @@ + ListKontoOptions::route('/'), + 'create' => CreateKontoOption::route('/create'), + 'edit' => EditKontoOption::route('/{record}/edit'), + ]; + } + + public static function getNavigationBadge(): ?string + { + return parent::getEloquentQuery()->count(); + } +} diff --git a/app/Filament/Resources/KontoOptions/Pages/CreateKontoOption.php b/app/Filament/Resources/KontoOptions/Pages/CreateKontoOption.php new file mode 100644 index 0000000..6c760b6 --- /dev/null +++ b/app/Filament/Resources/KontoOptions/Pages/CreateKontoOption.php @@ -0,0 +1,11 @@ +columns([ - TextColumn::make('name')->description(fn ($record): string => $record->description), - TextColumn::make('number_user')->alignCenter()->badge(), - TextColumn::make('number_gutachter')->alignCenter()->badge(), + TextColumn::make('name') + ->description(fn ($record): string => $record->description) + ->wrap(), + TextColumn::make('payment_plan.name') + ->label('Zahlung'), + TextColumn::make('number_user')->alignCenter()->badge()->label('Benutzer'), + TextColumn::make('number_gutachter')->alignCenter()->badge()->label('Gutachter'), ]) ->filters([ // diff --git a/app/Filament/Resources/Kontooptionens/KontooptionenResource.php b/app/Filament/Resources/Kontooptionens/KontooptionenResource.php deleted file mode 100644 index 1332fd3..0000000 --- a/app/Filament/Resources/Kontooptionens/KontooptionenResource.php +++ /dev/null @@ -1,61 +0,0 @@ - ListKontooptionens::route('/'), - 'create' => CreateKontooptionen::route('/create'), - 'edit' => EditKontooptionen::route('/{record}/edit'), - ]; - } - - public static function getNavigationBadge(): ?string - { - return parent::getEloquentQuery()->count(); - } -} diff --git a/app/Filament/Resources/Kontooptionens/Pages/CreateKontooptionen.php b/app/Filament/Resources/Kontooptionens/Pages/CreateKontooptionen.php deleted file mode 100644 index 74e297e..0000000 --- a/app/Filament/Resources/Kontooptionens/Pages/CreateKontooptionen.php +++ /dev/null @@ -1,11 +0,0 @@ -label('Geschlecht'), // TextColumn::make('konto_title')->label('Title'), // TextColumn::make('konto_first_name')->label('Vorname'), - // TextColumn::make('konto_last_name')->label('Nachname'), + TextColumn::make('konto_option.name') + ->badge() + ->label('Plan') + ->description(fn ($record): string => $record->konto_option->payment_plan->name), TextColumn::make('konto_company')->label('Firma'), IconColumn::make('konto_agb_akzeptiert') ->label('AGB') diff --git a/app/Filament/Resources/Permissions/PermissionResource.php b/app/Filament/Resources/Permissions/PermissionResource.php index fabae1f..18e23ae 100644 --- a/app/Filament/Resources/Permissions/PermissionResource.php +++ b/app/Filament/Resources/Permissions/PermissionResource.php @@ -20,7 +20,7 @@ class PermissionResource extends Resource protected static string|BackedEnum|null $navigationIcon = 'lucide-toggle-right'; - protected static string|UnitEnum|null $navigationGroup = 'Interne Administration'; + protected static string|UnitEnum|null $navigationGroup = 'Administration'; protected static ?string $recordTitleAttribute = 'name'; diff --git a/app/Models/Konto.php b/app/Models/Konto.php index 1afe3f7..7ea6a0a 100644 --- a/app/Models/Konto.php +++ b/app/Models/Konto.php @@ -2,8 +2,8 @@ namespace App\Models; -use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\HasOne; class Konto extends Model { @@ -26,14 +26,11 @@ class Konto extends Model 'konto_phone', 'konto_uid_number', 'konto_agb_akzeptiert', + 'konto_option_id', ]; - // protected static function booted(): void - // { - // static::addGlobalScope('konto', function (Builder $query) { - // if (auth()->hasUser()) { - // $query->where('id', auth()->user()->konto_id); - // } - // }); - // } + public function konto_option(): HasOne + { + return $this->hasOne(KontoOption::class, 'id', 'konto_option_id'); + } } diff --git a/app/Models/KontoOption.php b/app/Models/KontoOption.php new file mode 100644 index 0000000..2193624 --- /dev/null +++ b/app/Models/KontoOption.php @@ -0,0 +1,14 @@ +hasOne(PaymentPlan::class, 'id', 'payment_plan_id'); + } +} diff --git a/app/Models/Kontooptionen.php b/app/Models/PaymentPlan.php similarity index 70% rename from app/Models/Kontooptionen.php rename to app/Models/PaymentPlan.php index 8d50929..83a27b1 100644 --- a/app/Models/Kontooptionen.php +++ b/app/Models/PaymentPlan.php @@ -4,7 +4,7 @@ namespace App\Models; use Illuminate\Database\Eloquent\Model; -class Kontooptionen extends Model +class PaymentPlan extends Model { // } diff --git a/app/Policies/KontoOptionPolicy.php b/app/Policies/KontoOptionPolicy.php new file mode 100644 index 0000000..79c1842 --- /dev/null +++ b/app/Policies/KontoOptionPolicy.php @@ -0,0 +1,70 @@ +can('ViewAny:KontoOption'); + } + + public function view(AuthUser $authUser, KontoOption $kontoOption): bool + { + return $authUser->can('View:KontoOption'); + } + + public function create(AuthUser $authUser): bool + { + return $authUser->can('Create:KontoOption'); + } + + public function update(AuthUser $authUser, KontoOption $kontoOption): bool + { + return $authUser->can('Update:KontoOption'); + } + + public function delete(AuthUser $authUser, KontoOption $kontoOption): bool + { + return $authUser->can('Delete:KontoOption'); + } + + public function restore(AuthUser $authUser, KontoOption $kontoOption): bool + { + return $authUser->can('Restore:KontoOption'); + } + + public function forceDelete(AuthUser $authUser, KontoOption $kontoOption): bool + { + return $authUser->can('ForceDelete:KontoOption'); + } + + public function forceDeleteAny(AuthUser $authUser): bool + { + return $authUser->can('ForceDeleteAny:KontoOption'); + } + + public function restoreAny(AuthUser $authUser): bool + { + return $authUser->can('RestoreAny:KontoOption'); + } + + public function replicate(AuthUser $authUser, KontoOption $kontoOption): bool + { + return $authUser->can('Replicate:KontoOption'); + } + + public function reorder(AuthUser $authUser): bool + { + return $authUser->can('Reorder:KontoOption'); + } + +} \ No newline at end of file diff --git a/app/Policies/KontooptionenPolicy.php b/app/Policies/KontooptionenPolicy.php index a9c4e1d..7411ee6 100644 --- a/app/Policies/KontooptionenPolicy.php +++ b/app/Policies/KontooptionenPolicy.php @@ -4,67 +4,66 @@ declare(strict_types=1); namespace App\Policies; -use Illuminate\Foundation\Auth\User as AuthUser; -use App\Models\Kontooptionen; +use App\Models\KontoOption; use Illuminate\Auth\Access\HandlesAuthorization; +use Illuminate\Foundation\Auth\User as AuthUser; -class KontooptionenPolicy +class KontoOptionPolicy { use HandlesAuthorization; - + public function viewAny(AuthUser $authUser): bool { - return $authUser->can('ViewAny:Kontooptionen'); + return $authUser->can('ViewAny:KontoOption'); } - public function view(AuthUser $authUser, Kontooptionen $kontooptionen): bool + public function view(AuthUser $authUser, KontoOption $kontooptionen): bool { - return $authUser->can('View:Kontooptionen'); + return $authUser->can('View:KontoOption'); } public function create(AuthUser $authUser): bool { - return $authUser->can('Create:Kontooptionen'); + return $authUser->can('Create:KontoOption'); } - public function update(AuthUser $authUser, Kontooptionen $kontooptionen): bool + public function update(AuthUser $authUser, KontoOption $kontooptionen): bool { - return $authUser->can('Update:Kontooptionen'); + return $authUser->can('Update:KontoOption'); } - public function delete(AuthUser $authUser, Kontooptionen $kontooptionen): bool + public function delete(AuthUser $authUser, KontoOption $kontooptionen): bool { - return $authUser->can('Delete:Kontooptionen'); + return $authUser->can('Delete:KontoOption'); } - public function restore(AuthUser $authUser, Kontooptionen $kontooptionen): bool + public function restore(AuthUser $authUser, KontoOption $kontooptionen): bool { - return $authUser->can('Restore:Kontooptionen'); + return $authUser->can('Restore:KontoOption'); } - public function forceDelete(AuthUser $authUser, Kontooptionen $kontooptionen): bool + public function forceDelete(AuthUser $authUser, KontoOption $kontooptionen): bool { - return $authUser->can('ForceDelete:Kontooptionen'); + return $authUser->can('ForceDelete:KontoOption'); } public function forceDeleteAny(AuthUser $authUser): bool { - return $authUser->can('ForceDeleteAny:Kontooptionen'); + return $authUser->can('ForceDeleteAny:KontoOption'); } public function restoreAny(AuthUser $authUser): bool { - return $authUser->can('RestoreAny:Kontooptionen'); + return $authUser->can('RestoreAny:KontoOption'); } - public function replicate(AuthUser $authUser, Kontooptionen $kontooptionen): bool + public function replicate(AuthUser $authUser, KontoOption $kontooptionen): bool { - return $authUser->can('Replicate:Kontooptionen'); + return $authUser->can('Replicate:KontoOption'); } public function reorder(AuthUser $authUser): bool { - return $authUser->can('Reorder:Kontooptionen'); + return $authUser->can('Reorder:KontoOption'); } - -} \ No newline at end of file +} diff --git a/database/migrations/0001_01_01_000000__create_kontos_table.php b/database/migrations/0001_01_01_000000__create_kontos_table.php index 35932b4..6ade294 100644 --- a/database/migrations/0001_01_01_000000__create_kontos_table.php +++ b/database/migrations/0001_01_01_000000__create_kontos_table.php @@ -25,6 +25,7 @@ return new class extends Migration $table->string('konto_country')->nullable(); $table->string('konto_phone')->nullable(); $table->string('konto_uid_number')->nullable(); + $table->string('konto_option_id')->default(1); $table->boolean('konto_agb_akzeptiert')->default(false); $table->timestamps(); }); diff --git a/database/migrations/2025_09_06_143006_create_kontooptionens_table.php b/database/migrations/2025_09_06_143006_create_konto_option_table.php similarity index 78% rename from database/migrations/2025_09_06_143006_create_kontooptionens_table.php rename to database/migrations/2025_09_06_143006_create_konto_option_table.php index dc6028c..c48d2a5 100644 --- a/database/migrations/2025_09_06_143006_create_kontooptionens_table.php +++ b/database/migrations/2025_09_06_143006_create_konto_option_table.php @@ -11,12 +11,13 @@ return new class extends Migration */ public function up(): void { - Schema::create('kontooptionens', function (Blueprint $table) { + Schema::create('konto_options', function (Blueprint $table) { $table->id(); $table->string('name')->nullable(); $table->string('description')->nullable(); $table->integer('number_user')->default(1); $table->integer('number_gutachter')->default(1); + $table->integer('payment_plan_id')->default(1); $table->timestamps(); }); } @@ -26,6 +27,6 @@ return new class extends Migration */ public function down(): void { - Schema::dropIfExists('kontooptionens'); + Schema::dropIfExists('konto_options'); } }; diff --git a/database/migrations/2025_09_22_070431_create_payment_plan_table.php b/database/migrations/2025_09_22_070431_create_payment_plan_table.php new file mode 100644 index 0000000..97ae4c8 --- /dev/null +++ b/database/migrations/2025_09_22_070431_create_payment_plan_table.php @@ -0,0 +1,29 @@ +id(); + $table->string('name')->nullable(); + $table->string('description')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('payment_plans'); + } +}; diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index e2e7a4f..746603f 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -14,7 +14,7 @@ class DatabaseSeeder extends Seeder $this->call([ KontoSeeder::class, RolesAndPermissionsSeeder::class, - KontooptionenSeeder::class, + KontoOptionSeeder::class, ]); } } diff --git a/database/seeders/KontoOptionSeeder.php b/database/seeders/KontoOptionSeeder.php new file mode 100644 index 0000000..c7dd05c --- /dev/null +++ b/database/seeders/KontoOptionSeeder.php @@ -0,0 +1,31 @@ + 'Interne Administration', + 'nav.group' => 'Administration', 'nav.role.icon' => 'heroicon-o-shield-check', 'nav.role.label' => 'Rollen', 'resource.label.role' => 'Rolle',