action evaluation

This commit is contained in:
salam committed 2025-10-20 16:57:50 +02:00
1 parent d473bdc2b3
commit 9eb19cf8fd
13 files changed
+296 -131

No files matched your search

@@ -140,7 +140,7 @@ class GutachtenValidation
} }
/** /**
* Raeumealle * Projekt Methode
*/ */
$res = ProjektMethode::where('projekte_id', $record->id)->get(); $res = ProjektMethode::where('projekte_id', $record->id)->get();
if (! $res->count()) { if (! $res->count()) {
@@ -232,6 +232,6 @@ class GutachtenValidation
->body('Die Evaluierung des Projektes war erfolgreich.') ->body('Die Evaluierung des Projektes war erfolgreich.')
->send(); ->send();
Projekte::where('id', $record->id)->update(['evaluation' => 1]); Projekte::where('id', $record->id)->update(['evaluation_gutachten' => 1]);
} }
} }
@@ -17,9 +17,12 @@ class EditProjekte extends EditRecord
{ {
protected static string $resource = ProjekteResource::class; protected static string $resource = ProjekteResource::class;
#[On('refreshAllgemeinflaechen')] #[On('refreshAllgemeinflaechen'), On('refreshRaeumealle'), On('refreshMethods'), On('refreshOrientierung')]
public function refresh(): void {} public function refresh(): void {}
// #[On('refreshRaeumealle')]
// public function refresh(): void {}
protected function getHeaderActions(): array protected function getHeaderActions(): array
{ {
return [ return [
@@ -63,6 +66,15 @@ class EditProjekte extends EditRecord
/** /**
* GUTACHTEN * GUTACHTEN
*/ */
Action::make('evaluate_gutachten')
->hidden(fn ($record): bool => $record->bezahlt_am && ! $record->evaluation_gutachten ? false : true)
->color('success')
->label('Evaluieren')
->icon('phosphor-eye')
->action(function ($record): void {
GutachtenValidation::controll($record);
$this->record->refresh();
}),
ActionGroup::make([ ActionGroup::make([
Action::make('gutachten') Action::make('gutachten')
->disabled(fn ($record): bool => ! $record->pdf_gutachten_status) ->disabled(fn ($record): bool => ! $record->pdf_gutachten_status)
@@ -71,36 +83,21 @@ class EditProjekte extends EditRecord
1 => 'info', 1 => 'info',
default => 'gray', default => 'gray',
}) })
->label('3) Herunterladen') ->label('Öffnen')
->icon('phosphor-file-pdf') ->icon('icon-pdf')
->url(fn ($record) => route('standard.download', ['record' => $record, 'mode' => 'file'])) ->url(fn ($record) => route('standard.download', ['record' => $record, 'mode' => 'file']))
->openUrlInNewTab(), ->openUrlInNewTab(),
Action::make('make_gutachten') Action::make('make_gutachten')
->hidden(fn ($record): bool => $record->bezahlt_am ? false : true) ->hidden(fn ($record): bool => $record->bezahlt_am ? false : true)
->color(fn ($record): string => match ($record->evaluation) { ->color(fn ($record): string => match ($record->evaluation_gutachten) {
1 => 'info', 1 => 'info',
default => 'gray', default => 'gray',
}) })
->disabled(fn ($record): bool => $record->evaluation ? false : true) ->disabled(fn ($record): bool => $record->evaluation_gutachten ? false : true)
->label('2) Generieren') ->label('Berechnen')
->icon('phosphor-math-operations') ->icon('phosphor-calculator')
->url(fn ($record) => route('standard.download', ['record' => $record, 'mode' => 'new'])) ->url(fn ($record) => route('standard.download', ['record' => $record, 'mode' => 'new']))
->openUrlInNewTab(), ->openUrlInNewTab(),
Action::make('evaluate_gutachten')
->hidden(fn ($record): bool => $record->bezahlt_am ? false : true)
->color(fn ($record): string => match ($record->evaluation) {
1 => 'success',
default => 'primary',
})
->label('1) Evaluieren')
->icon(fn ($record): string => match ($record->evaluation) {
1 => 'phosphor-check',
default => 'phosphor-eye',
})
->action(function ($record): void {
GutachtenValidation::controll($record);
$this->record->refresh();
}),
])->label('Gutachten') ])->label('Gutachten')
->icon('heroicon-m-ellipsis-vertical') ->icon('heroicon-m-ellipsis-vertical')
->button() ->button()
@@ -116,13 +113,14 @@ class EditProjekte extends EditRecord
1 => 'info', 1 => 'info',
default => 'gray', default => 'gray',
}) })
->label('Herunterladen') ->label('Öffnen')
->icon('phosphor-file-pdf') ->icon('icon-pdf')
->url(fn ($record) => route('nutzwerte.download', ['record' => $record, 'mode' => 'file'])) ->url(fn ($record) => route('nutzwerte.download', ['record' => $record, 'mode' => 'file']))
->openUrlInNewTab(), ->openUrlInNewTab(),
Action::make('make_nutzwerte') Action::make('make_nutzwerte')
->hidden(fn ($record): bool => $record->bezahlt_am ? false : true) ->hidden(fn ($record): bool => $record->bezahlt_am ? false : true)
->label('Neu Berechnen') ->disabled(fn ($record): bool => $record->evaluation_gutachten ? false : true)
->label('Berechnen')
->icon('phosphor-calculator') ->icon('phosphor-calculator')
->url(fn ($record) => route('nutzwerte.download', ['record' => $record, 'mode' => 'new'])) ->url(fn ($record) => route('nutzwerte.download', ['record' => $record, 'mode' => 'new']))
->openUrlInNewTab(), ->openUrlInNewTab(),
@@ -136,12 +134,14 @@ class EditProjekte extends EditRecord
ActionGroup::make([ ActionGroup::make([
Action::make('excel-nutzflaeche-nutzwerte') Action::make('excel-nutzflaeche-nutzwerte')
->hidden(fn ($record): bool => $record->bezahlt_am ? false : true) ->hidden(fn ($record): bool => $record->bezahlt_am ? false : true)
->disabled(fn ($record): bool => $record->evaluation_gutachten ? false : true)
->label('Nutzfläche & Nutzwerte') ->label('Nutzfläche & Nutzwerte')
->icon('icon-excel') ->icon('icon-excel')
->url(fn ($record) => route('excel.download', ['record' => $record, 'mode' => 'file'])) ->url(fn ($record) => route('excel.download', ['record' => $record, 'mode' => 'file']))
->openUrlInNewTab(), ->openUrlInNewTab(),
Action::make('excel-nutzflaechen-aufstellung') Action::make('excel-nutzflaechen-aufstellung')
->hidden(fn ($record): bool => $record->bezahlt_am ? false : true) ->hidden(fn ($record): bool => $record->bezahlt_am ? false : true)
->disabled(fn ($record): bool => $record->evaluation_gutachten ? false : true)
->label('Nutzflächen Aufstellung') ->label('Nutzflächen Aufstellung')
->icon('icon-excel') ->icon('icon-excel')
->url(fn ($record) => route('excel.download', ['record' => $record, 'mode' => 'file'])) ->url(fn ($record) => route('excel.download', ['record' => $record, 'mode' => 'file']))
@@ -22,6 +22,7 @@ use Filament\Tables\Columns\TextInputColumn;
use Filament\Tables\Filters\TernaryFilter; use Filament\Tables\Filters\TernaryFilter;
use Filament\Tables\Table; use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Collection;
use Livewire\Component;
class OrientierungZuAbschlaegesRelationManager extends RelationManager class OrientierungZuAbschlaegesRelationManager extends RelationManager
{ {
@@ -58,7 +59,10 @@ class OrientierungZuAbschlaegesRelationManager extends RelationManager
]), ]),
CheckboxColumn::make('nicht_in_orientierung') CheckboxColumn::make('nicht_in_orientierung')
->label('Nicht in Orientierung') ->label('Nicht in Orientierung')
->toggleable(), ->toggleable()
->afterStateUpdated(function (Component $livewire) {
$livewire->dispatch('refreshOrientierung');
}),
TextColumn::make('raumart') TextColumn::make('raumart')
->toggleable() ->toggleable()
->width('2rem') ->width('2rem')
@@ -71,17 +75,40 @@ class OrientierungZuAbschlaegesRelationManager extends RelationManager
->selectablePlaceholder(true) ->selectablePlaceholder(true)
->options(Orientierung::pluck('name', 'id')) ->options(Orientierung::pluck('name', 'id'))
->disableOptionWhen(fn (string $value): bool => in_array($value, [2, 11, 24, 33, 36])) ->disableOptionWhen(fn (string $value): bool => in_array($value, [2, 11, 24, 33, 36]))
->preloadOptions(), ->preloadOptions()->afterStateUpdated(function (Component $livewire) {
TextInputColumn::make('a')->label($spalten['a'] ?? '')->hidden(isset($spalten['a']) ? false : true)->toggleable()->rules(['numeric'])->alignCenter(), $livewire->dispatch('refreshOrientierung');
TextInputColumn::make('b')->label($spalten['b'] ?? '')->hidden(isset($spalten['b']) ? false : true)->toggleable()->rules(['numeric'])->alignCenter(), }),
TextInputColumn::make('c')->label($spalten['c'] ?? '')->hidden(isset($spalten['c']) ? false : true)->toggleable()->rules(['numeric'])->alignCenter(), TextInputColumn::make('a')->label($spalten['a'] ?? '')->hidden(isset($spalten['a']) ? false : true)->toggleable()->rules(['numeric'])->alignCenter()
TextInputColumn::make('d')->label($spalten['d'] ?? '')->hidden(isset($spalten['d']) ? false : true)->toggleable()->rules(['numeric'])->alignCenter(), ->afterStateUpdated(function (Component $livewire) {
TextInputColumn::make('e')->label($spalten['e'] ?? '')->hidden(isset($spalten['e']) ? false : true)->toggleable()->rules(['numeric'])->alignCenter(), $livewire->dispatch('refreshOrientierung');
TextInputColumn::make('f')->label($spalten['f'] ?? '')->hidden(isset($spalten['f']) ? false : true)->toggleable()->rules(['numeric'])->alignCenter(), }),
TextInputColumn::make('g')->label($spalten['g'] ?? '')->hidden(isset($spalten['g']) ? false : true)->toggleable()->rules(['numeric'])->alignCenter(), TextInputColumn::make('b')->label($spalten['b'] ?? '')->hidden(isset($spalten['b']) ? false : true)->toggleable()->rules(['numeric'])->alignCenter()->afterStateUpdated(function (Component $livewire) {
TextInputColumn::make('h')->label($spalten['h'] ?? '')->hidden(isset($spalten['h']) ? false : true)->toggleable()->rules(['numeric'])->alignCenter(), $livewire->dispatch('refreshOrientierung');
TextInputColumn::make('i')->label($spalten['i'] ?? '')->hidden(isset($spalten['i']) ? false : true)->toggleable()->rules(['numeric'])->alignCenter(), }),
TextInputColumn::make('j')->label($spalten['j'] ?? '')->hidden(isset($spalten['j']) ? false : true)->toggleable()->rules(['numeric'])->alignCenter(), TextInputColumn::make('c')->label($spalten['c'] ?? '')->hidden(isset($spalten['c']) ? false : true)->toggleable()->rules(['numeric'])->alignCenter()->afterStateUpdated(function (Component $livewire) {
$livewire->dispatch('refreshOrientierung');
}),
TextInputColumn::make('d')->label($spalten['d'] ?? '')->hidden(isset($spalten['d']) ? false : true)->toggleable()->rules(['numeric'])->alignCenter()->afterStateUpdated(function (Component $livewire) {
$livewire->dispatch('refreshOrientierung');
}),
TextInputColumn::make('e')->label($spalten['e'] ?? '')->hidden(isset($spalten['e']) ? false : true)->toggleable()->rules(['numeric'])->alignCenter()->afterStateUpdated(function (Component $livewire) {
$livewire->dispatch('refreshOrientierung');
}),
TextInputColumn::make('f')->label($spalten['f'] ?? '')->hidden(isset($spalten['f']) ? false : true)->toggleable()->rules(['numeric'])->alignCenter()->afterStateUpdated(function (Component $livewire) {
$livewire->dispatch('refreshOrientierung');
}),
TextInputColumn::make('g')->label($spalten['g'] ?? '')->hidden(isset($spalten['g']) ? false : true)->toggleable()->rules(['numeric'])->alignCenter()->afterStateUpdated(function (Component $livewire) {
$livewire->dispatch('refreshOrientierung');
}),
TextInputColumn::make('h')->label($spalten['h'] ?? '')->hidden(isset($spalten['h']) ? false : true)->toggleable()->rules(['numeric'])->alignCenter()->afterStateUpdated(function (Component $livewire) {
$livewire->dispatch('refreshOrientierung');
}),
TextInputColumn::make('i')->label($spalten['i'] ?? '')->hidden(isset($spalten['i']) ? false : true)->toggleable()->rules(['numeric'])->alignCenter()->afterStateUpdated(function (Component $livewire) {
$livewire->dispatch('refreshOrientierung');
}),
TextInputColumn::make('j')->label($spalten['j'] ?? '')->hidden(isset($spalten['j']) ? false : true)->toggleable()->rules(['numeric'])->alignCenter()->afterStateUpdated(function (Component $livewire) {
$livewire->dispatch('refreshOrientierung');
}),
TextColumn::make('nutzwert') TextColumn::make('nutzwert')
->extraHeaderAttributes([ ->extraHeaderAttributes([
'style' => 'position: sticky; right: 0; z-index: 1;', 'style' => 'position: sticky; right: 0; z-index: 1;',
@@ -108,7 +135,10 @@ class OrientierungZuAbschlaegesRelationManager extends RelationManager
->modalHeading('Merkmale') ->modalHeading('Merkmale')
->slideOver() ->slideOver()
// ->modalWidth(Width::Medium) // ->modalWidth(Width::Medium)
->modalContent(view('filament.pages.actions.merkmale')), ->modalContent(view('filament.pages.actions.merkmale'))
->after(function (Component $livewire) {
$livewire->dispatch('refreshOrientierung');
}),
Action::make('erstellen') Action::make('erstellen')
->action(fn (CreateOrientierungZuAbschlaege $createOrientierungZuAbschlaege) => $createOrientierungZuAbschlaege->create($this->ownerRecord)) ->action(fn (CreateOrientierungZuAbschlaege $createOrientierungZuAbschlaege) => $createOrientierungZuAbschlaege->create($this->ownerRecord))
->requiresConfirmation() ->requiresConfirmation()
@@ -117,7 +147,10 @@ class OrientierungZuAbschlaegesRelationManager extends RelationManager
->modalSubmitActionLabel('Erstellen') ->modalSubmitActionLabel('Erstellen')
->label('Erstellen') ->label('Erstellen')
->tooltip('Daten werden aus "Orientierung Zu/Abschläge" Tabelle gefiltert.') ->tooltip('Daten werden aus "Orientierung Zu/Abschläge" Tabelle gefiltert.')
->icon('heroicon-o-cog-8-tooth'), ->icon('heroicon-o-cog-8-tooth')
->after(function (Component $livewire) {
$livewire->dispatch('refreshOrientierung');
}),
]) ])
->toolbarActions([ ->toolbarActions([
BulkActionGroup::make([ BulkActionGroup::make([
@@ -136,6 +169,9 @@ class OrientierungZuAbschlaegesRelationManager extends RelationManager
['raumart' => $data['raumart']] ['raumart' => $data['raumart']]
); );
} }
})
->after(function (Component $livewire) {
$livewire->dispatch('refreshOrientierung');
}), }),
BulkAction::make('methode') BulkAction::make('methode')
->color('primary') ->color('primary')
@@ -156,6 +192,9 @@ class OrientierungZuAbschlaegesRelationManager extends RelationManager
['orientierung_id' => $data['methode_id']] ['orientierung_id' => $data['methode_id']]
); );
} }
})
->after(function (Component $livewire) {
$livewire->dispatch('refreshOrientierung');
}), }),
BulkAction::make('nicht_in_orientierung') BulkAction::make('nicht_in_orientierung')
->color('primary') ->color('primary')
@@ -177,6 +216,9 @@ class OrientierungZuAbschlaegesRelationManager extends RelationManager
['nicht_in_orientierung' => 1] ['nicht_in_orientierung' => 1]
); );
} }
})
->after(function (Component $livewire) {
$livewire->dispatch('refreshOrientierung');
}), }),
BulkAction::make('a') BulkAction::make('a')
->label($spalten['a'] ?? '') ->label($spalten['a'] ?? '')
@@ -194,6 +236,8 @@ class OrientierungZuAbschlaegesRelationManager extends RelationManager
['a' => $data['a']] ['a' => $data['a']]
); );
} }
})->after(function (Component $livewire) {
$livewire->dispatch('refreshOrientierung');
}), }),
BulkAction::make('b') BulkAction::make('b')
->label($spalten['b'] ?? '') ->label($spalten['b'] ?? '')
@@ -211,6 +255,8 @@ class OrientierungZuAbschlaegesRelationManager extends RelationManager
['b' => $data['b']] ['b' => $data['b']]
); );
} }
})->after(function (Component $livewire) {
$livewire->dispatch('refreshOrientierung');
}), }),
BulkAction::make('c') BulkAction::make('c')
->label($spalten['c'] ?? '') ->label($spalten['c'] ?? '')
@@ -228,6 +274,8 @@ class OrientierungZuAbschlaegesRelationManager extends RelationManager
['c' => $data['c']] ['c' => $data['c']]
); );
} }
})->after(function (Component $livewire) {
$livewire->dispatch('refreshOrientierung');
}), }),
BulkAction::make('d') BulkAction::make('d')
->label($spalten['d'] ?? '') ->label($spalten['d'] ?? '')
@@ -245,6 +293,8 @@ class OrientierungZuAbschlaegesRelationManager extends RelationManager
['d' => $data['d']] ['d' => $data['d']]
); );
} }
})->after(function (Component $livewire) {
$livewire->dispatch('refreshOrientierung');
}), }),
BulkAction::make('e') BulkAction::make('e')
->label($spalten['e'] ?? '') ->label($spalten['e'] ?? '')
@@ -262,6 +312,8 @@ class OrientierungZuAbschlaegesRelationManager extends RelationManager
['e' => $data['e']] ['e' => $data['e']]
); );
} }
})->after(function (Component $livewire) {
$livewire->dispatch('refreshOrientierung');
}), }),
BulkAction::make('f') BulkAction::make('f')
->label($spalten['f'] ?? '') ->label($spalten['f'] ?? '')
@@ -279,6 +331,8 @@ class OrientierungZuAbschlaegesRelationManager extends RelationManager
['f' => $data['f']] ['f' => $data['f']]
); );
} }
})->after(function (Component $livewire) {
$livewire->dispatch('refreshOrientierung');
}), }),
BulkAction::make('g') BulkAction::make('g')
->label($spalten['g'] ?? '') ->label($spalten['g'] ?? '')
@@ -296,6 +350,8 @@ class OrientierungZuAbschlaegesRelationManager extends RelationManager
['g' => $data['g']] ['g' => $data['g']]
); );
} }
})->after(function (Component $livewire) {
$livewire->dispatch('refreshOrientierung');
}), }),
BulkAction::make('h') BulkAction::make('h')
->label($spalten['h'] ?? '') ->label($spalten['h'] ?? '')
@@ -313,6 +369,8 @@ class OrientierungZuAbschlaegesRelationManager extends RelationManager
['h' => $data['h']] ['h' => $data['h']]
); );
} }
})->after(function (Component $livewire) {
$livewire->dispatch('refreshOrientierung');
}), }),
BulkAction::make('i') BulkAction::make('i')
->label($spalten['i'] ?? '') ->label($spalten['i'] ?? '')
@@ -330,6 +388,8 @@ class OrientierungZuAbschlaegesRelationManager extends RelationManager
['i' => $data['i']] ['i' => $data['i']]
); );
} }
})->after(function (Component $livewire) {
$livewire->dispatch('refreshOrientierung');
}), }),
BulkAction::make('j') BulkAction::make('j')
->label($spalten['j'] ?? '') ->label($spalten['j'] ?? '')
@@ -347,6 +407,8 @@ class OrientierungZuAbschlaegesRelationManager extends RelationManager
['j' => $data['j']] ['j' => $data['j']]
); );
} }
})->after(function (Component $livewire) {
$livewire->dispatch('refreshOrientierung');
}), }),
]), ]),
]); ]);
@@ -17,6 +17,7 @@ use Filament\Tables\Columns\TextInputColumn;
use Filament\Tables\Filters\TernaryFilter; use Filament\Tables\Filters\TernaryFilter;
use Filament\Tables\Table; use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Collection;
use Livewire\Component;
class ProjektMethodesRelationManager extends RelationManager class ProjektMethodesRelationManager extends RelationManager
{ {
@@ -39,14 +40,26 @@ class ProjektMethodesRelationManager extends RelationManager
SelectColumn::make('methode_id') SelectColumn::make('methode_id')
->selectablePlaceholder(true) ->selectablePlaceholder(true)
->optionsRelationship('methode', 'name') ->optionsRelationship('methode', 'name')
->preloadOptions(), ->preloadOptions()
->rules(['required'])
->afterStateUpdated(function (Component $livewire) {
$livewire->dispatch('refreshMethods');
})->validationMessages([
'required' => 'Die Eingabe eines Faktors ist erforderlich.',
]),
TextColumn::make('raumart') TextColumn::make('raumart')
->searchable(), ->searchable(),
TextInputColumn::make('faktor') TextInputColumn::make('faktor')
->suffixIcon('phosphor-function') ->suffixIcon('phosphor-function')
->width('1rem') ->width('1rem')
->rules(['required', 'faktor' => 'decimal:0,2']) ->rules(['required', 'faktor' => 'decimal:0,2'])
->searchable(), ->searchable()
->afterStateUpdated(function (Component $livewire) {
$livewire->dispatch('refreshMethods');
})->validationMessages([
'required' => 'Die Eingabe eines Faktors ist erforderlich.',
'decimal' => 'Für den Faktors sind zwei Dezimalstellen erforderlich.',
]),
]) ])
->filters([ ->filters([
TernaryFilter::make('methode_id') TernaryFilter::make('methode_id')
@@ -61,47 +74,54 @@ class ProjektMethodesRelationManager extends RelationManager
->modalSubmitActionLabel('Erstellen') ->modalSubmitActionLabel('Erstellen')
->label('Erstellen') ->label('Erstellen')
->tooltip('Daten werden aus "Räume Alle" Tabelle gefiltert.') ->tooltip('Daten werden aus "Räume Alle" Tabelle gefiltert.')
->icon('heroicon-o-cog-8-tooth'), ->icon('heroicon-o-cog-8-tooth')
->after(function (Component $livewire) {
$livewire->dispatch('refreshMethods');
}),
]) ])
->toolbarActions([ ->toolbarActions([
BulkActionGroup::make([ BulkActionGroup::make([
BulkAction::make('faktor') BulkAction::make('faktor')
->color('primary') ->color('primary')
->label('Faktor zuweisen') ->label('Faktor zuweisen')
->schema([ ->schema([
TextInput::make('faktor') TextInput::make('faktor')
->prefixIcon('phosphor-function') ->prefixIcon('phosphor-function')
->numeric() ->numeric()
->required(), ->required(),
]) ])
->icon('phosphor-function') ->icon('phosphor-function')
->action(function (Collection $records, array $data): void { ->action(function (Collection $records, array $data): void {
foreach ($records as $record) { foreach ($records as $record) {
ProjektMethode::where('id', '=', $record->id) ProjektMethode::where('id', '=', $record->id)
->update( ->update(
['faktor' => $data['faktor']] ['faktor' => $data['faktor']]
); );
} }
}), })->after(function (Component $livewire) {
$livewire->dispatch('refreshMethods');
}),
BulkAction::make('methode') BulkAction::make('methode')
->color('primary') ->color('primary')
->label('Methode zuweisen') ->label('Methode zuweisen')
->schema([ ->schema([
Select::make('methode_id') Select::make('methode_id')
->label('Methode') ->label('Methode')
->prefixIcon('phosphor-calculator') ->prefixIcon('phosphor-calculator')
->options(Methode::pluck('name', 'id')) ->options(Methode::pluck('name', 'id'))
->required(), ->required(),
]) ])
->icon('phosphor-calculator') ->icon('phosphor-calculator')
->action(function (Collection $records, array $data): void { ->action(function (Collection $records, array $data): void {
foreach ($records as $record) { foreach ($records as $record) {
ProjektMethode::where('id', '=', $record->id) ProjektMethode::where('id', '=', $record->id)
->update( ->update(
['methode_id' => $data['methode_id']] ['methode_id' => $data['methode_id']]
); );
} }
}), })->after(function (Component $livewire) {
$livewire->dispatch('refreshMethods');
}),
]), ]),
]); ]);
} }
@@ -24,6 +24,7 @@ use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Collection;
use Illuminate\Support\HtmlString; use Illuminate\Support\HtmlString;
use Illuminate\Validation\Rules\File; use Illuminate\Validation\Rules\File;
use Livewire\Component;
class RaeumeallesRelationManager extends RelationManager class RaeumeallesRelationManager extends RelationManager
{ {
@@ -41,9 +42,35 @@ class RaeumeallesRelationManager extends RelationManager
{ {
return $schema return $schema
->components([ ->components([
TextInput::make('top_nummer')
->required()
->maxLength(255),
TextInput::make('geschoss') TextInput::make('geschoss')
->required() ->required()
->maxLength(255), ->maxLength(255),
TextInput::make('raumart')
->required()
->maxLength(255),
TextInput::make('flaeche')
->suffix(new HtmlString(' m²'))
->rules(['required', 'flaeche' => 'decimal:2'])
->label('Fläche')
->validationMessages([
'required' => 'Die Eingabe einer Fläche ist erforderlich.',
'decimal' => 'Für die Fläche sind zwei Dezimalstellen erforderlich.',
])
->afterStateUpdated(function (Component $livewire) {
$livewire->dispatch('refreshAllgemeinflaechen');
}),
TextInput::make('faktor')
->suffixIcon('phosphor-function')
->rules(['required', 'faktor' => 'decimal:0,2'])
->afterStateUpdated(function (Component $livewire) {
$livewire->dispatch('refreshRaeumealle');
})->validationMessages([
'required' => 'Die Eingabe eines Faktors ist erforderlich.',
'decimal' => 'Für den Faktors sind zwei Dezimalstellen erforderlich.',
]),
]); ]);
} }
@@ -63,7 +90,13 @@ class RaeumeallesRelationManager extends RelationManager
->suffixIcon('phosphor-function') ->suffixIcon('phosphor-function')
->width('1rem') ->width('1rem')
->rules(['required', 'faktor' => 'decimal:0,2']) ->rules(['required', 'faktor' => 'decimal:0,2'])
->searchable(), ->searchable()
->afterStateUpdated(function (Component $livewire) {
$livewire->dispatch('refreshRaeumealle');
})->validationMessages([
'required' => 'Die Eingabe eines Faktors ist erforderlich.',
'decimal' => 'Für den Faktors sind zwei Dezimalstellen erforderlich.',
]),
TextInputColumn::make('flaeche') TextInputColumn::make('flaeche')
->summarize(Sum::make()->label('Gesammt')->numeric( ->summarize(Sum::make()->label('Gesammt')->numeric(
decimalPlaces: 2, decimalPlaces: 2,
@@ -73,7 +106,13 @@ class RaeumeallesRelationManager extends RelationManager
->alignment('right') ->alignment('right')
->rules(['required', 'flaeche' => 'decimal:2']) ->rules(['required', 'flaeche' => 'decimal:2'])
->label('Fläche') ->label('Fläche')
->searchable(), ->searchable()
->afterStateUpdated(function (Component $livewire) {
$livewire->dispatch('refreshRaeumealle');
})->validationMessages([
'required' => 'Die Eingabe einer Fläche ist erforderlich.',
'decimal' => 'Für die Fläche sind zwei Dezimalstellen erforderlich.',
]),
TextColumn::make('nutzwert') TextColumn::make('nutzwert')
->alignCenter() ->alignCenter()
->default(fn ($record): ?int => round($record->faktor * $record->flaeche)) ->default(fn ($record): ?int => round($record->faktor * $record->flaeche))
@@ -115,8 +154,12 @@ class RaeumeallesRelationManager extends RelationManager
]), ]),
]) ])
->recordActions([ ->recordActions([
EditAction::make()->iconButton(), EditAction::make()->iconButton()->after(function (Component $livewire) {
DeleteAction::make()->iconButton(), $livewire->dispatch('refreshRaeumealle');
}),
DeleteAction::make()->iconButton()->after(function (Component $livewire) {
$livewire->dispatch('refreshRaeumealle');
}),
]) ])
->toolbarActions([ ->toolbarActions([
BulkActionGroup::make([ BulkActionGroup::make([
@@ -137,8 +180,12 @@ class RaeumeallesRelationManager extends RelationManager
['faktor' => $data['faktor']] ['faktor' => $data['faktor']]
); );
} }
})->after(function (Component $livewire) {
$livewire->dispatch('refreshRaeumealle');
}), }),
DeleteBulkAction::make(), DeleteBulkAction::make()->after(function (Component $livewire) {
$livewire->dispatch('refreshRaeumealle');
}),
]), ]),
]); ]);
} }
+1 -1
View File
@@ -18,7 +18,7 @@ class Allgemeinflaechen extends Model
parent::boot(); parent::boot();
self::updated(function ($model) { self::updated(function ($model) {
Projekte::where('id', $model['projekte_id'])->update(['evaluation' => false]); Projekte::where('id', $model['projekte_id'])->update(['evaluation_gutachten' => false]);
}); });
} }
} }
+9
View File
@@ -24,6 +24,15 @@ class OrientierungZuAbschlaege extends Model
'j', 'j',
]; ];
public static function boot()
{
parent::boot();
self::updated(function ($model) {
Projekte::where('id', $model['projekte_id'])->update(['evaluation_gutachten' => false]);
});
}
public function orientierung() public function orientierung()
{ {
return $this->hasOne(Orientierung::class, 'id', 'orientierung_id'); return $this->hasOne(Orientierung::class, 'id', 'orientierung_id');
+9
View File
@@ -14,6 +14,15 @@ class ProjektMethode extends Model
'flaeche', 'flaeche',
]; ];
public static function boot()
{
parent::boot();
self::updated(function ($model) {
Projekte::where('id', $model['projekte_id'])->update(['evaluation_gutachten' => false]);
});
}
public function methode() public function methode()
{ {
return $this->hasOne(Methode::class, 'id', 'methode_id'); return $this->hasOne(Methode::class, 'id', 'methode_id');
+9
View File
@@ -15,4 +15,13 @@ class Raeumealle extends Model
'faktor', 'faktor',
'flaeche', 'flaeche',
]; ];
public static function boot()
{
parent::boot();
self::updated(function ($model) {
Projekte::where('id', $model['projekte_id'])->update(['evaluation_gutachten' => false]);
});
}
} }
+21 -21
View File
@@ -531,7 +531,7 @@ app('router')->setCompiledRoutes(
array ( array (
0 => 0 =>
array ( array (
'_route' => 'generated::cMFYRNr1o1PRseSZ', '_route' => 'generated::exIAp0EADn5yoY2H',
), ),
1 => NULL, 1 => NULL,
2 => 2 =>
@@ -551,7 +551,7 @@ app('router')->setCompiledRoutes(
array ( array (
0 => 0 =>
array ( array (
'_route' => 'generated::2x2QKQMIdsdiHpyb', '_route' => 'generated::fzMVy1Jf9tAsto8V',
), ),
1 => NULL, 1 => NULL,
2 => 2 =>
@@ -609,7 +609,7 @@ app('router')->setCompiledRoutes(
array ( array (
0 => 0 =>
array ( array (
'_route' => 'generated::hszD9fZTxpanIoJv', '_route' => 'generated::RbpkeOigW19C0cYF',
), ),
1 => NULL, 1 => NULL,
2 => 2 =>
@@ -629,7 +629,7 @@ app('router')->setCompiledRoutes(
array ( array (
0 => 0 =>
array ( array (
'_route' => 'generated::elk9I3a8y1xOVGye', '_route' => 'generated::rS6V9GEwPgiewAuw',
), ),
1 => NULL, 1 => NULL,
2 => 2 =>
@@ -649,7 +649,7 @@ app('router')->setCompiledRoutes(
array ( array (
0 => 0 =>
array ( array (
'_route' => 'generated::9FyTMqQa1k6WGHuY', '_route' => 'generated::w1rEzg4szFuoQGRb',
), ),
1 => NULL, 1 => NULL,
2 => 2 =>
@@ -669,7 +669,7 @@ app('router')->setCompiledRoutes(
array ( array (
0 => 0 =>
array ( array (
'_route' => 'generated::pR5eI8BwQCtOz6j1', '_route' => 'generated::aBLuOJDcLU7fag3q',
), ),
1 => NULL, 1 => NULL,
2 => 2 =>
@@ -689,7 +689,7 @@ app('router')->setCompiledRoutes(
array ( array (
0 => 0 =>
array ( array (
'_route' => 'generated::9p3WHLQBm12TOrAJ', '_route' => 'generated::AjOyKv2jzRor1QA5',
), ),
1 => NULL, 1 => NULL,
2 => 2 =>
@@ -2740,7 +2740,7 @@ app('router')->setCompiledRoutes(
'waitSeconds' => NULL, 'waitSeconds' => NULL,
'withTrashed' => false, 'withTrashed' => false,
), ),
'generated::cMFYRNr1o1PRseSZ' => 'generated::exIAp0EADn5yoY2H' =>
array ( array (
'methods' => 'methods' =>
array ( array (
@@ -2752,7 +2752,7 @@ app('router')->setCompiledRoutes(
array ( array (
'uses' => 'Livewire\\Mechanisms\\FrontendAssets\\FrontendAssets@returnJavaScriptAsFile', 'uses' => 'Livewire\\Mechanisms\\FrontendAssets\\FrontendAssets@returnJavaScriptAsFile',
'controller' => 'Livewire\\Mechanisms\\FrontendAssets\\FrontendAssets@returnJavaScriptAsFile', 'controller' => 'Livewire\\Mechanisms\\FrontendAssets\\FrontendAssets@returnJavaScriptAsFile',
'as' => 'generated::cMFYRNr1o1PRseSZ', 'as' => 'generated::exIAp0EADn5yoY2H',
), ),
'fallback' => false, 'fallback' => false,
'defaults' => 'defaults' =>
@@ -2768,7 +2768,7 @@ app('router')->setCompiledRoutes(
'waitSeconds' => NULL, 'waitSeconds' => NULL,
'withTrashed' => false, 'withTrashed' => false,
), ),
'generated::2x2QKQMIdsdiHpyb' => 'generated::fzMVy1Jf9tAsto8V' =>
array ( array (
'methods' => 'methods' =>
array ( array (
@@ -2780,7 +2780,7 @@ app('router')->setCompiledRoutes(
array ( array (
'uses' => 'Livewire\\Mechanisms\\FrontendAssets\\FrontendAssets@maps', 'uses' => 'Livewire\\Mechanisms\\FrontendAssets\\FrontendAssets@maps',
'controller' => 'Livewire\\Mechanisms\\FrontendAssets\\FrontendAssets@maps', 'controller' => 'Livewire\\Mechanisms\\FrontendAssets\\FrontendAssets@maps',
'as' => 'generated::2x2QKQMIdsdiHpyb', 'as' => 'generated::fzMVy1Jf9tAsto8V',
), ),
'fallback' => false, 'fallback' => false,
'defaults' => 'defaults' =>
@@ -2882,7 +2882,7 @@ app('router')->setCompiledRoutes(
'waitSeconds' => NULL, 'waitSeconds' => NULL,
'withTrashed' => false, 'withTrashed' => false,
), ),
'generated::hszD9fZTxpanIoJv' => 'generated::RbpkeOigW19C0cYF' =>
array ( array (
'methods' => 'methods' =>
array ( array (
@@ -2911,7 +2911,7 @@ app('router')->setCompiledRoutes(
\'exception\' => $exception, \'exception\' => $exception,
]), status: $exception ? 500 : 200); ]), status: $exception ? 500 : 200);
}";s:5:"scope";s:54:"Illuminate\\Foundation\\Configuration\\ApplicationBuilder";s:4:"this";N;s:4:"self";s:32:"0000000000000f3b0000000000000000";}}', }";s:5:"scope";s:54:"Illuminate\\Foundation\\Configuration\\ApplicationBuilder";s:4:"this";N;s:4:"self";s:32:"0000000000000f3b0000000000000000";}}',
'as' => 'generated::hszD9fZTxpanIoJv', 'as' => 'generated::RbpkeOigW19C0cYF',
), ),
'fallback' => false, 'fallback' => false,
'defaults' => 'defaults' =>
@@ -2927,7 +2927,7 @@ app('router')->setCompiledRoutes(
'waitSeconds' => NULL, 'waitSeconds' => NULL,
'withTrashed' => false, 'withTrashed' => false,
), ),
'generated::elk9I3a8y1xOVGye' => 'generated::rS6V9GEwPgiewAuw' =>
array ( array (
'methods' => 'methods' =>
array ( array (
@@ -2949,7 +2949,7 @@ app('router')->setCompiledRoutes(
'where' => 'where' =>
array ( array (
), ),
'as' => 'generated::elk9I3a8y1xOVGye', 'as' => 'generated::rS6V9GEwPgiewAuw',
), ),
'fallback' => false, 'fallback' => false,
'defaults' => 'defaults' =>
@@ -2965,7 +2965,7 @@ app('router')->setCompiledRoutes(
'waitSeconds' => NULL, 'waitSeconds' => NULL,
'withTrashed' => false, 'withTrashed' => false,
), ),
'generated::9FyTMqQa1k6WGHuY' => 'generated::w1rEzg4szFuoQGRb' =>
array ( array (
'methods' => 'methods' =>
array ( array (
@@ -2987,7 +2987,7 @@ app('router')->setCompiledRoutes(
'where' => 'where' =>
array ( array (
), ),
'as' => 'generated::9FyTMqQa1k6WGHuY', 'as' => 'generated::w1rEzg4szFuoQGRb',
), ),
'fallback' => false, 'fallback' => false,
'defaults' => 'defaults' =>
@@ -3003,7 +3003,7 @@ app('router')->setCompiledRoutes(
'waitSeconds' => NULL, 'waitSeconds' => NULL,
'withTrashed' => false, 'withTrashed' => false,
), ),
'generated::pR5eI8BwQCtOz6j1' => 'generated::aBLuOJDcLU7fag3q' =>
array ( array (
'methods' => 'methods' =>
array ( array (
@@ -3025,7 +3025,7 @@ app('router')->setCompiledRoutes(
'where' => 'where' =>
array ( array (
), ),
'as' => 'generated::pR5eI8BwQCtOz6j1', 'as' => 'generated::aBLuOJDcLU7fag3q',
), ),
'fallback' => false, 'fallback' => false,
'defaults' => 'defaults' =>
@@ -3041,7 +3041,7 @@ app('router')->setCompiledRoutes(
'waitSeconds' => NULL, 'waitSeconds' => NULL,
'withTrashed' => false, 'withTrashed' => false,
), ),
'generated::9p3WHLQBm12TOrAJ' => 'generated::AjOyKv2jzRor1QA5' =>
array ( array (
'methods' => 'methods' =>
array ( array (
@@ -3063,7 +3063,7 @@ app('router')->setCompiledRoutes(
'where' => 'where' =>
array ( array (
), ),
'as' => 'generated::9p3WHLQBm12TOrAJ', 'as' => 'generated::AjOyKv2jzRor1QA5',
), ),
'fallback' => false, 'fallback' => false,
'defaults' => 'defaults' =>
Generated
+12 -12
View File
@@ -9438,28 +9438,28 @@
}, },
{ {
"name": "webmozart/assert", "name": "webmozart/assert",
"version": "1.11.0", "version": "1.12.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/webmozarts/assert.git", "url": "https://github.com/webmozarts/assert.git",
"reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" "reference": "541057574806f942c94662b817a50f63f7345360"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", "url": "https://api.github.com/repos/webmozarts/assert/zipball/541057574806f942c94662b817a50f63f7345360",
"reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", "reference": "541057574806f942c94662b817a50f63f7345360",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"ext-ctype": "*", "ext-ctype": "*",
"ext-date": "*",
"ext-filter": "*",
"php": "^7.2 || ^8.0" "php": "^7.2 || ^8.0"
}, },
"conflict": { "suggest": {
"phpstan/phpstan": "<0.12.20", "ext-intl": "",
"vimeo/psalm": "<4.6.1 || 4.6.2" "ext-simplexml": "",
}, "ext-spl": ""
"require-dev": {
"phpunit/phpunit": "^8.5.13"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
@@ -9490,9 +9490,9 @@
], ],
"support": { "support": {
"issues": "https://github.com/webmozarts/assert/issues", "issues": "https://github.com/webmozarts/assert/issues",
"source": "https://github.com/webmozarts/assert/tree/1.11.0" "source": "https://github.com/webmozarts/assert/tree/1.12.0"
}, },
"time": "2022-06-03T18:03:27+00:00" "time": "2025-10-20T12:43:39+00:00"
}, },
{ {
"name": "ysfkaya/filament-phone-input", "name": "ysfkaya/filament-phone-input",
@@ -28,7 +28,8 @@ return new class extends Migration
$table->boolean('pdf_nutzwerte_status')->default(0); $table->boolean('pdf_nutzwerte_status')->default(0);
$table->boolean('pdf_gutachten_status')->default(0); $table->boolean('pdf_gutachten_status')->default(0);
$table->boolean('excel_nutzwerte_status')->default(0); $table->boolean('excel_nutzwerte_status')->default(0);
$table->boolean('evaluation')->default(0); $table->boolean('evaluation_gutachten')->default(0);
$table->boolean('evaluation_nutzwerte')->default(0);
$table->timestamp('bezahlt_am')->nullable(); $table->timestamp('bezahlt_am')->nullable();
$table->timestamps(); $table->timestamps();
$table->softDeletes(); $table->softDeletes();
+20 -12
View File
@@ -1,14 +1,22 @@
<svg viewBox="0 0 512 512" version="1.1" <?xml version="1.0" encoding="iso-8859-1"?>
xmlns="http://www.w3.org/2000/svg" <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="550.801px" height="550.801px" viewBox="0 0 550.801 550.801" fill="currentColor" xml:space="preserve">
xmlns:xlink="http://www.w3.org/1999/xlink" fill="currentColor"> <g>
<g id="SVGRepo_bgCarrier" stroke-width="0"></g> <path d="M160.381,282.225c0-14.832-10.299-23.684-28.474-23.684c-7.414,0-12.437,0.715-15.071,1.432V307.6
<g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round"></g> c3.114,0.707,6.942,0.949,12.192,0.949C148.419,308.549,160.381,298.74,160.381,282.225z" />
<g id="SVGRepo_iconCarrier"> <path d="M272.875,259.019c-8.145,0-13.397,0.717-16.519,1.435v105.523c3.116,0.729,8.142,0.729,12.69,0.729
<title>pdf-document</title> c33.017,0.231,54.554-17.946,54.554-56.474C323.842,276.719,304.215,259.019,272.875,259.019z" />
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <path d="M488.426,197.019H475.2v-63.816c0-0.398-0.063-0.799-0.116-1.202c-0.021-2.534-0.827-5.023-2.562-6.995L366.325,3.694
<g id="add" fill="currentColor" transform="translate(85.333333, 42.666667)"> c-0.032-0.031-0.063-0.042-0.085-0.076c-0.633-0.707-1.371-1.295-2.151-1.804c-0.231-0.155-0.464-0.285-0.706-0.419
<path d="M75.9466667,285.653333 C63.8764997,278.292415 49.6246897,275.351565 35.6266667,277.333333 L1.42108547e-14,277.333333 L1.42108547e-14,405.333333 L28.3733333,405.333333 L28.3733333,356.48 L40.5333333,356.48 C53.1304778,357.774244 65.7885986,354.68506 76.3733333,347.733333 C85.3576891,340.027178 90.3112817,328.626053 89.8133333,316.8 C90.4784904,304.790173 85.3164923,293.195531 75.9466667,285.653333 L75.9466667,285.653333 Z M53.12,332.373333 C47.7608867,334.732281 41.8687051,335.616108 36.0533333,334.933333 L27.7333333,334.933333 L27.7333333,298.666667 L36.0533333,298.666667 C42.094796,298.02451 48.1897668,299.213772 53.5466667,302.08 C58.5355805,305.554646 61.3626692,311.370371 61.0133333,317.44 C61.6596233,323.558965 58.5400493,329.460862 53.12,332.373333 L53.12,332.373333 Z M150.826667,277.333333 L115.413333,277.333333 L115.413333,405.333333 L149.333333,405.333333 C166.620091,407.02483 184.027709,403.691457 199.466667,395.733333 C216.454713,383.072462 225.530463,362.408923 223.36,341.333333 C224.631644,323.277677 218.198313,305.527884 205.653333,292.48 C190.157107,280.265923 170.395302,274.806436 150.826667,277.333333 L150.826667,277.333333 Z M178.986667,376.32 C170.098963,381.315719 159.922142,383.54422 149.76,382.72 L144.213333,382.72 L144.213333,299.946667 L149.333333,299.946667 C167.253333,299.946667 174.293333,301.653333 181.333333,308.053333 C189.877212,316.948755 194.28973,329.025119 193.493333,341.333333 C194.590843,354.653818 189.18793,367.684372 178.986667,376.32 L178.986667,376.32 Z M254.506667,405.333333 L283.306667,405.333333 L283.306667,351.786667 L341.333333,351.786667 L341.333333,329.173333 L283.306667,329.173333 L283.306667,299.946667 L341.333333,299.946667 L341.333333,277.333333 L254.506667,277.333333 L254.506667,405.333333 L254.506667,405.333333 Z M234.666667,7.10542736e-15 L9.52127266e-13,7.10542736e-15 L9.52127266e-13,234.666667 L42.6666667,234.666667 L42.6666667,192 L42.6666667,169.6 L42.6666667,42.6666667 L216.96,42.6666667 L298.666667,124.373333 L298.666667,169.6 L298.666667,192 L298.666667,234.666667 L341.333333,234.666667 L341.333333,106.666667 L234.666667,7.10542736e-15 L234.666667,7.10542736e-15 Z" id="document-pdf"></path> c-0.676-0.369-1.393-0.675-2.131-0.896c-0.2-0.056-0.38-0.138-0.58-0.19C359.87,0.119,359.037,0,358.193,0H97.2
</g> c-11.918,0-21.6,9.693-21.6,21.601v175.413H62.377c-17.049,0-30.873,13.818-30.873,30.873v160.545
</g> c0,17.043,13.824,30.87,30.873,30.87h13.224V529.2c0,11.907,9.682,21.601,21.6,21.601h356.4c11.907,0,21.6-9.693,21.6-21.601
V419.302h13.226c17.044,0,30.871-13.827,30.871-30.87v-160.54C519.297,210.838,505.47,197.019,488.426,197.019z M97.2,21.605
h250.193v110.513c0,5.967,4.841,10.8,10.8,10.8h95.407v54.108H97.2V21.605z M362.359,309.023c0,30.876-11.243,52.165-26.82,65.333
c-16.971,14.117-42.82,20.814-74.396,20.814c-18.9,0-32.297-1.197-41.401-2.389V234.365c13.399-2.149,30.878-3.346,49.304-3.346
c30.612,0,50.478,5.508,66.039,17.226C351.828,260.69,362.359,280.547,362.359,309.023z M80.7,393.499V234.365
c11.241-1.904,27.042-3.346,49.296-3.346c22.491,0,38.527,4.308,49.291,12.928c10.292,8.131,17.215,21.534,17.215,37.328
c0,15.799-5.25,29.198-14.829,38.285c-12.442,11.728-30.865,16.996-52.407,16.996c-4.778,0-9.1-0.243-12.435-0.723v57.67H80.7
V393.499z M453.601,523.353H97.2V419.302h356.4V523.353z M484.898,262.127h-61.989v36.851h57.913v29.674h-57.913v64.848h-36.593
V232.216h98.582V262.127z" />
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB