|
440 | 440 | } |
441 | 441 | } |
442 | 442 |
|
443 | | - // Se nella fattura elettronica è indicato un DDT cerco quel documento specifico |
444 | | - $ddt = $dati_ddt[$numero_linea]; |
445 | | - $query = "SELECT |
446 | | - `dt_righe_ddt`.`id`, |
447 | | - `dt_righe_ddt`.`idddt` AS id_documento, |
448 | | - `dt_righe_ddt`.`is_descrizione`, |
449 | | - `dt_righe_ddt`.`idarticolo`, |
450 | | - `dt_righe_ddt`.`is_sconto`, 'ddt' AS ref, |
451 | | - CONCAT('DDT num. ', IF(`numero_esterno` != '', `numero_esterno`, `numero`), ' del ', DATE_FORMAT(`data`, '%d/%m/%Y'), ' [', `dt_statiddt_lang`.`title`, ']') AS opzione |
452 | | - FROM |
453 | | - `dt_righe_ddt` |
454 | | - INNER JOIN `dt_ddt` ON `dt_ddt`.`id` = `dt_righe_ddt`.`idddt` |
455 | | - INNER JOIN `dt_statiddt` ON `dt_statiddt`.`id` = `dt_ddt`.`idstatoddt` |
456 | | - 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).' |
457 | | - WHERE |
458 | | - `dt_ddt`.`numero_esterno` = '.prepare($ddt['numero']).' AND |
459 | | - YEAR(`dt_ddt`.`data`) = '.prepare($ddt['anno']).' AND |
460 | | - `dt_ddt`.`idanagrafica` = '.prepare($anagrafica->id).' AND |
461 | | - `dt_righe_ddt`.`qta` > `dt_righe_ddt`.`qta_evasa` AND |
462 | | - |where|'; |
463 | | - |
464 | | - // Ricerca di righe DDT con stesso Articolo |
465 | | - if (!empty($id_articolo)) { |
466 | | - $query_articolo = replace($query, [ |
467 | | - '|where|' => '`dt_righe_ddt`.`idarticolo` = '.prepare($id_articolo), |
468 | | - ]); |
| 443 | + // Se nella fattura elettronica è indicato un DDT cerco SOLO quel documento specifico |
| 444 | + if (isset($dati_ddt[$numero_linea])) { |
| 445 | + $ddt = $dati_ddt[$numero_linea]; |
| 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`, |
| 451 | + `dt_righe_ddt`.`is_sconto`, 'ddt' AS ref, |
| 452 | + CONCAT('DDT num. ', IF(`numero_esterno` != '', `numero_esterno`, `numero`), ' del ', DATE_FORMAT(`data`, '%d/%m/%Y'), ' [', `dt_statiddt_lang`.`title`, ']') AS opzione |
| 453 | + FROM |
| 454 | + `dt_righe_ddt` |
| 455 | + INNER JOIN `dt_ddt` ON `dt_ddt`.`id` = `dt_righe_ddt`.`idddt` |
| 456 | + INNER JOIN `dt_statiddt` ON `dt_statiddt`.`id` = `dt_ddt`.`idstatoddt` |
| 457 | + 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).' |
| 458 | + WHERE |
| 459 | + `dt_ddt`.`numero_esterno` = '.prepare($ddt['numero']).' AND |
| 460 | + YEAR(`dt_ddt`.`data`) = '.prepare($ddt['anno']).' AND |
| 461 | + `dt_ddt`.`idanagrafica` = '.prepare($anagrafica->id).' AND |
| 462 | + `dt_righe_ddt`.`qta` > `dt_righe_ddt`.`qta_evasa` AND |
| 463 | + |where|'; |
469 | 464 |
|
470 | | - $collegamento = $database->fetchOne($query_articolo); |
471 | | - } |
| 465 | + // Ricerca di righe DDT con stesso Articolo |
| 466 | + if (!empty($id_articolo)) { |
| 467 | + $query_articolo = replace($query, [ |
| 468 | + '|where|' => '`dt_righe_ddt`.`idarticolo` = '.prepare($id_articolo), |
| 469 | + ]); |
472 | 470 |
|
473 | | - // Ricerca di righe DDT per stessa descrizione |
474 | | - if (empty($collegamento)) { |
475 | | - $query_descrizione = replace($query, [ |
476 | | - '|where|' => '`dt_righe_ddt`.`descrizione` = '.prepare($riga['Descrizione']), |
477 | | - ]); |
| 471 | + $collegamento = $database->fetchOne($query_articolo); |
| 472 | + } |
| 473 | + |
| 474 | + // Ricerca di righe DDT per stessa descrizione |
| 475 | + if (empty($collegamento)) { |
| 476 | + $query_descrizione = replace($query, [ |
| 477 | + '|where|' => '`dt_righe_ddt`.`descrizione` = '.prepare($riga['Descrizione']), |
| 478 | + ]); |
478 | 479 |
|
479 | | - $collegamento = $database->fetchOne($query_descrizione); |
| 480 | + $collegamento = $database->fetchOne($query_descrizione); |
| 481 | + } |
480 | 482 | } |
481 | 483 |
|
482 | | - // Se nella fattura elettronica NON è indicato un DDT ed è indicato anche un ordine |
483 | | - // cerco per quell'ordine |
484 | | - if (empty($collegamento)) { |
| 484 | + // Se nella fattura elettronica NON è indicato un DDT ed è indicato un ordine |
| 485 | + // cerco SOLO per quell'ordine specifico |
| 486 | + if (empty($collegamento) && isset($dati_ordini[$numero_linea])) { |
485 | 487 | $ordine = $dati_ordini[$numero_linea]; |
486 | 488 | $query = "SELECT |
487 | 489 | `or_righe_ordini`.`id`, |
|
523 | 525 |
|
524 | 526 | /* |
525 | 527 | * TENTATIVO 2: ricerca solo per articolo o descrizione su documenti |
526 | | - * non referenziati nella fattura elettronica |
| 528 | + * SOLO se nella fattura elettronica NON sono specificati riferimenti per questa riga |
527 | 529 | */ |
528 | | - // Se non ci sono Ordini o DDT cerco per contenuto |
529 | | - if (empty($collegamento)) { |
| 530 | + // Se non ci sono riferimenti specifici nell'XML E non ho trovato collegamenti, cerco per contenuto |
| 531 | + if (empty($collegamento) && !isset($dati_ddt[$numero_linea]) && !isset($dati_ordini[$numero_linea])) { |
530 | 532 | $match_documento_da_fe = false; |
531 | 533 | $query = "SELECT |
532 | 534 | `dt_righe_ddt`.`id`, |
|
0 commit comments