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 !!}
@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 in questa tab. I pulsanti piu sotto servono invece al canale distribution, che al momento non e ancora il flusso update attivo principale e puo restituire errore manifest 404.
Cosa aggiorna il flusso Git di staging
Il pulsante Aggiorna staging da Gitea lancia il comando applicativo netgescon:git-sync. Il nodo si riallinea dal repository Git pubblicato su Gitea, rigenera il changelog automatico e aggiorna questa pagina senza usare deploy manuali fuori Git.
  1. fetch e allineamento del branch richiesto da Gitea
  2. aggiornamento del codice sul nodo staging
  3. rigenerazione changelog Git per Supporto > Modifiche
  4. salvataggio esito, log e diagnostica del job
Anteprima prima della sync Git
Conteggio commit remoti, aree toccate e registro persistente delle modifiche gia strutturate.
Ricalcola anteprima
Commit in arrivo
{{ (int) $this->pendingGitCommitCount }}
Registro DB visibile
{{ (int) $this->supportUpdateVisibleCount }}
Implementazioni
{{ (int) $this->supportImplementationCount }}
Fix + debug
{{ (int) ($this->supportBugfixCount + $this->supportDebugCount) }}
Commit remoti non ancora allineati
@if(filled($this->pendingGitPreviewIssue))
{{ $this->pendingGitPreviewIssue }}
@endif
    @forelse($this->pendingGitCommits as $commit)
  • {{ $commit['short_hash'] }} {{ $commit['message'] }}
    {{ $commit['date'] }} · {{ $commit['author'] }}
  • @empty
  • Il nodo risulta gia allineato al branch remoto.
  • @endforelse
Pagine e aree toccate dai commit in arrivo
    @forelse($this->pendingGitChangedAreas as $item)
  • {{ $item['label'] }}
    {{ $item['area'] }} · {{ $item['path'] }}
  • @empty
  • Nessuna area Filament/supporto modificata nei commit remoti in attesa.
  • @endforelse
Registro aggiornamenti persistente in DB
Implementazioni, fix e debug registrati in tabella applicativa con pagina impattata e commit di riferimento.
{{ (int) $this->supportUpdateVisibleCount }} voci visibili
Editor voci aggiornamento
Nuova voce
Salva voce registro Reset form
Come usarlo prima di Git e staging
  1. registra qui implementazioni, fix o debug dell ultimo blocco di lavoro
  2. collega, se la conosci, la pagina UI e il commit previsto o gia creato
  3. usa il conteggio commit remoti per controllare se lo staging e davvero indietro
  4. poi fai il push Git e usa questa stessa tab per la sync da Gitea
@if($this->supportUpdateFormId)
Stai modificando la voce ID {{ $this->supportUpdateFormId }}. Se vuoi inserirne una nuova, premi “Nuova voce”.
@endif
@forelse(array_slice($this->supportUpdateEntries, 0, 8) as $entry)
{{ $entry['title'] }}
{{ $entry['category'] }}
{{ $entry['summary'] }}
@if($entry['impact'] !== '')
{{ $entry['impact'] }}
@endif
@if($entry['page_label'] !== '') Pagina: {{ $entry['page_label'] }} @endif @if($entry['related_commit'] !== '') Commit: {{ $entry['related_commit'] }} @endif @if($entry['recorded_at'] !== '') Registrato: {{ $entry['recorded_at'] }} @endif
@if($entry['related_path'] !== '' || $entry['page_url'])
@if($entry['page_url']) Apri pagina @endif @if($entry['related_path'] !== '') {{ $entry['related_path'] }} @endif
@endif
Modifica {{ $entry['is_visible'] ? 'Nascondi' : 'Mostra' }}
@empty
Registro DB non ancora disponibile: esegui le migration del nuovo support registry su questo nodo.
@endforelse
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.
Comando predisposto usato dalla UI: php artisan netgescon:git-sync --remote={{ $this->gitRemote }} --branch={{ $this->gitBranch }}
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
Comando: netgescon:git-sync
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
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 mostrato sopra in questa stessa tab.
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
@if($this->highlightedBug)
BUG in evidenza
{{ $this->highlightedBug['bug_code'] }}
Occorrenze {{ (int) ($this->highlightedBug['occurrences'] ?? 1) }} {{ ($this->highlightedBug['bug_status'] ?? 'open') === 'resolved' ? 'risolto' : 'aperto' }}
Messaggio
{{ $this->highlightedBug['message'] }}
Contesto
{{ $this->highlightedBug['context'] !== '' ? $this->highlightedBug['context'] : '-' }}
Nota risoluzione
@if(filled($this->highlightedBugHint))
{{ $this->highlightedBugHint }}
@endif @if($this->lastNotificationSanitization)
Ultima sanificazione notifiche Filament: {{ $this->lastNotificationSanitization['timestamp'] ?? '-' }} · rimossi {{ (int) ($this->lastNotificationSanitization['removed_items'] ?? 0) }} · rimasti {{ (int) ($this->lastNotificationSanitization['remaining_items'] ?? 0) }}
@endif
Seleziona BUG Salva nota risoluzione @if(($this->highlightedBug['bug_status'] ?? 'open') === 'resolved') Riapri @else Segna risolto @endif
@else
Nessun BUG da mettere in evidenza.
@endif
@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
Apri 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