Skip to content

Commit 1540f2d

Browse files
committed
refactor: ottimizzazione funzionalità import fe
1 parent 67cea29 commit 1540f2d

8 files changed

Lines changed: 642 additions & 867 deletions

File tree

plugins/importFE/actions.php

Lines changed: 51 additions & 107 deletions
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,6 @@
4141

4242
break;
4343

44-
case 'get_local_files':
45-
// Ottiene solo i file locali per l'importazione in sequenza
46-
$list = Interaction::getFileList();
47-
48-
echo json_encode($list);
49-
50-
break;
51-
5244
case 'save':
5345
$temp_name = $_FILES['blob']['tmp_name'];
5446
$name = $_FILES['blob']['name'];
@@ -197,60 +189,26 @@
197189
$process_result = Interaction::processInvoice($filename);
198190
if ($process_result != '') {
199191
flash()->error($process_result);
200-
201-
// Se siamo in modalità sequenza, continua con il prossimo file
202-
if (get('sequence') == 1) {
203-
// Usa la lista appropriata in base alle API
204-
if (Interaction::isEnabled()) {
205-
$files = Interaction::getInvoiceList();
206-
} else {
207-
$files = Interaction::getFileList();
208-
}
209-
$next_record = $id_record + 1;
210-
$next_file = $files[$next_record - 1] ?? null;
211-
212-
if (!empty($next_file)) {
213-
redirect(base_path().'/editor.php?id_module='.$id_module.'&id_plugin='.$id_plugin.'&id_record='.$next_record.'&sequence=1');
214-
} else {
215-
flash()->info(tr('Tutte le fatture salvate sono state importate!'));
216-
redirect(base_path().'/controller.php?id_module='.$id_module);
217-
}
218-
} else {
219-
redirect(base_path().'/controller.php?id_module='.$id_module);
220-
}
192+
redirect(base_path().'/controller.php?id_module='.$id_module);
221193

222194
return;
223195
}
224196
}
225197

226-
// Usa la lista appropriata in base alle API
227-
if (Interaction::isEnabled()) {
228-
$files = Interaction::getInvoiceList();
229-
} else {
230-
$files = Interaction::getFileList();
231-
}
232-
$file = $files[$id_record - 1] ?? null;
198+
$files = Interaction::getFileList();
199+
$file = $files[$id_record - 1];
233200

234201

235202

236203
if (get('sequence') == null) {
237204
redirect(base_path().'/editor.php?id_module='.$id_module.'&id_record='.$id_fattura);
238205
} elseif (!empty($file)) {
239-
// Calcola il prossimo record per l'importazione in sequenza
240-
$next_record = $id_record + 1;
241-
$next_file = $files[$next_record - 1] ?? null;
242-
243-
if (!empty($next_file)) {
244-
redirect(base_path().'/editor.php?id_module='.$id_module.'&id_plugin='.$id_plugin.'&id_record='.$next_record.'&sequence=1');
245-
flash()->info(tr('La fattura numero _NUM_ del _DATA_ (_ANAGRAFICA_) è stata importata correttamente', [
246-
'_NUM_' => $fattura->numero,
247-
'_DATA_' => dateFormat($fattura->data),
248-
'_ANAGRAFICA_' => $fattura->anagrafica->ragione_sociale,
249-
]));
250-
} else {
251-
flash()->info(tr('Tutte le fatture salvate sono state importate!'));
252-
redirect(base_path().'/controller.php?id_module='.$id_module);
253-
}
206+
redirect(base_path().'/editor.php?id_module='.$id_module.'&id_plugin='.$id_plugin.'&id_record='.$id_record.'&sequence=1');
207+
flash()->info(tr('La fattura numero _NUM_ del _DATA_ (_ANAGRAFICA_) è stata importata correttamente', [
208+
'_NUM_' => $fattura->numero,
209+
'_DATA_' => dateFormat($fattura->data),
210+
'_ANAGRAFICA_' => $fattura->anagrafica->ragione_sociale,
211+
]));
254212
} else {
255213
flash()->info(tr('Tutte le fatture salvate sono state importate!'));
256214
redirect(base_path().'/controller.php?id_module='.$id_module);
@@ -303,21 +261,13 @@
303261
$id_tipo = $tipi->sort()->keys()->last();
304262

305263
// Ricerca del conto più utilizzato
306-
// Filtro le righe che hanno un conto valido (maggiore di 0)
307-
$righe_con_conto = $righe->filter(fn ($item) => !empty($item->idconto) && $item->idconto > 0);
308-
309-
$conto = null;
310-
if ($righe_con_conto->isNotEmpty()) {
311-
$conti = $righe_con_conto->groupBy(fn ($item, $key) => $item->idconto)->transform(fn ($item, $key) => $item->count());
312-
$id_conto = $conti->sort()->keys()->last();
313-
$conto = $database->fetchOne('SELECT * FROM co_pianodeiconti3 WHERE id = '.prepare($id_conto));
314-
}
264+
$conti = $righe->groupBy(fn ($item, $key) => $item->idconto)->transform(fn ($item, $key) => $item->count());
265+
$id_conto = $conti->sort()->keys()->last();
266+
$conto = $database->fetchOne('SELECT * FROM co_pianodeiconti3 WHERE id = '.prepare($id_conto));
315267

316268
// Ricerca dell'IVA più utilizzata secondo percentuali
317269
$iva = [];
318-
// Filtro le righe che hanno un'aliquota IVA valida
319-
$righe_con_iva = $righe->filter(fn ($item) => !empty($item->idiva) && $item->idiva > 0 && !empty($item->aliquota));
320-
$percentuali_iva = $righe_con_iva->groupBy(fn ($item, $key) => $item->aliquota->percentuale);
270+
$percentuali_iva = $righe->groupBy(fn ($item, $key) => $item->aliquota->percentuale);
321271
foreach ($percentuali_iva as $key => $values) {
322272
$aliquote = $values->mapToGroups(fn ($item, $key) => [$item->aliquota->id => $item->aliquota]);
323273
$id_aliquota = $aliquote->map(fn ($item, $key) => $item->count())->sort()->keys()->last();
@@ -329,20 +279,14 @@
329279
];
330280
}
331281

332-
$response = [
282+
echo json_encode([
333283
'id_tipo' => $id_tipo,
334-
'iva' => $iva,
335-
];
336-
337-
// Aggiungo il conto solo se è stato trovato
338-
if (!empty($conto)) {
339-
$response['conto'] = [
284+
'conto' => [
340285
'id' => $conto['id'],
341286
'descrizione' => $conto['descrizione'],
342-
];
343-
}
344-
345-
echo json_encode($response);
287+
],
288+
'iva' => $iva,
289+
]);
346290
break;
347291

348292
case 'riferimenti-automatici':
@@ -499,14 +443,14 @@
499443

500444
// Se nella fattura elettronica è indicato un DDT cerco quel documento specifico
501445
$ddt = $dati_ddt[$numero_linea];
502-
$query = "SELECT
503-
`dt_righe_ddt`.`id`,
504-
`dt_righe_ddt`.`idddt` AS id_documento,
505-
`dt_righe_ddt`.`is_descrizione`,
506-
`dt_righe_ddt`.`idarticolo`,
446+
$query = "SELECT
447+
`dt_righe_ddt`.`id`,
448+
`dt_righe_ddt`.`idddt` AS id_documento,
449+
`dt_righe_ddt`.`is_descrizione`,
450+
`dt_righe_ddt`.`idarticolo`,
507451
`dt_righe_ddt`.`is_sconto`, 'ddt' AS ref,
508452
CONCAT('DDT num. ', IF(`numero_esterno` != '', `numero_esterno`, `numero`), ' del ', DATE_FORMAT(`data`, '%d/%m/%Y'), ' [', `dt_statiddt_lang`.`title`, ']') AS opzione
509-
FROM
453+
FROM
510454
`dt_righe_ddt`
511455
INNER JOIN `dt_ddt` ON `dt_ddt`.`id` = `dt_righe_ddt`.`idddt`
512456
INNER JOIN `dt_statiddt` ON `dt_statiddt`.`id` = `dt_ddt`.`idstatoddt`
@@ -540,12 +484,12 @@
540484
// cerco per quell'ordine
541485
if (empty($collegamento)) {
542486
$ordine = $dati_ordini[$numero_linea];
543-
$query = "SELECT
544-
`or_righe_ordini`.`id`,
545-
`or_righe_ordini`.`idordine` AS id_documento,
546-
`or_righe_ordini`.`is_descrizione`,
547-
`or_righe_ordini`.`idarticolo`,
548-
`or_righe_ordini`.`is_sconto`,
487+
$query = "SELECT
488+
`or_righe_ordini`.`id`,
489+
`or_righe_ordini`.`idordine` AS id_documento,
490+
`or_righe_ordini`.`is_descrizione`,
491+
`or_righe_ordini`.`idarticolo`,
492+
`or_righe_ordini`.`is_sconto`,
549493
'ordine' AS ref,
550494
CONCAT('Ordine num. ', IF(`numero_esterno` != '', `numero_esterno`, `numero`), ' del ', DATE_FORMAT(`data`, '%d/%m/%Y'), ' [', `or_statiordine_lang`.`title` , ']') AS opzione
551495
FROM `or_righe_ordini`
@@ -585,45 +529,45 @@
585529
// Se non ci sono Ordini o DDT cerco per contenuto
586530
if (empty($collegamento)) {
587531
$match_documento_da_fe = false;
588-
$query = "SELECT
589-
`dt_righe_ddt`.`id`,
590-
`dt_righe_ddt`.`idddt` AS id_documento,
591-
`dt_righe_ddt`.`is_descrizione`,
592-
`dt_righe_ddt`.`idarticolo`,
593-
`dt_righe_ddt`.`is_sconto`,
532+
$query = "SELECT
533+
`dt_righe_ddt`.`id`,
534+
`dt_righe_ddt`.`idddt` AS id_documento,
535+
`dt_righe_ddt`.`is_descrizione`,
536+
`dt_righe_ddt`.`idarticolo`,
537+
`dt_righe_ddt`.`is_sconto`,
594538
'ddt' AS ref,
595539
CONCAT('DDT num. ', IF(`numero_esterno` != '', `numero_esterno`, `numero`), ' del ', DATE_FORMAT(`data`, '%d/%m/%Y'), ' [', `dt_statiddt_lang`.`title`, ']') AS opzione
596-
FROM
540+
FROM
597541
`dt_righe_ddt`
598542
INNER JOIN `dt_ddt` ON `dt_ddt`.`id` = `dt_righe_ddt`.`idddt`
599543
INNER JOIN `dt_statiddt` ON `dt_statiddt`.`id` = `dt_ddt`.`idstatoddt`
600544
LEFT JOIN `dt_statiddt_lang` ON (`dt_statiddt_lang`.`id_record` = `dt_statiddt`.`id` AND `dt_statiddt_lang`.`id_lang` = ".prepare(Models\Locale::getDefault()->id).')
601545
INNER JOIN `dt_tipiddt` ON `dt_ddt`.`idtipoddt` = `dt_tipiddt`.`id`
602-
WHERE
603-
`dt_ddt`.`idanagrafica` = '.prepare($anagrafica->id)." AND
604-
|where_ddt| AND
605-
`dt_righe_ddt`.`qta` > `dt_righe_ddt`.`qta_evasa` AND
546+
WHERE
547+
`dt_ddt`.`idanagrafica` = '.prepare($anagrafica->id)." AND
548+
|where_ddt| AND
549+
`dt_righe_ddt`.`qta` > `dt_righe_ddt`.`qta_evasa` AND
606550
`dt_statiddt_lang`.`title` != 'Fatturato' AND
607551
`dt_tipiddt`.`dir` = 'uscita'
608-
UNION
609-
SELECT
552+
UNION
553+
SELECT
610554
`or_righe_ordini`.`id`,
611555
`or_righe_ordini`.`idordine` AS id_documento,
612-
`or_righe_ordini`.`is_descrizione`,
613-
`or_righe_ordini`.`idarticolo`,
614-
`or_righe_ordini`.`is_sconto`,
556+
`or_righe_ordini`.`is_descrizione`,
557+
`or_righe_ordini`.`idarticolo`,
558+
`or_righe_ordini`.`is_sconto`,
615559
'ordine' AS ref,
616560
CONCAT('Ordine num. ', IF(`numero_esterno` != '', `numero_esterno`, `numero`), ' del ', DATE_FORMAT(`data`, '%d/%m/%Y'), ' [', (SELECT `descrizione` FROM `or_statiordine` WHERE `id` = `idstatoordine`) , ']') AS opzione
617-
FROM
561+
FROM
618562
`or_righe_ordini`
619563
INNER JOIN `or_ordini` ON `or_ordini`.`id` = `or_righe_ordini`.`idordine`
620564
INNER JOIN `or_statiordine` ON `or_statiordine`.`id` = `or_ordini`.`idstatoordine`
621565
LEFT JOIN `or_statiordine_lang` ON (`or_statiordine_lang`.`id_record` = `or_statiordine`.`id` AND `or_statiordine_lang`.`id_lang` = ".prepare(Models\Locale::getDefault()->id).')
622566
INNER JOIN `or_tipiordine` ON `or_ordini`.`idtipoordine` = `or_tipiordine`.`id`
623-
WHERE
624-
`or_ordini`.`idanagrafica` = '.prepare($anagrafica->id)." AND
625-
|where_ordini| AND
626-
`or_righe_ordini`.`qta` > `or_righe_ordini`.`qta_evasa` AND
567+
WHERE
568+
`or_ordini`.`idanagrafica` = '.prepare($anagrafica->id)." AND
569+
|where_ordini| AND
570+
`or_righe_ordini`.`qta` > `or_righe_ordini`.`qta_evasa` AND
627571
`or_statiordine_lang`.`title` != 'Fatturato' AND
628572
`or_tipiordine`.`dir` ='uscita'";
629573

plugins/importFE/buttons.php

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -64,19 +64,14 @@ function compile(btn) {
6464
$("#id_tipo").selectSet(response.id_tipo);
6565
}
6666
67-
// Compila i campi IVA - prova a impostare la prima IVA disponibile per tutti i campi vuoti
6867
$("select[name^=iva]").each(function(){
69-
if (!$(this).val() && response.iva){
70-
// Prende la prima aliquota IVA disponibile
71-
var firstIva = Object.values(response.iva)[0];
72-
if (firstIva) {
73-
$(this).selectSetNew(firstIva.id, firstIva.descrizione);
74-
}
68+
var aliquota = $(this).closest("tr").find("[id^=aliquota]").text();
69+
if (response.iva[aliquota] !== undefined && !$(this).val()){
70+
$(this).selectSet(response.iva[aliquota].id);
7571
}
7672
});
7773
78-
// Compila i campi conto - il nome corretto è "conti" non "conto"
79-
$("select[name^=conti]").each(function(){
74+
$("select[name^=conto]").each(function(){
8075
if (!$(this).val()){
8176
$(this).selectSetNew(response.conto.id, response.conto.descrizione);
8277
}

0 commit comments

Comments
 (0)