From 23741f453b17c327a409889994c5340f32b0ce9f Mon Sep 17 00:00:00 2001 From: michele Date: Sun, 30 Aug 2026 19:48:50 +0200 Subject: [PATCH] feat(unita-immobiliare): FHD screen width optimization, Condomino vs Inquilino role toggle buttons, and tab deduplication (task-d095b0e23b) --- app/Filament/Pages/UnitaImmobiliarePage.php | 28 +++++++++- .../pages/unita-immobiliare.blade.php | 49 ++++++----------- .../UnitaCondominoInquilinoRoleToggleTest.php | 52 +++++++++++++++++++ 3 files changed, 95 insertions(+), 34 deletions(-) create mode 100644 tests/Feature/UnitaCondominoInquilinoRoleToggleTest.php diff --git a/app/Filament/Pages/UnitaImmobiliarePage.php b/app/Filament/Pages/UnitaImmobiliarePage.php index 4eb31d0..4037639 100755 --- a/app/Filament/Pages/UnitaImmobiliarePage.php +++ b/app/Filament/Pages/UnitaImmobiliarePage.php @@ -98,6 +98,8 @@ public static function canAccess(): bool public string $tab = 'riepilogo'; + public string $condInquilActive = 'C'; + public array $millesimiPerTabella = []; public array $dirittiProprieta = []; @@ -791,7 +793,16 @@ public function getEstrattoContoNominativoDettaglioProperty(): array } if (! $selectedItem) { - $selectedItem = end($timeline); + $roleTarget = $this->condInquilActive === 'I' ? 'Inquilino' : 'Condomino / Proprietario'; + foreach ($timeline as $t) { + if (($t['ruolo'] ?? '') === $roleTarget) { + $selectedItem = $t; + break; + } + } + if (! $selectedItem) { + $selectedItem = end($timeline); + } } $idCond = $selectedItem['id_cond'] ?? 0; @@ -1204,6 +1215,18 @@ public function getUnitaOptions(): array return $this->unitaOptionsCache; } + public function setCondInquilActive(string $role): void + { + $role = strtoupper(trim($role)); + if (in_array($role, ['C', 'CONDOMINO', 'CONDOMINI'], true)) { + $this->condInquilActive = 'C'; + $this->estrattoTipo = 'condomini'; + } elseif (in_array($role, ['I', 'INQUILINO', 'INQUILINI'], true)) { + $this->condInquilActive = 'I'; + $this->estrattoTipo = 'inquilini'; + } + } + public function setEstrattoTipo(string $tipo): void { $tipo = strtolower(trim($tipo)); @@ -1211,7 +1234,8 @@ public function setEstrattoTipo(string $tipo): void return; } - $this->estrattoTipo = $tipo; + $this->estrattoTipo = $tipo; + $this->condInquilActive = $tipo === 'inquilini' ? 'I' : 'C'; } /** diff --git a/resources/views/filament/pages/unita-immobiliare.blade.php b/resources/views/filament/pages/unita-immobiliare.blade.php index 8274762..b166cd2 100755 --- a/resources/views/filament/pages/unita-immobiliare.blade.php +++ b/resources/views/filament/pages/unita-immobiliare.blade.php @@ -1,6 +1,6 @@ -
- {{-- BARRA PULSANTINI ICONICI COMPATTI UNIFICATA (SENZA SCROLL ORIZZONTALE) --}} +
+ {{-- BARRA NAVIGAZIONE UNIFICATA E COMPATTA --}} @php @@ -71,7 +42,7 @@ class="inline-flex items-center gap-1.5 rounded-lg px-2.5 py-1.5 text-xs font-me ]; @endphp - {{-- CONTROLLI COMPATTI SELEZIONE UNITร€ & VISTA --}} + {{-- CONTROLLI COMPATTI SELEZIONE UNITร€ & PULSANTI RUOLO CONDOMINO / INQUILINO --}}
diff --git a/tests/Feature/UnitaCondominoInquilinoRoleToggleTest.php b/tests/Feature/UnitaCondominoInquilinoRoleToggleTest.php new file mode 100644 index 0000000..b6045db --- /dev/null +++ b/tests/Feature/UnitaCondominoInquilinoRoleToggleTest.php @@ -0,0 +1,52 @@ +insertOrIgnore([ + 'id' => 1, + 'nome' => 'Admin', + 'cognome' => 'Test', + 'created_at' => now(), + 'updated_at' => now(), + ]); + + $user = User::factory()->create(); + if (method_exists($user, 'assignRole')) { + \Spatie\Permission\Models\Role::firstOrCreate(['name' => 'admin', 'guard_name' => 'web']); + $user->assignRole('admin'); + } + + $stabile = Stabile::create([ + 'amministratore_id' => 1, + 'codice_stabile' => '0013', + 'denominazione' => 'Stabile Test 0013', + 'indirizzo' => 'Via Ottaviano 105', + 'citta' => 'Roma', + 'cap' => '00192', + 'provincia' => 'RM', + ]); + + $unita = UnitaImmobiliare::create([ + 'stabile_id' => $stabile->id, + 'scala' => 'A', + 'interno' => '1', + 'codice_unita' => '0013-A-1', + ]); + + Livewire::actingAs($user) + ->test(UnitaImmobiliarePage::class, ['unita_id' => $unita->id]) + ->assertSet('condInquilActive', 'C') + ->assertSet('estrattoTipo', 'condomini') + ->call('setCondInquilActive', 'I') + ->assertSet('condInquilActive', 'I') + ->assertSet('estrattoTipo', 'inquilini') + ->call('setCondInquilActive', 'C') + ->assertSet('condInquilActive', 'C') + ->assertSet('estrattoTipo', 'condomini'); +});