From 11e19e882b206461f292d20dc19183fada189e2a Mon Sep 17 00:00:00 2001 From: michele Date: Fri, 28 Aug 2026 18:57:40 +0200 Subject: [PATCH] feat(superadmin-stabili): add SuperAdmin Sposta Stabile action and fix comproprietari fallback matching for Stabile 0013 (task-d095b0e23b) --- .../Commands/ImportGesconFullPipeline.php | 2 +- .../Pages/SuperAdmin/Amministratori.php | 33 +++++++++++++++++++ .../super-admin/amministratori.blade.php | 24 ++++++++++++++ 3 files changed, 58 insertions(+), 1 deletion(-) diff --git a/app/Console/Commands/ImportGesconFullPipeline.php b/app/Console/Commands/ImportGesconFullPipeline.php index 0668aba..4cad87b 100755 --- a/app/Console/Commands/ImportGesconFullPipeline.php +++ b/app/Console/Commands/ImportGesconFullPipeline.php @@ -8135,7 +8135,7 @@ private function loadLegacyComproprietariHistoryRows(object $row, ?string $legac return []; } - $startCondId = $stableCondId !== null && $stableCondId !== '' ? $stableCondId : ($codCond !== '' ? $codCond : null); + $startCondId = $stableCondId !== null && $stableCondId !== '' ? $stableCondId : null; $linkedCondIds = []; if ($startCondId !== null) { $linkedCondIds = $this->resolveLinkedLegacyCondIds($codStabile, $startCondId); diff --git a/app/Filament/Pages/SuperAdmin/Amministratori.php b/app/Filament/Pages/SuperAdmin/Amministratori.php index c28214c..564fa64 100755 --- a/app/Filament/Pages/SuperAdmin/Amministratori.php +++ b/app/Filament/Pages/SuperAdmin/Amministratori.php @@ -197,6 +197,39 @@ public function resetPasswordSelected(): void } } + public function spostaStabile(int $stabileId, int $nuovoAmministratoreId): void + { + /** @var User|null $user */ + $user = Auth::user(); + if (! $user || ! $user->hasRole('super-admin')) { + throw new \RuntimeException('Azione riservata al SuperAdmin.'); + } + + $stabile = Stabile::query()->find($stabileId); + $nuovoAmm = Amministratore::query()->find($nuovoAmministratoreId); + + if (! $stabile || ! $nuovoAmm) { + \Filament\Notifications\Notification::make() + ->title('Errore Trasferimento') + ->body('Stabile o Amministratore di destinazione non trovato.') + ->danger() + ->send(); + return; + } + + $oldAmmId = $stabile->amministratore_id; + $stabile->update([ + 'amministratore_id' => $nuovoAmm->id, + 'cod_fisc_amministratore' => $nuovoAmm->codice_fiscale_studio ?? $nuovoAmm->partita_iva ?? $stabile->cod_fisc_amministratore, + ]); + + \Filament\Notifications\Notification::make() + ->title('Stabile Trasferito') + ->body("Lo stabile '{$stabile->denominazione}' (Cod. {$stabile->codice_stabile}) รจ stato trasferito con successo dallo Studio #{$oldAmmId} allo Studio #{$nuovoAmm->id} ({$nuovoAmm->denominazione_studio}).") + ->success() + ->send(); + } + protected function getTableQuery(): Builder { return Amministratore::query()->withCount('stabili'); diff --git a/resources/views/filament/pages/super-admin/amministratori.blade.php b/resources/views/filament/pages/super-admin/amministratori.blade.php index bfd9086..a566684 100644 --- a/resources/views/filament/pages/super-admin/amministratori.blade.php +++ b/resources/views/filament/pages/super-admin/amministratori.blade.php @@ -232,20 +232,31 @@ class="inline-flex items-center gap-1 rounded-lg bg-amber-500 px-4 py-2 text-xs COD. DENOMINAZIONE STABILE CODICE FISCALE + STUDIO ASSEGNATO BANCA PRINCIPALE & IBAN CASSE (anagr_casse) + AZIONI SUPERADMIN + @php + $tuttiAmministratori = \App\Models\Amministratore::query()->orderBy('id')->get(); + @endphp @foreach($stabiliReal as $st) @php $adv = is_array($st->configurazione_avanzata) ? $st->configurazione_avanzata : []; $casse = $adv['conti_correnti']['anagr_casse'] ?? []; + $currentAmm = $tuttiAmministratori->firstWhere('id', $st->amministratore_id); @endphp {{ $st->codice_stabile }} {{ $st->denominazione }} {{ $st->codice_fiscale ?: '-' }} + + + #{{ $st->amministratore_id ?? 'N/A' }} โ€” {{ $currentAmm?->denominazione_studio ?: ($currentAmm?->nome . ' ' . $currentAmm?->cognome ?: 'Studio Non Assegnato') }} + + @if($st->iban_principale) {{ $st->banca_principale ?: 'Banca' }}: {{ $st->iban_principale }} @@ -266,6 +277,19 @@ class="inline-flex items-center gap-1 rounded-lg bg-amber-500 px-4 py-2 text-xs - @endif + + + @endforeach