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
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
namespace App\Filament\Resources\Kontooptionens\Schemas;
namespace App\Filament\Resources\KontoOptions\Schemas;
use Filament\Schemas\Schema;
class KontooptionenForm
class KontoOptionForm
{
public static function configure(Schema $schema): Schema
{
@@ -1,6 +1,6 @@
<?php
namespace App\Filament\Resources\Kontooptionens\Tables;
namespace App\Filament\Resources\KontoOptions\Tables;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
@@ -8,15 +8,19 @@ use Filament\Actions\EditAction;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table;
class KontooptionensTable
class KontoOptionTable
{
public static function configure(Table $table): Table
{
return $table
->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([
//
@@ -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_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')
@@ -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';
+6 -9
View File
@@ -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');
}
}
+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;
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;
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');
}
}
@@ -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();
});
@@ -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');
}
};
@@ -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([
KontoSeeder::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.label' => 'Rollen',
'resource.label.role' => 'Rolle',