@@ -51,14 +51,12 @@ public function init()
5151 {
5252 parent ::init ();
5353
54- // Pulisce le cache per una nuova importazione
5554 self ::$ listini_cache = [];
5655 self ::$ articoli_cache = [];
5756 $ this ->failed_errors = [];
5857 $ this ->current_row = 0 ;
5958
60- $ logger = logger ();
61- $ logger ->info ('Inizializzazione importazione listino cliente ' , [
59+ logger ()->info ('Inizializzazione importazione listino cliente ' , [
6260 'timestamp ' => date ('Y-m-d H:i:s ' ),
6361 'classe ' => static ::class
6462 ]);
@@ -71,18 +69,13 @@ public function complete()
7169 {
7270 parent ::complete ();
7371
74- $ logger = logger ();
75- $ logger ->info ('Completamento importazione listino cliente ' , [
72+ logger ()->info ('Completamento importazione listino cliente ' , [
7673 'timestamp ' => date ('Y-m-d H:i:s ' ),
7774 'record_falliti ' => count ($ this ->failed_records ),
7875 'listini_in_cache ' => count (self ::$ listini_cache ),
7976 'articoli_in_cache ' => count (self ::$ articoli_cache ),
8077 'righe_processate ' => $ this ->current_row
8178 ]);
82-
83- // Opzionale: pulisce le cache alla fine per liberare memoria
84- // self::$listini_cache = [];
85- // self::$articoli_cache = [];
8679 }
8780 /**
8881 * Definisce i campi disponibili per l'importazione.
@@ -138,34 +131,29 @@ public function import($record, $update_record = true, $add_record = true)
138131 try {
139132 $ database = database ();
140133
141- // Validazione dettagliata dei campi obbligatori
142134 $ validation_errors = $ this ->validateRecord ($ record );
143135 if (!empty ($ validation_errors )) {
144136 $ error_message = 'Errori di validazione: ' . implode (', ' , $ validation_errors );
145137 $ this ->logError ('validation ' , $ error_message , $ record );
146138 return false ;
147139 }
148140
149- // Ricerca del listino, creandolo se non esiste
150141 $ listino = $ this ->trovaOCreaListino ($ record , $ database );
151142 if (empty ($ listino )) {
152143 $ error_message = "Impossibile trovare o creare il listino ' {$ record ['nome_listino ' ]}' " ;
153144 $ this ->logError ('listino_creation_failed ' , $ error_message , $ record );
154145 return false ;
155146 }
156147
157- // Ricerca dell'articolo
158148 $ articolo = $ this ->trovaArticolo ($ record , $ database );
159149 if (empty ($ articolo )) {
160150 $ error_message = "Articolo con codice ' {$ record ['codice ' ]}' non trovato " ;
161151 $ this ->logError ('articolo_not_found ' , $ error_message , $ record );
162152 return false ;
163153 }
164154
165- // Ricerca dell'articolo nel listino
166155 $ articolo_listino = $ this ->trovaArticoloListino ($ articolo ['id ' ], $ listino ['id ' ]);
167156
168- // Controllo se creare o aggiornare il record
169157 if (($ articolo_listino && !$ update_record ) || (!$ articolo_listino && !$ add_record )) {
170158 $ logger ->info ('Importazione saltata per articolo nel listino ' , [
171159 'codice_articolo ' => $ record ['codice ' ],
@@ -176,10 +164,8 @@ public function import($record, $update_record = true, $add_record = true)
176164 return null ;
177165 }
178166
179- // Creazione o aggiornamento dell'articolo nel listino
180167 $ this ->salvaArticoloListino ($ articolo_listino , $ articolo , $ listino ['id ' ], $ record );
181168
182- // Log di successo
183169 $ logger ->info ('Articolo importato con successo nel listino ' , [
184170 'codice_articolo ' => $ record ['codice ' ],
185171 'nome_listino ' => $ record ['nome_listino ' ],
@@ -220,7 +206,6 @@ protected function validateRecord($record)
220206 {
221207 $ errors = [];
222208
223- // Validazione campi obbligatori
224209 if (empty ($ record ['nome_listino ' ])) {
225210 $ errors [] = 'Nome listino mancante ' ;
226211 } elseif (strlen ($ record ['nome_listino ' ]) > 255 ) {
@@ -235,12 +220,10 @@ protected function validateRecord($record)
235220 $ errors [] = 'Prezzo unitario mancante ' ;
236221 }
237222
238- // Validazione formato prezzo
239223 if (!empty ($ record ['prezzo_unitario ' ]) && !is_numeric ($ record ['prezzo_unitario ' ])) {
240224 $ errors [] = 'Prezzo unitario non valido (deve essere numerico) ' ;
241225 }
242226
243- // Validazione sconto percentuale
244227 if (!empty ($ record ['sconto_percentuale ' ])) {
245228 if (!is_numeric ($ record ['sconto_percentuale ' ])) {
246229 $ errors [] = 'Sconto percentuale non valido (deve essere numerico) ' ;
@@ -249,7 +232,6 @@ protected function validateRecord($record)
249232 }
250233 }
251234
252- // Validazione formato data scadenza
253235 if (!empty ($ record ['data_scadenza ' ])) {
254236 $ date = \DateTime::createFromFormat ('Y-m-d ' , $ record ['data_scadenza ' ]);
255237 if (!$ date || $ date ->format ('Y-m-d ' ) !== $ record ['data_scadenza ' ]) {
@@ -271,11 +253,8 @@ protected function validateRecord($record)
271253 protected function logError ($ type , $ message , $ record , $ exception = null )
272254 {
273255 $ logger = logger ();
274-
275- // Aggiungi l'errore all'array per il file CSV delle anomalie
276256 $ this ->failed_errors [] = $ message ;
277257
278- // Context per il log strutturato
279258 $ context = [
280259 'tipo_errore ' => $ type ,
281260 'riga ' => $ this ->current_row ,
@@ -293,7 +272,6 @@ protected function logError($type, $message, $record, $exception = null)
293272 ];
294273 }
295274
296- // Log con livello appropriato
297275 switch ($ type ) {
298276 case 'validation ' :
299277 $ logger ->warning ('Errore di validazione durante importazione listino cliente ' , $ context );
@@ -313,18 +291,11 @@ protected function logError($type, $message, $record, $exception = null)
313291 }
314292 }
315293
316- /**
317- * Cache per i listini già cercati per migliorare le performance.
318- */
319294 protected static $ listini_cache = [];
320-
321- /**
322- * Cache per gli articoli già cercati per migliorare le performance.
323- */
324295 protected static $ articoli_cache = [];
325296
326297 /**
327- * Trova il listino in base al nome con caching per migliorare le performance.
298+ * Trova il listino in base al nome con caching
328299 *
329300 * @param array $record Record da importare
330301 * @param object $database Connessione al database
@@ -339,21 +310,18 @@ protected function trovaListino($record, $database)
339310
340311 $ nome_listino = $ record ['nome_listino ' ];
341312
342- // Controlla la cache prima di fare la query
343313 if (isset (self ::$ listini_cache [$ nome_listino ])) {
344314 return self ::$ listini_cache [$ nome_listino ];
345315 }
346316
347317 $ result = $ database ->fetchOne ('SELECT id FROM mg_listini WHERE nome = ' .prepare ($ nome_listino ));
348-
349- // Salva in cache il risultato (anche se null)
350318 self ::$ listini_cache [$ nome_listino ] = !empty ($ result ) ? $ result : null ;
351319
352320 return self ::$ listini_cache [$ nome_listino ];
353321 }
354322
355323 /**
356- * Trova l'articolo in base al codice con caching per migliorare le performance.
324+ * Trova l'articolo in base al codice con caching
357325 *
358326 * @param array $record Record da importare
359327 * @param object $database Connessione al database
@@ -368,14 +336,11 @@ protected function trovaArticolo($record, $database)
368336
369337 $ codice = $ record ['codice ' ];
370338
371- // Controlla la cache prima di fare la query
372339 if (isset (self ::$ articoli_cache [$ codice ])) {
373340 return self ::$ articoli_cache [$ codice ];
374341 }
375342
376343 $ result = $ database ->fetchOne ('SELECT `id` FROM `mg_articoli` WHERE `codice` = ' .prepare ($ codice ));
377-
378- // Salva in cache il risultato (anche se null)
379344 self ::$ articoli_cache [$ codice ] = !empty ($ result ) ? $ result : null ;
380345
381346 return self ::$ articoli_cache [$ codice ];
@@ -396,23 +361,19 @@ protected function trovaOCreaListino($record, $database)
396361 }
397362
398363 $ nome_listino = $ record ['nome_listino ' ];
399-
400- // Prima prova a trovare il listino esistente
401364 $ listino = $ this ->trovaListino ($ record , $ database );
402365
403366 if (!empty ($ listino )) {
404367 return $ listino ;
405368 }
406369
407- // Se non trovato, crea un nuovo listino
408370 try {
409371 $ logger = logger ();
410372
411373 $ nuovo_listino = Listino::build ($ nome_listino );
412- $ nuovo_listino ->attivo = 1 ; // Attivo di default
374+ $ nuovo_listino ->attivo = 1 ;
413375 $ nuovo_listino ->save ();
414376
415- // Aggiorna la cache con il nuovo listino
416377 $ listino_data = ['id ' => $ nuovo_listino ->id ];
417378 self ::$ listini_cache [$ nome_listino ] = $ listino_data ;
418379
@@ -424,8 +385,7 @@ protected function trovaOCreaListino($record, $database)
424385
425386 return $ listino_data ;
426387 } catch (\Exception $ e ) {
427- $ logger = logger ();
428- $ logger ->error ('Errore durante la creazione del listino ' , [
388+ logger ()->error ('Errore durante la creazione del listino ' , [
429389 'nome_listino ' => $ nome_listino ,
430390 'errore ' => $ e ->getMessage (),
431391 'riga ' => $ this ->current_row
@@ -435,27 +395,11 @@ protected function trovaOCreaListino($record, $database)
435395 }
436396 }
437397
438- /**
439- * Trova l'articolo nel listino.
440- *
441- * @param int $id_articolo ID dell'articolo
442- * @param int $id_listino ID del listino
443- *
444- * @return Articolo|null
445- */
446398 protected function trovaArticoloListino ($ id_articolo , $ id_listino )
447399 {
448400 return Articolo::where ('id_articolo ' , $ id_articolo )->where ('id_listino ' , $ id_listino )->first ();
449401 }
450402
451- /**
452- * Salva l'articolo nel listino.
453- *
454- * @param Articolo|null $articolo_listino Articolo nel listino esistente
455- * @param array $articolo_originale Articolo originale
456- * @param int $id_listino ID del listino
457- * @param array $record Record da importare
458- */
459403 protected function salvaArticoloListino ($ articolo_listino , $ articolo_originale , $ id_listino , $ record )
460404 {
461405 $ prezzi_ivati = setting ('Utilizza prezzi di vendita comprensivi di IVA ' );
@@ -484,7 +428,6 @@ public function saveFailedRecordsWithErrors($filepath)
484428 return '' ;
485429 }
486430
487- // Crea la directory se non esiste
488431 $ dir = dirname ($ filepath );
489432 if (!is_dir ($ dir )) {
490433 mkdir ($ dir , 0777 , true );
@@ -493,12 +436,10 @@ public function saveFailedRecordsWithErrors($filepath)
493436 $ file = fopen ($ filepath , 'w ' );
494437 fprintf ($ file , chr (0xEF ).chr (0xBB ).chr (0xBF ));
495438
496- // Scrivi l'intestazione con colonna errore aggiuntiva
497439 $ header = $ this ->getHeader ();
498440 $ header [] = 'Errore ' ;
499441 fputcsv ($ file , $ header , '; ' );
500442
501- // Scrivi le righe fallite con i relativi errori
502443 foreach ($ this ->failed_rows as $ index => $ row ) {
503444 $ error_message = $ this ->failed_errors [$ index ] ?? 'Errore sconosciuto ' ;
504445 $ row [] = $ error_message ;
@@ -507,9 +448,7 @@ public function saveFailedRecordsWithErrors($filepath)
507448
508449 fclose ($ file );
509450
510- // Log dell'operazione
511- $ logger = logger ();
512- $ logger ->info ('File anomalie listino cliente creato ' , [
451+ logger ()->info ('File anomalie listino cliente creato ' , [
513452 'filepath ' => $ filepath ,
514453 'record_falliti ' => count ($ this ->failed_rows ),
515454 'timestamp ' => date ('Y-m-d H:i:s ' )
@@ -518,11 +457,6 @@ public function saveFailedRecordsWithErrors($filepath)
518457 return $ filepath ;
519458 }
520459
521- /**
522- * Restituisce gli errori specifici per i record falliti.
523- *
524- * @return array
525- */
526460 public function getFailedErrors ()
527461 {
528462 return $ this ->failed_errors ;
0 commit comments