This commit is contained in:
salam committed 2025-09-23 12:02:39 +02:00
1 parent 8ee2fc4b00
commit 326d827543
18 files changed
+178 -50

No files matched your search

@@ -0,0 +1,15 @@
<?php
namespace App\Filament\Clusters\Administration;
use BackedEnum;
use Filament\Clusters\Cluster;
use Filament\Pages\Enums\SubNavigationPosition;
use Filament\Support\Icons\Heroicon;
class AdministrationCluster extends Cluster
{
protected static string|BackedEnum|null $navigationIcon = Heroicon::AdjustmentsHorizontal;
protected static ?SubNavigationPosition $subNavigationPosition = SubNavigationPosition::Start;
}
@@ -0,0 +1,15 @@
<?php
namespace App\Filament\Clusters\Verwaltung;
use BackedEnum;
use Filament\Clusters\Cluster;
use Filament\Pages\Enums\SubNavigationPosition;
use Filament\Support\Icons\Heroicon;
class VerwaltungCluster extends Cluster
{
protected static string|BackedEnum|null $navigationIcon = Heroicon::OutlinedSquares2x2;
protected static ?SubNavigationPosition $subNavigationPosition = SubNavigationPosition::Start;
}
@@ -2,6 +2,7 @@
namespace App\Filament\Resources\Gutachters; namespace App\Filament\Resources\Gutachters;
use App\Filament\Clusters\Verwaltung\VerwaltungCluster;
use App\Filament\Resources\Gutachters\Pages\CreateGutachter; use App\Filament\Resources\Gutachters\Pages\CreateGutachter;
use App\Filament\Resources\Gutachters\Pages\EditGutachter; use App\Filament\Resources\Gutachters\Pages\EditGutachter;
use App\Filament\Resources\Gutachters\Pages\ListGutachters; use App\Filament\Resources\Gutachters\Pages\ListGutachters;
@@ -19,7 +20,11 @@ class GutachterResource extends Resource
{ {
protected static ?string $model = Gutachter::class; protected static ?string $model = Gutachter::class;
protected static string|BackedEnum|null $navigationIcon = 'lucide-drafting-compass'; protected static ?int $navigationSort = 2;
protected static ?string $cluster = VerwaltungCluster::class;
protected static string|BackedEnum|null $navigationIcon = 'lucide-square-user';
protected static ?string $recordTitleAttribute = 'name'; protected static ?string $recordTitleAttribute = 'name';
@@ -2,6 +2,7 @@
namespace App\Filament\Resources\KontoOptions; namespace App\Filament\Resources\KontoOptions;
use App\Filament\Clusters\Administration\AdministrationCluster;
use App\Filament\Resources\KontoOptions\Pages\CreateKontoOption; use App\Filament\Resources\KontoOptions\Pages\CreateKontoOption;
use App\Filament\Resources\KontoOptions\Pages\EditKontoOption; use App\Filament\Resources\KontoOptions\Pages\EditKontoOption;
use App\Filament\Resources\KontoOptions\Pages\ListKontoOptions; use App\Filament\Resources\KontoOptions\Pages\ListKontoOptions;
@@ -12,15 +13,14 @@ use BackedEnum;
use Filament\Resources\Resource; use Filament\Resources\Resource;
use Filament\Schemas\Schema; use Filament\Schemas\Schema;
use Filament\Tables\Table; use Filament\Tables\Table;
use UnitEnum;
class KontoOptionResource extends Resource class KontoOptionResource extends Resource
{ {
protected static ?string $model = KontoOption::class; protected static ?string $model = KontoOption::class;
protected static string|BackedEnum|null $navigationIcon = 'lucide-key-square'; protected static ?string $cluster = AdministrationCluster::class;
protected static string|UnitEnum|null $navigationGroup = 'Administration'; protected static string|BackedEnum|null $navigationIcon = 'lucide-key-square';
protected static ?string $navigationLabel = 'Konto Optionen'; protected static ?string $navigationLabel = 'Konto Optionen';
@@ -2,6 +2,7 @@
namespace App\Filament\Resources\Kontos; namespace App\Filament\Resources\Kontos;
use App\Filament\Clusters\Verwaltung\VerwaltungCluster;
use App\Filament\Resources\Kontos\Pages\ListKontos; use App\Filament\Resources\Kontos\Pages\ListKontos;
use App\Filament\Resources\Kontos\Schemas\KontoForm; use App\Filament\Resources\Kontos\Schemas\KontoForm;
use App\Filament\Resources\Kontos\Tables\KontosTable; use App\Filament\Resources\Kontos\Tables\KontosTable;
@@ -16,8 +17,12 @@ class KontoResource extends Resource
{ {
protected static ?string $model = Konto::class; protected static ?string $model = Konto::class;
protected static ?int $navigationSort = 1;
protected static string|BackedEnum|null $navigationIcon = 'lucide-circle-user-round'; protected static string|BackedEnum|null $navigationIcon = 'lucide-circle-user-round';
protected static ?string $cluster = VerwaltungCluster::class;
protected static ?string $navigationLabel = 'Konto'; protected static ?string $navigationLabel = 'Konto';
protected static ?string $modelLabel = 'Konto'; protected static ?string $modelLabel = 'Konto';
@@ -2,11 +2,17 @@
namespace App\Filament\Resources\Kontos\Tables; namespace App\Filament\Resources\Kontos\Tables;
use Filament\Actions\Action;
use Filament\Actions\EditAction; use Filament\Actions\EditAction;
use Filament\Forms\Components\RichEditor;
use Filament\Forms\Components\TextInput;
use Filament\Support\Enums\FontWeight;
use Filament\Support\Enums\TextSize;
use Filament\Support\Icons\Heroicon; use Filament\Support\Icons\Heroicon;
use Filament\Tables\Columns\IconColumn; use Filament\Tables\Columns\IconColumn;
use Filament\Tables\Columns\TextColumn; use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table; use Filament\Tables\Table;
use Illuminate\Support\Facades\Mail;
use Ysfkaya\FilamentPhoneInput\PhoneInputNumberType; use Ysfkaya\FilamentPhoneInput\PhoneInputNumberType;
use Ysfkaya\FilamentPhoneInput\Tables\PhoneColumn; use Ysfkaya\FilamentPhoneInput\Tables\PhoneColumn;
@@ -17,31 +23,66 @@ class KontosTable
return $table return $table
->columns([ ->columns([
// TextColumn::make('id'), // TextColumn::make('id'),
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_option.name') // IconColumn::make('konto_agb_akzeptiert')
->badge() // ->label('AGB')
->label('Plan & Zahlung') // ->boolean()
->description(fn ($record): string => $record->konto_option->payment_plan->name), // ->trueIcon(Heroicon::OutlinedCheckBadge)
TextColumn::make('konto_company')->label('Firma'), // ->falseIcon(Heroicon::OutlinedXMark),
IconColumn::make('konto_agb_akzeptiert')
->label('AGB') // PhoneColumn::make('konto_phone')
->boolean() // ->label('Telefon')
->trueIcon(Heroicon::OutlinedCheckBadge) // ->displayFormat(PhoneInputNumberType::INTERNATIONAL),
->falseIcon(Heroicon::OutlinedXMark), // TextColumn::make('konto_email')
// ->copyable()
// ->copyMessage('E-Mail wurde kopiert')
// ->copyMessageDuration(1500)
// ->label('E-mail'),
TextColumn::make('konto_company')->label('Firma')
->description(fn ($record): string => $record->konto_address.', '.$record->konto_location),
TextColumn::make('konto_option.name')
->icon(Heroicon::CurrencyEuro)
// ->iconColor('success')
// ->badge()
->label('Plan')
->description(fn ($record): string => $record->konto_option->payment_plan->name),
TextColumn::make('konto_gutachten_abgeschlossen')
->size(TextSize::Large)
->weight(FontWeight::Bold)
->label('Abgeschlossen')
->color('primary')
->description('Gutachten')
->alignCenter(),
TextColumn::make('konto_gutachten_zahl')
->size(TextSize::Large)
->weight(FontWeight::Bold)
->label('Freigeschalted')
->color('success')
->description('Gutachten')
->alignCenter(),
PhoneColumn::make('konto_phone')
->label('Telefon')
->displayFormat(PhoneInputNumberType::INTERNATIONAL),
TextColumn::make('konto_email')
->copyable()
->copyMessage('E-Mail wurde kopiert')
->copyMessageDuration(1500)
->label('E-mail'),
]) ])
->recordActions([ ->recordActions([
EditAction::make(), EditAction::make(),
Action::make('Laden')
->icon('heroicon-m-bolt')
->color('warning')
->schema([
TextInput::make('subject')->required(),
RichEditor::make('body')->required(),
])
->action(function (array $data) {
Mail::to($this->client)
->send(new GenericEmail(
subject: $data['subject'],
body: $data['body'],
));
}),
]); ]);
} }
} }
@@ -2,6 +2,7 @@
namespace App\Filament\Resources\Permissions; namespace App\Filament\Resources\Permissions;
use App\Filament\Clusters\Administration\AdministrationCluster;
use App\Filament\Resources\Permissions\Pages\CreatePermission; use App\Filament\Resources\Permissions\Pages\CreatePermission;
use App\Filament\Resources\Permissions\Pages\EditPermission; use App\Filament\Resources\Permissions\Pages\EditPermission;
use App\Filament\Resources\Permissions\Pages\ListPermissions; use App\Filament\Resources\Permissions\Pages\ListPermissions;
@@ -12,15 +13,14 @@ use BackedEnum;
use Filament\Resources\Resource; use Filament\Resources\Resource;
use Filament\Schemas\Schema; use Filament\Schemas\Schema;
use Filament\Tables\Table; use Filament\Tables\Table;
use UnitEnum;
class PermissionResource extends Resource class PermissionResource extends Resource
{ {
protected static ?string $model = Permission::class; protected static ?string $model = Permission::class;
protected static string|BackedEnum|null $navigationIcon = 'lucide-toggle-right'; protected static ?string $cluster = AdministrationCluster::class;
protected static string|UnitEnum|null $navigationGroup = 'Administration'; protected static string|BackedEnum|null $navigationIcon = 'lucide-toggle-right';
protected static ?string $recordTitleAttribute = 'name'; protected static ?string $recordTitleAttribute = 'name';
@@ -2,6 +2,7 @@
namespace App\Filament\Resources\Users; namespace App\Filament\Resources\Users;
use App\Filament\Clusters\Verwaltung\VerwaltungCluster;
use App\Filament\Resources\Users\Pages\CreateUser; use App\Filament\Resources\Users\Pages\CreateUser;
use App\Filament\Resources\Users\Pages\EditUser; use App\Filament\Resources\Users\Pages\EditUser;
use App\Filament\Resources\Users\Pages\ListUsers; use App\Filament\Resources\Users\Pages\ListUsers;
@@ -14,18 +15,19 @@ use Filament\Schemas\Schema;
use Filament\Tables\Table; use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope; use Illuminate\Database\Eloquent\SoftDeletingScope;
use UnitEnum;
class UserResource extends Resource class UserResource extends Resource
{ {
protected static ?string $model = User::class; protected static ?string $model = User::class;
protected static ?int $navigationSort = 3;
protected static ?string $cluster = VerwaltungCluster::class;
// protected static bool $shouldSkipAuthorization = true; // protected static bool $shouldSkipAuthorization = true;
protected static string|BackedEnum|null $navigationIcon = 'lucide-user'; protected static string|BackedEnum|null $navigationIcon = 'lucide-user';
// protected static string|UnitEnum|null $navigationGroup = 'Gutachten';
protected static ?string $recordTitleAttribute = 'name'; protected static ?string $recordTitleAttribute = 'name';
protected static ?string $navigationLabel = 'Benutzer'; protected static ?string $navigationLabel = 'Benutzer';
+3
View File
@@ -27,6 +27,9 @@ class Konto extends Model
'konto_uid_number', 'konto_uid_number',
'konto_agb_akzeptiert', 'konto_agb_akzeptiert',
'konto_option_id', 'konto_option_id',
'konto_gutachten_zahl',
'konto_gutachten_zeit',
'konto_gutachten_abgeschlossen',
]; ];
public function konto_option(): HasOne public function konto_option(): HasOne
@@ -67,6 +67,7 @@ class AdminPanelProvider extends PanelProvider
->discoverResources(in: app_path('Filament/Resources'), for: 'App\Filament\Resources') ->discoverResources(in: app_path('Filament/Resources'), for: 'App\Filament\Resources')
->discoverPages(in: app_path('Filament/Pages'), for: 'App\Filament\Pages') ->discoverPages(in: app_path('Filament/Pages'), for: 'App\Filament\Pages')
->discoverWidgets(in: app_path('Filament/Widgets'), for: 'App\Filament\Widgets') ->discoverWidgets(in: app_path('Filament/Widgets'), for: 'App\Filament\Widgets')
->discoverClusters(in: app_path('Filament/Clusters'), for: 'App\\Filament\\Clusters')
->viteTheme('resources/css/filament/admin/theme.css') ->viteTheme('resources/css/filament/admin/theme.css')
->pages([ ->pages([
Dashboard::class, Dashboard::class,
Generated
+15 -13
View File
@@ -4518,24 +4518,26 @@
}, },
{ {
"name": "paragonie/constant_time_encoding", "name": "paragonie/constant_time_encoding",
"version": "v3.0.0", "version": "v3.1.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/paragonie/constant_time_encoding.git", "url": "https://github.com/paragonie/constant_time_encoding.git",
"reference": "df1e7fde177501eee2037dd159cf04f5f301a512" "reference": "5e9b582660b997de205a84c02a3aac7c060900c9"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/df1e7fde177501eee2037dd159cf04f5f301a512", "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/5e9b582660b997de205a84c02a3aac7c060900c9",
"reference": "df1e7fde177501eee2037dd159cf04f5f301a512", "reference": "5e9b582660b997de205a84c02a3aac7c060900c9",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^8" "php": "^8"
}, },
"require-dev": { "require-dev": {
"phpunit/phpunit": "^9", "infection/infection": "^0",
"vimeo/psalm": "^4|^5" "nikic/php-fuzzer": "^0",
"phpunit/phpunit": "^9|^10|^11",
"vimeo/psalm": "^4|^5|^6"
}, },
"type": "library", "type": "library",
"autoload": { "autoload": {
@@ -4581,20 +4583,20 @@
"issues": "https://github.com/paragonie/constant_time_encoding/issues", "issues": "https://github.com/paragonie/constant_time_encoding/issues",
"source": "https://github.com/paragonie/constant_time_encoding" "source": "https://github.com/paragonie/constant_time_encoding"
}, },
"time": "2024-05-08T12:36:18+00:00" "time": "2025-09-22T21:00:33+00:00"
}, },
{ {
"name": "phiki/phiki", "name": "phiki/phiki",
"version": "v2.0.3", "version": "v2.0.4",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/phikiphp/phiki.git", "url": "https://github.com/phikiphp/phiki.git",
"reference": "fe51fe6dc31856cd776fd1b04ee74053a4271644" "reference": "160785c50c01077780ab217e5808f00ab8f05a13"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/phikiphp/phiki/zipball/fe51fe6dc31856cd776fd1b04ee74053a4271644", "url": "https://api.github.com/repos/phikiphp/phiki/zipball/160785c50c01077780ab217e5808f00ab8f05a13",
"reference": "fe51fe6dc31856cd776fd1b04ee74053a4271644", "reference": "160785c50c01077780ab217e5808f00ab8f05a13",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -4640,7 +4642,7 @@
"description": "Syntax highlighting using TextMate grammars in PHP.", "description": "Syntax highlighting using TextMate grammars in PHP.",
"support": { "support": {
"issues": "https://github.com/phikiphp/phiki/issues", "issues": "https://github.com/phikiphp/phiki/issues",
"source": "https://github.com/phikiphp/phiki/tree/v2.0.3" "source": "https://github.com/phikiphp/phiki/tree/v2.0.4"
}, },
"funding": [ "funding": [
{ {
@@ -4652,7 +4654,7 @@
"type": "other" "type": "other"
} }
], ],
"time": "2025-09-19T11:50:41+00:00" "time": "2025-09-20T17:21:02+00:00"
}, },
{ {
"name": "phpoption/phpoption", "name": "phpoption/phpoption",
+3 -1
View File
@@ -1,5 +1,7 @@
<?php <?php
use App\Filament\Clusters\Administration\AdministrationCluster;
return [ return [
/* /*
@@ -16,7 +18,7 @@ return [
'shield_resource' => [ 'shield_resource' => [
'slug' => 'shield/roles', 'slug' => 'shield/roles',
'show_model_path' => true, 'show_model_path' => true,
'cluster' => null, 'cluster' => AdministrationCluster::class,
'tabs' => [ 'tabs' => [
'pages' => true, 'pages' => true,
'widgets' => true, 'widgets' => true,
@@ -25,8 +25,11 @@ 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->string('konto_option_id')->default(1);
$table->string('konto_gutachten_zahl')->default(0);
$table->timestamp('konto_gutachten_zeit')->nullable();
$table->string('konto_gutachten_abgeschlossen')->default(1);
$table->timestamps(); $table->timestamps();
}); });
} }
@@ -0,0 +1,34 @@
<?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('auftraggebers', function (Blueprint $table) {
$table->id();
$table->foreignId('konto_id')->constrained();
$table->string('name');
$table->string('logo');
$table->text('adresse')->nullable();
$table->string('kontaktperson')->nullable();
$table->string('email')->email()->nullable();
$table->string('telefon')->tel()->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('auftraggebers');
}
};
+3 -3
View File
@@ -12,10 +12,10 @@ class KontoSeeder extends Seeder
*/ */
public function run(): void public function run(): void
{ {
$sql = "INSERT INTO `kontos` (`id`, `konto_title`, `konto_gender`, `konto_first_name`, `konto_last_name`, `konto_company`, `konto_email`, `konto_address`, `konto_location`, `konto_plz`, `konto_country`, `konto_phone`, `konto_uid_number`, `konto_agb_akzeptiert`, `created_at`, `updated_at`) $sql = "INSERT INTO `kontos` (`id`, `konto_title`, `konto_gender`, `konto_first_name`, `konto_last_name`, `konto_company`, `konto_email`, `konto_address`, `konto_location`, `konto_plz`, `konto_country`, `konto_phone`, `konto_uid_number`, `konto_agb_akzeptiert`, `konto_option_id`, `konto_gutachten_zahl`, `konto_gutachten_zeit`, `konto_gutachten_abgeschlossen`, `created_at`, `updated_at`)
VALUES VALUES
('1', 'Architekt', 'Herr', 'Bruno', 'Kunz', 'Architekt Kunz', 'test@atrat.cc', 'Pradlerstraße 11', 'Innbsruck', '6020', 'Österreich', '0512 457328', 'ATU 234578', '1', NULL, NULL), ('1', 'Architekt', 'Herr', 'Hanno', 'Vogl-Fernheim', 'Architekt Vogl-Fernheim', 'office@vogl-fernheim.eu', 'Richardsweg 1', 'Innsbruck', '6020', 'Österreich', '+43 0512 560303', 'ATU 61718733', '1', '1', '1', NULL, '1', NULL, NULL),
('2', 'Architekt', 'Herr', 'Sepp', 'Unterlugauer', 'Architekt Unterlugauer', 'test2@atrat.cc', 'Seestraße 1', 'Innbsruck', '6020', 'Österreich', '0512 457328', 'ATU 234578', '1', NULL, NULL); ('2', 'Staatl. bef. u. beeideter Ziviltechniker', 'Herr', 'Christoph', 'Falkner', 'Christoph Falkner', 'christophfalkner@me.com', 'Adele-Obermayr-Straße 2', 'Innsbruck', '6020', 'Österreich', '+43 650 92210248', 'ATU56874500', '1', '1', '1', NULL, '1', NULL, NULL);
"; ";
DB::unprepared($sql); DB::unprepared($sql);
} }
+1 -1
View File
@@ -31,7 +31,7 @@ return [
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
*/ */
'nav.group' => 'Administration', 'nav.group' => '',
'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',
+1 -1
View File
@@ -1,4 +1,4 @@
<nav class="fixed top-0 right-0 left-0 z-20 bg-white/80 dark:bg-black/80"> <nav class="fixed top-0 right-0 left-0 z-20 bg-white dark:bg-black">
<div class=" grid grid-cols-2 max-w-5xl mx-auto py-4"> <div class=" grid grid-cols-2 max-w-5xl mx-auto py-4">
<div class="fi-logo flex gap-1"> <div class="fi-logo flex gap-1">
<div class="w-9 pt-1"> <div class="w-9 pt-1">
+1 -1
View File
@@ -3,7 +3,7 @@
@section('content') @section('content')
<div class="text-gray-700 dark:text-gray-200"> <div class="text-gray-700 dark:text-gray-200">
<div class="flex gap-7"> <div class="flex gap-7">
<div class="flex flex-col gap-5"> <div class="flex flex-col gap-3">
<x-filament::section icon="heroicon-m-building-office-2"> <x-filament::section icon="heroicon-m-building-office-2">
<x-slot name="heading"> <x-slot name="heading">
<x-title> <x-title>