NetGescon - Modifiche e Aggiornamenti
Versione corrente: {{ $this->currentVersion }} fonte {{ $this->versionSource }}
Legenda rapida
U utenti finali P assistenza/sviluppo E non bloccante E! bloccante
@if($this->activeTab === 'manuale')
Manuale operativo integrato nel progetto
Questa sezione diventa il punto di continuita tra sviluppo, Git e aggiornamenti applicativi. I contenuti sotto arrivano da file Markdown versionati nel repository, quindi restano leggibili sia dalla UI sia durante le prossime sessioni di sviluppo con agent e strumenti locali.
Ricarica manuale e dati pagina Vai a Commit + Note Vai a Aggiornamenti + Bug Lancia aggiornamento
Flusso minimo dopo ogni Git
  1. aggiorna il documento della sezione corretta nel repository
  2. salva una nota operativa sul commit se serve contesto extra
  3. spingi il codice su Gitea
  4. usa il pulsante di sync da Gitea da questa pagina per allineare staging
  5. se c e un problema applicativo, registralo o segnalo come risolto nel tab BUG
Snapshot continuita sviluppo
Riepilogo automatico per ripartire senza ricostruire ogni volta ragionamenti, file chiave, stato PBX e punti ancora aperti.
{{ $this->developmentSnapshotPath ?? '-' }}
Rigenera snapshot sviluppo
Generata il: {{ $this->developmentSnapshotGeneratedAt ?? '-' }}
{!! $this->developmentSnapshotHtml !!}
Aggiornamento staging da Gitea
Questo e il flusso principale da usare sui nodi interni: pull da Gitea, rigenerazione changelog Git per la pagina supporto e pulizia cache applicativa. Non richiede terminale.
Aggiorna staging da Gitea Aggiorna avanzamento Git Rileggi stato Git
@if($this->gitSyncInProgress)
@else
@endif
Avanzamento sync Git {{ (int) $this->gitSyncProgressPercent }}%
{{ $this->gitSyncProgressMessage }}
Job: {{ $this->gitSyncJobId ?? '-' }} · Stato: {{ $this->gitSyncProgressStatus }} @if($this->gitSyncInProgress) · in esecuzione @endif
Stato repository nodo
Branch locale: {{ $this->gitCurrentBranch ?? '-' }}
Commit locale: {{ $this->gitCurrentCommit ?? '-' }}
Commit remoto: {{ $this->gitRemoteCommit ?? '-' }}
Stato tracking: {{ $this->gitAheadBehind }}
Working tree: {{ $this->gitWorkingTreeDirty ? 'sporco' : 'pulito' }}
Ultima sync Git: {{ $this->lastGitSyncAt ?? '-' }}
Rigenerazione changelog locale: {{ $this->lastGitDocsSyncAt ?? '-' }}
Esito ultima sync Git
Exit code: @if($this->lastGitSyncExitCode === null) - @elseif($this->lastGitSyncExitCode === 0) 0 OK @else {{ $this->lastGitSyncExitCode }} ERRORE @endif
@if(filled($this->lastGitSyncIssue))
{{ $this->lastGitSyncIssue }}
@endif
@if(filled($this->lastGitSyncOutput))
Output tecnico sync Git
{{ $this->lastGitSyncOutput }}
@endif @foreach($this->manualSections as $section)
{{ $section['title'] }}
{{ $section['description'] }}
{{ $section['path'] }}
@if(! $section['exists'])
Documento non ancora presente nel repository. La sezione e predisposta per essere popolata progressivamente.
@endif
{!! $section['html'] !!}
@endforeach @endif @if($this->activeTab === 'errori')
Uso corretto di questa sezione
Per il nodo staging, il percorso operativo principale e la sync Git da Gitea disponibile nel tab Manuale. I pulsanti sotto servono al canale distribution, che al momento non e ancora il flusso update attivo principale e puo restituire errore manifest 404.
Vai a Manuale e sync Gitea
Aggiornamento da server distribution
Usare questi pulsanti solo quando il server updates.netgescon.it espone correttamente il manifest update. Per staging standard usare il flusso Git/Gitea nel tab Manuale.
Lancia aggiornamento Lancia aggiornamento (riserva) Check connettivita update Aggiorna dati pagina Pulisci cache remoto Ricompila view remoto Aggiorna avanzamento
@if($this->updateInProgress)
@else
@endif
Avanzamento aggiornamento {{ (int) $this->updateProgressPercent }}%
{{ $this->updateProgressMessage }}
Job: {{ $this->updateJobId ?? '-' }} · Stato: {{ $this->updateProgressStatus }} @if($this->updateInProgress) · in esecuzione @endif
@if(! $this->canRunUpdate())
Permesso update non disponibile per il tuo ruolo.
@endif
Esito ultimo update
Ultima esecuzione: {{ $this->lastUpdateAt ?? '-' }}
Exit code: @if($this->lastUpdateExitCode === null) - @elseif($this->lastUpdateExitCode === 0) 0 OK @else {{ $this->lastUpdateExitCode }} ERRORE @endif
@if(filled($this->lastPlannedUpdateSummary))
Piano usato: {{ $this->lastPlannedUpdateSummary }}
@endif
Ultimo backup pronto per update
@if($this->latestBackupSummary)
Snapshot: {{ $this->latestBackupSummary['snapshot_id'] }}
Creato: {{ $this->latestBackupSummary['created_at'] }}
Copia locale: {{ $this->latestBackupSummary['zip_exists'] ? 'OK' : 'mancante' }}
ZIP: {{ $this->latestBackupSummary['zip_path'] ?: '-' }}
Dimensione: {{ $this->latestBackupSummary['zip_size_mb'] !== null ? number_format((float) $this->latestBackupSummary['zip_size_mb'], 2, ',', '.') . ' MB' : '-' }}
File copiati: {{ (int) $this->latestBackupSummary['copied_files'] }} · Tabelle indicizzate: {{ (int) $this->latestBackupSummary['tables_count'] }}
Copia Google Drive: @if(is_array($this->latestBackupSummary['drive'] ?? null)) OK @if(!empty($this->latestBackupSummary['drive']['webViewLink'])) Apri su Drive @endif @else non disponibile @endif
@else
Nessun backup pre-update registrato.
@endif
Anteprima pacchetto in arrivo
@if($this->lastManifestPreview)
Versione remota: {{ $this->lastManifestPreview['version'] }}
Migration richieste: {{ $this->lastManifestPreview['migrate_required'] ? 'si' : 'no' }}
Pacchetto: {{ $this->lastManifestPreview['package_url'] }}
SHA256: {{ $this->lastManifestPreview['sha256'] }}
@if(filled($this->lastManifestPreview['release_notes'] ?? null))
{{ $this->lastManifestPreview['release_notes'] }}
@endif @if(!empty($this->lastManifestPreview['security']))
Aggiornamenti sicurezza: {{ is_array($this->lastManifestPreview['security']) ? json_encode($this->lastManifestPreview['security'], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) : $this->lastManifestPreview['security'] }}
@endif
@else
Esegui “Check connettivita update” per leggere manifest e contenuto dell aggiornamento prima del lancio.
@endif
Aggiornamenti pianificati (prima del lancio)
    @foreach($this->updatePlannedSteps as $step)
  • {{ $step }}
  • @endforeach
Ripristino differenziale disponibile
Ripristino singola scrittura:
php artisan netgescon:restore-record <tabella> <pk> --apply
Preview senza scrivere:
php artisan netgescon:restore-record <tabella> <pk>
@if(filled($this->lastUpdateOutput))
Output tecnico
{{ $this->lastUpdateOutput }}
@endif @if(filled($this->lastUpdateIssue))
Diagnostica automatica ultimo errore
{{ $this->lastUpdateIssue }}
@endif @if(filled($this->lastConnectivityCheckOutput))
Output check connettivita endpoint update
{{ $this->lastConnectivityCheckOutput }}
@endif
Errori runtime, supporto e pregressi (laravel.log)
Raccolta unificata da: runtime-errors.ndjson, support-events.ndjson, laravel.log, docs/support/online-runtime-errors.ndjson (feed Git da online).
Aperti: {{ (int) $this->openBugCount }} Risolti: {{ (int) $this->resolvedBugCount }} Filtro:
Aggiungi BUG manuale
Crea BUG manuale
Nota risoluzione BUG
BUG selezionato: {{ $this->selectedBugFingerprint ? 'selezionato' : 'nessuno' }}
Salva nota risoluzione
@forelse($this->runtimeErrors as $row) @empty @endforelse
BUG # Stato Timestamp Origine Tipo Occorrenze Messaggio Contesto Nota risoluzione Azioni
{{ $row['bug_code'] }} @if(($row['bug_status'] ?? 'open') === 'resolved') risolto @else aperto @endif {{ $row['timestamp'] }} {{ $row['source'] ?? '-' }} {{ $row['type'] }} {{ (int) ($row['occurrences'] ?? 1) }} {{ $row['message'] }}
{{ $row['context'] !== '' ? \Illuminate\Support\Str::limit($row['context'], 220) : '-' }}
{{ $row['resolution_note'] !== '' ? \Illuminate\Support\Str::limit($row['resolution_note'], 160) : '-' }}
@if(($row['bug_status'] ?? 'open') === 'resolved' && filled($row['resolved_at']))
risolto: {{ $row['resolved_at'] }}
@endif
Nota @if(($row['bug_status'] ?? 'open') === 'resolved') Riapri @else Segna risolto @endif
Nessun errore registrato negli ultimi eventi.
@endif @if($this->activeTab === 'commit')
Ultimi commit (descrizioni)
Aggiungi nota operativa a un commit
Salva nota commit
@forelse($this->latestCommits as $commit) @empty @endforelse
Data Commit Autore Descrizione Nota aggiuntiva
{{ $commit['date'] }} {{ $commit['short_hash'] }} {{ $commit['author'] }} {{ $commit['message'] }} @php $note = $this->getCommitNote($commit['hash']); @endphp
{{ $note !== '' ? $note : '-' }}
Nessun commit disponibile.
@endif @php $path = base_path('docs/NETGESCON-MODIFICHE.md'); $raw = file_exists($path) ? file_get_contents($path) : "# Modifiche\n\nFile non trovato: {$path}\n"; $gitGeneratedPath = storage_path('app/support/generated/NETGESCON-GIT-AUTOCHANGELOG.md'); $gitPath = file_exists($gitGeneratedPath) ? $gitGeneratedPath : base_path('docs/NETGESCON-GIT-AUTOCHANGELOG.md'); $gitRaw = file_exists($gitPath) ? file_get_contents($gitPath) : "# Git Auto Changelog\n\nFile non trovato: {$gitPath}\nEsegui: `bash scripts/ops/netgescon-sync-git-changelog.sh`\n"; $rawHtml = $this->renderSupportMarkdown($raw); $gitRawHtml = $this->renderSupportMarkdown($gitRaw); @endphp @if($this->activeTab === 'migliorie')
Pagine nuove o rese piu funzionali (ultimi commit)
@forelse($this->recentFilamentPages as $row) @empty @endforelse
Pagina Percorso Commit Descrizione
{{ $row['page'] }} {{ $row['path'] }} {{ $row['commit'] }} {{ $row['message'] }}
Nessuna pagina recente rilevata dai commit.
Migliorie e funzionalita aggiunte (estratte dal registro)
    @forelse($this->functionalHighlights as $item)
  • {{ $item }}
  • @empty
  • Nessuna miglioria rilevata automaticamente nel file modifiche.
  • @endforelse
Registro funzionale (manuale)
{!! $rawHtml !!}
Changelog automatico da script
{!! $gitRawHtml !!}
@endif