src/Controller/ImportazioneController.php line 6864

  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\AlberoMenuProdotti;
  4. use App\Entity\AnagraficaOpzioniAggiuntive;
  5. use App\Entity\Anagrafiche;
  6. use App\Entity\AnagraficheBlocchi;
  7. use App\Entity\AnagraficheIndirizzi;
  8. use App\Entity\Articoli;
  9. use App\Entity\AssociazioneArticoliCliente;
  10. use App\Entity\AssociazioneArticoliTipoOrdine;
  11. use App\Entity\AssociazioneAttributi;
  12. use App\Entity\AssociazioneCategorieAlberoMappaCategorieArticoli;
  13. use App\Entity\AssociazioneCodiciAgentiUtente;
  14. use App\Entity\AssociazioneSpedizioniClienti;
  15. use App\Entity\Attributi;
  16. use App\Entity\BarcodeArticoli;
  17. use App\Entity\Categorie;
  18. use App\Entity\CategorieAlbero;
  19. use App\Entity\Consegna;
  20. use App\Entity\Destinazioni;
  21. use App\Entity\DisponibilitaAFasce;
  22. use App\Entity\Documenti;
  23. use App\Entity\DocumentiRighe;
  24. use App\Entity\FiltroVisualizzazioneArticoliClienti;
  25. use App\Entity\LimitazioniOrdinazioniArticoli;
  26. use App\Entity\ListiniVendita;
  27. use App\Entity\MagazziniSecondari;
  28. use App\Entity\MagazzinoSecondarioDisponibilita;
  29. use App\Entity\MailSecondarieUtenti;
  30. use App\Entity\MappaCategorieArticoli;
  31. use App\Entity\Nazioni;
  32. use App\Entity\OfferteAllegati;
  33. use App\Entity\OfferteRegistroEventi;
  34. use App\Entity\OfferteRighe;
  35. use App\Entity\Ordini;
  36. use App\Entity\Pagamenti;
  37. use App\Entity\Report;
  38. use App\Entity\RisorseAnagrafiche;
  39. use App\Entity\RisorseAnagraficheColonne;
  40. use App\Entity\RisorseAnagraficheColonneValori;
  41. use App\Entity\ScontiAnagrafiche;
  42. use App\Entity\Spedizione;
  43. use App\Entity\TipoOrdine;
  44. use App\Entity\UnitaMisura;
  45. use App\Entity\User;
  46. use App\Entity\Varianti;
  47. use App\Entity\Offerte;
  48. use App\Model\Caching\Caching_Categorie;
  49. use App\Model\Caching\Caching_CategorieAlbero;
  50. use App\Model\Entita\OffertaRegistroEventi;
  51. use App\Model\Google\GoogleMapsAPI;
  52. use App\Model\Mailer;
  53. use App\Model\Translating\Translating;
  54. use Doctrine\DBAL\Exception;
  55. use Psr\Log\LoggerInterface;
  56. use Symfony\Component\Filesystem\Filesystem;
  57. use Symfony\Component\HttpFoundation\JsonResponse;
  58. use Symfony\Component\HttpFoundation\Request;
  59. use Symfony\Component\HttpFoundation\Response;
  60. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  61. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  62. use Symfony\Component\Routing\Annotation\Route;
  63. /**
  64.  *
  65.  */
  66. class ImportazioneController extends AbstractController
  67. {
  68.     /** @var ServiziController */
  69.     private $servizi;
  70.     /** @var ReturnImpostazioniServiceController */
  71.     private $imp;
  72.     /** @var Translating */
  73.     private $translating;
  74.     /** @var Mailer */
  75.     private $mailer;
  76.     /** @var LoggerInterface */
  77.     private $logger;
  78.     /** @var UserPasswordHasherInterface */
  79.     private $passwordHasher;
  80.     /**
  81.      * ImportazioneController constructor.
  82.      * @param ServiziController $servizi
  83.      * @param ReturnImpostazioniServiceController $imp
  84.      * @param Translating $translating
  85.      * @param Mailer $mailer
  86.      * @param LoggerInterface $logger
  87.      * @param UserPasswordHasherInterface $passwordHasher
  88.      */
  89.     public function __construct(ServiziController $serviziReturnImpostazioniServiceController $impTranslating $translatingMailer $mailerLoggerInterface $loggerUserPasswordHasherInterface $passwordHasher)
  90.     {
  91.         $this->servizi $servizi;
  92.         $this->imp $imp;
  93.         $this->translating $translating;
  94.         $this->mailer $mailer;
  95.         $this->logger $logger;
  96.         $this->passwordHasher $passwordHasher;
  97.         $this->imp->caricaCacheImpostazioniDaFamiglie(['Importazioni']);
  98.     }
  99.     /**
  100.      * @param $ip string
  101.      * @param $debug string
  102.      * @param boolean $esito
  103.      * @param $messaggio string
  104.      * @param $utente User
  105.      */
  106.     function ScriviRegistroAttivita($em$ip$debug$esito$messaggio$utente$collegamento=''$categoria1=''$categoria2='')
  107.     {
  108.         $this->servizi->ScriviRegistroAttivita($ip$debug$esito$messaggio$utente$collegamento$categoria1$categoria2);
  109.     }
  110.     function endsWith($haystack$needle)
  111.     {
  112.         $length strlen($needle);
  113.         if ($length == 0) {
  114.             return true;
  115.         }
  116.         return (substr($haystack, -$length) === $needle);
  117.     }
  118.     /**
  119.      * @param $path
  120.      * @return string
  121.      */
  122.     function verificaPathImg($path){
  123.         if($path == '')
  124.             return '';
  125.         if(strpos($path"/uploads/") !== false){
  126.             return $path;
  127.         }else if (strpos($path"/") !== false){
  128.                return "/uploads" $path;
  129.         }else{
  130.             return "/uploads/" $path;
  131.         }
  132.     }
  133.     /**
  134.      * @param $valore
  135.      * @param $seVuotoMetti0
  136.      * @return int|mixed
  137.      */
  138.     function verificaInt($valore$seVuotoMetti0 true){
  139.         if($valore == '' and $seVuotoMetti0){
  140.             $valore 0;
  141.         }
  142.         return $valore;
  143.     }
  144.     /**
  145.      * @param $valore
  146.      * @param $seVuotoMettiFalse
  147.      * @return false|mixed
  148.      */
  149.     function verificaBool($valore$seVuotoMettiFalse true){
  150.         if($valore == '' and $seVuotoMettiFalse){
  151.             $valore false;
  152.         }
  153.         return $valore;
  154.     }
  155.     /**
  156.      * @param $stringa
  157.      * @param false $ancheOra
  158.      * @return \DateTime|null
  159.      */
  160.     private static function OttieniDataDaStringa($stringa$ancheOra false){
  161.         $ritorno null;
  162.         try {
  163.             if ($stringa != '') {
  164.                 if ($ancheOra) {
  165.                     $ritorno \DateTime::createFromFormat('Y-m-d H:i:s'$stringa);
  166.                 } else {
  167.                     $ritorno \DateTime::createFromFormat('Y-m-d'$stringa);
  168.                 }
  169.             }
  170.         } catch (\Exception|\Throwable $ex){
  171.         }
  172.         if($ritorno === false)
  173.             $ritorno null;
  174.         return $ritorno;
  175.     }
  176.     /**
  177.      * @Route("/caricaArticoliDb/{svuota}/{dbg}/{batch}/{iterazione}", name="carica_articoli_db", defaults={"svuota"="0", "dbg"="0", "batch"="0", "iterazione"="0"})
  178.      */
  179.     public function caricaArticoliDbAction(Request $request$svuota$dbg$batch$iterazione)
  180.     {
  181.         //Batch Ã¨ il numero di righe processate ad ogni iterazione
  182.         //Iterazione Ã¨ il numero dell'iterazione chiamata
  183.         $collegamentoRnd $this->servizi->randomString2();
  184.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  185.             ini_set('max_execution_time', -1);
  186.             ini_set('memory_limit''4G');
  187.             if($dbg == '1'){
  188.                 ini_set('display_errors',1);
  189.                 error_reporting(E_ALL);
  190.             }
  191.             $start microtime(true);
  192.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  193.             $em $this->servizi->doctrine->getManager();
  194.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /caricaArticoliDb/' $svuota ' --- Inizio il caricamento degli articoli'null$collegamentoRnd'ImportazioneController''caricaArticoliDb');
  195.             $connection $this->servizi->doctrine->getConnection();
  196.             if($svuota == "1"){
  197.                 $em $this->servizi->doctrine->getManager();
  198.                 $connection->beginTransaction();
  199.                 try {
  200.                     $connection->query("SET FOREIGN_KEY_CHECKS=0;");
  201.                     $connection->executeUpdate("TRUNCATE `albero_menu_prodotti`;");
  202.                     $connection->executeUpdate("TRUNCATE `articoli`;");
  203.                     $connection->executeUpdate("TRUNCATE `articoli_in_lingua`;");
  204.                     $connection->executeUpdate("TRUNCATE `associazione_articoli_cliente`;");
  205.                     $connection->executeUpdate("TRUNCATE `associazione_attributi`;");
  206.                     $connection->executeUpdate("TRUNCATE `attributi`;");
  207.                     $connection->executeUpdate("TRUNCATE `attributi_in_lingua`;");
  208.                     $connection->executeUpdate("TRUNCATE `carrello`;");
  209.                     $connection->executeUpdate("TRUNCATE `categorie`;");
  210.                     $connection->executeUpdate("TRUNCATE `categorie_in_lingua`;");
  211.                     $connection->executeUpdate("TRUNCATE `combinazione_albero_mappa_categorie_articoli`;");
  212.                     $connection->executeUpdate("TRUNCATE `listini_vendita`;");
  213.                     $connection->executeUpdate("TRUNCATE `magazzino_secondario_disponibilita`;");
  214.                     $connection->executeUpdate("TRUNCATE `mappa_categorie_articoli`;");
  215.                     $connection->executeUpdate("TRUNCATE `ordini`;");
  216.                     $connection->executeUpdate("TRUNCATE `ordini_righe`;");
  217.                     $connection->executeUpdate("TRUNCATE `righe_carrello`;");
  218.                     $connection->executeUpdate("TRUNCATE `statistiche_categorie`;");
  219.                     $connection->executeUpdate("TRUNCATE `statistiche_click_articoli`;");
  220.                     $connection->executeUpdate("TRUNCATE `tipologie_preimpostate`;");
  221.                     $connection->executeUpdate("TRUNCATE `tipologie_preimpostate_lista`;");
  222.                     $connection->executeUpdate("TRUNCATE `unita_misura`;");
  223.                     $connection->executeUpdate("TRUNCATE `varianti`;");
  224.                     $connection->executeUpdate("TRUNCATE `varianti_in_lingua`;");
  225.                     $connection->query("SET FOREIGN_KEY_CHECKS=1;");
  226.                     $connection->commit();
  227.                 }catch (\Exception|\Throwable $ex){
  228.                     $this->servizi->DebuggaException($ex"Errore pulizia articoli DB"falsenull$collegamentoRnd'ImportazioneController''caricaArticoliDb');
  229.                 }
  230.             }
  231.             $bool_rigeneraAlbero false;
  232.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  233.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  234.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  235.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  236.             $root_path $pathFileBase "articoli.csv";
  237.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  238.             $contatore 0;
  239.             $row 0;
  240.             $queryEseguite 0;
  241.             $batch_size 100;
  242.             $errori "";
  243.             /*
  244.              * TRACCIATO FILE IMPORTAZIONE articoli.csv
  245.              *
  246.                 0    codice articolo
  247.                 1    nome articolo
  248.                 2    descrizione breve
  249.                 3    descrizione estesa articolo
  250.                 4    immagine minuatura
  251.                 5    immagine
  252.                 6    codice aliquota
  253.                 7    valore aliquota
  254.                 8    unita di misura
  255.                 9    codice categoria
  256.                 10    descrizione categoria
  257.                 11    codice sub-categoria 1
  258.                 12    descrizione sub-categoria 1
  259.                 13    codice sub-categoria 2
  260.                 14    descrizione sub-categoria 2
  261.                 15    codice sub-categoria 3
  262.                 16    descrizione sub-categoria 3
  263.                 17    marca
  264.                 18    operazione
  265.                 19    disponibilita
  266.                 20    um_peso
  267.                 21    peso netto
  268.                 22    peso lordo
  269.                 23    codice originale importazione
  270.                 24    prezzo a richiesta
  271.                 25    codice sub-categoria 4
  272.                 26    descrizione sub-categoria 4
  273.                 27  immagine cat1
  274.                 28  immagine cat2
  275.                 29  immagine cat3
  276.                 30  immagine cat4
  277.                 31  immagine cat5
  278.                 32    ordine_categoria1
  279.                 33    ordine_categoria2
  280.                 34    ordine_categoria3
  281.                 35    ordine_categoria4
  282.                 36    ordine_categoria5
  283.                 37    ordine_articolo
  284.                 38    ordine_mappa
  285.                 39  barcode
  286.                 40  ordini_fornitori
  287.                 41  codice_gruppo_articoli
  288.                 42  codice_gruppo_categorie
  289.              */
  290.             $righeDaSaltareSeBatch 0;
  291.             if($batch != && $iterazione != 0){
  292.                 $rrr $batch $iterazione//Esempio iterazione = 1 batch = 5000 = 5000
  293.                 $righeDaSaltareSeBatch $rrr $batch;
  294.             }
  295.             try {
  296.                 if (($handle fopen($root_path"r")) !== false) {
  297.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  298.                         /*if(!$em->isOpen()){
  299.                             $em = $em->create(
  300.                                 $em->getConnection(),
  301.                                 $em->getConfiguration()
  302.                             );
  303.                         }*/
  304.                         //Se attivata la funzionalità batch salto le righe che non devo importare
  305.                         if($righeDaSaltareSeBatch 0){
  306.                             if (($contatore $row) < $righeDaSaltareSeBatch){
  307.                                 $contatore++;
  308.                                 continue;
  309.                             }
  310.                         }
  311.                         if($righeDaSaltareSeBatch && ($contatore $row $righeDaSaltareSeBatch) > $batch ){
  312.                             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true"Batch completato: Iterazione: " strval($iterazione) . " --- Batch: " strval(($batch)) . " ( Da riga:" strval($righeDaSaltareSeBatch 1) . " a riga: " strval(($contatore $row)) . " )"null$collegamentoRnd'ImportazioneController''caricaArticoliDb');
  313.                             break;
  314.                         }
  315.                         if ($row == 0) {
  316.                             $row 1;
  317.                             continue;
  318.                         }
  319.                         //
  320.                         if ($queryEseguite >= $batch_size) {
  321.                             $contatore $contatore $row;
  322.                             $row 1;
  323.                             $queryEseguite 0;
  324.                             $em->flush();
  325.                             $em->clear();
  326.                         }
  327.                         $now = new \DateTime('now');
  328.                         /**
  329.                          * @var $cat1 Categorie
  330.                          * @var $cat2 Categorie
  331.                          * @var $cat3 Categorie
  332.                          * @var $cat4 Categorie
  333.                          * @var $cat5 Categorie
  334.                          * @var $articolo Articoli
  335.                          */
  336.                         $cat1 null;
  337.                         $cat2 null;
  338.                         $cat3 null;
  339.                         $cat4 null;
  340.                         $cat5 null;
  341.                         $articolo null;
  342.                         try {
  343.                             //categoria
  344.                             if ($data[9] != "") {
  345.                                 $categoriaPresente $this->servizi->ritornaCategoriaSeInserita(substr($data[9], 0255), '1');
  346.                                 if ($categoriaPresente != null) {
  347.                                     $categoriaPresente->setNome(substr($data[10], 0255));
  348.                                     $categoriaPresente->setOrdinamento(count($data) >= 33 ? ($data[32] != '' ? (int)$data[32] : 0) : 0);
  349.                                     if(count($data) >= 28 && $data[27] != '')
  350.                                         $categoriaPresente->setImmagine(count($data) >= 28 self::verificaPathImg($data[27]) : '');
  351.                                     $categoriaPresente->setDataModifica($now);
  352.                                     $categoriaPresente->setUtente(null);
  353.                                     $em->persist($categoriaPresente);
  354.                                     $cat1 $categoriaPresente;
  355.                                 } else {
  356.                                     $cat = new Categorie();
  357.                                     $cat->setNome(substr($data[10], 0255));
  358.                                     $cat->setCodice(substr($data[9], 0255));
  359.                                     $cat->setColonnaProvenienza("1");
  360.                                     $cat->setOrdinamento(count($data) >= 33 ? ($data[32] != '' ? (int)$data[32] : 0) : 0);
  361.                                     $cat->setDescrizione('');
  362.                                     if(count($data) >= 28 && $data[27] != '')
  363.                                         $cat->setImmagine(count($data) >= 28 self::verificaPathImg($data[27]) : '');
  364.                                     $cat->setDataCreazione($now);
  365.                                     $cat->setDataModifica($now);
  366.                                     $cat->setNomeUnivoco(substr($cat->getNome() . '-' $cat->getCodice(), 0255));
  367.                                     $cat->setUtente(null);
  368.                                     $cat->setAttivo(true);
  369.                                     $em->persist($cat);
  370.                                     if (!$bool_rigeneraAlbero)
  371.                                         $bool_rigeneraAlbero true;
  372.                                     $cat1 $cat;
  373.                                 }
  374.                                 $em->flush();
  375.                                 $queryEseguite++;
  376.                             }
  377.                             //riclassifica lib 1
  378.                             if ($data[11] != "") {
  379.                                 $categoriaPresente $this->servizi->ritornaCategoriaSeInserita(substr($data[11], 0255), '2');
  380.                                 if ($categoriaPresente != null) {
  381.                                     $categoriaPresente->setNome(substr($data[12], 0255));
  382.                                     if(count($data) >= 28 && $data[27] != '')
  383.                                         $categoriaPresente->setImmagine(count($data) >= 29 self::verificaPathImg($data[28]) : '');
  384.                                     $categoriaPresente->setDataModifica($now);
  385.                                     $categoriaPresente->setOrdinamento(count($data) >= 34 ? ($data[33] != '' ? (int)$data[33] : 0) : 0);
  386.                                     $categoriaPresente->setUtente(null);
  387.                                     $em->persist($categoriaPresente);
  388.                                     $cat2 $categoriaPresente;
  389.                                 } else {
  390.                                     $cat = new Categorie();
  391.                                     $cat->setNome(substr($data[12], 0255));
  392.                                     $cat->setCodice(substr($data[11], 0255));
  393.                                     $cat->setColonnaProvenienza("2");
  394.                                     $cat->setOrdinamento(count($data) >= 34 ? ($data[33] != '' ? (int)$data[33] : 0) : 0);
  395.                                     $cat->setDescrizione('');
  396.                                     if(count($data) >= 28 && $data[27] != '')
  397.                                         $cat->setImmagine(count($data) >= 29 self::verificaPathImg($data[28]) : '');
  398.                                     $cat->setDataCreazione($now);
  399.                                     $cat->setDataModifica($now);
  400.                                     $cat->setNomeUnivoco(substr($cat->getNome() . '-' $cat->getCodice(), 0255));
  401.                                     $cat->setUtente(null);
  402.                                     $cat->setAttivo(true);
  403.                                     $em->persist($cat);
  404.                                     if (!$bool_rigeneraAlbero)
  405.                                         $bool_rigeneraAlbero true;
  406.                                     $cat2 $cat;
  407.                                 }
  408.                                 $em->flush();
  409.                                 $queryEseguite++;
  410.                             }
  411.                             //riclassifica lib 2
  412.                             if ($data[13] != "") {
  413.                                 $categoriaPresente $this->servizi->ritornaCategoriaSeInserita(substr($data[13], 0255), '3');
  414.                                 if ($categoriaPresente != null) {
  415.                                     $categoriaPresente->setNome(substr($data[14], 0255));
  416.                                     $categoriaPresente->setDataModifica($now);
  417.                                     $categoriaPresente->setOrdinamento(count($data) >= 35 ? ($data[34] != '' ? (int)$data[34] : 0) : 0);
  418.                                     if(count($data) >= 28 && $data[27] != '')
  419.                                         $categoriaPresente->setImmagine(count($data) >= 30 self::verificaPathImg($data[29]) : '');
  420.                                     $categoriaPresente->setUtente(null);
  421.                                     $em->persist($categoriaPresente);
  422.                                     $cat3 $categoriaPresente;
  423.                                 } else {
  424.                                     $cat = new Categorie();
  425.                                     $cat->setNome(substr($data[14], 0255));
  426.                                     $cat->setCodice(substr($data[13], 0255));
  427.                                     $cat->setColonnaProvenienza("3");
  428.                                     $cat->setOrdinamento(count($data) >= 35 ? ($data[34] != '' ? (int)$data[34] : 0) : 0);
  429.                                     $cat->setDescrizione('');
  430.                                     if(count($data) >= 28 && $data[27] != '')
  431.                                         $cat->setImmagine(count($data) >= 30 self::verificaPathImg($data[29]) : '');
  432.                                     $cat->setDataCreazione($now);
  433.                                     $cat->setDataModifica($now);
  434.                                     $cat->setNomeUnivoco(substr($cat->getNome() . '-' $cat->getCodice(), 0255));
  435.                                     $cat->setUtente(null);
  436.                                     $cat->setAttivo(true);
  437.                                     $em->persist($cat);
  438.                                     if (!$bool_rigeneraAlbero)
  439.                                         $bool_rigeneraAlbero true;
  440.                                     $cat3 $cat;
  441.                                 }
  442.                                 $em->flush();
  443.                                 $queryEseguite++;
  444.                             }
  445.                             //riclassifica lib 3
  446.                             if ($data[15] != "") {
  447.                                 $categoriaPresente $this->servizi->ritornaCategoriaSeInserita(substr($data[15], 0255), '4');
  448.                                 if ($categoriaPresente != null) {
  449.                                     $categoriaPresente->setNome(substr($data[16], 0255));
  450.                                     $categoriaPresente->setDataModifica($now);
  451.                                     $categoriaPresente->setOrdinamento(count($data) >= 36 ? ($data[35] != '' ? (int)$data[35] : 0) : 0);
  452.                                     if(count($data) >= 28 && $data[27] != '')
  453.                                         $categoriaPresente->setImmagine(count($data) >= 31 self::verificaPathImg($data[30]) : '');
  454.                                     $categoriaPresente->setUtente(null);
  455.                                     $em->persist($categoriaPresente);
  456.                                     $cat4 $categoriaPresente;
  457.                                 } else {
  458.                                     $cat = new Categorie();
  459.                                     $cat->setNome(substr($data[16], 0255));
  460.                                     $cat->setCodice(substr($data[15], 0255));
  461.                                     $cat->setOrdinamento(count($data) >= 36 ? ($data[35] != '' ? (int)$data[35] : 0) : 0);
  462.                                     $cat->setColonnaProvenienza("4");
  463.                                     $cat->setDescrizione('');
  464.                                     if(count($data) >= 28 && $data[27] != '')
  465.                                         $cat->setImmagine(count($data) >= 31 self::verificaPathImg($data[30]) : '');
  466.                                     $cat->setDataCreazione($now);
  467.                                     $cat->setDataModifica($now);
  468.                                     $cat->setNomeUnivoco(substr($cat->getNome() . '-' $cat->getCodice(), 0255));
  469.                                     $cat->setUtente(null);
  470.                                     $cat->setAttivo(true);
  471.                                     $em->persist($cat);
  472.                                     if (!$bool_rigeneraAlbero)
  473.                                         $bool_rigeneraAlbero true;
  474.                                     $cat4 $cat;
  475.                                 }
  476.                                 $em->flush();
  477.                                 $queryEseguite++;
  478.                             }
  479.                             //riclassifica lib 4
  480.                             if (count($data) >= 26 && $data[25] != "") {
  481.                                 $categoriaPresente $this->servizi->ritornaCategoriaSeInserita(substr($data[25], 0255), '5');
  482.                                 if ($categoriaPresente != null) {
  483.                                     $categoriaPresente->setNome(substr($data[26], 0255));
  484.                                     $categoriaPresente->setDataModifica($now);
  485.                                     $categoriaPresente->setOrdinamento(count($data) >= 37 ? ($data[36] != '' ? (int)$data[36] : 0) : 0);
  486.                                     if(count($data) >= 28 && $data[27] != '')
  487.                                         $categoriaPresente->setImmagine(count($data) >= 32 self::verificaPathImg($data[31]) : '');
  488.                                     $categoriaPresente->setUtente(null);
  489.                                     $em->persist($categoriaPresente);
  490.                                     $cat4 $categoriaPresente;
  491.                                 } else {
  492.                                     $cat = new Categorie();
  493.                                     $cat->setNome(substr($data[26], 0255));
  494.                                     $cat->setCodice(substr($data[25], 0255));
  495.                                     $cat->setColonnaProvenienza("5");
  496.                                     $cat->setOrdinamento(count($data) >= 37 ? ($data[36] != '' ? (int)$data[36] : 0) : 0);
  497.                                     $cat->setDescrizione('');
  498.                                     if(count($data) >= 28 && $data[27] != '')
  499.                                         $cat->setImmagine(count($data) >= 32 self::verificaPathImg($data[31]) : '');
  500.                                     $cat->setDataCreazione($now);
  501.                                     $cat->setDataModifica($now);
  502.                                     $cat->setNomeUnivoco(substr($cat->getNome() . '-' $cat->getCodice(), 0255));
  503.                                     $cat->setUtente(null);
  504.                                     $cat->setAttivo(true);
  505.                                     $em->persist($cat);
  506.                                     if (!$bool_rigeneraAlbero)
  507.                                         $bool_rigeneraAlbero true;
  508.                                     $cat5 $cat;
  509.                                 }
  510.                                 $em->flush();
  511.                                 $queryEseguite++;
  512.                             }
  513.                             $unitaMisura $em->find(UnitaMisura::class,$data[8]);
  514.                             if (!$unitaMisura) {
  515.                                 $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true"Nuova unita di misura trovata: " $data[8], null);
  516.                                 $unitaMisura = new UnitaMisura();
  517.                                 $unitaMisura->setDataCreazione(new \DateTime());
  518.                                 $unitaMisura->setDataModifica(new \DateTime());
  519.                                 $unitaMisura->setAttivo(true);
  520.                                 $unitaMisura->setFattoreConversione(1);
  521.                                 $unitaMisura->setCodice($data[8]);
  522.                                 $unitaMisura->setNumeroDecimali(0);
  523.                                 $em->persist($unitaMisura);
  524.                                 $em->flush();
  525.                                 $unitaMisura $em->find(UnitaMisura::class,$data[8]);
  526.                                 $queryEseguite++;
  527.                             }
  528.                             if ($data[8] != $data[20]) { //Verifico se UM peso e UM sono diverse
  529.                                 $umPeso $em->find(UnitaMisura::class,$data[20]);
  530.                             } else {
  531.                                 $umPeso $unitaMisura;
  532.                             }
  533.                             if (!$umPeso && $data[20] != '') {
  534.                                 $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true"Nuova unita di misura peso trovata: " $data[20], null);
  535.                                 $umPeso = new UnitaMisura();
  536.                                 $umPeso->setDataCreazione(new \DateTime());
  537.                                 $umPeso->setDataModifica(new \DateTime());
  538.                                 $umPeso->setAttivo(true);
  539.                                 $umPeso->setFattoreConversione(1);
  540.                                 $umPeso->setCodice($data[20]);
  541.                                 $umPeso->setNumeroDecimali(3);
  542.                                 $em->persist($umPeso);
  543.                                 $em->flush();
  544.                                 $umPeso $em->find(UnitaMisura::class,$data[20]);
  545.                                 $queryEseguite++;
  546.                             }
  547.                             $articoloPresente $this->servizi->ritornaArticoloSeInserito(substr($data[0], 0255), substr($data[9], 0255));
  548.                             //articolo
  549.                             if ($articoloPresente != null) {
  550.                                 $articoloPresente->setNome(substr($data[1], 0255));
  551.                                 $articoloPresente->setDescrizione($data[3]);
  552.                                 $articoloPresente->setOrdinamento(count($data) >= 38 ? ($data[37] != '' ? (int)$data[37] : 0) : 0);
  553.                                 $articoloPresente->setDescrizioneBreve(substr($data[2], 0255));
  554.                                 $articoloPresente->setCodiceGruppoArticoli('');
  555.                                 $articoloPresente->setCodiceAliquota($data[6]);
  556.                                 $articoloPresente->setUmPeso($umPeso);
  557.                                 if($data[5] != '')
  558.                                     $articoloPresente->setImage(self::verificaPathImg($data[5]));
  559.                                 $pesoNet str_replace(",""."$data[21]);
  560.                                 if (!is_numeric($pesoNet) || $pesoNet 99999.9)
  561.                                     $pesoNet 0;
  562.                                 $pesoLord str_replace(",""."$data[22]);
  563.                                 if (!is_numeric($pesoLord) || $pesoLord 99999.9)
  564.                                     $pesoLord 0;
  565.                                 $articoloPresente->setPesoNetto($pesoNet);
  566.                                 $articoloPresente->setPesoLordo($pesoLord);
  567.                                 $articoloPresente->setValoreAliquota($data[7] == '' str_replace(",""."$data[7]));
  568.                                 $articoloPresente->setDataModifica($now);
  569.                                 $articoloPresente->setCodiceImportazione(count($data) >= 24 substr($data[23], 0255) : '');
  570.                                 $articoloPresente->setUtente(null);
  571.                                 $articoloPresente->setPrezzoSuRichiesta(count($data) >= 25 ? ($data[24] == '1' true false) : false);
  572.                                 $articoloPresente->setUm($unitaMisura);
  573.                                 $articoloPresente->setAttivo(true);
  574.                                 if(count($data) > 41)
  575.                                     $articoloPresente->setCodiceGruppoArticoli($data[41]);
  576.                                 $em->persist($articoloPresente);
  577.                                 $articolo $articoloPresente;
  578.                             } else {
  579.                                 $art = new Articoli();
  580.                                 $art->setCodice(substr($data[0], 0255));
  581.                                 $art->setMacroCategoria(substr($data[9], 0255));
  582.                                 $art->setNome(substr($data[1], 0255));
  583.                                 $art->setDescrizione($data[3]);
  584.                                 $art->setOrdinamento(count($data) >= 38 ? ($data[37] != '' ? (int)$data[37] : 0) : 0);
  585.                                 if($data[5] != '')
  586.                                     $art->setImage(self::verificaPathImg($data[5]));
  587.                                 $art->setDescrizioneBreve(substr($data[2], 0255));
  588.                                 $art->setCodiceGruppoArticoli('');
  589.                                 $art->setCodiceAliquota($data[6]);
  590.                                 $art->setValoreAliquota($data[7] == '' str_replace(",""."$data[7]));
  591.                                 $art->setUmPeso($umPeso);
  592.                                 $pesoNet str_replace(",""."$data[21]);
  593.                                 if (!is_numeric($pesoNet))
  594.                                     $pesoNet 0;
  595.                                 $pesoLord str_replace(",""."$data[22]);
  596.                                 if (!is_numeric($pesoLord))
  597.                                     $pesoLord 0;
  598.                                 $art->setPesoNetto($pesoNet);
  599.                                 $art->setPesoLordo($pesoLord);
  600.                                 $art->setUm($unitaMisura);
  601.                                 $art->setDataCreazione($now);
  602.                                 $art->setDataModifica($now);
  603.                                 $art->setCodiceImportazione(count($data) >= 24 $data[23] : '');
  604.                                 $art->setUtente(null);
  605.                                 $art->setTipologiePreimpostate(null);
  606.                                 $art->setUsaTipologiePreimpostate(false);
  607.                                 $art->setPrezzoSuRichiesta(count($data) >= 25 ? ($data[24] == '1' true false) : false);
  608.                                 $art->setAttivo(true);
  609.                                 if(count($data) > 41)
  610.                                     $art->setCodiceGruppoArticoli($data[41]);
  611.                                 $em->persist($art);
  612.                                 $articolo $art;
  613.                             }
  614.                             $queryEseguite++;
  615.                             if (!$unitaMisura) {
  616.                                 $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Unita di misura: ' $data[8] . ' non trovata per l\' articolo: ' $data[0] . '-' $data[1], null$collegamentoRnd'ImportazioneController''caricaArticoliDb');
  617.                             }
  618.                             //mappa_categorie_articoli
  619.                             if ($mappaCategoriaArticoliPresente $this->servizi->ritornaMappaCategoriaArticoliSeInserita($articolo$cat1$cat2$cat3$cat4$data[17])) {
  620.                                 if($data[18] == 'E'){
  621.                                     $mappaCategoriaArticoliPresente->setAttivo(false);
  622.                                 }else{
  623.                                     $mappaCategoriaArticoliPresente->setAttivo(true);
  624.                                 }
  625.                                 $mappaCategoriaArticoliPresente->setDataModifica($now);
  626.                                 $mappaCategoriaArticoliPresente->setUtente(null);
  627.                                 if(count($data) > 41)
  628.                                 {
  629.                                     if($data[42] != ""){
  630.                                         $mappaCategoriaArticoliPresente->setCodiceGruppoCategorie($data[42]);
  631.                                     }else{
  632.                                         $mappaCategoriaArticoliPresente->setCodiceGruppoCategorie(ServiziController::OttieniCodiceGruppoCategorieDaMappa($mappaCategoriaArticoliPresente));
  633.                                     }
  634.                                 }
  635.                                 else
  636.                                     $mappaCategoriaArticoliPresente->setCodiceGruppoCategorie(ServiziController::OttieniCodiceGruppoCategorieDaMappa($mappaCategoriaArticoliPresente));
  637.                                 $mappaCategoriaArticoliPresente->setOrdinamento(count($data) >= 39 ? ($data[38] != '' ? (int)$data[38] : 0) : 0);
  638.                                 $mappaCategoriaArticoliPresente->setDisponibile($data[19] == '' str_replace(",""."$data[19]));
  639.                                 $mappaCategoriaArticoliPresente->setOrdiniFornitori(count($data) >= 41 ? ($data[40] != '' str_replace(",""."$data[40]) : 0) : 0);
  640.                                 $em->persist($mappaCategoriaArticoliPresente);
  641.                             } else {
  642.                                 $mp = new MappaCategorieArticoli();
  643.                                 $mp->setCategoria1($cat1);
  644.                                 $mp->setCategoria2($cat2);
  645.                                 $mp->setCategoria3($cat3);
  646.                                 $mp->setCategoria4($cat4);
  647.                                 $mp->setCategoria5($cat5);
  648.                                 $mp->setUtente(null);
  649.                                 $mp->setMarca($data[17]);
  650.                                 $mp->setDataModifica($now);
  651.                                 $mp->setDataCreazione($now);
  652.                                 if(count($data) > 41)
  653.                                 {
  654.                                     if($data[42] != ""){
  655.                                         $mp->setCodiceGruppoCategorie($data[42]);
  656.                                     }else{
  657.                                         $mp->setCodiceGruppoCategorie(ServiziController::OttieniCodiceGruppoCategorieDaMappa($mp));
  658.                                     }
  659.                                 }
  660.                                 else
  661.                                     $mp->setCodiceGruppoCategorie(ServiziController::OttieniCodiceGruppoCategorieDaMappa($mp));
  662.                                 $mp->setOrdinamento(count($data) >= 39 ? ($data[38] != '' ? (int)$data[38] : 0) : 0);
  663.                                 $mp->setArticolo($articolo);
  664.                                 $mp->setVariantiPresenti(false);
  665.                                 $mp->setDisponibile($data[19] == '' str_replace(",""."$data[19]));
  666.                                 $mp->setAttivo(true);
  667.                                 $mp->setOrdiniFornitori(count($data) >= 41 ? ($data[40] != '' str_replace(",""."$data[40]) : 0) : 0);
  668.                                 $em->persist($mp);
  669.                                 $mappaCategoriaArticoliPresente $mp;
  670.                                 if (!$bool_rigeneraAlbero)
  671.                                     $bool_rigeneraAlbero true;
  672.                             }
  673.                             $queryEseguite++;
  674.                             $em->flush();
  675.                             if (count($data) >= 40 && $data[39] != ''){
  676.                                 $elenco = array();
  677.                                 if (strpos($data[39], ',') !== false){
  678.                                     $elenco explode(','$data[39]);
  679.                                 }else{
  680.                                     array_push($elenco$data[39]);
  681.                                 }
  682.                                 foreach ($elenco as $brc){
  683.                                     $barcode = new BarcodeArticoli();
  684.                                     $barcode->setBarcode($brc);
  685.                                     $barcode->setDataCreazione(new \DateTime());
  686.                                     $barcode->setDataModifica(new \DateTime());
  687.                                     $barcode->setMappaCategoriaArticoli($mappaCategoriaArticoliPresente);
  688.                                     $em->persist($barcode);
  689.                                 }
  690.                                 $em->flush();
  691.                             }
  692.                         }catch (Exception $ex2){
  693.                             if($em->isOpen()){
  694.                                 $em $em->resetManager();
  695.                             }
  696.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), $ex2->getTraceAsString(), false'Errore importazione (RIGA: ' . ($contatore $row) . ') : ' $ex2->getMessage() . '</br>' $ex2->getTraceAsString() . '</br>'null$collegamentoRnd'ImportazioneController''caricaArticoliDb');
  697.                             $errori .= ('Errore importazione (RIGA: ' . ($contatore $row) . ') : ' $ex2->getMessage() . '</br>' $ex2->getTraceAsString() . '</br>');
  698.                         }catch (\Exception|\Throwable $ex){
  699.                             if($em->isOpen()){
  700.                                 $em $em->resetManager();
  701.                             }
  702.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), $ex->getTraceAsString(), false'Errore importazione (RIGA: ' . ($contatore $row) . ') : ' $ex->getMessage() . '</br>' $ex->getTraceAsString() . '</br>'null$collegamentoRnd'ImportazioneController''caricaArticoliDb');
  703.                             $errori .= ('Errore importazione (RIGA: ' . ($contatore $row) . ') : ' $ex->getMessage() . '</br>' $ex->getTraceAsString() . '</br>');
  704.                         }
  705.                         $row++;
  706.                     }
  707.                 }else{
  708.                     $errori .= "Impossibile aprire il file!";
  709.                 }
  710.                 //$row = $contatore + $row;
  711.                 $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row '</br>Errori:' $errorinull$collegamentoRnd'ImportazioneController''caricaArticoliDb');
  712.                 $messaggioSupporto "";
  713.                 if ($bool_rigeneraAlbero)
  714.                     $this->generaAlberoAction($request"1");
  715.                 return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds \n ' $row '\n' $messaggioSupporto);
  716.             } catch (Exception $ex2) {
  717.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), $ex2->getTraceAsString(), false"Errore importazione articoli: " $ex2->getMessage(), null$collegamentoRnd'ImportazioneController''caricaArticoliDb');
  718.                 return new Response('Errore importazione (RIGA: ' . ($contatore $row) . ') : ' $ex2->getMessage() . '/n' $ex2->getTraceAsString());
  719.             } catch (\Exception|\Throwable $ex) {
  720.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), $ex->getTraceAsString(), false"Errore importazione articoli: " $ex->getMessage(), null$collegamentoRnd'ImportazioneController''caricaArticoliDb');
  721.                 return new Response('Errore importazione (RIGA: ' . ($contatore $row) . ') : ' $ex->getMessage() . '/n' $ex->getTraceAsString());
  722.             }
  723.             //return new Response("Importazione completata || " . $time_elapsed_secs = microtime(true) - $start . " || secondi");
  724.         } else {
  725.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false"Errore importazione articoli: ERRORE_PERMESSO"null$collegamentoRnd'ImportazioneController''caricaArticoliDb');
  726.             return new Response("ERRORE PERMESSO");
  727.         }
  728.     } //OK
  729.     /**
  730.      * @Route("/caricaCategorieAlbero/{svuota}/{dbg}/{batch}/{iterazione}", name="carica_categorie_albero", defaults={"svuota"="0", "dbg"="0", "batch"="0", "iterazione"="0"})
  731.      */
  732.     public function caricaCategorieAlbero(Request $request$svuota$dbg$batch$iterazione)
  733.     {
  734.         $collegamentoRnd $this->servizi->randomString2();
  735.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  736.             ini_set('max_execution_time', -1);
  737.             ini_set('memory_limit''4G');
  738.             if($dbg == '1'){
  739.                 ini_set('display_errors',1);
  740.                 error_reporting(E_ALL);
  741.             }
  742.             $start microtime(true);
  743.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  744.             $em $this->servizi->doctrine->getManager();
  745.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /caricaCategorieAlbero/' $svuota ' --- Inizio il caricamento delle categorie albero'null$collegamentoRnd'ImportazioneController''caricaCategorieAlbero');
  746.             $connection $this->servizi->doctrine->getConnection();
  747.             if($svuota == "1"){
  748.                 $em $this->servizi->doctrine->getManager();
  749.                 $connection->beginTransaction();
  750.                 try {
  751.                     $connection->query("SET FOREIGN_KEY_CHECKS=0;");
  752.                     $connection->executeUpdate("TRUNCATE `categorie_albero`;");
  753.                     $connection->executeUpdate("TRUNCATE `associazione_categorie_albero_mappa_categorie_articoli`;");
  754.                     $connection->query("SET FOREIGN_KEY_CHECKS=1;");
  755.                     $connection->commit();
  756.                 }catch (\Exception|\Throwable $ex){
  757.                     $this->servizi->DebuggaException($ex"Errore pulizia categorie albero DB"falsenull$collegamentoRnd'ImportazioneController''caricaCategorieAlbero');
  758.                 }
  759.             }
  760.             $bool_rigeneraAlbero false;
  761.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  762.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  763.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  764.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  765.             $root_path $pathFileBase "categorie_albero.csv";
  766.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  767.             $contatore 0;
  768.             $row 0;
  769.             $queryEseguite 0;
  770.             $batch_size 100;
  771.             $errori "";
  772.             $debugMessage "";
  773.             /*
  774.              * Index    File finale
  775.                     0    codice articolo
  776.                     1    codice_cat1
  777.                     2    codice_cat2
  778.                     3    codice_cat3
  779.                     4    codice_cat4
  780.                     5    codice_cat5
  781.                     6    marca
  782.                     7    codice_catAlbero1
  783.                     8    descrizione_catAlbero1
  784.                     9    immagine_catAlbero1
  785.                     10    ordine_catAlbero1
  786.                     11    prezzoARichiesta_catAlbero1
  787.                     12    codice_catAlbero2
  788.                     13    descrizione_catAlbero2
  789.                     14    immagine_catAlbero2
  790.                     15    ordine_catAlbero2
  791.                     16    prezzoARichiesta_catAlbero2
  792.                     17    codice_catAlbero3
  793.                     18    descrizione_catAlbero3
  794.                     19    immagine_catAlbero3
  795.                     20    ordine_catAlbero3
  796.                     21    prezzoARichiesta_catAlbero3
  797.                     22    codice_catAlbero4
  798.                     23    descrizione_catAlbero4
  799.                     24    immagine_catAlbero4
  800.                     25    ordine_catAlbero4
  801.                     26    prezzoARichiesta_catAlbero4
  802.                     27    codice_catAlbero5
  803.                     28    descrizione_catAlbero5
  804.                     29    immagine_catAlbero5
  805.                     30    ordine_catAlbero5
  806.                     31    prezzoARichiesta_catAlbero5
  807.                     32    operazione
  808.                     33    codice_catAlbero6
  809.                     34    descrizione_catAlbero6
  810.                     35    immagine_catAlbero6
  811.                     36    ordine_catAlbero6
  812.                     37    prezzoARichiesta_catAlbero6
  813.                     38    codice_catAlbero7
  814.                     39    descrizione_catAlbero7
  815.                     40    immagine_catAlbero7
  816.                     41    ordine_catAlbero7
  817.                     42    prezzoARichiesta_catAlbero7
  818.                     43    codice_catAlbero8
  819.                     44    descrizione_catAlbero8
  820.                     45    immagine_catAlbero8
  821.                     46    ordine_catAlbero8
  822.                     47    prezzoARichiesta_catAlbero8
  823.                     48    codice_catAlbero9
  824.                     49    descrizione_catAlbero9
  825.                     50    immagine_catAlbero9
  826.                     51    ordine_catAlbero9
  827.                     52    prezzoARichiesta_catAlbero9
  828.                     53    codice_catAlbero10
  829.                     54    descrizione_catAlbero10
  830.                     55    immagine_catAlbero10
  831.                     56    ordine_catAlbero10
  832.                     57    prezzoARichiesta_catAlbero10
  833.              */
  834.             $indici = array(
  835.                 "codiceArticolo" => 0,
  836.                 "codiceCat1" => 1,
  837.                 "codiceCat2" => 2,
  838.                 "codiceCat3" => 3,
  839.                 "codiceCat4" => 4,
  840.                 "codiceCat5" => 5,
  841.                 "marca" => 6,
  842.                 "codice_catAlbero1" => 7,
  843.                 "descrizione_catAlbero1" => 8,
  844.                 "immagine_catAlbero1" => 9,
  845.                 "ordine_catAlbero1" => 10,
  846.                 "prezzoARichiesta_catAlbero1" => 11,
  847.                 "codice_catAlbero2" => 12,
  848.                 "descrizione_catAlbero2" => 13,
  849.                 "immagine_catAlbero2" => 14,
  850.                 "ordine_catAlbero2" => 15,
  851.                 "prezzoARichiesta_catAlbero2" => 16,
  852.                 "codice_catAlbero3" => 17,
  853.                 "descrizione_catAlbero3" => 18,
  854.                 "immagine_catAlbero3" => 19,
  855.                 "ordine_catAlbero3" => 20,
  856.                 "prezzoARichiesta_catAlbero3" => 21,
  857.                 "codice_catAlbero4" => 22,
  858.                 "descrizione_catAlbero4" => 23,
  859.                 "immagine_catAlbero4" => 24,
  860.                 "ordine_catAlbero4" => 25,
  861.                 "prezzoARichiesta_catAlbero4" => 26,
  862.                 "codice_catAlbero5" => 27,
  863.                 "descrizione_catAlbero5" => 28,
  864.                 "immagine_catAlbero5" => 29,
  865.                 "ordine_catAlbero5" => 30,
  866.                 "prezzoARichiesta_catAlbero5" => 31,
  867.                 "operazione" => 32,
  868.                 "codice_catAlbero6" => 33,
  869.                 "descrizione_catAlbero6" => 34,
  870.                 "immagine_catAlbero6" => 35,
  871.                 "ordine_catAlbero6" => 36,
  872.                 "prezzoARichiesta_catAlbero6" => 37,
  873.                 "codice_catAlbero7" => 38,
  874.                 "descrizione_catAlbero7" => 39,
  875.                 "immagine_catAlbero7" => 40,
  876.                 "ordine_catAlbero7" => 41,
  877.                 "prezzoARichiesta_catAlbero7" => 42,
  878.                 "codice_catAlbero8" => 43,
  879.                 "descrizione_catAlbero8" => 44,
  880.                 "immagine_catAlbero8" => 45,
  881.                 "ordine_catAlbero8" => 46,
  882.                 "prezzoARichiesta_catAlbero8" => 47,
  883.                 "codice_catAlbero9" => 48,
  884.                 "descrizione_catAlbero9" => 49,
  885.                 "immagine_catAlbero9" => 50,
  886.                 "ordine_catAlbero9" => 51,
  887.                 "prezzoARichiesta_catAlbero9" => 52,
  888.                 "codice_catAlbero10" => 53,
  889.                 "descrizione_catAlbero10" => 54,
  890.                 "immagine_catAlbero10" => 55,
  891.                 "ordine_catAlbero10" => 56,
  892.                 "prezzoARichiesta_catAlbero10" => 57
  893.             );
  894.             $righeDaSaltareSeBatch 0;
  895.             if($batch != && $iterazione != 0){
  896.                 $rrr $batch $iterazione//Esempio iterazione = 1 batch = 5000 = 5000
  897.                 $righeDaSaltareSeBatch $rrr $batch;
  898.             }
  899.             try {
  900.                 $bool_rigeneraAlbero false;
  901.                 if (($handle fopen($root_path"r")) !== false) {
  902.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  903.                         /*if(!$em->isOpen()){
  904.                             $em = $em->create(
  905.                                 $em->getConnection(),
  906.                                 $em->getConfiguration()
  907.                             );
  908.                         }*/
  909.                         //Se attivata la funzionalità batch salto le righe che non devo importare
  910.                         if($righeDaSaltareSeBatch 0){
  911.                             if (($contatore $row) < $righeDaSaltareSeBatch){
  912.                                 $contatore++;
  913.                                 continue;
  914.                             }
  915.                         }
  916.                         if($righeDaSaltareSeBatch && ($contatore $row $righeDaSaltareSeBatch) > $batch ){
  917.                             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true"Batch completato: Iterazione: " strval($iterazione) . " --- Batch: " strval(($batch)) . " ( Da riga:" strval($righeDaSaltareSeBatch 1) . " a riga: " strval(($contatore $row)) . " )"null$collegamentoRnd"ImportazioneController""caricaCategorieAlbero");
  918.                             break;
  919.                         }
  920.                         if ($row == 0) {
  921.                             $row 1;
  922.                             continue;
  923.                         }
  924.                         //
  925.                         if ($queryEseguite >= $batch_size) {
  926.                             $contatore $contatore $row;
  927.                             $row 1;
  928.                             $queryEseguite 0;
  929.                             $em->flush();
  930.                             $em->clear();
  931.                         }
  932.                         $now = new \DateTime('now');
  933.                         /**
  934.                          * @var $cat1 Categorie
  935.                          * @var $cat2 Categorie
  936.                          * @var $cat3 Categorie
  937.                          * @var $cat4 Categorie
  938.                          * @var $cat5 Categorie
  939.                          * @var $articolo Articoli
  940.                          */
  941.                         $cat1 null;
  942.                         $cat2 null;
  943.                         $cat3 null;
  944.                         $cat4 null;
  945.                         $cat5 null;
  946.                         $articolo null;
  947.                         try {
  948.                             $cat1 $this->servizi->ritornaCategoriaSeInserita($data[$indici['codiceCat1']], '1');
  949.                             $cat2 $this->servizi->ritornaCategoriaSeInserita($data[$indici['codiceCat2']], '2');
  950.                             $cat3 $this->servizi->ritornaCategoriaSeInserita($data[$indici['codiceCat3']], '3');
  951.                             $cat4 $this->servizi->ritornaCategoriaSeInserita($data[$indici['codiceCat4']], '4');
  952.                             $cat5 $this->servizi->ritornaCategoriaSeInserita($data[$indici['codiceCat5']], '5');
  953.                             $articolo $this->servizi->ritornaArticoloSeInserito($data[$indici['codiceArticolo']]);
  954.                             if($dbg){
  955.                                 $debugMessage .= ('RIGA: ' . ($contatore $row) . ' - Articolo: ' . ($articolo $articolo->getId() : 'null') . ' -  Cat1: ' . ($cat1 $cat1->getId() : 'null') . ' - Cat2: ' . ($cat2 $cat2->getId() : 'null') . ' - Cat3: ' . ($cat3 $cat3->getId() : 'null') . ' - Cat4: ' . ($cat4 $cat4->getId() : 'null') . ' - Cat5: ' . ($cat5 $cat5->getId() : 'null') . '</br>');
  956.                             }
  957.                             //mappa_categorie_articoli
  958.                             if ($mappaCategoriaArticoliPresente $this->servizi->ritornaMappaCategoriaArticoliSeInserita($articolo$cat1$cat2$cat3$cat4$data[$indici['marca']], $cat5)) {
  959.                                 $categoriaAlbero1 null;
  960.                                 $categoriaAlbero2 null;
  961.                                 $categoriaAlbero3 null;
  962.                                 $categoriaAlbero4 null;
  963.                                 $categoriaAlbero5 null;
  964.                                 $categoriaAlbero6 null;
  965.                                 $categoriaAlbero7 null;
  966.                                 $categoriaAlbero8 null;
  967.                                 $categoriaAlbero9 null;
  968.                                 $categoriaAlbero10 null;
  969.                                 $associazioneCatAlberoMappaCatArt null;
  970.                                 if ($data[$indici["codice_catAlbero1"]] != ''){
  971.                                     $categoriaAlbero1 $this->servizi->ritornaCategoriaAlberoSeInserita($data[$indici["codice_catAlbero1"]], '1');
  972.                                     if(!$categoriaAlbero1){
  973.                                         $categoriaAlbero1 = new CategorieAlbero();
  974.                                         $categoriaAlbero1->setCodice($data[$indici['codice_catAlbero1']]);
  975.                                         $categoriaAlbero1->setCodiceOriginale($data[$indici['codice_catAlbero1']]);
  976.                                         $categoriaAlbero1->setColonnaProvenienza("1");
  977.                                         $categoriaAlbero1->setAttivo(true);
  978.                                         $categoriaAlbero1->setDataCreazione(new \DateTime());
  979.                                     }
  980.                                     $categoriaAlbero1->setNome($data[$indici['descrizione_catAlbero1']]);
  981.                                     $categoriaAlbero1->setNomeUnivoco(substr($categoriaAlbero1->getNome() . '-' $categoriaAlbero1->getCodice(), 0255));
  982.                                     $categoriaAlbero1->setDescrizione($data[$indici['descrizione_catAlbero1']]);
  983.                                     $categoriaAlbero1->setOrdinamento(self::verificaInt($data[$indici['ordine_catAlbero1']]));
  984.                                     if($data[$indici['immagine_catAlbero1']] != '')
  985.                                         $categoriaAlbero1->setImmagine($data[$indici['immagine_catAlbero1']]);
  986.                                     $categoriaAlbero1->setPrezzoSuRichiesta(self::verificaBool($data[$indici['prezzoARichiesta_catAlbero1']]));
  987.                                     $categoriaAlbero1->setDataModifica(new \DateTime());
  988.                                     $em->persist($categoriaAlbero1);
  989.                                     $em->flush();
  990.                                     $categoriaAlbero1 $this->servizi->ritornaCategoriaAlberoSeInserita($data[$indici["codice_catAlbero1"]], '1');
  991.                                 }
  992.                                 if ($data[$indici["codice_catAlbero2"]] != ''){
  993.                                     $categoriaAlbero2 $this->servizi->ritornaCategoriaAlberoSeInserita($data[$indici["codice_catAlbero2"]], '2');
  994.                                     if(!$categoriaAlbero2){
  995.                                         $categoriaAlbero2 = new CategorieAlbero();
  996.                                         $categoriaAlbero2->setCodice($data[$indici['codice_catAlbero2']]);
  997.                                         $categoriaAlbero2->setCodiceOriginale($data[$indici['codice_catAlbero2']]);
  998.                                         $categoriaAlbero2->setColonnaProvenienza("2");
  999.                                         $categoriaAlbero2->setAttivo(true);
  1000.                                         $categoriaAlbero2->setDataCreazione(new \DateTime());
  1001.                                     }
  1002.                                     $categoriaAlbero2->setNome($data[$indici['descrizione_catAlbero2']]);
  1003.                                     $categoriaAlbero2->setNomeUnivoco(substr($categoriaAlbero2->getNome() . '-' $categoriaAlbero2->getCodice(), 0255));
  1004.                                     $categoriaAlbero2->setDescrizione($data[$indici['descrizione_catAlbero2']]);
  1005.                                     $categoriaAlbero2->setOrdinamento(self::verificaInt($data[$indici['ordine_catAlbero2']]));
  1006.                                     if($data[$indici['immagine_catAlbero2']] != '')
  1007.                                         $categoriaAlbero2->setImmagine($data[$indici['immagine_catAlbero2']]);
  1008.                                     $categoriaAlbero2->setPrezzoSuRichiesta(self::verificaBool($data[$indici['prezzoARichiesta_catAlbero2']]));
  1009.                                     $categoriaAlbero2->setDataModifica(new \DateTime());
  1010.                                     $em->persist($categoriaAlbero2);
  1011.                                     $em->flush();
  1012.                                     $categoriaAlbero2 $this->servizi->ritornaCategoriaAlberoSeInserita($data[$indici["codice_catAlbero2"]], '2');
  1013.                                 }
  1014.                                 if ($data[$indici["codice_catAlbero3"]] != ''){
  1015.                                     $categoriaAlbero3 $this->servizi->ritornaCategoriaAlberoSeInserita($data[$indici["codice_catAlbero3"]], '3');
  1016.                                     if(!$categoriaAlbero3){
  1017.                                         $categoriaAlbero3 = new CategorieAlbero();
  1018.                                         $categoriaAlbero3->setCodice($data[$indici['codice_catAlbero3']]);
  1019.                                         $categoriaAlbero3->setCodiceOriginale($data[$indici['codice_catAlbero3']]);
  1020.                                         $categoriaAlbero3->setColonnaProvenienza("3");
  1021.                                         $categoriaAlbero3->setAttivo(true);
  1022.                                         $categoriaAlbero3->setDataCreazione(new \DateTime());
  1023.                                     }
  1024.                                     $categoriaAlbero3->setNome($data[$indici['descrizione_catAlbero3']]);
  1025.                                     $categoriaAlbero3->setNomeUnivoco(substr($categoriaAlbero3->getNome() . '-' $categoriaAlbero3->getCodice(), 0255));
  1026.                                     $categoriaAlbero3->setDescrizione($data[$indici['descrizione_catAlbero3']]);
  1027.                                     $categoriaAlbero3->setOrdinamento(self::verificaInt($data[$indici['ordine_catAlbero3']]));
  1028.                                     if($data[$indici['immagine_catAlbero3']] != '')
  1029.                                         $categoriaAlbero3->setImmagine($data[$indici['immagine_catAlbero3']]);
  1030.                                     $categoriaAlbero3->setPrezzoSuRichiesta(self::verificaBool($data[$indici['prezzoARichiesta_catAlbero3']]));
  1031.                                     $categoriaAlbero3->setDataModifica(new \DateTime());
  1032.                                     $em->persist($categoriaAlbero3);
  1033.                                     $em->flush();
  1034.                                     $categoriaAlbero3 $this->servizi->ritornaCategoriaAlberoSeInserita($data[$indici["codice_catAlbero3"]], '3');
  1035.                                 }
  1036.                                 if ($data[$indici["codice_catAlbero4"]] != ''){
  1037.                                     $categoriaAlbero4 $this->servizi->ritornaCategoriaAlberoSeInserita($data[$indici["codice_catAlbero4"]], '4');
  1038.                                     if(!$categoriaAlbero4){
  1039.                                         $categoriaAlbero4 = new CategorieAlbero();
  1040.                                         $categoriaAlbero4->setCodice($data[$indici['codice_catAlbero4']]);
  1041.                                         $categoriaAlbero4->setCodiceOriginale($data[$indici['codice_catAlbero4']]);
  1042.                                         $categoriaAlbero4->setColonnaProvenienza("4");
  1043.                                         $categoriaAlbero4->setAttivo(true);
  1044.                                         $categoriaAlbero4->setDataCreazione(new \DateTime());
  1045.                                     }
  1046.                                     $categoriaAlbero4->setNome($data[$indici['descrizione_catAlbero4']]);
  1047.                                     $categoriaAlbero4->setNomeUnivoco(substr($categoriaAlbero4->getNome() . '-' $categoriaAlbero4->getCodice(), 0255));
  1048.                                     $categoriaAlbero4->setDescrizione($data[$indici['descrizione_catAlbero4']]);
  1049.                                     $categoriaAlbero4->setOrdinamento(self::verificaInt($data[$indici['ordine_catAlbero4']]));
  1050.                                     if($data[$indici['immagine_catAlbero4']] != '')
  1051.                                         $categoriaAlbero4->setImmagine($data[$indici['immagine_catAlbero4']]);
  1052.                                     $categoriaAlbero4->setPrezzoSuRichiesta(self::verificaBool($data[$indici['prezzoARichiesta_catAlbero4']]));
  1053.                                     $categoriaAlbero4->setDataModifica(new \DateTime());
  1054.                                     $em->persist($categoriaAlbero4);
  1055.                                     $em->flush();
  1056.                                     $categoriaAlbero4 $this->servizi->ritornaCategoriaAlberoSeInserita($data[$indici["codice_catAlbero4"]], '4');
  1057.                                 }
  1058.                                 if ($data[$indici["codice_catAlbero5"]] != ''){
  1059.                                     $categoriaAlbero5 $this->servizi->ritornaCategoriaAlberoSeInserita($data[$indici["codice_catAlbero5"]], '5');
  1060.                                     if(!$categoriaAlbero5){
  1061.                                         $categoriaAlbero5 = new CategorieAlbero();
  1062.                                         $categoriaAlbero5->setCodice($data[$indici['codice_catAlbero5']]);
  1063.                                         $categoriaAlbero5->setCodiceOriginale($data[$indici['codice_catAlbero5']]);
  1064.                                         $categoriaAlbero5->setColonnaProvenienza("5");
  1065.                                         $categoriaAlbero5->setAttivo(true);
  1066.                                         $categoriaAlbero5->setDataCreazione(new \DateTime());
  1067.                                     }
  1068.                                     $categoriaAlbero5->setNome($data[$indici['descrizione_catAlbero5']]);
  1069.                                     $categoriaAlbero5->setNomeUnivoco(substr($categoriaAlbero5->getNome() . '-' $categoriaAlbero5->getCodice(), 0255));
  1070.                                     $categoriaAlbero5->setDescrizione($data[$indici['descrizione_catAlbero5']]);
  1071.                                     $categoriaAlbero5->setOrdinamento(self::verificaInt($data[$indici['ordine_catAlbero5']]));
  1072.                                     if($data[$indici['immagine_catAlbero5']] != '')
  1073.                                         $categoriaAlbero5->setImmagine($data[$indici['immagine_catAlbero5']]);
  1074.                                     $categoriaAlbero5->setPrezzoSuRichiesta(self::verificaBool($data[$indici['prezzoARichiesta_catAlbero5']]));
  1075.                                     $categoriaAlbero5->setDataModifica(new \DateTime());
  1076.                                     $em->persist($categoriaAlbero5);
  1077.                                     $em->flush();
  1078.                                     $categoriaAlbero5 $this->servizi->ritornaCategoriaAlberoSeInserita($data[$indici["codice_catAlbero5"]], '5');
  1079.                                 }
  1080.                                 if ($data[$indici["codice_catAlbero6"]] != ''){
  1081.                                     $categoriaAlbero6 $this->servizi->ritornaCategoriaAlberoSeInserita($data[$indici["codice_catAlbero6"]], '6');
  1082.                                     if(!$categoriaAlbero6){
  1083.                                         $categoriaAlbero6 = new CategorieAlbero();
  1084.                                         $categoriaAlbero6->setCodice($data[$indici['codice_catAlbero6']]);
  1085.                                         $categoriaAlbero6->setCodiceOriginale($data[$indici['codice_catAlbero6']]);
  1086.                                         $categoriaAlbero6->setColonnaProvenienza("6");
  1087.                                         $categoriaAlbero6->setAttivo(true);
  1088.                                         $categoriaAlbero6->setDataCreazione(new \DateTime());
  1089.                                     }
  1090.                                     $categoriaAlbero6->setNome($data[$indici['descrizione_catAlbero6']]);
  1091.                                     $categoriaAlbero6->setNomeUnivoco(substr($categoriaAlbero6->getNome() . '-' $categoriaAlbero6->getCodice(), 0255));
  1092.                                     $categoriaAlbero6->setDescrizione($data[$indici['descrizione_catAlbero6']]);
  1093.                                     $categoriaAlbero6->setOrdinamento(self::verificaInt($data[$indici['ordine_catAlbero6']]));
  1094.                                     if($data[$indici['immagine_catAlbero6']] != '')
  1095.                                         $categoriaAlbero6->setImmagine($data[$indici['immagine_catAlbero6']]);
  1096.                                     $categoriaAlbero6->setPrezzoSuRichiesta(self::verificaBool($data[$indici['prezzoARichiesta_catAlbero6']]));
  1097.                                     $categoriaAlbero6->setDataModifica(new \DateTime());
  1098.                                     $em->persist($categoriaAlbero6);
  1099.                                     $em->flush();
  1100.                                     $categoriaAlbero6 $this->servizi->ritornaCategoriaAlberoSeInserita($data[$indici["codice_catAlbero6"]], '6');
  1101.                                 }
  1102.                                 if ($data[$indici["codice_catAlbero7"]] != ''){
  1103.                                     $categoriaAlbero7 $this->servizi->ritornaCategoriaAlberoSeInserita($data[$indici["codice_catAlbero7"]], '7');
  1104.                                     if(!$categoriaAlbero7){
  1105.                                         $categoriaAlbero7 = new CategorieAlbero();
  1106.                                         $categoriaAlbero7->setCodice($data[$indici['codice_catAlbero7']]);
  1107.                                         $categoriaAlbero7->setCodiceOriginale($data[$indici['codice_catAlbero7']]);
  1108.                                         $categoriaAlbero7->setColonnaProvenienza("7");
  1109.                                         $categoriaAlbero7->setAttivo(true);
  1110.                                         $categoriaAlbero7->setDataCreazione(new \DateTime());
  1111.                                     }
  1112.                                     $categoriaAlbero7->setNome($data[$indici['descrizione_catAlbero7']]);
  1113.                                     $categoriaAlbero7->setNomeUnivoco(substr($categoriaAlbero7->getNome() . '-' $categoriaAlbero7->getCodice(), 0255));
  1114.                                     $categoriaAlbero7->setDescrizione($data[$indici['descrizione_catAlbero7']]);
  1115.                                     $categoriaAlbero7->setOrdinamento(self::verificaInt($data[$indici['ordine_catAlbero7']]));
  1116.                                     if($data[$indici['immagine_catAlbero7']] != '')
  1117.                                         $categoriaAlbero7->setImmagine($data[$indici['immagine_catAlbero7']]);
  1118.                                     $categoriaAlbero7->setPrezzoSuRichiesta(self::verificaBool($data[$indici['prezzoARichiesta_catAlbero7']]));
  1119.                                     $categoriaAlbero7->setDataModifica(new \DateTime());
  1120.                                     $em->persist($categoriaAlbero7);
  1121.                                     $em->flush();
  1122.                                     $categoriaAlbero7 $this->servizi->ritornaCategoriaAlberoSeInserita($data[$indici["codice_catAlbero7"]], '7');
  1123.                                 }
  1124.                                 if ($data[$indici["codice_catAlbero8"]] != ''){
  1125.                                     $categoriaAlbero8 $this->servizi->ritornaCategoriaAlberoSeInserita($data[$indici["codice_catAlbero8"]], '8');
  1126.                                     if(!$categoriaAlbero8){
  1127.                                         $categoriaAlbero8 = new CategorieAlbero();
  1128.                                         $categoriaAlbero8->setCodice($data[$indici['codice_catAlbero8']]);
  1129.                                         $categoriaAlbero8->setCodiceOriginale($data[$indici['codice_catAlbero8']]);
  1130.                                         $categoriaAlbero8->setColonnaProvenienza("8");
  1131.                                         $categoriaAlbero8->setAttivo(true);
  1132.                                         $categoriaAlbero8->setDataCreazione(new \DateTime());
  1133.                                     }
  1134.                                     $categoriaAlbero8->setNome($data[$indici['descrizione_catAlbero8']]);
  1135.                                     $categoriaAlbero8->setNomeUnivoco(substr($categoriaAlbero8->getNome() . '-' $categoriaAlbero8->getCodice(), 0255));
  1136.                                     $categoriaAlbero8->setDescrizione($data[$indici['descrizione_catAlbero8']]);
  1137.                                     $categoriaAlbero8->setOrdinamento(self::verificaInt($data[$indici['ordine_catAlbero8']]));
  1138.                                     if($data[$indici['immagine_catAlbero8']] != '')
  1139.                                         $categoriaAlbero8->setImmagine($data[$indici['immagine_catAlbero8']]);
  1140.                                     $categoriaAlbero8->setPrezzoSuRichiesta(self::verificaBool($data[$indici['prezzoARichiesta_catAlbero8']]));
  1141.                                     $categoriaAlbero8->setDataModifica(new \DateTime());
  1142.                                     $em->persist($categoriaAlbero8);
  1143.                                     $em->flush();
  1144.                                     $categoriaAlbero8 $this->servizi->ritornaCategoriaAlberoSeInserita($data[$indici["codice_catAlbero8"]], '8');
  1145.                                 }
  1146.                                 if ($data[$indici["codice_catAlbero9"]] != ''){
  1147.                                     $categoriaAlbero9 $this->servizi->ritornaCategoriaAlberoSeInserita($data[$indici["codice_catAlbero9"]], '9');
  1148.                                     if(!$categoriaAlbero9){
  1149.                                         $categoriaAlbero9 = new CategorieAlbero();
  1150.                                         $categoriaAlbero9->setCodice($data[$indici['codice_catAlbero9']]);
  1151.                                         $categoriaAlbero9->setCodiceOriginale($data[$indici['codice_catAlbero9']]);
  1152.                                         $categoriaAlbero9->setColonnaProvenienza("9");
  1153.                                         $categoriaAlbero9->setAttivo(true);
  1154.                                         $categoriaAlbero9->setDataCreazione(new \DateTime());
  1155.                                     }
  1156.                                     $categoriaAlbero9->setNome($data[$indici['descrizione_catAlbero9']]);
  1157.                                     $categoriaAlbero9->setNomeUnivoco(substr($categoriaAlbero9->getNome() . '-' $categoriaAlbero9->getCodice(), 0255));
  1158.                                     $categoriaAlbero9->setDescrizione($data[$indici['descrizione_catAlbero9']]);
  1159.                                     $categoriaAlbero9->setOrdinamento(self::verificaInt($data[$indici['ordine_catAlbero9']]));
  1160.                                     if($data[$indici['immagine_catAlbero9']] != '')
  1161.                                         $categoriaAlbero9->setImmagine($data[$indici['immagine_catAlbero9']]);
  1162.                                     $categoriaAlbero9->setPrezzoSuRichiesta(self::verificaBool($data[$indici['prezzoARichiesta_catAlbero9']]));
  1163.                                     $categoriaAlbero9->setDataModifica(new \DateTime());
  1164.                                     $em->persist($categoriaAlbero9);
  1165.                                     $em->flush();
  1166.                                     $categoriaAlbero9 $this->servizi->ritornaCategoriaAlberoSeInserita($data[$indici["codice_catAlbero9"]], '9');
  1167.                                 }
  1168.                                 if ($data[$indici["codice_catAlbero10"]] != ''){
  1169.                                     $categoriaAlbero10 $this->servizi->ritornaCategoriaAlberoSeInserita($data[$indici["codice_catAlbero10"]], '10');
  1170.                                     if(!$categoriaAlbero10){
  1171.                                         $categoriaAlbero10 = new CategorieAlbero();
  1172.                                         $categoriaAlbero10->setCodice($data[$indici['codice_catAlbero10']]);
  1173.                                         $categoriaAlbero10->setCodiceOriginale($data[$indici['codice_catAlbero10']]);
  1174.                                         $categoriaAlbero10->setColonnaProvenienza("10");
  1175.                                         $categoriaAlbero10->setAttivo(true);
  1176.                                         $categoriaAlbero10->setDataCreazione(new \DateTime());
  1177.                                     }
  1178.                                     $categoriaAlbero10->setNome($data[$indici['descrizione_catAlbero10']]);
  1179.                                     $categoriaAlbero10->setNomeUnivoco(substr($categoriaAlbero10->getNome() . '-' $categoriaAlbero10->getCodice(), 0255));
  1180.                                     $categoriaAlbero10->setDescrizione($data[$indici['descrizione_catAlbero10']]);
  1181.                                     $categoriaAlbero10->setOrdinamento(self::verificaInt($data[$indici['ordine_catAlbero10']]));
  1182.                                     if($data[$indici['immagine_catAlbero10']] != '')
  1183.                                         $categoriaAlbero10->setImmagine($data[$indici['immagine_catAlbero10']]);
  1184.                                     $categoriaAlbero10->setPrezzoSuRichiesta(self::verificaBool($data[$indici['prezzoARichiesta_catAlbero10']]));
  1185.                                     $categoriaAlbero10->setDataModifica(new \DateTime());
  1186.                                     $em->persist($categoriaAlbero10);
  1187.                                     $em->flush();
  1188.                                     $categoriaAlbero10 $this->servizi->ritornaCategoriaAlberoSeInserita($data[$indici["codice_catAlbero10"]], '10');
  1189.                                 }
  1190.                                 $associazioneCatAlberoMappaCatArt $this->servizi->ritornaAssociazioneCategorieAlberoMappaCategoriaArticoliSeInserita($mappaCategoriaArticoliPresente$categoriaAlbero1$categoriaAlbero2$categoriaAlbero3$categoriaAlbero4$categoriaAlbero5$categoriaAlbero6$categoriaAlbero7$categoriaAlbero8$categoriaAlbero9$categoriaAlbero10);
  1191.                                 if($data[$indici["operazione"]] == 'E'){
  1192.                                     $em->remove($associazioneCatAlberoMappaCatArt);
  1193.                                 }else{
  1194.                                     if (!$associazioneCatAlberoMappaCatArt){
  1195.                                         $associazioneCatAlberoMappaCatArt = new AssociazioneCategorieAlberoMappaCategorieArticoli();
  1196.                                         $associazioneCatAlberoMappaCatArt->setMappaCategoriaArticolo($mappaCategoriaArticoliPresente);
  1197.                                         $associazioneCatAlberoMappaCatArt->setCategoriaAlbero1($categoriaAlbero1);
  1198.                                         $associazioneCatAlberoMappaCatArt->setCategoriaAlbero2($categoriaAlbero2);
  1199.                                         $associazioneCatAlberoMappaCatArt->setCategoriaAlbero3($categoriaAlbero3);
  1200.                                         $associazioneCatAlberoMappaCatArt->setCategoriaAlbero4($categoriaAlbero4);
  1201.                                         $associazioneCatAlberoMappaCatArt->setCategoriaAlbero5($categoriaAlbero5);
  1202.                                         $associazioneCatAlberoMappaCatArt->setCategoriaAlbero6($categoriaAlbero6);
  1203.                                         $associazioneCatAlberoMappaCatArt->setCategoriaAlbero7($categoriaAlbero7);
  1204.                                         $associazioneCatAlberoMappaCatArt->setCategoriaAlbero8($categoriaAlbero8);
  1205.                                         $associazioneCatAlberoMappaCatArt->setCategoriaAlbero9($categoriaAlbero9);
  1206.                                         $associazioneCatAlberoMappaCatArt->setCategoriaAlbero10($categoriaAlbero10);
  1207.                                         $associazioneCatAlberoMappaCatArt->setArticolo($mappaCategoriaArticoliPresente $mappaCategoriaArticoliPresente->getArticolo() : null);
  1208.                                         $associazioneCatAlberoMappaCatArt->setDataModifica(new \DateTime());
  1209.                                         $associazioneCatAlberoMappaCatArt->setDataCreazione(new \DateTime());
  1210.                                         $em->persist($associazioneCatAlberoMappaCatArt);
  1211.                                         $bool_rigeneraAlbero true;
  1212.                                     }
  1213.                                     $em->persist($mappaCategoriaArticoliPresente);
  1214.                                 }
  1215.                             } else {
  1216.                                 $this->ScriviRegistroAttivita($em$request->getClientIp(), ''false'Errore importazione categorie albero (RIGA: ' . ($contatore $row) . ') : Mappa categoria articoli non trovata </br>'null$collegamentoRnd'ImportazioneController''caricaCategorieAlbero');
  1217.                                 $errori .= ('Errore importazione categorie albero (RIGA: ' . ($contatore $row) . ') : Mappa categoria articoli non trovata </br>');
  1218.                             }
  1219.                             $queryEseguite++;
  1220.                             $em->flush();
  1221.                         }catch (Exception $ex2){
  1222.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), $ex2->getTraceAsString(), false'Errore importazione categorie albero (RIGA: ' . ($contatore $row) . ') : ' $ex2->getMessage() . '</br>' $ex2->getTraceAsString() . '</br>'null$collegamentoRnd'ImportazioneController''caricaCategorieAlbero');
  1223.                             $errori .= ('Errore importazione categorie albero (RIGA: ' . ($contatore $row) . ') : ' $ex2->getMessage() . '</br>' $ex2->getTraceAsString() . '</br>');
  1224.                         }catch (\Exception|\Throwable $ex){
  1225.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), $ex->getTraceAsString(), false'Errore importazione categorie albero (RIGA: ' . ($contatore $row) . ') : ' $ex->getMessage() . '</br>' $ex->getTraceAsString() . '</br>'null$collegamentoRnd'ImportazioneController''caricaCategorieAlbero');
  1226.                             $errori .= ('Errore importazione categorie albero (RIGA: ' . ($contatore $row) . ') : ' $ex->getMessage() . '</br>' $ex->getTraceAsString() . '</br>');
  1227.                         }
  1228.                         $row++;
  1229.                     }
  1230.                 }else{
  1231.                     $errori .= "Impossibile aprire il file!";
  1232.                 }
  1233.                 //$row = $contatore + $row;
  1234.                 $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row '</br>Errori:' $errorinull$collegamentoRnd'ImportazioneController''caricaCategorieAlbero');
  1235.                 $messaggioSupporto "";
  1236.                 if ($bool_rigeneraAlbero)
  1237.                     $this->generaAlberoAction($request"1");
  1238.                 return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds </br> ' $row '</br>' $messaggioSupporto '</br>Errori:' $errori . ($dbg '</br>Debug: ' $debugMessage  ''));
  1239.             } catch (Exception $ex2) {
  1240.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), $ex2->getTraceAsString(), false"Errore importazione categorie albero: " $ex2->getMessage(), null$collegamentoRnd'ImportazioneController''caricaCategorieAlbero');
  1241.                 return new Response('Errore importazione (RIGA: ' . ($contatore $row) . ') : ' $ex2->getMessage() . '/n' $ex2->getTraceAsString());
  1242.             } catch (\Exception|\Throwable $ex) {
  1243.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), $ex->getTraceAsString(), false"Errore importazione categorie albero: " $ex->getMessage(), null$collegamentoRnd'ImportazioneController''caricaCategorieAlbero');
  1244.                 return new Response('Errore importazione (RIGA: ' . ($contatore $row) . ') : ' $ex->getMessage() . '/n' $ex->getTraceAsString());
  1245.             }
  1246.             //return new Response("Importazione completata || " . $time_elapsed_secs = microtime(true) - $start . " || secondi");
  1247.         } else {
  1248.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false"Errore importazione categorie albero: ERRORE_PERMESSO"null$collegamentoRnd'ImportazioneController''caricaCategorieAlbero');
  1249.             return new Response("ERRORE PERMESSO");
  1250.         }
  1251.     }
  1252.     /**
  1253.      * @Route("/generaIndicizzazioneAttributi", name="genera_indicizzazione_attributi")
  1254.      */
  1255.     public function generaIndicizzazioneAttributi(Request $request$chiamataInternaSenzaRisposta false){
  1256.         $collegamentoRnd $this->servizi->randomString2();
  1257.         try{
  1258.             $start microtime(true);
  1259.             ini_set('max_execution_time'2400);
  1260.             ini_set('memory_limit''4G');
  1261.             $usaCategorieAlbero $this->imp->ritornaImpostazioneDaNome('UtilizzaCategorieAlberoPerGenerazione');
  1262.             $connection $this->servizi->doctrine->getConnection();
  1263.             $connection->beginTransaction();
  1264.             $connection->query("SET FOREIGN_KEY_CHECKS=0;");
  1265.             $connection->executeUpdate("TRUNCATE `attributi_indicizzazione`;");
  1266.             $connection->query("SET FOREIGN_KEY_CHECKS=1; ");
  1267.             if($usaCategorieAlbero == '1') {
  1268.                 $sql 'INSERT INTO `attributi_indicizzazione`(`attributo_id`, `categoria_albero1_id`, `categoria_albero2_id`, `categoria_albero3_id`, `categoria_albero4_id`, `categoria_albero5_id`, `data_creazione`, `data_modifica`)  
  1269.             SELECT DISTINCT 
  1270.                         att.id,
  1271.                          albero.categoria_albero1_id, 
  1272.                         albero.categoria_albero2_id, 
  1273.                         albero.categoria_albero3_id, 
  1274.                         albero.categoria_albero4_id, 
  1275.                         albero.categoria_albero5_id, 
  1276.                         NOW(), 
  1277.                         NOW()
  1278.                     FROM `associazione_attributi` assAtt
  1279.                         LEFT JOIN attributi att ON att.id = assAtt.attributo_id
  1280.                         LEFT JOIN mappa_categorie_articoli mappa ON mappa.id = assAtt.mappa_categoria_articolo_id
  1281.                         LEFT JOIN associazione_categorie_albero_mappa_categorie_articoli albero ON albero.articolo_id = mappa.articolo_id; ';
  1282.             }else{
  1283.                 $sql 'INSERT INTO `attributi_indicizzazione`(`attributo_id`, `categoria1_id`, `categoria2_id`, `categoria3_id`, `categoria4_id`, `categoria5_id`, `data_creazione`, `data_modifica`)  
  1284.             SELECT DISTINCT 
  1285.                         att.id,
  1286.                         mappa.categoria1_id, 
  1287.                         mappa.categoria2_id, 
  1288.                         mappa.categoria3_id, 
  1289.                         mappa.categoria4_id,
  1290.                         mappa.categoria5_id,
  1291.                         NOW(), 
  1292.                         NOW()
  1293.                     FROM `associazione_attributi` assAtt
  1294.                         LEFT JOIN attributi att ON att.id = assAtt.attributo_id
  1295.                         LEFT JOIN mappa_categorie_articoli mappa ON mappa.id = assAtt.mappa_categoria_articolo_id; ';
  1296.             }
  1297.             $connection->executeUpdate($sql);
  1298.             if(!$chiamataInternaSenzaRisposta)
  1299.                 return new Response('Generazione indicizzazione attributi completata in ' $time_elapsed_secs microtime(true) - $start ' seconds \n');
  1300.             else
  1301.                 return true;
  1302.         }catch (\Exception|\Throwable $ex) {
  1303.             $this->ScriviRegistroAttivita(null$request->getClientIp(), $ex->getTraceAsString(), false"Errore genera indicizzazione articoli: " $ex->getMessage(), null$collegamentoRnd'ImportazioneController''generaIndicizzazioneAttributi');
  1304.             if(!$chiamataInternaSenzaRisposta)
  1305.                 return new Response('Errore genera indicizzazione attributi  EX: ' $ex->getMessage() . '/n' $ex->getTraceAsString());
  1306.             else
  1307.                 return false;
  1308.         }
  1309.     }
  1310.     /**
  1311.      * @Route("/generaAlbero/{indicizzaAttributi}/{codiceArticolo}", name="genera_albero", defaults={"indicizzaAttributi"="1","codiceArticolo"=""})
  1312.      */
  1313.     public function generaAlberoAction(Request $request$indicizzaAttributi 1$codiceArticolo "")
  1314.     {
  1315.         $collegamentoRnd $this->servizi->randomString2();
  1316.         # Se specifico il codice articolo non pulisco la tabella e tento la creazione albero solo del codice indicato
  1317.         try {
  1318.             $start microtime(true);
  1319.             ini_set('max_execution_time'2400);
  1320.             ini_set('memory_limit''4G');
  1321.             $connection $this->servizi->doctrine->getConnection();
  1322.             $repoAlbero $this->servizi->doctrine->getRepository(AlberoMenuProdotti::class);
  1323.             if ($codiceArticolo == "") {
  1324.                 $connection->executeQuery("SET FOREIGN_KEY_CHECKS=0;");
  1325.                 $connection->executeQuery("TRUNCATE associazione_albero_menu_prodotti_tipo_ordine;");
  1326.                 $connection->executeQuery("TRUNCATE albero_menu_prodotti;");
  1327.                 $connection->executeQuery("SET FOREIGN_KEY_CHECKS=1; ");
  1328.             }
  1329.             $imp $this->servizi->impostazioni;
  1330.             $imp->caricaCacheImpostazioniDaFamiglie(['Generale']);
  1331.             //Se vero non utilizzo le 5 categorie presenti nella mappa categorie articoli per generare l'albero ma utilizzo la tabella dedicata all'associazione categorie albero
  1332.             $usaCategorieAlbero $imp->ritornaImpostazioneDaNome('UtilizzaCategorieAlberoPerGenerazione');
  1333.             $debugRitorno "";
  1334.             $user $this->servizi->OttieniUtenteCorrente();
  1335.             $arrayCacheCategorie = array();
  1336.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Chiamata effettuata a /generaAlbero --- Inizio la generazione dell\' albero'$user$collegamentoRnd'ImportazioneController''generaAlbero');
  1337.             $posizioneAssoluta 0;
  1338.             $conn $this->servizi->doctrine->getConnection();
  1339.             $sql "SELECT COUNT(*) AS conta
  1340.                         FROM mappa_categorie_articoli mappa ";
  1341.             if ($codiceArticolo != ""){
  1342.                 $sql .= " LEFT JOIN articoli a ON a.id = mappa.articolo_id WHERE a.codice = ? ";
  1343.             }
  1344.             $sql .= "GROUP BY mappa.categoria1_id, mappa.categoria2_id, mappa.categoria3_id, mappa.categoria4_id, mappa.categoria5_id";
  1345.             if ($usaCategorieAlbero == '1'){
  1346.                 $sql "SELECT COUNT(*) AS conta
  1347.                         FROM mappa_categorie_articoli mappa ";
  1348.                 if ($codiceArticolo != ""){
  1349.                     $sql .= " LEFT JOIN articoli a ON a.id = mappa.articolo_id ";
  1350.                 }
  1351.                 $sql .= " LEFT JOIN associazione_categorie_albero_mappa_categorie_articoli ass ON ass.mappa_categoria_articolo_id = mappa.id ";
  1352.                 if ($codiceArticolo != ""){
  1353.                     $sql .= " WHERE a.codice = ? ";
  1354.                 }
  1355.                 $sql .= "  GROUP BY ass.categoria_albero1_id, ass.categoria_albero2_id, ass.categoria_albero3_id, ass.categoria_albero4_id, ass.categoria_albero5_id, ass.categoria_albero6_id, ass.categoria_albero7_id, ass.categoria_albero8_id, ass.categoria_albero9_id, ass.categoria_albero10_id";
  1356.             }
  1357.             $stmt $conn->prepare($sql);
  1358.             if ($codiceArticolo != ""){
  1359.                 $stmt->bindValue(1$codiceArticolo);
  1360.             }
  1361.             $rst $stmt->executeQuery();
  1362.             $cont $rst->fetchAllAssociative();
  1363.             $totRighe count($cont);
  1364.             $batch 100;
  1365.             $inizio 0;
  1366.             while($totRighe $inizio) {
  1367.                 $sql 'SELECT 
  1368.                             mappa.categoria1_id AS cat1,
  1369.                             mappa.categoria2_id AS cat2,
  1370.                             mappa.categoria3_id AS cat3,
  1371.                             mappa.categoria4_id AS cat4,
  1372.                             mappa.categoria5_id AS cat5
  1373.                         FROM mappa_categorie_articoli mappa
  1374.                             LEFT JOIN categorie c1 ON c1.id = mappa.categoria1_id
  1375.                             LEFT JOIN categorie c2 ON c2.id = mappa.categoria2_id
  1376.                             LEFT JOIN categorie c3 ON c3.id = mappa.categoria3_id
  1377.                             LEFT JOIN categorie c4 ON c4.id = mappa.categoria4_id
  1378.                             LEFT JOIN categorie c5 ON c5.id = mappa.categoria5_id
  1379.                             LEFT JOIN articoli a on mappa.articolo_id = a.id
  1380.                         WHERE mappa.attivo = 1 AND a.attivo = 1
  1381.                           AND (c1.attivo = 1 OR mappa.categoria1_id IS NULL) 
  1382.                           AND (c2.attivo = 1 OR mappa.categoria2_id IS NULL) 
  1383.                           AND (c3.attivo = 1 OR mappa.categoria3_id IS NULL) 
  1384.                           AND (c4.attivo = 1 OR mappa.categoria4_id IS NULL) 
  1385.                           AND (c5.attivo = 1 OR mappa.categoria5_id IS NULL) ';
  1386.                 if ($codiceArticolo != ""){
  1387.                     $sql .= " AND a.codice = ? ";
  1388.                 }
  1389.                 $sql .= 'GROUP BY mappa.categoria1_id, mappa.categoria2_id, mappa.categoria3_id, mappa.categoria4_id, mappa.categoria5_id
  1390.                         ORDER BY c1.ordinamento, c1.nome, c2.ordinamento, c2.nome, c3.ordinamento, c3.nome, c4.ordinamento, c4.nome, c5.ordinamento, c5.nome
  1391.                         LIMIT ' $batch " OFFSET " $inizio;
  1392.                 if($usaCategorieAlbero){
  1393.                     $sql 'SELECT 
  1394.                             ass.categoria_albero1_id AS cat1,
  1395.                             ass.categoria_albero2_id AS cat2,
  1396.                             ass.categoria_albero3_id AS cat3,
  1397.                             ass.categoria_albero4_id AS cat4,
  1398.                             ass.categoria_albero5_id AS cat5,
  1399.                             ass.categoria_albero6_id AS cat6,
  1400.                             ass.categoria_albero7_id AS cat7,
  1401.                             ass.categoria_albero8_id AS cat8,
  1402.                             ass.categoria_albero9_id AS cat9,
  1403.                             ass.categoria_albero10_id AS cat10
  1404.                         FROM mappa_categorie_articoli mappa
  1405.                             LEFT JOIN associazione_categorie_albero_mappa_categorie_articoli ass ON ass.mappa_categoria_articolo_id = mappa.id 
  1406.                             LEFT JOIN categorie_albero c1 ON c1.id = ass.categoria_albero1_id
  1407.                             LEFT JOIN categorie_albero c2 ON c2.id = ass.categoria_albero2_id
  1408.                             LEFT JOIN categorie_albero c3 ON c3.id = ass.categoria_albero3_id
  1409.                             LEFT JOIN categorie_albero c4 ON c4.id = ass.categoria_albero4_id
  1410.                             LEFT JOIN categorie_albero c5 ON c5.id = ass.categoria_albero5_id
  1411.                             LEFT JOIN categorie_albero c6 ON c6.id = ass.categoria_albero6_id
  1412.                             LEFT JOIN categorie_albero c7 ON c7.id = ass.categoria_albero7_id
  1413.                             LEFT JOIN categorie_albero c8 ON c8.id = ass.categoria_albero8_id
  1414.                             LEFT JOIN categorie_albero c9 ON c9.id = ass.categoria_albero9_id
  1415.                             LEFT JOIN categorie_albero c10 ON c10.id = ass.categoria_albero10_id
  1416.                             LEFT JOIN articoli a on mappa.articolo_id = a.id
  1417.                         WHERE mappa.attivo = 1 AND a.attivo = 1
  1418.                           AND (c1.attivo = 1 OR c1.id IS NULL) 
  1419.                           AND (c2.attivo = 1 OR c2.id IS NULL) 
  1420.                           AND (c3.attivo = 1 OR c3.id IS NULL) 
  1421.                           AND (c4.attivo = 1 OR c4.id IS NULL) 
  1422.                           AND (c5.attivo = 1 OR c5.id IS NULL) 
  1423.                           AND (c6.attivo = 1 OR c6.id IS NULL) 
  1424.                           AND (c7.attivo = 1 OR c7.id IS NULL) 
  1425.                           AND (c8.attivo = 1 OR c8.id IS NULL) 
  1426.                           AND (c9.attivo = 1 OR c9.id IS NULL) 
  1427.                           AND (c10.attivo = 1 OR c10.id IS NULL) ';
  1428.                     if ($codiceArticolo != ""){
  1429.                         $sql .= " AND a.codice = ? ";
  1430.                     }
  1431.                     $sql .= ' GROUP BY ass.categoria_albero1_id, ass.categoria_albero2_id, ass.categoria_albero3_id, ass.categoria_albero4_id, ass.categoria_albero5_id, ass.categoria_albero6_id, ass.categoria_albero7_id, ass.categoria_albero8_id, ass.categoria_albero9_id, ass.categoria_albero10_id
  1432.                         ORDER BY c1.ordinamento, c1.nome, c2.ordinamento, c2.nome, c3.ordinamento, c3.nome, c4.ordinamento, c4.nome, c5.ordinamento, c5.nome, c6.ordinamento, c6.nome, c7.ordinamento, c7.nome, c8.ordinamento, c8.nome, c9.ordinamento, c9.nome, c10.ordinamento, c10.nome
  1433.                         LIMIT ' $batch " OFFSET " $inizio;
  1434.                 }
  1435.                 $stmt $conn->prepare($sql);
  1436.                 if ($codiceArticolo != ""){
  1437.                     $stmt->bindValue(1$codiceArticolo);
  1438.                 }
  1439.                 $rst $stmt->executeQuery();
  1440.                 $risultati $rst->fetchAllAssociative();
  1441.                 foreach ($risultati as $mappa) {
  1442.                     $ct1 null$ct2 null$ct3 null$ct4 null$ct5 null;
  1443.                     $alberoLivello1 null;
  1444.                     $alberoLivello2 null;
  1445.                     $alberoLivello3 null;
  1446.                     $alberoLivello4 null;
  1447.                     $alberoLivello5 null;
  1448.                     $alberoLivello6 null;
  1449.                     $alberoLivello7 null;
  1450.                     $alberoLivello8 null;
  1451.                     $alberoLivello9 null;
  1452.                     $alberoLivello10 null;
  1453.                     if ($mappa['cat1']) {
  1454.                         /** @var Categorie|CategorieAlbero $ct1 */
  1455.                         if ($usaCategorieAlbero == '1'){
  1456.                             $ct1 $this->ricavaCategoriaAlbero($arrayCacheCategorie$mappa['cat1'])[$mappa['cat1']];
  1457.                             $alberoLivello1 $repoAlbero->findOneBy(array('categoriaAlbero' => $ct1'parentId' => null'livello' => '0'));
  1458.                         }else {
  1459.                             $ct1 $this->ricavaCategoria($arrayCacheCategorie$mappa['cat1'])[$mappa['cat1']];
  1460.                             $alberoLivello1 $repoAlbero->findOneBy(array('categoria' => $ct1'parentId' => null'livello' => '0'));
  1461.                         }
  1462.                         if (!$alberoLivello1) {
  1463.                             if ($codiceArticolo != ""){
  1464.                                 print ("Inserisco albero 1 (ID): " $mappa['cat1']);
  1465.                             }
  1466.                             $sql "INSERT INTO albero_menu_prodotti (" . ($usaCategorieAlbero "categoria_albero_id" "categoria_id") . ", parent_id_id, utente_id, livello, has_child, posizione, posizione_assoluta, data_creazione, data_modifica, risorse_presenti)
  1467.                                     VALUES (?, NULL, ?, 0, 0, 
  1468.                                             CASE WHEN (SELECT COUNT(alb.id) FROM albero_menu_prodotti alb WHERE alb.parent_id_id IS NULL) IS NOT NULL 
  1469.                                                 THEN (SELECT COUNT(alb.id) FROM albero_menu_prodotti alb WHERE alb.parent_id_id IS NULL) ELSE 0 END,
  1470.                                         ?, NOW(), NOW(),
  1471.                                             CASE WHEN EXISTS(SELECT ris.id FROM risorse_anagrafiche ris WHERE
  1472.                                                                 ris.codice_anagrafica = '' AND 
  1473.                                                                 ris.codice_categoria1 = ? AND 
  1474.                                                                 ris.codice_categoria2 = '' AND  
  1475.                                                                 ris.codice_categoria3 = '' AND   
  1476.                                                                 ris.codice_categoria4 = '' AND   
  1477.                                                                 ris.codice_categoria5 = '' AND                 
  1478.                                                                 ris.codice_articolo = '' AND 
  1479.                                                                 ris.marca = '' AND 
  1480.                                                                 ris.codice_dimensione1 = '' AND   
  1481.                                                                 ris.codice_dimensione2 = '' AND 
  1482.                                                                 ris.codice_dimensione3 = '' AND 
  1483.                                                                 ris.codice_dimensione4 = '' AND 
  1484.                                                                 ris.codice_dimensione5 = ''                                           
  1485.                                                 ) THEN 1 ELSE 0 END
  1486.                                             )";
  1487.                             $stmt $connection->prepare($sql);
  1488.                             $stmt->bindValue(1$ct1->getId());
  1489.                             $stmt->bindValue(2$user $user->getId() : null);
  1490.                             $stmt->bindValue(3$posizioneAssoluta);
  1491.                             $stmt->bindValue(4$ct1->getCodice());
  1492.                             $stmt->execute();
  1493.                             $sqlTipoOrdine "
  1494.                                 INSERT INTO associazione_albero_menu_prodotti_tipo_ordine (tipo_ordine_id, albero_menu_id) SELECT 
  1495.                                     DISTINCT(ass.tipo_ordine_id),
  1496.                                     (SELECT alb.id FROM albero_menu_prodotti alb WHERE " . ($usaCategorieAlbero ?  "alb.categoria_albero_id" "alb.categoria_id") . " = " $ct1->getId() . " AND alb.parent_id_id IS NULL AND alb.livello = 0 LIMIT 1)
  1497.                                 FROM associazione_articoli_tipo_ordine ass
  1498.                                     LEFT JOIN mappa_categorie_articoli mappa ON mappa.id = ass.mappa_categoria_articolo_id
  1499.                                     LEFT JOIN associazione_categorie_albero_mappa_categorie_articoli ass2 ON ass2.mappa_categoria_articolo_id = mappa.id 
  1500.                                 WHERE " . ($usaCategorieAlbero "ass2.categoria_albero1_id" "mappa.categoria1_id" ) . " = " $ct1->getId();
  1501.                             $stmt $connection->prepare($sqlTipoOrdine);
  1502.                             $stmt->execute();
  1503.                             $posizioneAssoluta++;
  1504.                             $alberoLivello1 null;
  1505.                             if ($usaCategorieAlbero){
  1506.                                 $alberoLivello1 $repoAlbero->findOneBy(array('categoriaAlbero' => $ct1'parentId' => null'livello' => '0'));
  1507.                             }else{
  1508.                                 $alberoLivello1 $repoAlbero->findOneBy(array('categoria' => $ct1'parentId' => null'livello' => '0'));
  1509.                             }
  1510.                         }
  1511.                     }
  1512.                     if ($mappa['cat2']) {
  1513.                         /** @var Categorie $ct2 */
  1514.                         if($usaCategorieAlbero == '1'){
  1515.                             $ct2 $this->ricavaCategoriaAlbero($arrayCacheCategorie$mappa['cat2'])[$mappa['cat2']];
  1516.                         }else{
  1517.                             $ct2 $this->ricavaCategoria($arrayCacheCategorie$mappa['cat2'])[$mappa['cat2']];
  1518.                         }
  1519.                         if($alberoLivello1) {
  1520.                             if($usaCategorieAlbero == '1'){
  1521.                                 $alberoLivello2 $repoAlbero->findOneBy(array('categoriaAlbero' => $ct2'parentId' => $alberoLivello1->getId(), 'livello' => '1'));
  1522.                             }else{
  1523.                                 $alberoLivello2 $repoAlbero->findOneBy(array('categoria' => $ct2'parentId' => $alberoLivello1->getId(), 'livello' => '1'));
  1524.                             }
  1525.                         }
  1526.                         if (!$alberoLivello2 && $alberoLivello1) {
  1527.                             if ($codiceArticolo != ""){
  1528.                                 print ("Inserisco albero 2 (ID): " $mappa['cat2']);
  1529.                             }
  1530.                             $sql "INSERT INTO albero_menu_prodotti (" . ($usaCategorieAlbero "categoria_albero_id" "categoria_id") . ", parent_id_id, utente_id, livello, has_child, posizione, posizione_assoluta, data_creazione, data_modifica, risorse_presenti)
  1531.                                     VALUES (?, ?, ?, 1, 0, 
  1532.                                             CASE WHEN (SELECT COUNT(alb.id) FROM albero_menu_prodotti alb WHERE alb.parent_id_id = ?) IS NOT NULL 
  1533.                                                 THEN (SELECT COUNT(alb.id) FROM albero_menu_prodotti alb WHERE alb.parent_id_id = ?) ELSE 0 END,
  1534.                                         ?, NOW(), NOW(),
  1535.                                             CASE WHEN EXISTS(SELECT ris.id FROM risorse_anagrafiche ris WHERE 
  1536.                                                                 ris.codice_anagrafica = '' AND 
  1537.                                                                 ris.codice_categoria1 = ? AND 
  1538.                                                                 ris.codice_categoria2 = ? AND  
  1539.                                                                 ris.codice_categoria3 = '' AND   
  1540.                                                                 ris.codice_categoria4 = '' AND   
  1541.                                                                 ris.codice_categoria5 = '' AND                 
  1542.                                                                 ris.codice_articolo = '' AND 
  1543.                                                                 ris.marca = '' AND 
  1544.                                                                 ris.codice_dimensione1 = '' AND   
  1545.                                                                 ris.codice_dimensione2 = '' AND 
  1546.                                                                 ris.codice_dimensione3 = '' AND 
  1547.                                                                 ris.codice_dimensione4 = '' AND 
  1548.                                                                 ris.codice_dimensione5 = ''                                           
  1549.                                                 ) THEN 1 ELSE 0 END
  1550.                                                 )";
  1551.                             $stmt $connection->prepare($sql);
  1552.                             $stmt->bindValue(1$ct2->getId());
  1553.                             $stmt->bindValue(2$alberoLivello1->getId());
  1554.                             $stmt->bindValue(3$user $user->getId() : null);
  1555.                             $stmt->bindValue(4$alberoLivello1->getId());
  1556.                             $stmt->bindValue(5$alberoLivello1->getId());
  1557.                             $stmt->bindValue(6$posizioneAssoluta);
  1558.                             $stmt->bindValue(7$ct1->getCodice());
  1559.                             $stmt->bindValue(8$ct2->getCodice());
  1560.                             $stmt->execute();
  1561.                             $sqlTipoOrdine "
  1562.                                 INSERT INTO associazione_albero_menu_prodotti_tipo_ordine (tipo_ordine_id, albero_menu_id) SELECT 
  1563.                                     DISTINCT(ass.tipo_ordine_id),
  1564.                                     (SELECT alb.id FROM albero_menu_prodotti alb WHERE " . ($usaCategorieAlbero ?  "alb.categoria_albero_id" "alb.categoria_id") . " = " $ct2->getId() . " AND alb.parent_id_id = " $alberoLivello1->getId() . " AND alb.livello = 1 LIMIT 1)
  1565.                                 FROM associazione_articoli_tipo_ordine ass
  1566.                                     LEFT JOIN mappa_categorie_articoli mappa ON mappa.id = ass.mappa_categoria_articolo_id
  1567.                                     LEFT JOIN associazione_categorie_albero_mappa_categorie_articoli ass2 ON ass2.mappa_categoria_articolo_id = mappa.id 
  1568.                                 WHERE " . ($usaCategorieAlbero "ass2.categoria_albero1_id" "mappa.categoria1_id" ) . " = " $ct1->getId() . " AND " . ($usaCategorieAlbero "ass2.categoria_albero2_id" "mappa.categoria2_id" ) . " = " $ct2->getId();
  1569.                             $stmt $connection->prepare($sqlTipoOrdine);
  1570.                             $stmt->execute();
  1571.                             $posizioneAssoluta++;
  1572.                             $sql 'UPDATE albero_menu_prodotti SET has_child = 1 WHERE id = ?';
  1573.                             $stmt $connection->prepare($sql);
  1574.                             $stmt->bindValue(1$alberoLivello1->getId());
  1575.                             $stmt->execute();
  1576.                             if($usaCategorieAlbero == '1') {
  1577.                                 $alberoLivello2 $repoAlbero->findOneBy(array('categoriaAlbero' => $ct2'parentId' => $alberoLivello1->getId(), 'livello' => '1'));
  1578.                             }else{
  1579.                                 $alberoLivello2 $repoAlbero->findOneBy(array('categoria' => $ct2'parentId' => $alberoLivello1->getId(), 'livello' => '1'));
  1580.                             }
  1581.                         }
  1582.                     }
  1583.                     if ($mappa['cat3']) {
  1584.                         /** @var Categorie $ct3 */
  1585.                         if($usaCategorieAlbero == '1'){
  1586.                             $ct3 $this->ricavaCategoriaAlbero($arrayCacheCategorie$mappa['cat3'])[$mappa['cat3']];
  1587.                         }else {
  1588.                             $ct3 $this->ricavaCategoria($arrayCacheCategorie$mappa['cat3'])[$mappa['cat3']];
  1589.                         }
  1590.                         if($alberoLivello2) {
  1591.                             if($usaCategorieAlbero == '1') {
  1592.                                 $alberoLivello3 $repoAlbero->findOneBy(array('categoriaAlbero' => $ct3'parentId' => $alberoLivello2->getId(), 'livello' => '2'));
  1593.                             }else{
  1594.                                 $alberoLivello3 $repoAlbero->findOneBy(array('categoria' => $ct3'parentId' => $alberoLivello2->getId(), 'livello' => '2'));
  1595.                             }
  1596.                         }
  1597.                         if (!$alberoLivello3 && $alberoLivello2) {
  1598.                             if ($codiceArticolo != ""){
  1599.                                 print ("Inserisco albero 3 (ID): " $mappa['cat3']);
  1600.                             }
  1601.                             $sql "INSERT INTO albero_menu_prodotti (" . ($usaCategorieAlbero "categoria_albero_id" "categoria_id") . ", parent_id_id, utente_id, livello, has_child, posizione, posizione_assoluta, data_creazione, data_modifica, risorse_presenti)
  1602.                                     VALUES (?, ?, ?, 2, 0, 
  1603.                                             CASE WHEN (SELECT COUNT(alb.id) FROM albero_menu_prodotti alb WHERE alb.parent_id_id = ?) IS NOT NULL 
  1604.                                                 THEN (SELECT COUNT(alb.id) FROM albero_menu_prodotti alb WHERE alb.parent_id_id = ?) ELSE 0 END,
  1605.                                         ?, NOW(), NOW(),
  1606.                                             CASE WHEN EXISTS(SELECT ris.id FROM risorse_anagrafiche ris WHERE 
  1607.                                                                 ris.codice_anagrafica = '' AND 
  1608.                                                                 ris.codice_categoria1 = ? AND 
  1609.                                                                 ris.codice_categoria2 = ? AND  
  1610.                                                                 ris.codice_categoria3 = ? AND   
  1611.                                                                 ris.codice_categoria4 = '' AND   
  1612.                                                                 ris.codice_categoria5 = '' AND                 
  1613.                                                                 ris.codice_articolo = '' AND 
  1614.                                                                 ris.marca = '' AND 
  1615.                                                                 ris.codice_dimensione1 = '' AND   
  1616.                                                                 ris.codice_dimensione2 = '' AND 
  1617.                                                                 ris.codice_dimensione3 = '' AND 
  1618.                                                                 ris.codice_dimensione4 = '' AND 
  1619.                                                                 ris.codice_dimensione5 = ''                                           
  1620.                                                 ) THEN 1 ELSE 0 END)";
  1621.                             $stmt $connection->prepare($sql);
  1622.                             $stmt->bindValue(1$ct3->getId());
  1623.                             $stmt->bindValue(2$alberoLivello2->getId());
  1624.                             $stmt->bindValue(3$user $user->getId() : null);
  1625.                             $stmt->bindValue(4$alberoLivello2->getId());
  1626.                             $stmt->bindValue(5$alberoLivello2->getId());
  1627.                             $stmt->bindValue(6$posizioneAssoluta);
  1628.                             $stmt->bindValue(7$ct1->getCodice());
  1629.                             $stmt->bindValue(8$ct2->getCodice());
  1630.                             $stmt->bindValue(9$ct3->getCodice());
  1631.                             $stmt->execute();
  1632.                             $posizioneAssoluta++;
  1633.                             $sqlTipoOrdine "
  1634.                                 INSERT INTO associazione_albero_menu_prodotti_tipo_ordine (tipo_ordine_id, albero_menu_id) SELECT 
  1635.                                     DISTINCT(ass.tipo_ordine_id),
  1636.                                     (SELECT alb.id FROM albero_menu_prodotti alb WHERE " . ($usaCategorieAlbero ?  "alb.categoria_albero_id" "alb.categoria_id") . " = " $ct3->getId() . " AND alb.parent_id_id = " $alberoLivello2->getId() . " AND alb.livello = 2 LIMIT 1)
  1637.                                 FROM associazione_articoli_tipo_ordine ass
  1638.                                     LEFT JOIN mappa_categorie_articoli mappa ON mappa.id = ass.mappa_categoria_articolo_id
  1639.                                     LEFT JOIN associazione_categorie_albero_mappa_categorie_articoli ass2 ON ass.mappa_categoria_articolo_id = mappa.id 
  1640.                                 WHERE " . ($usaCategorieAlbero "ass2.categoria_albero1_id" "mappa.categoria1_id" ) . " = " $ct1->getId() . " AND " . ($usaCategorieAlbero "ass2.categoria_albero2_id" "mappa.categoria2_id" ) . " = " $ct2->getId() . " AND " . ($usaCategorieAlbero "ass2.categoria_albero3_id" "mappa.categoria3_id" ) . " = " $ct3->getId();
  1641.                             $stmt $connection->prepare($sqlTipoOrdine);
  1642.                             $stmt->execute();
  1643.                             $sql 'UPDATE albero_menu_prodotti SET has_child = 1 WHERE id = ?';
  1644.                             $stmt $connection->prepare($sql);
  1645.                             $stmt->bindValue(1$alberoLivello2->getId());
  1646.                             $stmt->execute();
  1647.                             if($usaCategorieAlbero == '1'){
  1648.                                 $alberoLivello3 $repoAlbero->findOneBy(array('categoriaAlbero' => $ct3'parentId' => $alberoLivello2->getId(), 'livello' => '2'));
  1649.                             }else {
  1650.                                 $alberoLivello3 $repoAlbero->findOneBy(array('categoria' => $ct3'parentId' => $alberoLivello2->getId(), 'livello' => '2'));
  1651.                             }
  1652.                         }
  1653.                     }
  1654.                     if ($mappa['cat4']) {
  1655.                         /** @var Categorie $ct4 */
  1656.                         if($usaCategorieAlbero == '1'){
  1657.                             $ct4 $this->ricavaCategoriaAlbero($arrayCacheCategorie$mappa['cat4'])[$mappa['cat4']];
  1658.                         }else {
  1659.                             $ct4 $this->ricavaCategoria($arrayCacheCategorie$mappa['cat4'])[$mappa['cat4']];
  1660.                         }
  1661.                         if($alberoLivello3) {
  1662.                             if($usaCategorieAlbero == '1'){
  1663.                                 $alberoLivello4 $repoAlbero->findOneBy(array('categoriaAlbero' => $ct4'parentId' => $alberoLivello3->getId(), 'livello' => '3'));
  1664.                             }else {
  1665.                                 $alberoLivello4 $repoAlbero->findOneBy(array('categoria' => $ct4'parentId' => $alberoLivello3->getId(), 'livello' => '3'));
  1666.                             }
  1667.                         }
  1668.                         if (!$alberoLivello4 && $alberoLivello3) {
  1669.                             if ($codiceArticolo != ""){
  1670.                                 print ("Inserisco albero 4 (ID): " $mappa['cat4']);
  1671.                             }
  1672.                             $sql "INSERT INTO albero_menu_prodotti (" . ($usaCategorieAlbero "categoria_albero_id" "categoria_id") . ", parent_id_id, utente_id, livello, has_child, posizione, posizione_assoluta, data_creazione, data_modifica, risorse_presenti)
  1673.                                     VALUES (?, ?, ?, 3, 0, 
  1674.                                             CASE WHEN (SELECT COUNT(alb.id) FROM albero_menu_prodotti alb WHERE alb.parent_id_id = ?) IS NOT NULL 
  1675.                                                 THEN (SELECT COUNT(alb.id) FROM albero_menu_prodotti alb WHERE alb.parent_id_id = ?) ELSE 0 END,
  1676.                                         ?, NOW(), NOW(),
  1677.                                             CASE WHEN EXISTS(SELECT ris.id FROM risorse_anagrafiche ris WHERE 
  1678.                                                                 ris.codice_anagrafica = '' AND 
  1679.                                                                 ris.codice_categoria1 = ? AND 
  1680.                                                                 ris.codice_categoria2 = ? AND  
  1681.                                                                 ris.codice_categoria3 = ? AND   
  1682.                                                                 ris.codice_categoria4 = ? AND   
  1683.                                                                 ris.codice_categoria5 = '' AND                 
  1684.                                                                 ris.codice_articolo = '' AND 
  1685.                                                                 ris.marca = '' AND 
  1686.                                                                 ris.codice_dimensione1 = '' AND   
  1687.                                                                 ris.codice_dimensione2 = '' AND 
  1688.                                                                 ris.codice_dimensione3 = '' AND 
  1689.                                                                 ris.codice_dimensione4 = '' AND 
  1690.                                                                 ris.codice_dimensione5 = ''                                           
  1691.                                                 ) THEN 1 ELSE 0 END)";
  1692.                             $stmt $connection->prepare($sql);
  1693.                             $stmt->bindValue(1$ct4->getId());
  1694.                             $stmt->bindValue(2$alberoLivello3->getId());
  1695.                             $stmt->bindValue(3$user $user->getId() : null);
  1696.                             $stmt->bindValue(4$alberoLivello3->getId());
  1697.                             $stmt->bindValue(5$alberoLivello3->getId());
  1698.                             $stmt->bindValue(6$posizioneAssoluta);
  1699.                             $stmt->bindValue(7$ct1->getCodice());
  1700.                             $stmt->bindValue(8$ct2->getCodice());
  1701.                             $stmt->bindValue(9$ct3->getCodice());
  1702.                             $stmt->bindValue(10$ct4->getCodice());
  1703.                             $stmt->execute();
  1704.                             $posizioneAssoluta++;
  1705.                             $sqlTipoOrdine "
  1706.                                 INSERT INTO associazione_albero_menu_prodotti_tipo_ordine (tipo_ordine_id, albero_menu_id) SELECT 
  1707.                                     DISTINCT(ass.tipo_ordine_id),
  1708.                                     (SELECT alb.id FROM albero_menu_prodotti alb WHERE " . ($usaCategorieAlbero ?  "alb.categoria_albero_id" "alb.categoria_id") . " = " $ct4->getId() . " AND alb.parent_id_id = " $alberoLivello3->getId() . " AND alb.livello = 3 LIMIT 1)
  1709.                                 FROM associazione_articoli_tipo_ordine ass
  1710.                                     LEFT JOIN mappa_categorie_articoli mappa ON mappa.id = ass.mappa_categoria_articolo_id
  1711.                                     LEFT JOIN associazione_categorie_albero_mappa_categorie_articoli ass2 ON ass2.mappa_categoria_articolo_id = mappa.id 
  1712.                                 WHERE " . ($usaCategorieAlbero "ass2.categoria_albero1_id" "mappa.categoria1_id" ) . " = " $ct1->getId() . " AND " . ($usaCategorieAlbero "ass2.categoria_albero2_id" "mappa.categoria2_id" ) . " = " $ct2->getId() . " AND " . ($usaCategorieAlbero "ass2.categoria_albero3_id" "mappa.categoria3_id" ) . " = " $ct3->getId() . " AND " . ($usaCategorieAlbero "ass2.categoria_albero4_id" "mappa.categoria4_id" ) . " = " $ct4->getId();
  1713.                             $stmt $connection->prepare($sqlTipoOrdine);
  1714.                             $stmt->execute();
  1715.                             $sql 'UPDATE albero_menu_prodotti SET has_child = 1 WHERE id = ?';
  1716.                             $stmt $connection->prepare($sql);
  1717.                             $stmt->bindValue(1$alberoLivello3->getId());
  1718.                             $stmt->execute();
  1719.                             if($usaCategorieAlbero == '1'){
  1720.                                 $alberoLivello4 $repoAlbero->findOneBy(array('categoriaAlbero' => $ct4'parentId' => $alberoLivello3->getId(), 'livello' => '3'));
  1721.                             }else {
  1722.                                 $alberoLivello4 $repoAlbero->findOneBy(array('categoria' => $ct4'parentId' => $alberoLivello3->getId(), 'livello' => '3'));
  1723.                             }
  1724.                         }
  1725.                     }
  1726.                     if ($mappa['cat5']) {
  1727.                         /** @var Categorie $ct5 */
  1728.                         if($usaCategorieAlbero == '1') {
  1729.                             $ct5 $this->ricavaCategoriaAlbero($arrayCacheCategorie$mappa['cat5'])[$mappa['cat5']];
  1730.                         }else{
  1731.                             $ct5 $this->ricavaCategoria($arrayCacheCategorie$mappa['cat5'])[$mappa['cat5']];
  1732.                         }
  1733.                         if($alberoLivello4) {
  1734.                             if($usaCategorieAlbero == '1') {
  1735.                                 $alberoLivello5 $repoAlbero->findOneBy(array('categoriaAlbero' => $ct5'parentId' => $alberoLivello4->getId(), 'livello' => '4'));
  1736.                             }else{
  1737.                                 $alberoLivello5 $repoAlbero->findOneBy(array('categoria' => $ct5'parentId' => $alberoLivello4->getId(), 'livello' => '4'));
  1738.                             }
  1739.                         }
  1740.                         if (!$alberoLivello5 && $alberoLivello4) {
  1741.                             if ($codiceArticolo != ""){
  1742.                                 print ("Inserisco albero 5 (ID): " $mappa['cat5']);
  1743.                             }
  1744.                             $sql "INSERT INTO albero_menu_prodotti (" . ($usaCategorieAlbero "categoria_albero_id" "categoria_id") . ", parent_id_id, utente_id, livello, has_child, posizione, posizione_assoluta, data_creazione, data_modifica, risorse_presenti)
  1745.                                     VALUES (?, ?, ?, 4, 0, 
  1746.                                             CASE WHEN (SELECT COUNT(alb.id) FROM albero_menu_prodotti alb WHERE alb.parent_id_id = ?) IS NOT NULL 
  1747.                                                 THEN (SELECT COUNT(alb.id) FROM albero_menu_prodotti alb WHERE alb.parent_id_id = ?) ELSE 0 END,
  1748.                                         ?, NOW(), NOW(),
  1749.                                             CASE WHEN EXISTS(SELECT ris.id FROM risorse_anagrafiche ris WHERE 
  1750.                                                                 ris.codice_anagrafica = '' AND 
  1751.                                                                 ris.codice_categoria1 = ? AND 
  1752.                                                                 ris.codice_categoria2 = ? AND  
  1753.                                                                 ris.codice_categoria3 = ? AND   
  1754.                                                                 ris.codice_categoria4 = ? AND   
  1755.                                                                 ris.codice_categoria5 = ? AND                 
  1756.                                                                 ris.codice_articolo = '' AND 
  1757.                                                                 ris.marca = '' AND 
  1758.                                                                 ris.codice_dimensione1 = '' AND   
  1759.                                                                 ris.codice_dimensione2 = '' AND 
  1760.                                                                 ris.codice_dimensione3 = '' AND 
  1761.                                                                 ris.codice_dimensione4 = '' AND 
  1762.                                                                 ris.codice_dimensione5 = ''                                           
  1763.                                                 ) THEN 1 ELSE 0 END)";
  1764.                             $stmt $connection->prepare($sql);
  1765.                             $stmt->bindValue(1$ct5->getId());
  1766.                             $stmt->bindValue(2$alberoLivello4->getId());
  1767.                             $stmt->bindValue(3$user $user->getId() : null);
  1768.                             $stmt->bindValue(4$alberoLivello4->getId());
  1769.                             $stmt->bindValue(5$alberoLivello4->getId());
  1770.                             $stmt->bindValue(6$posizioneAssoluta);
  1771.                             $stmt->bindValue(7$ct1->getCodice());
  1772.                             $stmt->bindValue(8$ct2->getCodice());
  1773.                             $stmt->bindValue(9$ct3->getCodice());
  1774.                             $stmt->bindValue(10$ct4->getCodice());
  1775.                             $stmt->bindValue(11$ct5->getCodice());
  1776.                             $stmt->execute();
  1777.                             $posizioneAssoluta++;
  1778.                             $sqlTipoOrdine "
  1779.                                 INSERT INTO associazione_albero_menu_prodotti_tipo_ordine (tipo_ordine_id, albero_menu_id) SELECT 
  1780.                                     DISTINCT(ass.tipo_ordine_id),
  1781.                                     (SELECT alb.id FROM albero_menu_prodotti alb WHERE " . ($usaCategorieAlbero ?  "alb.categoria_albero_id" "alb.categoria_id") . " = " $ct5->getId() . " AND alb.parent_id_id = " $alberoLivello4->getId() . " AND alb.livello = 4 LIMIT 1)
  1782.                                 FROM associazione_articoli_tipo_ordine ass
  1783.                                     LEFT JOIN mappa_categorie_articoli mappa ON mappa.id = ass.mappa_categoria_articolo_id
  1784.                                     LEFT JOIN associazione_categorie_albero_mappa_categorie_articoli ass2 ON ass2.mappa_categoria_articolo_id = mappa.id 
  1785.                                 WHERE " . ($usaCategorieAlbero "ass2.categoria_albero1_id" "mappa.categoria1_id" ) . " = " $ct1->getId() . " AND " . ($usaCategorieAlbero "ass2.categoria_albero2_id" "mappa.categoria2_id" ) . " = " $ct2->getId() . " AND " . ($usaCategorieAlbero "ass2.categoria_albero3_id" "mappa.categoria3_id" ) . " = " $ct3->getId() . " AND " . ($usaCategorieAlbero "ass2.categoria_albero4_id" "mappa.categoria4_id" ) . " = " $ct4->getId() . " AND " . ($usaCategorieAlbero "ass2.categoria_albero5_id" "mappa.categoria5_id" ) . " = " $ct5->getId();
  1786.                             $stmt $connection->prepare($sqlTipoOrdine);
  1787.                             $stmt->execute();
  1788.                             $sql 'UPDATE albero_menu_prodotti SET has_child = 1 WHERE id = ?';
  1789.                             $stmt $connection->prepare($sql);
  1790.                             $stmt->bindValue(1$alberoLivello4->getId());
  1791.                             $stmt->execute();
  1792.                             if($usaCategorieAlbero == '1'){
  1793.                                 $alberoLivello5 $repoAlbero->findOneBy(array('categoriaAlbero' => $ct5'parentId' => $alberoLivello4->getId(), 'livello' => '4'));
  1794.                             }else {
  1795.                                 $alberoLivello5 $repoAlbero->findOneBy(array('categoria' => $ct5'parentId' => $alberoLivello4->getId(), 'livello' => '4'));
  1796.                             }
  1797.                         }
  1798.                     }
  1799.                     if($usaCategorieAlbero == '1') {
  1800.                         if ($mappa['cat6']) {
  1801.                             /** @var Categorie $ct6 */
  1802.                             if ($usaCategorieAlbero == '1') {
  1803.                                 $ct6 $this->ricavaCategoriaAlbero($arrayCacheCategorie$mappa['cat6'])[$mappa['cat6']];
  1804.                             } else {
  1805.                                 $ct6 $this->ricavaCategoria($arrayCacheCategorie$mappa['cat6'])[$mappa['cat6']];
  1806.                             }
  1807.                             if ($alberoLivello5) {
  1808.                                 if ($usaCategorieAlbero == '1') {
  1809.                                     $alberoLivello6 $repoAlbero->findOneBy(array('categoriaAlbero' => $ct6'parentId' => $alberoLivello5->getId(), 'livello' => '5'));
  1810.                                 } else {
  1811.                                     $alberoLivello6 $repoAlbero->findOneBy(array('categoria' => $ct6'parentId' => $alberoLivello5->getId(), 'livello' => '5'));
  1812.                                 }
  1813.                             }
  1814.                             if (!$alberoLivello6 && $alberoLivello5) {
  1815.                                 if ($codiceArticolo != "") {
  1816.                                     print ("Inserisco albero 6 (ID): " $mappa['cat6']);
  1817.                                 }
  1818.                                 $sql "INSERT INTO albero_menu_prodotti (" . ($usaCategorieAlbero "categoria_albero_id" "categoria_id") . ", parent_id_id, utente_id, livello, has_child, posizione, posizione_assoluta, data_creazione, data_modifica, risorse_presenti)
  1819.                                     VALUES (?, ?, ?, 5, 0, 
  1820.                                             CASE WHEN (SELECT COUNT(alb.id) FROM albero_menu_prodotti alb WHERE alb.parent_id_id = ?) IS NOT NULL 
  1821.                                                 THEN (SELECT COUNT(alb.id) FROM albero_menu_prodotti alb WHERE alb.parent_id_id = ?) ELSE 0 END,
  1822.                                         ?, NOW(), NOW(),
  1823.                                             CASE WHEN EXISTS(SELECT ris.id FROM risorse_anagrafiche ris WHERE 
  1824.                                                                 ris.codice_anagrafica = '' AND 
  1825.                                                                 ris.codice_categoria1 = ? AND 
  1826.                                                                 ris.codice_categoria2 = ? AND  
  1827.                                                                 ris.codice_categoria3 = ? AND   
  1828.                                                                 ris.codice_categoria4 = ? AND   
  1829.                                                                 ris.codice_categoria5 = ? AND                 
  1830.                                                                 ris.codice_articolo = '' AND 
  1831.                                                                 ris.marca = '' AND 
  1832.                                                                 ris.codice_dimensione1 = '' AND   
  1833.                                                                 ris.codice_dimensione2 = '' AND 
  1834.                                                                 ris.codice_dimensione3 = '' AND 
  1835.                                                                 ris.codice_dimensione4 = '' AND 
  1836.                                                                 ris.codice_dimensione5 = ''                                           
  1837.                                                 ) THEN 1 ELSE 0 END)";
  1838.                                 $stmt $connection->prepare($sql);
  1839.                                 $stmt->bindValue(1$ct6->getId());
  1840.                                 $stmt->bindValue(2$alberoLivello5->getId());
  1841.                                 $stmt->bindValue(3$user $user->getId() : null);
  1842.                                 $stmt->bindValue(4$alberoLivello5->getId());
  1843.                                 $stmt->bindValue(5$alberoLivello5->getId());
  1844.                                 $stmt->bindValue(6$posizioneAssoluta);
  1845.                                 $stmt->bindValue(7$ct1->getCodice());
  1846.                                 $stmt->bindValue(8$ct2->getCodice());
  1847.                                 $stmt->bindValue(9$ct3->getCodice());
  1848.                                 $stmt->bindValue(10$ct4->getCodice());
  1849.                                 $stmt->bindValue(11$ct5->getCodice());
  1850.                                 $stmt->execute();
  1851.                                 $posizioneAssoluta++;
  1852.                                 $sqlTipoOrdine "
  1853.                                 INSERT INTO associazione_albero_menu_prodotti_tipo_ordine (tipo_ordine_id, albero_menu_id) SELECT 
  1854.                                     DISTINCT(ass.tipo_ordine_id),
  1855.                                     (SELECT alb.id FROM albero_menu_prodotti alb WHERE " . ($usaCategorieAlbero "alb.categoria_albero_id" "alb.categoria_id") . " = " $ct6->getId() . " AND alb.parent_id_id = " $alberoLivello5->getId() . " AND alb.livello = 5 LIMIT 1)
  1856.                                 FROM associazione_articoli_tipo_ordine ass
  1857.                                     LEFT JOIN mappa_categorie_articoli mappa ON mappa.id = ass.mappa_categoria_articolo_id
  1858.                                     LEFT JOIN associazione_categorie_albero_mappa_categorie_articoli ass2 ON ass2.mappa_categoria_articolo_id = mappa.id 
  1859.                                 WHERE " . ($usaCategorieAlbero "ass2.categoria_albero1_id" "mappa.categoria1_id") . " = " $ct1->getId() . " AND " . ($usaCategorieAlbero "ass2.categoria_albero2_id" "mappa.categoria2_id") . " = " $ct2->getId() . " AND " . ($usaCategorieAlbero "ass2.categoria_albero3_id" "mappa.categoria3_id") . " = " $ct3->getId() . " AND " . ($usaCategorieAlbero "ass2.categoria_albero4_id" "mappa.categoria4_id") . " = " $ct4->getId() . " AND " . ($usaCategorieAlbero "ass2.categoria_albero5_id" "mappa.categoria5_id") . " = " $ct5->getId() . " AND " . ($usaCategorieAlbero "ass2.categoria_albero6_id" "mappa.categoria6_id") . " = " $ct6->getId();
  1860.                                 $stmt $connection->prepare($sqlTipoOrdine);
  1861.                                 $stmt->execute();
  1862.                                 $sql 'UPDATE albero_menu_prodotti SET has_child = 1 WHERE id = ?';
  1863.                                 $stmt $connection->prepare($sql);
  1864.                                 $stmt->bindValue(1$alberoLivello5->getId());
  1865.                                 $stmt->execute();
  1866.                                 if ($usaCategorieAlbero == '1') {
  1867.                                     $alberoLivello6 $repoAlbero->findOneBy(array('categoriaAlbero' => $ct6'parentId' => $alberoLivello5->getId(), 'livello' => '5'));
  1868.                                 } else {
  1869.                                     $alberoLivello6 $repoAlbero->findOneBy(array('categoria' => $ct6'parentId' => $alberoLivello5->getId(), 'livello' => '5'));
  1870.                                 }
  1871.                             }
  1872.                         }
  1873.                         if ($mappa['cat7']) {
  1874.                             /** @var Categorie $ct7 */
  1875.                             if ($usaCategorieAlbero == '1') {
  1876.                                 $ct7 $this->ricavaCategoriaAlbero($arrayCacheCategorie$mappa['cat7'])[$mappa['cat7']];
  1877.                             } else {
  1878.                                 $ct7 $this->ricavaCategoria($arrayCacheCategorie$mappa['cat7'])[$mappa['cat7']];
  1879.                             }
  1880.                             if ($alberoLivello6) {
  1881.                                 if ($usaCategorieAlbero == '1') {
  1882.                                     $alberoLivello7 $repoAlbero->findOneBy(array('categoriaAlbero' => $ct7'parentId' => $alberoLivello6->getId(), 'livello' => '6'));
  1883.                                 } else {
  1884.                                     $alberoLivello7 $repoAlbero->findOneBy(array('categoria' => $ct7'parentId' => $alberoLivello6->getId(), 'livello' => '6'));
  1885.                                 }
  1886.                             }
  1887.                             if (!$alberoLivello7 && $alberoLivello6) {
  1888.                                 if ($codiceArticolo != "") {
  1889.                                     print ("Inserisco albero 7 (ID): " $mappa['cat7']);
  1890.                                 }
  1891.                                 $sql "INSERT INTO albero_menu_prodotti (" . ($usaCategorieAlbero "categoria_albero_id" "categoria_id") . ", parent_id_id, utente_id, livello, has_child, posizione, posizione_assoluta, data_creazione, data_modifica, risorse_presenti)
  1892.                                     VALUES (?, ?, ?, 6, 0, 
  1893.                                             CASE WHEN (SELECT COUNT(alb.id) FROM albero_menu_prodotti alb WHERE alb.parent_id_id = ?) IS NOT NULL 
  1894.                                                 THEN (SELECT COUNT(alb.id) FROM albero_menu_prodotti alb WHERE alb.parent_id_id = ?) ELSE 0 END,
  1895.                                         ?, NOW(), NOW(),
  1896.                                             CASE WHEN EXISTS(SELECT ris.id FROM risorse_anagrafiche ris WHERE 
  1897.                                                                 ris.codice_anagrafica = '' AND 
  1898.                                                                 ris.codice_categoria1 = ? AND 
  1899.                                                                 ris.codice_categoria2 = ? AND  
  1900.                                                                 ris.codice_categoria3 = ? AND   
  1901.                                                                 ris.codice_categoria4 = ? AND   
  1902.                                                                 ris.codice_categoria5 = ? AND                 
  1903.                                                                 ris.codice_articolo = '' AND 
  1904.                                                                 ris.marca = '' AND 
  1905.                                                                 ris.codice_dimensione1 = '' AND   
  1906.                                                                 ris.codice_dimensione2 = '' AND 
  1907.                                                                 ris.codice_dimensione3 = '' AND 
  1908.                                                                 ris.codice_dimensione4 = '' AND 
  1909.                                                                 ris.codice_dimensione5 = ''                                           
  1910.                                                 ) THEN 1 ELSE 0 END)";
  1911.                                 $stmt $connection->prepare($sql);
  1912.                                 $stmt->bindValue(1$ct7->getId());
  1913.                                 $stmt->bindValue(2$alberoLivello6->getId());
  1914.                                 $stmt->bindValue(3$user $user->getId() : null);
  1915.                                 $stmt->bindValue(4$alberoLivello6->getId());
  1916.                                 $stmt->bindValue(5$alberoLivello6->getId());
  1917.                                 $stmt->bindValue(6$posizioneAssoluta);
  1918.                                 $stmt->bindValue(7$ct1->getCodice());
  1919.                                 $stmt->bindValue(8$ct2->getCodice());
  1920.                                 $stmt->bindValue(9$ct3->getCodice());
  1921.                                 $stmt->bindValue(10$ct4->getCodice());
  1922.                                 $stmt->bindValue(11$ct5->getCodice());
  1923.                                 $stmt->execute();
  1924.                                 $posizioneAssoluta++;
  1925.                                 $sqlTipoOrdine "
  1926.                                 INSERT INTO associazione_albero_menu_prodotti_tipo_ordine (tipo_ordine_id, albero_menu_id) SELECT 
  1927.                                     DISTINCT(ass.tipo_ordine_id),
  1928.                                     (SELECT alb.id FROM albero_menu_prodotti alb WHERE " . ($usaCategorieAlbero "alb.categoria_albero_id" "alb.categoria_id") . " = " $ct7->getId() . " AND alb.parent_id_id = " $alberoLivello6->getId() . " AND alb.livello = 6 LIMIT 1)
  1929.                                 FROM associazione_articoli_tipo_ordine ass
  1930.                                     LEFT JOIN mappa_categorie_articoli mappa ON mappa.id = ass.mappa_categoria_articolo_id
  1931.                                     LEFT JOIN associazione_categorie_albero_mappa_categorie_articoli ass2 ON ass2.mappa_categoria_articolo_id = mappa.id 
  1932.                                 WHERE " . ($usaCategorieAlbero "ass2.categoria_albero1_id" "mappa.categoria1_id") . " = " $ct1->getId() . " AND " . ($usaCategorieAlbero "ass2.categoria_albero2_id" "mappa.categoria2_id") . " = " $ct2->getId() . " AND " . ($usaCategorieAlbero "ass2.categoria_albero3_id" "mappa.categoria3_id") . " = " $ct3->getId() . " AND " . ($usaCategorieAlbero "ass2.categoria_albero4_id" "mappa.categoria4_id") . " = " $ct4->getId() . " AND " . ($usaCategorieAlbero "ass2.categoria_albero5_id" "mappa.categoria5_id") . " = " $ct5->getId() . " AND " . ($usaCategorieAlbero "ass2.categoria_albero6_id" "mappa.categoria6_id") . " = " $ct6->getId() . " AND " . ($usaCategorieAlbero "ass2.categoria_albero7_id" "mappa.categoria7_id") . " = " $ct7->getId();
  1933.                                 $stmt $connection->prepare($sqlTipoOrdine);
  1934.                                 $stmt->execute();
  1935.                                 $sql 'UPDATE albero_menu_prodotti SET has_child = 1 WHERE id = ?';
  1936.                                 $stmt $connection->prepare($sql);
  1937.                                 $stmt->bindValue(1$alberoLivello6->getId());
  1938.                                 $stmt->execute();
  1939.                                 if ($usaCategorieAlbero == '1') {
  1940.                                     $alberoLivello7 $repoAlbero->findOneBy(array('categoriaAlbero' => $ct7'parentId' => $alberoLivello6->getId(), 'livello' => '6'));
  1941.                                 } else {
  1942.                                     $alberoLivello7 $repoAlbero->findOneBy(array('categoria' => $ct7'parentId' => $alberoLivello6->getId(), 'livello' => '6'));
  1943.                                 }
  1944.                             }
  1945.                         }
  1946.                         if ($mappa['cat8']) {
  1947.                             /** @var Categorie $ct8 */
  1948.                             if ($usaCategorieAlbero == '1') {
  1949.                                 $ct8 $this->ricavaCategoriaAlbero($arrayCacheCategorie$mappa['cat8'])[$mappa['cat8']];
  1950.                             } else {
  1951.                                 $ct8 $this->ricavaCategoria($arrayCacheCategorie$mappa['cat8'])[$mappa['cat8']];
  1952.                             }
  1953.                             if ($alberoLivello7) {
  1954.                                 if ($usaCategorieAlbero == '1') {
  1955.                                     $alberoLivello8 $repoAlbero->findOneBy(array('categoriaAlbero' => $ct8'parentId' => $alberoLivello7->getId(), 'livello' => '7'));
  1956.                                 } else {
  1957.                                     $alberoLivello8 $repoAlbero->findOneBy(array('categoria' => $ct8'parentId' => $alberoLivello7->getId(), 'livello' => '7'));
  1958.                                 }
  1959.                             }
  1960.                             if (!$alberoLivello8 && $alberoLivello7) {
  1961.                                 $sql "INSERT INTO albero_menu_prodotti (" . ($usaCategorieAlbero "categoria_albero_id" "categoria_id") . ", parent_id_id, utente_id, livello, has_child, posizione, posizione_assoluta, data_creazione, data_modifica, risorse_presenti)
  1962.                                     VALUES (?, ?, ?, 7, 0, 
  1963.                                             CASE WHEN (SELECT COUNT(alb.id) FROM albero_menu_prodotti alb WHERE alb.parent_id_id = ?) IS NOT NULL 
  1964.                                                 THEN (SELECT COUNT(alb.id) FROM albero_menu_prodotti alb WHERE alb.parent_id_id = ?) ELSE 0 END,
  1965.                                         ?, NOW(), NOW(),
  1966.                                             CASE WHEN EXISTS(SELECT ris.id FROM risorse_anagrafiche ris WHERE 
  1967.                                                                 ris.codice_anagrafica = '' AND 
  1968.                                                                 ris.codice_categoria1 = ? AND 
  1969.                                                                 ris.codice_categoria2 = ? AND  
  1970.                                                                 ris.codice_categoria3 = ? AND   
  1971.                                                                 ris.codice_categoria4 = ? AND   
  1972.                                                                 ris.codice_categoria5 = ? AND                 
  1973.                                                                 ris.codice_articolo = '' AND 
  1974.                                                                 ris.marca = '' AND 
  1975.                                                                 ris.codice_dimensione1 = '' AND   
  1976.                                                                 ris.codice_dimensione2 = '' AND 
  1977.                                                                 ris.codice_dimensione3 = '' AND 
  1978.                                                                 ris.codice_dimensione4 = '' AND 
  1979.                                                                 ris.codice_dimensione5 = ''                                           
  1980.                                                 ) THEN 1 ELSE 0 END)";
  1981.                                 $stmt $connection->prepare($sql);
  1982.                                 $stmt->bindValue(1$ct8->getId());
  1983.                                 $stmt->bindValue(2$alberoLivello7->getId());
  1984.                                 $stmt->bindValue(3$user $user->getId() : null);
  1985.                                 $stmt->bindValue(4$alberoLivello7->getId());
  1986.                                 $stmt->bindValue(5$alberoLivello7->getId());
  1987.                                 $stmt->bindValue(6$posizioneAssoluta);
  1988.                                 $stmt->bindValue(7$ct1->getCodice());
  1989.                                 $stmt->bindValue(8$ct2->getCodice());
  1990.                                 $stmt->bindValue(9$ct3->getCodice());
  1991.                                 $stmt->bindValue(10$ct4->getCodice());
  1992.                                 $stmt->bindValue(11$ct5->getCodice());
  1993.                                 $stmt->execute();
  1994.                                 $posizioneAssoluta++;
  1995.                                 $sqlTipoOrdine "
  1996.                                 INSERT INTO associazione_albero_menu_prodotti_tipo_ordine (tipo_ordine_id, albero_menu_id) SELECT 
  1997.                                     DISTINCT(ass.tipo_ordine_id),
  1998.                                     (SELECT alb.id FROM albero_menu_prodotti alb WHERE " . ($usaCategorieAlbero "alb.categoria_albero_id" "alb.categoria_id") . " = " $ct8->getId() . " AND alb.parent_id_id = " $alberoLivello7->getId() . " AND alb.livello = 7 LIMIT 1)
  1999.                                 FROM associazione_articoli_tipo_ordine ass
  2000.                                     LEFT JOIN mappa_categorie_articoli mappa ON mappa.id = ass.mappa_categoria_articolo_id
  2001.                                     LEFT JOIN associazione_categorie_albero_mappa_categorie_articoli ass2 ON ass2.mappa_categoria_articolo_id = mappa.id 
  2002.                                 WHERE " . ($usaCategorieAlbero "ass2.categoria_albero1_id" "mappa.categoria1_id") . " = " $ct1->getId() . " AND " . ($usaCategorieAlbero "ass2.categoria_albero2_id" "mappa.categoria2_id") . " = " $ct2->getId() . " AND " . ($usaCategorieAlbero "ass2.categoria_albero3_id" "mappa.categoria3_id") . " = " $ct3->getId() . " AND " . ($usaCategorieAlbero "ass2.categoria_albero4_id" "mappa.categoria4_id") . " = " $ct4->getId() . " AND " . ($usaCategorieAlbero "ass2.categoria_albero5_id" "mappa.categoria5_id") . " = " $ct5->getId() . " AND " . ($usaCategorieAlbero "ass2.categoria_albero6_id" "mappa.categoria6_id") . " = " $ct6->getId() . " AND " . ($usaCategorieAlbero "ass2.categoria_albero7_id" "mappa.categoria7_id") . " = " $ct7->getId() . " AND " . ($usaCategorieAlbero "ass2.categoria_albero8_id" "mappa.categoria8_id") . " = " $ct8->getId();
  2003.                                 $stmt $connection->prepare($sqlTipoOrdine);
  2004.                                 $stmt->execute();
  2005.                                 $sql 'UPDATE albero_menu_prodotti SET has_child = 1 WHERE id = ?';
  2006.                                 $stmt $connection->prepare($sql);
  2007.                                 $stmt->bindValue(1$alberoLivello7->getId());
  2008.                                 $stmt->execute();
  2009.                                 if ($usaCategorieAlbero == '1') {
  2010.                                     $alberoLivello8 $repoAlbero->findOneBy(array('categoriaAlbero' => $ct8'parentId' => $alberoLivello7->getId(), 'livello' => '7'));
  2011.                                 } else {
  2012.                                     $alberoLivello8 $repoAlbero->findOneBy(array('categoria' => $ct8'parentId' => $alberoLivello7->getId(), 'livello' => '7'));
  2013.                                 }
  2014.                             }
  2015.                         }
  2016.                         if ($mappa['cat9']) {
  2017.                             /** @var Categorie $ct9 */
  2018.                             if ($usaCategorieAlbero == '1') {
  2019.                                 $ct9 $this->ricavaCategoriaAlbero($arrayCacheCategorie$mappa['cat9'])[$mappa['cat9']];
  2020.                             } else {
  2021.                                 $ct9 $this->ricavaCategoria($arrayCacheCategorie$mappa['cat9'])[$mappa['cat9']];
  2022.                             }
  2023.                             if ($alberoLivello8) {
  2024.                                 if ($usaCategorieAlbero == '1') {
  2025.                                     $alberoLivello9 $repoAlbero->findOneBy(array('categoriaAlbero' => $ct9'parentId' => $alberoLivello8->getId(), 'livello' => '8'));
  2026.                                 } else {
  2027.                                     $alberoLivello9 $repoAlbero->findOneBy(array('categoria' => $ct9'parentId' => $alberoLivello8->getId(), 'livello' => '8'));
  2028.                                 }
  2029.                             }
  2030.                             if (!$alberoLivello9 && $alberoLivello8) {
  2031.                                 $sql "INSERT INTO albero_menu_prodotti (" . ($usaCategorieAlbero "categoria_albero_id" "categoria_id") . ", parent_id_id, utente_id, livello, has_child, posizione, posizione_assoluta, data_creazione, data_modifica, risorse_presenti)
  2032.                                     VALUES (?, ?, ?, 8, 0, 
  2033.                                             CASE WHEN (SELECT COUNT(alb.id) FROM albero_menu_prodotti alb WHERE alb.parent_id_id = ?) IS NOT NULL 
  2034.                                                 THEN (SELECT COUNT(alb.id) FROM albero_menu_prodotti alb WHERE alb.parent_id_id = ?) ELSE 0 END,
  2035.                                         ?, NOW(), NOW(),
  2036.                                             CASE WHEN EXISTS(SELECT ris.id FROM risorse_anagrafiche ris WHERE 
  2037.                                                                 ris.codice_anagrafica = '' AND 
  2038.                                                                 ris.codice_categoria1 = ? AND 
  2039.                                                                 ris.codice_categoria2 = ? AND  
  2040.                                                                 ris.codice_categoria3 = ? AND   
  2041.                                                                 ris.codice_categoria4 = ? AND   
  2042.                                                                 ris.codice_categoria5 = ? AND                 
  2043.                                                                 ris.codice_articolo = '' AND 
  2044.                                                                 ris.marca = '' AND 
  2045.                                                                 ris.codice_dimensione1 = '' AND   
  2046.                                                                 ris.codice_dimensione2 = '' AND 
  2047.                                                                 ris.codice_dimensione3 = '' AND 
  2048.                                                                 ris.codice_dimensione4 = '' AND 
  2049.                                                                 ris.codice_dimensione5 = ''                                           
  2050.                                                 ) THEN 1 ELSE 0 END)";
  2051.                                 $stmt $connection->prepare($sql);
  2052.                                 $stmt->bindValue(1$ct9->getId());
  2053.                                 $stmt->bindValue(2$alberoLivello8->getId());
  2054.                                 $stmt->bindValue(3$user $user->getId() : null);
  2055.                                 $stmt->bindValue(4$alberoLivello8->getId());
  2056.                                 $stmt->bindValue(5$alberoLivello8->getId());
  2057.                                 $stmt->bindValue(6$posizioneAssoluta);
  2058.                                 $stmt->bindValue(7$ct1->getCodice());
  2059.                                 $stmt->bindValue(8$ct2->getCodice());
  2060.                                 $stmt->bindValue(9$ct3->getCodice());
  2061.                                 $stmt->bindValue(10$ct4->getCodice());
  2062.                                 $stmt->bindValue(11$ct5->getCodice());
  2063.                                 $stmt->execute();
  2064.                                 $posizioneAssoluta++;
  2065.                                 $sqlTipoOrdine "
  2066.                                 INSERT INTO associazione_albero_menu_prodotti_tipo_ordine (tipo_ordine_id, albero_menu_id) SELECT 
  2067.                                     DISTINCT(ass.tipo_ordine_id),
  2068.                                     (SELECT alb.id FROM albero_menu_prodotti alb WHERE " . ($usaCategorieAlbero "alb.categoria_albero_id" "alb.categoria_id") . " = " $ct9->getId() . " AND alb.parent_id_id = " $alberoLivello8->getId() . " AND alb.livello = 8 LIMIT 1)
  2069.                                 FROM associazione_articoli_tipo_ordine ass
  2070.                                     LEFT JOIN mappa_categorie_articoli mappa ON mappa.id = ass.mappa_categoria_articolo_id
  2071.                                     LEFT JOIN associazione_categorie_albero_mappa_categorie_articoli ass2 ON ass2.mappa_categoria_articolo_id = mappa.id 
  2072.                                 WHERE " . ($usaCategorieAlbero "ass2.categoria_albero1_id" "mappa.categoria1_id") . " = " $ct1->getId() . " AND " . ($usaCategorieAlbero "ass2.categoria_albero2_id" "mappa.categoria2_id") . " = " $ct2->getId() . " AND " . ($usaCategorieAlbero "ass2.categoria_albero3_id" "mappa.categoria3_id") . " = " $ct3->getId() . " AND " . ($usaCategorieAlbero "ass2.categoria_albero4_id" "mappa.categoria4_id") . " = " $ct4->getId() . " AND " . ($usaCategorieAlbero "ass2.categoria_albero5_id" "mappa.categoria5_id") . " = " $ct5->getId() . " AND " . ($usaCategorieAlbero "ass2.categoria_albero6_id" "mappa.categoria6_id") . " = " $ct6->getId() . " AND " . ($usaCategorieAlbero "ass2.categoria_albero7_id" "mappa.categoria7_id") . " = " $ct7->getId() . " AND " . ($usaCategorieAlbero "ass2.categoria_albero8_id" "mappa.categoria8_id") . " = " $ct8->getId() . " AND " . ($usaCategorieAlbero "ass2.categoria_albero9_id" "mappa.categoria9_id") . " = " $ct9->getId();
  2073.                                 $stmt $connection->prepare($sqlTipoOrdine);
  2074.                                 $stmt->execute();
  2075.                                 $sql 'UPDATE albero_menu_prodotti SET has_child = 1 WHERE id = ?';
  2076.                                 $stmt $connection->prepare($sql);
  2077.                                 $stmt->bindValue(1$alberoLivello8->getId());
  2078.                                 $stmt->execute();
  2079.                                 if ($usaCategorieAlbero == '1') {
  2080.                                     $alberoLivello9 $repoAlbero->findOneBy(array('categoriaAlbero' => $ct9'parentId' => $alberoLivello8->getId(), 'livello' => '8'));
  2081.                                 } else {
  2082.                                     $alberoLivello9 $repoAlbero->findOneBy(array('categoria' => $ct9'parentId' => $alberoLivello8->getId(), 'livello' => '8'));
  2083.                                 }
  2084.                             }
  2085.                         }
  2086.                         if ($mappa['cat10']) {
  2087.                             /** @var Categorie $ct10 */
  2088.                             if ($usaCategorieAlbero == '1') {
  2089.                                 $ct10 $this->ricavaCategoriaAlbero($arrayCacheCategorie$mappa['cat10'])[$mappa['cat10']];
  2090.                             } else {
  2091.                                 $ct10 $this->ricavaCategoria($arrayCacheCategorie$mappa['cat10'])[$mappa['cat10']];
  2092.                             }
  2093.                             if ($alberoLivello9) {
  2094.                                 if ($usaCategorieAlbero == '1') {
  2095.                                     $alberoLivello10 $repoAlbero->findOneBy(array('categoriaAlbero' => $ct10'parentId' => $alberoLivello9->getId(), 'livello' => '9'));
  2096.                                 } else {
  2097.                                     $alberoLivello10 $repoAlbero->findOneBy(array('categoria' => $ct10'parentId' => $alberoLivello9->getId(), 'livello' => '9'));
  2098.                                 }
  2099.                             }
  2100.                             if (!$alberoLivello10 && $alberoLivello9) {
  2101.                                 $sql "INSERT INTO albero_menu_prodotti (" . ($usaCategorieAlbero "categoria_albero_id" "categoria_id") . ", parent_id_id, utente_id, livello, has_child, posizione, posizione_assoluta, data_creazione, data_modifica, risorse_presenti)
  2102.                                     VALUES (?, ?, ?, 9, 0, 
  2103.                                             CASE WHEN (SELECT COUNT(alb.id) FROM albero_menu_prodotti alb WHERE alb.parent_id_id = ?) IS NOT NULL 
  2104.                                                 THEN (SELECT COUNT(alb.id) FROM albero_menu_prodotti alb WHERE alb.parent_id_id = ?) ELSE 0 END,
  2105.                                         ?, NOW(), NOW(),
  2106.                                             CASE WHEN EXISTS(SELECT ris.id FROM risorse_anagrafiche ris WHERE 
  2107.                                                                 ris.codice_anagrafica = '' AND 
  2108.                                                                 ris.codice_categoria1 = ? AND 
  2109.                                                                 ris.codice_categoria2 = ? AND  
  2110.                                                                 ris.codice_categoria3 = ? AND   
  2111.                                                                 ris.codice_categoria4 = ? AND   
  2112.                                                                 ris.codice_categoria5 = ? AND                 
  2113.                                                                 ris.codice_articolo = '' AND 
  2114.                                                                 ris.marca = '' AND 
  2115.                                                                 ris.codice_dimensione1 = '' AND   
  2116.                                                                 ris.codice_dimensione2 = '' AND 
  2117.                                                                 ris.codice_dimensione3 = '' AND 
  2118.                                                                 ris.codice_dimensione4 = '' AND 
  2119.                                                                 ris.codice_dimensione5 = ''                                           
  2120.                                                 ) THEN 1 ELSE 0 END)";
  2121.                                 $stmt $connection->prepare($sql);
  2122.                                 $stmt->bindValue(1$ct10->getId());
  2123.                                 $stmt->bindValue(2$alberoLivello9->getId());
  2124.                                 $stmt->bindValue(3$user $user->getId() : null);
  2125.                                 $stmt->bindValue(4$alberoLivello9->getId());
  2126.                                 $stmt->bindValue(5$alberoLivello9->getId());
  2127.                                 $stmt->bindValue(6$posizioneAssoluta);
  2128.                                 $stmt->bindValue(7$ct1->getCodice());
  2129.                                 $stmt->bindValue(8$ct2->getCodice());
  2130.                                 $stmt->bindValue(9$ct3->getCodice());
  2131.                                 $stmt->bindValue(10$ct4->getCodice());
  2132.                                 $stmt->bindValue(11$ct5->getCodice());
  2133.                                 $stmt->execute();
  2134.                                 $posizioneAssoluta++;
  2135.                                 $sqlTipoOrdine "
  2136.                                 INSERT INTO associazione_albero_menu_prodotti_tipo_ordine (tipo_ordine_id, albero_menu_id) SELECT 
  2137.                                     DISTINCT(ass.tipo_ordine_id),
  2138.                                     (SELECT alb.id FROM albero_menu_prodotti alb WHERE " . ($usaCategorieAlbero "alb.categoria_albero_id" "alb.categoria_id") . " = " $ct10->getId() . " AND alb.parent_id_id = " $alberoLivello9->getId() . " AND alb.livello = 9 LIMIT 1)
  2139.                                 FROM associazione_articoli_tipo_ordine ass
  2140.                                     LEFT JOIN mappa_categorie_articoli mappa ON mappa.id = ass.mappa_categoria_articolo_id
  2141.                                     LEFT JOIN associazione_categorie_albero_mappa_categorie_articoli ass2 ON ass2.mappa_categoria_articolo_id = mappa.id 
  2142.                                 WHERE " . ($usaCategorieAlbero "ass2.categoria_albero1_id" "mappa.categoria1_id") . " = " $ct1->getId() . " AND " . ($usaCategorieAlbero "ass2.categoria_albero2_id" "mappa.categoria2_id") . " = " $ct2->getId() . " AND " . ($usaCategorieAlbero "ass2.categoria_albero3_id" "mappa.categoria3_id") . " = " $ct3->getId() . " AND " . ($usaCategorieAlbero "ass2.categoria_albero4_id" "mappa.categoria4_id") . " = " $ct4->getId() . " AND " . ($usaCategorieAlbero "ass2.categoria_albero5_id" "mappa.categoria5_id") . " = " $ct5->getId() . " AND " . ($usaCategorieAlbero "ass2.categoria_albero6_id" "mappa.categoria6_id") . " = " $ct6->getId() . " AND " . ($usaCategorieAlbero "ass2.categoria_albero7_id" "mappa.categoria7_id") . " = " $ct7->getId() . " AND " . ($usaCategorieAlbero "ass2.categoria_albero8_id" "mappa.categoria8_id") . " = " $ct8->getId() . " AND " . ($usaCategorieAlbero "ass2.categoria_albero9_id" "mappa.categoria9_id") . " = " $ct9->getId() . " AND " . ($usaCategorieAlbero "ass2.categoria_albero10_id" "mappa.categoria10_id") . " = " $ct10->getId();
  2143.                                 $stmt $connection->prepare($sqlTipoOrdine);
  2144.                                 $stmt->execute();
  2145.                                 $sql 'UPDATE albero_menu_prodotti SET has_child = 1 WHERE id = ?';
  2146.                                 $stmt $connection->prepare($sql);
  2147.                                 $stmt->bindValue(1$alberoLivello9->getId());
  2148.                                 $stmt->execute();
  2149.                                 if ($usaCategorieAlbero == '1') {
  2150.                                     $alberoLivello10 $repoAlbero->findOneBy(array('categoriaAlbero' => $ct10'parentId' => $alberoLivello9->getId(), 'livello' => '9'));
  2151.                                 } else {
  2152.                                     $alberoLivello10 $repoAlbero->findOneBy(array('categoria' => $ct10'parentId' => $alberoLivello9->getId(), 'livello' => '9'));
  2153.                                 }
  2154.                             }
  2155.                         }
  2156.                     }
  2157.                 }
  2158.                 $inizio $inizio $batch;
  2159.             }
  2160.             $this->addFlash(
  2161.                 'notice',
  2162.                 'Albero menu rigenerato con successo in ' $time_elapsed_secs microtime(true) - $start ' seconds'
  2163.             );
  2164.             if($indicizzaAttributi == "1")
  2165.                 $this->generaIndicizzazioneAttributi($requesttrue);
  2166.             $this->servizi->ScriviRegistroAttivita($request->getClientIp(), ''true'Albero menu rigenerato con successo in ' $time_elapsed_secs microtime(true) - $start ' seconds'$user$collegamentoRnd'ImportazioneController''generaAlbero');
  2167.             return $this->render('default/index.html.twig', array('testo' => $debugRitorno));
  2168.         } catch (\PDOException $exx){
  2169.             $this->servizi->DebuggaException($exx'Errore genera albero: 'falsenull$collegamentoRnd'ImportazioneController''generaAlbero');
  2170.         } catch (\Exception|\Throwable $ex) {
  2171.             $this->servizi->DebuggaException($ex'Errore genera albero: 'falsenull$collegamentoRnd'ImportazioneController''generaAlbero');
  2172.         }
  2173.         return new Response('ERRORE');
  2174.     }
  2175.     function ricavaCategoria($arrayCache$idCategoria){
  2176.         if(!array_key_exists($idCategoria$arrayCache)){
  2177.             $cacheCategorie = new Caching_Categorie($this->servizi);
  2178.             $arrayCache[$idCategoria] = $cacheCategorie->getCategoria($idCategoria);
  2179.             //$this->servizi->doctrine->getRepository(Categorie::class)->find($idCategoria);
  2180.         }
  2181.         return $arrayCache;
  2182.     }
  2183.     function ricavaCategoriaAlbero($arrayCache$idCategoria){
  2184.         if(!array_key_exists($idCategoria$arrayCache)){
  2185.             $cacheCategorie = new Caching_CategorieAlbero($this->servizi);
  2186.             $arrayCache[$idCategoria] = $cacheCategorie->getCategoriaAlbero($idCategoria);
  2187.             //$this->servizi->doctrine->getRepository(Categorie::class)->find($idCategoria);
  2188.         }
  2189.         return $arrayCache;
  2190.     }
  2191.     function controllaEAggiungiSeInsistente($array$chiave)
  2192.     {
  2193.         if (!array_key_exists($chiave$array)) {
  2194.             $array[$chiave] = array();
  2195.         }
  2196.         return $array;
  2197.     }
  2198.     /**
  2199.      * @Route("/caricaRisorseAnagraficheValori", name="carica_risorse_anagrafiche_valori")
  2200.      */
  2201.     public function caricaRisorseAnagraficheValori(Request $request)
  2202.     {
  2203.         $collegamentoRnd $this->servizi->randomString2();
  2204.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  2205.             ini_set('max_execution_time'900);
  2206.             ini_set('memory_limit''4G');
  2207.             $start microtime(true);
  2208.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  2209.             $em $this->servizi->doctrine->getManager();
  2210.             $user $this->servizi->OttieniUtenteCorrente();
  2211.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  2212.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  2213.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  2214.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  2215.             $repoRisorse $this->servizi->doctrine->getRepository(RisorseAnagrafiche::class);
  2216.             $repoRisValori $this->servizi->doctrine->getRepository(RisorseAnagraficheColonneValori::class);
  2217.             $repoColonne $this->servizi->doctrine->getRepository(RisorseAnagraficheColonne::class);
  2218.             $errori "";
  2219.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /caricaRisorseAnagraficheValori --- Inizio l\' importazione delle scontistiche delle anagrafiche'null$collegamentoRnd'ImportazioneController''caricaRisorseAnagraficheValori');
  2220.             $root_path $pathFileBase "risorse_anagrafiche_valori.csv";
  2221.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  2222.             $contatore 0;
  2223.             $query_eseguite 0;
  2224.             $row 0;
  2225.             $batch_size 50;
  2226.             /*
  2227.              * Index    Campo
  2228.                 0    identificativo_unico_risorsa_anagrafica
  2229.                 1    nome_colonna
  2230.                 2    ordinatore
  2231.                 3    valore
  2232.                 4    tipo_dato
  2233.                 5    header_visualizzato
  2234.                 6    nascosto
  2235.                 7    operazione
  2236.                 8   direzione_ordinamento
  2237.                 9   ordinazione_ordinamento
  2238.              */
  2239.             $indici = array(
  2240.                 "identificativoUnicoRisorsaAnagrafica" => 0,
  2241.                 "nomeColonna" => 1,
  2242.                 "ordinatore" => 2,
  2243.                 "valore" => 3,
  2244.                 "tipoDato" => 4,
  2245.                 "headerVisualizzato" => 5,
  2246.                 "nascosto" => 6,
  2247.                 "operazione" => 7,
  2248.                 "direzioneOrdinamento" => 8,
  2249.                 "ordinazioneOrdinamento" => 9
  2250.             );
  2251.             $tipiDatoAutorizzati $this->servizi->RitornaArrayTipoDato();
  2252.             $tt = array();
  2253.             foreach ($tipiDatoAutorizzati as $key){
  2254.                 array_push($tt$key);
  2255.             }
  2256.             $tipiDatoAutorizzati $tt;
  2257.             try {
  2258.                 if (($handle fopen($root_path"r")) !== false) {
  2259.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  2260.                         if ($row == 0) {
  2261.                             $row 1;
  2262.                             continue;
  2263.                         }
  2264.                         if ($query_eseguite >= $batch_size) {
  2265.                             $contatore $contatore $row 1;
  2266.                             $row 1;
  2267.                             $query_eseguite 0;
  2268.                             $em->flush();
  2269.                             $em->clear();
  2270.                         }
  2271.                         if(in_array($data[$indici['tipoDato']], $tipiDatoAutorizzati)) {
  2272.                             $testataRisorsa $repoRisorse->findOneBy(array('identificativoUnico' => $data[$indici['identificativoUnicoRisorsaAnagrafica']]));
  2273.                             if ($testataRisorsa) {
  2274.                                 $risorsa $repoRisValori->findOneBy(array('risorsaAnagrafica' => $testataRisorsa'nomeColonna' => $data[$indici['nomeColonna']]));
  2275.                                 if ($data[$indici['operazione']] == 'E') {
  2276.                                     if ($risorsa) {
  2277.                                         $em->remove($risorsa);
  2278.                                         $query_eseguite++;
  2279.                                     }
  2280.                                 } else {
  2281.                                     //Identifico la testata Risorsa anagrafica
  2282.                                     //Identifico la colonna
  2283.                                     $colonna $repoColonne->findOneBy(array('nome' => $data[$indici['nomeColonna']], 'tipoDato' => $data[$indici['tipoDato']]));
  2284.                                     if (!$colonna) {
  2285.                                         $colonna = new RisorseAnagraficheColonne();
  2286.                                         $colonna->setNome($data[$indici['nomeColonna']]);
  2287.                                         $colonna->setTipoDato($data[$indici['tipoDato']]);
  2288.                                         $colonna->setHeaderVisualizzato($data[$indici['headerVisualizzato']] != '' $data[$indici['headerVisualizzato']] : $colonna->getNome());
  2289.                                         $colonna->setNascosto($data[$indici['nascosto']] != '0' true false);
  2290.                                         $colonna->setDataCreazione(new \DateTime());
  2291.                                         $colonna->setDataModifica(new \DateTime());
  2292.                                         if(count($data) > 8)
  2293.                                             $colonna->setDirezioneOrdinamento(strtolower($data[$indici['direzioneOrdinamento']] ? $data[$indici['direzioneOrdinamento']] : ''));
  2294.                                         if(count($data) > 9)
  2295.                                             $colonna->setOrdinazioneOrdinamento($data[$indici['ordinazioneOrdinamento']] != '' $data[$indici['ordinazioneOrdinamento']] : null);
  2296.                                         $em->persist($colonna);
  2297.                                         $query_eseguite++;
  2298.                                     } else {
  2299.                                         $colonna->setHeaderVisualizzato($data[$indici['headerVisualizzato']] != '' $data[$indici['headerVisualizzato']] : $colonna->getNome());
  2300.                                         $colonna->setNascosto($data[$indici['nascosto']] != '0' true false);
  2301.                                         $colonna->setDataModifica(new \DateTime());
  2302.                                         $em->persist($colonna);
  2303.                                         $query_eseguite++;
  2304.                                     }
  2305.                                     if (!$risorsa) {
  2306.                                         $risorsa = new RisorseAnagraficheColonneValori();
  2307.                                         $risorsa->setRisorsaAnagrafica($testataRisorsa);
  2308.                                         $risorsa->setColonna($colonna);
  2309.                                         $risorsa->setNomeColonna($data[$indici['nomeColonna']]);
  2310.                                         $risorsa->setOrdinatore($data[$indici['ordinatore']]);
  2311.                                         $risorsa->setValore(null);
  2312.                                         $risorsa->setValoreBoolean(null);
  2313.                                         $risorsa->setValoreDatetime(null);
  2314.                                         $risorsa->setValoreDecimale(null);
  2315.                                         $risorsa->setValoreInteger(null);
  2316.                                         switch ($colonna->getTipoDato())
  2317.                                         {
  2318.                                             case 'text':{
  2319.                                                 $risorsa->setValore($data[$indici['valore']]);
  2320.                                                 break;
  2321.                                             }
  2322.                                             case 'integer':{
  2323.                                                 $risorsa->setValoreInteger($data[$indici['valore']]);
  2324.                                                 break;
  2325.                                             }
  2326.                                             case 'decimal':{
  2327.                                                 $risorsa->setValoreDecimale($data[$indici['valore']]);
  2328.                                                 break;
  2329.                                             }
  2330.                                             case 'boolean':{
  2331.                                                 $risorsa->setValoreBoolean(boolval($data[$indici['valore']]));
  2332.                                                 break;
  2333.                                             }
  2334.                                             case 'datetime':{
  2335.                                                 $risorsa->setValoreDatetime(\DateTime::createFromFormat('Y-m-d H:i:s'$data[$indici['valore']]));
  2336.                                                 break;
  2337.                                             }
  2338.                                             case 'date':{
  2339.                                                 $dat \DateTime::createFromFormat('Y-m-d'$data[$indici['valore']]);
  2340.                                                 $dat->setTime(000);
  2341.                                                 $risorsa->setValoreDatetime($dat);
  2342.                                                 break;
  2343.                                             }
  2344.                                             case 'time':{
  2345.                                                 $dat \DateTime::createFromFormat('H:i:s'$data[$indici['valore']]);
  2346.                                                 $dat->setDate(189900);
  2347.                                                 $risorsa->setValoreDatetime($dat);
  2348.                                                 break;
  2349.                                             }
  2350.                                         }
  2351.                                         $risorsa->setDataModifica(new \DateTime());
  2352.                                         $risorsa->setDataCreazione(new \DateTime());
  2353.                                         $em->persist($risorsa);
  2354.                                         $query_eseguite++;
  2355.                                     } else {
  2356.                                         $risorsa->setOrdinatore($data[$indici['ordinatore']]);
  2357.                                         $risorsa->setValore(null);
  2358.                                         $risorsa->setValoreBoolean(null);
  2359.                                         $risorsa->setValoreDatetime(null);
  2360.                                         $risorsa->setValoreDecimale(null);
  2361.                                         $risorsa->setValoreInteger(null);
  2362.                                         switch ($colonna->getTipoDato())
  2363.                                         {
  2364.                                             case 'text':{
  2365.                                                 $risorsa->setValore($data[$indici['valore']]);
  2366.                                                 break;
  2367.                                             }
  2368.                                             case 'integer':{
  2369.                                                 $risorsa->setValoreInteger($data[$indici['valore']]);
  2370.                                                 break;
  2371.                                             }
  2372.                                             case 'decimal':{
  2373.                                                 $risorsa->setValoreDecimale($data[$indici['valore']]);
  2374.                                                 break;
  2375.                                             }
  2376.                                             case 'boolean':{
  2377.                                                 $risorsa->setValoreBoolean(boolval($data[$indici['valore']]));
  2378.                                                 break;
  2379.                                             }
  2380.                                             case 'datetime':{
  2381.                                                 $risorsa->setValoreDatetime(\DateTime::createFromFormat('Y-m-d H:i:s'$data[$indici['valore']]));
  2382.                                                 break;
  2383.                                             }
  2384.                                             case 'date':{
  2385.                                                 $dat \DateTime::createFromFormat('Y-m-d'$data[$indici['valore']]);
  2386.                                                 $dat->setTime(000);
  2387.                                                 $risorsa->setValoreDatetime($dat);
  2388.                                                 break;
  2389.                                             }
  2390.                                             case 'time':{
  2391.                                                 $dat \DateTime::createFromFormat('H:i:s'$data[$indici['valore']]);
  2392.                                                 $dat->setDate(189900);
  2393.                                                 $risorsa->setValoreDatetime($dat);
  2394.                                                 break;
  2395.                                             }
  2396.                                         }
  2397.                                         $risorsa->setDataModifica(new \DateTime());
  2398.                                         $em->persist($risorsa);
  2399.                                         $query_eseguite++;
  2400.                                     }
  2401.                                 }
  2402.                             } else {
  2403.                                 $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Risorsa anagrafica con identificativo univoco: ' $data[$indici['identificativoUnicoRisorsaAnagrafica']] . ' non trovata!'$user$collegamentoRnd'ImportazioneController''caricaRisorseAnagraficheValori');
  2404.                             }
  2405.                         }else{
  2406.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Tipo dato: ' $data[$indici['tipoDato']] . ' non riconosciuto!'null$collegamentoRnd'ImportazioneController''caricaRisorseAnagraficheValori');
  2407.                         }
  2408.                         $row++;
  2409.                         $em->flush();
  2410.                     }
  2411.                     $em->flush();
  2412.                     $em->clear();
  2413.                 }else{
  2414.                     $errori .= "Impossibile aprire il file!";
  2415.                 }
  2416.                 $row $contatore $row;
  2417.                 if ($errori == "") {
  2418.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds' $rownull$collegamentoRnd'ImportazioneController''caricaRisorseAnagraficheValori');
  2419.                     return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  2420.                 } else {
  2421.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), var_export($erroritrue), false'Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds' $rownull$collegamentoRnd'ImportazioneController''caricaRisorseAnagraficheValori');
  2422.                     return new Response('Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row "</br>Lista Errori:</br>" $errori);
  2423.                 }
  2424.             } catch (\Exception|\Throwable $ex) {
  2425.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), $ex->getTraceAsString(), false'Errore importazione: ' $ex->getMessage(), null$collegamentoRnd'ImportazioneController''caricaRisorseAnagraficheValori');
  2426.                 return new Response('Errore importazione (RIGA: ' $contatore ') : ' $ex->getMessage());
  2427.             }
  2428.         } else {
  2429.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null$collegamentoRnd'ImportazioneController''caricaRisorseAnagraficheValori');
  2430.             return new Response("ERRORE PERMESSO");
  2431.         }
  2432.     } //OK
  2433.     /**
  2434.      * @Route("/caricaAssociazioniArticoliClienti/{svuota}/{batch}/{iterazione}", name="carica_rassociazione_articoli_clienti", defaults={"svuota"="0", "batch"="0", "iterazione"="0"})
  2435.      */
  2436.     public function caricaAssociazioneArticoliClienti(Request $request$svuota$batch$iterazione)
  2437.     {
  2438.         $collegamentoRnd $this->servizi->randomString2();
  2439.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  2440.             ini_set('max_execution_time', -1);
  2441.             ini_set('memory_limit''4G');
  2442.             $start microtime(true);
  2443.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  2444.             $em $this->servizi->doctrine->getManager();
  2445.             $user $this->servizi->OttieniUtenteCorrente();
  2446.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  2447.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  2448.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  2449.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  2450.             $repoArticoli $this->servizi->doctrine->getRepository(Articoli::class);
  2451.             $repoClienti $this->servizi->doctrine->getRepository(User::class);
  2452.             $repoAnagrafica $this->servizi->doctrine->getRepository(Anagrafiche::class);
  2453.             $repoCategoria $this->servizi->doctrine->getRepository(Categorie::class);
  2454.             $repoVarianti $this->servizi->doctrine->getRepository(Varianti::class);
  2455.             $repoAssociazione $this->servizi->doctrine->getRepository(AssociazioneArticoliCliente::class);
  2456.             $errori "";
  2457.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /caricaAssociazioniArticoliClienti/' $svuota ' --- Inizio l\' importazione delle associazione articoli clienti'null$collegamentoRnd'ImportazioneController''caricaAssociazioniArticoliClienti');
  2458.             if($svuota == "1"){
  2459.                 $connection $this->servizi->doctrine->getConnection();
  2460.                 $connection->beginTransaction();
  2461.                 try {
  2462.                     $connection->query("SET FOREIGN_KEY_CHECKS=0;");
  2463.                     $connection->executeUpdate("TRUNCATE `associazione_articoli_cliente`;");
  2464.                     $connection->query("SET FOREIGN_KEY_CHECKS=1;");
  2465.                     $connection->commit();
  2466.                 }catch (\Exception|\Throwable $ex){
  2467.                     $this->servizi->DebuggaException($ex"Errore pulizia associazione articoli cliente DB"falsenull$collegamentoRnd'ImportazioneController''caricaAssociazioniArticoliClienti' );
  2468.                 }
  2469.             }
  2470.             $root_path $pathFileBase "associazione_articoli_clienti.csv";
  2471.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  2472.             $contatore 0;
  2473.             $query_eseguite 0;
  2474.             $row 0;
  2475.             $batch_size 50;
  2476.             /*
  2477.              * Index    Campo
  2478.                 0    codice_cliente
  2479.                 1    codice_articolo
  2480.                 2    codice_cat1
  2481.                 3    codice_cat2
  2482.                 4    codice_cat3
  2483.                 5    codice_cat4
  2484.                 6    codice_cat5
  2485.                 7    marca
  2486.                 8    codice_variante
  2487.                 9    ass_codice
  2488.                 10    ass_nome
  2489.                 11    ass_descrizione
  2490.                 12    ass_marca
  2491.                 13    ass_immagine_dimensione_1
  2492.                 14    ass_codice_dimensione_1
  2493.                 15    ass_descrizione_dimensione_1
  2494.                 16    ass_immagine_dimensione_2
  2495.                 17    ass_codice_dimensione_2
  2496.                 18    ass_descrizione_dimensione_2
  2497.                 19    ass_immagine_dimensione_3
  2498.                 20    ass_codice_dimensione_3
  2499.                 21    ass_descrizione_dimensione_3
  2500.                 22    ass_immagine_dimensione_4
  2501.                 23    ass_codice_dimensione_4
  2502.                 24    ass_descrizione_dimensione_4
  2503.                 25    ass_immagine_dimensione_5
  2504.                 26    ass_codice_dimensione_5
  2505.                 27    ass_descrizione_dimensione_5
  2506.                 28  operazione
  2507.              */
  2508.             $indici = array(
  2509.                 "codiceCliente" => 0,
  2510.                 "codiceArticolo" => 1,
  2511.                 "cat1" => 2,
  2512.                 "cat2" => 3,
  2513.                 "cat3" => 4,
  2514.                 "cat4" => 5,
  2515.                 "cat5" => 6,
  2516.                 "marca" => 7,
  2517.                 'codiceVariante' => 8,
  2518.                 'assCodice' => 9,
  2519.                 'assNome' => 10,
  2520.                 'assDescrizione' => 11,
  2521.                 'assMarca' => 12,
  2522.                 'assImmagineDimensione1' => 13,
  2523.                 'assCodiceDimensione1' => 14,
  2524.                 'assDescrizioneDimensione1' => 15,
  2525.                 'assImmagineDimensione2' => 16,
  2526.                 'assCodiceDimensione2' => 17,
  2527.                 'assDescrizioneDimensione2' => 18,
  2528.                 'assImmagineDimensione3' => 19,
  2529.                 'assCodiceDimensione3' => 20,
  2530.                 'assDescrizioneDimensione3' => 21,
  2531.                 'assImmagineDimensione4' => 22,
  2532.                 'assCodiceDimensione4' => 23,
  2533.                 'assDescrizioneDimensione4' => 24,
  2534.                 'assImmagineDimensione5' => 25,
  2535.                 'assCodiceDimensione5' => 26,
  2536.                 'assDescrizioneDimensione5' => 27,
  2537.                 'operazione' => 28
  2538.             );
  2539.             $righeDaSaltareSeBatch 0;
  2540.             if($batch != && $iterazione != 0){
  2541.                 $rrr $batch $iterazione//Esempio iterazione = 1 batch = 5000 = 5000
  2542.                 $righeDaSaltareSeBatch $rrr $batch;
  2543.             }
  2544.             try {
  2545.                 if (($handle fopen($root_path"r")) !== false) {
  2546.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  2547.                         //Se attivata la funzionalità batch salto le righe che non devo importare
  2548.                         if($righeDaSaltareSeBatch 0){
  2549.                             if (($contatore $row) < $righeDaSaltareSeBatch){
  2550.                                 $contatore++;
  2551.                                 continue;
  2552.                             }
  2553.                         }
  2554.                         if($righeDaSaltareSeBatch && ($contatore $row $righeDaSaltareSeBatch) > $batch ){
  2555.                             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true"Batch completato: Iterazione: " strval($iterazione) . " --- Batch: " strval(($batch)) . " ( Da riga:" strval($righeDaSaltareSeBatch 1) . " a riga: " strval(($contatore $row)) . " )"null$collegamentoRnd'ImportazioneController''caricaAssociazioniArticoliClienti');
  2556.                             break;
  2557.                         }
  2558.                         if ($row == 0) {
  2559.                             $row 1;
  2560.                             continue;
  2561.                         }
  2562.                         if ($query_eseguite >= $batch_size) {
  2563.                             $contatore $contatore $row 1;
  2564.                             $row 1;
  2565.                             $query_eseguite 0;
  2566.                             $em->flush();
  2567.                             $em->clear();
  2568.                         }
  2569.                         $cliente $repoClienti->findOneBy(array('codiceCliente' => $data[$indici['codiceCliente']]));
  2570.                         $anagrafica $repoAnagrafica->findOneBy(array('codice' => $data[$indici['codiceCliente']]));
  2571.                         $articolo null;
  2572.                         if ($data[$indici['codiceArticolo']] != '') {
  2573.                             $articolo $repoArticoli->findOneBy(array('codice' => $data[$indici['codiceArticolo']]));
  2574.                         }
  2575.                         if ($articolo) {
  2576.                             $cat1 $repoCategoria->findOneBy(array('codice' => $data[$indici['cat1']]));
  2577.                             $cat2 $repoCategoria->findOneBy(array('codice' => $data[$indici['cat2']]));
  2578.                             $cat3 $repoCategoria->findOneBy(array('codice' => $data[$indici['cat3']]));
  2579.                             $cat4 $repoCategoria->findOneBy(array('codice' => $data[$indici['cat4']]));
  2580.                             $cat5 $repoCategoria->findOneBy(array('codice' => $data[$indici['cat5']]));
  2581.                             $mappa $this->servizi->ritornaMappaCategoriaArticoliSeInserita($articolo$cat1$cat2$cat3$cat4$data[$indici['marca']], $cat5);
  2582.                             $variante $repoVarianti->findOneBy(array('mappa' => $mappa'codiceVariante' => $data[$indici['codiceVariante']]));
  2583.                             $qb $repoAssociazione->createQueryBuilder('ass')
  2584.                                 ->where('ass.mappaCategoriaArticoli = :mappa OR ass.articolo = :art')
  2585.                                 ->setParameter('mappa'$mappa)->setParameter('art'$articolo);
  2586.                             if ($variante) {
  2587.                                 $qb $qb->andWhere('ass.variante = :variante')->setParameter('variante'$variante);
  2588.                             } else {
  2589.                                 $qb $qb->andWhere('ass.variante IS NULL');
  2590.                             }
  2591.                             if ($cliente) {
  2592.                                 $qb $qb->andWhere('ass.cliente = :cliente')->setParameter('cliente'$cliente);
  2593.                             } else {
  2594.                                 $qb $qb->andWhere('ass.cliente IS NULL');
  2595.                             }
  2596.                             if ($anagrafica) {
  2597.                                 $qb $qb->andWhere('ass.anagrafica = :anagrafica')->setParameter('anagrafica'$anagrafica);
  2598.                             } else {
  2599.                                 $qb $qb->andWhere('ass.anagrafica IS NULL');
  2600.                             }
  2601.                             if($data[$indici['codiceArticolo']] != ''){
  2602.                                 $qb $qb->andWhere('ass.codiceArticoloOriginale = :codOr')->setParameter('codOr'$data[$indici['codiceArticolo']]);
  2603.                             }else{
  2604.                                 $qb $qb->andWhere("ass.codiceArticoloOriginale IS NULL OR ass.codiceArticoloOriginale = ''");
  2605.                             }
  2606.                             if($data[$indici['codiceCliente']] != ''){
  2607.                                 $qb $qb->andWhere('ass.codiceAnagrafica = :codAna')->setParameter('codAna'$data[$indici['codiceCliente']]);
  2608.                             }else{
  2609.                                 $qb $qb->andWhere("ass.codiceAnagrafica IS NULL OR ass.codiceAnagrafica = ''");
  2610.                             }
  2611.                             $ritorno $qb->setMaxResults(1)->getQuery()->getResult();
  2612.                             $associazioneArticoloCliente null;
  2613.                             if (count($ritorno) > 0) {
  2614.                                 $associazioneArticoloCliente $ritorno[0];
  2615.                             }
  2616.                             if ($data[$indici['operazione']] == 'E') {
  2617.                                 if ($associazioneArticoloCliente != null) {
  2618.                                     $em->remove($associazioneArticoloCliente);
  2619.                                     $query_eseguite++;
  2620.                                 }
  2621.                             } else {
  2622.                                 if ($associazioneArticoloCliente == null) {
  2623.                                     $associazioneArticoloCliente = new AssociazioneArticoliCliente();
  2624.                                     $associazioneArticoloCliente->setMappaCategoriaArticoli($mappa);
  2625.                                     $associazioneArticoloCliente->setArticolo($articolo);
  2626.                                     $associazioneArticoloCliente->setVariante($variante);
  2627.                                     $associazioneArticoloCliente->setCliente($cliente);
  2628.                                     $associazioneArticoloCliente->setAnagrafica($anagrafica);
  2629.                                     $associazioneArticoloCliente->setCodiceAnagrafica($data[$indici['codiceCliente']]);
  2630.                                     $associazioneArticoloCliente->setCodiceArticoloOriginale($data[$indici['codiceArticolo']]);
  2631.                                     $associazioneArticoloCliente->setDataCreazione(new \DateTime());
  2632.                                     $associazioneArticoloCliente->setMarca($data[$indici['marca']]);
  2633.                                 }
  2634.                                 $associazioneArticoloCliente->setNome($data[$indici['assNome']]);
  2635.                                 $associazioneArticoloCliente->setCodice($data[$indici['assCodice']]);
  2636.                                 $associazioneArticoloCliente->setMarca($data[$indici['assMarca']]);
  2637.                                 $associazioneArticoloCliente->setDescrizione($data[$indici['assDescrizione']]);
  2638.                                 $associazioneArticoloCliente->setImmagineDimensione1($data[$indici['assImmagineDimensione1']]);
  2639.                                 $associazioneArticoloCliente->setCodiceDimensione1($data[$indici['assCodiceDimensione1']]);
  2640.                                 $associazioneArticoloCliente->setDescrizioneDimensione1($data[$indici['assDescrizioneDimensione1']]);
  2641.                                 $associazioneArticoloCliente->setImmagineDimensione2($data[$indici['assImmagineDimensione2']]);
  2642.                                 $associazioneArticoloCliente->setCodiceDimensione2($data[$indici['assCodiceDimensione2']]);
  2643.                                 $associazioneArticoloCliente->setDescrizioneDimensione2($data[$indici['assDescrizioneDimensione2']]);
  2644.                                 $associazioneArticoloCliente->setImmagineDimensione3($data[$indici['assImmagineDimensione3']]);
  2645.                                 $associazioneArticoloCliente->setCodiceDimensione3($data[$indici['assCodiceDimensione3']]);
  2646.                                 $associazioneArticoloCliente->setDescrizioneDimensione3($data[$indici['assDescrizioneDimensione3']]);
  2647.                                 $associazioneArticoloCliente->setImmagineDimensione4($data[$indici['assImmagineDimensione4']]);
  2648.                                 $associazioneArticoloCliente->setCodiceDimensione4($data[$indici['assCodiceDimensione4']]);
  2649.                                 $associazioneArticoloCliente->setDescrizioneDimensione4($data[$indici['assDescrizioneDimensione4']]);
  2650.                                 $associazioneArticoloCliente->setImmagineDimensione5($data[$indici['assImmagineDimensione5']]);
  2651.                                 $associazioneArticoloCliente->setCodiceDimensione5($data[$indici['assCodiceDimensione5']]);
  2652.                                 $associazioneArticoloCliente->setDescrizioneDimensione5($data[$indici['assDescrizioneDimensione5']]);
  2653.                                 $associazioneArticoloCliente->setDataModifica(new \DateTime());
  2654.                                 $em->persist($associazioneArticoloCliente);
  2655.                                 $query_eseguite++;
  2656.                             }
  2657.                         } else {
  2658.                             $errori .= ("RIGA: " . ($contatore $row) . ' -- Articolo con codice ' $data[$indici['codiceArticolo']] . ' non trovato!\n');
  2659.                         }
  2660.                         $row++;
  2661.                     }
  2662.                     $em->flush();
  2663.                     $em->clear();
  2664.                 }else{
  2665.                     $errori .= "Impossibile aprire il file!";
  2666.                 }
  2667.                 $row $contatore $row;
  2668.                 if ($errori == "") {
  2669.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds' $rownull$collegamentoRnd'ImportazioneController''caricaAssociazioniArticoliClienti');
  2670.                     return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  2671.                 } else {
  2672.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), var_export($erroritrue), false'Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds' $rownull$collegamentoRnd'ImportazioneController''caricaAssociazioniArticoliClienti');
  2673.                     return new Response('Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row "</br>Lista Errori:</br>" $errori);
  2674.                 }
  2675.             } catch (\Exception|\Throwable $ex) {
  2676.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), $ex->getTraceAsString(), false'Errore importazione: ' $ex->getMessage(), null$collegamentoRnd'ImportazioneController''caricaAssociazioniArticoliClienti');
  2677.                 return new Response('Errore importazione (RIGA: ' $contatore ') : ' $ex->getMessage());
  2678.             }
  2679.         }else {
  2680.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null$collegamentoRnd'ImportazioneController''caricaAssociazioniArticoliClienti');
  2681.             return new Response("ERRORE PERMESSO");
  2682.         }
  2683.     }
  2684.     /**
  2685.      * @Route("/caricaDisponibilita/{batch}/{iterazione}", name="carica_disponibilita", defaults={"batch"="0", "iterazione"="0"})
  2686.      */
  2687.     public function caricaDisponibilita(Request $request$batch$iterazione)
  2688.     {
  2689.         $collegamentoRnd $this->servizi->randomString2();
  2690.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  2691.             ini_set('max_execution_time', -1);
  2692.             ini_set('memory_limit''4G');
  2693.             $start microtime(true);
  2694.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  2695.             $em $this->servizi->doctrine->getManager();
  2696.             $user $this->servizi->OttieniUtenteCorrente();
  2697.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  2698.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  2699.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  2700.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  2701.             $repoArticoli $this->servizi->doctrine->getRepository(Articoli::class);
  2702.             $repoCategoria $this->servizi->doctrine->getRepository(Categorie::class);
  2703.             $repoVarianti $this->servizi->doctrine->getRepository(Varianti::class);
  2704.             $errori "";
  2705.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /caricaDisponibilita --- Inizio l\' importazione delle disponibilita articoli'null$collegamentoRnd'ImportazioneController''caricaDisponibilita');
  2706.             $root_path $pathFileBase "disponibilita.csv";
  2707.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  2708.             $contatore 0;
  2709.             $query_eseguite 0;
  2710.             $row 0;
  2711.             $batch_size 50;
  2712.             /*
  2713.              * Index    Campo
  2714.                 0    codice_articolo
  2715.                 1    codice_cat1
  2716.                 2    codice_cat2
  2717.                 3    codice_cat3
  2718.                 4    codice_cat4
  2719.                 5    codice_cat5
  2720.                 6    marca
  2721.                 7    codice_variante
  2722.                 8    disponibilita
  2723.                 9    ordini_fornitori
  2724.                 10    operazione
  2725.              */
  2726.             $indici = array(
  2727.                 "codiceArticolo" => 0,
  2728.                 "cat1" => 1,
  2729.                 "cat2" => 2,
  2730.                 "cat3" => 3,
  2731.                 "cat4" => 4,
  2732.                 "cat5" => 5,
  2733.                 "marca" => 6,
  2734.                 "codiceVariante" => 7,
  2735.                 'disponibilita' => 8,
  2736.                 'ordiniFornitori' => 9,
  2737.                 'operazione' => 10
  2738.             );
  2739.             $righeDaSaltareSeBatch 0;
  2740.             if($batch != && $iterazione != 0){
  2741.                 $rrr $batch $iterazione//Esempio iterazione = 1 batch = 5000 = 5000
  2742.                 $righeDaSaltareSeBatch $rrr $batch;
  2743.             }
  2744.             try {
  2745.                 if (($handle fopen($root_path"r")) !== false) {
  2746.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  2747.                         //Se attivata la funzionalità batch salto le righe che non devo importare
  2748.                         if($righeDaSaltareSeBatch 0){
  2749.                             if (($contatore $row) < $righeDaSaltareSeBatch){
  2750.                                 $contatore++;
  2751.                                 continue;
  2752.                             }
  2753.                         }
  2754.                         if($righeDaSaltareSeBatch && ($contatore $row $righeDaSaltareSeBatch) > $batch ){
  2755.                             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true"Batch completato: Iterazione: " strval($iterazione) . " --- Batch: " strval(($batch)) . " ( Da riga:" strval($righeDaSaltareSeBatch 1) . " a riga: " strval(($contatore $row)) . " )"null$collegamentoRnd'ImportazioneController''caricaDisponibilita');
  2756.                             break;
  2757.                         }
  2758.                         if ($row == 0) {
  2759.                             $row 1;
  2760.                             continue;
  2761.                         }
  2762.                         if ($query_eseguite >= $batch_size) {
  2763.                             $contatore $contatore $row 1;
  2764.                             $row 1;
  2765.                             $query_eseguite 0;
  2766.                             $em->flush();
  2767.                             $em->clear();
  2768.                         }
  2769.                         $articolo null;
  2770.                         if ($data[$indici['codiceArticolo']] != '') {
  2771.                             $articolo $repoArticoli->findOneBy(array('codice' => $data[$indici['codiceArticolo']]));
  2772.                         }
  2773.                         if ($articolo) {
  2774.                             $cat1 null$cat2 null$cat3 null$cat4 null$cat5 null;
  2775.                             if($data[$indici['cat1']] != '')
  2776.                                 $cat1 $repoCategoria->findOneBy(array('codice' => $data[$indici['cat1']]));
  2777.                             if($data[$indici['cat2']] != '')
  2778.                                 $cat2 $repoCategoria->findOneBy(array('codice' => $data[$indici['cat2']]));
  2779.                             if($data[$indici['cat3']] != '')
  2780.                                 $cat3 $repoCategoria->findOneBy(array('codice' => $data[$indici['cat3']]));
  2781.                             if($data[$indici['cat4']] != '')
  2782.                                 $cat4 $repoCategoria->findOneBy(array('codice' => $data[$indici['cat4']]));
  2783.                             if($data[$indici['cat5']] != '')
  2784.                                 $cat5 $repoCategoria->findOneBy(array('codice' => $data[$indici['cat5']]));
  2785.                             $mappa $this->servizi->ritornaMappaCategoriaArticoliSeInserita($articolo$cat1$cat2$cat3$cat4$data[$indici['marca']], $cat5);
  2786.                             $variante null;
  2787.                             if($data[$indici['codiceVariante']] != '')
  2788.                                 $variante $repoVarianti->findOneBy(array('mappa' => $mappa'codiceVariante' => $data[$indici['codiceVariante']]));
  2789.                             if($mappa){
  2790.                                 $mappa->setDisponibile(str_replace(',''.'$data[$indici['disponibilita']]));
  2791.                                 $mappa->setOrdiniFornitori(str_replace(',''.'$data[$indici['ordiniFornitori']]));
  2792.                                 $em->persist($mappa);
  2793.                                 $query_eseguite++;
  2794.                             }else{
  2795.                                 $errori .= ("RIGA: " . ($contatore $row) . ' -- Mappa con codice articolo: ' $data[$indici['codiceArticolo']] . ' non trovato!\n');
  2796.                             }
  2797.                         } else {
  2798.                             $errori .= ("RIGA: " . ($contatore $row) . ' -- Articolo con codice ' $data[$indici['codiceArticolo']] . ' non trovato!\n');
  2799.                         }
  2800.                         $row++;
  2801.                     }
  2802.                     $em->flush();
  2803.                     $em->clear();
  2804.                 }else{
  2805.                     $errori .= "Impossibile aprire il file!";
  2806.                 }
  2807.                 $row $contatore $row;
  2808.                 if ($errori == "") {
  2809.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds' $rownull$collegamentoRnd'ImportazioneController''caricaDisponibilita');
  2810.                     return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  2811.                 } else {
  2812.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), var_export($erroritrue), false'Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds' $rownull$collegamentoRnd'ImportazioneController''caricaDisponibilita');
  2813.                     return new Response('Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row "</br>Lista Errori:</br>" $errori);
  2814.                 }
  2815.             } catch (\Exception|\Throwable $ex) {
  2816.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), $ex->getTraceAsString(), false'Errore importazione: ' $ex->getMessage(), null$collegamentoRnd'ImportazioneController''caricaDisponibilita');
  2817.                 return new Response('Errore importazione (RIGA: ' $contatore ') : ' $ex->getMessage());
  2818.             }
  2819.         }else {
  2820.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null$collegamentoRnd'ImportazioneController''caricaDisponibilita');
  2821.             return new Response("ERRORE PERMESSO");
  2822.         }
  2823.     }
  2824.     /**
  2825.      * @Route("/caricaRisorseAnagrafiche/{svuota}", name="carica_risorse_anagrafiche", defaults={"svuota"="0"})
  2826.      */
  2827.     public function caricaRisorseAnagrafiche(Request $request$svuota)
  2828.     {
  2829.         $collegamentoRnd $this->servizi->randomString2();
  2830.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  2831.             ini_set('max_execution_time'900);
  2832.             ini_set('memory_limit''4G');
  2833.             $start microtime(true);
  2834.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  2835.             $em $this->servizi->doctrine->getManager();
  2836.             $user $this->servizi->OttieniUtenteCorrente();
  2837.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  2838.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  2839.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  2840.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  2841.             $repoRisorse $this->servizi->doctrine->getRepository(RisorseAnagrafiche::class);
  2842.             $errori "";
  2843.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /caricaRisorseAnagrafiche/' $svuota ' --- Inizio l\' importazione delle scontistiche delle anagrafiche'null$collegamentoRnd'ImportazioneController''caricaRisorseAnagrafiche');
  2844.             if($svuota == '1'){
  2845.                 $this->servizi->doctrine->getConnection()->executeQuery('TRUNCATE TABLE risorse_anagrafiche;');
  2846.                 $this->servizi->doctrine->getConnection()->executeQuery('TRUNCATE TABLE risorse_anagrafiche_colonne;');
  2847.                 $this->servizi->doctrine->getConnection()->executeQuery('TRUNCATE TABLE risorse_anagrafiche_colonne_valori;');
  2848.             }
  2849.             $root_path $pathFileBase "risorse_anagrafiche.csv";
  2850.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  2851.             $contatore 0;
  2852.             $query_eseguite 0;
  2853.             $row 0;
  2854.             $batch_size 50;
  2855.             /*
  2856.              * Index    Campo
  2857.                 0    codice_anagrafica
  2858.                 1    tipo_risorsa
  2859.                 2    path_file
  2860.                 3    nome_file
  2861.                 4    identificativo_unico_risorsa
  2862.                 5    categoria
  2863.                 6    operazione
  2864.                 7   visibile a cliente
  2865.                 8   dataRisorsa
  2866.                 9    codice_categoria1
  2867.                 10    codice_categoria2
  2868.                 11    codice_categoria3
  2869.                 12    codice_categoria4
  2870.                 13    codice_categoria5
  2871.                 14    codice_articolo
  2872.                 15    marca
  2873.                 16    codice_dimensione1
  2874.                 17    codice_dimensione2
  2875.                 18    codice_dimensione3
  2876.                 19    codice_dimensione4
  2877.                 20    codice_dimensione5
  2878.                 21 chiave ricerca esterno
  2879.                 22  recupera_con_webservice
  2880.              */
  2881.             $indici = array(
  2882.                 "codiceAnagrafica" => 0,
  2883.                 "tipoRisorsa" => 1,
  2884.                 "pathFile" => 2,
  2885.                 "nomeFile" => 3,
  2886.                 "identificativoUnicoRisorsa" => 4,
  2887.                 "categoria" => 5,
  2888.                 "operazione" => 6,
  2889.                 "visibileACliente" => 7,
  2890.                 'dataRisorsa' => 8,
  2891.                 'codiceCategoria1' => 9,
  2892.                 'codiceCategoria2' => 10,
  2893.                 'codiceCategoria3' => 11,
  2894.                 'codiceCategoria4' => 12,
  2895.                 'codiceCategoria5' => 13,
  2896.                 'codiceArticolo' => 14,
  2897.                 'marca' => 15,
  2898.                 'codiceDimensione1' => 16,
  2899.                 'codiceDimensione2' => 17,
  2900.                 'codiceDimensione3' => 18,
  2901.                 'codiceDimensione4' => 19,
  2902.                 'codiceDimensione5' => 20,
  2903.                 'chiaveRicercaEsterna' => 21,
  2904.                 'recuperaConWebservice' => 22
  2905.             );
  2906.             $tipiRisorsaAutorizzati $this->servizi->RitornaArrayTipoRisorsa();
  2907.             $tt = array();
  2908.             foreach ($tipiRisorsaAutorizzati as $key) {
  2909.                 array_push($tt$key);
  2910.             }
  2911.             $tipiRisorsaAutorizzati $tt;
  2912.             try {
  2913.                 if (($handle fopen($root_path"r")) !== false) {
  2914.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  2915.                         if ($row == 0) {
  2916.                             $row 1;
  2917.                             continue;
  2918.                         }
  2919.                         if ($query_eseguite >= $batch_size) {
  2920.                             $contatore $contatore $row 1;
  2921.                             $row 1;
  2922.                             $query_eseguite 0;
  2923.                             $em->flush();
  2924.                             $em->clear();
  2925.                         }
  2926.                         if(in_array($data[$indici['tipoRisorsa']], $tipiRisorsaAutorizzati)) {
  2927.                             $risorsa $repoRisorse->findOneBy(array('identificativoUnico' => $data[$indici['identificativoUnicoRisorsa']]));
  2928.                             if($data[$indici['operazione']] == 'E'){
  2929.                                 if($risorsa){
  2930.                                     $em->remove($risorsa);
  2931.                                     $query_eseguite++;
  2932.                                 }
  2933.                             }else {
  2934.                                 if (!$risorsa) {
  2935.                                     $risorsa = new RisorseAnagrafiche();
  2936.                                     $risorsa->setDataModifica(new \DateTime());
  2937.                                     $risorsa->setDataCreazione(new \DateTime());
  2938.                                     $risorsa->setCodiceAnagrafica($data[$indici['codiceAnagrafica']]);
  2939.                                     $risorsa->setCategoria($data[$indici['categoria']]);
  2940.                                     $risorsa->setIdentificativoUnico($data[$indici['identificativoUnicoRisorsa']]);
  2941.                                     $risorsa->setNomeFile($data[$indici['nomeFile']]);
  2942.                                     $risorsa->setPathFile($data[$indici["pathFile"]]);
  2943.                                     $risorsa->setTipoRisorsa($data[$indici['tipoRisorsa']]);
  2944.                                     if(count($data) >= 8)
  2945.                                         $risorsa->setVisibileAlCliente($data[$indici["visibileACliente"]]);
  2946.                                     if(count($data) >= 9){
  2947.                                         $valore $data[$indici['dataRisorsa']];
  2948.                                         if($valore != '' ){
  2949.                                             $format 'Ymd';
  2950.                                             if(strpos($valore'-') !== false)
  2951.                                                 $format 'Y-m-d';
  2952.                                             $risorsa->setDataRisorsa(\DateTime::createFromFormat($format$valore));
  2953.                                         }
  2954.                                     }
  2955.                                     if(count($data) >= 10){
  2956.                                         $risorsa->setCodiceCategoria1($data[$indici['codiceCategoria1']]);
  2957.                                         $risorsa->setCodiceCategoria2($data[$indici['codiceCategoria2']]);
  2958.                                         $risorsa->setCodiceCategoria3($data[$indici['codiceCategoria3']]);
  2959.                                         $risorsa->setCodiceCategoria4($data[$indici['codiceCategoria4']]);
  2960.                                         $risorsa->setCodiceCategoria5($data[$indici['codiceCategoria5']]);
  2961.                                         $risorsa->setCodiceArticolo($data[$indici['codiceArticolo']]);
  2962.                                         $risorsa->setMarca($data[$indici['marca']]);
  2963.                                         $risorsa->setCodiceDimensione1($data[$indici['codiceDimensione1']]);
  2964.                                         $risorsa->setCodiceDimensione2($data[$indici['codiceDimensione2']]);
  2965.                                         $risorsa->setCodiceDimensione3($data[$indici['codiceDimensione3']]);
  2966.                                         $risorsa->setCodiceDimensione4($data[$indici['codiceDimensione4']]);
  2967.                                         $risorsa->setCodiceDimensione5($data[$indici['codiceDimensione5']]);
  2968.                                     }
  2969.                                     if (count($data) > $indici['chiaveRicercaEsterna']){
  2970.                                         $risorsa->setChiaveRicercaEsterno($data[$indici['chiaveRicercaEsterna']]);
  2971.                                     }
  2972.                                     if (count($data) > $indici['recuperaConWebservice']){
  2973.                                         $risorsa->setRecuperaConWebservice(self::verificaBool($data[$indici['recuperaConWebservice']]));
  2974.                                     }
  2975.                                     $em->persist($risorsa);
  2976.                                     $query_eseguite++;
  2977.                                 } else {
  2978.                                     $risorsa->setDataModifica(new \DateTime());
  2979.                                     $risorsa->setCodiceAnagrafica($data[$indici['codiceAnagrafica']]);
  2980.                                     $risorsa->setCategoria($data[$indici['categoria']]);
  2981.                                     $risorsa->setNomeFile($data[$indici['nomeFile']]);
  2982.                                     $risorsa->setPathFile($data[$indici["pathFile"]]);
  2983.                                     $risorsa->setTipoRisorsa($data[$indici['tipoRisorsa']]);
  2984.                                     if(count($data) > 8)
  2985.                                         $risorsa->setVisibileAlCliente($data[$indici["visibileACliente"]]);
  2986.                                     if(count($data) >= 9){
  2987.                                         $valore $data[$indici['dataRisorsa']];
  2988.                                         if($valore != '' ){
  2989.                                             $format 'Ymd';
  2990.                                             if(strpos($valore'-') !== false)
  2991.                                                 $format 'Y-m-d';
  2992.                                             $risorsa->setDataRisorsa(\DateTime::createFromFormat($format$valore));
  2993.                                         }
  2994.                                     }
  2995.                                     if(count($data) >= 10){
  2996.                                         $risorsa->setCodiceCategoria1($data[$indici['codiceCategoria1']]);
  2997.                                         $risorsa->setCodiceCategoria2($data[$indici['codiceCategoria2']]);
  2998.                                         $risorsa->setCodiceCategoria3($data[$indici['codiceCategoria3']]);
  2999.                                         $risorsa->setCodiceCategoria4($data[$indici['codiceCategoria4']]);
  3000.                                         $risorsa->setCodiceCategoria5($data[$indici['codiceCategoria5']]);
  3001.                                         $risorsa->setCodiceArticolo($data[$indici['codiceArticolo']]);
  3002.                                         $risorsa->setMarca($data[$indici['marca']]);
  3003.                                         $risorsa->setCodiceDimensione1($data[$indici['codiceDimensione1']]);
  3004.                                         $risorsa->setCodiceDimensione2($data[$indici['codiceDimensione2']]);
  3005.                                         $risorsa->setCodiceDimensione3($data[$indici['codiceDimensione3']]);
  3006.                                         $risorsa->setCodiceDimensione4($data[$indici['codiceDimensione4']]);
  3007.                                         $risorsa->setCodiceDimensione5($data[$indici['codiceDimensione5']]);
  3008.                                     }
  3009.                                     if (count($data) > $indici['chiaveRicercaEsterna']){
  3010.                                         $risorsa->setChiaveRicercaEsterno($data[$indici['chiaveRicercaEsterna']]);
  3011.                                     }
  3012.                                     if (count($data) > $indici['recuperaConWebservice']){
  3013.                                         $risorsa->setRecuperaConWebservice(self::verificaBool($data[$indici['recuperaConWebservice']]));
  3014.                                     }
  3015.                                     $em->persist($risorsa);
  3016.                                     $query_eseguite++;
  3017.                                 }
  3018.                             }
  3019.                         }else{
  3020.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Tipo risorsa: ' $data[$indici['tipoRisorsa']] . ' non riconosciuto!'$user$collegamentoRnd'ImportazioneController''caricaRisorseAnagrafiche');
  3021.                         }
  3022.                         $row++;
  3023.                     }
  3024.                     $em->flush();
  3025.                     $em->clear();
  3026.                 }else{
  3027.                     $errori .= "Impossibile aprire il file!";
  3028.                 }
  3029.                 $row $contatore $row;
  3030.                 if ($errori == "") {
  3031.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds' $rownull$collegamentoRnd'ImportazioneController''caricaRisorseAnagrafiche');
  3032.                     return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  3033.                 } else {
  3034.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), var_export($erroritrue), false'Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds' $rownull$collegamentoRnd'ImportazioneController''caricaRisorseAnagrafiche');
  3035.                     return new Response('Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row "</br>Lista Errori:</br>" $errori);
  3036.                 }
  3037.             } catch (\Exception|\Throwable $ex) {
  3038.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), $ex->getTraceAsString(), false'Errore importazione: ' $ex->getMessage(), null$collegamentoRnd'ImportazioneController''caricaRisorseAnagrafiche');
  3039.                 return new Response('Errore importazione (RIGA: ' $contatore ') : ' $ex->getMessage());
  3040.             }
  3041.         } else {
  3042.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null$collegamentoRnd'ImportazioneController''caricaRisorseAnagrafiche');
  3043.             return new Response("ERRORE PERMESSO");
  3044.         }
  3045.     } //OK
  3046.     /**
  3047.      * @Route("/caricaReport/{svuota}", name="carica_report", defaults={"svuota"="0"})
  3048.      */
  3049.     public function caricaReport(Request $request$svuota)
  3050.     {
  3051.         $collegamentoRnd $this->servizi->randomString2();
  3052.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  3053.             ini_set('max_execution_time'900);
  3054.             ini_set('memory_limit''4G');
  3055.             $start microtime(true);
  3056.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  3057.             $em $this->servizi->doctrine->getManager();
  3058.             $user $this->servizi->OttieniUtenteCorrente();
  3059.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  3060.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  3061.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  3062.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  3063.             $repo $this->servizi->doctrine->getRepository(Report::class);
  3064.             $errori "";
  3065.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /caricaReport/' $svuota ' --- Inizio l\' importazione dei report'null$collegamentoRnd'ImportazioneController''caricaReport');
  3066.             if($svuota == '1'){
  3067.                 $this->servizi->doctrine->getConnection()->executeQuery('TRUNCATE TABLE report;');
  3068.             }
  3069.             $root_path $pathFileBase "report.csv";
  3070.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  3071.             $contatore 0;
  3072.             $query_eseguite 0;
  3073.             $row 0;
  3074.             $batch_size 50;
  3075.             /*
  3076.              * 0    identificativo_univoco
  3077.                 1    titolo
  3078.                 2    sottotitolo
  3079.                 3    agente
  3080.                 4    categoria
  3081.                 5    codice_cliente
  3082.                 6    chiave_ricerca_esterno
  3083.                 7    recupera_con_webservice
  3084.                 8    livello_permesso
  3085.                 9    raw_html_contenuto
  3086.                 10    path_file_recupero_webservice_custom
  3087.                 11    operazione
  3088.                 12    raw_html_header
  3089.              */
  3090.             $indici = array(
  3091.                 "identificativoUnivoco" => 0,
  3092.                 "titolo" => 1,
  3093.                 "sottotitolo" => 2,
  3094.                 "agente" => 3,
  3095.                 "categoria" => 4,
  3096.                 "codiceCliente" => 5,
  3097.                 "chiaveRicercaEsterno" => 6,
  3098.                 "recuperaConWebservice" => 7,
  3099.                 'livelloPermesso' => 8,
  3100.                 'rawHtmlContenuto' => 9,
  3101.                 'pathFileRecuperoWebserviceCustom' => 10,
  3102.                 'operazione' => 11,
  3103.                 'rawHtmlHeader' => 12
  3104.             );
  3105.             try {
  3106.                 if (($handle fopen($root_path"r")) !== false) {
  3107.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  3108.                         if ($row == 0) {
  3109.                             $row 1;
  3110.                             continue;
  3111.                         }
  3112.                         if ($query_eseguite >= $batch_size) {
  3113.                             $contatore $contatore $row 1;
  3114.                             $row 1;
  3115.                             $query_eseguite 0;
  3116.                             $em->flush();
  3117.                             $em->clear();
  3118.                         }
  3119.                         $report $repo->findOneBy(array('identificativoUnico' => $data[$indici['identificativoUnivoco']]));
  3120.                         if ($data[$indici['operazione']] == 'E') {
  3121.                             if ($report) {
  3122.                                 $em->remove($report);
  3123.                                 $query_eseguite++;
  3124.                             }
  3125.                         } else {
  3126.                             if (!$report) {
  3127.                                 $report = new Report();
  3128.                                 $report->setDataCreazione(new \DateTime());
  3129.                                 $report->setIdentificativoUnico($data[$indici['identificativoUnivoco']]);
  3130.                                 $report->setAttivo(true);
  3131.                             }
  3132.                             $report->setTitolo($data[$indici['titolo']]);
  3133.                             $report->setSottoTitolo($data[$indici['sottotitolo']]);
  3134.                             $report->setAgente($data[$indici['agente']]);
  3135.                             $report->setCategoria($data[$indici['categoria']]);
  3136.                             $report->setCodiceCliente($data[$indici['codiceCliente']]);
  3137.                             $report->setChiaveRicercaEsterno($data[$indici['chiaveRicercaEsterno']]);
  3138.                             $report->setLivelloPermesso($data[$indici['livelloPermesso']]);
  3139.                             $report->setRecuperaConWebservice(self::verificaBool($data[$indici['recuperaConWebservice']]));
  3140.                             $report->setRawHtmlContenuto($data[$indici['rawHtmlContenuto']]);
  3141.                             $report->setPathFileRecuperoWebserviceCustom($data[$indici['pathFileRecuperoWebserviceCustom']]);
  3142.                             $report->setRawHtmlHeader($data[$indici['rawHtmlHeader']]);
  3143.                             $em->persist($report);
  3144.                             $query_eseguite++;
  3145.                         }
  3146.                         $row++;
  3147.                     }
  3148.                     $em->flush();
  3149.                     $em->clear();
  3150.                 }else{
  3151.                     $errori .= "Impossibile aprire il file!";
  3152.                 }
  3153.                 $row $contatore $row;
  3154.                 if ($errori == "") {
  3155.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds' $rownull$collegamentoRnd'ImportazioneController''caricaReport');
  3156.                     return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  3157.                 } else {
  3158.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), var_export($erroritrue), false'Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds' $rownull$collegamentoRnd'ImportazioneController''caricaReport');
  3159.                     return new Response('Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row "</br>Lista Errori:</br>" $errori);
  3160.                 }
  3161.             } catch (\Exception|\Throwable $ex) {
  3162.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), $ex->getTraceAsString(), false'Errore importazione: ' $ex->getMessage(), null$collegamentoRnd'ImportazioneController''caricaReport');
  3163.                 return new Response('Errore importazione (RIGA: ' $contatore ') : ' $ex->getMessage());
  3164.             }
  3165.         } else {
  3166.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null$collegamentoRnd'ImportazioneController''caricaReport');
  3167.             return new Response("ERRORE PERMESSO");
  3168.         }
  3169.     } //OK
  3170.     /**
  3171.      * @Route("/caricaDisponibilitaPerFascia/{svuota}/{batch}/{iterazione}", name="carica_disponibilita_per_fascia", defaults={"svuota"="0", "batch"="0", "iterazione"="0"})
  3172.      */
  3173.     public function caricaDisponibilitaPerFascia(Request $request$svuota$batch$iterazione)
  3174.     {
  3175.         $collegamentoRnd $this->servizi->randomString2();
  3176.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  3177.             ini_set('max_execution_time', -1);
  3178.             ini_set('memory_limit''4G');
  3179.             $start microtime(true);
  3180.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  3181.             $em $this->servizi->doctrine->getManager();
  3182.             $user $this->servizi->OttieniUtenteCorrente();
  3183.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  3184.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  3185.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  3186.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  3187.             $repoMappa $this->servizi->doctrine->getRepository(MappaCategorieArticoli::class);
  3188.             $repoArticoli $this->servizi->doctrine->getRepository(Articoli::class);
  3189.             $repo $this->servizi->doctrine->getRepository(DisponibilitaAFasce::class);
  3190.             $repoVariante $this->servizi->doctrine->getRepository(Varianti::class);
  3191.             $errori "";
  3192.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /caricaDisponibilitaPerFascia/' $svuota ' --- Inizio l\' importazione delle disponibilità per fasce'null$collegamentoRnd'ImportazioneController''caricaDisponibilitaPerFascia');
  3193.             if($svuota == '1'){
  3194.                 $this->servizi->doctrine->getConnection()->executeQuery('TRUNCATE TABLE disponibilita_afasce;');
  3195.             }
  3196.             $root_path $pathFileBase "disponibilita_per_fascia.csv";
  3197.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  3198.             $contatore 0;
  3199.             $query_eseguite 0;
  3200.             $row 0;
  3201.             $batch_size 50;
  3202.             /*
  3203.                 0    codice articolo
  3204.                 1    codice categoria 1
  3205.                 2    codice categoria 2
  3206.                 3    codice categoria 3
  3207.                 4    codice categoria 4
  3208.                 5    codice categoria 5
  3209.                 6    marca
  3210.                 7    disponibilita
  3211.                 8    etichetta
  3212.                 9    operazione
  3213.                 10    principale
  3214.                 11    codice_variante
  3215.              */
  3216.             $indici = array(
  3217.                 "codiceArticolo" => 0,
  3218.                 "categoria1" => 1,
  3219.                 "categoria2" => 2,
  3220.                 "categoria3" => 3,
  3221.                 "categoria4" => 4,
  3222.                 "categoria5" => 5,
  3223.                 "marca" => 6,
  3224.                 "disponiblita" => 7,
  3225.                 'etichetta' => 8,
  3226.                 'operazione' => 9,
  3227.                 'principale' => 10,
  3228.                 'codice_variante' => 11
  3229.             );
  3230.             $righeDaSaltareSeBatch 0;
  3231.             if($batch != && $iterazione != 0){
  3232.                 $rrr $batch $iterazione//Esempio iterazione = 1 batch = 5000 = 5000
  3233.                 $righeDaSaltareSeBatch $rrr $batch;
  3234.             }
  3235.             try {
  3236.                 if (($handle fopen($root_path"r")) !== false) {
  3237.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  3238.                         //Se attivata la funzionalità batch salto le righe che non devo importare
  3239.                         if($righeDaSaltareSeBatch 0){
  3240.                             if (($contatore $row) < $righeDaSaltareSeBatch){
  3241.                                 $contatore++;
  3242.                                 continue;
  3243.                             }
  3244.                         }
  3245.                         if($righeDaSaltareSeBatch && ($contatore $row $righeDaSaltareSeBatch) > $batch ){
  3246.                             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true"Batch completato: Iterazione: " strval($iterazione) . " --- Batch: " strval(($batch)) . " ( Da riga:" strval($righeDaSaltareSeBatch 1) . " a riga: " strval(($contatore $row)) . " )"null$collegamentoRnd'ImportazioneController''caricaDisponibilitaPerFascia');
  3247.                             break;
  3248.                         }
  3249.                         if ($row == 0) {
  3250.                             $row 1;
  3251.                             continue;
  3252.                         }
  3253.                         if ($query_eseguite >= $batch_size) {
  3254.                             $contatore $contatore $row 1;
  3255.                             $row 1;
  3256.                             $query_eseguite 0;
  3257.                             $em->flush();
  3258.                             $em->clear();
  3259.                         }
  3260.                         $articolo $repoArticoli->findOneBy(array('codice' => $data[$indici['codiceArticolo']]));
  3261.                         if($articolo){
  3262.                             $qbMappa $repoMappa->createQueryBuilder('mappa_categorie_articoli')
  3263.                                 ->leftJoin('mappa_categorie_articoli.categoria1''cat1')
  3264.                                 ->leftJoin('mappa_categorie_articoli.categoria2''cat2')
  3265.                                 ->leftJoin('mappa_categorie_articoli.categoria3''cat3')
  3266.                                 ->leftJoin('mappa_categorie_articoli.categoria4''cat4')
  3267.                                 ->leftJoin('mappa_categorie_articoli.categoria5''cat5')
  3268.                                 ->leftJoin('mappa_categorie_articoli.articolo''art')
  3269.                                 ->where('art.codice = :art')->setParameter('art'$articolo->getCodice());
  3270.                             if($data[$indici['categoria1']] != ''){
  3271.                                 $qbMappa $qbMappa->andWhere('cat1.codice = :cat1')->setParameter('cat1'$data[$indici['categoria1']]);
  3272.                             }else{
  3273.                                 $qbMappa $qbMappa->andWhere('cat1.codice IS NULL');
  3274.                             }
  3275.                             if($data[$indici['categoria2']] != ''){
  3276.                                 $qbMappa $qbMappa->andWhere('cat2.codice = :cat2')->setParameter('cat2'$data[$indici['categoria2']]);
  3277.                             }else{
  3278.                                 $qbMappa $qbMappa->andWhere('cat2.codice IS NULL');
  3279.                             }
  3280.                             if($data[$indici['categoria3']] != ''){
  3281.                                 $qbMappa $qbMappa->andWhere('cat3.codice = :cat3')->setParameter('cat3'$data[$indici['categoria3']]);
  3282.                             }else{
  3283.                                 $qbMappa $qbMappa->andWhere('cat3.codice IS NULL');
  3284.                             }
  3285.                             if($data[$indici['categoria4']] != ''){
  3286.                                 $qbMappa $qbMappa->andWhere('cat4.codice = :cat4')->setParameter('cat4'$data[$indici['categoria4']]);
  3287.                             }else{
  3288.                                 $qbMappa $qbMappa->andWhere('cat4.codice IS NULL');
  3289.                             }
  3290.                             if($data[$indici['categoria5']] != ''){
  3291.                                 $qbMappa $qbMappa->andWhere('cat5.codice = :cat5')->setParameter('cat5'$data[$indici['categoria5']]);
  3292.                             }else{
  3293.                                 $qbMappa $qbMappa->andWhere('cat5.codice IS NULL');
  3294.                             }
  3295.                             $qbMappa $qbMappa->andWhere('mappa_categorie_articoli.marca = :marca')->setParameter('marca'$data[$indici['marca']])
  3296.                                 ->setMaxResults(1)->getQuery()->getResult();
  3297.                             if(count($qbMappa) > 0){
  3298.                                 $mappa $qbMappa[0];
  3299.                                 $variante $repoVariante->findOneBy(array('mappa' => $mappa'codiceVariante' => $data[$indici['codice_variante']]));
  3300.                                 $entita $repo->findOneBy(array('etichetta' => $data[$indici['etichetta']], 'articolo' => $articolo'mappa_categoria_articolo' => $mappa'variante' => $variante));
  3301.                                 if($data[$indici['operazione']] == 'E' && $entita != null){
  3302.                                     $em->remove($entita);
  3303.                                     $em->flush();
  3304.                                 }else if ($data[$indici['operazione']] != 'E'){
  3305.                                     if(!$entita) {
  3306.                                         $entita = new DisponibilitaAFasce();
  3307.                                         $entita->setArticolo($articolo);
  3308.                                         $entita->setVariante($variante);
  3309.                                         $entita->setMappaCategoriaArticolo($mappa);
  3310.                                         $entita->setEtichetta($data[$indici['etichetta']]);
  3311.                                         $entita->setDataCreazione(new \DateTime());
  3312.                                     }
  3313.                                     $entita->setDataModifica(new \DateTime());
  3314.                                     $entita->setPrincipale($data[$indici['principale']] == '1' true false);
  3315.                                     $entita->setDisponibilita(str_replace(',''.'$data[$indici['disponiblita']]));
  3316.                                     $em->persist($entita);
  3317.                                     $query_eseguite++;
  3318.                                 }
  3319.                             }else{
  3320.                                 $errori .= ("RIGA: " . ($contatore $row) . ' -- Mappa non trovata ');
  3321.                             }
  3322.                         }else{
  3323.                             $errori .= ("RIGA: " . ($contatore $row) . ' - Articolo: ' $data[$indici['codiceArticolo']] . ' non trovato!');
  3324.                         }
  3325.                         $row++;
  3326.                     }
  3327.                     $em->flush();
  3328.                     $em->clear();
  3329.                 }else{
  3330.                     $errori .= "Impossibile aprire il file!";
  3331.                 }
  3332.                 $row $contatore $row;
  3333.                 if ($errori == "") {
  3334.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds' $rownull$collegamentoRnd'ImportazioneController''caricaDisponibilitaPerFascia');
  3335.                     return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  3336.                 } else {
  3337.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), var_export($erroritrue), false'Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds' $rownull$collegamentoRnd'ImportazioneController''caricaDisponibilitaPerFascia');
  3338.                     return new Response('Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row "</br>Lista Errori:</br>" $errori);
  3339.                 }
  3340.             } catch (\Exception|\Throwable $ex) {
  3341.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), $ex->getTraceAsString(), false'Errore importazione: (RIGA: ' $contatore ') :' $ex->getMessage(), null$collegamentoRnd'ImportazioneController''caricaDisponibilitaPerFascia');
  3342.                 return new Response('Errore importazione (RIGA: ' $contatore ') : ' $ex->getMessage());
  3343.             }
  3344.         } else {
  3345.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null$collegamentoRnd'ImportazioneController''caricaDisponibilitaPerFascia');
  3346.             return new Response("ERRORE PERMESSO");
  3347.         }
  3348.     } //OK
  3349.     /**
  3350.      * @Route("/caricaAssociazioneArticoliTipoOrdine/{svuota}/{batch}/{iterazione}", name="carica_associazione_articoli_tipo_ordine", defaults={"svuota"="0", "batch"="0", "iterazione"="0"})
  3351.      */
  3352.     public function caricaAssociazioneArticoliTipoOrdine(Request $request$svuota$batch$iterazione)
  3353.     {
  3354.         $collegamentoRnd $this->servizi->randomString2();
  3355.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  3356.             ini_set('max_execution_time', -1);
  3357.             ini_set('memory_limit''4G');
  3358.             $start microtime(true);
  3359.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  3360.             $em $this->servizi->doctrine->getManager();
  3361.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  3362.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  3363.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  3364.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  3365.             $repoMappa $this->servizi->doctrine->getRepository(MappaCategorieArticoli::class);
  3366.             $repoArticoli $this->servizi->doctrine->getRepository(Articoli::class);
  3367.             $repo $this->servizi->doctrine->getRepository(AssociazioneArticoliTipoOrdine::class);
  3368.             $repoTipoOrdine $this->servizi->doctrine->getRepository(TipoOrdine::class);
  3369.             $repoVariante $this->servizi->doctrine->getRepository(Varianti::class);
  3370.             $errori "";
  3371.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /caricaAssociazioneArticoliTipoOrdine/' $svuota ' --- Inizio l\' importazione delle associazione articoli tipo ordine'null$collegamentoRnd'ImportazioneController''caricaAssociazioneArticoliTipoOrdine');
  3372.             if($svuota == '1'){
  3373.                 $this->servizi->doctrine->getConnection()->executeQuery('TRUNCATE TABLE associazione_articoli_tipo_ordine;');
  3374.             }
  3375.             $root_path $pathFileBase "associazione_articoli_tipo_ordine.csv";
  3376.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  3377.             $contatore 0;
  3378.             $query_eseguite 0;
  3379.             $row 0;
  3380.             $batch_size 50;
  3381.             /*
  3382.                 0    codice articolo
  3383.                 1    codice categoria 1
  3384.                 2    codice categoria 2
  3385.                 3    codice categoria 3
  3386.                 4    codice categoria 4
  3387.                 5    codice categoria 5
  3388.                 6    marca
  3389.                 7    codice_variante
  3390.                 8    codice_tipo_ordine
  3391.                 9    operazione
  3392.              */
  3393.             $indici = array(
  3394.                 "codiceArticolo" => 0,
  3395.                 "categoria1" => 1,
  3396.                 "categoria2" => 2,
  3397.                 "categoria3" => 3,
  3398.                 "categoria4" => 4,
  3399.                 "categoria5" => 5,
  3400.                 "marca" => 6,
  3401.                 "codiceVariante" => 7,
  3402.                 'codiceTipoOrdine' => 8,
  3403.                 'operazione' => 9
  3404.             );
  3405.             $righeDaSaltareSeBatch 0;
  3406.             if($batch != && $iterazione != 0){
  3407.                 $rrr $batch $iterazione//Esempio iterazione = 1 batch = 5000 = 5000
  3408.                 $righeDaSaltareSeBatch $rrr $batch;
  3409.             }
  3410.             try {
  3411.                 if (($handle fopen($root_path"r")) !== false) {
  3412.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  3413.                         //Se attivata la funzionalità batch salto le righe che non devo importare
  3414.                         if($righeDaSaltareSeBatch 0){
  3415.                             if (($contatore $row) < $righeDaSaltareSeBatch){
  3416.                                 $contatore++;
  3417.                                 continue;
  3418.                             }
  3419.                         }
  3420.                         if($righeDaSaltareSeBatch && ($contatore $row $righeDaSaltareSeBatch) > $batch ){
  3421.                             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true"Batch completato: Iterazione: " strval($iterazione) . " --- Batch: " strval(($batch)) . " ( Da riga:" strval($righeDaSaltareSeBatch 1) . " a riga: " strval(($contatore $row)) . " )"null$collegamentoRnd'ImportazioneController''caricaAssociazioneArticoliTipoOrdine');
  3422.                             break;
  3423.                         }
  3424.                         if ($row == 0) {
  3425.                             $row 1;
  3426.                             continue;
  3427.                         }
  3428.                         if ($query_eseguite >= $batch_size) {
  3429.                             $contatore $contatore $row 1;
  3430.                             $row 1;
  3431.                             $query_eseguite 0;
  3432.                             $em->flush();
  3433.                             $em->clear();
  3434.                         }
  3435.                         $articolo $repoArticoli->findOneBy(array('codice' => $data[$indici['codiceArticolo']]));
  3436.                         if($articolo){
  3437.                             $qbMappa $repoMappa->createQueryBuilder('mappa_categorie_articoli')
  3438.                                 ->leftJoin('mappa_categorie_articoli.categoria1''cat1')
  3439.                                 ->leftJoin('mappa_categorie_articoli.categoria2''cat2')
  3440.                                 ->leftJoin('mappa_categorie_articoli.categoria3''cat3')
  3441.                                 ->leftJoin('mappa_categorie_articoli.categoria4''cat4')
  3442.                                 ->leftJoin('mappa_categorie_articoli.categoria5''cat5')
  3443.                                 ->leftJoin('mappa_categorie_articoli.articolo''art')
  3444.                                 ->where('art.codice = :art')->setParameter('art'$articolo->getCodice());
  3445.                             if($data[$indici['categoria1']] != ''){
  3446.                                 $qbMappa $qbMappa->andWhere('cat1.codice = :cat1')->setParameter('cat1'$data[$indici['categoria1']]);
  3447.                             }else{
  3448.                                 $qbMappa $qbMappa->andWhere('mappa_categorie_articoli.categoria1 IS NULL');
  3449.                             }
  3450.                             if($data[$indici['categoria2']] != ''){
  3451.                                 $qbMappa $qbMappa->andWhere('cat2.codice = :cat2')->setParameter('cat2'$data[$indici['categoria2']]);
  3452.                             }else{
  3453.                                 $qbMappa $qbMappa->andWhere('mappa_categorie_articoli.categoria2 IS NULL');
  3454.                             }
  3455.                             if($data[$indici['categoria3']] != ''){
  3456.                                 $qbMappa $qbMappa->andWhere('cat3.codice = :cat3')->setParameter('cat3'$data[$indici['categoria3']]);
  3457.                             }else{
  3458.                                 $qbMappa $qbMappa->andWhere('mappa_categorie_articoli.categoria3 IS NULL');
  3459.                             }
  3460.                             if($data[$indici['categoria4']] != ''){
  3461.                                 $qbMappa $qbMappa->andWhere('cat4.codice = :cat4')->setParameter('cat4'$data[$indici['categoria4']]);
  3462.                             }else{
  3463.                                 $qbMappa $qbMappa->andWhere('mappa_categorie_articoli.categoria4 IS NULL');
  3464.                             }
  3465.                             if($data[$indici['categoria5']] != ''){
  3466.                                 $qbMappa $qbMappa->andWhere('cat5.codice = :cat5')->setParameter('cat5'$data[$indici['categoria5']]);
  3467.                             }else{
  3468.                                 $qbMappa $qbMappa->andWhere('mappa_categorie_articoli.categoria5 IS NULL');
  3469.                             }
  3470.                             $qbMappa $qbMappa->andWhere('mappa_categorie_articoli.marca = :marca')->setParameter('marca'$data[$indici['marca']])
  3471.                                 ->setMaxResults(1)->getQuery();
  3472.                             $query $qbMappa->getSQL();
  3473.                             $risultati $qbMappa->getResult();
  3474.                             if(count($risultati) > 0){
  3475.                                 $mappa $risultati[0];
  3476.                                 $variante $data[$indici['codiceVariante']] != '' $repoVariante->findOneBy(array('mappa' => $mappa'codiceVariante' => $data[$indici['codiceVariante']])) : null;
  3477.                                 $tipoOrdine $repoTipoOrdine->findOneBy(array('codice' => $data[$indici['codiceTipoOrdine']]));
  3478.                                 if($tipoOrdine) {
  3479.                                     $entita $repo->findOneBy(array('tipoOrdine' => $tipoOrdine'articolo' => $articolo'mappaCategoriaArticolo' => $mappa'variante' => $variante));
  3480.                                     if ($data[$indici['operazione']] == 'E' && $entita != null) {
  3481.                                         $em->remove($entita);
  3482.                                         $em->flush();
  3483.                                     } else if ($data[$indici['operazione']] != 'E') {
  3484.                                         if (!$entita) {
  3485.                                             $entita = new AssociazioneArticoliTipoOrdine();
  3486.                                             $entita->setArticolo($articolo);
  3487.                                             $entita->setVariante($variante);
  3488.                                             $entita->setMappaCategoriaArticolo($mappa);
  3489.                                             $entita->setTipoOrdine($tipoOrdine);
  3490.                                             $entita->setDataCreazione(new \DateTime());
  3491.                                         }
  3492.                                         $entita->setDataModifica(new \DateTime());
  3493.                                         $em->persist($entita);
  3494.                                         $query_eseguite++;
  3495.                                     }
  3496.                                 }else{
  3497.                                     $errori .= ("RIGA: " . ($contatore $row) . ' -- Tipo ordine non trovato: ' $data[$indici['codiceTipoOrdine']] . "\n<br/>");
  3498.                                 }
  3499.                             }else{
  3500.                                 $errori .= ("RIGA: " . ($contatore $row) . ' -- Mappa non trovata - Art:' $data[$indici['codiceArticolo']] . ' - Cat: ' $data[$indici['categoria1']] . '-' $data[$indici['categoria2']] . '-' .$data[$indici['categoria3']] . '-' .$data[$indici['categoria4']] . '-' .$data[$indici['categoria5']] . '- Marca: ' $data[$indici['marca']] . '<br/>Query:' $query "\n<br/><br/>");
  3501.                             }
  3502.                         }else{
  3503.                             $errori .= ("RIGA: " . ($contatore $row) . ' - Articolo: ' $data[$indici['codiceArticolo']] . ' non trovato!' "\n<br/>");
  3504.                         }
  3505.                         $row++;
  3506.                     }
  3507.                     $em->flush();
  3508.                     $em->clear();
  3509.                 }else{
  3510.                     $errori .= "Impossibile aprire il file!";
  3511.                 }
  3512.                 $row $contatore $row;
  3513.                 $this->generaAlberoAction($request"1");
  3514.                 if ($errori == "") {
  3515.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds' $rownull$collegamentoRnd'ImportazioneController''caricaAssociazioneArticoliTipoOrdine');
  3516.                     return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  3517.                 } else {
  3518.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), var_export($erroritrue), false'Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds' $rownull$collegamentoRnd'ImportazioneController''caricaAssociazioneArticoliTipoOrdine');
  3519.                     return new Response('Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row "</br>Lista Errori:</br>" $errori);
  3520.                 }
  3521.             } catch (\Exception|\Throwable $ex) {
  3522.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), $ex->getTraceAsString(), false'Errore importazione: ' $ex->getMessage(), null$collegamentoRnd'ImportazioneController''caricaAssociazioneArticoliTipoOrdine');
  3523.                 return new Response('Errore importazione (RIGA: ' $contatore ') : ' $ex->getMessage());
  3524.             }
  3525.         } else {
  3526.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null$collegamentoRnd'ImportazioneController''caricaAssociazioneArticoliTipoOrdine');
  3527.             return new Response("ERRORE PERMESSO");
  3528.         }
  3529.     } //OK
  3530.     /**
  3531.      * @Route("/caricaTipoOrdine/{svuota}", name="carica_tipo_ordine", defaults={"svuota"="0"})
  3532.      */
  3533.     public function caricaTipoOrdine(Request $request$svuota)
  3534.     {
  3535.         $collegamentoRnd $this->servizi->randomString2();
  3536.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  3537.             ini_set('max_execution_time'900);
  3538.             ini_set('memory_limit''4G');
  3539.             $start microtime(true);
  3540.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  3541.             $em $this->servizi->doctrine->getManager();
  3542.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  3543.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  3544.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  3545.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  3546.             $repo $this->servizi->doctrine->getRepository(TipoOrdine::class);
  3547.             $errori "";
  3548.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /caricaTipoOrdine/' $svuota ' --- Inizio l\' importazione dei tipi ordine'null$collegamentoRnd'ImportazioneController''caricaTipoOrdine');
  3549.             if($svuota == '1'){
  3550.                 $this->servizi->doctrine->getConnection()->executeQuery('TRUNCATE TABLE tipo_ordine;');
  3551.             }
  3552.             $root_path $pathFileBase "tipo_ordine.csv";
  3553.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  3554.             $contatore 0;
  3555.             $query_eseguite 0;
  3556.             $row 0;
  3557.             $batch_size 50;
  3558.             /*
  3559.                 0    codice
  3560.                 1    descrizione
  3561.                 2    testo visualizzato
  3562.                 3    codice esportazione
  3563.                 4    operazione
  3564.                 5   mostra tutto
  3565.                 6   nascondi disponibilita
  3566.              */
  3567.             $indici = array(
  3568.                 'codice' => 0,
  3569.                 'descrizione' => 1,
  3570.                 'testoVisualizzato' => 2,
  3571.                 'codiceEsportazione' => 3,
  3572.                 'operazione' => 4,
  3573.                 'mostraTutto' => 5,
  3574.                 'nascondiDisponibilita' => 6
  3575.             );
  3576.             try {
  3577.                 if (($handle fopen($root_path"r")) !== false) {
  3578.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  3579.                         if ($row == 0) {
  3580.                             $row 1;
  3581.                             continue;
  3582.                         }
  3583.                         if ($query_eseguite >= $batch_size) {
  3584.                             $contatore $contatore $row 1;
  3585.                             $row 1;
  3586.                             $query_eseguite 0;
  3587.                             $em->flush();
  3588.                             $em->clear();
  3589.                         }
  3590.                         $tipoOrdine $repo->findOneBy(array('codice' => $data[$indici['codice']]));
  3591.                         if ($tipoOrdine && $data[$indici['operazione']] == 'E') {
  3592.                             $em->remove($tipoOrdine);
  3593.                             $query_eseguite++;
  3594.                         } else {
  3595.                             if (!$tipoOrdine) {
  3596.                                 $tipoOrdine = new TipoOrdine();
  3597.                                 $tipoOrdine->setDataCreazione(new \DateTime());
  3598.                                 $tipoOrdine->setCodice($data[$indici['codice']]);
  3599.                             }
  3600.                             $tipoOrdine->setDescrizione($data[$indici['descrizione']]);
  3601.                             $tipoOrdine->setTestoVisualizzato($data[$indici['testoVisualizzato']]);
  3602.                             $tipoOrdine->setCodiceEsportazione($data[$indici['codiceEsportazione']]);
  3603.                             $tipoOrdine->setMostraTutto($data[$indici['mostraTutto']] == '1' true false);
  3604.                             if(count($data) >= 5){
  3605.                                 $tipoOrdine->setNascondiDisponibilita($data[$indici['nascondiDisponibilita']] == '1' true false);
  3606.                             }
  3607.                             $tipoOrdine->setDataModifica(new \DateTime());
  3608.                             $tipoOrdine->setUtenteModifica($this->servizi->OttieniUtenteCorrente());
  3609.                             $em->persist($tipoOrdine);
  3610.                             $query_eseguite++;
  3611.                         }
  3612.                         $em->flush();
  3613.                         $em->clear();
  3614.                         $row $contatore $row;
  3615.                     }
  3616.                 }else{
  3617.                     $errori .= "Impossibile aprire il file!";
  3618.                 }
  3619.                 if ($errori == "") {
  3620.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds' $rownull$collegamentoRnd'ImportazioneController''caricaTipoOrdine');
  3621.                     return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  3622.                 } else {
  3623.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), var_export($erroritrue), false'Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds' $rownull$collegamentoRnd'ImportazioneController''caricaTipoOrdine');
  3624.                     return new Response('Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row "</br>Lista Errori:</br>" $errori);
  3625.                 }
  3626.             } catch (\Exception|\Throwable $ex) {
  3627.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), $ex->getTraceAsString(), false'Errore importazione: ' $ex->getMessage(), null$collegamentoRnd'ImportazioneController''caricaTipoOrdine');
  3628.                 return new Response('Errore importazione (RIGA: ' $contatore ') : ' $ex->getMessage());
  3629.             }
  3630.         } else {
  3631.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null$collegamentoRnd'ImportazioneController''caricaTipoOrdine');
  3632.             return new Response("ERRORE PERMESSO");
  3633.         }
  3634.     } //OK
  3635.     /**
  3636.      * @Route("/aggiornaOrdini/{batch}/{iterazione}", name="aggiorna_ordini", defaults={"batch"="0", "iterazione"="0"})
  3637.      */
  3638.     public function aggiornaOrdini(Request $request$batch$iterazione)
  3639.     {
  3640.         $collegamentoRnd $this->servizi->randomString2();
  3641.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  3642.             ini_set('max_execution_time', -1);
  3643.             ini_set('memory_limit''4G');
  3644.             $start microtime(true);
  3645.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  3646.             $em $this->servizi->doctrine->getManager();
  3647.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  3648.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  3649.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  3650.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  3651.             $repo $this->servizi->doctrine->getRepository(Ordini::class);
  3652.             $errori "";
  3653.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /aggiornaOrdini --- Inizio l\' aggiornamento degli ordini'null$collegamentoRnd'ImportazioneController''aggiornaOrdini');
  3654.             $root_path $pathFileBase "aggiornamento_ordini.csv";
  3655.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  3656.             $contatore 0;
  3657.             $query_eseguite 0;
  3658.             $row 0;
  3659.             $batch_size 50;
  3660.             /*
  3661.                 0    id_ordine
  3662.                 1    fattura
  3663.                 2    nome_file_fattura
  3664.                 3    ddt
  3665.                 4    nome_file_ddt
  3666.                 5    ordine
  3667.                 6    nome_file_ordine
  3668.                 7    offerta
  3669.                 8    nome_file_offerta
  3670.                 9    url_tracking_vettore
  3671.                 10    vettore
  3672.                 11    codice_tracking_vettore
  3673.              */
  3674.             $indici = array(
  3675.                 'idOrdine' => 0,
  3676.                 'fattura' => 1,
  3677.                 'nomeFileFattura' => 2,
  3678.                 'ddt' => 3,
  3679.                 'nomeFileDdt' => 4,
  3680.                 'ordine' => 5,
  3681.                 'nomeFileOrdine' => 6,
  3682.                 'offerta' => 7,
  3683.                 'nomeFileOfferta' => 8,
  3684.                 'urlTrackingVettore' => 9,
  3685.                 'vettore' => 10,
  3686.                 'codiceTrackingVettore' => 11
  3687.             );
  3688.             $righeDaSaltareSeBatch 0;
  3689.             if($batch != && $iterazione != 0){
  3690.                 $rrr $batch $iterazione//Esempio iterazione = 1 batch = 5000 = 5000
  3691.                 $righeDaSaltareSeBatch $rrr $batch;
  3692.             }
  3693.             try {
  3694.                 if (($handle fopen($root_path"r")) !== false) {
  3695.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  3696.                         //Se attivata la funzionalità batch salto le righe che non devo importare
  3697.                         if($righeDaSaltareSeBatch 0){
  3698.                             if (($contatore $row) < $righeDaSaltareSeBatch){
  3699.                                 $contatore++;
  3700.                                 continue;
  3701.                             }
  3702.                         }
  3703.                         if($righeDaSaltareSeBatch && ($contatore $row $righeDaSaltareSeBatch) > $batch ){
  3704.                             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true"Batch completato: Iterazione: " strval($iterazione) . " --- Batch: " strval(($batch)) . " ( Da riga:" strval($righeDaSaltareSeBatch 1) . " a riga: " strval(($contatore $row)) . " )"null$collegamentoRnd'ImportazioneController''aggiornaOrdini');
  3705.                             break;
  3706.                         }
  3707.                         if ($row == 0) {
  3708.                             $row 1;
  3709.                             continue;
  3710.                         }
  3711.                         if ($query_eseguite >= $batch_size) {
  3712.                             $contatore $contatore $row 1;
  3713.                             $row 1;
  3714.                             $query_eseguite 0;
  3715.                             $em->flush();
  3716.                             $em->clear();
  3717.                         }
  3718.                         /** $ordine Ordini */
  3719.                         $ordine $repo->find($data[$indici['idOrdine']]);
  3720.                         if($ordine) {
  3721.                             $ordine->setFattura($data[$indici["fattura"]]);
  3722.                             $ordine->setNomeFileFattura($data[$indici["nomeFileFattura"]]);
  3723.                             $ordine->setDdt($data[$indici['ddt']]);
  3724.                             $ordine->setNomeFileDdt($data[$indici['nomeFileDdt']]);
  3725.                             $ordine->setOrdine($data[$indici["ordine"]]);
  3726.                             $ordine->setNomeFileOrdine($data[$indici["nomeFileOrdine"]]);
  3727.                             $ordine->setOfferta($data[$indici["offerta"]]);
  3728.                             $ordine->setNomeFileOfferta($data[$indici["nomeFileOfferta"]]);
  3729.                             $ordine->setUrlTrackingVettore($data[$indici["urlTrackingVettore"]]);
  3730.                             $ordine->setVettore($data[$indici["vettore"]]);
  3731.                             $ordine->setCodiceTrackingVettore($data[$indici["codiceTrackingVettore"]]);
  3732.                             $em->persist($ordine);
  3733.                             $query_eseguite++;
  3734.                         }else{
  3735.                             $errori .= ("Ordine cond id: " $data[$indici['idOrdine']] . " non trovato!");
  3736.                         }
  3737.                         $row $contatore $row;
  3738.                     }
  3739.                     $em->flush();
  3740.                     $em->clear();
  3741.                 }else{
  3742.                     $errori .= "Impossibile aprire il file!";
  3743.                 }
  3744.                 if ($errori == "") {
  3745.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds' $rownull$collegamentoRnd'ImportazioneController''aggiornaOrdini');
  3746.                     return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  3747.                 } else {
  3748.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), var_export($erroritrue), false'Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds' $rownull$collegamentoRnd'ImportazioneController''aggiornaOrdini');
  3749.                     return new Response('Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row "</br>Lista Errori:</br>" $errori);
  3750.                 }
  3751.             } catch (\Exception|\Throwable $ex) {
  3752.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), $ex->getTraceAsString(), false'Errore importazione: ' $ex->getMessage(), null$collegamentoRnd'ImportazioneController''aggiornaOrdini');
  3753.                 return new Response('Errore importazione (RIGA: ' $contatore ') : ' $ex->getMessage());
  3754.             }
  3755.         } else {
  3756.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null$collegamentoRnd'ImportazioneController''aggiornaOrdini');
  3757.             return new Response("ERRORE PERMESSO");
  3758.         }
  3759.     } //OK
  3760.     /**
  3761.      * @Route("/caricaFiltriVisualizzazioneArticoli/{svuota}", name="carica_filtri_visualizzazione_articoli", defaults={"svuota"="0"})
  3762.      */
  3763.     public function caricaFiltriVisualizzazioneArticoli(Request $request$svuota)
  3764.     {
  3765.         $collegamentoRnd $this->servizi->randomString2();
  3766.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  3767.             ini_set('max_execution_time'900);
  3768.             ini_set('memory_limit''4G');
  3769.             $start microtime(true);
  3770.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  3771.             $em $this->servizi->doctrine->getManager();
  3772.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  3773.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  3774.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  3775.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  3776.             $repoUser $this->servizi->doctrine->getRepository(User::class);
  3777.             $repo $this->servizi->doctrine->getRepository(FiltroVisualizzazioneArticoliClienti::class);
  3778.             $errori "";
  3779.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /caricaFiltriVisualizzazioneArticoli/' $svuota ' --- Inizio l\' importazione dei filtri visualizzazione articoli'null$collegamentoRnd'ImportazioneController''caricaFiltriVisualizzazioneArticoli');
  3780.             if($svuota == '1'){
  3781.                 $this->servizi->doctrine->getConnection()->exec('UPDATE fos_user SET filtro_visualizzazione_articoli_clienti_id = NULL;');
  3782.             }
  3783.             $root_path $pathFileBase "filtri_visualizzazione_articoli.csv";
  3784.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  3785.             $contatore 0;
  3786.             $query_eseguite 0;
  3787.             $row 0;
  3788.             $batch_size 50;
  3789.             /*
  3790.                 0    username
  3791.                 1    categorie
  3792.                 2    mostra
  3793.                 3    operazione
  3794.              */
  3795.             $indici = array(
  3796.                 "username" => 0,
  3797.                 "categorie" => 1,
  3798.                 "mostra" => 2,
  3799.                 "operazione" => 3
  3800.             );
  3801.             try {
  3802.                 if (($handle fopen($root_path"r")) !== false) {
  3803.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  3804.                         if ($row == 0) {
  3805.                             $row 1;
  3806.                             continue;
  3807.                         }
  3808.                         if ($query_eseguite >= $batch_size) {
  3809.                             $contatore $contatore $row 1;
  3810.                             $row 1;
  3811.                             $query_eseguite 0;
  3812.                             $em->flush();
  3813.                             $em->clear();
  3814.                         }
  3815.                         $utente $repoUser->findOneBy(array('username' => $data[$indici['username']]));
  3816.                         if ($utente) {
  3817.                             //Verifico se il filtro esiste
  3818.                             $entita $repo->findOneBy(array('elencoCategorie' => $data[$indici['categorie']], 'mostra' => $data[$indici['mostra']] == '1' true false));
  3819.                             if ($entita != null) {
  3820.                                 $utente->setFiltroVisualizzazioneArticoliClienti($entita);
  3821.                                 $em->persist($utente);
  3822.                             } else {
  3823.                                 $entita = new FiltroVisualizzazioneArticoliClienti();
  3824.                                 $entita->setNome(randomString(15));
  3825.                                 $entita->setUtenteModifica($this->servizi->OttieniUtenteCorrente());
  3826.                                 $entita->setDataModifica(new \DateTime());
  3827.                                 $entita->setDataCreazione(new \DateTime());
  3828.                                 $entita->setMostra($data[$indici['mostra']] == '1' true false);
  3829.                                 $entita->setElencoCategorie($data[$indici['categorie']]);
  3830.                                 $em->persist($entita);
  3831.                                 $utente->setFiltroVisualizzazioneArticoliClienti($entita);
  3832.                                 $em->persist($utente);
  3833.                                 $query_eseguite++;
  3834.                             }
  3835.                         } else {
  3836.                             $errori .= ("RIGA: " $contatore ' - Utente con username: ' $data[$indici['username']] . ' non trovato!');
  3837.                         }
  3838.                         $row++;
  3839.                     }
  3840.                     $em->flush();
  3841.                     $em->clear();
  3842.                     $row $contatore $row;
  3843.                 }else{
  3844.                     $errori .= "Impossibile aprire il file!";
  3845.                 }
  3846.                 if ($errori == "") {
  3847.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds' $rownull$collegamentoRnd'ImportazioneController''caricaFiltriVisualizzazioneArticoli');
  3848.                     return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  3849.                 } else {
  3850.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), var_export($erroritrue), false'Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds' $rownull$collegamentoRnd'ImportazioneController''caricaFiltriVisualizzazioneArticoli');
  3851.                     return new Response('Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row "</br>Lista Errori:</br>" $errori);
  3852.                 }
  3853.             } catch (\Exception|\Throwable $ex) {
  3854.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), $ex->getTraceAsString(), false'Errore importazione: ' $ex->getMessage(), null$collegamentoRnd'ImportazioneController''caricaFiltriVisualizzazioneArticoli');
  3855.                 return new Response('Errore importazione (RIGA: ' $contatore ') : ' $ex->getMessage());
  3856.             }
  3857.         } else {
  3858.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null$collegamentoRnd'ImportazioneController''caricaFiltriVisualizzazioneArticoli');
  3859.             return new Response("ERRORE PERMESSO");
  3860.         }
  3861.     } //OK
  3862.     /**
  3863.      * @Route("/caricaScontiClientiAnagrafiche/{svuota}/{batch}/{iterazione}", name="carica_sconti_clienti_anagrafiche", defaults={"svuota"="0", "batch"="0", "iterazione"="0"})
  3864.      */
  3865.     public function caricaScontiAnagraficheAction(Request $request$svuota$batch$iterazione)
  3866.     {
  3867.         $rit = [
  3868.             'esecuzione' => '',
  3869.             'chiamata' => '',
  3870.             'identificativo_chiamata' => '',
  3871.             'errori' => '',
  3872.             'messaggio' => ''
  3873.         ];
  3874.         $collegamentoRnd $this->servizi->randomString2();
  3875.         $rit['identificativo_chiamata'] = $collegamentoRnd;
  3876.         $rit['chiamata'] = $request->getRequestUri();
  3877.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  3878.             ini_set('max_execution_time'1800);
  3879.             ini_set('memory_limit''4G');
  3880.             $start microtime(true);
  3881.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  3882.             $em $this->servizi->doctrine->getManager();
  3883.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  3884.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  3885.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  3886.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  3887.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /caricaScontiAnagrafiche/' $svuota ' --- Inizio l\' importazione delle scontistiche delle anagrafiche'null$collegamentoRnd'ImportazioneController''caricaScontiClientiAnagrafiche');
  3888.             $repoScontiClientiBase $this->servizi->doctrine->getRepository(ScontiAnagrafiche::class);
  3889.             $errori "";
  3890.             $connection $this->servizi->doctrine->getConnection();
  3891.             if($svuota == "1"){
  3892.                 $em $this->servizi->doctrine->getManager();
  3893.                 $connection->beginTransaction();
  3894.                 try {
  3895.                     $connection->query("SET FOREIGN_KEY_CHECKS=0;");
  3896.                     $connection->executeUpdate("TRUNCATE `sconti_anagrafiche`;");
  3897.                     $connection->query("SET FOREIGN_KEY_CHECKS=1;");
  3898.                     $connection->commit();
  3899.                 }catch (\Exception|\Throwable|\Throwable $ex){
  3900.                     $this->servizi->DebuggaException($ex"Errore pulizia sconti anagrafiche"falsenull$collegamentoRnd'ImportazioneController''caricaScontiClientiAnagrafiche');
  3901.                 }
  3902.             }
  3903.             $root_path $pathFileBase "articoli_sconti.csv";
  3904.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  3905.             $contatore 0;
  3906.             $query_eseguite 0;
  3907.             $row 0;
  3908.             $batch_size 50;
  3909.             /*
  3910.              * Index    Campo
  3911.                 0    codice_anagrafica
  3912.                 1    codice_articolo
  3913.                 2    codice_variante
  3914.                 3    etichetta
  3915.                 4    sconto
  3916.                 5    operazione
  3917.                 6   applica_sempre
  3918.                 7   codice_categorie
  3919.              */
  3920.             $indici = array(
  3921.                 "codiceAnagrafica" => 0,
  3922.                 "codiceGruppoAnagrafica" => '',
  3923.                 "codiceGruppoArticoli" => '',
  3924.                 "codiceArticolo" => 1,
  3925.                 "codiceVariante" => 2,
  3926.                 "etichetta" => 3,
  3927.                 "sconto" => 4,
  3928.                 "operazione" => 5,
  3929.                 'applicaSempre' => 6,
  3930.                 'codiceGruppoCategorie' => 7
  3931.             );
  3932.             $righeDaSaltareSeBatch 0;
  3933.             if($batch != && $iterazione != 0){
  3934.                 $rrr $batch $iterazione//Esempio iterazione = 1 batch = 5000 = 5000
  3935.                 $righeDaSaltareSeBatch $rrr $batch;
  3936.             }
  3937.             try {
  3938.                 if (($handle fopen($root_path"r")) !== false) {
  3939.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  3940.                         //Se attivata la funzionalità batch salto le righe che non devo importare
  3941.                         if($righeDaSaltareSeBatch 0){
  3942.                             if (($contatore $row) < $righeDaSaltareSeBatch){
  3943.                                 $contatore++;
  3944.                                 continue;
  3945.                             }
  3946.                         }
  3947.                         if($righeDaSaltareSeBatch && ($contatore $row $righeDaSaltareSeBatch) > $batch ){
  3948.                             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true"Batch completato: Iterazione: " strval($iterazione) . " --- Batch: " strval(($batch)) . " ( Da riga:" strval($righeDaSaltareSeBatch 1) . " a riga: " strval(($contatore $row)) . " )"null$collegamentoRnd'ImportazioneController''caricaScontiClientiAnagrafiche');
  3949.                             break;
  3950.                         }
  3951.                         if ($row == 0) {
  3952.                             $row 1;
  3953.                             continue;
  3954.                         }
  3955.                         if ($query_eseguite >= $batch_size) {
  3956.                             $contatore $contatore $row 1;
  3957.                             $row 1;
  3958.                             $query_eseguite 0;
  3959.                             $em->flush();
  3960.                             $em->clear();
  3961.                         }
  3962.                         $now = new \DateTime('now');
  3963.                         $criterioRicerca = [
  3964.                             'codiceAnagrafica' => $indici["codiceAnagrafica"] !== '' $data[$indici["codiceAnagrafica"]] : "",
  3965.                             'codiceGruppoAnagrafica' => $indici["codiceGruppoAnagrafica"] !== '' $data[$indici["codiceGruppoAnagrafica"]] : "",
  3966.                             'codiceGruppoArticoli' => $indici["codiceGruppoArticoli"] !== '' $data[$indici["codiceGruppoArticoli"]] : "",
  3967.                             'codiceVariante' => $indici["codiceVariante"] !== '' $data[$indici["codiceVariante"]] : "",
  3968.                             'codiceArticolo' => $indici["codiceArticolo"] !== '' $data[$indici["codiceArticolo"]] : "",
  3969.                         ];
  3970.                         if(count($data) > 7){
  3971.                             $criterioRicerca['codiceGruppoCategorie'] = $indici['codiceGruppoCategorie'] !== '' $data[$indici['codiceGruppoCategorie']] : "";
  3972.                         }
  3973.                         if(count($data) > ) {
  3974.                             $criterioRicerca['applicaSempre'] = $data[$indici['applicaSempre']] == '1' true false;
  3975.                         }
  3976.                         $scontoPresente $repoScontiClientiBase->findOneBy($criterioRicerca);
  3977.                         if ($scontoPresente) {
  3978.                             if ($data[$indici["operazione"]] == "E") {
  3979.                                 $em->remove($scontoPresente);
  3980.                                 $query_eseguite++;
  3981.                             } else {
  3982.                                 $scontoPresente->setSconto($indici["sconto"] !== '' $data[$indici["sconto"]] : "");
  3983.                                 if(count($data) > ){
  3984.                                     $scontoPresente->setApplicaSempre($data[$indici['applicaSempre']]);
  3985.                                 }
  3986.                                 $scontoPresente->setEtichetta($indici["etichetta"] !== '' $data[$indici["etichetta"]] : "");
  3987.                                 $scontoPresente->setDataModifica($now);
  3988.                                 $em->persist($scontoPresente);
  3989.                                 $query_eseguite++;
  3990.                             }
  3991.                         } else {
  3992.                             $scontoPresente = new ScontiAnagrafiche();
  3993.                             $scontoPresente->setCodiceAnagrafica($indici["codiceAnagrafica"] !== '' $data[$indici["codiceAnagrafica"]] : "");
  3994.                             $scontoPresente->setCodiceGruppoAnagrafica($indici["codiceGruppoAnagrafica"] !== '' $data[$indici["codiceGruppoAnagrafica"]] : "");
  3995.                             $scontoPresente->setCodiceGruppoArticoli($indici["codiceGruppoArticoli"] !== '' $data[$indici["codiceGruppoArticoli"]] : "");
  3996.                             $scontoPresente->setCodiceArticolo($indici["codiceArticolo"] !== '' $data[$indici["codiceArticolo"]] : "");
  3997.                             $scontoPresente->setCodiceVariante($indici["codiceVariante"] !== '' $data[$indici["codiceVariante"]] : "");
  3998.                             $scontoPresente->setSconto($indici["sconto"] !== '' $data[$indici["sconto"]] : "");
  3999.                             if(count($data) > ){
  4000.                                 $scontoPresente->setApplicaSempre($data[$indici['applicaSempre']]);
  4001.                             }
  4002.                             if(count($data) > 7){
  4003.                                 $scontoPresente->setCodiceGruppoCategorie($indici['codiceGruppoCategorie'] !== '' $data[$indici['codiceGruppoCategorie']] : "");
  4004.                             }
  4005.                             $scontoPresente->setEtichetta($indici["etichetta"] !== '' $data[$indici["etichetta"]] : "");
  4006.                             $scontoPresente->setDataCreazione($now);
  4007.                             $scontoPresente->setDataModifica($now);
  4008.                             $em->persist($scontoPresente);
  4009.                             $query_eseguite++;
  4010.                         }
  4011.                         $row++;
  4012.                         $em->flush();
  4013.                     }
  4014.                     $em->flush();
  4015.                     $em->clear();
  4016.                 }else{
  4017.                     $errori .= "Impossibile aprire il file!";
  4018.                 }
  4019.                 $row $contatore $row;
  4020.                 $rit['messaggio'] = ('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  4021.                 $rit['esecuzione'] = $time_elapsed_secs microtime(true) - $start;
  4022.                 $rit['identificativo_chiamata'] = $collegamentoRnd;
  4023.                 if ($errori == "") {
  4024.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds' $rownull$collegamentoRnd'ImportazioneController''caricaScontiClientiAnagrafiche');
  4025.                     return new JsonResponse($rit);
  4026.                 } else {
  4027.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), var_export($erroritrue), false'Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds' $rownull$collegamentoRnd'ImportazioneController''caricaScontiClientiAnagrafiche');
  4028.                     $rit['errori'] = $errori;
  4029.                     return new JsonResponse($rit);
  4030.                 }
  4031.             } catch (\Exception|\Throwable $ex) {
  4032.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), $ex->getTraceAsString(), false'Errore importazione: ' $ex->getMessage(), null$collegamentoRnd'ImportazioneController''caricaScontiClientiAnagrafiche');
  4033.                 $rit['errori'] = $ex->getMessage();
  4034.                 $rit['messaggio'] = ('Errore importazione (RIGA: ' $contatore ')');
  4035.                 return new JsonResponse($rit);
  4036.             }
  4037.         } else {
  4038.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null$collegamentoRnd'ImportazioneController''caricaScontiClientiAnagrafiche');
  4039.             $rit['errori'] = 'ERRORE PERMESSO';
  4040.             $rit['messaggio'] = ('ERRORE PERMESSO');
  4041.             return new JsonResponse($rit);
  4042.         }
  4043.     } //OK
  4044.     /**
  4045.      * @Route("/caricaAnagraficheOpzioniAggiuntive/{svuota}", name="carica_anagrafiche_opzioni_aggiuntive", defaults={"svuota"="0"})
  4046.      */
  4047.     public function caricaAnagraficheOpzioniAggiuntive(Request $request$svuota)
  4048.     {
  4049.         $collegamentoRnd $this->servizi->randomString2();
  4050.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  4051.             ini_set('max_execution_time'900);
  4052.             ini_set('memory_limit''4G');
  4053.             $start microtime(true);
  4054.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  4055.             $em $this->servizi->doctrine->getManager();
  4056.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  4057.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  4058.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  4059.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  4060.             $repo $this->servizi->doctrine->getRepository(AnagraficaOpzioniAggiuntive::class);
  4061.             $errori "";
  4062.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /caricaAnagraficheOpzioniAggiuntive/' $svuota ' --- Inizio l\' importazione delle scontistiche delle anagrafiche'null$collegamentoRnd'ImportazioneController''caricaAnagraficheOpzioniAggiuntive');
  4063.             if($svuota == '1'){
  4064.                 $this->servizi->doctrine->getConnection()->executeQuery('TRUNCATE TABLE anagrafica_opzioni_aggiuntive;');
  4065.             }
  4066.             $root_path $pathFileBase "anagrafiche_opzioni_aggiuntive.csv";
  4067.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  4068.             $contatore 0;
  4069.             $query_eseguite 0;
  4070.             $row 0;
  4071.             $batch_size 50;
  4072.             /*
  4073.              Index    Campo
  4074.                 0    codice_anagrafica
  4075.                 1    ordine
  4076.                 2    identificativo
  4077.                 3    etichetta
  4078.                 4    valore
  4079.                 5    operazione
  4080.                 6    tipo
  4081.                 7   livello_permesso
  4082.              */
  4083.             $indici = array(
  4084.                 "codiceAnagrafica" => 0,
  4085.                 "ordine" => 1,
  4086.                 "identificativo" => 2,
  4087.                 "etichetta" => 3,
  4088.                 "valore" => 4,
  4089.                 "tipo" => 6,
  4090.                 "operazione" => 5,
  4091.                 "livelloPermesso" => 7
  4092.             );
  4093.             try {
  4094.                 if (($handle fopen($root_path"r")) !== false) {
  4095.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  4096.                         if ($row == 0) {
  4097.                             $row 1;
  4098.                             continue;
  4099.                         }
  4100.                         if ($query_eseguite >= $batch_size) {
  4101.                             $contatore $contatore $row 1;
  4102.                             $row 1;
  4103.                             $query_eseguite 0;
  4104.                             $em->flush();
  4105.                             $em->clear();
  4106.                         }
  4107.                         $now = new \DateTime('now');
  4108.                         try {
  4109.                             $opzioneAgg $repo->findOneBy(array(
  4110.                                 'codiceAnagrafica' => $data[$indici["codiceAnagrafica"]],
  4111.                                 'identificativo' => $data[$indici["identificativo"]]
  4112.                             ));
  4113.                             if ($opzioneAgg) {
  4114.                                 if ($data[$indici["operazione"]] == "E") {
  4115.                                     $em->remove($opzioneAgg);
  4116.                                     $query_eseguite++;
  4117.                                 } else {
  4118.                                     $opzioneAgg->setEtichetta($indici["etichetta"] !== '' $data[$indici["etichetta"]] : '');
  4119.                                     $opzioneAgg->setOrdine($indici["ordine"] !== '' $data[$indici["ordine"]] : '');
  4120.                                     $opzioneAgg->setValore($indici["valore"] !== '' $data[$indici["valore"]] : '');
  4121.                                     $opzioneAgg->setTipo($indici["tipo"] !== '' $data[$indici["tipo"]] : '');
  4122.                                     if(count($data) > $indici["livelloPermesso"])
  4123.                                         $opzioneAgg->setLivelloPermesso($indici["livelloPermesso"] !== '' $data[$indici["livelloPermesso"]] : null);
  4124.                                     $opzioneAgg->setDataModifica($now);
  4125.                                     $em->persist($opzioneAgg);
  4126.                                     $query_eseguite++;
  4127.                                 }
  4128.                             } else {
  4129.                                 $opzioneAgg = new AnagraficaOpzioniAggiuntive();
  4130.                                 $opzioneAgg->setCodiceAnagrafica($indici["codiceAnagrafica"] !== '' $data[$indici["codiceAnagrafica"]] : '');
  4131.                                 $opzioneAgg->setOrdine($indici["ordine"] !== '' $data[$indici["ordine"]] : '');
  4132.                                 $opzioneAgg->setIdentificativo($indici["identificativo"] !== '' $data[$indici["identificativo"]] : '');
  4133.                                 $opzioneAgg->setEtichetta($indici["etichetta"] !== '' $data[$indici["etichetta"]] : '');
  4134.                                 $opzioneAgg->setValore($indici["valore"] !== '' $data[$indici["valore"]] : '');
  4135.                                 $opzioneAgg->setTipo($indici["tipo"] !== '' $data[$indici["tipo"]] : '');
  4136.                                 if(count($data) > $indici["livelloPermesso"])
  4137.                                     $opzioneAgg->setLivelloPermesso($indici["livelloPermesso"] !== '' $data[$indici["livelloPermesso"]] : null);
  4138.                                 $opzioneAgg->setDataCreazione($now);
  4139.                                 $opzioneAgg->setDataModifica($now);
  4140.                                 $em->persist($opzioneAgg);
  4141.                                 $query_eseguite++;
  4142.                             }
  4143.                         } catch (\Exception|\Throwable $ex) {
  4144.                             $this->ScriviRegistroAttivita(null$request->getClientIp(), $ex->getTraceAsString(), false'Errore importazione: (RIGA: ' $contatore '): ' $ex->getMessage(), null$collegamentoRnd'ImportazioneController''caricaAnagraficheOpzioniAggiuntive');
  4145.                             $errori .= ('Errore importazione (RIGA: ' $contatore ') : ' $ex->getMessage() . '<br>');
  4146.                         }
  4147.                         $row++;
  4148.                         $em->flush();
  4149.                     }
  4150.                     $em->flush();
  4151.                     $em->clear();
  4152.                 }else{
  4153.                     $errori .= "Impossibile aprire il file!";
  4154.                 }
  4155.                 $row $contatore $row;
  4156.                 if ($errori == "") {
  4157.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds' $rownull$collegamentoRnd'ImportazioneController''caricaAnagraficheOpzioniAggiuntive');
  4158.                     return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  4159.                 } else {
  4160.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), var_export($erroritrue), false'Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds' $rownull$collegamentoRnd'ImportazioneController''caricaAnagraficheOpzioniAggiuntive');
  4161.                     return new Response('Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row "</br>Lista Errori:</br>" $errori);
  4162.                 }
  4163.             } catch (\Exception|\Throwable $ex) {
  4164.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), $ex->getTraceAsString(), false'Errore importazione: (RIGA: ' $contatore '): ' $ex->getMessage(), null$collegamentoRnd'ImportazioneController''caricaAnagraficheOpzioniAggiuntive');
  4165.                 return new Response('Errore importazione (RIGA: ' $contatore ') : ' $ex->getMessage());
  4166.             }
  4167.         } else {
  4168.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null$collegamentoRnd'ImportazioneController''caricaAnagraficheOpzioniAggiuntive');
  4169.             return new Response("ERRORE PERMESSO");
  4170.         }
  4171.     } //OK
  4172.     function randomString($length 6)
  4173.     {
  4174.         $str "";
  4175.         $characters array_merge(range('A''Z'), range('a''z'), range('0''9'));
  4176.         $max count($characters) - 1;
  4177.         for ($i 0$i $length$i++) {
  4178.             $rand mt_rand(0$max);
  4179.             $str .= $characters[$rand];
  4180.         }
  4181.         return $str;
  4182.     }
  4183.     /**
  4184.      * @Route("/caricaUnitaDiMisura", name="carica_unita_misura")
  4185.      */
  4186.     public function caricaUnitaDiMisura(Request $request)
  4187.     {
  4188.         $collegamentoRnd $this->servizi->randomString2();
  4189.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  4190.             ini_set('max_execution_time'1200);
  4191.             ini_set('memory_limit''4G');
  4192.             $start microtime(true);
  4193.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  4194.             $em $this->servizi->doctrine->getManager();
  4195.             $repo $this->servizi->doctrine->getRepository(UnitaMisura::class);
  4196.             $errori "";
  4197.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  4198.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  4199.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  4200.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  4201.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /caricaUnitaDiMisura --- Inizio l\' importazione dei dati'null$collegamentoRnd'ImportazioneController''caricaUnitaDiMisura');
  4202.             $errori "";
  4203.             $root_path $pathFileBase "um.csv";
  4204.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  4205.             $contatore 0;
  4206.             $row 0;
  4207.             $query_eseguite 0;
  4208.             $batch_size 50;
  4209.             /*
  4210.              *  0    codice
  4211.                 1    descrizione
  4212.                 2    fattore conversione
  4213.                 3    numero decimali
  4214.              */
  4215.             try {
  4216.                 if (($handle fopen($root_path"r")) !== false) {
  4217.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  4218.                         if ($row == 0) {
  4219.                             $row 1;
  4220.                             continue;
  4221.                         }
  4222.                         if ($query_eseguite >= $batch_size) {
  4223.                             $contatore $contatore $row 1;
  4224.                             $row 1;
  4225.                             $query_eseguite 0;
  4226.                             $em->flush();
  4227.                             $em->clear();
  4228.                         }
  4229.                         $now = new \DateTime('now');
  4230.                         try {
  4231.                             $umDb $repo->findOneBy(array('codice' => $data[0]));
  4232.                             if ($umDb) {
  4233.                                 $umDb->setDescrizione($data[1]);
  4234.                                 $umDb->setFattoreConversione(str_replace(',''.'$data[2]));
  4235.                                 $umDb->setNumeroDecimali(str_replace(',''.'$data[3]));
  4236.                                 $umDb->setDataModifica(new \DateTime());
  4237.                             } else {
  4238.                                 $umDb = new UnitaMisura();
  4239.                                 $umDb->setCodice($data[0]);
  4240.                                 $umDb->setDescrizione($data[1]);
  4241.                                 $umDb->setFattoreConversione(str_replace(',''.'$data[2]));
  4242.                                 $umDb->setNumeroDecimali(str_replace(',''.'$data[3]));
  4243.                                 $umDb->setAttivo(true);
  4244.                                 $umDb->setDataCreazione(new \DateTime());
  4245.                                 $umDb->setDataModifica(new \DateTime());
  4246.                             }
  4247.                             $em->persist($umDb);
  4248.                         } catch (\PDOException $ex) {
  4249.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione: ' $ex->getMessage(), null$collegamentoRnd'ImportazioneController''caricaUnitaDiMisura');
  4250.                         } catch (\Exception|\Throwable $exception) {
  4251.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione: ' $exception->getMessage(), null$collegamentoRnd'ImportazioneController''caricaUnitaDiMisura');
  4252.                         }
  4253.                         $row++;
  4254.                         $em->flush();
  4255.                     }
  4256.                 }else{
  4257.                     $errori .= "Impossibile aprire il file!";
  4258.                 }
  4259.                 $em->flush();
  4260.                 $row $contatore $row 1;
  4261.                 if ($errori == "") {
  4262.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull$collegamentoRnd'ImportazioneController''caricaUnitaDiMisura');
  4263.                     return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  4264.                 } else {
  4265.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull$collegamentoRnd'ImportazioneController''caricaUnitaDiMisura');
  4266.                     return new Response('Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row "</br>Lista Errori:</br>" $errori);
  4267.                 }
  4268.             } catch (\Exception|\Throwable $ex) {
  4269.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ' $ex->getMessage(), null$collegamentoRnd'ImportazioneController''caricaUnitaDiMisura');
  4270.                 return new Response('Errore importazione (RIGA: ' $contatore ') : ' $ex->getMessage());
  4271.             }
  4272.         } else {
  4273.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null$collegamentoRnd'ImportazioneController''caricaUnitaDiMisura');
  4274.             return new Response("ERRORE PERMESSO");
  4275.         }
  4276.     } //OK
  4277.     /**
  4278.      * @Route("/caricaNazioni", name="carica_nazioni")
  4279.      */
  4280.     public function caricaNazioni(Request $request)
  4281.     {
  4282.         $collegamentoRnd $this->servizi->randomString2();
  4283.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  4284.             ini_set('max_execution_time'1200);
  4285.             ini_set('memory_limit''4G');
  4286.             $start microtime(true);
  4287.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  4288.             $em $this->servizi->doctrine->getManager();
  4289.             $repo $this->servizi->doctrine->getRepository(Nazioni::class);
  4290.             $errori "";
  4291.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  4292.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  4293.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  4294.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  4295.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /caricaNazioni --- Inizio l\' importazione dei dati'null$collegamentoRnd'ImportazioneController''caricaNazioni');
  4296.             $errori "";
  4297.             $root_path $pathFileBase "nazioni.csv";
  4298.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  4299.             $contatore 0;
  4300.             $row 0;
  4301.             $query_eseguite 0;
  4302.             $batch_size 50;
  4303.             /*
  4304.              *  0    sigla iso
  4305.                 1    descrizione
  4306.                 2    flag paese cee
  4307.                 3    flag black list
  4308.                 4    operazione
  4309.              */
  4310.             try {
  4311.                 if (($handle fopen($root_path"r")) !== false) {
  4312.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  4313.                         if ($row == 0) {
  4314.                             $row 1;
  4315.                             continue;
  4316.                         }
  4317.                         if ($query_eseguite >= $batch_size) {
  4318.                             $contatore $contatore $row 1;
  4319.                             $row 1;
  4320.                             $query_eseguite 0;
  4321.                             $em->flush();
  4322.                             $em->clear();
  4323.                         }
  4324.                         $now = new \DateTime('now');
  4325.                         try {
  4326.                             $entity $repo->findOneBy(array('siglaIso' => $data[0]));
  4327.                             if ($entity) {
  4328.                                 if ($data[4] == "E") {
  4329.                                     $em->remove($entity);
  4330.                                     $query_eseguite++;
  4331.                                 } else {
  4332.                                     $entity->setDataModifica($now);
  4333.                                     $entity->setDescrizione($data[1]);
  4334.                                     $entity->setPaeseCee($data[2] == "1" true false);
  4335.                                     $entity->setBlacklist($data[3] == "1" true false);
  4336.                                     $em->persist($entity);
  4337.                                     $query_eseguite++;
  4338.                                 }
  4339.                             } else {
  4340.                                 $entity = new Nazioni();
  4341.                                 $entity->setSiglaIso($data[0]);
  4342.                                 $entity->setDescrizione($data[1]);
  4343.                                 $entity->setPaeseCee($data[2] == "1" true false);
  4344.                                 $entity->setBlacklist($data[3] == "1" true false);
  4345.                                 $entity->setDataCreazione($now);
  4346.                                 $entity->setDataModifica($now);
  4347.                                 $em->persist($entity);
  4348.                                 $query_eseguite++;
  4349.                             }
  4350.                         } catch (\PDOException $ex) {
  4351.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione: ' $ex->getMessage(), null$collegamentoRnd'ImportazioneController''caricaNazioni');
  4352.                         } catch (\Exception|\Throwable $exception) {
  4353.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione: ' $exception->getMessage(), null$collegamentoRnd'ImportazioneController''caricaNazioni');
  4354.                         }
  4355.                         $row++;
  4356.                         $em->flush();
  4357.                     }
  4358.                 }else{
  4359.                     $errori .= "Impossibile aprire il file!";
  4360.                 }
  4361.                 $em->flush();
  4362.                 $row $contatore $row 1;
  4363.                 if ($errori == "") {
  4364.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull$collegamentoRnd'ImportazioneController''caricaNazioni');
  4365.                     return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  4366.                 } else {
  4367.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull$collegamentoRnd'ImportazioneController''caricaNazioni');
  4368.                     return new Response('Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row "</br>Lista Errori:</br>" $errori);
  4369.                 }
  4370.             } catch (\Exception|\Throwable $ex) {
  4371.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ' $ex->getMessage(), null$collegamentoRnd'ImportazioneController''caricaNazioni');
  4372.                 return new Response('Errore importazione (RIGA: ' $contatore ') : ' $ex->getMessage());
  4373.             }
  4374.         } else {
  4375.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null$collegamentoRnd'ImportazioneController''caricaNazioni');
  4376.             return new Response("ERRORE PERMESSO");
  4377.         }
  4378.     } //OK
  4379.     /**
  4380.      * @Route("/caricaBlocchiAnagrafiche/{svuota}", name="carica_blocchi_anagrafiche", defaults={"svuota" = 0})
  4381.      */
  4382.     public function caricaBlocchiAnagrafiche(Request $request$svuota 0)
  4383.     {
  4384.         $collegamentoRnd $this->servizi->randomString2();
  4385.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  4386.             ini_set('max_execution_time'1200);
  4387.             ini_set('memory_limit''4G');
  4388.             $start microtime(true);
  4389.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  4390.             $em $this->servizi->doctrine->getManager();
  4391.             $repo $this->servizi->doctrine->getRepository(AnagraficheBlocchi::class);
  4392.             $errori "";
  4393.             /** @var User|null $user */
  4394.             $user $this->servizi->OttieniUtenteCorrente();
  4395.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  4396.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  4397.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  4398.             $svuota = ($svuota == '1' true false);
  4399.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  4400.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /caricaBlocchiAnagrafiche --- Inizio l\' importazione dei dati' . ($svuota ' con svuotamento tabella' ''), null$collegamentoRnd'ImportazioneController''caricaBlocchiAnagrafiche');
  4401.             $errori "";
  4402.             $root_path $pathFileBase "blocchi_anagrafiche.csv";
  4403.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  4404.             $contatore 0;
  4405.             $row 0;
  4406.             $query_eseguite 0;
  4407.             $batch_size 50;
  4408.             if($svuota){
  4409.                 $this->servizi->doctrine->getConnection()->executeQuery("TRUNCATE TABLE anagrafiche_blocchi;");
  4410.             }
  4411.             /*
  4412.              *  0    codice_cliente
  4413.                 1    identificativo_blocco
  4414.                 2    tipo_blocco
  4415.                 3    mostra_avviso
  4416.                 4    testo_avviso
  4417.                 5    vincola_a_codice_agente
  4418.                 6    operazione
  4419.              */
  4420.             $indici = array(
  4421.                 "codiceCliente" => 0,
  4422.                 "identificativoBlocco" => 1,
  4423.                 "tipoBlocco" => 2,
  4424.                 "mostraAvviso" => 3,
  4425.                 "testoAvviso" => 4,
  4426.                 "vincolaACodiceAgente" => 5,
  4427.                 "operazione" => 6
  4428.             );
  4429.             try {
  4430.                 if (($handle fopen($root_path"r")) !== false) {
  4431.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  4432.                         if ($row == 0) {
  4433.                             $row 1;
  4434.                             continue;
  4435.                         }
  4436.                         if ($query_eseguite >= $batch_size) {
  4437.                             $contatore $contatore $row 1;
  4438.                             $row 1;
  4439.                             $query_eseguite 0;
  4440.                             $em->flush();
  4441.                             $em->clear();
  4442.                         }
  4443.                         try {
  4444.                             $entity null;
  4445.                             if (!$svuota && $data[$indici['identificativoBlocco']] != ''){
  4446.                                 $entity $repo->findOneBy(array('codiceCliente' => $data[$indici['codiceCliente']], 'identificativoBlocco' => $data[$indici['identificativoBlocco']]));
  4447.                             }
  4448.                             if ($entity) {
  4449.                                 if ($data[$indici['operazione']] == "E") {
  4450.                                     $em->remove($entity);
  4451.                                     $query_eseguite++;
  4452.                                 } else {
  4453.                                     $entity->setDataModifica(new \DateTime());
  4454.                                     $entity->setTipoBlocco($data[$indici['tipoBlocco']]);
  4455.                                     $entity->setMostraAvviso($data[$indici['mostraAvviso']] == '1' true false);
  4456.                                     $entity->setTestoAvviso($data[$indici['testoAvviso']]);
  4457.                                     $entity->setVincolaACodiceAgente($data[$indici['vincolaACodiceAgente']]);
  4458.                                     $em->persist($entity);
  4459.                                     $query_eseguite++;
  4460.                                 }
  4461.                             } else {
  4462.                                 $entity = new AnagraficheBlocchi();
  4463.                                 $entity->setDataModifica(new \DateTime());
  4464.                                 $entity->setTipoBlocco($data[$indici['tipoBlocco']]);
  4465.                                 $entity->setMostraAvviso($data[$indici['mostraAvviso']] == '1' true false);
  4466.                                 $entity->setTestoAvviso($data[$indici['testoAvviso']]);
  4467.                                 $entity->setVincolaACodiceAgente($data[$indici['vincolaACodiceAgente']]);
  4468.                                 $entity->setCodiceCliente($data[$indici['codiceCliente']]);
  4469.                                 $entity->setDataCreazione(new \DateTime());
  4470.                                 $em->persist($entity);
  4471.                                 $query_eseguite++;
  4472.                             }
  4473.                         } catch (\PDOException $ex) {
  4474.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione: ' $ex->getMessage(), null$collegamentoRnd'ImportazioneController''caricaBlocchiAnagrafiche');
  4475.                         } catch (\Exception|\Throwable $exception) {
  4476.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione: ' $exception->getMessage(), null$collegamentoRnd'ImportazioneController''caricaBlocchiAnagrafiche');
  4477.                         }
  4478.                         $row++;
  4479.                         $em->flush();
  4480.                     }
  4481.                 }else{
  4482.                     $errori .= "Impossibile aprire il file!";
  4483.                 }
  4484.                 $em->flush();
  4485.                 $row $contatore $row 1;
  4486.                 if ($errori == "") {
  4487.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull$collegamentoRnd'ImportazioneController''caricaBlocchiAnagrafiche');
  4488.                     return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  4489.                 } else {
  4490.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull$collegamentoRnd'ImportazioneController''caricaBlocchiAnagrafiche');
  4491.                     return new Response('Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row "</br>Lista Errori:</br>" $errori);
  4492.                 }
  4493.             } catch (\Exception|\Throwable $ex) {
  4494.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ' $ex->getMessage(), null$collegamentoRnd'ImportazioneController''caricaBlocchiAnagrafiche');
  4495.                 return new Response('Errore importazione (RIGA: ' $contatore ') : ' $ex->getMessage());
  4496.             }
  4497.         } else {
  4498.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null$collegamentoRnd'ImportazioneController''caricaBlocchiAnagrafiche');
  4499.             return new Response("ERRORE PERMESSO");
  4500.         }
  4501.     } //OK
  4502.     /**
  4503.      * @Route("/caricaAttributiArticoli/{svuota}", name="carica_attributi_articoli", defaults={"svuota" = 0})
  4504.      */
  4505.     public function carticaAttributiArticoli(Request $request$svuota 0)
  4506.     {
  4507.         $collegamentoRnd $this->servizi->randomString2();
  4508.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  4509.             ini_set('max_execution_time', -1);
  4510.             ini_set('memory_limit''4G');
  4511.             $start microtime(true);
  4512.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  4513.             $em $this->servizi->doctrine->getManager();
  4514.             $repo $this->servizi->doctrine->getRepository(Attributi::class);
  4515.             $repoAssociazioneAtt $this->servizi->doctrine->getRepository(AssociazioneAttributi::class);
  4516.             $repoMappa $this->servizi->doctrine->getRepository(MappaCategorieArticoli::class);
  4517.             $repoArticoli $this->servizi->doctrine->getRepository(Articoli::class);
  4518.             $errori "";
  4519.             /** @var User|null $user */
  4520.             $user $this->servizi->OttieniUtenteCorrente();
  4521.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  4522.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  4523.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  4524.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  4525.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /caricaAttributiArticoli --- Inizio l\' importazione dei dati' . ($svuota ' con svuotamento tabella' ''), null$collegamentoRnd'ImportazioneController''caricaAttributiArticoli');
  4526.             $errori "";
  4527.             $root_path $pathFileBase "attributi_articoli.csv";
  4528.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  4529.             $contatore 0;
  4530.             $row 0;
  4531.             $query_eseguite 0;
  4532.             $batch_size 100;
  4533.             $indiciPrimaRiga = array();
  4534.             try {
  4535.                 if (($handle fopen($root_path"r")) !== false) {
  4536.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  4537.                         var_dump("AAA PRIMA");
  4538.                         if ($row == 0) {
  4539.                             for($i 0$i count($data); $i++){
  4540.                                 $indiciPrimaRiga[$i] = $data[$i];
  4541.                             }
  4542.                             $row 1;
  4543.                             continue;
  4544.                         }
  4545.                         var_dump($indiciPrimaRiga);
  4546.                         if ($query_eseguite >= $batch_size) {
  4547.                             $contatore $contatore $row 1;
  4548.                             $row 1;
  4549.                             $query_eseguite 0;
  4550.                             $em->flush();
  4551.                             $em->clear();
  4552.                         }
  4553.                         try {
  4554.                             $articolo $repoArticoli->findOneBy(array('codice' => $data[0]));
  4555.                             if($articolo){
  4556.                                 $mappa $repoMappa->findOneBy(array('articolo' => $articolo'marca' => $data[1]));
  4557.                                 if($mappa){
  4558.                                     for($i 2$i count($indiciPrimaRiga) + 2$i++){
  4559.                                         if($data[$i] != '') {
  4560.                                             $attributo $repo->findOneBy(array('nome' => $indiciPrimaRiga[$i]));
  4561.                                             if (!$attributo) {
  4562.                                                 $attributo = new Attributi();
  4563.                                                 $attributo->setNome($indiciPrimaRiga[$i]);
  4564.                                                 $attributo->setTestoVisualizzato($indiciPrimaRiga[$i]);
  4565.                                                 $attributo->setCodiceIdentificativo($indiciPrimaRiga[$i]);
  4566.                                                 $attributo->setDataCreazione(new \DateTime());
  4567.                                                 $attributo->setDataModifica(new \DateTime());
  4568.                                                 $em->persist($attributo);
  4569.                                                 $em->flush();
  4570.                                             }
  4571.                                             $assAtt $repoAssociazioneAtt->findOneBy(array('mappaCategoriaArticolo' => $mappa'articolo' => $articolo'attributo' => $attributo));
  4572.                                             if (!$assAtt) {
  4573.                                                 $assAtt = new AssociazioneAttributi();
  4574.                                                 $assAtt->setDataCreazione(new \DateTime());
  4575.                                                 $assAtt->setDataModifica(new \DateTime());
  4576.                                                 $assAtt->setMappaCategoriaArticolo($mappa);
  4577.                                                 $assAtt->setArticolo($articolo);
  4578.                                                 $assAtt->setAttributo($attributo);
  4579.                                                 $assAtt->setValore(str_replace(',''.'$data[$i]));
  4580.                                                 $em->persist($assAtt);
  4581.                                                 $query_eseguite++;
  4582.                                             } else {
  4583.                                                 $assAtt->setDataModifica(new \DateTime());
  4584.                                                 $assAtt->setValore(str_replace(',''.'$data[$i]));
  4585.                                                 $em->persist($assAtt);
  4586.                                                 $query_eseguite++;
  4587.                                             }
  4588.                                         }
  4589.                                     }
  4590.                                 }else{
  4591.                                     $errori .= ('Errore carica attributi articoli! Mappa articolo con codice articolo: ' $data[0] . ' e marca: ' $data[1] . ' non trovata!<br/>');
  4592.                                 }
  4593.                             }else{
  4594.                                 $errori .= ('Errore carica attributi articoli! Articolo con codice: ' $data[0] . ' non trovato!<br/>');
  4595.                             }
  4596.                         } catch (\PDOException $ex) {
  4597.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione: ' $ex->getMessage(), null$collegamentoRnd'ImportazioneController''caricaAttributiArticoli');
  4598.                         } catch (\Exception|\Throwable $exception) {
  4599.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione: ' $exception->getMessage(), null$collegamentoRnd'ImportazioneController''caricaAttributiArticoli');
  4600.                         }
  4601.                         $row++;
  4602.                         $em->flush();
  4603.                     }
  4604.                 }else{
  4605.                     $errori .= "Impossibile aprire il file!";
  4606.                 }
  4607.                 $em->flush();
  4608.                 $row $contatore $row 1;
  4609.                 if ($errori == "") {
  4610.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull$collegamentoRnd'ImportazioneController''caricaAttributiArticoli');
  4611.                     return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  4612.                 } else {
  4613.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull$collegamentoRnd'ImportazioneController''caricaAttributiArticoli');
  4614.                     return new Response('Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row "</br>Lista Errori:</br>" $errori);
  4615.                 }
  4616.             } catch (\Exception|\Throwable $ex) {
  4617.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ' $ex->getMessage(), null$collegamentoRnd'ImportazioneController''caricaAttributiArticoli');
  4618.                 return new Response('Errore importazione (RIGA: ' $contatore ') : ' $ex->getMessage());
  4619.             }
  4620.         } else {
  4621.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null$collegamentoRnd'ImportazioneController''caricaAttributiArticoli');
  4622.             return new Response("ERRORE PERMESSO");
  4623.         }
  4624.     } //OK
  4625.     /**
  4626.      * @Route("/caricaVarianti", name="carica_varianti")
  4627.      */
  4628.     public function caricaVarianti(Request $request)
  4629.     {
  4630.         $collegamentoRnd $this->servizi->randomString2();
  4631.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  4632.             ini_set('max_execution_time'1200);
  4633.             ini_set('memory_limit''4G');
  4634.             $start microtime(true);
  4635.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  4636.             $em $this->servizi->doctrine->getManager();
  4637.             $repo $this->servizi->doctrine->getRepository(Varianti::class);
  4638.             $errori "";
  4639.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  4640.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  4641.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  4642.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  4643.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  4644.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /caricaVarianti --- Inizio l\' importazione dei dati'null$collegamentoRnd'ImportazioneController''caricaVarianti');
  4645.             $errori "";
  4646.             $root_path $pathFileBase "articoli_varianti.csv";
  4647.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  4648.             $contatore 0;
  4649.             $row 0;
  4650.             $query_eseguite 0;
  4651.             $batch_size 50;
  4652.             /*  0    codice articolo
  4653.                 1    codice dimensione 01
  4654.                 2    descrizione dimensione 01
  4655.                 3    posizione dimensione 01
  4656.                 4    immagine dimensione 01
  4657.                 5    codice dimensione 02
  4658.                 6    descrizione dimensione 02
  4659.                 7    posizione dimensione 02
  4660.                 8    immagine dimensione 02
  4661.                 9    codice dimensione 02
  4662.                 10    descrizione dimensione 02
  4663.                 11    posizione dimensione 02
  4664.                 12    immagine dimensione 02
  4665.                 13    codice dimensione 02
  4666.                 14    descrizione dimensione 02
  4667.                 15    posizione dimensione 02
  4668.                 16    immagine dimensione 02
  4669.                 17    codice dimensione 02
  4670.                 18    descrizione dimensione 02
  4671.                 19    posizione dimensione 02
  4672.                 20    immagine dimensione 02
  4673.                 21    codice variante
  4674.                 22    disponibilita
  4675.                 23    operazione
  4676.                 24  um_peso
  4677.                 25    peso netto
  4678.                 26    peso lordo
  4679.              */
  4680.             $indici = array(
  4681.                 "codiceArticolo" => 0,
  4682.                 "codiceDimensione1" => 1,
  4683.                 "descrizioneDimenisone1" => 2,
  4684.                 "posizioneDimensione1" => 3,
  4685.                 "immagineDimensione1" => 4,
  4686.                 "codiceDimensione2" => 5,
  4687.                 "descrizioneDimenisone2" => 6,
  4688.                 "posizioneDimensione2" => 7,
  4689.                 "immagineDimensione2" => 8,
  4690.                 "codiceDimensione3" => 9,
  4691.                 "descrizioneDimenisone3" => 10,
  4692.                 "posizioneDimensione3" => 11,
  4693.                 "immagineDimensione3" => 12,
  4694.                 "codiceDimensione4" => 13,
  4695.                 "descrizioneDimenisone4" => 14,
  4696.                 "posizioneDimensione4" => 15,
  4697.                 "immagineDimensione4" => 16,
  4698.                 "codiceDimensione5" => 17,
  4699.                 "descrizioneDimenisone5" => 18,
  4700.                 "posizioneDimensione5" => 19,
  4701.                 "immagineDimensione5" => 20,
  4702.                 "codiceVariante" => 21,
  4703.                 "disponibilita" => 22,
  4704.                 "operazione" => 23,
  4705.                 "umPeso" => 24,
  4706.                 "pesoNetto" => 25,
  4707.                 "pesoLordo" => 26
  4708.             );
  4709.             try {
  4710.                 if (($handle fopen($root_path"r")) !== false) {
  4711.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  4712.                         if ($row == 0) {
  4713.                             $row 1;
  4714.                             continue;
  4715.                         }
  4716.                         if ($query_eseguite >= $batch_size) {
  4717.                             $contatore $contatore $row 1;
  4718.                             $row 1;
  4719.                             $query_eseguite 0;
  4720.                             $em->flush();
  4721.                             $em->clear();
  4722.                         }
  4723.                         $now = new \DateTime('now');
  4724.                         try {
  4725.                             $entita null;
  4726.                             $umPeso null;
  4727.                             if(count($data) >= 25) {
  4728.                                 $umPeso $this->servizi->doctrine->getRepository(UnitaMisura::class)->findOneBy(array('codice' => $data[$indici['umPeso']]));
  4729.                                 if (!$umPeso && $data[$indici['umPeso']] != '') {
  4730.                                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true"Nuova unita di misura peso trovata: " $data[20], null);
  4731.                                     $umPeso = new UnitaMisura();
  4732.                                     $umPeso->setDataCreazione(new \DateTime());
  4733.                                     $umPeso->setDataModifica(new \DateTime());
  4734.                                     $umPeso->setAttivo(true);
  4735.                                     $umPeso->setFattoreConversione(1);
  4736.                                     $umPeso->setCodice($data[20]);
  4737.                                     $umPeso->setNumeroDecimali(3);
  4738.                                     $em->persist($umPeso);
  4739.                                     $query_eseguite++;
  4740.                                 }
  4741.                             }
  4742.                             /** @var  $listaVarianti Varianti[] */
  4743.                             $listaVarianti $repo->createQueryBuilder('varianti')
  4744.                                 ->leftJoin('varianti.mappa''mappa')
  4745.                                 ->leftJoin('mappa.articolo''articolo')
  4746.                                 ->where('articolo.codice = :codArt')->setParameter('codArt'$data[$indici["codiceArticolo"]])
  4747.                                 ->andWhere('varianti.codiceVariante = :codVar')->setParameter('codVar'$data[$indici["codiceVariante"]])
  4748.                                 ->andWhere('varianti.codiceDimensione1 = :codDim1')->setParameter('codDim1'$data[$indici["codiceDimensione1"]])
  4749.                                 ->andWhere('varianti.codiceDimensione2 = :codDim2')->setParameter('codDim2'$data[$indici["codiceDimensione2"]])
  4750.                                 ->andWhere('varianti.codiceDimensione3 = :codDim3')->setParameter('codDim3'$data[$indici["codiceDimensione3"]])
  4751.                                 ->andWhere('varianti.codiceDimensione4 = :codDim4')->setParameter('codDim4'$data[$indici["codiceDimensione4"]])
  4752.                                 ->andWhere('varianti.codiceDimensione5 = :codDim5')->setParameter('codDim5'$data[$indici["codiceDimensione5"]])
  4753.                                 ->getQuery()->getResult();
  4754.                             if (count($listaVarianti) > 0) {
  4755.                                 $entita $listaVarianti[0];
  4756.                                 if ($data[$indici["operazione"]] == "E") {
  4757.                                     $entita->setDataModifica(new \DateTime());
  4758.                                     $entita->setAttivo(false);
  4759.                                     $em->persist($entita);
  4760.                                     $query_eseguite++;
  4761.                                 } else {
  4762.                                     $entita->setDescrizioneDimensione1($data[$indici["descrizioneDimenisone1"]]);
  4763.                                     $entita->setPosizioneDimensione1($data[$indici["posizioneDimensione1"]]);
  4764.                                     $entita->setImmagineDimensione1($data[$indici["immagineDimensione1"]]);
  4765.                                     $entita->setDescrizioneDimensione2($data[$indici["descrizioneDimenisone2"]]);
  4766.                                     $entita->setPosizioneDimensione2($data[$indici["posizioneDimensione2"]]);
  4767.                                     $entita->setImmagineDimensione2($data[$indici["immagineDimensione2"]]);
  4768.                                     $entita->setDescrizioneDimensione3($data[$indici["descrizioneDimenisone3"]]);
  4769.                                     $entita->setPosizioneDimensione3($data[$indici["posizioneDimensione3"]]);
  4770.                                     $entita->setImmagineDimensione3($data[$indici["immagineDimensione3"]]);
  4771.                                     $entita->setDescrizioneDimensione4($data[$indici["descrizioneDimenisone4"]]);
  4772.                                     $entita->setPosizioneDimensione4($data[$indici["posizioneDimensione4"]]);
  4773.                                     $entita->setImmagineDimensione4($data[$indici["immagineDimensione4"]]);
  4774.                                     $entita->setDescrizioneDimensione5($data[$indici["descrizioneDimenisone5"]]);
  4775.                                     $entita->setPosizioneDimensione5($data[$indici["posizioneDimensione5"]]);
  4776.                                     $entita->setImmagineDimensione5($data[$indici["immagineDimensione5"]]);
  4777.                                     $entita->setDisponibile(str_replace(',''.'$data[$indici["disponibilita"]]));
  4778.                                     $entita->setUmPeso($umPeso);
  4779.                                     $entita->setPesoNetto(str_replace(',''.', (count($data) >= 26 $data[$indici["pesoNetto"]] : 0)));
  4780.                                     $entita->setPesoLordo(str_replace(',''.', (count($data) >= 27 $data[$indici["pesoLordo"]] : 0)));
  4781.                                     $entita->setOrdiniFornitori(0);
  4782.                                     $entita->setAttivo(true);
  4783.                                     $entita->setDataModifica($now);
  4784.                                     $em->persist($entita);
  4785.                                     $mappa $entita->getMappa();
  4786.                                     $mappa->setVariantiPresenti(true);
  4787.                                     $em->persist($mappa);
  4788.                                     $query_eseguite += 2;
  4789.                                 }
  4790.                             } else {
  4791.                                 $listaMappe $this->servizi->doctrine->getRepository(MappaCategorieArticoli::class)->createQueryBuilder('mappa_categorie_articoli')
  4792.                                     ->leftJoin('mappa_categorie_articoli.articolo''articolo')
  4793.                                     ->where('articolo.codice = :cod')->setParameter('cod'$data[0])
  4794.                                     ->getQuery()->getResult();
  4795.                                 if (count($listaMappe) > 0) {
  4796.                                     /** @var MappaCategorieArticoli $mp */
  4797.                                     $mp $listaMappe[0];
  4798.                                     if (!$mp->getVariantiPresenti()) {
  4799.                                         $mp->setVariantiPresenti(true);
  4800.                                         $em->persist($mp);
  4801.                                         $query_eseguite++;
  4802.                                     }
  4803.                                     $entita = new Varianti();
  4804.                                     $entita->setMappa($listaMappe[0]);
  4805.                                     $entita->setCodiceVariante($data[$indici["codiceVariante"]]);
  4806.                                     $entita->setCodiceDimensione1($data[$indici["codiceDimensione1"]]);
  4807.                                     $entita->setDescrizioneDimensione1($data[$indici["descrizioneDimenisone1"]]);
  4808.                                     $entita->setPosizioneDimensione1($data[$indici["posizioneDimensione1"]]);
  4809.                                     $entita->setImmagineDimensione1($data[$indici["immagineDimensione1"]]);
  4810.                                     $entita->setCodiceDimensione2($data[$indici["codiceDimensione2"]]);
  4811.                                     $entita->setDescrizioneDimensione2($data[$indici["descrizioneDimenisone2"]]);
  4812.                                     $entita->setPosizioneDimensione2($data[$indici["posizioneDimensione2"]]);
  4813.                                     $entita->setImmagineDimensione2($data[$indici["immagineDimensione2"]]);
  4814.                                     $entita->setCodiceDimensione3($data[$indici["codiceDimensione3"]]);
  4815.                                     $entita->setDescrizioneDimensione3($data[$indici["descrizioneDimenisone3"]]);
  4816.                                     $entita->setPosizioneDimensione3($data[$indici["posizioneDimensione3"]]);
  4817.                                     $entita->setImmagineDimensione3($data[$indici["immagineDimensione3"]]);
  4818.                                     $entita->setCodiceDimensione4($data[$indici["codiceDimensione4"]]);
  4819.                                     $entita->setDescrizioneDimensione4($data[$indici["descrizioneDimenisone4"]]);
  4820.                                     $entita->setPosizioneDimensione4($data[$indici["posizioneDimensione4"]]);
  4821.                                     $entita->setImmagineDimensione4($data[$indici["immagineDimensione4"]]);
  4822.                                     $entita->setCodiceDimensione5($data[$indici["codiceDimensione5"]]);
  4823.                                     $entita->setDescrizioneDimensione5($data[$indici["descrizioneDimenisone5"]]);
  4824.                                     $entita->setPosizioneDimensione5($data[$indici["posizioneDimensione5"]]);
  4825.                                     $entita->setImmagineDimensione5($data[$indici["immagineDimensione5"]]);
  4826.                                     $entita->setDisponibile(str_replace(',''.'$data[$indici["disponibilita"]]));
  4827.                                     $entita->setUmPeso($umPeso);
  4828.                                     $entita->setAttivo(true);
  4829.                                     $entita->setPesoNetto(str_replace(',''.', (count($data) >= 26 $data[$indici["pesoNetto"]] : 0)));
  4830.                                     $entita->setPesoLordo(str_replace(',''.', (count($data) >= 27 $data[$indici["pesoLordo"]] : 0)));
  4831.                                     $entita->setOrdiniFornitori(0);
  4832.                                     $entita->setDataModifica($now);
  4833.                                     $entita->setDataCreazione($now);
  4834.                                     $em->persist($entita);
  4835.                                     $query_eseguite++;
  4836.                                 } else {
  4837.                                     $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione variante. Mappa con codice articolo: ' $data[$indici["codiceArticolo"]] . ' non trovata! 'null$collegamentoRnd'ImportazioneController''caricaVarianti');
  4838.                                 }
  4839.                             }
  4840.                         } catch (\PDOException $ex) {
  4841.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione: ' $ex->getMessage(), null$collegamentoRnd'ImportazioneController''caricaVarianti');
  4842.                         } catch (\Exception|\Throwable $exception) {
  4843.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione: ' $exception->getMessage(), null$collegamentoRnd'ImportazioneController''caricaVarianti');
  4844.                         }
  4845.                         $row++;
  4846.                         $em->flush();
  4847.                     }
  4848.                 }else{
  4849.                     $errori .= "Impossibile aprire il file!";
  4850.                 }
  4851.                 $em->flush();
  4852.                 $row $contatore $row 1;
  4853.                 if ($errori == "") {
  4854.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull$collegamentoRnd'ImportazioneController''caricaVarianti');
  4855.                     return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  4856.                 } else {
  4857.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull$collegamentoRnd'ImportazioneController''caricaVarianti');
  4858.                     return new Response('Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row "</br>Lista Errori:</br>" $errori);
  4859.                 }
  4860.             } catch (\Exception|\Throwable $ex) {
  4861.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ' $ex->getMessage(), null$collegamentoRnd'ImportazioneController''caricaVarianti');
  4862.                 return new Response('Errore importazione (RIGA: ' $contatore ') : ' $ex->getMessage());
  4863.             }
  4864.         } else {
  4865.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null$collegamentoRnd'ImportazioneController''caricaVarianti');
  4866.             return new Response("ERRORE PERMESSO");
  4867.         }
  4868.     } //OK
  4869.     /**
  4870.      * @Route("/caricaPagamenti", name="carica_pagamenti")
  4871.      */
  4872.     public function caricaPagamenti(Request $request)
  4873.     {
  4874.         $collegamentoRnd $this->servizi->randomString2();
  4875.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  4876.             ini_set('max_execution_time'1200);
  4877.             ini_set('memory_limit''4G');
  4878.             $start microtime(true);
  4879.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  4880.             $em $this->servizi->doctrine->getManager();
  4881.             $repo $this->servizi->doctrine->getRepository(Pagamenti::class);
  4882.             $errori "";
  4883.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  4884.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  4885.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  4886.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  4887.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /caricaPagamenti --- Inizio l\' importazione dei dati'null$collegamentoRnd'ImportazioneController''caricaPagamenti');
  4888.             $errori "";
  4889.             $root_path $pathFileBase "pagamenti.csv";
  4890.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  4891.             $contatore 0;
  4892.             $row 0;
  4893.             $query_eseguite 0;
  4894.             $batch_size 50;
  4895.             /*
  4896.              * 0    codice
  4897.                 1    descrizione
  4898.                 2    operazione
  4899.              */
  4900.             try {
  4901.                 if (($handle fopen($root_path"r")) !== false) {
  4902.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  4903.                         if ($row == 0) {
  4904.                             $row 1;
  4905.                             continue;
  4906.                         }
  4907.                         if ($query_eseguite >= $batch_size) {
  4908.                             $contatore $contatore $row 1;
  4909.                             $row 1;
  4910.                             $query_eseguite 0;
  4911.                             $em->flush();
  4912.                             $em->clear();
  4913.                         }
  4914.                         $now = new \DateTime('now');
  4915.                         try {
  4916.                             $entita null;
  4917.                             $nuovo false;
  4918.                             $entita $repo->findOneBy(array('codice' => $data[0]));
  4919.                             if (!$entita) {
  4920.                                 $entita = new Pagamenti();
  4921.                                 $nuovo true;
  4922.                             }
  4923.                             if ($data[2] == "E") {
  4924.                                 $em->remove($entita);
  4925.                                 $query_eseguite++;
  4926.                             } else {
  4927.                                 $entita->setCodice($data[0]);
  4928.                                 $entita->setNome($data[1]);
  4929.                                 $entita->setDescrizione($data[1]);
  4930.                                 $entita->setCodiceEsportazione($data[0]);
  4931.                                 $entita->setDataModifica($now);
  4932.                                 if ($nuovo)
  4933.                                     $entita->setDataCreazione($now);
  4934.                                 $em->persist($entita);
  4935.                                 $query_eseguite++;
  4936.                             }
  4937.                         } catch (\PDOException $ex) {
  4938.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione: ' $ex->getMessage(), null$collegamentoRnd'ImportazioneController''caricaPagamenti');
  4939.                         } catch (\Exception|\Throwable $exception) {
  4940.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione: ' $exception->getMessage(), null$collegamentoRnd'ImportazioneController''caricaPagamenti');
  4941.                         }
  4942.                         $row++;
  4943.                         $em->flush();
  4944.                     }
  4945.                 }else{
  4946.                     $errori .= "Impossibile aprire il file!";
  4947.                 }
  4948.                 $em->flush();
  4949.                 $row $contatore $row 1;
  4950.                 if ($errori == "") {
  4951.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull$collegamentoRnd'ImportazioneController''caricaPagamenti');
  4952.                     return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  4953.                 } else {
  4954.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull$collegamentoRnd'ImportazioneController''caricaPagamenti');
  4955.                     return new Response('Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row "</br>Lista Errori:</br>" $errori);
  4956.                 }
  4957.             } catch (\Exception|\Throwable $ex) {
  4958.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ' $ex->getMessage(), null$collegamentoRnd'ImportazioneController''caricaPagamenti');
  4959.                 return new Response('Errore importazione (RIGA: ' $contatore ') : ' $ex->getMessage());
  4960.             }
  4961.         } else {
  4962.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null$collegamentoRnd'ImportazioneController''caricaPagamenti');
  4963.             return new Response("ERRORE PERMESSO");
  4964.         }
  4965.     } //OK
  4966.     /**
  4967.      * @Route("/caricaLimitazioneOrdinazioni", name="carica_limitazioni_ordinazioni")
  4968.      */
  4969.     public function caricaLimitazioneOrdinazioni(Request $request)
  4970.     {
  4971.         $collegamentoRnd $this->servizi->randomString2();
  4972.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  4973.             ini_set('max_execution_time'1200);
  4974.             ini_set('memory_limit''4G');
  4975.             $start microtime(true);
  4976.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  4977.             $em $this->servizi->doctrine->getManager();
  4978.             $repo $this->servizi->doctrine->getRepository(LimitazioniOrdinazioniArticoli::class);
  4979.             $errori "";
  4980.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  4981.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  4982.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  4983.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  4984.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /caricaLimitazioneOrdinazioni --- Inizio l\' importazione dei dati'null$collegamentoRnd'ImportazioneController''caricaLimitazioneOrdinazioni');
  4985.             $errori "";
  4986.             $root_path $pathFileBase "limitazione_ordinazioni.csv";
  4987.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  4988.             $contatore 0;
  4989.             $row 0;
  4990.             $query_eseguite 0;
  4991.             $batch_size 50;
  4992.             /*
  4993.              *  0    codice_variante
  4994.                 1    identificativo_campo
  4995.                 2    nome
  4996.                 3    multipli_di
  4997.                 4    qta_minima
  4998.                 5    messaggio_errore
  4999.                 6    attivo
  5000.                 7    operazione
  5001.                 8   codice_articolo
  5002.              */
  5003.             try {
  5004.                 if (($handle fopen($root_path"r")) !== false) {
  5005.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  5006.                         if ($row == 0) {
  5007.                             $row 1;
  5008.                             continue;
  5009.                         }
  5010.                         $contatore++;
  5011.                         if ($query_eseguite >= $batch_size) {
  5012.                             $contatore $contatore $row 1;
  5013.                             $row 1;
  5014.                             $query_eseguite 0;
  5015.                             $em->flush();
  5016.                             $em->clear();
  5017.                         }
  5018.                         $now = new \DateTime('now');
  5019.                         try {
  5020.                             $entita null;
  5021.                             $nuovo false;
  5022.                             $variante $this->servizi->doctrine->getRepository(Varianti::class)->findOneBy(array('codiceVariante' => $data[0]));
  5023.                             if($variante) {
  5024.                                 $entita $repo->findOneBy(array('identificativoCampo' => $data[1]));
  5025.                                 if (!$entita) {
  5026.                                     $entita = new LimitazioniOrdinazioniArticoli();
  5027.                                     $nuovo true;
  5028.                                 }
  5029.                                 if ($data[7] == "E") {
  5030.                                     if ($data[0] != '') {
  5031.                                         $variante $this->servizi->doctrine->getRepository(Varianti::class)->findOneBy(array('codiceVariante' => $data[0]));
  5032.                                         if ($entita->getVarianti()->contains($variante->getId())){
  5033.                                             $entita->removeVarianti($variante);
  5034.                                             $em->persist($entita);
  5035.                                         }
  5036.                                     }else if (count($data) >= && $data[8] != '') {
  5037.                                         $articolo $this->servizi->doctrine->getRepository(Articoli::class)->findOneBy(array('codice' => $data[8]));
  5038.                                         if($entita->getArticoli()->contains($articolo->getId())){
  5039.                                             $entita->removeArticoli($articolo);
  5040.                                             $em->persist($entita);
  5041.                                         }
  5042.                                     }
  5043.                                     if($entita->getArticoli()->count() <= 0
  5044.                                         && $entita->getVarianti()->count() <= 0
  5045.                                         && $entita->getCategorie1()->count() <= 0
  5046.                                         && $entita->getCategorie2()->count() <= 0
  5047.                                         && $entita->getCategorie3()->count() <= 0
  5048.                                         && $entita->getCategorie4()->count() <= 0
  5049.                                         && $entita->getCategorie5()->count() <= 0
  5050.                                         && $entita->getMappeCategorieArticoli()->count() <= 0
  5051.                                     ){
  5052.                                         $em->remove($entita);
  5053.                                         $query_eseguite++;
  5054.                                     }
  5055.                                 } else {
  5056.                                     $variante null;
  5057.                                     $articolo null;
  5058.                                     if ($data[0] != '')
  5059.                                         $variante $this->servizi->doctrine->getRepository(Varianti::class)->findOneBy(array('codiceVariante' => $data[0]));
  5060.                                     if (count($data) >= && $data[8] != '')
  5061.                                         $articolo $this->servizi->doctrine->getRepository(Articoli::class)->findOneBy(array('codice' => $data[8]));
  5062.                                     if ($variante || $articolo) {
  5063.                                         if($variante){
  5064.                                             $entita->addVarianti($variante);
  5065.                                         } else if($articolo){
  5066.                                             $entita->addArticoli($articolo);
  5067.                                         }
  5068.                                         $entita->setIdentificativoCampo($data[1]);
  5069.                                         $entita->setNome($data[2]);
  5070.                                         $entita->setBloccaOrdinazioneSeEsaurito(false);
  5071.                                         $entita->setMultipliDi(str_replace(",""."$data[3]));
  5072.                                         $entita->setQtaMinima(str_replace(",""."$data[4]));
  5073.                                         if ($data[5] != "")
  5074.                                             $entita->setMessaggioErrore($data[5]);
  5075.                                         else
  5076.                                             $entita->setMessaggioErrore("Attenzione la quantità minima ordinabile Ã¨ di " number_format($entita->getQtaMinima(), 0) . "<br />sono ammessi solo multipli di " number_format($entita->getMultipliDi(), 0));
  5077.                                         $entita->setAttivo($data[6] == '1' true false);
  5078.                                         $entita->setDataModifica($now);
  5079.                                         if ($nuovo)
  5080.                                             $entita->setDataCreazione($now);
  5081.                                         $em->persist($entita);
  5082.                                         $query_eseguite++;
  5083.                                     } else {
  5084.                                         $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione limitazione ordinazione articoli - Variante articolo con codice variante: ' $data[0] . ' non trovata!'null$collegamentoRnd'ImportazioneController''caricaLimitazioneOrdinazioni');
  5085.                                     }
  5086.                                 }
  5087.                             }else{
  5088.                                 $errori .= ('Errore importazione (RIGA: ' $contatore ') : Variante con codice: ' $data[0] . ' non trovata!\n' );
  5089.                             }
  5090.                         } catch (\PDOException $ex) {
  5091.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione:  (RIGA: ' $contatore ') : ' $ex->getMessage(), null$collegamentoRnd'ImportazioneController''caricaLimitazioneOrdinazioni');
  5092.                         } catch (\Exception|\Throwable $exception) {
  5093.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione:  (RIGA: ' $contatore ') : ' $exception->getMessage(), null$collegamentoRnd'ImportazioneController''caricaLimitazioneOrdinazioni');
  5094.                         }
  5095.                         $row++;
  5096.                         $em->flush();
  5097.                     }
  5098.                 }else{
  5099.                     $errori .= "Impossibile aprire il file!";
  5100.                 }
  5101.                 $em->flush();
  5102.                 $row $contatore $row 1;
  5103.                 if ($errori == "") {
  5104.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull$collegamentoRnd'ImportazioneController''caricaLimitazioneOrdinazioni');
  5105.                     return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  5106.                 } else {
  5107.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull$collegamentoRnd'ImportazioneController''caricaLimitazioneOrdinazioni');
  5108.                     return new Response('Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row "</br>Lista Errori:</br>" $errori);
  5109.                 }
  5110.             } catch (\Exception|\Throwable $ex) {
  5111.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione:  (RIGA: ' $contatore ') : ' $ex->getMessage(), null$collegamentoRnd'ImportazioneController''caricaLimitazioneOrdinazioni');
  5112.                 return new Response('Errore importazione (RIGA: ' $contatore ') : ' $ex->getMessage());
  5113.             }
  5114.         } else {
  5115.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null$collegamentoRnd'ImportazioneController''caricaLimitazioneOrdinazioni');
  5116.             return new Response("ERRORE PERMESSO");
  5117.         }
  5118.     } //OK
  5119.     /**
  5120.      * @Route("/caricaAnagraficheIndirizzi", name="carica_anagrafiche_indirizzi")
  5121.      */
  5122.     public function caricaAnagraficheIndirizzi(Request $request)
  5123.     {
  5124.         $collegamentoRnd $this->servizi->randomString2();
  5125.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  5126.             ini_set('max_execution_time'1200);
  5127.             ini_set('memory_limit''4G');
  5128.             $start microtime(true);
  5129.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  5130.             $em $this->servizi->doctrine->getManager();
  5131.             $repo $this->servizi->doctrine->getRepository(Anagrafiche::class);
  5132.             $repoIndirizzi $this->servizi->doctrine->getRepository(AnagraficheIndirizzi::class);
  5133.             $repoFosUser $this->servizi->doctrine->getRepository(User::class);
  5134.             $errori "";
  5135.             $this->imp->caricaCacheImpostazioniDaFamiglie(['Google']);
  5136.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  5137.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  5138.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  5139.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  5140.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /caricaAnagraficheIndirizzi --- Inizio l\' importazione dei dati'null$collegamentoRnd'ImportazioneController''caricaAnagraficheIndirizzi');
  5141.             $errori "";
  5142.             $root_path $pathFileBase "anagrafiche_indirizzi.csv";
  5143.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  5144.             $contatore 0;
  5145.             $row 0;
  5146.             $query_eseguite 0;
  5147.             $batch_size 50;
  5148.             /*
  5149.              *  0    codice_cliente
  5150.                 1    tipo_indirizzo
  5151.                 2    ragione_sociale
  5152.                 3    indirizzo
  5153.                 4    cap
  5154.                 5    citta
  5155.                 6    provincia
  5156.                 7    nazione
  5157.                 8    latitudine
  5158.                 9    longitudine
  5159.                 10    operazione
  5160.              */
  5161.             try {
  5162.                 if (($handle fopen($root_path"r")) !== false) {
  5163.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  5164.                         if ($row == 0) {
  5165.                             $row 1;
  5166.                             continue;
  5167.                         }
  5168.                         if ($query_eseguite >= $batch_size) {
  5169.                             $contatore $contatore $row 1;
  5170.                             $row 1;
  5171.                             $query_eseguite 0;
  5172.                             $em->flush();
  5173.                             $em->clear();
  5174.                         }
  5175.                         $now = new \DateTime('now');
  5176.                         try {
  5177.                             $nuova false;
  5178.                             $indirizzo $repoIndirizzi->findOneBy(array('codice' => $data[0], 'tipoIndirizzo' => $data[1]));
  5179.                             if ($data[10] == "E"//trovata operazione E quindi devo eliminare la riga
  5180.                             {
  5181.                                 if ($indirizzo) {
  5182.                                     $em->remove($indirizzo);
  5183.                                     $query_eseguite++;
  5184.                                 }
  5185.                             } else {
  5186.                                 $clienteAttivoOnline $this->servizi->doctrine->getRepository(User::class)->findOneBy(array('codiceCliente' => $data[0]));
  5187.                                 if (!$indirizzo) {
  5188.                                     $indirizzo = new AnagraficheIndirizzi();
  5189.                                     $indirizzo->setCodice($data[0]);
  5190.                                     $indirizzo->setTipoIndirizzo($data[1]);
  5191.                                     $indirizzo->setDataCreazione($now);
  5192.                                 }
  5193.                                 $indirizzo->setRagioneSociale($data[2]);
  5194.                                 $indirizzo->setIndirizzo($data[3]);
  5195.                                 $indirizzo->setCap($data[4]);
  5196.                                 $indirizzo->setCitta($data[5]);
  5197.                                 $indirizzo->setProvincia($data[6]);
  5198.                                 $indirizzo->setNazione($data[7]);
  5199.                                 $indirizzo->setLatitudine(str_replace(",""."$data[8]));
  5200.                                 $indirizzo->setLongitudine(str_replace(",""."$data[9]));
  5201.                                 if($data[8] != '' && $data[8] != && $data[9] != '' && $data[9] != && $this->imp->ritornaImpostazioneDaNome('GoogleMapsAPIAttiva') == '1' && $this->imp->ritornaImpostazioneDaNome('GoogleMapsAPIRecuperaInAutomaticoImportAnagrafiche') == '1'){
  5202.                                     $gogl = new GoogleMapsAPI($this->imp$this->servizi);
  5203.                                     $latLon $gogl->OttieniLatitudineLongitudine($indirizzo->getIndirizzo() . ' ' $indirizzo->getCitta() . ' ' $indirizzo->getProvincia() . ' ' $indirizzo->getCap() . ' ' $indirizzo->getNazione());
  5204.                                     $indirizzo->setLatitudine($latLon['latitudine']);
  5205.                                     $indirizzo->setLongitudine($latLon['longitudine']);
  5206.                                 }
  5207.                                 $indirizzo->setDataModifica($now);
  5208.                                 $em->persist($indirizzo);
  5209.                                 $query_eseguite++;
  5210.                                 if ($clienteAttivoOnline) {
  5211.                                     //verifico se presente la destinazione altrimenti la creo
  5212.                                     $destinazione $this->servizi->doctrine->getRepository(Destinazioni::class)->findOneBy(array('azienda' => $clienteAttivoOnline'codiceGestionale' => $data[1]));
  5213.                                     if (!$destinazione) {
  5214.                                         $destinazione = new Destinazioni();
  5215.                                         $destinazione->setAzienda($clienteAttivoOnline);
  5216.                                         $destinazione->setUtente($clienteAttivoOnline);
  5217.                                         $destinazione->setCodiceGestionale($data[1]);
  5218.                                         $destinazione->setDataCreazione($now);
  5219.                                     }
  5220.                                     $destinazione->setRagioneSociale($data[2]);
  5221.                                     $destinazione->setEmail($clienteAttivoOnline->getEmail());
  5222.                                     $destinazione->setIndirizzo($data[3]);
  5223.                                     $destinazione->setCap($data[4]);
  5224.                                     $destinazione->setCitta($data[5]);
  5225.                                     $destinazione->setProvincia($data[6]);
  5226.                                     $destinazione->setStato($data[7]);
  5227.                                     $destinazione->setTelefono($clienteAttivoOnline->getTelefono());
  5228.                                     $destinazione->setDataModifica($now);
  5229.                                     $destinazione->setDenominazioneDestinazioneDiversa($data[1]);
  5230.                                     $destinazione->setUnivocoIndirizzo($data[1]);// codice AA perchè indirizzo base
  5231.                                     $em->persist($destinazione);
  5232.                                     $query_eseguite++;
  5233.                                 }
  5234.                             }
  5235.                         } catch (\PDOException $ex) {
  5236.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione: ' $ex->getMessage(), null$collegamentoRnd'ImportazioneController''caricaAnagraficheIndirizzi');
  5237.                         } catch (\Exception|\Throwable $exception) {
  5238.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione: ' $exception->getMessage(), null$collegamentoRnd'ImportazioneController''caricaAnagraficheIndirizzi');
  5239.                         }
  5240.                         $row++;
  5241.                         $em->flush();
  5242.                     }
  5243.                 }else{
  5244.                     $errori .= "Impossibile aprire il file!";
  5245.                 }
  5246.                 $em->flush();
  5247.                 $row $contatore $row 1;
  5248.                 if ($errori == "") {
  5249.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull$collegamentoRnd'ImportazioneController''caricaAnagraficheIndirizzi');
  5250.                     return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  5251.                 } else {
  5252.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull$collegamentoRnd'ImportazioneController''caricaAnagraficheIndirizzi');
  5253.                     return new Response('Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row "</br>Lista Errori:</br>" $errori);
  5254.                 }
  5255.             } catch (\Exception|\Throwable $ex) {
  5256.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ' $ex->getMessage(), null$collegamentoRnd'ImportazioneController''caricaAnagraficheIndirizzi');
  5257.                 return new Response('Errore importazione (RIGA: ' $contatore ') : ' $ex->getMessage());
  5258.             }
  5259.         } else {
  5260.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null$collegamentoRnd'ImportazioneController''caricaAnagraficheIndirizzi');
  5261.             return new Response("ERRORE PERMESSO");
  5262.         }
  5263.     } //OK
  5264.     /**
  5265.      * @Route("/caricaAnagrafiche/{svuota}", name="carica_anagrafiche", defaults={"svuota"="0"})
  5266.      */
  5267.     public function caricaAnagrafiche(Request $request$svuota)
  5268.     {
  5269.         $collegamentoRnd $this->servizi->randomString2();
  5270.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  5271.             ini_set('max_execution_time'1200);
  5272.             ini_set('memory_limit''4G');
  5273.             $this->imp->caricaCacheImpostazioniDaFamiglie(['Google']);
  5274.             $inviaMail $this->imp->ritornaImpostazioneDaNome("InviaMailNuoviClienti");
  5275.             $ccMail $this->imp->ritornaImpostazioneDaNome("MailCcComunicazioni");
  5276.             $from $this->imp->ritornaImpostazioneDaNome("IndirizzoMailFromInvioComunicazioni");
  5277.             $nomeShop $this->imp->ritornaImpostazioneDaNome("NomeShop");
  5278.             $start microtime(true);
  5279.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  5280.             $em $this->servizi->doctrine->getManager();
  5281.             $repo $this->servizi->doctrine->getRepository(Anagrafiche::class);
  5282.             $repoIndirizzi $this->servizi->doctrine->getRepository(AnagraficheIndirizzi::class);
  5283.             $repoFosUser $this->servizi->doctrine->getRepository(User::class);
  5284.             $repoSpedizione $this->servizi->doctrine->getRepository(Spedizione::class);
  5285.             $repoConsegna $this->servizi->doctrine->getRepository(Consegna::class);
  5286.             $errori "";
  5287.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  5288.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  5289.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  5290.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  5291.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /caricaAnagrafiche/' $svuota ' --- Inizio l\' importazione dei dati'null$collegamentoRnd'ImportazioneController''caricaAnagrafiche');
  5292.             switch ($svuota){
  5293.                 case "1":{ //Svuoto tutte le tabelle collegate
  5294.                     $em $this->servizi->doctrine->getManager();
  5295.                     $connection $this->servizi->doctrine->getConnection();
  5296.                     $connection->executeQuery("SET FOREIGN_KEY_CHECKS=0;");
  5297.                     $connection->executeQuery("TRUNCATE `anagrafica_opzioni_aggiuntive`;");
  5298.                     $connection->executeQuery("TRUNCATE `anagrafiche`;");
  5299.                     $connection->executeQuery("TRUNCATE `anagrafiche_indirizzi`;");
  5300.                     $connection->executeQuery("TRUNCATE `risorse_anagrafiche_colonne_valori`;");
  5301.                     $connection->executeQuery("TRUNCATE `risorse_anagrafiche`;");
  5302.                     $connection->executeQuery("TRUNCATE `risorse_anagrafiche_colonne`;");
  5303.                     $connection->executeQuery("TRUNCATE `sconti_anagrafiche`;");
  5304.                     $connection->executeQuery("TRUNCATE `anagrafiche_blocchi`;");
  5305.                     $connection->executeQuery("SET FOREIGN_KEY_CHECKS=1;");
  5306.                     break;
  5307.                 }
  5308.             }
  5309.             $errori "";
  5310.             $root_path $pathFileBase "anagrafiche.csv";
  5311.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  5312.             $contatore 0;
  5313.             $row 0;
  5314.             $query_eseguite 0;
  5315.             $batch_size 50;
  5316.             /*
  5317.              *  0    codice_cliente
  5318.                 1    ragione_sociale
  5319.                 2    indirizzo
  5320.                 3    cap
  5321.                 4    citta
  5322.                 5    provincia
  5323.                 6    nazione
  5324.                 7    codice_zona
  5325.                 8    descrizione_zona
  5326.                 9    telefono
  5327.                 10    fax
  5328.                 11    cellulare
  5329.                 12    sito_web
  5330.                 13    indirizzi_mail
  5331.                 14    codice_fiscale
  5332.                 15    partita_iva
  5333.                 16    codice_assoggettamento_fiscale
  5334.                 17    descrizione_assoggettamento_fiscale
  5335.                 18    codice_abi
  5336.                 19    codice_cab
  5337.                 20    iban
  5338.                 21    codice_pagamnto
  5339.                 22    descrizione_pagamento
  5340.                 23    sconto_commerciale
  5341.                 24    sconto_pagamento
  5342.                 25    codice_riclassifica_amm_1
  5343.                 26    descrizione_riclassifica_amministrativa_1
  5344.                 27    codice_spedizione
  5345.                 28    descrizione_spedizione
  5346.                 29    codice_consegna
  5347.                 30    descrizione_consegna
  5348.                 31    codice_agente
  5349.                 32    descrizione_agente
  5350.                 33    codice_canale_commerciale
  5351.                 34    descrizione_canale_commerciale
  5352.                 35    latitudine
  5353.                 36    longitudine
  5354.                 37    note_anagrafica
  5355.                 38    operazione
  5356.                 39    codice_listino
  5357.                 40    descrizione_listino
  5358.                 41    attiva_online
  5359.                 42    mail_attivazione_online
  5360.                 43  valore_aliquota_iva
  5361.                 44  codice_aliquota_iva
  5362.                 45  ruolo
  5363.                 46  associazione_codici_agenti_fornitori
  5364.                 47    andamento generale fatturato
  5365.                 48    importo_minimo_ordine
  5366.              */
  5367.             try {
  5368.                 if (($handle fopen($root_path"r")) !== false) {
  5369.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  5370.                         if ($row == 0) {
  5371.                             $row 1;
  5372.                             continue;
  5373.                         }
  5374.                         if ($query_eseguite >= $batch_size) {
  5375.                             $contatore $contatore $row 1;
  5376.                             $row 1;
  5377.                             $query_eseguite 0;
  5378.                             $em->flush();
  5379.                             $em->clear();
  5380.                         }
  5381.                         $now = new \DateTime('now');
  5382.                         try {
  5383.                             $nuova false;
  5384.                             $anagrafica $repo->findOneBy(array('codice' => $data[0]));
  5385.                             if ($data[38] == "E"//trovata operazione E quindi devo eliminare la riga
  5386.                             {
  5387.                                 if ($anagrafica) {
  5388.                                     $anagrafica->setAttivo(false);
  5389.                                     $anagrafica->setDataModifica(new \DateTime());
  5390.                                     $em->persist($anagrafica);
  5391.                                     $utente $this->servizi->doctrine->getRepository(User::class)->findOneBy(array('codiceCliente' => $data[0]));
  5392.                                     if ($utente) ;
  5393.                                     {
  5394.                                         $utente->setEnabled(false);
  5395.                                         $em->persist($utente);
  5396.                                         $query_eseguite++;
  5397.                                     }
  5398.                                     $query_eseguite++;
  5399.                                 }
  5400.                             }
  5401.                             if (!$anagrafica) {
  5402.                                 $anagrafica = new Anagrafiche();
  5403.                                 $nuova true;
  5404.                             }
  5405.                             $anagrafica->setCodice($data[0]);
  5406.                             $anagrafica->setRagioneSociale($data[1]);
  5407.                             $anagrafica->setIndirizzo($data[2]);
  5408.                             $anagrafica->setComune($data[4]);
  5409.                             $anagrafica->setProvincia($data[5]);
  5410.                             $anagrafica->setCap($data[3]);
  5411.                             $anagrafica->setNazione($data[6]);
  5412.                             $anagrafica->setCodiceZona($data[7]);
  5413.                             $anagrafica->setDescrizioneZona($data[8]);
  5414.                             $anagrafica->setTelefono($data[9]);
  5415.                             $anagrafica->setFax($data[10]);
  5416.                             $anagrafica->setCellulare($data[11]);
  5417.                             $anagrafica->setSitoWeb($data[12]);
  5418.                             $anagrafica->setIndirizziMail($data[13]);
  5419.                             $anagrafica->setCodiceFiscale($data[14]);
  5420.                             $anagrafica->setPartitaIva($data[15]);
  5421.                             $anagrafica->setCodiceAssoggettamentoFiscale($data[16]);
  5422.                             $anagrafica->setDescrizioneAssoggettamentoFiscale($data[17]);
  5423.                             $anagrafica->setCodiceAbi($data[18]);
  5424.                             $anagrafica->setCodiceCab($data[19]);
  5425.                             $anagrafica->setIban($data[20]);
  5426.                             $anagrafica->setCodicePagamento($data[21]);
  5427.                             $anagrafica->setDescrizionePagamento($data[22]);
  5428.                             $anagrafica->setScontoCommerciale(str_replace(',''.'$data[23] ? $data[23] : "0"));
  5429.                             $anagrafica->setScontoPagamento(str_replace(',''.'$data[24] ? $data[24] : "0"));
  5430.                             $anagrafica->setCodiceRiclassificaAmministrativa1($data[25]);
  5431.                             $anagrafica->setDescrizioneRiclassificaAmministrativa1($data[26]);
  5432.                             $anagrafica->setCodiceSpedizione($data[27]);
  5433.                             $anagrafica->setDescrizioneSpedizione($data[28]);
  5434.                             $anagrafica->setCodiceConsegna($data[29]);
  5435.                             $anagrafica->setDescrizioneConsegna($data[30]);
  5436.                             $anagrafica->setCodiceAgente($data[31]);
  5437.                             $anagrafica->setDescrizioneAgente($data[32]);
  5438.                             $anagrafica->setCodiceCanaleCommerciale($data[33]);
  5439.                             $anagrafica->setDescrizioneCanaleCommerciale($data[34]);
  5440.                             $anagrafica->setLatitudine(str_replace(',''.'$data[35] ? $data[35] : "0"));
  5441.                             $anagrafica->setLongitudine(str_replace(',''.'$data[36] ? $data[36] : "0"));
  5442.                             if($data[35] != '' && $data[35] != && $data[36] != '' && $data[36] != && $this->imp->ritornaImpostazioneDaNome('GoogleMapsAPIAttiva') == '1' && $this->imp->ritornaImpostazioneDaNome('GoogleMapsAPIRecuperaInAutomaticoImportAnagrafiche') == '1'){
  5443.                                 $gogl = new GoogleMapsAPI($this->imp$this->servizi);
  5444.                                 $latLon $gogl->OttieniLatitudineLongitudine($anagrafica->getIndirizzo() . ' ' $anagrafica->getComune() . ' ' $anagrafica->getProvincia() . ' ' $anagrafica->getCap() . ' ' $anagrafica->getNazione());
  5445.                                 $anagrafica->setLatitudine($latLon['latitudine']);
  5446.                                 $anagrafica->setLongitudine($latLon['longitudine']);
  5447.                             }
  5448.                             $anagrafica->setNoteAnagrafica($data[37]);
  5449.                             $anagrafica->setCodiceListinoVendita($data[39]);
  5450.                             $anagrafica->setDescrizioneListinoVendita($data[40]);
  5451.                             $anagrafica->setAttivo(true);
  5452.                             if(isset($data[43]))
  5453.                                 $anagrafica->setValoreAliquotaIva(str_replace(',''.'$data[43] ? $data[43] : "0"));
  5454.                             if(isset($data[44]))
  5455.                                 $anagrafica->setCodiceAliquotaIva($data[44]);
  5456.                             if(isset($data[45])) {
  5457.                                 $tipo strtoupper($data[44]);
  5458.                                 if(!in_array($tipo, ['COMMERCIALE''AGENTE''CLIENTE''FORNITORE'])){
  5459.                                     $tipo 'CLIENTE';
  5460.                                 }
  5461.                                 $anagrafica->setTipo($tipo);
  5462.                             }
  5463.                             if (isset($data[47])){
  5464.                                 $anagrafica->setAndamentoGeneraleFatturato(str_replace(',''.'$data[47] ? $data[43] : "0"));
  5465.                             }
  5466.                             if(!$anagrafica->getTipo())
  5467.                                 $anagrafica->setTipo('CLIENTE');
  5468.                             $now = new \DateTime('now');
  5469.                             if ($nuova)
  5470.                                 $anagrafica->setDataCreazione($now);
  5471.                             $anagrafica->setDataModifica($now);
  5472.                             $em->persist($anagrafica);
  5473.                             $query_eseguite++;
  5474.                             if ($data[41] == "1") { //devo attivarlo online
  5475.                                 $clienteOnline $repoFosUser->findOneBy(array('codiceCliente' => $anagrafica->getCodice()));
  5476.                                 if (!$clienteOnline) {
  5477.                                     $newPass $this->randomString(8);
  5478.                                     /** @var $clienteOnline User */
  5479.                                     $clienteOnline = new User();
  5480.                                     $clienteOnline->setCodiceCliente($data[0]);
  5481.                                     $clienteOnline->setRagioneSociale($data[1]);
  5482.                                     $clienteOnline->setEmail($data[42]);
  5483.                                     $clienteOnline->setIndirizzo($data[2]);
  5484.                                     $clienteOnline->setCap($data[3]);
  5485.                                     $clienteOnline->setCitta($data[4]);
  5486.                                     $clienteOnline->setProvincia($data[5]);
  5487.                                     $clienteOnline->setNazione($data[6]);
  5488.                                     $clienteOnline->setTelefono($data[9]);
  5489.                                     $clienteOnline->setCodiceFiscale($data[14]);
  5490.                                     $clienteOnline->setPartitaIva($data[15]);
  5491.                                     $clienteOnline->setCodiceListinoVendita($data[39]);
  5492.                                     $clienteOnline->setPassword($this->passwordHasher->hashPassword($clienteOnline$newPass));
  5493.                                     $clienteOnline->setUsername($data[0]);
  5494.                                     $clienteOnline->setEnabled(true);
  5495.                                     $clienteOnline->setRoles(array('ROLE_USER'));
  5496.                                     $clienteOnline->setAgente(false);
  5497.                                     $clienteOnline->setUtenteComune(false);
  5498.                                     $clienteOnline->setPrivato(false);
  5499.                                     $clienteOnline->setCommerciale(false);
  5500.                                     $clienteOnline->setCodiceAssoggettamentoFiscale($data[16]);
  5501.                                     if(isset($data[43]))
  5502.                                         $clienteOnline->setValoreAliquotaIva(str_replace(',''.'$data[43] ? $data[43] : "0"));
  5503.                                     if(isset($data[44]))
  5504.                                         $clienteOnline->setCodiceAliquotaIva($data[44]);
  5505.                                     if (isset($data[48]))
  5506.                                         $clienteOnline->setImportoImponibileMinimoOrdine(str_replace(',''.'$data[48] ? $data[48] : "-1"));
  5507.                                     $anagraficaDaMail $this->servizi->doctrine->getRepository(User::class)->findOneBy(array('email' => strtolower($data[42])));
  5508.                                     //Controllo esistenza di un'account con lo stesso indirizzo mail se Ã¨ presente annullo la registrazione e passo ad un altra riga
  5509.                                     if (!$anagraficaDaMail) {
  5510.                                         $em $this->servizi->doctrine->getManager();
  5511.                                         $em->persist($clienteOnline);
  5512.                                         $em->flush();
  5513.                                     } else {
  5514.                                         $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Anagrafica con codice: ' $data[0] . ' ----  indirizzo email: ' $data[42] . " già presente!"null);
  5515.                                         continue;
  5516.                                     }
  5517.                                     $adresses explode(";"$data[13]);
  5518.                                     $mailSecondarie $this->servizi->doctrine->getRepository(MailSecondarieUtenti::class);
  5519.                                     array_push($adresses$ccMail);
  5520.                                     foreach ($adresses as $item) {
  5521.                                         $ms = new MailSecondarieUtenti();
  5522.                                         $ms->setInviaConfermaOrdine(false);
  5523.                                         $ms->setUtenteModifica(null);
  5524.                                         $ms->setAzienda($clienteOnline);
  5525.                                         $ms->setDataModifica($now);
  5526.                                         $ms->setDataCreazione($now);
  5527.                                         $ms->setRuolo("");
  5528.                                         $ms->setNominativo("");
  5529.                                         $ms->setIndirizzoMail($item);
  5530.                                         $em->persist($ms);
  5531.                                     }
  5532.                                     $em->flush();
  5533.                                     unset($adresses[0]);
  5534.                                     //Associo il ruolo corretto e i vari codici agente associati
  5535.                                     if(count($data) > 46){
  5536.                                         if(strtoupper($data[45]) == 'AGENTE'){
  5537.                                             $clienteOnline->setRoles(array("ROLE_AGENTE"));
  5538.                                             $clienteOnline->setAgente(true);
  5539.                                             $em->persist($clienteOnline);
  5540.                                             $em->flush();
  5541.                                             if(isset($data[46])){
  5542.                                                 $elenco explode(','$data[46]);
  5543.                                                 if($elenco){
  5544.                                                     $assAg $this->servizi->doctrine->getRepository(AssociazioneCodiciAgentiUtente::class);
  5545.                                                     foreach ($elenco as $i){
  5546.                                                         $entitaAssAg = new AssociazioneCodiciAgentiUtente();
  5547.                                                         $entitaAssAg->setCodice($i);
  5548.                                                         $entitaAssAg->setDataCreazione(new \DateTime());
  5549.                                                         $entitaAssAg->setDataModifica(new \DateTime());
  5550.                                                         $entitaAssAg->setUtente($clienteOnline);
  5551.                                                         $em->persist($entitaAssAg);
  5552.                                                     }
  5553.                                                     $em->flush();
  5554.                                                 }
  5555.                                             }
  5556.                                         }
  5557.                                         elseif(strtoupper($data[45]) == 'COMMERCIALE'){
  5558.                                             $clienteOnline->setRoles(array("ROLE_COMMERCIALE"));
  5559.                                             $clienteOnline->setCommerciale(true);
  5560.                                             $em->persist($clienteOnline);
  5561.                                             $em->flush();
  5562.                                         }
  5563.                                         elseif (strtoupper($data[45] == "FORNITORE")){
  5564.                                             $clienteOnline->setRoles(array("ROLE_FORNITORE"));
  5565.                                             $clienteOnline->setCommerciale(false);
  5566.                                             $clienteOnline->setAgente(false);
  5567.                                             if(count($data) > 47) {
  5568.                                                 $clienteOnline->setCodiceFornitore($data[46]);
  5569.                                             }
  5570.                                             $em->persist($clienteOnline);
  5571.                                             $em->flush();
  5572.                                         }
  5573.                                     }
  5574.                                     $translator $this->translating;
  5575.                                     /** @var $clienteOnline User */
  5576.                                     if ($clienteOnline->getNazione() != 'IT') {
  5577.                                         $translator->CaricaTraduzioniDaFamiglia('mail_benvenuto''en');
  5578.                                     }else{
  5579.                                         $translator->CaricaTraduzioniDaFamiglia('mail_benvenuto''it');
  5580.                                     }
  5581.                                     try {
  5582.                                         if ($inviaMail) {
  5583.                                             $header $translator->OttieniElementoDizionario('mail_benvenuto_header_mail''mail_benvenuto')->valoreUscita;
  5584.                                             $mailer $this->mailer;
  5585.                                             $mailer->SendMail(
  5586.                                                 $header " " $nomeShop,
  5587.                                                 $this->renderView(
  5588.                                                     'email/registrazione/nuovo_inserimento.html.twig',
  5589.                                                     array(
  5590.                                                         'utente' => $clienteOnline,
  5591.                                                         'password' => $newPass
  5592.                                                     )
  5593.                                                 ),
  5594.                                                 $clienteOnline->getEmail(),
  5595.                                                 $adresses,
  5596.                                                 $from,
  5597.                                                 "text/html"
  5598.                                             );
  5599.                                         }
  5600.                                     } catch (\Exception|\Throwable $e) {
  5601.                                         $this->logger->critical("Errore invio mail: " $e->getMessage());
  5602.                                         $this->ScriviRegistroAttivita($em$request->getClientIp(), $e->getMessage(), true'Errore invio mail conferma inserimento nuova azienda ' $clienteOnline->getCodiceCliente() . '  -  ' $clienteOnline->getRagioneSociale() . ' all\'indirizzo ' $clienteOnline->getEmail() . " --- Errore: " $e->getMessage(), null$collegamentoRnd'ImportazioneController''caricaAnagrafiche');
  5603.                                         $query_eseguite++;
  5604.                                     }
  5605.                                     $indirizzo_mail $data[13];
  5606.                                     if (!strpos($indirizzo_mail";") === false) {
  5607.                                         $indirizzi explode(";"$indirizzo_mail);
  5608.                                         $mailSecondarie $this->servizi->doctrine->getRepository(MailSecondarieUtenti::class);
  5609.                                         foreach ($indirizzi as $item) {
  5610.                                             if (!$mailSecondarie->findOneBy(array('azienda' => $clienteOnline'indirizzoMail' => $item))) {
  5611.                                                 $ms = new MailSecondarieUtenti();
  5612.                                                 $ms->setInviaConfermaOrdine(true);
  5613.                                                 $ms->setUtenteModifica(null);
  5614.                                                 $ms->setAzienda($clienteOnline);
  5615.                                                 $ms->setDataModifica($now);
  5616.                                                 $ms->setDataCreazione($now);
  5617.                                                 $ms->setRuolo("");
  5618.                                                 $ms->setNominativo("");
  5619.                                                 $ms->setIndirizzoMail($item);
  5620.                                                 $em->persist($ms);
  5621.                                             }
  5622.                                         }
  5623.                                         $indirizzo_mail $indirizzi[0];
  5624.                                     }
  5625.                                 }else{
  5626.                                     $clienteOnline->setRagioneSociale($data[1]);
  5627.                                     $clienteOnline->setIndirizzo($data[2]);
  5628.                                     $clienteOnline->setCap($data[3]);
  5629.                                     $clienteOnline->setCitta($data[4]);
  5630.                                     $clienteOnline->setProvincia($data[5]);
  5631.                                     $clienteOnline->setNazione($data[6]);
  5632.                                     $clienteOnline->setTelefono($data[9]);
  5633.                                     $clienteOnline->setCodiceFiscale($data[14]);
  5634.                                     $clienteOnline->setPartitaIva($data[15]);
  5635.                                     $clienteOnline->setCodiceListinoVendita($data[39]);
  5636.                                     $em->persist($clienteOnline);
  5637.                                 }
  5638.                                 if ($data[27] != "" && $data[29] != "") {
  5639.                                     $sped $repoSpedizione->findOneBy(array('codice' => $data[27]));
  5640.                                     $cons $repoConsegna->findOneBy(array('codice' => $data[29]));
  5641.                                     if (!$sped) {
  5642.                                         $sped = new Spedizione();
  5643.                                         $sped->setCodice($data[27]);
  5644.                                         $sped->setDescrizione($data[28]);
  5645.                                         $em->persist($sped);
  5646.                                         $query_eseguite++;
  5647.                                         $query_eseguite++;
  5648.                                         $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Spedizione con codice ' $sped->getCodice() . ' creata perchè inesistente!' $rownull$collegamentoRnd'ImportazioneController''caricaAnagrafiche');
  5649.                                     }
  5650.                                     if (!$cons) {
  5651.                                         $cons = new Consegna();
  5652.                                         $cons->setCodice($data[29]);
  5653.                                         $cons->setDescrizione($data[30]);
  5654.                                         $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Consegna con codice ' $cons->getCodice() . ' creata perchè inesistente!' $rownull$collegamentoRnd'ImportazioneController''caricaAnagrafiche');
  5655.                                         $em->persist($cons);
  5656.                                         $query_eseguite++;
  5657.                                         $query_eseguite++;
  5658.                                     }
  5659.                                     $ass $this->servizi->doctrine->getRepository(AssociazioneSpedizioniClienti::class)->findOneBy(['consegna' => $cons'spedizione' => $sped'azienda' => $clienteOnline]);
  5660.                                     if(!$ass){
  5661.                                         $ass = new AssociazioneSpedizioniClienti();
  5662.                                         $ass->setAzienda($clienteOnline);
  5663.                                         $ass->setConsegna($cons);
  5664.                                         $ass->setSpedizione($sped);
  5665.                                         $ass->setPrimaria(true);
  5666.                                         $em->persist($ass);
  5667.                                         $query_eseguite++;
  5668.                                     }
  5669.                                 }
  5670.                             }
  5671.                         } catch (\PDOException $ex) {
  5672.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione: ' $ex->getMessage(), null$collegamentoRnd'ImportazioneController''caricaAnagrafiche');
  5673.                         } catch (\Exception|\Throwable $exception) {
  5674.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione: ' $exception->getMessage(), null$collegamentoRnd'ImportazioneController''caricaAnagrafiche');
  5675.                         }
  5676.                         $row++;
  5677.                         $em->flush();
  5678.                     }
  5679.                 }else{
  5680.                     $errori .= "Impossibile aprire il file!";
  5681.                 }
  5682.                 $em->flush();
  5683.                 $row $contatore $row 1;
  5684.                 if ($errori == "") {
  5685.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull$collegamentoRnd'ImportazioneController''caricaAnagrafiche');
  5686.                     return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  5687.                 } else {
  5688.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull$collegamentoRnd'ImportazioneController''caricaAnagrafiche');
  5689.                     return new Response('Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row "</br>Lista Errori:</br>" $errori);
  5690.                 }
  5691.             } catch (\Exception|\Throwable $ex) {
  5692.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ' $ex->getMessage(), null$collegamentoRnd'ImportazioneController''caricaAnagrafiche');
  5693.                 return new Response('Errore importazione (RIGA: ' $contatore ') : ' $ex->getMessage());
  5694.             }
  5695.         } else {
  5696.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null$collegamentoRnd'ImportazioneController''caricaAnagrafiche');
  5697.             return new Response("ERRORE PERMESSO");
  5698.         }
  5699.     } //OK
  5700.     /**
  5701.      * @Route("/caricaListiniVendita/{svuota}/{batch}/{iterazione}", name="carica_listini_vendita", defaults={"svuota"="0", "batch"="0", "iterazione"="0"})
  5702.      */
  5703.     public function caricaListiniVendita(Request $request$svuota$batch$iterazione)
  5704.     {
  5705.         $collegamentoRnd $this->servizi->randomString2();
  5706.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  5707.             ini_set('max_execution_time', -1);
  5708.             ini_set('memory_limit''4G');
  5709.             $start microtime(true);
  5710.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  5711.             $em $this->servizi->doctrine->getManager();
  5712.             $repo $this->servizi->doctrine->getRepository(ListiniVendita::class);
  5713.             $repoMappe $this->servizi->doctrine->getRepository(MappaCategorieArticoli::class);
  5714.             $repoVarianti $this->servizi->doctrine->getRepository(Varianti::class);
  5715.             $errori "";
  5716.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  5717.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  5718.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  5719.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  5720.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /caricaListiniVendita/' $svuota ' --- Inizio l\' importazione dei dati'null$collegamentoRnd'ImportazioneController''caricaListiniVendita');
  5721.             $connection $this->servizi->doctrine->getConnection();
  5722.             if($svuota == "1"){
  5723.                 $em $this->servizi->doctrine->getManager();
  5724.                 $connection->beginTransaction();
  5725.                 try {
  5726.                     $connection->executeQuery("SET FOREIGN_KEY_CHECKS=0;");
  5727.                     $connection->executeQuery("TRUNCATE `listini_vendita`;");
  5728.                     $connection->executeQuery("SET FOREIGN_KEY_CHECKS=1;");
  5729.                     $connection->commit();
  5730.                 }catch (\Exception|\Throwable $ex){
  5731.                     $this->servizi->DebuggaException($ex"Errore pulizia listini vendita"falsenull$collegamentoRnd'ImportazioneController''caricaListiniVendita');
  5732.                 }
  5733.             }
  5734.             $errori "";
  5735.             $root_path $pathFileBase "articoli_listini_vendita.csv";
  5736.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  5737.             $contatore 0;
  5738.             $row 0;
  5739.             $query_eseguite 0;
  5740.             $batch_size 50;
  5741.             /*
  5742.              *  0    codice listino
  5743.                 1    descrizione listino
  5744.                 2    codice_anagrafica
  5745.                 3    codice articolo
  5746.                 4    codice variante
  5747.                 5    prezzo
  5748.                 6    operazione
  5749.                 7    flag_prezzo_netto
  5750.                 8    codice_cat_1
  5751.                 9    codice_cat_2
  5752.                 10    codice_cat_3
  5753.                 11    codice_cat_4
  5754.                 12    codice_cat_5
  5755.                 13    marca
  5756.                 14  costo
  5757.                 15  codice_tipo_ordine
  5758.                 16  chiave_esterna
  5759.              */
  5760.             $indici = array(
  5761.                 'codiceListino' => 0,
  5762.                 'descrizioneListino' => 1,
  5763.                 'codiceAnagrafica' => 2,
  5764.                 'codiceArticolo' => 3,
  5765.                 'codiceVariante' => 4,
  5766.                 'prezzo' => 5,
  5767.                 'flagPrezzoNetto' => 7,
  5768.                 'operazione' => 6,
  5769.                 'cat1' => 8,
  5770.                 'cat2' => 9,
  5771.                 'cat3' => 10,
  5772.                 'cat4' => 11,
  5773.                 'cat5' => 12,
  5774.                 'marca' => 13,
  5775.                 'costo' => 14,
  5776.                 'codiceTipoOrdine' => 15,
  5777.                 'chiaveEsterna' => 16
  5778.             );
  5779.             $righeDaSaltareSeBatch 0;
  5780.             if($batch != && $iterazione != 0){
  5781.                 $rrr $batch $iterazione//Esempio iterazione = 1 batch = 5000 = 5000
  5782.                 $righeDaSaltareSeBatch $rrr $batch;
  5783.             }
  5784.             try {
  5785.                 if (($handle fopen($root_path"r")) !== false) {
  5786.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  5787.                         //Se attivata la funzionalità batch salto le righe che non devo importare
  5788.                         if($righeDaSaltareSeBatch 0){
  5789.                             if (($contatore $row) < $righeDaSaltareSeBatch){
  5790.                                 $contatore++;
  5791.                                 continue;
  5792.                             }
  5793.                         }
  5794.                         if($righeDaSaltareSeBatch && ($contatore $row $righeDaSaltareSeBatch) > $batch ){
  5795.                             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true"Batch completato: Iterazione: " strval($iterazione) . " --- Batch: " strval(($batch)) . " ( Da riga:" strval($righeDaSaltareSeBatch 1) . " a riga: " strval(($contatore $row)) . " )"null$collegamentoRnd'ImportazioneController''caricaListiniVendita');
  5796.                             break;
  5797.                         }
  5798.                         if ($row == 0) {
  5799.                             $row 1;
  5800.                             continue;
  5801.                         }
  5802.                         if ($query_eseguite >= $batch_size) {
  5803.                             $contatore $contatore $row 1;
  5804.                             $row 1;
  5805.                             $query_eseguite 0;
  5806.                             $em->flush();
  5807.                             $em->clear();
  5808.                         }
  5809.                         $now = new \DateTime('now');
  5810.                         try {
  5811.                             $listaMappe $repoMappe->createQueryBuilder('mappa_categorie_articoli')
  5812.                                 ->leftJoin('mappa_categorie_articoli.articolo''articolo')
  5813.                                 ->leftJoin('mappa_categorie_articoli.categoria1''cat1')
  5814.                                 ->leftJoin('mappa_categorie_articoli.categoria2''cat2')
  5815.                                 ->leftJoin('mappa_categorie_articoli.categoria3''cat3')
  5816.                                 ->leftJoin('mappa_categorie_articoli.categoria4''cat4')
  5817.                                 ->leftJoin('mappa_categorie_articoli.categoria5''cat5')
  5818.                                 ->where('articolo.codice = :cod')->setParameter('cod'$data[$indici['codiceArticolo']]);
  5819.                             if ($data[$indici['cat1']] != '') {
  5820.                                 $listaMappe->andWhere('cat1.codice = :cat1')->setParameter('cat1'$data[$indici['cat1']]);
  5821.                             }
  5822.                             if ($data[$indici['cat2']] != '') {
  5823.                                 $listaMappe->andWhere('cat2.codice = :cat2')->setParameter('cat2'$data[$indici['cat2']]);
  5824.                             }
  5825.                             if ($data[$indici['cat3']] != '') {
  5826.                                 $listaMappe->andWhere('cat3.codice = :cat3')->setParameter('cat3'$data[$indici['cat3']]);
  5827.                             }
  5828.                             if ($data[$indici['cat4']] != '') {
  5829.                                 $listaMappe->andWhere('cat4.codice = :cat4')->setParameter('cat4'$data[$indici['cat4']]);
  5830.                             }
  5831.                             if ($data[$indici['cat5']] != '') {
  5832.                                 $listaMappe->andWhere('cat5.codice = :cat5')->setParameter('cat5'$data[$indici['cat5']]);
  5833.                             }
  5834.                             if ($data[$indici['marca']] != '') {
  5835.                                 $listaMappe->andWhere('mappa_categorie_articoli.marca = :marca')->setParameter('marca'$data[$indici['marca']]);
  5836.                             }
  5837.                             $listaMappe $listaMappe->getQuery()->getResult();
  5838.                             if (count($listaMappe) > 0) {
  5839.                                 /** @var MappaCategorieArticoli $mappa */
  5840.                                 $mappa $listaMappe[0];
  5841.                                 $codiceTipoOrdine null;
  5842.                                 if (count($data) > $indici['codiceTipoOrdine'] && $data[$indici['codiceTipoOrdine']] != '')
  5843.                                 {
  5844.                                     $codiceTipoOrdine $this->servizi->doctrine->getRepository(TipoOrdine::class)->findOneBy(array('codice' => $data[$indici['codiceTipoOrdine']]));
  5845.                                     if(!$codiceTipoOrdine)
  5846.                                     {
  5847.                                         $errori .= ('Errore importazione listino (RIGA: ' $contatore ') : - Codice Listino: ' $data[$indici['codiceListino']] . ' - Codice Articolo: ' $data[$indici['codiceArticolo']] . ' - Codice Variante: ' $data[$indici['codiceVariante']] . ' - Tipo ordine: ' $data[$indici['codiceTipoOrdine']] . '  ERRORE: TIPO ORDINE NON TROVATO<br/>');
  5848.                                         continue;
  5849.                                     }
  5850.                                 }
  5851.                                 if ($data[$indici['codiceVariante']] != '') {
  5852.                                     $listaVarianti $repoVarianti->createQueryBuilder('varianti')
  5853.                                         ->where('varianti.mappa = :mappa')->setParameter('mappa'$mappa)
  5854.                                         ->andWhere('varianti.codiceVariante = :codvar')->setParameter('codvar'$data[$indici["codiceVariante"]])
  5855.                                         ->getQuery()->getResult();
  5856.                                     if (count($listaVarianti) > 0) {
  5857.                                         $variante $listaVarianti[0];
  5858.                                         $array = array(
  5859.                                             'variante' => $variante,
  5860.                                             'codiceListino' => $data[$indici['codiceListino']],
  5861.                                             'mappaCategorieArticoli' => $mappa,
  5862.                                             'tipoOrdine' => $codiceTipoOrdine
  5863.                                         );
  5864.                                         if ($data[$indici['codiceAnagrafica']] != '') {
  5865.                                             $array['codiceAnagrafica'] = $data[$indici['codiceAnagrafica']];
  5866.                                         }
  5867.                                         /** @var ListiniVendita $listino */
  5868.                                         $listino $repo->findOneBy($array);
  5869.                                         if ($listino) {
  5870.                                             if ($data[$indici['operazione']] == 'E') {
  5871.                                                 $em->remove($listino);
  5872.                                                 $query_eseguite++;
  5873.                                             } else {
  5874.                                                 $listino->setPrezzo(ServiziController::convertiInNumero($data[$indici["prezzo"]]));
  5875.                                                 $listino->setFlagPrezzoNetto($data[$indici['flagPrezzoNetto']]);
  5876.                                                 $listino->setCodiceAnagrafica($data[$indici["codiceAnagrafica"]]);
  5877.                                                 $listino->setTipoOrdine($codiceTipoOrdine);
  5878.                                                 if(count($data) > $indici['costo'] && $data[$indici['costo']] != '') {
  5879.                                                     $listino->setCosto(ServiziController::convertiInNumero($data[$indici["costo"]]));
  5880.                                                 }
  5881.                                                 if (count($data) > $indici['chiaveEsterna'])
  5882.                                                     $listino->setChiaveEsterna($data[$indici['chiaveEsterna']]);
  5883.                                                 $listino->setDataModifica($now);
  5884.                                                 $em->persist($listino);
  5885.                                                 $query_eseguite++;
  5886.                                             }
  5887.                                         } else {
  5888.                                             $listino = new ListiniVendita();
  5889.                                             $listino->setVariante($variante);
  5890.                                             $listino->setCodiceListino($data[$indici["codiceListino"]]);
  5891.                                             $listino->setPrezzo(ServiziController::convertiInNumero($data[$indici["prezzo"]]));
  5892.                                             $listino->setFlagPrezzoNetto($data[$indici['flagPrezzoNetto']]);
  5893.                                             $listino->setMappaCategorieArticoli($mappa);
  5894.                                             $listino->setTipoOrdine($codiceTipoOrdine);
  5895.                                             $listino->setCodiceAnagrafica($data[$indici["codiceAnagrafica"]]);
  5896.                                             $listino->setDataCreazione($now);
  5897.                                             $listino->setDataModifica($now);
  5898.                                             if(count($data) > $indici['costo'] && $data[$indici['costo']] != '') {
  5899.                                                 $listino->setCosto(ServiziController::convertiInNumero($data[$indici["costo"]]));
  5900.                                             }
  5901.                                             if (count($data) > $indici['chiaveEsterna'])
  5902.                                                 $listino->setChiaveEsterna($data[$indici['chiaveEsterna']]);
  5903.                                             $em->persist($listino);
  5904.                                             $query_eseguite++;
  5905.                                         }
  5906.                                     } else {
  5907.                                         $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione listino - Codice Listino: ' $data[$indici['codiceListino']] . ' - Codice Articolo: ' $data[$indici['codiceArticolo']] . ' - Codice Variante: ' $data[$indici['codiceVariante']] . ' ERRORE: VARIANTE NON TROVATA'null$collegamentoRnd'ImportazioneController''caricaListiniVendita');
  5908.                                     }
  5909.                                 } else {
  5910.                                     /** @var  $listino ListiniVendita */
  5911.                                     $array = array(
  5912.                                         'variante' => null,
  5913.                                         'codiceListino' => $data[$indici['codiceListino']],
  5914.                                         'mappaCategorieArticoli' => $mappa,
  5915.                                         'tipoOrdine' => $codiceTipoOrdine
  5916.                                     );
  5917.                                     if ($data[$indici['codiceAnagrafica']] != '') {
  5918.                                         $array['codiceAnagrafica'] = $data[$indici['codiceAnagrafica']];
  5919.                                     }
  5920.                                     $listino $repo->findOneBy($array);
  5921.                                     if ($listino) {
  5922.                                         if ($data[$indici['operazione']] == "E") {
  5923.                                             $em->remove($listino);
  5924.                                             $query_eseguite++;
  5925.                                         } else {
  5926.                                             $listino->setPrezzo(ServiziController::convertiInNumero($data[$indici["prezzo"]]));
  5927.                                             $listino->setFlagPrezzoNetto($data[$indici['flagPrezzoNetto']]);
  5928.                                             $listino->setCodiceAnagrafica($data[$indici["codiceAnagrafica"]]);
  5929.                                             $listino->setDataModifica($now);
  5930.                                             $listino->setTipoOrdine($codiceTipoOrdine);
  5931.                                             if(count($data) > $indici['costo']){
  5932.                                                 $listino->setCosto(ServiziController::convertiInNumero($data[$indici["costo"]]));
  5933.                                             }
  5934.                                             if (count($data) > $indici['chiaveEsterna'])
  5935.                                                 $listino->setChiaveEsterna($data[$indici['chiaveEsterna']]);
  5936.                                             $em->persist($listino);
  5937.                                             $query_eseguite++;
  5938.                                         }
  5939.                                     } else {
  5940.                                         $listino = new ListiniVendita();
  5941.                                         $listino->setVariante(null);
  5942.                                         $listino->setCodiceListino($data[$indici["codiceListino"]]);
  5943.                                         $listino->setPrezzo(ServiziController::convertiInNumero($data[$indici["prezzo"]]));
  5944.                                         $listino->setFlagPrezzoNetto($data[$indici['flagPrezzoNetto']]);
  5945.                                         $listino->setMappaCategorieArticoli($mappa);
  5946.                                         $listino->setTipoOrdine($codiceTipoOrdine);
  5947.                                         $listino->setCodiceAnagrafica($data[$indici["codiceAnagrafica"]]);
  5948.                                         $listino->setDataCreazione($now);
  5949.                                         $listino->setDataModifica($now);
  5950.                                         if(count($data) > $indici['costo']){
  5951.                                             $listino->setCosto(ServiziController::convertiInNumero($data[$indici["costo"]]));
  5952.                                         }
  5953.                                         if (count($data) > $indici['chiaveEsterna'])
  5954.                                             $listino->setChiaveEsterna($data[$indici['chiaveEsterna']]);
  5955.                                         $em->persist($listino);
  5956.                                         $query_eseguite++;
  5957.                                     }
  5958.                                 }
  5959.                             } else {
  5960.                                 $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione listino (RIGA: ' . ($contatore $row) . ') : - Codice Listino: ' $data[$indici['codiceListino']] . ' - Codice Articolo: ' $data[$indici['codiceArticolo']] . ' - Codice Variante: ' $data[$indici['codiceVariante']] . ' ERRORE: MAPPA NON TROVATA'null$collegamentoRnd'ImportazioneController''caricaListiniVendita');
  5961.                                 $errori .= 'Errore importazione listino (RIGA: ' . ($contatore $row)  . ') : - Codice Listino: ' $data[$indici['codiceListino']] . ' - Codice Articolo: ' $data[$indici['codiceArticolo']] . ' - Codice Variante: ' $data[$indici['codiceVariante']] . ' ERRORE: MAPPA NON TROVATA<br/>';
  5962.                             }
  5963.                         } catch (\PDOException $ex) {
  5964.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione (RIGA: ' $contatore ') : ' $ex->getMessage(), null$collegamentoRnd'ImportazioneController''caricaListiniVendita');
  5965.                         } catch (\Exception|\Throwable $exception) {
  5966.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione: ' $exception->getMessage(), null$collegamentoRnd'ImportazioneController''caricaListiniVendita');
  5967.                         }
  5968.                         $row++;
  5969.                         $em->flush();
  5970.                     }
  5971.                 }else{
  5972.                     $errori .= "Impossibile aprire il file!";
  5973.                 }
  5974.                 $em->flush();
  5975.                 $row $contatore $row 1;
  5976.                 if ($errori == "") {
  5977.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull$collegamentoRnd'ImportazioneController''caricaListiniVendita');
  5978.                     return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  5979.                 } else {
  5980.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull$collegamentoRnd'ImportazioneController''caricaListiniVendita');
  5981.                     return new Response('Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row "</br>Lista Errori:</br>" $errori);
  5982.                 }
  5983.             } catch (\Exception|\Throwable $ex) {
  5984.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ' $ex->getMessage(), null$collegamentoRnd'ImportazioneController''caricaListiniVendita');
  5985.                 return new Response('Errore importazione: ' $ex->getMessage() . '<br/>' $ex->getTraceAsString());
  5986.             }
  5987.         } else {
  5988.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null$collegamentoRnd'ImportazioneController''caricaListiniVendita');
  5989.             return new Response("ERRORE PERMESSO");
  5990.         }
  5991.     } //OK
  5992.     /**
  5993.      * @Route("/caricaOfferte/{batch}/{iterazione}", name="carica_offerte", defaults={"batch"="0", "iterazione"="0"})
  5994.      */
  5995.     public function caricaOfferte(Request $request$batch 0$iterazione 0)
  5996.     {
  5997.         $collegamentoRnd $this->servizi->randomString2();
  5998.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  5999.             ini_set('max_execution_time'1200);
  6000.             ini_set('memory_limit''4G');
  6001.             $start microtime(true);
  6002.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  6003.             $em $this->servizi->doctrine->getManager();
  6004.             $repo $this->servizi->doctrine->getRepository(Offerte::class);
  6005.             $repoAnagrafica $this->servizi->doctrine->getRepository(Anagrafiche::class);
  6006.             $errori "";
  6007.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  6008.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  6009.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  6010.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  6011.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /caricaOfferte --- Inizio l\' importazione dei dati'null$collegamentoRnd'ImportazioneController''caricaOfferte');
  6012.             $errori "";
  6013.             $root_path $pathFileBase "offerte.csv";
  6014.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  6015.             $contatore 0;
  6016.             $row 0;
  6017.             $query_eseguite 0;
  6018.             $batch_size 50;
  6019.             /*
  6020.              *  0    codice_cliente
  6021.                 1    ragione_sociale
  6022.                 2    descrizione_breve
  6023.                 3    descrizione_lunga
  6024.                 4    data_documento
  6025.                 5    importo
  6026.                 6    stato
  6027.                 7    documento
  6028.                 8    numero
  6029.                 9    anno
  6030.                 10    moneta
  6031.                 11    importante
  6032.                 12    path_pdf_originale
  6033.                 13    operazione
  6034.              */
  6035.             $indici = array(
  6036.                 'codiceCliente' => 0,
  6037.                 'ragioneSociale' => 1,
  6038.                 'descrizioneBreve' => 2,
  6039.                 'descrizioneLunga' => 3,
  6040.                 'dataDocumento' => 4,
  6041.                 'importo' => 5,
  6042.                 'stato' => 6,
  6043.                 'documento' => 7,
  6044.                 'numero' => 8,
  6045.                 'anno' => 9,
  6046.                 'moneta' => 10,
  6047.                 'importante' => 11,
  6048.                 'pathPdfOriginale' => 12,
  6049.                 'operazione' => 13
  6050.             );
  6051.             $righeDaSaltareSeBatch 0;
  6052.             if($batch != && $iterazione != 0){
  6053.                 $rrr $batch $iterazione//Esempio iterazione = 1 batch = 5000 = 5000
  6054.                 $righeDaSaltareSeBatch $rrr $batch;
  6055.             }
  6056.             try {
  6057.                 if (($handle fopen($root_path"r")) !== false) {
  6058.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  6059.                         //Se attivata la funzionalità batch salto le righe che non devo importare
  6060.                         if($righeDaSaltareSeBatch 0){
  6061.                             if (($contatore $row) < $righeDaSaltareSeBatch){
  6062.                                 $contatore++;
  6063.                                 continue;
  6064.                             }
  6065.                         }
  6066.                         if($righeDaSaltareSeBatch && ($contatore $row $righeDaSaltareSeBatch) > $batch ){
  6067.                             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true"Batch completato: Iterazione: " strval($iterazione) . " --- Batch: " strval(($batch)) . " ( Da riga:" strval($righeDaSaltareSeBatch 1) . " a riga: " strval(($contatore $row)) . " )"null$collegamentoRnd'ImportazioneController''caricaOfferte');
  6068.                             break;
  6069.                         }
  6070.                         if ($row == 0) {
  6071.                             $row 1;
  6072.                             continue;
  6073.                         }
  6074.                         if ($query_eseguite >= $batch_size) {
  6075.                             $contatore $contatore $row 1;
  6076.                             $row 1;
  6077.                             $query_eseguite 0;
  6078.                             $em->flush();
  6079.                             $em->clear();
  6080.                         }
  6081.                         $now = new \DateTime('now');
  6082.                         try {
  6083.                             //Verifico se presente già un offerte
  6084.                             $offerta $repo->findOneBy(array('documento' => $data[$indici['documento']], 'numero' => $data[$indici['numero']], 'anno' => $data[$indici['anno']]));
  6085.                             if($offerta){
  6086.                                 if($data[$indici['operazione']] == 'E'){
  6087.                                     foreach ($offerta->getAllegati() as $all)
  6088.                                         $em->remove($all);
  6089.                                     foreach ($offerta->getContattiClienti() as $cont)
  6090.                                         $em->remove($cont);
  6091.                                     foreach ($offerta->getRegistroEventi() as $reg)
  6092.                                         $em->remove($reg);
  6093.                                     $em->remove($offerta);
  6094.                                     $query_eseguite++;
  6095.                                 }else if ($data[$indici['operazione']] != 'E'){
  6096.                                     $offerta->setDataModifica($now);
  6097.                                 }
  6098.                             }else if ($data[$indici['operazione']] != 'E'){
  6099.                                 $offerta = new Offerte();
  6100.                                 $offerta->setDataCreazione($now);
  6101.                                 $offerta->setDataModifica($now);
  6102.                                 $offerta->setDocumento($data[$indici['documento']]);
  6103.                                 $offerta->setNumero($data[$indici['numero']]);
  6104.                                 $offerta->setAnno($data[$indici['anno']]);
  6105.                             }
  6106.                             if($data[$indici['operazione']] != 'E'){
  6107.                                 $offerta->setCodiceCliente($data[$indici['codiceCliente']]);
  6108.                                 $offerta->setRagioneSociale($data[$indici['ragioneSociale']]);
  6109.                                 $offerta->setDescrizioneBreve($data[$indici['descrizioneBreve']]);
  6110.                                 $offerta->setDescrizioneLunga($data[$indici['descrizioneLunga']]);
  6111.                                 $offerta->setDataDocumento(ServiziController::convertiInDatetime($data[$indici['dataDocumento']], false'Y-m-d'));
  6112.                                 $offerta->setImporto(ServiziController::convertiInNumero($data[$indici['importo']]));
  6113.                                 $offerta->setStato($data[$indici['stato']]);
  6114.                                 $collegamentoAnagrafica $repoAnagrafica->findOneBy(array('codice' => $offerta->getCodiceCliente()));
  6115.                                 $offerta->setCollegamentoAnagrafica($collegamentoAnagrafica);
  6116.                                 $offerta->setMoneta($data[$indici['moneta']]);
  6117.                                 $offerta->setImportante($data[$indici['importante']] == true false);
  6118.                                 $offerta->setPathPdfOriginale($data[$indici['pathPdfOriginale']]);
  6119.                                 $em->persist($offerta);
  6120.                                 $query_eseguite++;
  6121.                             }
  6122.                         } catch (\PDOException $ex) {
  6123.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione (RIGA: ' $contatore ') : ' $ex->getMessage(), null$collegamentoRnd'ImportazioneController''caricaOfferte');
  6124.                         } catch (\Exception|\Throwable $exception) {
  6125.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione: ' $exception->getMessage(), null$collegamentoRnd'ImportazioneController''caricaOfferte');
  6126.                         }
  6127.                         $row++;
  6128.                     }
  6129.                 }else{
  6130.                     $errori .= "Impossibile aprire il file!";
  6131.                 }
  6132.                 $em->flush();
  6133.                 $row $contatore $row 1;
  6134.                 if ($errori == "") {
  6135.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull$collegamentoRnd'ImportazioneController''caricaOfferte');
  6136.                     return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  6137.                 } else {
  6138.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull$collegamentoRnd'ImportazioneController''caricaOfferte');
  6139.                     return new Response('Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row "</br>Lista Errori:</br>" $errori);
  6140.                 }
  6141.             } catch (\Exception|\Throwable $ex) {
  6142.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ' $ex->getMessage(), null$collegamentoRnd'ImportazioneController''caricaOfferte');
  6143.                 return new Response('Errore importazione: ' $ex->getMessage());
  6144.             }
  6145.         } else {
  6146.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null$collegamentoRnd'ImportazioneController''caricaOfferte');
  6147.             return new Response("ERRORE PERMESSO");
  6148.         }
  6149.     } //OK
  6150.     /**
  6151.      * @Route("/caricaDocumenti/{svuota}/{batch}/{iterazione}", name="carica_documenti", defaults={"svuota"="0", "batch"="0", "iterazione"="0"})
  6152.      */
  6153.     public function caricaDocumenti(Request $request$svuota "0"$batch "0"$iterazione "0")
  6154.     {
  6155.         $collegamentoRnd $this->servizi->randomString2();
  6156.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  6157.             ini_set('max_execution_time', -1);
  6158.             ini_set('memory_limit''4G');
  6159.             $start microtime(true);
  6160.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  6161.             $em $this->servizi->doctrine->getManager();
  6162.             $repo $this->servizi->doctrine->getRepository(Documenti::class);
  6163.             $repoAnagrafiche $this->servizi->doctrine->getRepository(Anagrafiche::class);
  6164.             $errori "";
  6165.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  6166.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  6167.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  6168.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /caricaDocumenti/' $svuota ' --- Inizio l\' importazione dei dati'null$collegamentoRnd'ImportazioneController''caricaDocumenti');
  6169.             $connection $this->servizi->doctrine->getConnection();
  6170.             if($svuota == "1"){
  6171.                 $em $this->servizi->doctrine->getManager();
  6172.                 $connection->beginTransaction();
  6173.                 try {
  6174.                     $connection->query("SET FOREIGN_KEY_CHECKS=0;");
  6175.                     $connection->executeUpdate("TRUNCATE `documenti`;");
  6176.                     $connection->executeUpdate("TRUNCATE `documenti_righe`;");
  6177.                     $connection->query("SET FOREIGN_KEY_CHECKS=1;");
  6178.                     $connection->commit();
  6179.                 }catch (\Exception|\Throwable $ex){
  6180.                     $this->servizi->DebuggaException($ex"Errore pulizia documenti e documenti_righe DB"falsenull$collegamentoRnd'ImportazioneController''caricaDocumenti');
  6181.                 }
  6182.             }
  6183.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  6184.             $errori "";
  6185.             $root_path $pathFileBase "documenti.csv";
  6186.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  6187.             $contatore 0;
  6188.             $row 0;
  6189.             $query_eseguite 0;
  6190.             $batch_size 50;
  6191.             /*
  6192.             0    identificativo    Identificativo univoco documento
  6193.             1    documento
  6194.             2    anno
  6195.             3    data_documento    2021-12-31
  6196.             4    numero
  6197.             5    numero_fattura
  6198.             6    data_fattura    2021-12-31
  6199.             7    numero_ddt
  6200.             8    data_ddt    2021-12-31
  6201.             9    agente
  6202.             10    codice_anagrafica
  6203.             11    tipo_anagrafica    cliente/fornitore/agente/altro
  6204.             12    ragione_sociale
  6205.             13    indirizzo
  6206.             14    citta
  6207.             15    provincia
  6208.             16    cap
  6209.             17    regione
  6210.             18    codice_fiscale
  6211.             19    partita_iva
  6212.             20    modalita_pagamento
  6213.             21    modalita_spedizione
  6214.             22    modalita_consegna
  6215.             23    totale_documento_netto    decimal(18,5)
  6216.             24    totale_costo_netto    decimal(18,5)
  6217.             25    zona
  6218.             26    mercato
  6219.             27    sub_agente
  6220.             28    capo_area
  6221.             29    nome_file_pdf_documento
  6222.             30    nome_file_pdf_fattura
  6223.             31    nome_file_pdf_ddt
  6224.             32    stato_avanzamento
  6225.             33    indirizzo_tracking_corriere
  6226.             34    utente
  6227.             35    data_consegna    2021-12-31
  6228.             36    operazione    E=Elimina - A=Aggiorna - N=Aggiungi
  6229.             37  codice_agente
  6230.             38    variabile stringa 1
  6231.             39    variabile stringa 2
  6232.             40    variabile stringa 3
  6233.             41    variabile stringa 4
  6234.             42    variabile stringa 5
  6235.             43    variabile decimale 1
  6236.             44    variabile decimale 2
  6237.             45    variabile decimale 3
  6238.             46    variabile decimale 4
  6239.             47    variabile decimale 5
  6240.             48    variabile data ora 1
  6241.             49    variabile data ora 2
  6242.             50    variabile data ora 3
  6243.             51    variabile booleana 1
  6244.             52    variabile booleana 2
  6245.             53    variabile booleana 3
  6246.             54  codice_fornitore
  6247.             55  tipo_documento
  6248.             56  identificativo_utente
  6249.              */
  6250.             $indici = array(
  6251.                 'identificativo' => 0,
  6252.                 'documento' => 1,
  6253.                 'anno' => 2,
  6254.                 'dataDocumento' => 3,
  6255.                 'numero' => 4,
  6256.                 'numeroFattura' => 5,
  6257.                 'dataFattura' => 6,
  6258.                 'numeroDdt' => 7,
  6259.                 'dataDdt' => 8,
  6260.                 'agente' => 9,
  6261.                 'codiceAnagrafica' => 10,
  6262.                 'tipoAnagrafica' => 11,
  6263.                 'ragioneSociale' => 12,
  6264.                 'indirizzo' => 13,
  6265.                 'citta' => 14,
  6266.                 'provincia' => 15,
  6267.                 'cap' => 16,
  6268.                 'regione' => 17,
  6269.                 'codiceFiscale' => 18,
  6270.                 'partitaIva' => 19,
  6271.                 'modalitaPagamento' => 20,
  6272.                 'modalitaSpedizione' => 21,
  6273.                 'modalitaConsegna' => 22,
  6274.                 'totaleDocumentoNetto' => 23,
  6275.                 'totaleCostoNetto' => 24,
  6276.                 'zona' => 25,
  6277.                 'mercato' => 26,
  6278.                 'subAgente' => 27,
  6279.                 'capoArea' => 28,
  6280.                 'nomeFilePdfDocumento' => 29,
  6281.                 'nomeFilePdfFattura' => 30,
  6282.                 'nomeFilePdfDdt' => 31,
  6283.                 'statoAvanzamento' => 32,
  6284.                 'indirizzoTrackingCorriere' => 33,
  6285.                 'utente' => 34,
  6286.                 'dataConsegna' => 35,
  6287.                 'operazione' => 36,
  6288.                 'codiceAgente' => 37,
  6289.                 'variabileStringa1' => 38,
  6290.                 'variabileStringa2' => 39,
  6291.                 'variabileStringa3' => 40,
  6292.                 'variabileStringa4' => 41,
  6293.                 'variabileStringa5' => 42,
  6294.                 'variabileDecimale1' => 43,
  6295.                 'variabileDecimale2' => 44,
  6296.                 'variabileDecimale3' => 45,
  6297.                 'variabileDecimale4' => 46,
  6298.                 'variabileDecimale5' => 47,
  6299.                 'variabileDataora1' => 48,
  6300.                 'variabileDataora2' => 49,
  6301.                 'variabileDataora3' => 50,
  6302.                 'variabileBooleana1' => 51,
  6303.                 'variabileBooleana2' => 52,
  6304.                 'variabileBooleana3' => 53,
  6305.                 'codiceFornitore' => 54,
  6306.                 'tipoDocumento' => 55,
  6307.                 'identificativoUtente' => 56
  6308.             );
  6309.             $righeDaSaltareSeBatch 0;
  6310.             if($batch != && $iterazione != 0){
  6311.                 $rrr $batch $iterazione//Esempio iterazione = 1 batch = 5000 = 5000
  6312.                 $righeDaSaltareSeBatch $rrr $batch;
  6313.             }
  6314.             try {
  6315.                 if (($handle fopen($root_path"r")) !== false) {
  6316.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  6317.                         //Se attivata la funzionalità batch salto le righe che non devo importare
  6318.                         if($righeDaSaltareSeBatch 0){
  6319.                             if (($contatore $row) < $righeDaSaltareSeBatch){
  6320.                                 $contatore++;
  6321.                                 continue;
  6322.                             }
  6323.                         }
  6324.                         if($righeDaSaltareSeBatch && ($contatore $row $righeDaSaltareSeBatch) > $batch ){
  6325.                             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true"Batch completato: Iterazione: " strval($iterazione) . " --- Batch: " strval(($batch)) . " ( Da riga:" strval($righeDaSaltareSeBatch 1) . " a riga: " strval(($contatore $row)) . " )"null$collegamentoRnd'ImportazioneController''caricaDocumenti');
  6326.                             break;
  6327.                         }
  6328.                         if ($row == 0) {
  6329.                             $row 1;
  6330.                             continue;
  6331.                         }
  6332.                         if ($query_eseguite >= $batch_size) {
  6333.                             $contatore $contatore $row 1;
  6334.                             $row 1;
  6335.                             $query_eseguite 0;
  6336.                             $em->flush();
  6337.                             $em->clear();
  6338.                         }
  6339.                         $now = new \DateTime('now');
  6340.                         try {
  6341.                             //Verifico se presente già un offerte
  6342.                             $doc $repo->findOneBy(array('identificativo' => $data[$indici['identificativo']]));
  6343.                             if($doc){
  6344.                                 if($data[$indici['operazione']] == 'E'){
  6345.                                     foreach ($doc->getRighe() as $all)
  6346.                                         $em->remove($all);
  6347.                                     $em->remove($doc);
  6348.                                     $query_eseguite++;
  6349.                                 } else if ($data[$indici['operazione']] != 'E'){
  6350.                                     $doc->setDataModifica($now);
  6351.                                 }
  6352.                             } else if ($data[$indici['operazione']] != 'E'){
  6353.                                 $doc = new Documenti();
  6354.                                 $doc->setDataCreazione(new \DateTime());
  6355.                                 $doc->setIdentificativo($data[$indici['identificativo']]);
  6356.                             }
  6357.                             if($data[$indici['operazione']] != 'E'){
  6358.                                 $doc->setDocumento($data[$indici['documento']]);
  6359.                                 $doc->setAnno($data[$indici['anno']]);
  6360.                                 $doc->setDataDocumento(self::OttieniDataDaStringa($data[$indici['dataDocumento']], false));
  6361.                                 $doc->setNumero($data[$indici['numero']]);
  6362.                                 $doc->setNumeroDdt($data[$indici['numeroDdt']]);
  6363.                                 $doc->setDataDdt(self::OttieniDataDaStringa($data[$indici['dataDdt']], false));
  6364.                                 $doc->setNumeroFattura($data[$indici['numeroFattura']]);
  6365.                                 $doc->setDataFattura(self::OttieniDataDaStringa($data[$indici['dataFattura']], false));
  6366.                                 $doc->setAgente($data[$indici['agente']]);
  6367.                                 $doc->setCodiceAnagrafica($data[$indici['codiceAnagrafica']]);
  6368.                                 $doc->setTipoAnagrafica($data[$indici['tipoAnagrafica']]);
  6369.                                 $doc->setRagioneSociale($data[$indici['ragioneSociale']]);
  6370.                                 $doc->setIndirizzo($data[$indici['indirizzo']]);
  6371.                                 $doc->setCitta($data[$indici['citta']]);
  6372.                                 $doc->setProvincia($data[$indici['provincia']]);
  6373.                                 $doc->setCap($data[$indici['cap']]);
  6374.                                 $doc->setRegione($data[$indici['regione']]);
  6375.                                 $doc->setCodiceFiscale($data[$indici['codiceFiscale']]);
  6376.                                 $doc->setPartitaIva($data[$indici['partitaIva']]);
  6377.                                 $doc->setModalitaPagamento($data[$indici['modalitaPagamento']]);
  6378.                                 $doc->setModalitaSpedizione($data[$indici['modalitaSpedizione']]);
  6379.                                 $doc->setModalitaConsegna($data[$indici['modalitaConsegna']]);
  6380.                                 $doc->setTotaleDocumentoNetto(str_replace(',','.'$data[$indici['totaleDocumentoNetto']]));
  6381.                                 $doc->setTotaleCostoNetto(str_replace(',','.',$data[$indici['totaleCostoNetto']]));
  6382.                                 $doc->setZona($data[$indici['zona']]);
  6383.                                 $doc->setMercato($data[$indici['mercato']]);
  6384.                                 $doc->setSubAgente($data[$indici['subAgente']]);
  6385.                                 $doc->setCapoArea($data[$indici['capoArea']]);
  6386.                                 $doc->setNomeFilePdfDocumento($data[$indici['nomeFilePdfDocumento']]);
  6387.                                 $doc->setNomeFilePdfFattura($data[$indici['nomeFilePdfFattura']]);
  6388.                                 $doc->setNomefilePdfDdt($data[$indici['nomeFilePdfDdt']]);
  6389.                                 $doc->setStatoAvanzamento($data[$indici['statoAvanzamento']]);
  6390.                                 $doc->setIndirizzoTrackingCorriere($data[$indici['indirizzoTrackingCorriere']]);
  6391.                                 $doc->setUtente($data[$indici['utente']]);
  6392.                                 $doc->setDataConsegna(self::OttieniDataDaStringa($data[$indici['dataConsegna']], false));
  6393.                                 $doc->setCodiceAgente($data[$indici['codiceAgente']]);
  6394.                                 $doc->setDataModifica(new \DateTime());
  6395.                                 $doc->setVariabileStringa1($data[$indici['variabileStringa1']]);
  6396.                                 $doc->setVariabileStringa2($data[$indici['variabileStringa2']]);
  6397.                                 $doc->setVariabileStringa3($data[$indici['variabileStringa3']]);
  6398.                                 $doc->setVariabileStringa4($data[$indici['variabileStringa4']]);
  6399.                                 $doc->setVariabileStringa5($data[$indici['variabileStringa5']]);
  6400.                                 $doc->setVariabileDecimale1(ServiziController::convertiInNumero($data[$indici['variabileDecimale1']]));
  6401.                                 $doc->setVariabileDecimale2(ServiziController::convertiInNumero($data[$indici['variabileDecimale2']]));
  6402.                                 $doc->setVariabileDecimale3(ServiziController::convertiInNumero($data[$indici['variabileDecimale3']]));
  6403.                                 $doc->setVariabileDecimale4(ServiziController::convertiInNumero($data[$indici['variabileDecimale4']]));
  6404.                                 $doc->setVariabileDecimale5(ServiziController::convertiInNumero($data[$indici['variabileDecimale5']]));
  6405.                                 $doc->setVariabileDataora1(self::OttieniDataDaStringa($data[$indici['variabileDataora1']], true));
  6406.                                 $doc->setVariabileDataora2(self::OttieniDataDaStringa($data[$indici['variabileDataora2']], true));
  6407.                                 $doc->setVariabileDataora3(self::OttieniDataDaStringa($data[$indici['variabileDataora3']], true));
  6408.                                 $doc->setVariabileBooleana1(ServiziController::convertiInBoolean($data[$indici['variabileBooleana1']]));
  6409.                                 $doc->setVariabileBooleana2(ServiziController::convertiInBoolean($data[$indici['variabileBooleana2']]));
  6410.                                 $doc->setVariabileBooleana3(ServiziController::convertiInBoolean($data[$indici['variabileBooleana3']]));
  6411.                                 if(count($data) > $indici['codiceFornitore'])
  6412.                                     $doc->setCodiceFornitore($data[$indici['codiceFornitore']]);
  6413.                                 if(count($data) > $indici['tipoDocumento'])
  6414.                                     $doc->setTipoDocumento($data[$indici['tipoDocumento']]);
  6415.                                 if(count($data) > $indici['identificativoUtente'])
  6416.                                     $doc->setVincolaIdentificativoUtente($data[$indici['identificativoUtente']]);
  6417.                                 $em->persist($doc);
  6418.                                 $query_eseguite++;
  6419.                             }
  6420.                         } catch (\PDOException $ex) {
  6421.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione (RIGA: ' . ($contatore $row) . ') : ' $ex->getMessage(), null$collegamentoRnd'ImportazioneController''caricaDocumenti');
  6422.                         } catch (\Exception|\Throwable $exception) {
  6423.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione: (RIGA: ' . ($contatore $row) . ') : ' $exception->getMessage(), null$collegamentoRnd'ImportazioneController''caricaDocumenti');
  6424.                         }
  6425.                         $row++;
  6426.                     }
  6427.                 }else{
  6428.                     $errori .= "Impossibile aprire il file!";
  6429.                 }
  6430.                 $em->flush();
  6431.                 $row $contatore $row 1;
  6432.                 if ($errori == "") {
  6433.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull$collegamentoRnd'ImportazioneController''caricaDocumenti');
  6434.                     return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  6435.                 } else {
  6436.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull$collegamentoRnd'ImportazioneController''caricaDocumenti');
  6437.                     return new Response('Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row "</br>Lista Errori:</br>" $errori);
  6438.                 }
  6439.             } catch (\Exception|\Throwable $ex) {
  6440.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ' $ex->getMessage(), null$collegamentoRnd'ImportazioneController''caricaDocumenti');
  6441.                 return new Response('Errore importazione: ' $ex->getMessage());
  6442.             }
  6443.         } else {
  6444.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null$collegamentoRnd'ImportazioneController''caricaDocumenti');
  6445.             return new Response("ERRORE PERMESSO");
  6446.         }
  6447.     } //OK
  6448.     /**
  6449.      * @Route("/caricaRigheDocumenti/{svuota}/{batch}/{iterazione}", name="carica_documenti_righe", defaults={"svuota"="0", "batch"="0", "iterazione"="0"})
  6450.      */
  6451.     public function caricaRigheDocumenti(Request $request$svuota "0"$batch "0"$iterazione "0")
  6452.     {
  6453.         $collegamentoRnd $this->servizi->randomString2();
  6454.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  6455.             ini_set('max_execution_time'1200);
  6456.             ini_set('memory_limit''4G');
  6457.             $start microtime(true);
  6458.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  6459.             $em $this->servizi->doctrine->getManager();
  6460.             $repo $this->servizi->doctrine->getRepository(DocumentiRighe::class);
  6461.             $repoDoc $this->servizi->doctrine->getRepository(Documenti::class);
  6462.             $errori "";
  6463.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  6464.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  6465.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  6466.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /caricaDocumentiRighe/' $svuota ' --- Inizio l\' importazione dei dati'null$collegamentoRnd'ImportazioneController''caricaRigheDocumenti');
  6467.             $connection $this->servizi->doctrine->getConnection();
  6468.             if($svuota == "1"){
  6469.                 $em $this->servizi->doctrine->getManager();
  6470.                 $connection->beginTransaction();
  6471.                 try {
  6472.                     $connection->query("SET FOREIGN_KEY_CHECKS=0;");
  6473.                     $connection->executeUpdate("TRUNCATE `documenti_righe`;");
  6474.                     $connection->query("SET FOREIGN_KEY_CHECKS=1;");
  6475.                     $connection->commit();
  6476.                 }catch (\Exception|\Throwable $ex){
  6477.                     $this->servizi->DebuggaException($ex"Errore pulizia documenti_righe DB"falsenull$collegamentoRnd'ImportazioneController''caricaRigheDocumenti');
  6478.                 }
  6479.             }
  6480.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  6481.            $errori "";
  6482.             $root_path $pathFileBase "righe_documenti.csv";
  6483.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  6484.             $contatore 0;
  6485.             $row 0;
  6486.             $query_eseguite 0;
  6487.             $batch_size 50;
  6488.             /*
  6489.                 0    identificativo_documento    Collegamento con documento
  6490.                 1    numero_riga    intero che identifica la riga (Chiave univoca)
  6491.                 2    codice_articolo
  6492.                 3    descrizione_articolo
  6493.                 4    marca
  6494.                 5    um
  6495.                 6    data_consegna    2021-12-31
  6496.                 7    quantita    decimal(18,5)
  6497.                 8    prezzo_netto_totale    decimal(18,5)
  6498.                 9    prezzo_netto_cad    decimal(18,5)
  6499.                 10    prezzo_lordo_totale    decimal(18,5)
  6500.                 11    prezzo_lordo_cad    decimal(18,5)
  6501.                 12    sconti_maggiorazioni    -0.00#-3.00#+10.00#-0.00#-0.00#-0.00
  6502.                 13    descrizione_articolo_agg1
  6503.                 14    descrizione_articolo_agg2
  6504.                 15    variabile_1
  6505.                 16    variabile_2
  6506.                 17    variabile_3
  6507.                 18    variabile_4
  6508.                 19    variabile_5
  6509.                 20    qta_alt_1
  6510.                 21    qta_alt_2
  6511.                 22    qta_alt_3
  6512.                 23    costo_cad    decimal(18,5)
  6513.                 24    costo_totale    decimal(18,5)
  6514.                 25    stato_avanzamento
  6515.                 26    numero_riga_alternativo    intero
  6516.                 27    operazione    E=Elimina - A=Aggiorna - N=Aggiungi
  6517.                 28    variabile stringa 1
  6518.                 29    variabile stringa 2
  6519.                 30    variabile stringa 3
  6520.                 31    variabile stringa 4
  6521.                 32    variabile stringa 5
  6522.                 33    variabile decimale 1
  6523.                 34    variabile decimale 2
  6524.                 35    variabile decimale 3
  6525.                 36    variabile decimale 4
  6526.                 37    variabile decimale 5
  6527.                 38    variabile data ora 1
  6528.                 39    variabile data ora 2
  6529.                 40    variabile data ora 3
  6530.                 41    variabile booleana 1
  6531.                 42    variabile booleana 2
  6532.                 43    variabile booleana 3
  6533.                 44  stato
  6534.              */
  6535.             $indici = array(
  6536.                 'identificativoDocumento' => 0,
  6537.                 'numeroRiga' => 1,
  6538.                 'codiceArticolo' => 2,
  6539.                 'descrizioneArticolo' => 3,
  6540.                 'marca' => 4,
  6541.                 'um' => 5,
  6542.                 'dataConsegna' => 6,
  6543.                 'quantita' => 7,
  6544.                 'prezzoNettoTotale' => 8,
  6545.                 'prezzoNettoCad' => 9,
  6546.                 'prezzoLordoTotale' => 10,
  6547.                 'prezzoLordoCad' => 11,
  6548.                 'scontiMaggiorazioni' => 12,
  6549.                 'descrizioneArticoloAgg1' => 13,
  6550.                 'descrizioneArticoloAgg2' => 14,
  6551.                 'variabile1' => 15,
  6552.                 'variabile2' => 16,
  6553.                 'variabile3' => 17,
  6554.                 'variabile4' => 18,
  6555.                 'variabile5' => 19,
  6556.                 'qtaAlt1' => 20,
  6557.                 'qtaAlt2' => 21,
  6558.                 'qtaAlt3' => 22,
  6559.                 'costoCad' => 23,
  6560.                 'costoTotale' => 24,
  6561.                 'statoAvanzamento' => 25,
  6562.                 'numeroRigaAlternativo' => 26,
  6563.                 'operazione' => 27,
  6564.                 'variabileStringa1' => 28,
  6565.                 'variabileStringa2' => 29,
  6566.                 'variabileStringa3' => 30,
  6567.                 'variabileStringa4' => 31,
  6568.                 'variabileStringa5' => 32,
  6569.                 'variabileDecimale1' => 33,
  6570.                 'variabileDecimale2' => 34,
  6571.                 'variabileDecimale3' => 35,
  6572.                 'variabileDecimale4' => 36,
  6573.                 'variabileDecimale5' => 37,
  6574.                 'variabileDataora1' => 38,
  6575.                 'variabileDataora2' => 39,
  6576.                 'variabileDataora3' => 40,
  6577.                 'variabileBooleana1' => 41,
  6578.                 'variabileBooleana2' => 42,
  6579.                 'variabileBooleana3' => 43,
  6580.                 'stato' => 44
  6581.             );
  6582.             $righeDaSaltareSeBatch 0;
  6583.             if($batch != && $iterazione != 0){
  6584.                 $rrr $batch $iterazione//Esempio iterazione = 1 batch = 5000 = 5000
  6585.                 $righeDaSaltareSeBatch $rrr $batch;
  6586.             }
  6587.             try {
  6588.                 if (($handle fopen($root_path"r")) !== false) {
  6589.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  6590.                         //Se attivata la funzionalità batch salto le righe che non devo importare
  6591.                         if($righeDaSaltareSeBatch 0){
  6592.                             if (($contatore $row) < $righeDaSaltareSeBatch){
  6593.                                 $contatore++;
  6594.                                 continue;
  6595.                             }
  6596.                         }
  6597.                         if($righeDaSaltareSeBatch && ($contatore $row $righeDaSaltareSeBatch) > $batch ){
  6598.                             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true"Batch completato: Iterazione: " strval($iterazione) . " --- Batch: " strval(($batch)) . " ( Da riga:" strval($righeDaSaltareSeBatch 1) . " a riga: " strval(($contatore $row)) . " )"null$collegamentoRnd'ImportazioneController''caricaRigheDocumenti');
  6599.                             break;
  6600.                         }
  6601.                         if ($row == 0) {
  6602.                             $row 1;
  6603.                             continue;
  6604.                         }
  6605.                         if ($query_eseguite >= $batch_size) {
  6606.                             $contatore $contatore $row 1;
  6607.                             $row 1;
  6608.                             $query_eseguite 0;
  6609.                             $em->flush();
  6610.                             $em->clear();
  6611.                         }
  6612.                         $now = new \DateTime('now');
  6613.                         try {
  6614.                             $doc $repoDoc->findOneBy(array('identificativo' => $data[$indici['identificativoDocumento']]));
  6615.                             if($doc) {
  6616.                                 //Verifico se presente già un offerte
  6617.                                 $rigaDoc $repo->findOneBy(array('identificativoDocumento' => $data[$indici['identificativoDocumento']], 'numeroRiga' => $data[$indici['numeroRiga']]));
  6618.                                 if ($rigaDoc) {
  6619.                                     if ($data[$indici['operazione']] == 'E') {
  6620.                                         $em->remove($rigaDoc);
  6621.                                         $query_eseguite++;
  6622.                                     } else if ($data[$indici['operazione']] != 'E') {
  6623.                                         $rigaDoc->setDataModifica($now);
  6624.                                     }
  6625.                                 } else if ($data[$indici['operazione']] != 'E') {
  6626.                                     $rigaDoc = new DocumentiRighe();
  6627.                                     $rigaDoc->setDataCreazione(new \DateTime());
  6628.                                     $rigaDoc->setIdentificativoDocumento($doc);
  6629.                                     $rigaDoc->setNumeroRiga($data[$indici['numeroRiga']]);
  6630.                                 }
  6631.                                 if ($data[$indici['operazione']] != 'E') {
  6632.                                     $rigaDoc->setCodiceArticolo($data[$indici['codiceArticolo']]);
  6633.                                     $rigaDoc->setDescrizioneArticolo($data[$indici['descrizioneArticolo']]);
  6634.                                     $rigaDoc->setMarca($data[$indici['marca']]);
  6635.                                     $rigaDoc->setUm($data[$indici['um']]);
  6636.                                     $rigaDoc->setDataConsegna(self::OttieniDataDaStringa($data[$indici['dataConsegna']], false));
  6637.                                     $rigaDoc->setQuantita(ServiziController::convertiInNumero($data[$indici['quantita']]));
  6638.                                     $rigaDoc->setPrezzoNettoTotale(ServiziController::convertiInNumero($data[$indici['prezzoNettoTotale']]));
  6639.                                     $rigaDoc->setPrezzoNettoCad(ServiziController::convertiInNumero($data[$indici['prezzoNettoCad']]));
  6640.                                     $rigaDoc->setPrezzoLordoTotale(ServiziController::convertiInNumero($data[$indici['prezzoLordoTotale']]));
  6641.                                     $rigaDoc->setPrezzoLordoCad(ServiziController::convertiInNumero($data[$indici['prezzoLordoCad']]));
  6642.                                     $rigaDoc->setScontiMaggiorazioni($data[$indici['scontiMaggiorazioni']]);
  6643.                                     $rigaDoc->setDescrizioneArticoloAgg1($data[$indici['descrizioneArticoloAgg1']]);
  6644.                                     $rigaDoc->setDescrizioneArticoloAgg2($data[$indici['descrizioneArticoloAgg2']]);
  6645.                                     $rigaDoc->setVariabile1($data[$indici['variabile1']]);
  6646.                                     $rigaDoc->setVariabile2($data[$indici['variabile2']]);
  6647.                                     $rigaDoc->setVariabile3($data[$indici['variabile3']]);
  6648.                                     $rigaDoc->setVariabile4($data[$indici['variabile4']]);
  6649.                                     $rigaDoc->setVariabile5($data[$indici['variabile5']]);
  6650.                                     $rigaDoc->setQtaAlt1(ServiziController::convertiInNumero($data[$indici['qtaAlt1']]));
  6651.                                     $rigaDoc->setQtaAlt2(ServiziController::convertiInNumero($data[$indici['qtaAlt2']]));
  6652.                                     $rigaDoc->setQtaAlt3(ServiziController::convertiInNumero($data[$indici['qtaAlt3']]));
  6653.                                     $rigaDoc->setCostoCad(ServiziController::convertiInNumero($data[$indici['costoCad']]));
  6654.                                     $rigaDoc->setCostoTotale(ServiziController::convertiInNumero($data[$indici['costoTotale']]));
  6655.                                     $rigaDoc->setStatoAvanzamento($data[$indici['statoAvanzamento']]);
  6656.                                     $rigaDoc->setNumeroRigaAlternativo(ServiziController::convertiInNumero($data[$indici['numeroRigaAlternativo']]));
  6657.                                     $rigaDoc->setDataModifica(new \DateTime());
  6658.                                     $rigaDoc->setVariabileStringa1($data[$indici['variabileStringa1']]);
  6659.                                     $rigaDoc->setVariabileStringa2($data[$indici['variabileStringa2']]);
  6660.                                     $rigaDoc->setVariabileStringa3($data[$indici['variabileStringa3']]);
  6661.                                     $rigaDoc->setVariabileStringa4($data[$indici['variabileStringa4']]);
  6662.                                     $rigaDoc->setVariabileStringa5($data[$indici['variabileStringa5']]);
  6663.                                     $rigaDoc->setVariabileDecimale1(ServiziController::convertiInNumero($data[$indici['variabileDecimale1']]));
  6664.                                     $rigaDoc->setVariabileDecimale2(ServiziController::convertiInNumero($data[$indici['variabileDecimale2']]));
  6665.                                     $rigaDoc->setVariabileDecimale3(ServiziController::convertiInNumero($data[$indici['variabileDecimale3']]));
  6666.                                     $rigaDoc->setVariabileDecimale4(ServiziController::convertiInNumero($data[$indici['variabileDecimale4']]));
  6667.                                     $rigaDoc->setVariabileDecimale5(ServiziController::convertiInNumero($data[$indici['variabileDecimale5']]));
  6668.                                     $rigaDoc->setVariabileDataora1(self::OttieniDataDaStringa($data[$indici['variabileDataora1']], true));
  6669.                                     $rigaDoc->setVariabileDataora2(self::OttieniDataDaStringa($data[$indici['variabileDataora2']], true));
  6670.                                     $rigaDoc->setVariabileDataora3(self::OttieniDataDaStringa($data[$indici['variabileDataora3']], true));
  6671.                                     $rigaDoc->setVariabileBooleana1(ServiziController::convertiInBoolean($data[$indici['variabileBooleana1']]));
  6672.                                     $rigaDoc->setVariabileBooleana2(ServiziController::convertiInBoolean($data[$indici['variabileBooleana2']]));
  6673.                                     $rigaDoc->setVariabileBooleana3(ServiziController::convertiInBoolean($data[$indici['variabileBooleana3']]));
  6674.                                     if (count($data) >= $indici['stato'] - 1){
  6675.                                         $rigaDoc->setStato($data[$indici['stato']]);
  6676.                                     }
  6677.                                     $em->persist($rigaDoc);
  6678.                                     $query_eseguite++;
  6679.                                 }
  6680.                             }else{
  6681.                                 $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione (RIGA: ' . ($row $contatore) . ') : Documento non trovato!' null$collegamentoRnd'ImportazioneController''caricaRigheDocumenti');
  6682.                                 $errori .= ('Errore importazione (RIGA: ' $contatore ') : Documento non trovato!');
  6683.                             }
  6684.                         } catch (\PDOException $ex) {
  6685.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione (RIGA: ' . ($row $contatore) . ') : ' $ex->getMessage(), null$collegamentoRnd'ImportazioneController''caricaRigheDocumenti');
  6686.                         } catch (\Exception|\Throwable $exception) {
  6687.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione: (RIGA: ' . ($row $contatore) . ') : ' $exception->getMessage(), null$collegamentoRnd'ImportazioneController''caricaRigheDocumenti');
  6688.                         }
  6689.                         $row++;
  6690.                     }
  6691.                 }else{
  6692.                     $errori .= "Impossibile aprire il file!";
  6693.                 }
  6694.                 $em->flush();
  6695.                 $row $contatore $row 1;
  6696.                 if ($errori == "") {
  6697.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull$collegamentoRnd'ImportazioneController''caricaRigheDocumenti');
  6698.                     return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  6699.                 } else {
  6700.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull$collegamentoRnd'ImportazioneController''caricaRigheDocumenti');
  6701.                     return new Response('Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row "</br>Lista Errori:</br>" $errori);
  6702.                 }
  6703.             } catch (\Exception|\Throwable $ex) {
  6704.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ' $ex->getMessage(), null$collegamentoRnd'ImportazioneController''caricaRigheDocumenti');
  6705.                 return new Response('Errore importazione: ' $ex->getMessage());
  6706.             }
  6707.         } else {
  6708.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null$collegamentoRnd'ImportazioneController''caricaRigheDocumenti');
  6709.             return new Response("ERRORE PERMESSO");
  6710.         }
  6711.     } //OK
  6712.     /**
  6713.      * @Route("/caricaOfferteRighe/{batch}/{iterazione}", name="carica_offerte_righe", defaults={"batch"="0", "iterazione"="0"})
  6714.      */
  6715.     public function caricaOfferteRighe(Request $request$batch$iterazione)
  6716.     {
  6717.         $collegamentoRnd $this->servizi->randomString2();
  6718.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  6719.             ini_set('max_execution_time'1200);
  6720.             ini_set('memory_limit''4G');
  6721.             $start microtime(true);
  6722.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  6723.             $em $this->servizi->doctrine->getManager();
  6724.             $repo $this->servizi->doctrine->getRepository(OfferteRighe::class);
  6725.             $repoOfferte $this->servizi->doctrine->getRepository(Offerte::class);
  6726.             $errori "";
  6727.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  6728.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  6729.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  6730.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  6731.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /caricaOfferteRighe --- Inizio l\' importazione dei dati'null$collegamentoRnd'ImportazioneController''caricaOfferteRighe');
  6732.             $errori "";
  6733.             $root_path $pathFileBase "offerte_righe.csv";
  6734.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  6735.             $contatore 0;
  6736.             $row 0;
  6737.             $query_eseguite 0;
  6738.             $batch_size 50;
  6739.             /*
  6740.                 0    documento
  6741.                 1    numero
  6742.                 2    anno
  6743.                 3    macro_categoria_articolo
  6744.                 4    codice_articolo
  6745.                 5    marca_articolo
  6746.                 6    descrizione_articolo
  6747.                 7    descrizione_seconaria_articolo
  6748.                 8    um
  6749.                 9    stringa_sconti
  6750.                 10    qta
  6751.                 11    nota_riga
  6752.                 12    netto_cad
  6753.                 13    lordo_cad
  6754.                 14    netto_totale
  6755.                 15    lordo_totale
  6756.                 16    imposta
  6757.                 17    imponibile
  6758.                 18    operazione
  6759.                 19  numeroRiga
  6760.                 20  stato
  6761.              */
  6762.             $indici = array(
  6763.                 'documento' => 0,
  6764.                 'numero' => 1,
  6765.                 'anno' => 2,
  6766.                 'macroCategoriaArticolo' => 3,
  6767.                 'codiceArticolo' => 4,
  6768.                 'marcaArticolo' => 5,
  6769.                 'descrizioneArticolo' => 6,
  6770.                 'descrizioneSecondariaArticolo' => 7,
  6771.                 'um' => 8,
  6772.                 'stringaSconti' => 9,
  6773.                 'qta' => 10,
  6774.                 'notaRiga' => 11,
  6775.                 'nettoCad' => 12,
  6776.                 'lordoCad' => 13,
  6777.                 'nettoTotale' => 14,
  6778.                 'lordoTotale' => 15,
  6779.                 'imposta' => 16,
  6780.                 'imponibile' => 17,
  6781.                 'operazione' => 18,
  6782.                 'numeroRiga' => 19,
  6783.                 'stato' => 20
  6784.             );
  6785.             $righeDaSaltareSeBatch 0;
  6786.             if($batch != && $iterazione != 0){
  6787.                 $rrr $batch $iterazione//Esempio iterazione = 1 batch = 5000 = 5000
  6788.                 $righeDaSaltareSeBatch $rrr $batch;
  6789.             }
  6790.             try {
  6791.                 if (($handle fopen($root_path"r")) !== false) {
  6792.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  6793.                         //Se attivata la funzionalità batch salto le righe che non devo importare
  6794.                         if($righeDaSaltareSeBatch 0){
  6795.                             if (($contatore $row) < $righeDaSaltareSeBatch){
  6796.                                 $contatore++;
  6797.                                 continue;
  6798.                             }
  6799.                         }
  6800.                         if($righeDaSaltareSeBatch && ($contatore $row $righeDaSaltareSeBatch) > $batch ){
  6801.                             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true"Batch completato: Iterazione: " strval($iterazione) . " --- Batch: " strval(($batch)) . " ( Da riga:" strval($righeDaSaltareSeBatch 1) . " a riga: " strval(($contatore $row)) . " )"null$collegamentoRnd'ImportazioneController''caricaOfferteRighe');
  6802.                             break;
  6803.                         }
  6804.                         if ($row == 0) {
  6805.                             $row 1;
  6806.                             continue;
  6807.                         }
  6808.                         if ($query_eseguite >= $batch_size) {
  6809.                             $contatore $contatore $row 1;
  6810.                             $row 1;
  6811.                             $query_eseguite 0;
  6812.                             $em->flush();
  6813.                             $em->clear();
  6814.                         }
  6815.                         $now = new \DateTime('now');
  6816.                         try {
  6817.                             //Recupero l'offerta
  6818.                             $offerta $repoOfferte->findOneBy(array('documento' => $data[$indici['documento']], 'numero' => $data[$indici['numero']], 'anno' => $data[$indici['anno']]));
  6819.                             if($offerta){
  6820.                                 /** @var OfferteRighe $riga */
  6821.                                 $riga $offerta->RitornaRigaDaNumero($data[$indici['numeroRiga']]);
  6822.                                 if($riga && $data[$indici['operazione']] == 'E'){
  6823.                                     $em->remove($riga);
  6824.                                     $query_eseguite++;
  6825.                                 }
  6826.                                 if($data[$indici['operazione']] != "E"){
  6827.                                     if(!$riga) {
  6828.                                         $riga = new OfferteRighe();
  6829.                                         $riga->setDataCreazione($now);
  6830.                                         $riga->setOfferta($offerta);
  6831.                                     }
  6832.                                     $riga->setDataModifica($now);
  6833.                                     $riga->setMacroCategoria($data[$indici['macroCategoriaArticolo']]);
  6834.                                     $riga->setCodiceArticolo($data[$indici['codiceArticolo']]);
  6835.                                     $riga->setDescrizioneArticolo($data[$indici['descrizioneArticolo']]);
  6836.                                     $riga->setDescrizioneSecondariaArticolo($data[$indici['descrizioneSecondariaArticolo']]);
  6837.                                     $riga->setMarca($data[$indici['marcaArticolo']]);
  6838.                                     $riga->setNumeroRiga($data[$indici['numeroRiga']]);
  6839.                                     $riga->setUm($data[$indici['um']]);
  6840.                                     $riga->setStringaSconti($data[$indici['stringaSconti']]);
  6841.                                     $riga->setQta(ServiziController::convertiInNumero($data[$indici['qta']]));
  6842.                                     $riga->setNotaRiga($data[$indici['notaRiga']]);
  6843.                                     $riga->setNettoCad(ServiziController::convertiInNumero($data[$indici['nettoCad']]));
  6844.                                     $riga->setLordoCad(ServiziController::convertiInNumero($data[$indici['lordoCad']]));
  6845.                                     $riga->setNettoTotale(ServiziController::convertiInNumero($data[$indici['nettoTotale']]));
  6846.                                     $riga->setLordoTotale(ServiziController::convertiInNumero($data[$indici['lordoTotale']]));
  6847.                                     $riga->setImposta(ServiziController::convertiInNumero($data[$indici['imposta']]));
  6848.                                     $riga->setImponibile(ServiziController::convertiInNumero($data[$indici['imponibile']]));
  6849.                                     if (count($data) >= $indici['stato'] - 1){
  6850.                                         $riga->setStato($data[$indici['stato']]);
  6851.                                     }
  6852.                                     //Vedo se presente un collegamento con una mappa articolo dell'ecommerce
  6853.                                     $articoloTrovato $this->servizi->doctrine->getRepository(MappaCategorieArticoli::class)->createQueryBuilder('mappa_categorie_articoli')
  6854.                                         ->leftJoin('mappa_categorie_articoli.articolo''articolo')
  6855.                                         ->where('articolo.codice = :cod')->setParameter('cod'$data[$indici['codiceArticolo']])
  6856.                                         ->andWhere('articolo.macroCategoria = :macro')->setParameter('macro'$data[$indici['macroCategoriaArticolo']])
  6857.                                         ->andWhere('mappa_categorie_articoli.marca = :marca')->setParameter('marca'$data[$indici['marcaArticolo']])
  6858.                                         ->setMaxResults(1)
  6859.                                         ->getQuery()->getResult();
  6860.                                     if(count($articoloTrovato) > 0)
  6861.                                         $riga->setCollegamentoMappaCategorieArticoli($articoloTrovato[0]);
  6862.                                     $em->persist($riga);
  6863.                                     $query_eseguite++;
  6864.                                 }
  6865.                             }else {
  6866.                                 $errori .= ("Riga: " $contatore " -- Offerta non trovata con Documento: " $data[$indici['documento']] . " - Numero: " $data[$indici['numero']] . " - Anno: " $data[$indici['anno']] . "\n");
  6867.                             }
  6868.                         } catch (\PDOException $ex) {
  6869.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione (RIGA: ' $contatore ') : ' $ex->getMessage(), null$collegamentoRnd'ImportazioneController''caricaOfferteRighe');
  6870.                         } catch (\Exception|\Throwable $exception) {
  6871.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione: ' $exception->getMessage(), null$collegamentoRnd'ImportazioneController''caricaOfferteRighe');
  6872.                         }
  6873.                         $row++;
  6874.                     }
  6875.                 }else{
  6876.                     $errori .= "Impossibile aprire il file!";
  6877.                 }
  6878.                 $em->flush();
  6879.                 $row $contatore $row 1;
  6880.                 if ($errori == "") {
  6881.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull$collegamentoRnd'ImportazioneController''caricaOfferteRighe');
  6882.                     return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  6883.                 } else {
  6884.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull$collegamentoRnd'ImportazioneController''caricaOfferteRighe');
  6885.                     return new Response('Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row "</br>Lista Errori:</br>" $errori);
  6886.                 }
  6887.             } catch (\Exception|\Throwable $ex) {
  6888.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ' $ex->getMessage(), null$collegamentoRnd'ImportazioneController''caricaOfferteRighe');
  6889.                 return new Response('Errore importazione: ' $ex->getMessage());
  6890.             }
  6891.         } else {
  6892.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null$collegamentoRnd'ImportazioneController''caricaOfferteRighe');
  6893.             return new Response("ERRORE PERMESSO");
  6894.         }
  6895.     } //OK
  6896.     /**
  6897.      * @Route("/caricaOfferteRegistroEventi", name="carica_offerte_registro_eventi")
  6898.      */
  6899.     public function caricaOfferteRegistroEventi(Request $request)
  6900.     {
  6901.         $collegamentoRnd $this->servizi->randomString2();
  6902.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  6903.             ini_set('max_execution_time'1200);
  6904.             ini_set('memory_limit''4G');
  6905.             $start microtime(true);
  6906.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  6907.             $em $this->servizi->doctrine->getManager();
  6908.             $repo $this->servizi->doctrine->getRepository(OfferteRegistroEventi::class);
  6909.             $repoOfferte $this->servizi->doctrine->getRepository(Offerte::class);
  6910.             $errori "";
  6911.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  6912.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  6913.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  6914.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  6915.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /caricaOfferteRegistroEventi --- Inizio l\' importazione dei dati'null$collegamentoRnd'ImportazioneController''caricaOfferteRegistroEventi');
  6916.             $errori "";
  6917.             $root_path $pathFileBase "offerte_registro_eventi.csv";
  6918.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  6919.             $contatore 0;
  6920.             $row 0;
  6921.             $query_eseguite 0;
  6922.             $batch_size 50;
  6923.             /*
  6924.                 0    documento
  6925.                 1    numero
  6926.                 2    anno
  6927.                 3    titolo
  6928.                 4    descrizione
  6929.                 5    operazione
  6930.                 6    identificativo
  6931.                 7   data_ora
  6932.              */
  6933.             $indici = array(
  6934.                 'documento' => 0,
  6935.                 'numero' => 1,
  6936.                 'anno' => 2,
  6937.                 'titolo' => 3,
  6938.                 'descrizione' => 4,
  6939.                 'operazione' => 5,
  6940.                 'identificativo' => 6,
  6941.                 'dataOra' => 7
  6942.             );
  6943.             try {
  6944.                 if (($handle fopen($root_path"r")) !== false) {
  6945.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  6946.                         if ($row == 0) {
  6947.                             $row 1;
  6948.                             continue;
  6949.                         }
  6950.                         if ($query_eseguite >= $batch_size) {
  6951.                             $contatore $contatore $row 1;
  6952.                             $row 1;
  6953.                             $query_eseguite 0;
  6954.                             $em->flush();
  6955.                             $em->clear();
  6956.                         }
  6957.                         $now = new \DateTime('now');
  6958.                         try {
  6959.                             //Recupero l'offerta
  6960.                             $offerta $repoOfferte->findOneBy(array('documento' => $data[$indici['documento']], 'numero' => $data[$indici['numero']], 'anno' => $data[$indici['anno']]));
  6961.                             if($offerta){
  6962.                                 /** @var OffertaRegistroEventi $reg */
  6963.                                 $reg $offerta->RitornaRegistroEventoDaIdentificativo($data[$indici['identificativo']]);
  6964.                                 if($reg && $data[$indici['operazione']] == 'E'){
  6965.                                     $em->remove($reg);
  6966.                                     $query_eseguite++;
  6967.                                 }
  6968.                                 if($data[$indici['operazione']] != "E"){
  6969.                                     if(!$reg){
  6970.                                         $reg = new OfferteRegistroEventi();
  6971.                                         $reg->setDataCreazione($now);
  6972.                                         $reg->setOfferta($offerta);
  6973.                                     }
  6974.                                     if(count($data) >= 8){
  6975.                                         $reg->setDataModifica(self::OttieniDataDaStringa($data[$indici['dataOra']], true));
  6976.                                     }else {
  6977.                                         $reg->setDataModifica($now);
  6978.                                     }
  6979.                                     if($data[$indici['identificativo']] != ''){
  6980.                                         $reg->setIdentificativo($data[$indici['identificativo']]);
  6981.                                     }else {
  6982.                                         $reg->setIdentificativo($this->servizi->generaStringaCasuale(20));
  6983.                                     }
  6984.                                     $reg->setTitolo($data[$indici['titolo']]);
  6985.                                     $reg->setDescrizione($data[$indici['descrizione']]);
  6986.                                     $em->persist($reg);
  6987.                                     $query_eseguite++;
  6988.                                 }
  6989.                             }else {
  6990.                                 $errori .= ("RIGA: " $contatore " -- Offerta non trovata con Documento: " $data[$indici['documento']] . " - Numero: " $data[$indici['numero']] . " - Anno: " $data[$indici['anno']] . "\n");
  6991.                             }
  6992.                         } catch (\PDOException $ex) {
  6993.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione (RIGA: ' $contatore ') : ' $ex->getMessage(), null$collegamentoRnd'ImportazioneController''caricaOfferteRegistroEventi');
  6994.                         } catch (\Exception|\Throwable $exception) {
  6995.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione: ' $exception->getMessage(), null$collegamentoRnd'ImportazioneController''caricaOfferteRegistroEventi');
  6996.                         }
  6997.                         $row++;
  6998.                     }
  6999.                 }else{
  7000.                     $errori .= "Impossibile aprire il file!";
  7001.                 }
  7002.                 $em->flush();
  7003.                 $row $contatore $row 1;
  7004.                 if ($errori == "") {
  7005.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull$collegamentoRnd'ImportazioneController''caricaOfferteRegistroEventi');
  7006.                     return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  7007.                 } else {
  7008.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull$collegamentoRnd'ImportazioneController''caricaOfferteRegistroEventi');
  7009.                     return new Response('Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row "</br>Lista Errori:</br>" $errori);
  7010.                 }
  7011.             } catch (\Exception|\Throwable $ex) {
  7012.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ' $ex->getMessage(), null$collegamentoRnd'ImportazioneController''caricaOfferteRegistroEventi');
  7013.                 return new Response('Errore importazione: ' $ex->getMessage());
  7014.             }
  7015.         } else {
  7016.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null$collegamentoRnd'ImportazioneController''caricaOfferteRegistroEventi');
  7017.             return new Response("ERRORE PERMESSO");
  7018.         }
  7019.     } //OK
  7020.     /**
  7021.      * @Route("/caricaOfferteAllegati", name="carica_offerte_allegati")
  7022.      */
  7023.     public function caricaOfferteAllegati(Request $request)
  7024.     {
  7025.         $collegamentoRnd $this->servizi->randomString2();
  7026.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  7027.             ini_set('max_execution_time'1200);
  7028.             ini_set('memory_limit''4G');
  7029.             $start microtime(true);
  7030.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  7031.             $em $this->servizi->doctrine->getManager();
  7032.             $repo $this->servizi->doctrine->getRepository(OfferteAllegati::class);
  7033.             $repoOfferte $this->servizi->doctrine->getRepository(Offerte::class);
  7034.             $errori "";
  7035.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  7036.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  7037.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  7038.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  7039.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /caricaOfferteAllegati--- Inizio l\' importazione dei dati'null$collegamentoRnd'ImportazioneController''caricaOfferteAllegati');
  7040.             $errori "";
  7041.             $root_path $pathFileBase "offerte_allegati.csv";
  7042.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  7043.             $contatore 0;
  7044.             $row 0;
  7045.             $query_eseguite 0;
  7046.             $batch_size 50;
  7047.             /*
  7048.                 0    documento
  7049.                 1    numero
  7050.                 2    anno
  7051.                 3    nome
  7052.                 4    file finale
  7053.                 5    tipo_file
  7054.                 6    operazione
  7055.                 7    identificativo
  7056.              */
  7057.             $indici = array(
  7058.                 'documento' => 0,
  7059.                 'numero' => 1,
  7060.                 'anno' => 2,
  7061.                 'nome' => 3,
  7062.                 'tipoFile' => 4,
  7063.                 'operazione' => 5,
  7064.                 'identificativo' => 6
  7065.             );
  7066.             try {
  7067.                 if (($handle fopen($root_path"r")) !== false) {
  7068.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  7069.                         if ($row == 0) {
  7070.                             $row 1;
  7071.                             continue;
  7072.                         }
  7073.                         if ($query_eseguite >= $batch_size) {
  7074.                             $contatore $contatore $row 1;
  7075.                             $row 1;
  7076.                             $query_eseguite 0;
  7077.                             $em->flush();
  7078.                             $em->clear();
  7079.                         }
  7080.                         $now = new \DateTime('now');
  7081.                         try {
  7082.                             //Recupero l'offerta
  7083.                             $offerta $repoOfferte->findOneBy(array('documento' => $data[$indici['documento']], 'numero' => $data[$indici['numero']], 'anno' => $data[$indici['anno']]));
  7084.                             if($offerta){
  7085.                                 /** @var OfferteAllegati $all */
  7086.                                 $all $offerta->RitornaAllegatoDaIdentificativo($data[$indici['identificativo']]);
  7087.                                 if($all && $data[$indici['operazione']] == 'E'){
  7088.                                     $em->remove($all);
  7089.                                     $query_eseguite++;
  7090.                                 }
  7091.                                 if($data[$indici['operazione']] != "E"){
  7092.                                     if(!$all){
  7093.                                         $all = new OfferteAllegati();
  7094.                                         $all->setDataCaricamento($now);
  7095.                                         $all->setOfferta($offerta);
  7096.                                     }
  7097.                                     $all->setNome($data[$indici['nome']]);
  7098.                                     $all->setTipoFile($data[$indici['tipoFile']]);
  7099.                                     $all->setIdentificativo($this->servizi->generaStringaCasuale(20));
  7100.                                     $pathFile $pathFileBase $all->getNome();
  7101.                                     if(file_exists($pathFile)){
  7102.                                         $all->setFile(file_get_contents($pathFile));
  7103.                                         if(!unlink($pathFile)){
  7104.                                             $errori .= ("RIGA: " $contatore " --- il file non può essere eliminato dal disco!");
  7105.                                         }
  7106.                                     }else{
  7107.                                         $errori .= ("RIGA: " $contatore " --- Il file " $pathFile " non esiste!");
  7108.                                     }
  7109.                                     $em->persist($all);
  7110.                                     $query_eseguite++;
  7111.                                 }
  7112.                             }else {
  7113.                                 $errori .= ("RIGA: " $contatore " -- Offerta non trovata con Documento: " $data[$indici['documento']] . " - Numero: " $data[$indici['numero']] . " - Anno: " $data[$indici['anno']] . "\n");
  7114.                             }
  7115.                         } catch (\PDOException $ex) {
  7116.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione (RIGA: ' $contatore ') : ' $ex->getMessage(), null$collegamentoRnd'ImportazioneController''caricaOfferteAllegati');
  7117.                         } catch (\Exception|\Throwable $exception) {
  7118.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione: ' $exception->getMessage(), null$collegamentoRnd'ImportazioneController''caricaOfferteAllegati');
  7119.                         }
  7120.                         $row++;
  7121.                     }
  7122.                 }else{
  7123.                     $errori .= "Impossibile aprire il file!";
  7124.                 }
  7125.                 $em->flush();
  7126.                 $row $contatore $row 1;
  7127.                 if ($errori == "") {
  7128.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull$collegamentoRnd'ImportazioneController''caricaOfferteAllegati');
  7129.                     return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  7130.                 } else {
  7131.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull$collegamentoRnd'ImportazioneController''caricaOfferteAllegati');
  7132.                     return new Response('Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row "</br>Lista Errori:</br>" $errori);
  7133.                 }
  7134.             } catch (\Exception|\Throwable $ex) {
  7135.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ' $ex->getMessage(), null$collegamentoRnd'ImportazioneController''caricaOfferteAllegati');
  7136.                 return new Response('Errore importazione: ' $ex->getMessage());
  7137.             }
  7138.         } else {
  7139.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null$collegamentoRnd'ImportazioneController''caricaOfferteAllegati');
  7140.             return new Response("ERRORE PERMESSO");
  7141.         }
  7142.     } //OK
  7143.     /**
  7144.      * @Route("/importaImmaginiPicard", name="carica_immagini_picard")
  7145.      */
  7146.     public function importaImmaginiPicard(Request $request)
  7147.     {
  7148.         $collegamentoRnd $this->servizi->randomString2();
  7149.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  7150.             ini_set('max_execution_time'21600); // 4 ore
  7151.             ini_set('memory_limit''4G');
  7152.             $start microtime(true);
  7153.             $this->imp->caricaCacheImpostazioniDaFamiglie(['Importazioni']);
  7154.             //IMPORTO LE IMMAGINI
  7155.                 try {
  7156.                     $usr $this->imp->ritornaImpostazioneDaNome('ImportazioniPicardUsername');
  7157.                     $psw $this->imp->ritornaImpostazioneDaNome('ImportazioniPicardPassword');
  7158.                     $file_contents file_get_contents("http://" $usr ":" $psw "@stock.picard.de/bmecat/bilder.zip");
  7159.                     $pathTemp tempnam(sys_get_temp_dir(), 'imgPicard');
  7160.                     $zp = new \ZipArchive;
  7161.                     if($file_contents){
  7162.                         $res $zp->open($pathTemp);
  7163.                             if($res === true){
  7164.                                 $zp->extractTo("uploads/PK/");
  7165.                                 $zp->close();
  7166.                             }
  7167.                     }
  7168.                 }catch (\Exception|\Throwable $ex){
  7169.                     $this->servizi->DebuggaException($ex''falsenull$collegamentoRnd'ImportazioneController''importaImmaginiPicard');
  7170.                     return new Response('Errore importazione: ' $ex->getMessage());
  7171.                 }
  7172.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>'null$collegamentoRnd'ImportazioneController''importaImmaginiPicard');
  7173.             return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' );
  7174.         } else {
  7175.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null$collegamentoRnd'ImportazioneController''importaImmaginiPicard');
  7176.             return new Response("ERRORE PERMESSO");
  7177.         }
  7178.     }
  7179.     /**
  7180.      * @Route("/importaGiacenzeArticoliPicardXML", name="carica_giacenze_lista_articoli_picard")
  7181.      */
  7182.     public function importaGiacenzePicardXML(Request $request)
  7183.     {
  7184.         $collegamentoRnd $this->servizi->randomString2();
  7185.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  7186.             ini_set('max_execution_time'21600); // 4 ore
  7187.             ini_set('memory_limit''4G');
  7188.             $start microtime(true);
  7189.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  7190.             $em $this->servizi->doctrine->getManager();
  7191.             $repo $this->servizi->doctrine->getRepository(MagazzinoSecondarioDisponibilita::class);
  7192.             $repoMappa $this->servizi->doctrine->getRepository(MappaCategorieArticoli::class);
  7193.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  7194.             $this->imp->caricaCacheImpostazioniDaFamiglie(['Importazioni']);
  7195.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  7196.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  7197.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  7198.             $categorieEscluseDaImportazione explode(','$this->imp->ritornaImpostazioneDaNome('ImportazioniPicardCategorieEscluseImportazione'));
  7199.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /importaGiacenzaArticoliPicardXML --- Inizio l\' importazione dei dati'null$collegamentoRnd'ImportazioneController''importaGiacenzaArticoliPicardXML');
  7200.             try {
  7201.                 $filesystem = new Filesystem();
  7202.                 //Verifico che esista la cartella pk
  7203.                 if (!$filesystem->exists($pathFileBase 'pk/')) {
  7204.                     $filesystem->mkdir($pathFileBase 'pk/'0777);
  7205.                 }
  7206.                 // set up basic connection
  7207.                 $conn_id ftp_connect($this->imp->ritornaImpostazioneDaNome('ImportazioniPicardIndirizzoServerFtp'));
  7208.                 // login with username and password
  7209.                 $login_result ftp_login($conn_id$this->imp->ritornaImpostazioneDaNome('ImportazioniPicardUsername'), $this->imp->ritornaImpostazioneDaNome('ImportazioniPicardPassword'));
  7210.                 //Set passive mode
  7211.                 ftp_pasv($conn_idtrue);
  7212.                 // try to download $server_file and save to $local_file
  7213.                 ftp_get($conn_id$pathFileBase 'pk/bestand.csv''/OUT/bestand.csv'FTP_BINARY);
  7214.                 // close the connection
  7215.                 ftp_close($conn_id);
  7216.             } catch (\Exception|\Throwable $ex) {
  7217.                 $this->servizi->DebuggaException($ex''falsenull$collegamentoRnd'ImportazioneController''importaGiacenzaArticoliPicardXML');
  7218.                 die('Errore ' $ex->getMessage());
  7219.             }
  7220.             $root_path $pathFileBase 'pk/bestand.csv';
  7221.             $separator ";";
  7222.             $contatore 0;
  7223.             $row 0;
  7224.             $query_eseguite 0;
  7225.             $batch_size 50;
  7226.             $magazzinoSecondario $this->servizi->doctrine->getRepository(MagazziniSecondari::class)->findOneBy(array('nome' => 'PICARD'));
  7227.             if (!$magazzinoSecondario) {
  7228.                 $magazzinoSecondario = new MagazziniSecondari();
  7229.                 $magazzinoSecondario->setNome('PICARD');
  7230.                 $magazzinoSecondario->setApprovvigionamentoStimato('4/5 gg lavorativi');
  7231.                 $magazzinoSecondario->setAttivo(true);
  7232.                 $magazzinoSecondario->setDataCreazione(new \DateTime());
  7233.                 $magazzinoSecondario->setDataModifica(new \DateTime());
  7234.                 $magazzinoSecondario->setPercentualeDecremento(0);
  7235.                 $magazzinoSecondario->setPercentualeIncremento(0);
  7236.                 $magazzinoSecondario->setMetodoAcquisizioneDati('');
  7237.                 $magazzinoSecondario->setFondiCategorie(false);
  7238.                 $magazzinoSecondario->setImportazioneInCorso(false);
  7239.                 $em->persist($magazzinoSecondario);
  7240.                 $em->flush();
  7241.                 $magazzinoSecondario $this->servizi->doctrine->getRepository(MagazziniSecondari::class)->findOneBy(array('nome' => 'PICARD'));
  7242.             }
  7243.             try {
  7244.                 if (($handle fopen($root_path"r")) !== false) {
  7245.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  7246.                         if ($query_eseguite >= $batch_size) {
  7247.                             $contatore $contatore $row 1;
  7248.                             $row 1;
  7249.                             $query_eseguite 0;
  7250.                             $em->flush();
  7251.                         }
  7252.                         $mappa $repoMappa->createQueryBuilder('mappa')
  7253.                             ->leftJoin('mappa.articolo''articolo')
  7254.                             ->where('articolo.codiceImportazione = :cod')->setParameter('cod'$data[0])
  7255.                             ->setMaxResults(1)
  7256.                             ->getQuery()->getResult();
  7257.                         if ($mappa) {
  7258.                             $mappa $mappa[0];
  7259.                             $disp $repo->findOneBy(array('mappaCategorieArticoli' => $mappa'magazzinoSecondario' => $magazzinoSecondario));
  7260.                             if (!$disp) {
  7261.                                 $disp = new MagazzinoSecondarioDisponibilita();
  7262.                                 $disp->setDataCreazione(new \DateTime());
  7263.                                 $disp->setMagazzinoSecondario($magazzinoSecondario);
  7264.                                 $disp->setMappaCategorieArticoli($mappa);
  7265.                             }
  7266.                             $disp->setDisponibilita($data[1]);
  7267.                             $disp->setDataModifica(new \DateTime());
  7268.                             $em->merge($disp);
  7269.                             $query_eseguite++;
  7270.                         } else {
  7271.                             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Articolo con codice importazione: ' $data[0] . ' non trovato!'null$collegamentoRnd'ImportazioneController''importaGiacenzaArticoliPicardXML');
  7272.                         }
  7273.                     }
  7274.                 }else{
  7275.                     $errori .= "Impossibile aprire il file!";
  7276.                 }
  7277.                 $em->flush();
  7278.                 $em->clear();
  7279.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull$collegamentoRnd'ImportazioneController''importaGiacenzaArticoliPicardXML');
  7280.                 return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  7281.             } catch (\Exception|\Throwable $ex) {
  7282.                 $this->servizi->DebuggaException($ex''falsenull$collegamentoRnd'ImportazioneController''importaGiacenzaArticoliPicardXML');
  7283.                 return new Response('Errore importazione: ' $ex->getMessage());
  7284.             }
  7285.         } else {
  7286.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null$collegamentoRnd'ImportazioneController''importaGiacenzaArticoliPicardXML');
  7287.             return new Response("ERRORE PERMESSO");
  7288.         }
  7289.     }
  7290.     /**
  7291.      * @Route("/importaArticoliPicardXML", name="carica_lista_articoli_picard")
  7292.      */
  7293.     public function importaPicardXML(Request $request)
  7294.     {
  7295.         $collegamentoRnd $this->servizi->randomString2();
  7296.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  7297.             ini_set('max_execution_time'21600); // 4 ore
  7298.             ini_set('memory_limit''4G');
  7299.             $start microtime(true);
  7300.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  7301.             $em $this->servizi->doctrine->getManager();
  7302.             $conn $this->servizi->doctrine->getConnection();
  7303.             $repoListini $this->servizi->doctrine->getRepository(ListiniVendita::class);
  7304.             $repoCategorie $this->servizi->doctrine->getRepository(Categorie::class);
  7305.             $repoAttributi $this->servizi->doctrine->getRepository(Attributi::class);
  7306.             $repoAssociazioneAttributi $this->servizi->doctrine->getRepository(AssociazioneAttributi::class);
  7307.             $repoArticoli $this->servizi->doctrine->getRepository(Articoli::class);
  7308.             $codiceListinoBase $this->imp->ritornaImpostazioneDaNome('CodiceListinoShopComune');
  7309.             $this->imp->caricaCacheImpostazioniDaFamiglie(['Importazioni']);
  7310.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  7311.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  7312.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  7313.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  7314.             $cacheUmEsistenti = array();
  7315.             $stmt $conn->prepare('SELECT DISTINCT codice FROM unita_misura');
  7316.             $rst $stmt->executeQuery();
  7317.             $umEsis $rst->fetchAllAssociative();
  7318.             foreach ($umEsis as $it) {
  7319.                 array_push($cacheUmEsistenti$it['codice']);
  7320.             }
  7321.             $categorieEscluseDaImportazione explode(','$this->imp->ritornaImpostazioneDaNome('ImportazioniPicardCategorieEscluseImportazione'));
  7322.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /importaArticoliPicardXML --- Inizio l\' importazione dei dati'null$collegamentoRnd'ImportazioneController''importaArticoliPicardXML');
  7323.             try {
  7324.                 $filesystem = new Filesystem();
  7325.                 //Verifico che esista la cartella pk
  7326.                 if (!$filesystem->exists($pathFileBase 'pk/')) {
  7327.                     $filesystem->mkdir($pathFileBase 'pk/'0777);
  7328.                 }
  7329.                 // set up basic connection
  7330.                 $conn_id ftp_connect($this->imp->ritornaImpostazioneDaNome('ImportazioniPicardIndirizzoServerFtp'));
  7331.                 // login with username and password
  7332.                 $login_result ftp_login($conn_id$this->imp->ritornaImpostazioneDaNome('ImportazioniPicardUsername'), $this->imp->ritornaImpostazioneDaNome('ImportazioniPicardPassword'));
  7333.                 //Set passive mode
  7334.                 ftp_pasv($conn_idtrue);
  7335.                 // try to download $server_file and save to $local_file
  7336.                 ftp_get($conn_id$pathFileBase 'pk/picard_bmecat_it.zip''/OUT/picard_bmecat_it.zip'FTP_BINARY);
  7337.                 // close the connection
  7338.                 ftp_close($conn_id);
  7339.                 $zp = new \ZipArchive;
  7340.                 $res $zp->open($pathFileBase 'pk/picard_bmecat_it.zip');
  7341.                 if ($res === true) {
  7342.                     $zp->extractTo($pathFileBase 'pk/');
  7343.                     $zp->close();
  7344.                     chmod($pathFileBase 'pk/picard_bmecat_it.xml'0755);
  7345.                 }
  7346.             } catch (\Exception|\Throwable $ex) {
  7347.                 $this->servizi->DebuggaException($ex''falsenull$collegamentoRnd'ImportazioneController''importaArticoliPicardXML');
  7348.                 die('Errore ' $ex->getMessage());
  7349.             }
  7350.             $root_path $pathFileBase 'pk/picard_bmecat_it.xml';
  7351.             $contatore 0;
  7352.             $row 0;
  7353.             $query_eseguite 0;
  7354.             $batch_size 50;
  7355.             $cacheAttributi = array(); // Chiave codice identificativo
  7356.             if (!in_array('NR'$cacheUmEsistenti)) {
  7357.                 $sql "INSERT INTO unita_misura(codice, descrizione, fattore_conversione, numero_decimali, data_creazione, data_modifica, attivo) VALUES (?,?,?,?,NOW(), NOW(), 1)";
  7358.                 $stmt $conn->prepare($sql);
  7359.                 $stmt->bindValue(1'NR');
  7360.                 $stmt->bindValue(2'Numero');
  7361.                 $stmt->bindValue(31);
  7362.                 $stmt->bindValue(40);
  7363.                 $stmt->execute();
  7364.                 array_push($cacheUmEsistenti'NR');
  7365.             }
  7366.             $umNR $this->servizi->doctrine->getRepository(UnitaMisura::class)->findOneBy(array('codice' => 'NR'));
  7367.             if (!in_array('KG'$cacheUmEsistenti)) {
  7368.                 $sql "INSERT INTO unita_misura(codice, descrizione, fattore_conversione, numero_decimali, data_creazione, data_modifica, attivo) VALUES (?,?,?,?,NOW(), NOW(), 1)";
  7369.                 $stmt $conn->prepare($sql);
  7370.                 $stmt->bindValue(1'KG');
  7371.                 $stmt->bindValue(2'Chilogrammi');
  7372.                 $stmt->bindValue(31);
  7373.                 $stmt->bindValue(43);
  7374.                 $stmt->execute();
  7375.                 array_push($cacheUmEsistenti'KG');
  7376.             }
  7377.             $strutturaCategorie = array(); //array di array con dentro le varie categorie come chiave ho il group id
  7378.             $listaArticoli = array(); //array di array con chiave il supplier_pid
  7379.             try {
  7380.                 $xmlReader = new \XMLReader();
  7381.                 if (!$xmlReader->open($root_pathnull<< 19)) {
  7382.                     $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Impossibile aprire il file: ' $root_pathnull);
  7383.                     die('Failed to open file');
  7384.                 }
  7385.                 while ($xmlReader->read()) {
  7386.                     if ($xmlReader->nodeType == \XMLReader::ELEMENT && $xmlReader->name == 'CATALOG_STRUCTURE') {
  7387.                         $nodo = new \SimpleXMLElement($xmlReader->readOuterXml());
  7388.                         $img '';
  7389.                         if (isset($nodo->MIME_INFO) && isset($nodo->MIME_INFO->MIME) && isset($nodo->MIME_INFO->MIME->MIME_SOURCE)) {
  7390.                             $img '/uploads/PK/' strval($nodo->MIME_INFO->MIME->MIME_SOURCE);
  7391.                         }
  7392.                         $strutturaCategorie[strval($nodo->GROUP_ID)] = array(strval($nodo->GROUP_ID), strval($nodo->GROUP_NAME), strval($nodo->PARENT_ID));
  7393.                         if (!in_array(strval($nodo->GROUP_ID), $categorieEscluseDaImportazione)) {
  7394.                             //Salvo categoria db se inesistente altrimenti la aggiorno
  7395.                             $cat $repoCategorie->findOneBy(array('codiceOriginale' => strval($nodo->GROUP_ID), 'codice' => ('PKR_' strval($nodo->GROUP_ID))));
  7396.                             if ($cat) {
  7397.                                 //Categoria esistente aggiorno nome
  7398.                                 $cat->setNome(strval($nodo->GROUP_NAME));
  7399.                                 $cat->setDataModifica(new \DateTime());
  7400.                                 $em->persist($cat);
  7401.                                 $query_eseguite++;
  7402.                             } else {
  7403.                                 //Nuova categoria la creo
  7404.                                 $cat = new Categorie();
  7405.                                 $cat->setNome(strval($nodo->GROUP_NAME));
  7406.                                 $cat->setCodiceOriginale(strval($nodo->GROUP_ID));
  7407.                                 $cat->setImmagine($img);
  7408.                                 $cat->setCodice('PKR_' strval($nodo->GROUP_ID));
  7409.                                 $cat->setNomeUnivoco($cat->getCodiceOriginale());
  7410.                                 $cat->setDataCreazione(new \DateTime());
  7411.                                 $cat->setDataModifica(new \DateTime());
  7412.                                 $cat->setAttivo(true);
  7413.                                 $em->persist($cat);
  7414.                                 $query_eseguite++;
  7415.                             }
  7416.                             $query_eseguite 0;
  7417.                             $em->flush();
  7418.                         }
  7419.                         unset($nodo);
  7420.                     } else if ($xmlReader->nodeType == \XMLReader::ELEMENT && $xmlReader->name == 'PRODUCT') {
  7421.                         //Dettaglio prodotti
  7422.                         $nodo = new \SimpleXMLElement($xmlReader->readOuterXml());
  7423.                         $articolo null;
  7424.                         $articolo $repoArticoli->findOneBy(array('codiceImportazione' => strval($nodo->SUPPLIER_PID)));
  7425.                         if ($articolo) {
  7426.                             $articolo->setDataModifica(new \DateTime());
  7427.                             $articolo->setNome(strval($nodo->MIME_INFO->MIME->MIME_ALT));
  7428.                             $articolo->setDescrizioneBreve(strval($nodo->PRODUCT_DETAILS->DESCRIPTION_SHORT));
  7429.                         } else {
  7430.                             $articolo = new Articoli();
  7431.                             $articolo->setUm($umNR);
  7432.                             $articolo->setUsaTipologiePreimpostate(false);
  7433.                             $articolo->setMacroCategoria('PK');
  7434.                             $articolo->setNome(strval($nodo->MIME_INFO->MIME->MIME_ALT));
  7435.                             $articolo->setDescrizioneBreve(strval($nodo->PRODUCT_DETAILS->DESCRIPTION_SHORT));
  7436.                             $articolo->setCodice(strval($nodo->PRODUCT_DETAILS->MANUFACTURER_PID));
  7437.                             $articolo->setCodiceImportazione(strval($nodo->SUPPLIER_PID));
  7438.                             $articolo->setDataCreazione(new \DateTime());
  7439.                             $articolo->setDataModifica(new \DateTime());
  7440.                         }
  7441.                         $listaAttributi = array(); //Ricordarsi di iterare alla fine ed associare i vari attributi agli articoli
  7442.                         if (isset($nodo->PRODUCT_FEATURES)) {
  7443.                             foreach ($nodo->PRODUCT_FEATURES->FEATURE as $feature) {
  7444.                                 if (strval($feature->FNAME) == 'Peso') {
  7445.                                     if (strval($feature->FUNIT) == 'kg') {
  7446.                                         $articolo->setPesoLordo(floatval($feature->FVALUE));
  7447.                                         if (!$articolo->getUmPeso())
  7448.                                             $articolo->setUmPeso($this->servizi->doctrine->getRepository(UnitaMisura::class)->findOneBy(array('codice' => 'KG')));
  7449.                                     }
  7450.                                 } else {
  7451.                                     $listaAttributi[strval($feature->FNAME)] = strval($feature->FVALUE);
  7452.                                 }
  7453.                             }
  7454.                         }
  7455.                         $em->merge($articolo);
  7456.                         $query_eseguite++;
  7457.                         $prezzo 0;
  7458.                         $costo 0;
  7459.                         if (isset($nodo->PRODUCT_PRICE_DETAILS->PRODUCT_PRICE->PRICE_AMOUNT)) {
  7460.                             foreach ($nodo->PRODUCT_PRICE_DETAILS->PRODUCT_PRICE as $price) {
  7461.                                 $att $price->attributes();
  7462.                                 if ($att['price_type'] && $att['price_type'] == 'nrp') {
  7463.                                     $prezzo strval($price->PRICE_AMOUNT);
  7464.                                 } else if ($att['price_type'] && $att['price_type'] == 'net_list') {
  7465.                                     $costo strval($price->PRICE_AMOUNT);
  7466.                                 }
  7467.                             }
  7468.                         }
  7469.                         $listaArticoli[strval($nodo->SUPPLIER_PID)] = array(strval($nodo->SUPPLIER_PID), strval($nodo->PRODUCT_DETAILS->MANUFACTURER_PID), strval($nodo->PRODUCT_DETAILS->MANUFACTURER_NAME), $listaAttributi$prezzo$costo);
  7470.                         if ($query_eseguite >= $batch_size) {
  7471.                             $query_eseguite 0;
  7472.                             $em->flush();
  7473.                         }
  7474.                         unset($nodo);
  7475.                     } else if ($xmlReader->nodeType == \XMLReader::ELEMENT && $xmlReader->name == 'PRODUCT_TO_CATALOGGROUP_MAP') {
  7476.                         $nodo = new \SimpleXMLElement($xmlReader->readOuterXml());
  7477.                         $prodId strval($nodo->PROD_ID);
  7478.                         $catGrId strval($nodo->CATALOG_GROUP_ID); //riferimento alla categoria
  7479.                         //qui creo le varie categorie, mappe e associo il valore attributi
  7480.                         if (!in_array($catGrId$categorieEscluseDaImportazione)) {
  7481.                             //Ottengo le categorie
  7482.                             $arraySequenzaCategorie $this->ritornaCategoria($catGrId$strutturaCategorie, array());
  7483.                             if (count($arraySequenzaCategorie) >= 5) {
  7484.                                 $cat1 = isset($arraySequenzaCategorie[4]) ? $arraySequenzaCategorie[4] : null;
  7485.                                 $cat2 = isset($arraySequenzaCategorie[3]) ? $arraySequenzaCategorie[3] : null;
  7486.                                 $cat3 = isset($arraySequenzaCategorie[2]) ? $arraySequenzaCategorie[2] : null;
  7487.                                 $cat4 = isset($arraySequenzaCategorie[1]) ? $arraySequenzaCategorie[1] : null;
  7488.                                 $cat5 = isset($arraySequenzaCategorie[0]) ? $arraySequenzaCategorie[0] : null;
  7489.                             } else if (count($arraySequenzaCategorie) == 4) {
  7490.                                 $cat1 = isset($arraySequenzaCategorie[3]) ? $arraySequenzaCategorie[3] : null;
  7491.                                 $cat2 = isset($arraySequenzaCategorie[2]) ? $arraySequenzaCategorie[2] : null;
  7492.                                 $cat3 = isset($arraySequenzaCategorie[1]) ? $arraySequenzaCategorie[1] : null;
  7493.                                 $cat4 = isset($arraySequenzaCategorie[0]) ? $arraySequenzaCategorie[0] : null;
  7494.                                 $cat5 null;
  7495.                             } else if (count($arraySequenzaCategorie) == 3) {
  7496.                                 $cat1 = isset($arraySequenzaCategorie[2]) ? $arraySequenzaCategorie[2] : null;
  7497.                                 $cat2 = isset($arraySequenzaCategorie[1]) ? $arraySequenzaCategorie[1] : null;
  7498.                                 $cat3 = isset($arraySequenzaCategorie[0]) ? $arraySequenzaCategorie[0] : null;
  7499.                                 $cat4 null;
  7500.                                 $cat5 null;
  7501.                             } else if (count($arraySequenzaCategorie) == 2) {
  7502.                                 $cat1 = isset($arraySequenzaCategorie[1]) ? $arraySequenzaCategorie[1] : null;
  7503.                                 $cat2 = isset($arraySequenzaCategorie[0]) ? $arraySequenzaCategorie[0] : null;
  7504.                                 $cat3 null;
  7505.                                 $cat4 null;
  7506.                                 $cat5 null;
  7507.                             } else if (count($arraySequenzaCategorie) == 1) {
  7508.                                 $cat1 = isset($arraySequenzaCategorie[0]) ? $arraySequenzaCategorie[0] : null;
  7509.                                 $cat2 null;
  7510.                                 $cat3 null;
  7511.                                 $cat4 null;
  7512.                                 $cat5 null;
  7513.                             } else {
  7514.                                 $cat1 null;
  7515.                                 $cat2 null;
  7516.                                 $cat3 null;
  7517.                                 $cat4 null;
  7518.                                 $cat5 null;
  7519.                             }
  7520.                             //Ottengo l'articolo
  7521.                             $articolo $repoArticoli->findOneBy(array('codiceImportazione' => $prodId'macroCategoria' => 'PK'));
  7522.                             $art $listaArticoli[$prodId];
  7523.                             $marca '';
  7524.                             if ($art && count($art) > 3) {
  7525.                                 $marca $art[2];
  7526.                             }
  7527.                             $mappa $this->servizi->doctrine->getRepository(MappaCategorieArticoli::class)
  7528.                                 ->findOneBy(array(
  7529.                                     'articolo' => $articolo,
  7530.                                     'marca' => $marca,
  7531.                                     'categoria1' => $cat1,
  7532.                                     'categoria2' => $cat2,
  7533.                                     'categoria3' => $cat3,
  7534.                                     'categoria4' => $cat4,
  7535.                                     'categoria5' => $cat5));
  7536.                             if ($articolo && $art) {
  7537.                                 if (!$mappa) {
  7538.                                     $mappa = new MappaCategorieArticoli();
  7539.                                     $mappa->setArticolo($articolo);
  7540.                                     $mappa->setCategoria1($cat1);
  7541.                                     $mappa->setCategoria2($cat2);
  7542.                                     $mappa->setCategoria3($cat3);
  7543.                                     $mappa->setCategoria4($cat4);
  7544.                                     $mappa->setCategoria5($cat5);
  7545.                                     $mappa->setMarca($marca);
  7546.                                     $mappa->setDisponibile(0);
  7547.                                     $mappa->setVariantiPresenti(false);
  7548.                                     $mappa->setDataCreazione(new \DateTime());
  7549.                                     $mappa->setDataModifica(new \DateTime());
  7550.                                     $em->merge($mappa);
  7551.                                     $em->flush();
  7552.                                     $mappa $this->servizi->doctrine->getRepository(MappaCategorieArticoli::class)
  7553.                                         ->findOneBy(array(
  7554.                                             'articolo' => $articolo,
  7555.                                             'marca' => $marca,
  7556.                                             'categoria1' => $cat1,
  7557.                                             'categoria2' => $cat2,
  7558.                                             'categoria3' => $cat3,
  7559.                                             'categoria4' => $cat4,
  7560.                                             'categoria5' => $cat5));
  7561.                                 }
  7562.                                 if ($art[4] && $art[4] != '0' && floatval($art[4]) > 0) {
  7563.                                     $listino $repoListini->findOneBy(array('mappaCategorieArticoli' => $mappa'codiceListino' => $codiceListinoBase'codiceAnagrafica' => null));
  7564.                                     if (!$listino) {
  7565.                                         $listino = new ListiniVendita();
  7566.                                         $listino->setDataCreazione(new \DateTime());
  7567.                                         $listino->setMappaCategorieArticoli($mappa);
  7568.                                         $listino->setCodiceListino($codiceListinoBase);
  7569.                                     }
  7570.                                     $listino->setDataModifica(new \DateTime());
  7571.                                     $listino->setFlagPrezzoNetto(false);
  7572.                                     $listino->setPrezzo($art[4]);
  7573.                                     $listino->setCosto($art[5]);
  7574.                                     $em->persist($listino);
  7575.                                     $query_eseguite++;
  7576.                                 }
  7577.                                 //Gestisco gli attributi
  7578.                                 foreach ($art[3] as $key => $val) {
  7579.                                     $value $art[3][$key];
  7580.                                     /** @var Attributi $attributo */
  7581.                                     $attributo null;
  7582.                                     if ($value != '' && $value !== false) {
  7583.                                         if (!array_key_exists($key$cacheAttributi)) {
  7584.                                             $attributo $repoAttributi->findOneBy(array('codiceIdentificativo' => $key));
  7585.                                             if (!$attributo) {
  7586.                                                 $attributo = new Attributi();
  7587.                                                 $attributo->setNome($key);
  7588.                                                 $attributo->setTestoVisualizzato($key);
  7589.                                                 $attributo->setDataCreazione(new \DateTime());
  7590.                                                 $attributo->setDataModifica(new \DateTime());
  7591.                                                 $attributo->setCodiceIdentificativo($key);
  7592.                                                 $em->persist($attributo);
  7593.                                                 $em->flush();
  7594.                                                 $attributo $repoAttributi->findOneBy(array('codiceIdentificativo' => $key));
  7595.                                                 $cacheAttributi[$key] = $attributo;
  7596.                                             }
  7597.                                         } else {
  7598.                                             $attributo $cacheAttributi[$key];
  7599.                                         }
  7600.                                         if ($attributo) {
  7601.                                             $associazione $repoAssociazioneAttributi->findOneBy(array('articolo' => $articolo'mappaCategoriaArticolo' => $mappa'attributo' => $attributo));
  7602.                                             if (!$associazione) {
  7603.                                                 $associazione = new AssociazioneAttributi();
  7604.                                                 $associazione->setArticolo($articolo);
  7605.                                                 $associazione->setMappaCategoriaArticolo($mappa);
  7606.                                                 $associazione->setAttributo($attributo);
  7607.                                                 $associazione->setDataCreazione(new \DateTime());
  7608.                                             }
  7609.                                             $associazione->setDataModifica(new \DateTime());
  7610.                                             $associazione->setValore($value);
  7611.                                             $em->persist($associazione);
  7612.                                             $query_eseguite++;
  7613.                                         }
  7614.                                     }
  7615.                                 }
  7616.                             } else {
  7617.                                 $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Errore articolo: ' $prodId ' - GroupId: ' $catGrId ' non trvoato!'null$collegamentoRnd'ImportazioneController''importaArticoliPicardXML');
  7618.                             }
  7619.                         }
  7620.                         if ($query_eseguite >= $batch_size) {
  7621.                             $query_eseguite 0;
  7622.                             $em->flush();
  7623.                         }
  7624.                         unset($nodo);
  7625.                     }
  7626.                 }
  7627.                 $em->flush();
  7628.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull$collegamentoRnd'ImportazioneController''importaArticoliPicardXML');
  7629.                 return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  7630.             } catch (\Exception|\Throwable $ex) {
  7631.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ' $ex->getMessage(), null$collegamentoRnd'ImportazioneController''importaArticoliPicardXML');
  7632.                 //unlink($root_path); //Elimino il file temporaneo
  7633.                 return new Response('Errore importazione: ' $ex->getMessage() . '<br/>' $this->servizi->DebuggaException($ex''true$collegamentoRnd'ImportazioneController''importaArticoliPicardXML'));
  7634.             }
  7635.         } else {
  7636.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null$collegamentoRnd'ImportazioneController''importaArticoliPicardXML');
  7637.             return new Response("ERRORE PERMESSO");
  7638.         }
  7639.     }
  7640.     function ritornaCategoria($catalogGroupId$strutturaCategorie$arrayCategorie = array())
  7641.     {
  7642.         if(isset($strutturaCategorie[$catalogGroupId])) {
  7643.             $elemento $strutturaCategorie[$catalogGroupId];
  7644.             if ($elemento) {
  7645.                 $categoria $this->servizi->doctrine->getRepository(Categorie::class)->findOneBy(array('codice' => ('PKR_' $catalogGroupId)));
  7646.                 if ($categoria) {
  7647.                     array_push($arrayCategorie$categoria);
  7648.                     if ($elemento[2] != '0') {
  7649.                         $arrayCategorie self::ritornaCategoria($elemento[2], $strutturaCategorie$arrayCategorie);
  7650.                     }
  7651.                 }
  7652.             }
  7653.         }
  7654.         return $arrayCategorie;
  7655.     }
  7656. }