*/ public static function leggi(string $path): array { foreach (IOFactory::load($path)->getAllSheets() as $foglio) { $righe = $foglio->toArray(null, true, false, false); foreach ($righe as $r => $riga) { $intestazioni = array_map(fn ($v) => Str::upper(trim((string) $v)), $riga); $colCodice = array_search('ORDINE', $intestazioni, true); if ($colCodice === false) { $colCodice = array_search('CODICE', $intestazioni, true); } $colTitolo = array_search('TITOLO', $intestazioni, true); if ($colCodice === false || $colTitolo === false) { continue; } $titoli = []; foreach (array_slice($righe, $r + 1) as $dati) { $codice = trim((string) ($dati[$colCodice] ?? '')); $titolo = trim((string) ($dati[$colTitolo] ?? '')); if ($codice !== '' && $titolo !== '') { $titoli[$codice] = $titolo; } } return $titoli; } } return []; } /** * @param array $titoli codice → titolo * @return array{aggiornati: list, creati: list, invariati: int} */ public static function importa(Sistema $sistema, array $titoli): array { $esito = ['aggiornati' => [], 'creati' => [], 'invariati' => 0]; DB::transaction(function () use ($sistema, $titoli, &$esito) { $modelli = $sistema->modelli()->get()->keyBy('codice'); foreach ($titoli as $codice => $titolo) { $codice = ListinoImporter::ALIAS[$codice] ?? $codice; $modello = $modelli->get($codice); if ($modello) { if ($modello->titolo === $titolo) { $esito['invariati']++; continue; } $modello->update(['titolo' => $titolo]); $esito['aggiornati'][] = $codice; continue; } // Nuovo modello: solo codice e titolo, disattivo finché non viene configurato. $modelli->put($codice, Modello::create([ 'sistema_id' => $sistema->id, 'codice' => $codice, 'nome' => $titolo, 'titolo' => $titolo, 'attivo' => false, 'ordine' => $modelli->max('ordine') + 1, ])); $esito['creati'][] = $codice; } }); return $esito; } }