++ fix e controlli
This commit is contained in:
@@ -33,7 +33,15 @@ class XmlExchange extends Component
|
||||
public array $pdfImportIssues = [];
|
||||
public ?string $currentPdfImportId = null;
|
||||
public string $pdfImportStatus = 'idle';
|
||||
public string $pdfImportLogText = '';
|
||||
|
||||
/**
|
||||
* Quante righe di log dell'import sono gia' state spedite alla console.
|
||||
*
|
||||
* La coda dell'import non ha tetto (un import di duemila PDF fa duemila
|
||||
* righe): rispedirla intera a ogni poll significherebbe trascinarsi dietro
|
||||
* l'intera cronologia dentro ogni risposta, una volta al secondo.
|
||||
*/
|
||||
public int $logPdfSpediti = 0;
|
||||
|
||||
public function mount(): void
|
||||
{
|
||||
@@ -95,7 +103,57 @@ class XmlExchange extends Component
|
||||
$this->pdfImportStats = $state['stats'] ?? [];
|
||||
$this->pdfImportLogs = $state['logs'] ?? [];
|
||||
$this->pdfImportIssues = $state['issues'] ?? [];
|
||||
$this->pdfImportLogText = implode(PHP_EOL, $this->pdfImportLogs);
|
||||
|
||||
$this->spedisciImportAllaConsole();
|
||||
}
|
||||
|
||||
/**
|
||||
* Manda alla console unica le righe nuove dell'import PDF.
|
||||
*
|
||||
* La console e' un componente Alpine fuori dal ciclo di Livewire: i suoi
|
||||
* contenuti non possono essere ri-renderizzati dal server senza cancellare
|
||||
* le righe scritte dal browser, quindi si comunica a eventi. E' lo stesso
|
||||
* meccanismo di SegueOperazioneBackup, da cui questo componente non eredita
|
||||
* perche' l'import PDF ha uno stato tutto suo (TerritorioPdfImportState) e
|
||||
* non partecipa al posto unico: puo' girare mentre un backup lavora.
|
||||
*/
|
||||
protected function spedisciImportAllaConsole(): void
|
||||
{
|
||||
// Coda accorciata: e' un import nuovo, si riparte da capo.
|
||||
if (count($this->pdfImportLogs) < $this->logPdfSpediti) {
|
||||
$this->logPdfSpediti = 0;
|
||||
}
|
||||
|
||||
$nuove = array_slice($this->pdfImportLogs, $this->logPdfSpediti);
|
||||
$this->logPdfSpediti = count($this->pdfImportLogs);
|
||||
|
||||
$totale = (int) ($this->pdfImportStats['total'] ?? 0);
|
||||
$fatti = (int) ($this->pdfImportStats['processed'] ?? 0);
|
||||
|
||||
$this->dispatch(
|
||||
'console-operazione',
|
||||
sorgente: 'import-pdf',
|
||||
righe: array_values($nuove),
|
||||
etichetta: 'Import PDF',
|
||||
fase: $totale > 0 ? $fatti . ' / ' . $totale . ' file' : '',
|
||||
percento: $this->percentualeImportPdf($fatti, $totale),
|
||||
stato: $this->pdfImportStatus,
|
||||
);
|
||||
}
|
||||
|
||||
private function percentualeImportPdf(int $fatti, int $totale): int
|
||||
{
|
||||
if ($this->pdfImportStatus === 'completed') {
|
||||
return 100;
|
||||
}
|
||||
|
||||
return $totale > 0 ? (int) min(100, round($fatti / $totale * 100)) : 0;
|
||||
}
|
||||
|
||||
/** Vero mentre l'import PDF e' in coda o in esecuzione. */
|
||||
public function getImportPdfInCorsoProperty(): bool
|
||||
{
|
||||
return in_array($this->pdfImportStatus, ['queued', 'running'], true);
|
||||
}
|
||||
|
||||
protected function dispatchPdfImport(string $importId, array $storedFiles, string $initialLog): void
|
||||
@@ -108,9 +166,13 @@ class XmlExchange extends Component
|
||||
$this->pdfImportStats = $state['stats'] ?? [];
|
||||
$this->pdfImportLogs = $state['logs'] ?? [];
|
||||
$this->pdfImportIssues = $state['issues'] ?? [];
|
||||
// Import nuovo: il conto delle righe gia' raccontate riparte, altrimenti
|
||||
// le prime righe di questo import verrebbero scambiate per quelle del
|
||||
// precedente e non comparirebbero.
|
||||
$this->logPdfSpediti = 0;
|
||||
$this->refreshPdfImportStatus();
|
||||
|
||||
session()->flash('success', 'Import PDF avviato in background. I log si aggiorneranno automaticamente.');
|
||||
session()->flash('success', 'Import PDF avviato in background. L\'avanzamento è nella console in fondo alla pagina.');
|
||||
}
|
||||
|
||||
public function downloadImportLogPdf()
|
||||
|
||||
Reference in New Issue
Block a user