@@ -122,41 +122,33 @@ public function import($record, $update_record = true, $add_record = true)
122122 try {
123123 $ database = database ();
124124
125- // Validazione dei campi obbligatori
126125 if (empty ($ record ['numero ' ]) || empty ($ record ['nome ' ]) || empty ($ record ['ragione_sociale ' ])
127126 || empty ($ record ['data_bozza ' ]) || empty ($ record ['prezzo_unitario ' ])) {
128127 return false ;
129128 }
130129
131- // Validazione per righe: deve essere presente codice articolo O descrizione riga
132130 if (empty ($ record ['codice ' ]) && empty ($ record ['descrizione_riga ' ])) {
133131 return false ;
134132 }
135133
136- // Ricerca del preventivo esistente
137134 $ preventivo = $ this ->trovaPreventivo ($ record , $ database );
138135
139- // Controllo se creare o aggiornare il record
140136 if (($ preventivo && !$ update_record ) || (!$ preventivo && !$ add_record )) {
141137 return null ;
142138 }
143139
144- // Creazione o aggiornamento del preventivo
145140 if (empty ($ preventivo )) {
146141 $ preventivo = $ this ->creaPreventivo ($ record );
147142 if (empty ($ preventivo )) {
148143 return false ;
149144 }
150145 }
151146
152- // Aggiunta della riga al preventivo (articolo o riga generica)
153147 $ this ->aggiungiRigaAlPreventivo ($ preventivo , $ record );
154148
155149 return true ;
156150 } catch (\Exception $ e ) {
157- // Registra l'errore in un log
158151 error_log ('Errore durante l \'importazione del preventivo: ' .$ e ->getMessage ());
159-
160152 return false ;
161153 }
162154 }
@@ -170,9 +162,9 @@ public static function getExample()
170162 {
171163 return [
172164 ['Numero ' , 'Nome Preventivo ' , 'Descrizione Preventivo ' , 'Cliente ' , 'Partita IVA Cliente ' , 'Tipo Attività ' , 'Data ' , 'Codice Articolo ' , 'Descrizione riga generica ' , 'Aliquota IVA riga (%) ' , 'Quantità riga ' , 'Data prevista evasione riga ' , 'Prezzo unitario riga ' ],
173- ['15 ' , 'Preventivo Materiali ' , 'Preventivo iniziale ' , 'Rossi ' , '12345678901 ' , 'Generico ' , '27/04/2024 ' , '001 ' , '' , '' , '2 ' , '30/04/2024 ' , '50 ' ],
174- ['15 ' , 'Preventivo Materiali ' , 'Preventivo iniziale ' , 'Rossi ' , '12345678901 ' , 'Generico ' , '27/04/2024 ' , '043 ' , '' , '' , '1 ' , '10/05/2024 ' , '100 ' ],
175- ['16 ' , 'Preventivo Servizi ' , 'Preventivo servizi ' , 'Bianchi ' , '98765432109 ' , 'Generico ' , '28/04/2024 ' , '' , 'Consulenza tecnica ' , '22 ' , '1 ' , '05/05/2024 ' , '150 ' ],
165+ ['15 ' , 'Preventivo Materiali ' , 'Preventivo iniziale ' , 'Mario Rossi ' , '123456789 ' , 'Generico ' , '27/04/2025 ' , 'OSM-BUDGET ' , '' , '22 ' , '1 ' , '30/04/2025 ' , '100 ' ],
166+ ['15 ' , 'Preventivo Materiali ' , 'Preventivo iniziale ' , 'Mario Rossi ' , '123456789 ' , 'Generico ' , '27/04/2025 ' , '' , 'Manodopera ' , '22 ' , '1 ' , '10/05/2025 ' , '150 ' ],
167+ ['16 ' , 'Preventivo Servizi ' , 'Preventivo servizi ' , 'Mario Rossi ' , '123456789 ' , 'Generico ' , '28/04/2025 ' , '' , 'Consulenza tecnica ' , '22 ' , '1 ' , '05/05/2025 ' , '150 ' ],
176168 ];
177169 }
178170
@@ -205,16 +197,13 @@ protected function trovaPreventivo($record, $database)
205197 protected function creaPreventivo ($ record )
206198 {
207199 try {
208- // Ricerca o creazione dell'anagrafica cliente
209200 $ anagrafica = $ this ->trovaOCreaAnagrafica ($ record );
210201 if (empty ($ anagrafica )) {
211202 return null ;
212203 }
213204
214- // Ricerca del tipo di intervento
215205 $ tipo = $ this ->trovaTipoIntervento ($ record );
216206
217- // Creazione del preventivo
218207 $ preventivo = Preventivo::build ($ anagrafica , $ tipo , $ record ['nome ' ], $ this ->parseData ($ record ['data_bozza ' ]), 0 );
219208 $ preventivo ->numero = $ record ['numero ' ];
220209 $ preventivo ->idstato = Stato::where ('name ' , 'Bozza ' )->first ()->id ;
@@ -224,7 +213,6 @@ protected function creaPreventivo($record)
224213 return $ preventivo ;
225214 } catch (\Exception $ e ) {
226215 error_log ('Errore durante la creazione del preventivo: ' .$ e ->getMessage ());
227-
228216 return null ;
229217 }
230218 }
@@ -244,21 +232,17 @@ protected function trovaOCreaAnagrafica($record)
244232
245233 $ anagrafica = null ;
246234
247- // Prima ricerca per partita IVA se presente
248235 if (!empty ($ record ['partita_iva ' ])) {
249236 $ anagrafica = Anagrafica::where ('piva ' , $ record ['partita_iva ' ])->first ();
250237 }
251238
252- // Se non trovata per partita IVA, ricerca per ragione sociale
253239 if (empty ($ anagrafica )) {
254240 $ anagrafica = Anagrafica::where ('ragione_sociale ' , $ record ['ragione_sociale ' ])->first ();
255241 }
256242
257- // Se non trovata, crea nuova anagrafica
258243 if (empty ($ anagrafica )) {
259244 $ anagrafica = Anagrafica::build ($ record ['ragione_sociale ' ]);
260245
261- // Imposta la partita IVA se fornita
262246 if (!empty ($ record ['partita_iva ' ])) {
263247 $ anagrafica ->partita_iva = $ record ['partita_iva ' ];
264248 }
@@ -294,23 +278,20 @@ protected function trovaTipoIntervento($record)
294278 protected function aggiungiRigaAlPreventivo ($ preventivo , $ record )
295279 {
296280 try {
297- // Se è presente il codice articolo, prova a creare una riga articolo
298281 if (!empty ($ record ['codice ' ])) {
299282 $ articolo_orig = ArticoloOriginale::where ('codice ' , $ record ['codice ' ])->first ();
300283 if (!empty ($ articolo_orig )) {
301284 return $ this ->aggiungiArticoloAlPreventivo ($ preventivo , $ record , $ articolo_orig );
302285 }
303286 }
304287
305- // Se non è un articolo o l'articolo non è stato trovato, crea una riga generica
306288 if (!empty ($ record ['descrizione_riga ' ])) {
307289 return $ this ->aggiungiRigaGenericaAlPreventivo ($ preventivo , $ record );
308290 }
309291
310292 return false ;
311293 } catch (\Exception $ e ) {
312294 error_log ('Errore durante l \'aggiunta della riga al preventivo: ' .$ e ->getMessage ());
313-
314295 return false ;
315296 }
316297 }
@@ -330,12 +311,10 @@ protected function aggiungiArticoloAlPreventivo($preventivo, $record, $articolo_
330311 $ riga_articolo = Articolo::build ($ preventivo , $ articolo_orig );
331312 $ riga_articolo ->um = $ articolo_orig ->um ?: null ;
332313
333- // Gestione della data di evasione
334314 if (!empty ($ record ['data_evasione ' ])) {
335315 $ riga_articolo ->data_evasione = $ this ->parseData ($ record ['data_evasione ' ]);
336316 }
337317
338- // Gestione dell'IVA
339318 $ anagrafica = $ preventivo ->anagrafica ;
340319 $ idiva = $ articolo_orig ->idiva_vendita ?: ($ anagrafica ->idiva_vendite ?: setting ('Iva predefinita ' ));
341320
@@ -348,7 +327,6 @@ protected function aggiungiArticoloAlPreventivo($preventivo, $record, $articolo_
348327 return true ;
349328 } catch (\Exception $ e ) {
350329 error_log ('Errore durante l \'aggiunta dell \'articolo al preventivo: ' .$ e ->getMessage ());
351-
352330 return false ;
353331 }
354332 }
@@ -366,12 +344,10 @@ protected function aggiungiRigaGenericaAlPreventivo($preventivo, $record)
366344 try {
367345 $ riga = Riga::build ($ preventivo );
368346
369- // Gestione della data di evasione
370347 if (!empty ($ record ['data_evasione ' ])) {
371348 $ riga ->data_evasione = $ this ->parseData ($ record ['data_evasione ' ]);
372349 }
373350
374- // Gestione dell'IVA
375351 $ idiva = $ this ->trovaAliquotaIva ($ record , $ preventivo );
376352
377353 $ riga ->descrizione = $ record ['descrizione_riga ' ];
@@ -383,7 +359,6 @@ protected function aggiungiRigaGenericaAlPreventivo($preventivo, $record)
383359 return true ;
384360 } catch (\Exception $ e ) {
385361 error_log ('Errore durante l \'aggiunta della riga generica al preventivo: ' .$ e ->getMessage ());
386-
387362 return false ;
388363 }
389364 }
@@ -398,15 +373,13 @@ protected function aggiungiRigaGenericaAlPreventivo($preventivo, $record)
398373 */
399374 protected function trovaAliquotaIva ($ record , $ preventivo )
400375 {
401- // Se è specificata un'aliquota IVA nel record, cerca per percentuale
402376 if (!empty ($ record ['aliquota_iva ' ])) {
403377 $ aliquota = Aliquota::where ('percentuale ' , $ record ['aliquota_iva ' ])->first ();
404378 if (!empty ($ aliquota )) {
405379 return $ aliquota ->id ;
406380 }
407381 }
408382
409- // Fallback: usa l'IVA dell'anagrafica o quella predefinita
410383 $ anagrafica = $ preventivo ->anagrafica ;
411384 return $ anagrafica ->idiva_vendite ?: setting ('Iva predefinita ' );
412385 }
@@ -423,14 +396,11 @@ protected function parseData($data_string)
423396 try {
424397 return new Carbon ($ data_string );
425398 } catch (\Exception $ e ) {
426- // Prova a interpretare formati di data italiani (dd/mm/yyyy)
427399 if (preg_match ('/^(\d{1,2})\/(\d{1,2})\/(\d{4})$/ ' , $ data_string , $ matches )) {
428400 return Carbon::createFromDate ($ matches [3 ], $ matches [2 ], $ matches [1 ]);
429401 }
430402
431- // Fallback alla data corrente
432403 error_log ('Errore nel parsing della data: ' .$ e ->getMessage ());
433-
434404 return Carbon::now ();
435405 }
436406 }
0 commit comments