Skip to content

Commit bf7d26e

Browse files
committed
refactor: miglioria importazione preventivi
1 parent 033bcf1 commit bf7d26e

1 file changed

Lines changed: 3 additions & 33 deletions

File tree

  • modules/preventivi/src/Import

modules/preventivi/src/Import/CSV.php

Lines changed: 3 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)