konto optionen

This commit is contained in:
salam committed 2025-09-22 10:02:08 +02:00
1 parent 47edd31030
commit e5ea920579
25 files changed
+307 -176

No files matched your search

+4
View File
@@ -15,3 +15,7 @@ FILAMENT
6. https://packagist.org/packages/swisnl/filament-backgrounds 6. https://packagist.org/packages/swisnl/filament-backgrounds
1. https://filamentphp.com/plugins/maartenpaauw-cashier-billing-provider 1. https://filamentphp.com/plugins/maartenpaauw-cashier-billing-provider
https://github.com/mollie/laravel-cashier-mollie
https://www.cashiermollie.com/
@@ -0,0 +1,61 @@
<?php
namespace App\Filament\Resources\KontoOptions;
use App\Filament\Resources\KontoOptions\Pages\CreateKontoOption;
use App\Filament\Resources\KontoOptions\Pages\EditKontoOption;
use App\Filament\Resources\KontoOptions\Pages\ListKontoOptions;
use App\Filament\Resources\KontoOptions\Schemas\KontoOptionForm;
use App\Filament\Resources\KontoOptions\Tables\KontoOptionTable;
use App\Models\KontoOption;
use BackedEnum;
use Filament\Resources\Resource;
use Filament\Schemas\Schema;
use Filament\Tables\Table;
use UnitEnum;
class KontoOptionResource extends Resource
{
protected static ?string $model = KontoOption::class;
protected static string|BackedEnum|null $navigationIcon = 'lucide-key-square';
protected static string|UnitEnum|null $navigationGroup = 'Administration';
protected static ?string $navigationLabel = 'Konto Optionen';
protected static ?string $modelLabel = 'Konto Option';
protected static ?string $pluralModelLabel = 'Konto Optionen';
public static function form(Schema $schema): Schema
{
return KontoOptionForm::configure($schema);
}
public static function table(Table $table): Table
{
return KontoOptionTable::configure($table);
}
public static function getRelations(): array
{
return [
//
];
}
public static function getPages(): array
{
return [
'index' => ListKontoOptions::route('/'),
'create' => CreateKontoOption::route('/create'),
'edit' => EditKontoOption::route('/{record}/edit'),
];
}
public static function getNavigationBadge(): ?string
{
return parent::getEloquentQuery()->count();
}
}
@@ -0,0 +1,11 @@
<?php
namespace App\Filament\Resources\KontoOptions\Pages;
use App\Filament\Resources\KontoOptions\KontoOptionResource;
use Filament\Resources\Pages\CreateRecord;
class CreateKontoOption extends CreateRecord
{
protected static string $resource = KontoOptionResource::class;
}
@@ -0,0 +1,19 @@
<?php
namespace App\Filament\Resources\KontoOptions\Pages;
use App\Filament\Resources\KontoOptions\KontoOptionResource;
use Filament\Actions\DeleteAction;
use Filament\Resources\Pages\EditRecord;
class EditKontoOption extends EditRecord
{
protected static string $resource = KontoOptionResource::class;
protected function getHeaderActions(): array
{
return [
DeleteAction::make(),
];
}
}
@@ -0,0 +1,19 @@
<?php
namespace App\Filament\Resources\KontoOptions\Pages;
use App\Filament\Resources\KontoOptions\KontoOptionResource;
use Filament\Actions\CreateAction;
use Filament\Resources\Pages\ListRecords;
class ListKontoOptions extends ListRecords
{
protected static string $resource = KontoOptionResource::class;
protected function getHeaderActions(): array
{
return [
// CreateAction::make(),
];
}
}
@@ -1,10 +1,10 @@
<?php <?php
namespace App\Filament\Resources\Kontooptionens\Schemas; namespace App\Filament\Resources\KontoOptions\Schemas;
use Filament\Schemas\Schema; use Filament\Schemas\Schema;
class KontooptionenForm class KontoOptionForm
{ {
public static function configure(Schema $schema): Schema public static function configure(Schema $schema): Schema
{ {
@@ -1,6 +1,6 @@
<?php <?php
namespace App\Filament\Resources\Kontooptionens\Tables; namespace App\Filament\Resources\KontoOptions\Tables;
use Filament\Actions\BulkActionGroup; use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction; use Filament\Actions\DeleteBulkAction;
@@ -8,15 +8,19 @@ use Filament\Actions\EditAction;
use Filament\Tables\Columns\TextColumn; use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table; use Filament\Tables\Table;
class KontooptionensTable class KontoOptionTable
{ {
public static function configure(Table $table): Table public static function configure(Table $table): Table
{ {
return $table return $table
->columns([ ->columns([
TextColumn::make('name')->description(fn ($record): string => $record->description), TextColumn::make('name')
TextColumn::make('number_user')->alignCenter()->badge(), ->description(fn ($record): string => $record->description)
TextColumn::make('number_gutachter')->alignCenter()->badge(), ->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([ ->filters([
// //
@@ -1,61 +0,0 @@
<?php
namespace App\Filament\Resources\Kontooptionens;
use App\Filament\Resources\Kontooptionens\Pages\CreateKontooptionen;
use App\Filament\Resources\Kontooptionens\Pages\EditKontooptionen;
use App\Filament\Resources\Kontooptionens\Pages\ListKontooptionens;
use App\Filament\Resources\Kontooptionens\Schemas\KontooptionenForm;
use App\Filament\Resources\Kontooptionens\Tables\KontooptionensTable;
use App\Models\Kontooptionen;
use BackedEnum;
use Filament\Resources\Resource;
use Filament\Schemas\Schema;
use Filament\Tables\Table;
use UnitEnum;
class KontooptionenResource extends Resource
{
protected static ?string $model = Kontooptionen::class;
protected static string|BackedEnum|null $navigationIcon = 'lucide-key-square';
protected static string|UnitEnum|null $navigationGroup = 'Interne Administration';
protected static ?string $navigationLabel = 'Konto Optionen';
protected static ?string $modelLabel = 'Konto Option';
protected static ?string $pluralModelLabel = 'Konto Optionen';
public static function form(Schema $schema): Schema
{
return KontooptionenForm::configure($schema);
}
public static function table(Table $table): Table
{
return KontooptionensTable::configure($table);
}
public static function getRelations(): array
{
return [
//
];
}
public static function getPages(): array
{
return [
'index' => ListKontooptionens::route('/'),
'create' => CreateKontooptionen::route('/create'),
'edit' => EditKontooptionen::route('/{record}/edit'),
];
}
public static function getNavigationBadge(): ?string
{
return parent::getEloquentQuery()->count();
}
}
@@ -1,11 +0,0 @@
<?php
namespace App\Filament\Resources\Kontooptionens\Pages;
use App\Filament\Resources\Kontooptionens\KontooptionenResource;
use Filament\Resources\Pages\CreateRecord;
class CreateKontooptionen extends CreateRecord
{
protected static string $resource = KontooptionenResource::class;
}
@@ -1,19 +0,0 @@
<?php
namespace App\Filament\Resources\Kontooptionens\Pages;
use App\Filament\Resources\Kontooptionens\KontooptionenResource;
use Filament\Actions\DeleteAction;
use Filament\Resources\Pages\EditRecord;
class EditKontooptionen extends EditRecord
{
protected static string $resource = KontooptionenResource::class;
protected function getHeaderActions(): array
{
return [
DeleteAction::make(),
];
}
}
@@ -1,19 +0,0 @@
<?php
namespace App\Filament\Resources\Kontooptionens\Pages;
use App\Filament\Resources\Kontooptionens\KontooptionenResource;
use Filament\Actions\CreateAction;
use Filament\Resources\Pages\ListRecords;
class ListKontooptionens extends ListRecords
{
protected static string $resource = KontooptionenResource::class;
protected function getHeaderActions(): array
{
return [
CreateAction::make(),
];
}
}
@@ -20,7 +20,10 @@ class KontosTable
TextColumn::make('konto_gender')->label('Geschlecht'), TextColumn::make('konto_gender')->label('Geschlecht'),
// TextColumn::make('konto_title')->label('Title'), // TextColumn::make('konto_title')->label('Title'),
// TextColumn::make('konto_first_name')->label('Vorname'), // 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'), TextColumn::make('konto_company')->label('Firma'),
IconColumn::make('konto_agb_akzeptiert') IconColumn::make('konto_agb_akzeptiert')
->label('AGB') ->label('AGB')
@@ -20,7 +20,7 @@ class PermissionResource extends Resource
protected static string|BackedEnum|null $navigationIcon = 'lucide-toggle-right'; 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'; protected static ?string $recordTitleAttribute = 'name';
+6 -9
View File
@@ -2,8 +2,8 @@
namespace App\Models; namespace App\Models;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasOne;
class Konto extends Model class Konto extends Model
{ {
@@ -26,14 +26,11 @@ class Konto extends Model
'konto_phone', 'konto_phone',
'konto_uid_number', 'konto_uid_number',
'konto_agb_akzeptiert', 'konto_agb_akzeptiert',
'konto_option_id',
]; ];
// protected static function booted(): void public function konto_option(): HasOne
// { {
// static::addGlobalScope('konto', function (Builder $query) { return $this->hasOne(KontoOption::class, 'id', 'konto_option_id');
// if (auth()->hasUser()) { }
// $query->where('id', auth()->user()->konto_id);
// }
// });
// }
} }
+14
View File
@@ -0,0 +1,14 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasOne;
class KontoOption extends Model
{
public function payment_plan(): HasOne
{
return $this->hasOne(PaymentPlan::class, 'id', 'payment_plan_id');
}
}
@@ -4,7 +4,7 @@ namespace App\Models;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
class Kontooptionen extends Model class PaymentPlan 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\KontoOption;
use Illuminate\Auth\Access\HandlesAuthorization;
class KontoOptionPolicy
{
use HandlesAuthorization;
public function viewAny(AuthUser $authUser): bool
{
return $authUser->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');
}
}
+20 -21
View File
@@ -4,67 +4,66 @@ declare(strict_types=1);
namespace App\Policies; namespace App\Policies;
use Illuminate\Foundation\Auth\User as AuthUser; use App\Models\KontoOption;
use App\Models\Kontooptionen;
use Illuminate\Auth\Access\HandlesAuthorization; use Illuminate\Auth\Access\HandlesAuthorization;
use Illuminate\Foundation\Auth\User as AuthUser;
class KontooptionenPolicy class KontoOptionPolicy
{ {
use HandlesAuthorization; use HandlesAuthorization;
public function viewAny(AuthUser $authUser): bool 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 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 public function forceDeleteAny(AuthUser $authUser): bool
{ {
return $authUser->can('ForceDeleteAny:Kontooptionen'); return $authUser->can('ForceDeleteAny:KontoOption');
} }
public function restoreAny(AuthUser $authUser): bool 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 public function reorder(AuthUser $authUser): bool
{ {
return $authUser->can('Reorder:Kontooptionen'); return $authUser->can('Reorder:KontoOption');
} }
} }
@@ -25,6 +25,7 @@ return new class extends Migration
$table->string('konto_country')->nullable(); $table->string('konto_country')->nullable();
$table->string('konto_phone')->nullable(); $table->string('konto_phone')->nullable();
$table->string('konto_uid_number')->nullable(); $table->string('konto_uid_number')->nullable();
$table->string('konto_option_id')->default(1);
$table->boolean('konto_agb_akzeptiert')->default(false); $table->boolean('konto_agb_akzeptiert')->default(false);
$table->timestamps(); $table->timestamps();
}); });
@@ -11,12 +11,13 @@ return new class extends Migration
*/ */
public function up(): void public function up(): void
{ {
Schema::create('kontooptionens', function (Blueprint $table) { Schema::create('konto_options', function (Blueprint $table) {
$table->id(); $table->id();
$table->string('name')->nullable(); $table->string('name')->nullable();
$table->string('description')->nullable(); $table->string('description')->nullable();
$table->integer('number_user')->default(1); $table->integer('number_user')->default(1);
$table->integer('number_gutachter')->default(1); $table->integer('number_gutachter')->default(1);
$table->integer('payment_plan_id')->default(1);
$table->timestamps(); $table->timestamps();
}); });
} }
@@ -26,6 +27,6 @@ return new class extends Migration
*/ */
public function down(): void public function down(): void
{ {
Schema::dropIfExists('kontooptionens'); Schema::dropIfExists('konto_options');
} }
}; };
@@ -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('payment_plans', function (Blueprint $table) {
$table->id();
$table->string('name')->nullable();
$table->string('description')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('payment_plans');
}
};
+1 -1
View File
@@ -14,7 +14,7 @@ class DatabaseSeeder extends Seeder
$this->call([ $this->call([
KontoSeeder::class, KontoSeeder::class,
RolesAndPermissionsSeeder::class, RolesAndPermissionsSeeder::class,
KontooptionenSeeder::class, KontoOptionSeeder::class,
]); ]);
} }
} }
+31
View File
@@ -0,0 +1,31 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class KontoOptionSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
$sql = "INSERT INTO `payment_plans` (`id`, `name`)
VALUES
('1', 'Pro Gutachten'),
('2', 'Monatlich'),
('3', 'Jährlich');
";
DB::unprepared($sql);
$sql = "INSERT INTO `konto_options` (`id`, `name`, `description`, `number_user`, `number_gutachter`, `payment_plan_id`, `created_at`, `updated_at`)
VALUES
('1', 'Basic', 'Basis Version für einen Benutzer und einem Gutacher.', '1', '1', '1', NULL, NULL),
('2', 'Erweitert', 'Premium Version für 3 Benutzer und 3 Gutacher.', '3', '3', '2', NULL, NULL),
('3', 'Premium', 'Premium Version für fünf Benutzer und fünf Gutacher. \nUnbegrenzte Anzahl der Gutachten.', '5', '5', '3', NULL, NULL);
";
DB::unprepared($sql);
}
}
-22
View File
@@ -1,22 +0,0 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class KontooptionenSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
$sql = "INSERT INTO `kontooptionens` (`id`, `name`, `description`, `number_user`, `number_gutachter`)
VALUES
('1', 'Basic', 'Basis Version mit einem Benutzer und einem Gutacher.',1,1),
('2', 'Premium', 'Premium Version mit fünf Benutzer und fünf Gutacher.',5,5);
";
DB::unprepared($sql);
}
}
+1 -1
View File
@@ -31,7 +31,7 @@ return [
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
*/ */
'nav.group' => 'Interne Administration', 'nav.group' => 'Administration',
'nav.role.icon' => 'heroicon-o-shield-check', 'nav.role.icon' => 'heroicon-o-shield-check',
'nav.role.label' => 'Rollen', 'nav.role.label' => 'Rollen',
'resource.label.role' => 'Rolle', 'resource.label.role' => 'Rolle',