From 16c0aa24feb9f5a47ef4e60f4c77cd24dcbc5a9d Mon Sep 17 00:00:00 2001 From: salam Date: Sat, 4 Jul 2026 18:15:17 +0200 Subject: [PATCH] wip --- app/Actions/Cloning/CloneProjekt.php | 91 ++++++++++++ app/Actions/Cloning/CloneValidation.php | 100 +++++++++++++ .../Projektes/Pages/EditProjekte.php | 21 ++- .../Projektes/Tables/ProjektesTable.php | 18 +-- app/Models/ProjektObjekte.php | 1 + app/Models/ProjektObjekteImDetail.php | 1 + app/Models/Projekte.php | 13 +- bootstrap/cache/packages.php | 7 - bootstrap/cache/services.php | 138 +++++++++--------- composer.json | 3 +- composer.lock | 85 ++--------- ...25_09_24_131440_create_projektes_table.php | 1 + ...3_154046_create_projekt_objektes_table.php | 1 + ...reate_projekt_objekte_im_details_table.php | 1 + 14 files changed, 307 insertions(+), 174 deletions(-) create mode 100644 app/Actions/Cloning/CloneProjekt.php create mode 100644 app/Actions/Cloning/CloneValidation.php diff --git a/app/Actions/Cloning/CloneProjekt.php b/app/Actions/Cloning/CloneProjekt.php new file mode 100644 index 0000000..2d4f40a --- /dev/null +++ b/app/Actions/Cloning/CloneProjekt.php @@ -0,0 +1,91 @@ +replicate(); + $news_project->cloned_from_id = $record->id; + $news_project->save(); + + ProjektUser::create(['user_id' => Auth::user()->id, 'projekte_id' => $news_project->id]); + + $res = ProjektObjekte::where('projekte_id', $record->id)->get(); + foreach ($res as $row) { + $new = $row->replicate(); + $new->projekte_id = $news_project->id; + $new->projekte_cloned_from_id = $row->id; + $new->save(); + + $res2 = ProjektObjekteImDetail::where('projekte_id', $record->id)->where('projekt_objekte_id', $row->id)->get(); + foreach ($res2 as $row2) { + $new2 = $row2->replicate(); + $new2->projekte_id = $news_project->id; + $new2->projekt_objekte_id = $new->id; + $new2->projekte_objekte_cloned_from_id = $row2->id; + $new2->save(); + } + } + + $res = ProjektAllgemeinflaechen::where('projekte_id', $record->id)->get(); + foreach ($res as $row) { + $new = $row->replicate(); + $new->projekte_id = $news_project->id; + $new->save(); + } + $res = ProjektInhaltsverzeichnis::where('projekte_id', $record->id)->get(); + foreach ($res as $row) { + $new = $row->replicate(); + $new->projekte_id = $news_project->id; + $new->save(); + } + $res = ProjektPlatzhalter::where('projekte_id', $record->id)->get(); + foreach ($res as $row) { + $new = $row->replicate(); + $new->projekte_id = $news_project->id; + $new->save(); + } + $res = ProjektMerkmale::where('projekte_id', $record->id)->get(); + foreach ($res as $row) { + $new = $row->replicate(); + $new->projekte_id = $news_project->id; + $new->save(); + } + $res = ProjektMethode::where('projekte_id', $record->id)->get(); + foreach ($res as $row) { + $new = $row->replicate(); + $new->projekte_id = $news_project->id; + $new->save(); + } + $res = ProjektPlatzhalter::where('projekte_id', $record->id)->get(); + foreach ($res as $row) { + $new = $row->replicate(); + $new->projekte_id = $news_project->id; + $new->save(); + } + } +} diff --git a/app/Actions/Cloning/CloneValidation.php b/app/Actions/Cloning/CloneValidation.php new file mode 100644 index 0000000..0fffcf9 --- /dev/null +++ b/app/Actions/Cloning/CloneValidation.php @@ -0,0 +1,100 @@ +cloned_from_id; + $GEKLONT = $record->id; + + // $originals = ProjektObjekte::where('projekte_id', $ORIGINAL)->get(); + // foreach ($originals as $original) { + // $check = ProjektObjekte::where('projekte_id', $GEKLONT)->where('top_nummer', $original->top_nummer)->first(); + // if (! $check) { + // /** + // * Im original dazugekommen + // */ + // $new = $original->replicate(); + // $new->projekte_id = $GEKLONT; + // $new->save(); + + // $res2 = ProjektObjekteImDetail::where('projekte_id', $ORIGINAL)->where('projekt_objekte_id', $original->id)->get(); + // foreach ($res2 as $row2) { + // $check = ProjektObjekteImDetail::where('projekte_id', $GEKLONT)->where('raumart', $row2->raumart)->first(); + // if (! $check) { + // $new2 = $row2->replicate(); + // $new2->projekte_id = $GEKLONT; + // $new2->projekt_objekte_id = $new->id; + // $new2->save(); + // } + // } + // } + // } + + // $res = ProjektAllgemeinflaechen::where('projekte_id', $original_id)->get(); + // foreach ($res as $row) { + // $check = ProjektInhaltsverzeichnis::where('projekte_id', $original_id)->where('raumart', $original->raumart)->first(); + // if (! $check) { + // $new = $row->replicate(); + // $new->projekte_id = $record->id; + // $new->save(); + // } + // } + + // $res = ProjektInhaltsverzeichnis::where('projekte_id', $original_id)->get(); + // foreach ($res as $row) { + // $check = ProjektInhaltsverzeichnis::where('projekte_id', $original_id)->where('top_nummer', $original->top_nummer)->first(); + // if (! $check) { + // $new = $row->replicate(); + // $new->projekte_id = $record->id; + // $new->save(); + // } + // } + // $res = ProjektPlatzhalter::where('projekte_id', $record->id)->get(); + // foreach ($res as $row) { + // $new = $row->replicate(); + // $new->projekte_id = $record->id; + // $new->save(); + // } + // $res = ProjektMerkmale::where('projekte_id', $record->id)->get(); + // foreach ($res as $row) { + // $new = $row->replicate(); + // $new->projekte_id = $record->id; + // $new->save(); + // } + // $res = ProjektMethode::where('projekte_id', $record->id)->get(); + // foreach ($res as $row) { + // $new = $row->replicate(); + // $new->projekte_id = $record->id; + // $new->save(); + // } + // $res = ProjektPlatzhalter::where('projekte_id', $record->id)->get(); + // foreach ($res as $row) { + // $new = $row->replicate(); + // $new->projekte_id = $record->id; + // $new->save(); + // } + } +} diff --git a/app/Filament/Resources/Projektes/Pages/EditProjekte.php b/app/Filament/Resources/Projektes/Pages/EditProjekte.php index fd4bec5..8321457 100644 --- a/app/Filament/Resources/Projektes/Pages/EditProjekte.php +++ b/app/Filament/Resources/Projektes/Pages/EditProjekte.php @@ -2,6 +2,7 @@ namespace App\Filament\Resources\Projektes\Pages; +use App\Actions\Cloning\CloneValidation; use App\Actions\Validation\GutachtenValidation; use App\Filament\Resources\Projektes\ProjekteResource; use App\Models\Konto; @@ -138,8 +139,24 @@ class EditProjekte extends EditRecord ->icon('phosphor-download') ->color('info') ->button(), - DeleteAction::make()->icon('heroicon-o-trash') - ->modalDescription('Möchten Sie dieses Projekt wirklich löschen? Die Daten werden unwiderbringlich gelöscht, dieser Vorgang kann nicht rückgängig gemacht werden.'), + + /** + * ADMIN + */ + ActionGroup::make([ + Action::make('relationen') + ->label('Relationen überprüfen') + ->modalIcon('phosphor-gear') + ->modalDescription('Dieses Projekt wurde gekloned. Mit dieser Funktion können Fehler behoben und Änderungen vom originalen Projekt übernommen werden. Objekte ohne Verbindung werden gelöscht.') + ->hidden(fn ($record): bool => ! $record->cloned_from_id) + ->action(fn ($record) => CloneValidation::validate($record)) + ->icon('phosphor-gear'), + DeleteAction::make()->icon('heroicon-o-trash') + ->modalDescription('Möchten Sie dieses Projekt wirklich löschen? Die Daten werden unwiderbringlich gelöscht, dieser Vorgang kann nicht rückgängig gemacht werden.'), + ])->label('Admin') + ->icon('phosphor-user-circle') + ->button(), + ]; } diff --git a/app/Filament/Resources/Projektes/Tables/ProjektesTable.php b/app/Filament/Resources/Projektes/Tables/ProjektesTable.php index 9d58817..c5c3499 100644 --- a/app/Filament/Resources/Projektes/Tables/ProjektesTable.php +++ b/app/Filament/Resources/Projektes/Tables/ProjektesTable.php @@ -2,6 +2,7 @@ namespace App\Filament\Resources\Projektes\Tables; +use App\Actions\Cloning\CloneProjekt; use App\Enums\ProjektStatus; use App\Models\Auftraggeber; use App\Models\Gutachter; @@ -16,9 +17,9 @@ use Filament\Tables\Enums\FiltersLayout; use Filament\Tables\Filters\Filter; use Filament\Tables\Filters\SelectFilter; use Filament\Tables\Table; +use Illuminate\Database\Eloquent\Builder; use Illuminate\Support\Facades\Auth; use Illuminate\Support\HtmlString; -use Illuminate\Database\Eloquent\Builder; class ProjektesTable { @@ -28,17 +29,17 @@ class ProjektesTable ->columns([ TextColumn::make('id'), ToggleColumn::make('meine') - ->state(fn($record) => ProjektUser::where('user_id', auth()->user()->id)->where('projekte_id', $record->id)->count()) + ->state(fn ($record) => ProjektUser::where('user_id', auth()->user()->id)->where('projekte_id', $record->id)->count()) ->beforeStateUpdated(function ($record, $state) { - if($state){ + if ($state) { ProjektUser::create(['user_id' => auth()->user()->id, 'projekte_id' => $record->id]); - }else{ + } else { ProjektUser::where('user_id', auth()->user()->id)->where('projekte_id', $record->id)->delete(); } }), TextColumn::make('interner_name') ->badge() - ->tooltip(fn($record): HtmlString => new HtmlString($record->beschreibung)) + ->tooltip(fn ($record): HtmlString => new HtmlString($record->beschreibung)) ->label('Interner Name') ->color(fn ($record): string => match ($record->status) { 'entwurf' => 'primary', @@ -53,7 +54,6 @@ class ProjektesTable ->label('Offizieller Name'), TextColumn::make('gutachter.company'), TextColumn::make('auftraggeber.company'), - // TextColumn::make('ort'), TextColumn::make('erstellung')->sortable(), ]) ->striped() @@ -63,12 +63,12 @@ class ProjektesTable ->filters([ Filter::make('meine') ->schema([ - Toggle::make('meine')->label('Meine Projekte') + Toggle::make('meine')->label('Meine Projekte'), ])->query(function (Builder $query, array $data): Builder { return $query->when( $data['meine'], function (Builder $query, $meine) { - $query->whereHas('projekt_users', function ($query) { + $query->whereHas('projekt_users', function ($query) { $query->where('projekt_users.user_id', auth()->user()->id); }); } @@ -101,7 +101,7 @@ class ProjektesTable ->recordActions([ EditAction::make()->iconButton(), Action::make('dokument_klonen') - ->action(fn(Projekte $record) => $record->duplicate()) + ->action(fn (Projekte $record) => CloneProjekt::clone($record)) ->iconButton() ->icon('phosphor-copy') ->requiresConfirmation(), diff --git a/app/Models/ProjektObjekte.php b/app/Models/ProjektObjekte.php index 1826801..f46cc75 100644 --- a/app/Models/ProjektObjekte.php +++ b/app/Models/ProjektObjekte.php @@ -10,6 +10,7 @@ class ProjektObjekte extends Model { protected $fillable = [ 'projekte_id', + 'projekte_cloned_from_id', 'orientierung_id', 'nicht_in_orientierung', 'top_nummer', diff --git a/app/Models/ProjektObjekteImDetail.php b/app/Models/ProjektObjekteImDetail.php index ee28cc4..63e705e 100644 --- a/app/Models/ProjektObjekteImDetail.php +++ b/app/Models/ProjektObjekteImDetail.php @@ -9,6 +9,7 @@ class ProjektObjekteImDetail extends Model protected $fillable = [ 'projekte_id', 'projekt_objekte_id', + 'projekte_objekte_cloned_from_id', 'methode_id', 'top_nummer', 'geschoss', diff --git a/app/Models/Projekte.php b/app/Models/Projekte.php index 2949478..360af72 100644 --- a/app/Models/Projekte.php +++ b/app/Models/Projekte.php @@ -7,18 +7,6 @@ use Illuminate\Database\Eloquent\Model; class Projekte extends Model { - use \Bkwld\Cloner\Cloneable; - - protected $cloneable_relations = [ - 'projekt_objekte', - 'projekt_platzhalters', - 'projekt_allgemeinflaechens', - 'projekt_raeumealles', - 'projekt_methodes', - 'projekt_inhaltsverzeichnis', - 'projekt_merkmale', - ]; - protected $primaryKey = 'id'; protected $fillable = [ @@ -26,6 +14,7 @@ class Projekte extends Model 'konto_id', 'auftraggeber_id', 'gutachter_id', + 'cloned_from_id', 'interner_name', 'offizieller_name', 'ort', diff --git a/bootstrap/cache/packages.php b/bootstrap/cache/packages.php index ac3806d..0453d4e 100755 --- a/bootstrap/cache/packages.php +++ b/bootstrap/cache/packages.php @@ -56,13 +56,6 @@ 0 => 'BezhanSalleh\\FilamentShield\\FilamentShieldServiceProvider', ), ), - 'bkwld/cloner' => - array ( - 'providers' => - array ( - 0 => 'Bkwld\\Cloner\\ServiceProvider', - ), - ), 'blade-ui-kit/blade-heroicons' => array ( 'providers' => diff --git a/bootstrap/cache/services.php b/bootstrap/cache/services.php index 5a807d1..60c138e 100755 --- a/bootstrap/cache/services.php +++ b/bootstrap/cache/services.php @@ -30,42 +30,41 @@ 26 => 'Barryvdh\\LaravelIdeHelper\\IdeHelperServiceProvider', 27 => 'BezhanSalleh\\PluginEssentials\\PluginEssentialsServiceProvider', 28 => 'BezhanSalleh\\FilamentShield\\FilamentShieldServiceProvider', - 29 => 'Bkwld\\Cloner\\ServiceProvider', - 30 => 'BladeUI\\Heroicons\\BladeHeroiconsServiceProvider', - 31 => 'BladeUI\\Icons\\BladeIconsServiceProvider', - 32 => 'Codeat3\\BladePhosphorIcons\\BladePhosphorIconsServiceProvider', - 33 => 'Danielebarbaro\\LaravelVatEuValidator\\VatValidatorServiceProvider', - 34 => 'Filament\\Actions\\ActionsServiceProvider', - 35 => 'Filament\\FilamentServiceProvider', - 36 => 'Filament\\Forms\\FormsServiceProvider', - 37 => 'Filament\\Infolists\\InfolistsServiceProvider', - 38 => 'Filament\\Notifications\\NotificationsServiceProvider', - 39 => 'Filament\\QueryBuilder\\QueryBuilderServiceProvider', - 40 => 'Filament\\Schemas\\SchemasServiceProvider', - 41 => 'Filament\\Support\\SupportServiceProvider', - 42 => 'Filament\\Tables\\TablesServiceProvider', - 43 => 'Filament\\Widgets\\WidgetsServiceProvider', - 44 => 'JaOcero\\RadioDeck\\RadioDeckServiceProvider', - 45 => 'Kirschbaum\\PowerJoins\\PowerJoinsServiceProvider', - 46 => 'Laravel\\Pail\\PailServiceProvider', - 47 => 'Laravel\\Sail\\SailServiceProvider', - 48 => 'Laravel\\Tinker\\TinkerServiceProvider', - 49 => 'Livewire\\LivewireServiceProvider', - 50 => 'MallardDuck\\LucideIcons\\BladeLucideIconsServiceProvider', - 51 => 'Carbon\\Laravel\\ServiceProvider', - 52 => 'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider', - 53 => 'Termwind\\Laravel\\TermwindServiceProvider', - 54 => 'Pest\\Laravel\\PestServiceProvider', - 55 => 'Propaganistas\\LaravelPhone\\PhoneServiceProvider', - 56 => 'RyanChandler\\BladeCaptureDirective\\BladeCaptureDirectiveServiceProvider', - 57 => 'Spatie\\LoginLink\\LoginLinkServiceProvider', - 58 => 'Spatie\\Permission\\PermissionServiceProvider', - 59 => 'Swis\\Filament\\Backgrounds\\FilamentBackgroundsServiceProvider', - 60 => 'ToneGabes\\BetterOptions\\BetterOptionsServiceProvider', - 61 => 'ToneGabes\\Filament\\Icons\\PhosphorIconsServiceProvider', - 62 => 'Ysfkaya\\FilamentPhoneInput\\FilamentPhoneInputServiceProvider', - 63 => 'App\\Providers\\AppServiceProvider', - 64 => 'App\\Providers\\Filament\\AdminPanelProvider', + 29 => 'BladeUI\\Heroicons\\BladeHeroiconsServiceProvider', + 30 => 'BladeUI\\Icons\\BladeIconsServiceProvider', + 31 => 'Codeat3\\BladePhosphorIcons\\BladePhosphorIconsServiceProvider', + 32 => 'Danielebarbaro\\LaravelVatEuValidator\\VatValidatorServiceProvider', + 33 => 'Filament\\Actions\\ActionsServiceProvider', + 34 => 'Filament\\FilamentServiceProvider', + 35 => 'Filament\\Forms\\FormsServiceProvider', + 36 => 'Filament\\Infolists\\InfolistsServiceProvider', + 37 => 'Filament\\Notifications\\NotificationsServiceProvider', + 38 => 'Filament\\QueryBuilder\\QueryBuilderServiceProvider', + 39 => 'Filament\\Schemas\\SchemasServiceProvider', + 40 => 'Filament\\Support\\SupportServiceProvider', + 41 => 'Filament\\Tables\\TablesServiceProvider', + 42 => 'Filament\\Widgets\\WidgetsServiceProvider', + 43 => 'JaOcero\\RadioDeck\\RadioDeckServiceProvider', + 44 => 'Kirschbaum\\PowerJoins\\PowerJoinsServiceProvider', + 45 => 'Laravel\\Pail\\PailServiceProvider', + 46 => 'Laravel\\Sail\\SailServiceProvider', + 47 => 'Laravel\\Tinker\\TinkerServiceProvider', + 48 => 'Livewire\\LivewireServiceProvider', + 49 => 'MallardDuck\\LucideIcons\\BladeLucideIconsServiceProvider', + 50 => 'Carbon\\Laravel\\ServiceProvider', + 51 => 'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider', + 52 => 'Termwind\\Laravel\\TermwindServiceProvider', + 53 => 'Pest\\Laravel\\PestServiceProvider', + 54 => 'Propaganistas\\LaravelPhone\\PhoneServiceProvider', + 55 => 'RyanChandler\\BladeCaptureDirective\\BladeCaptureDirectiveServiceProvider', + 56 => 'Spatie\\LoginLink\\LoginLinkServiceProvider', + 57 => 'Spatie\\Permission\\PermissionServiceProvider', + 58 => 'Swis\\Filament\\Backgrounds\\FilamentBackgroundsServiceProvider', + 59 => 'ToneGabes\\BetterOptions\\BetterOptionsServiceProvider', + 60 => 'ToneGabes\\Filament\\Icons\\PhosphorIconsServiceProvider', + 61 => 'Ysfkaya\\FilamentPhoneInput\\FilamentPhoneInputServiceProvider', + 62 => 'App\\Providers\\AppServiceProvider', + 63 => 'App\\Providers\\Filament\\AdminPanelProvider', ), 'eager' => array ( @@ -84,40 +83,39 @@ 12 => 'Fruitcake\\LaravelDebugbar\\ServiceProvider', 13 => 'BezhanSalleh\\PluginEssentials\\PluginEssentialsServiceProvider', 14 => 'BezhanSalleh\\FilamentShield\\FilamentShieldServiceProvider', - 15 => 'Bkwld\\Cloner\\ServiceProvider', - 16 => 'BladeUI\\Heroicons\\BladeHeroiconsServiceProvider', - 17 => 'BladeUI\\Icons\\BladeIconsServiceProvider', - 18 => 'Codeat3\\BladePhosphorIcons\\BladePhosphorIconsServiceProvider', - 19 => 'Danielebarbaro\\LaravelVatEuValidator\\VatValidatorServiceProvider', - 20 => 'Filament\\Actions\\ActionsServiceProvider', - 21 => 'Filament\\FilamentServiceProvider', - 22 => 'Filament\\Forms\\FormsServiceProvider', - 23 => 'Filament\\Infolists\\InfolistsServiceProvider', - 24 => 'Filament\\Notifications\\NotificationsServiceProvider', - 25 => 'Filament\\QueryBuilder\\QueryBuilderServiceProvider', - 26 => 'Filament\\Schemas\\SchemasServiceProvider', - 27 => 'Filament\\Support\\SupportServiceProvider', - 28 => 'Filament\\Tables\\TablesServiceProvider', - 29 => 'Filament\\Widgets\\WidgetsServiceProvider', - 30 => 'JaOcero\\RadioDeck\\RadioDeckServiceProvider', - 31 => 'Kirschbaum\\PowerJoins\\PowerJoinsServiceProvider', - 32 => 'Laravel\\Pail\\PailServiceProvider', - 33 => 'Livewire\\LivewireServiceProvider', - 34 => 'MallardDuck\\LucideIcons\\BladeLucideIconsServiceProvider', - 35 => 'Carbon\\Laravel\\ServiceProvider', - 36 => 'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider', - 37 => 'Termwind\\Laravel\\TermwindServiceProvider', - 38 => 'Pest\\Laravel\\PestServiceProvider', - 39 => 'Propaganistas\\LaravelPhone\\PhoneServiceProvider', - 40 => 'RyanChandler\\BladeCaptureDirective\\BladeCaptureDirectiveServiceProvider', - 41 => 'Spatie\\LoginLink\\LoginLinkServiceProvider', - 42 => 'Spatie\\Permission\\PermissionServiceProvider', - 43 => 'Swis\\Filament\\Backgrounds\\FilamentBackgroundsServiceProvider', - 44 => 'ToneGabes\\BetterOptions\\BetterOptionsServiceProvider', - 45 => 'ToneGabes\\Filament\\Icons\\PhosphorIconsServiceProvider', - 46 => 'Ysfkaya\\FilamentPhoneInput\\FilamentPhoneInputServiceProvider', - 47 => 'App\\Providers\\AppServiceProvider', - 48 => 'App\\Providers\\Filament\\AdminPanelProvider', + 15 => 'BladeUI\\Heroicons\\BladeHeroiconsServiceProvider', + 16 => 'BladeUI\\Icons\\BladeIconsServiceProvider', + 17 => 'Codeat3\\BladePhosphorIcons\\BladePhosphorIconsServiceProvider', + 18 => 'Danielebarbaro\\LaravelVatEuValidator\\VatValidatorServiceProvider', + 19 => 'Filament\\Actions\\ActionsServiceProvider', + 20 => 'Filament\\FilamentServiceProvider', + 21 => 'Filament\\Forms\\FormsServiceProvider', + 22 => 'Filament\\Infolists\\InfolistsServiceProvider', + 23 => 'Filament\\Notifications\\NotificationsServiceProvider', + 24 => 'Filament\\QueryBuilder\\QueryBuilderServiceProvider', + 25 => 'Filament\\Schemas\\SchemasServiceProvider', + 26 => 'Filament\\Support\\SupportServiceProvider', + 27 => 'Filament\\Tables\\TablesServiceProvider', + 28 => 'Filament\\Widgets\\WidgetsServiceProvider', + 29 => 'JaOcero\\RadioDeck\\RadioDeckServiceProvider', + 30 => 'Kirschbaum\\PowerJoins\\PowerJoinsServiceProvider', + 31 => 'Laravel\\Pail\\PailServiceProvider', + 32 => 'Livewire\\LivewireServiceProvider', + 33 => 'MallardDuck\\LucideIcons\\BladeLucideIconsServiceProvider', + 34 => 'Carbon\\Laravel\\ServiceProvider', + 35 => 'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider', + 36 => 'Termwind\\Laravel\\TermwindServiceProvider', + 37 => 'Pest\\Laravel\\PestServiceProvider', + 38 => 'Propaganistas\\LaravelPhone\\PhoneServiceProvider', + 39 => 'RyanChandler\\BladeCaptureDirective\\BladeCaptureDirectiveServiceProvider', + 40 => 'Spatie\\LoginLink\\LoginLinkServiceProvider', + 41 => 'Spatie\\Permission\\PermissionServiceProvider', + 42 => 'Swis\\Filament\\Backgrounds\\FilamentBackgroundsServiceProvider', + 43 => 'ToneGabes\\BetterOptions\\BetterOptionsServiceProvider', + 44 => 'ToneGabes\\Filament\\Icons\\PhosphorIconsServiceProvider', + 45 => 'Ysfkaya\\FilamentPhoneInput\\FilamentPhoneInputServiceProvider', + 46 => 'App\\Providers\\AppServiceProvider', + 47 => 'App\\Providers\\Filament\\AdminPanelProvider', ), 'deferred' => array ( diff --git a/composer.json b/composer.json index 1fd88d6..3d792b4 100644 --- a/composer.json +++ b/composer.json @@ -13,7 +13,6 @@ "agencetwogether/hookshelper": "^0.0.2", "awcodes/light-switch": "^2.0", "bezhansalleh/filament-shield": "*", - "bkwld/cloner": "^3.15", "codeat3/blade-phosphor-icons": "^2.3", "danielebarbaro/laravel-vat-eu-validator": "^2.0", "filament/filament": "^4.1", @@ -95,4 +94,4 @@ }, "minimum-stability": "stable", "prefer-stable": true -} +} \ No newline at end of file diff --git a/composer.lock b/composer.lock index 09cd187..763012c 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "21aa51411bd3f27a2c9a20f59258663c", + "content-hash": "79e067228741c162092a4bae8e49b147", "packages": [ { "name": "agencetwogether/hookshelper", @@ -390,65 +390,6 @@ ], "time": "2026-03-22T08:31:44+00:00" }, - { - "name": "bkwld/cloner", - "version": "3.15.0", - "source": { - "type": "git", - "url": "https://github.com/BKWLD/cloner.git", - "reference": "eefeefd37818467d5d54d1343f4c81a9e1ca5733" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/BKWLD/cloner/zipball/eefeefd37818467d5d54d1343f4c81a9e1ca5733", - "reference": "eefeefd37818467d5d54d1343f4c81a9e1ca5733", - "shasum": "" - }, - "require": { - "illuminate/support": "^5.5|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", - "php": ">=7.1" - }, - "require-dev": { - "bkwld/upchuck": "^2.6@dev", - "illuminate/database": "^5.5|^6.0|^10.0|^11.0|^12.0|^13.0", - "league/flysystem-vfs": "^1.0", - "mockery/mockery": "^1.2.3", - "phpunit/phpunit": "~6.0|~8.0|^9.5.10|^10.5", - "satooshi/php-coveralls": "^1.0" - }, - "suggest": { - "bkwld/upchuck": "Required for replicating of files." - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Bkwld\\Cloner\\ServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Bkwld\\Cloner\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Robert Reinhard", - "email": "info@bkwld.com" - } - ], - "description": "A trait for Laravel Eloquent models that lets you clone of a model and it's relationships, including files.", - "support": { - "issues": "https://github.com/BKWLD/cloner/issues", - "source": "https://github.com/BKWLD/cloner/tree/3.15.0" - }, - "time": "2026-05-27T16:34:53+00:00" - }, { "name": "blade-ui-kit/blade-heroicons", "version": "2.7.0", @@ -2157,16 +2098,16 @@ }, { "name": "giggsey/libphonenumber-for-php-lite", - "version": "9.0.33", + "version": "9.0.34", "source": { "type": "git", "url": "https://github.com/giggsey/libphonenumber-for-php-lite.git", - "reference": "38c09da75cebfd6f197b61e57b3a655db04163e6" + "reference": "a9f129a296b1e31f7f9b73fd81845415d302bee2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/giggsey/libphonenumber-for-php-lite/zipball/38c09da75cebfd6f197b61e57b3a655db04163e6", - "reference": "38c09da75cebfd6f197b61e57b3a655db04163e6", + "url": "https://api.github.com/repos/giggsey/libphonenumber-for-php-lite/zipball/a9f129a296b1e31f7f9b73fd81845415d302bee2", + "reference": "a9f129a296b1e31f7f9b73fd81845415d302bee2", "shasum": "" }, "require": { @@ -2231,7 +2172,7 @@ "issues": "https://github.com/giggsey/libphonenumber-for-php-lite/issues", "source": "https://github.com/giggsey/libphonenumber-for-php-lite" }, - "time": "2026-06-22T10:35:37+00:00" + "time": "2026-07-03T10:23:06+00:00" }, { "name": "graham-campbell/result-type", @@ -11980,16 +11921,16 @@ }, { "name": "php-debugbar/php-debugbar", - "version": "v3.7.6", + "version": "v3.8.0", "source": { "type": "git", "url": "https://github.com/php-debugbar/php-debugbar.git", - "reference": "1690ee1728827f9deb4b60457fa387cf44672c56" + "reference": "18ced90d4b882ed449b2278fea8692f8f7d1c13c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-debugbar/php-debugbar/zipball/1690ee1728827f9deb4b60457fa387cf44672c56", - "reference": "1690ee1728827f9deb4b60457fa387cf44672c56", + "url": "https://api.github.com/repos/php-debugbar/php-debugbar/zipball/18ced90d4b882ed449b2278fea8692f8f7d1c13c", + "reference": "18ced90d4b882ed449b2278fea8692f8f7d1c13c", "shasum": "" }, "require": { @@ -12031,7 +11972,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "3.8-dev" } }, "autoload": { @@ -12066,7 +12007,7 @@ ], "support": { "issues": "https://github.com/php-debugbar/php-debugbar/issues", - "source": "https://github.com/php-debugbar/php-debugbar/tree/v3.7.6" + "source": "https://github.com/php-debugbar/php-debugbar/tree/v3.8.0" }, "funding": [ { @@ -12078,7 +12019,7 @@ "type": "github" } ], - "time": "2026-04-30T07:31:44+00:00" + "time": "2026-07-02T12:38:20+00:00" }, { "name": "php-debugbar/symfony-bridge", diff --git a/database/migrations/2025_09_24_131440_create_projektes_table.php b/database/migrations/2025_09_24_131440_create_projektes_table.php index 61e2aa1..1196aab 100644 --- a/database/migrations/2025_09_24_131440_create_projektes_table.php +++ b/database/migrations/2025_09_24_131440_create_projektes_table.php @@ -16,6 +16,7 @@ return new class extends Migration $table->foreignId('konto_id')->constrained(); $table->foreignId('auftraggeber_id')->constrained(); $table->foreignId('gutachter_id')->constrained(); + $table->integer('cloned_from_id')->default(0); $table->string('interner_name'); $table->string('offizieller_name')->nullable(); $table->string('ort')->nullable(); diff --git a/database/migrations/2025_10_03_154046_create_projekt_objektes_table.php b/database/migrations/2025_10_03_154046_create_projekt_objektes_table.php index 58241ff..8194aca 100644 --- a/database/migrations/2025_10_03_154046_create_projekt_objektes_table.php +++ b/database/migrations/2025_10_03_154046_create_projekt_objektes_table.php @@ -14,6 +14,7 @@ return new class extends Migration Schema::create('projekt_objektes', function (Blueprint $table) { $table->id(); $table->foreignId('projekte_id')->constrained()->cascadeOnDelete(); + $table->integer('projekte_cloned_from_id')->default(0); $table->integer('orientierung_id')->nullable()->default(0); $table->boolean('nicht_in_orientierung')->default(0); $table->string('top_nummer')->nullable(); diff --git a/database/migrations/2025_10_03_154047_create_projekt_objekte_im_details_table.php b/database/migrations/2025_10_03_154047_create_projekt_objekte_im_details_table.php index d46ee05..ead1cc6 100644 --- a/database/migrations/2025_10_03_154047_create_projekt_objekte_im_details_table.php +++ b/database/migrations/2025_10_03_154047_create_projekt_objekte_im_details_table.php @@ -14,6 +14,7 @@ return new class extends Migration Schema::create('projekt_objekte_im_details', function (Blueprint $table) { $table->id(); $table->foreignId('projekte_id')->constrained()->cascadeOnDelete(); + $table->integer('projekte_objekte_cloned_from_id')->default(0); $table->foreignId('projekt_objekte_id')->constrained()->cascadeOnDelete(); $table->foreignId('projekt_methode_id'); $table->string('geschoss')->nullable();