|
41 | 41 |
|
42 | 42 | break; |
43 | 43 |
|
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 | | - |
52 | 44 | case 'save': |
53 | 45 | $temp_name = $_FILES['blob']['tmp_name']; |
54 | 46 | $name = $_FILES['blob']['name']; |
|
197 | 189 | $process_result = Interaction::processInvoice($filename); |
198 | 190 | if ($process_result != '') { |
199 | 191 | 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); |
221 | 193 |
|
222 | 194 | return; |
223 | 195 | } |
224 | 196 | } |
225 | 197 |
|
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]; |
233 | 200 |
|
234 | 201 |
|
235 | 202 |
|
236 | 203 | if (get('sequence') == null) { |
237 | 204 | redirect(base_path().'/editor.php?id_module='.$id_module.'&id_record='.$id_fattura); |
238 | 205 | } 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 | + ])); |
254 | 212 | } else { |
255 | 213 | flash()->info(tr('Tutte le fatture salvate sono state importate!')); |
256 | 214 | redirect(base_path().'/controller.php?id_module='.$id_module); |
|
303 | 261 | $id_tipo = $tipi->sort()->keys()->last(); |
304 | 262 |
|
305 | 263 | // 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)); |
315 | 267 |
|
316 | 268 | // Ricerca dell'IVA più utilizzata secondo percentuali |
317 | 269 | $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); |
321 | 271 | foreach ($percentuali_iva as $key => $values) { |
322 | 272 | $aliquote = $values->mapToGroups(fn ($item, $key) => [$item->aliquota->id => $item->aliquota]); |
323 | 273 | $id_aliquota = $aliquote->map(fn ($item, $key) => $item->count())->sort()->keys()->last(); |
|
329 | 279 | ]; |
330 | 280 | } |
331 | 281 |
|
332 | | - $response = [ |
| 282 | + echo json_encode([ |
333 | 283 | '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' => [ |
340 | 285 | 'id' => $conto['id'], |
341 | 286 | 'descrizione' => $conto['descrizione'], |
342 | | - ]; |
343 | | - } |
344 | | - |
345 | | - echo json_encode($response); |
| 287 | + ], |
| 288 | + 'iva' => $iva, |
| 289 | + ]); |
346 | 290 | break; |
347 | 291 |
|
348 | 292 | case 'riferimenti-automatici': |
|
499 | 443 |
|
500 | 444 | // Se nella fattura elettronica è indicato un DDT cerco quel documento specifico |
501 | 445 | $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`, |
507 | 451 | `dt_righe_ddt`.`is_sconto`, 'ddt' AS ref, |
508 | 452 | 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 |
510 | 454 | `dt_righe_ddt` |
511 | 455 | INNER JOIN `dt_ddt` ON `dt_ddt`.`id` = `dt_righe_ddt`.`idddt` |
512 | 456 | INNER JOIN `dt_statiddt` ON `dt_statiddt`.`id` = `dt_ddt`.`idstatoddt` |
|
540 | 484 | // cerco per quell'ordine |
541 | 485 | if (empty($collegamento)) { |
542 | 486 | $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`, |
549 | 493 | 'ordine' AS ref, |
550 | 494 | CONCAT('Ordine num. ', IF(`numero_esterno` != '', `numero_esterno`, `numero`), ' del ', DATE_FORMAT(`data`, '%d/%m/%Y'), ' [', `or_statiordine_lang`.`title` , ']') AS opzione |
551 | 495 | FROM `or_righe_ordini` |
|
585 | 529 | // Se non ci sono Ordini o DDT cerco per contenuto |
586 | 530 | if (empty($collegamento)) { |
587 | 531 | $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`, |
594 | 538 | 'ddt' AS ref, |
595 | 539 | 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 |
597 | 541 | `dt_righe_ddt` |
598 | 542 | INNER JOIN `dt_ddt` ON `dt_ddt`.`id` = `dt_righe_ddt`.`idddt` |
599 | 543 | INNER JOIN `dt_statiddt` ON `dt_statiddt`.`id` = `dt_ddt`.`idstatoddt` |
600 | 544 | 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).') |
601 | 545 | 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 |
606 | 550 | `dt_statiddt_lang`.`title` != 'Fatturato' AND |
607 | 551 | `dt_tipiddt`.`dir` = 'uscita' |
608 | | - UNION |
609 | | - SELECT |
| 552 | + UNION |
| 553 | + SELECT |
610 | 554 | `or_righe_ordini`.`id`, |
611 | 555 | `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`, |
615 | 559 | 'ordine' AS ref, |
616 | 560 | 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 |
618 | 562 | `or_righe_ordini` |
619 | 563 | INNER JOIN `or_ordini` ON `or_ordini`.`id` = `or_righe_ordini`.`idordine` |
620 | 564 | INNER JOIN `or_statiordine` ON `or_statiordine`.`id` = `or_ordini`.`idstatoordine` |
621 | 565 | 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).') |
622 | 566 | 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 |
627 | 571 | `or_statiordine_lang`.`title` != 'Fatturato' AND |
628 | 572 | `or_tipiordine`.`dir` ='uscita'"; |
629 | 573 |
|
|
0 commit comments