import wip

This commit is contained in:
salam committed 2026-02-26 16:50:39 +01:00
1 parent 8a809e5fff
commit 2c5352882b
16 files changed
+5078 -212

No files matched your search

@@ -25,7 +25,6 @@ class ProjektAllgemeinflaechenImporter extends Importer
return [
ImportColumn::make('geschoss')
->validationAttribute('Geschoss')
->requiredMapping()
->example('EG')
->rules(['required', 'max:255'])
->castStateUsing(function (string $state) {
@@ -35,7 +34,6 @@ class ProjektAllgemeinflaechenImporter extends Importer
}),
ImportColumn::make('raumart')
->validationAttribute('Raumart')
->requiredMapping()
->example('Stiegenhaus')
->rules(['required', 'max:32'])
->castStateUsing(function (string $state) {
@@ -31,8 +31,7 @@ class ProjektObjekteImDetailImporter extends Importer
ImportColumn::make('top_nummer')
->label('Top Nummer')
->validationAttribute('Top Nummer')
->requiredMapping()
->example('EG')
->example('W07')
->rules(['required', 'max:255'])
->relationship(resolveUsing: function (string $state, $data): ?ProjektObjekte {
return ProjektObjekte::query()
@@ -50,7 +49,6 @@ class ProjektObjekteImDetailImporter extends Importer
}),
ImportColumn::make('geschoss')
->validationAttribute('Geschoss')
->requiredMapping()
->example('EG')
->rules(['required', 'max:255'])
->castStateUsing(function (string $state) {
@@ -60,7 +58,6 @@ class ProjektObjekteImDetailImporter extends Importer
}),
ImportColumn::make('raumart')
->validationAttribute('Raumart')
->requiredMapping()
->example('Stiegenhaus')
->rules(['required', 'max:32'])
->castStateUsing(function (string $state) {
@@ -71,16 +68,17 @@ class ProjektObjekteImDetailImporter extends Importer
ImportColumn::make('flaeche')
->label('Fläche')
->validationAttribute('Fläche')
->requiredMapping()
->rules(['required'])
->example('52,75')
->example('14,75')
->castStateUsing(function (string $state): ?float {
if (blank($state)) {
return '0.00';
return null;
}
$state = str_replace(',', '.', $state);
$state = preg_replace('/[^0-9.]/', '', $state);
$state = floatval($state);
return round($state, precision: 2);
}),
@@ -37,15 +37,28 @@ class EditProjekte extends EditRecord
* IMPORT
*/
ActionGroup::make([
ImportAction::make('importallgemeinflaechen')
ImportAction::make('import_allgemeinflaechen')
->hidden(fn ($record): bool => $record->bezahlt_am ? false : true)
->importer(ProjektAllgemeinflaechenImporter::class)
->csvDelimiter('|')
->modalHeading('Allgemeinflächen Import')
->modalContent(view('filament.pages.actions.import-allgemeinflaechen'))
->modalContentFooter(view('filament.pages.actions.footer-allgemeinflaechen'))
->label('Allgemeinflächen')
->icon('phosphor-upload')
->extraModalFooterActions([
Action::make('copy')
->tooltip('Kopiert die Spaltenname für die erste Zeile')
->color('success')
->label('Spalten Namen')
->action(function ($livewire) {
$livewire->js('window.navigator.clipboard.writeText("Geschoss|Raumart|Fläche");');
Notification::make()
->title('Spaltenname kopiert')
->success()
->send();
}),
Action::make('delete')
->label('Tabelle leeren')
->color('danger')
@@ -70,13 +83,26 @@ class EditProjekte extends EditRecord
ImportAction::make('import_objekte')
->hidden(fn ($record): bool => $record->bezahlt_am ? false : true)
->importer(ProjektObjekteImDetailImporter::class)
->csvDelimiter('|')
->modalHeading('Objekte im Detail Import')
->modalContent(view('filament.pages.actions.import-objektemitraeumen'))
->modalContentFooter(view('filament.pages.actions.footer-objektemitraeumen'))
->label('Objekte')
->icon('phosphor-upload')
->extraModalFooterActions([
Action::make('copy')
->tooltip('Kopiert die Spaltenname für die erste Zeile')
->color('success')
->label('Spalten Namen')
->action(function ($livewire) {
$livewire->js('window.navigator.clipboard.writeText("Top Nummer|Geschoss|Raumart|Fläche");');
Notification::make()
->title('Spaltenname kopiert')
->success()
->send();
}),
Action::make('delete')
->tooltip('Löscht alle Objekte für dieses Projekt')
->label('Tabellen leeren')
->color('danger')
->requiresConfirmation()
@@ -3,6 +3,7 @@
namespace App\Filament\Resources\Projektes\RelationManagers;
use App\Models\ProjektObjekteImDetail;
use Filament\Actions\Action;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\CreateAction;
use Filament\Actions\DeleteAction;
@@ -53,11 +54,11 @@ class ProjektObjekteImDetailRelationManager extends RelationManager
TextInput::make('flaeche')
->suffix(new HtmlString(' m²'))
->numeric()
->inputMode('decimal')
->label('Fläche')
->rules(['required', 'flaeche' => 'decimal:2'])
->rules(['required'])
->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('refreshProjektAllgemeinflaechen');
@@ -142,6 +143,9 @@ class ProjektObjekteImDetailRelationManager extends RelationManager
CreateAction::make()
->icon('phosphor-file-plus')
->createAnother(false),
Action::make('nutzwerte')
->label('Nutzwerte')
->icon('phosphor-gear'),
])
->recordActions([
EditAction::make()->iconButton()