From 5b92dc57f8067a0e6c4682a0d9173957091939dd Mon Sep 17 00:00:00 2001 From: michele Date: Sat, 11 Apr 2026 19:50:17 +0000 Subject: [PATCH] Fix supplier staging access and blade root --- .gitignore | 5 ++ .../Pages/Fornitore/ImpostazioniArchivio.php | 8 ++- .../Pages/Fornitore/RubricaClienti.php | 62 ++++++++++++------- .../Fornitore/TicketInterventoScheda.php | 31 ++++++++-- .../pages/fornitore/rubrica-clienti.blade.php | 5 +- .../ticket-intervento-scheda.blade.php | 6 +- routes/web.php | 2 +- 7 files changed, 87 insertions(+), 32 deletions(-) diff --git a/.gitignore b/.gitignore index d5979ae..d2ed37e 100755 --- a/.gitignore +++ b/.gitignore @@ -122,3 +122,8 @@ docs/ai/restart/DAY0-AUDIT-*.txt # Windows TAPI probe outputs (generated locally) inspect-*.json netgescon-tapi-info.json +scripts/ops/windows/netgescon-tapi-provider-report.json + +# Local generated archives and runtime payloads +storage/app/private/** +storage/app/public/** diff --git a/app/Filament/Pages/Fornitore/ImpostazioniArchivio.php b/app/Filament/Pages/Fornitore/ImpostazioniArchivio.php index a9fd820..010fe98 100644 --- a/app/Filament/Pages/Fornitore/ImpostazioniArchivio.php +++ b/app/Filament/Pages/Fornitore/ImpostazioniArchivio.php @@ -166,12 +166,16 @@ public function getProdottiUrl(): string public function getGoogleConnectUrl(): string { - return route('oauth.google.redirect'); + return route('oauth.google.redirect', [ + 'return_to' => request()->getRequestUri(), + ]); } public function getGoogleDisconnectUrl(): string { - return route('oauth.google.disconnect'); + return route('oauth.google.disconnect', [ + 'return_to' => request()->getRequestUri(), + ]); } private function refreshArchiveSummary(): void diff --git a/app/Filament/Pages/Fornitore/RubricaClienti.php b/app/Filament/Pages/Fornitore/RubricaClienti.php index 80a82ea..4437960 100644 --- a/app/Filament/Pages/Fornitore/RubricaClienti.php +++ b/app/Filament/Pages/Fornitore/RubricaClienti.php @@ -2,7 +2,6 @@ namespace App\Filament\Pages\Fornitore; use App\Filament\Pages\Fornitore\Concerns\ResolvesOperatoreContext; -use App\Filament\Pages\Gescon\RubricaUniversaleScheda; use App\Models\Fornitore; use App\Models\TicketIntervento; use App\Models\User; @@ -147,12 +146,16 @@ public function getProdottiUrl(): string public function getGoogleConnectUrl(): string { - return route('oauth.google.redirect'); + return route('oauth.google.redirect', [ + 'return_to' => request()->getRequestUri(), + ]); } public function getGoogleDisconnectUrl(): string { - return route('oauth.google.disconnect'); + return route('oauth.google.disconnect', [ + 'return_to' => request()->getRequestUri(), + ]); } /** @@ -163,20 +166,20 @@ protected function resolveCallerDataForRubrica(TicketIntervento $intervento): ar $ticket = $intervento->ticket; $parsed = $this->extractCallerData((string) ($ticket?->descrizione ?? '')); - $contatto = $parsed['contatto']; - $telefono = $parsed['telefono']; - $email = ''; - $origine = 'Descrizione ticket'; - $rubricaUrl = null; + $contatto = $parsed['contatto']; + $telefono = $parsed['telefono']; + $email = ''; + $origine = 'Descrizione ticket'; + $rubricaUrl = null; $rubricaLabel = ''; if ($ticket?->soggettoRichiedente) { - $soggetto = $ticket->soggettoRichiedente; - $contatto = trim((string) ($soggetto->ragione_sociale ?: trim(($soggetto->nome ?? '') . ' ' . ($soggetto->cognome ?? '')))) ?: $contatto; - $telefono = trim((string) ($soggetto->telefono ?? '')) ?: $telefono; - $email = trim((string) ($soggetto->email ?? '')); - $origine = 'Richiedente ticket'; - $rubricaUrl = RubricaUniversaleScheda::getUrl(['record' => (int) $soggetto->id], panel: 'admin-filament'); + $soggetto = $ticket->soggettoRichiedente; + $contatto = trim((string) ($soggetto->ragione_sociale ?: trim(($soggetto->nome ?? '') . ' ' . ($soggetto->cognome ?? '')))) ?: $contatto; + $telefono = trim((string) ($soggetto->telefono ?? '')) ?: $telefono; + $email = trim((string) ($soggetto->email ?? '')); + $origine = 'Richiedente ticket'; + $rubricaUrl = $this->buildRubricaUrlForCurrentUser((int) $soggetto->id); $rubricaLabel = trim((string) ($soggetto->categoria ?? '')); } elseif ($ticket?->apertoDaUser) { $contatto = trim((string) ($ticket->apertoDaUser->name ?? '')) ?: $contatto; @@ -194,17 +197,32 @@ protected function resolveCallerDataForRubrica(TicketIntervento $intervento): ar } return [ - 'contatto' => $contatto !== '' ? $contatto : 'Contatto non identificato', - 'telefono' => $telefono, - 'email' => $email, - 'origine' => $origine, - 'stabile' => (string) ($ticket?->stabile?->denominazione ?? '-'), - 'rubrica_url' => $rubricaUrl, - 'rubrica_label'=> $rubricaLabel, - 'identity_key' => $identityKey, + 'contatto' => $contatto !== '' ? $contatto : 'Contatto non identificato', + 'telefono' => $telefono, + 'email' => $email, + 'origine' => $origine, + 'stabile' => (string) ($ticket?->stabile?->denominazione ?? '-'), + 'rubrica_url' => $rubricaUrl, + 'rubrica_label' => $rubricaLabel, + 'identity_key' => $identityKey, ]; } + protected function buildRubricaUrlForCurrentUser(int $rubricaId): ?string + { + $user = Auth::user(); + + if (! $user instanceof User) { + return null; + } + + if ($user->hasAnyRole(['super-admin', 'admin', 'amministratore', 'collaboratore'])) { + return \App\Filament\Pages\Gescon\RubricaUniversaleScheda::getUrl(['record' => $rubricaId], panel: 'admin-filament'); + } + + return null; + } + /** * @return array|null */ diff --git a/app/Filament/Pages/Fornitore/TicketInterventoScheda.php b/app/Filament/Pages/Fornitore/TicketInterventoScheda.php index 7556b01..bf414d5 100644 --- a/app/Filament/Pages/Fornitore/TicketInterventoScheda.php +++ b/app/Filament/Pages/Fornitore/TicketInterventoScheda.php @@ -3,6 +3,7 @@ use App\Filament\Pages\Contabilita\EstrattoContoSoggetto; use App\Filament\Pages\Fornitore\Concerns\ResolvesOperatoreContext; +use App\Filament\Pages\Fornitore\RubricaClienti; use App\Filament\Pages\Gescon\RubricaUniversaleScheda; use App\Filament\Pages\Gescon\StabileScheda; use App\Models\Fornitore; @@ -706,12 +707,16 @@ public function getProdottiUrl(): string public function getGoogleConnectUrl(): string { - return route('oauth.google.redirect'); + return route('oauth.google.redirect', [ + 'return_to' => request()->getRequestUri(), + ]); } public function getGoogleDisconnectUrl(): string { - return route('oauth.google.disconnect'); + return route('oauth.google.disconnect', [ + 'return_to' => request()->getRequestUri(), + ]); } public function canAssignDipendente(): bool @@ -1127,7 +1132,7 @@ protected function resolveCallerData(?Ticket $ticket): array $rubrica = $this->resolveCallerRubrica($ticket, $caller); if ($rubrica instanceof RubricaUniversale) { - $caller['rubrica_url'] = RubricaUniversaleScheda::getUrl(['record' => (int) $rubrica->id], panel: 'admin-filament'); + $caller['rubrica_url'] = $this->buildCallerRubricaUrl($rubrica, $caller); $caller['telefono'] = trim((string) ($rubrica->telefono_cellulare ?: $rubrica->telefono_ufficio ?: $rubrica->telefono_casa ?: '')) ?: $caller['telefono']; $caller['email'] = trim((string) ($rubrica->email ?? '')) ?: $caller['email']; } @@ -1144,7 +1149,7 @@ protected function resolveCallerData(?Ticket $ticket): array $caller['telefono'] = trim((string) ($rubrica->telefono_cellulare ?: $rubrica->telefono_ufficio ?: $rubrica->telefono_casa ?: '')) ?: $caller['telefono']; $caller['email'] = trim((string) ($rubrica->email ?? '')) ?: $caller['email']; - $caller['rubrica_url'] = RubricaUniversaleScheda::getUrl(['record' => (int) $rubrica->id], panel: 'admin-filament'); + $caller['rubrica_url'] = $this->buildCallerRubricaUrl($rubrica, $caller); $caller['sorgente'] = 'Rubrica dedotta dal ticket'; } @@ -1158,6 +1163,24 @@ protected function resolveCallerData(?Ticket $ticket): array return $caller; } + protected function buildCallerRubricaUrl(RubricaUniversale $rubrica, array $caller): ?string + { + $user = Auth::user(); + + if ($user instanceof User && $user->hasAnyRole(['super-admin', 'admin', 'amministratore', 'collaboratore'])) { + return RubricaUniversaleScheda::getUrl(['record' => (int) $rubrica->id], panel: 'admin-filament'); + } + + if (! $this->fornitore instanceof Fornitore) { + return null; + } + + $search = trim((string) ($rubrica->nome_completo ?: $rubrica->ragione_sociale ?: $caller['contatto'] ?: $caller['telefono'] ?: $caller['email'] ?: '')); + $url = RubricaClienti::getUrl(['fornitore' => (int) $this->fornitore->id], panel: 'admin-filament'); + + return $search !== '' ? ($url . '?search=' . urlencode($search)) : $url; + } + protected function buildCallerReference(?Ticket $ticket, string $parsedReference = ''): string { if (! $ticket instanceof Ticket) { diff --git a/resources/views/filament/pages/fornitore/rubrica-clienti.blade.php b/resources/views/filament/pages/fornitore/rubrica-clienti.blade.php index 0089b89..4a75c32 100644 --- a/resources/views/filament/pages/fornitore/rubrica-clienti.blade.php +++ b/resources/views/filament/pages/fornitore/rubrica-clienti.blade.php @@ -80,7 +80,10 @@
Collega / aggiorna Google @if($googleWorkspaceStatus['connected']) - Scollega +
+ @csrf + +
@endif
Questo blocco prepara l'uso fornitore di rubrica, calendario e Drive sullo stesso backend Google gia presente nel progetto.
diff --git a/resources/views/filament/pages/fornitore/ticket-intervento-scheda.blade.php b/resources/views/filament/pages/fornitore/ticket-intervento-scheda.blade.php index 91aadf1..d27f48d 100644 --- a/resources/views/filament/pages/fornitore/ticket-intervento-scheda.blade.php +++ b/resources/views/filament/pages/fornitore/ticket-intervento-scheda.blade.php @@ -153,7 +153,6 @@ @endif -
{{ $ticket->descrizione }}
@@ -539,7 +538,10 @@
Collega / aggiorna Google @if($googleWorkspaceStatus['connected']) - Scollega +
+ @csrf + +
@endif
Questo e il primo aggancio operativo per riusare contatti, calendario e Drive nello spazio fornitore con lo stesso account Google gia gestito dal backend.
diff --git a/routes/web.php b/routes/web.php index 928a04c..bc3a968 100755 --- a/routes/web.php +++ b/routes/web.php @@ -54,7 +54,7 @@ Route::middleware(['auth', 'verified'])->group(function () { // OAuth Google (Calendar / Rubrica) - Route::middleware(['role:super-admin|admin|amministratore']) + Route::middleware(['role:super-admin|admin|amministratore|fornitore']) ->prefix('oauth/google') ->name('oauth.google.') ->group(function () {