src/Controller/ImportazioneController.php line 1433

  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\AssociazioneCodiciAgentiUtente;
  13. use App\Entity\AssociazioneSpedizioniClienti;
  14. use App\Entity\Attributi;
  15. use App\Entity\BarcodeArticoli;
  16. use App\Entity\Categorie;
  17. use App\Entity\Consegna;
  18. use App\Entity\Destinazioni;
  19. use App\Entity\DisponibilitaAFasce;
  20. use App\Entity\Documenti;
  21. use App\Entity\DocumentiRighe;
  22. use App\Entity\FiltroVisualizzazioneArticoliClienti;
  23. use App\Entity\LimitazioniOrdinazioniArticoli;
  24. use App\Entity\ListiniVendita;
  25. use App\Entity\MagazziniSecondari;
  26. use App\Entity\MagazzinoSecondarioDisponibilita;
  27. use App\Entity\MailSecondarieUtenti;
  28. use App\Entity\MappaCategorieArticoli;
  29. use App\Entity\Nazioni;
  30. use App\Entity\OfferteAllegati;
  31. use App\Entity\OfferteRegistroEventi;
  32. use App\Entity\OfferteRighe;
  33. use App\Entity\Ordini;
  34. use App\Entity\Pagamenti;
  35. use App\Entity\RisorseAnagrafiche;
  36. use App\Entity\RisorseAnagraficheColonne;
  37. use App\Entity\RisorseAnagraficheColonneValori;
  38. use App\Entity\ScontiAnagrafiche;
  39. use App\Entity\Spedizione;
  40. use App\Entity\TipoOrdine;
  41. use App\Entity\UnitaMisura;
  42. use App\Entity\User;
  43. use App\Entity\Varianti;
  44. use App\Entity\Offerte;
  45. use App\Model\Caching\Caching_Categorie;
  46. use App\Model\Entita\OffertaRegistroEventi;
  47. use App\Model\Google\GoogleMapsAPI;
  48. use App\Model\Mailer;
  49. use App\Model\Translating\Translating;
  50. use Doctrine\DBAL\Exception;
  51. use Psr\Log\LoggerInterface;
  52. use Symfony\Component\Filesystem\Filesystem;
  53. use Symfony\Component\HttpFoundation\Request;
  54. use Symfony\Component\HttpFoundation\Response;
  55. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  56. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  57. use Symfony\Component\Routing\Annotation\Route;
  58. /**
  59.  *
  60.  */
  61. class ImportazioneController extends AbstractController
  62. {
  63.     /** @var ServiziController */
  64.     private $servizi;
  65.     /** @var ReturnImpostazioniServiceController */
  66.     private $imp;
  67.     /** @var Translating */
  68.     private $translating;
  69.     /** @var Mailer */
  70.     private $mailer;
  71.     /** @var LoggerInterface */
  72.     private $logger;
  73.     /** @var UserPasswordHasherInterface */
  74.     private $passwordHasher;
  75.     /**
  76.      * ImportazioneController constructor.
  77.      * @param ServiziController $servizi
  78.      * @param ReturnImpostazioniServiceController $imp
  79.      * @param Translating $translating
  80.      * @param Mailer $mailer
  81.      * @param LoggerInterface $logger
  82.      * @param UserPasswordHasherInterface $passwordHasher
  83.      */
  84.     public function __construct(ServiziController $serviziReturnImpostazioniServiceController $impTranslating $translatingMailer $mailerLoggerInterface $loggerUserPasswordHasherInterface $passwordHasher)
  85.     {
  86.         $this->servizi $servizi;
  87.         $this->imp $imp;
  88.         $this->translating $translating;
  89.         $this->mailer $mailer;
  90.         $this->logger $logger;
  91.         $this->passwordHasher $passwordHasher;
  92.         $this->imp->caricaCacheImpostazioniDaFamiglie(['Importazioni']);
  93.     }
  94.     /**
  95.      * @param $ip string
  96.      * @param $debug string
  97.      * @param $esito boolean
  98.      * @param $messaggio string
  99.      * @param $utente User
  100.      */
  101.     function ScriviRegistroAttivita($em$ip$debug$esito$messaggio$utente)
  102.     {
  103.         $this->servizi->ScriviRegistroAttivita($ip$debug$esito$messaggio$utente);
  104.     }
  105.     function endsWith($haystack$needle)
  106.     {
  107.         $length strlen($needle);
  108.         if ($length == 0) {
  109.             return true;
  110.         }
  111.         return (substr($haystack, -$length) === $needle);
  112.     }
  113.     /**
  114.      * @param $path
  115.      * @return string
  116.      */
  117.     function verificaPathImg($path){
  118.         if($path == '')
  119.             return '';
  120.         if(strpos($path"/uploads/") !== false){
  121.             return $path;
  122.         }else if (strpos($path"/") !== false){
  123.                return "/uploads" $path;
  124.         }else{
  125.             return "/uploads/" $path;
  126.         }
  127.     }
  128.     /**
  129.      * @param $stringa
  130.      * @param false $ancheOra
  131.      * @return \DateTime|null
  132.      */
  133.     private static function OttieniDataDaStringa($stringa$ancheOra false){
  134.         $ritorno null;
  135.         try {
  136.             if ($stringa != '') {
  137.                 if ($ancheOra) {
  138.                     $ritorno \DateTime::createFromFormat('Y-m-d H:i:s'$stringa);
  139.                 } else {
  140.                     $ritorno \DateTime::createFromFormat('Y-m-d'$stringa);
  141.                 }
  142.             }
  143.         } catch (\Exception|\Throwable $ex){
  144.         }
  145.         if($ritorno === false)
  146.             $ritorno null;
  147.         return $ritorno;
  148.     }
  149.     /**
  150.      * @Route("/caricaArticoliDb/{svuota}/{dbg}", name="carica_articoli_db", defaults={"svuota"="0", "dbg"="0"})
  151.      */
  152.     public function caricaArticoliDbAction(Request $request$svuota$dbg)
  153.     {
  154.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  155.             ini_set('max_execution_time', -1);
  156.             ini_set('memory_limit', -1);
  157.             if($dbg == '1'){
  158.                 ini_set('display_errors',1);
  159.                 error_reporting(E_ALL);
  160.             }
  161.             $start microtime(true);
  162.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  163.             $em $this->servizi->doctrine->getManager();
  164.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /caricaArticoliDb/' $svuota ' --- Inizio il caricamento degli articoli'null);
  165.             $connection $this->servizi->doctrine->getConnection();
  166.             if($svuota == "1"){
  167.                 $em $this->servizi->doctrine->getManager();
  168.                 $connection->beginTransaction();
  169.                 try {
  170.                     $connection->query("SET FOREIGN_KEY_CHECKS=0;");
  171.                     $connection->executeUpdate("TRUNCATE `albero_menu_prodotti`;");
  172.                     $connection->executeUpdate("TRUNCATE `articoli`;");
  173.                     $connection->executeUpdate("TRUNCATE `articoli_in_lingua`;");
  174.                     $connection->executeUpdate("TRUNCATE `associazione_articoli_cliente`;");
  175.                     $connection->executeUpdate("TRUNCATE `associazione_attributi`;");
  176.                     $connection->executeUpdate("TRUNCATE `attributi`;");
  177.                     $connection->executeUpdate("TRUNCATE `attributi_in_lingua`;");
  178.                     $connection->executeUpdate("TRUNCATE `carrello`;");
  179.                     $connection->executeUpdate("TRUNCATE `categorie`;");
  180.                     $connection->executeUpdate("TRUNCATE `categorie_in_lingua`;");
  181.                     $connection->executeUpdate("TRUNCATE `combinazione_albero_mappa_categorie_articoli`;");
  182.                     $connection->executeUpdate("TRUNCATE `listini_vendita`;");
  183.                     $connection->executeUpdate("TRUNCATE `magazzino_secondario_disponibilita`;");
  184.                     $connection->executeUpdate("TRUNCATE `mappa_categorie_articoli`;");
  185.                     $connection->executeUpdate("TRUNCATE `ordini`;");
  186.                     $connection->executeUpdate("TRUNCATE `ordini_righe`;");
  187.                     $connection->executeUpdate("TRUNCATE `righe_carrello`;");
  188.                     $connection->executeUpdate("TRUNCATE `statistiche_categorie`;");
  189.                     $connection->executeUpdate("TRUNCATE `statistiche_click_articoli`;");
  190.                     $connection->executeUpdate("TRUNCATE `tipologie_preimpostate`;");
  191.                     $connection->executeUpdate("TRUNCATE `tipologie_preimpostate_lista`;");
  192.                     $connection->executeUpdate("TRUNCATE `unita_misura`;");
  193.                     $connection->executeUpdate("TRUNCATE `varianti`;");
  194.                     $connection->executeUpdate("TRUNCATE `varianti_in_lingua`;");
  195.                     $connection->query("SET FOREIGN_KEY_CHECKS=1;");
  196.                     $connection->commit();
  197.                 }catch (\Exception|\Throwable $ex){
  198.                     $this->servizi->DebuggaException($ex"Errore pulizia articoli DB");
  199.                 }
  200.             }
  201.             $bool_rigeneraAlbero false;
  202.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  203.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  204.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  205.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  206.             $root_path $pathFileBase "articoli.csv";
  207.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  208.             $contatore 0;
  209.             $row 0;
  210.             $queryEseguite 0;
  211.             $batch_size 100;
  212.             $errori "";
  213.             /*
  214.              * TRACCIATO FILE IMPORTAZIONE articoli.csv
  215.              *
  216.                 0    codice articolo
  217.                 1    nome articolo
  218.                 2    descrizione breve
  219.                 3    descrizione estesa articolo
  220.                 4    immagine minuatura
  221.                 5    immagine
  222.                 6    codice aliquota
  223.                 7    valore aliquota
  224.                 8    unita di misura
  225.                 9    codice categoria
  226.                 10    descrizione categoria
  227.                 11    codice sub-categoria 1
  228.                 12    descrizione sub-categoria 1
  229.                 13    codice sub-categoria 2
  230.                 14    descrizione sub-categoria 2
  231.                 15    codice sub-categoria 3
  232.                 16    descrizione sub-categoria 3
  233.                 17    marca
  234.                 18    operazione
  235.                 19    disponibilita
  236.                 20    um_peso
  237.                 21    peso netto
  238.                 22    peso lordo
  239.                 23    codice originale importazione
  240.                 24    prezzo a richiesta
  241.                 25    codice sub-categoria 4
  242.                 26    descrizione sub-categoria 4
  243.                 27  immagine cat1
  244.                 28  immagine cat2
  245.                 29  immagine cat3
  246.                 30  immagine cat4
  247.                 31  immagine cat5
  248.                 32    ordine_categoria1
  249.                 33    ordine_categoria2
  250.                 34    ordine_categoria3
  251.                 35    ordine_categoria4
  252.                 36    ordine_categoria5
  253.                 37    ordine_articolo
  254.                 38    ordine_mappa
  255.                 39  barcode
  256.              */
  257.             try {
  258.                 if (($handle fopen($root_path"r")) !== false) {
  259.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  260.                         /*if(!$em->isOpen()){
  261.                             $em = $em->create(
  262.                                 $em->getConnection(),
  263.                                 $em->getConfiguration()
  264.                             );
  265.                         }*/
  266.                         if ($row == 0) {
  267.                             $row 1;
  268.                             continue;
  269.                         }
  270.                         //
  271.                         if ($queryEseguite >= $batch_size) {
  272.                             $contatore $contatore $row;
  273.                             $row 1;
  274.                             $queryEseguite 0;
  275.                             $em->flush();
  276.                             $em->clear();
  277.                         }
  278.                         $now = new \DateTime('now');
  279.                         /**
  280.                          * @var $cat1 Categorie
  281.                          * @var $cat2 Categorie
  282.                          * @var $cat3 Categorie
  283.                          * @var $cat4 Categorie
  284.                          * @var $cat5 Categorie
  285.                          * @var $articolo Articoli
  286.                          */
  287.                         $cat1 null;
  288.                         $cat2 null;
  289.                         $cat3 null;
  290.                         $cat4 null;
  291.                         $cat5 null;
  292.                         $articolo null;
  293.                         try {
  294.                             //categoria
  295.                             if ($data[9] != "") {
  296.                                 $categoriaPresente $this->servizi->ritornaCategoriaSeInserita(substr($data[9], 0255), '1');
  297.                                 if ($categoriaPresente != null) {
  298.                                     $categoriaPresente->setNome(substr($data[10], 0255));
  299.                                     $categoriaPresente->setOrdinamento(count($data) >= 33 ? ($data[32] != '' ? (int)$data[32] : 0) : 0);
  300.                                     if(count($data) >= 28 && $data[27] != '')
  301.                                         $categoriaPresente->setImmagine(count($data) >= 28 self::verificaPathImg($data[27]) : '');
  302.                                     $categoriaPresente->setDataModifica($now);
  303.                                     $categoriaPresente->setUtente(null);
  304.                                     $em->persist($categoriaPresente);
  305.                                     $cat1 $categoriaPresente;
  306.                                 } else {
  307.                                     $cat = new Categorie();
  308.                                     $cat->setNome(substr($data[10], 0255));
  309.                                     $cat->setCodice(substr($data[9], 0255));
  310.                                     $cat->setColonnaProvenienza("1");
  311.                                     $cat->setOrdinamento(count($data) >= 33 ? ($data[32] != '' ? (int)$data[32] : 0) : 0);
  312.                                     $cat->setDescrizione('');
  313.                                     if(count($data) >= 28 && $data[27] != '')
  314.                                         $cat->setImmagine(count($data) >= 28 self::verificaPathImg($data[27]) : '');
  315.                                     $cat->setDataCreazione($now);
  316.                                     $cat->setDataModifica($now);
  317.                                     $cat->setNomeUnivoco(substr($cat->getNome() . '-' $cat->getCodice(), 0255));
  318.                                     $cat->setUtente(null);
  319.                                     $cat->setAttivo(true);
  320.                                     $em->persist($cat);
  321.                                     if (!$bool_rigeneraAlbero)
  322.                                         $bool_rigeneraAlbero true;
  323.                                     $cat1 $cat;
  324.                                 }
  325.                                 $em->flush();
  326.                                 $queryEseguite++;
  327.                             }
  328.                             //riclassifica lib 1
  329.                             if ($data[11] != "") {
  330.                                 $categoriaPresente $this->servizi->ritornaCategoriaSeInserita(substr($data[11], 0255), '2');
  331.                                 if ($categoriaPresente != null) {
  332.                                     $categoriaPresente->setNome(substr($data[12], 0255));
  333.                                     if(count($data) >= 28 && $data[27] != '')
  334.                                         $categoriaPresente->setImmagine(count($data) >= 29 self::verificaPathImg($data[28]) : '');
  335.                                     $categoriaPresente->setDataModifica($now);
  336.                                     $categoriaPresente->setOrdinamento(count($data) >= 34 ? ($data[33] != '' ? (int)$data[33] : 0) : 0);
  337.                                     $categoriaPresente->setUtente(null);
  338.                                     $em->persist($categoriaPresente);
  339.                                     $cat2 $categoriaPresente;
  340.                                 } else {
  341.                                     $cat = new Categorie();
  342.                                     $cat->setNome(substr($data[12], 0255));
  343.                                     $cat->setCodice(substr($data[11], 0255));
  344.                                     $cat->setColonnaProvenienza("2");
  345.                                     $cat->setOrdinamento(count($data) >= 34 ? ($data[33] != '' ? (int)$data[33] : 0) : 0);
  346.                                     $cat->setDescrizione('');
  347.                                     if(count($data) >= 28 && $data[27] != '')
  348.                                         $cat->setImmagine(count($data) >= 29 self::verificaPathImg($data[28]) : '');
  349.                                     $cat->setDataCreazione($now);
  350.                                     $cat->setDataModifica($now);
  351.                                     $cat->setNomeUnivoco(substr($cat->getNome() . '-' $cat->getCodice(), 0255));
  352.                                     $cat->setUtente(null);
  353.                                     $cat->setAttivo(true);
  354.                                     $em->persist($cat);
  355.                                     if (!$bool_rigeneraAlbero)
  356.                                         $bool_rigeneraAlbero true;
  357.                                     $cat2 $cat;
  358.                                 }
  359.                                 $em->flush();
  360.                                 $queryEseguite++;
  361.                             }
  362.                             //riclassifica lib 2
  363.                             if ($data[13] != "") {
  364.                                 $categoriaPresente $this->servizi->ritornaCategoriaSeInserita(substr($data[13], 0255), '3');
  365.                                 if ($categoriaPresente != null) {
  366.                                     $categoriaPresente->setNome(substr($data[14], 0255));
  367.                                     $categoriaPresente->setDataModifica($now);
  368.                                     $categoriaPresente->setOrdinamento(count($data) >= 35 ? ($data[34] != '' ? (int)$data[34] : 0) : 0);
  369.                                     if(count($data) >= 28 && $data[27] != '')
  370.                                         $categoriaPresente->setImmagine(count($data) >= 30 self::verificaPathImg($data[29]) : '');
  371.                                     $categoriaPresente->setUtente(null);
  372.                                     $em->persist($categoriaPresente);
  373.                                     $cat3 $categoriaPresente;
  374.                                 } else {
  375.                                     $cat = new Categorie();
  376.                                     $cat->setNome(substr($data[14], 0255));
  377.                                     $cat->setCodice(substr($data[13], 0255));
  378.                                     $cat->setColonnaProvenienza("3");
  379.                                     $cat->setOrdinamento(count($data) >= 35 ? ($data[34] != '' ? (int)$data[34] : 0) : 0);
  380.                                     $cat->setDescrizione('');
  381.                                     if(count($data) >= 28 && $data[27] != '')
  382.                                         $cat->setImmagine(count($data) >= 30 self::verificaPathImg($data[29]) : '');
  383.                                     $cat->setDataCreazione($now);
  384.                                     $cat->setDataModifica($now);
  385.                                     $cat->setNomeUnivoco(substr($cat->getNome() . '-' $cat->getCodice(), 0255));
  386.                                     $cat->setUtente(null);
  387.                                     $cat->setAttivo(true);
  388.                                     $em->persist($cat);
  389.                                     if (!$bool_rigeneraAlbero)
  390.                                         $bool_rigeneraAlbero true;
  391.                                     $cat3 $cat;
  392.                                 }
  393.                                 $em->flush();
  394.                                 $queryEseguite++;
  395.                             }
  396.                             //riclassifica lib 3
  397.                             if ($data[15] != "") {
  398.                                 $categoriaPresente $this->servizi->ritornaCategoriaSeInserita(substr($data[15], 0255), '4');
  399.                                 if ($categoriaPresente != null) {
  400.                                     $categoriaPresente->setNome(substr($data[16], 0255));
  401.                                     $categoriaPresente->setDataModifica($now);
  402.                                     $categoriaPresente->setOrdinamento(count($data) >= 36 ? ($data[35] != '' ? (int)$data[35] : 0) : 0);
  403.                                     if(count($data) >= 28 && $data[27] != '')
  404.                                         $categoriaPresente->setImmagine(count($data) >= 31 self::verificaPathImg($data[30]) : '');
  405.                                     $categoriaPresente->setUtente(null);
  406.                                     $em->persist($categoriaPresente);
  407.                                     $cat4 $categoriaPresente;
  408.                                 } else {
  409.                                     $cat = new Categorie();
  410.                                     $cat->setNome(substr($data[16], 0255));
  411.                                     $cat->setCodice(substr($data[15], 0255));
  412.                                     $cat->setOrdinamento(count($data) >= 36 ? ($data[35] != '' ? (int)$data[35] : 0) : 0);
  413.                                     $cat->setColonnaProvenienza("4");
  414.                                     $cat->setDescrizione('');
  415.                                     if(count($data) >= 28 && $data[27] != '')
  416.                                         $cat->setImmagine(count($data) >= 31 self::verificaPathImg($data[30]) : '');
  417.                                     $cat->setDataCreazione($now);
  418.                                     $cat->setDataModifica($now);
  419.                                     $cat->setNomeUnivoco(substr($cat->getNome() . '-' $cat->getCodice(), 0255));
  420.                                     $cat->setUtente(null);
  421.                                     $cat->setAttivo(true);
  422.                                     $em->persist($cat);
  423.                                     if (!$bool_rigeneraAlbero)
  424.                                         $bool_rigeneraAlbero true;
  425.                                     $cat4 $cat;
  426.                                 }
  427.                                 $em->flush();
  428.                                 $queryEseguite++;
  429.                             }
  430.                             //riclassifica lib 4
  431.                             if (count($data) >= 26 && $data[25] != "") {
  432.                                 $categoriaPresente $this->servizi->ritornaCategoriaSeInserita(substr($data[25], 0255), '5');
  433.                                 if ($categoriaPresente != null) {
  434.                                     $categoriaPresente->setNome(substr($data[26], 0255));
  435.                                     $categoriaPresente->setDataModifica($now);
  436.                                     $categoriaPresente->setOrdinamento(count($data) >= 37 ? ($data[36] != '' ? (int)$data[36] : 0) : 0);
  437.                                     if(count($data) >= 28 && $data[27] != '')
  438.                                         $categoriaPresente->setImmagine(count($data) >= 32 self::verificaPathImg($data[31]) : '');
  439.                                     $categoriaPresente->setUtente(null);
  440.                                     $em->persist($categoriaPresente);
  441.                                     $cat4 $categoriaPresente;
  442.                                 } else {
  443.                                     $cat = new Categorie();
  444.                                     $cat->setNome(substr($data[26], 0255));
  445.                                     $cat->setCodice(substr($data[25], 0255));
  446.                                     $cat->setColonnaProvenienza("5");
  447.                                     $cat->setOrdinamento(count($data) >= 37 ? ($data[36] != '' ? (int)$data[36] : 0) : 0);
  448.                                     $cat->setDescrizione('');
  449.                                     if(count($data) >= 28 && $data[27] != '')
  450.                                         $cat->setImmagine(count($data) >= 32 self::verificaPathImg($data[31]) : '');
  451.                                     $cat->setDataCreazione($now);
  452.                                     $cat->setDataModifica($now);
  453.                                     $cat->setNomeUnivoco(substr($cat->getNome() . '-' $cat->getCodice(), 0255));
  454.                                     $cat->setUtente(null);
  455.                                     $cat->setAttivo(true);
  456.                                     $em->persist($cat);
  457.                                     if (!$bool_rigeneraAlbero)
  458.                                         $bool_rigeneraAlbero true;
  459.                                     $cat5 $cat;
  460.                                 }
  461.                                 $em->flush();
  462.                                 $queryEseguite++;
  463.                             }
  464.                             $unitaMisura $em->find(UnitaMisura::class,$data[8]);
  465.                             if (!$unitaMisura) {
  466.                                 $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true"Nuova unita di misura trovata: " $data[8], null);
  467.                                 $unitaMisura = new UnitaMisura();
  468.                                 $unitaMisura->setDataCreazione(new \DateTime());
  469.                                 $unitaMisura->setDataModifica(new \DateTime());
  470.                                 $unitaMisura->setAttivo(true);
  471.                                 $unitaMisura->setFattoreConversione(1);
  472.                                 $unitaMisura->setCodice($data[8]);
  473.                                 $unitaMisura->setNumeroDecimali(0);
  474.                                 $em->persist($unitaMisura);
  475.                                 $em->flush();
  476.                                 $unitaMisura $em->find(UnitaMisura::class,$data[8]);
  477.                                 $queryEseguite++;
  478.                             }
  479.                             if ($data[8] != $data[20]) { //Verifico se UM peso e UM sono diverse
  480.                                 $umPeso $em->find(UnitaMisura::class,$data[20]);
  481.                             } else {
  482.                                 $umPeso $unitaMisura;
  483.                             }
  484.                             if (!$umPeso && $data[20] != '') {
  485.                                 $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true"Nuova unita di misura peso trovata: " $data[20], null);
  486.                                 $umPeso = new UnitaMisura();
  487.                                 $umPeso->setDataCreazione(new \DateTime());
  488.                                 $umPeso->setDataModifica(new \DateTime());
  489.                                 $umPeso->setAttivo(true);
  490.                                 $umPeso->setFattoreConversione(1);
  491.                                 $umPeso->setCodice($data[20]);
  492.                                 $umPeso->setNumeroDecimali(3);
  493.                                 $em->persist($umPeso);
  494.                                 $em->flush();
  495.                                 $umPeso $em->find(UnitaMisura::class,$data[20]);
  496.                                 $queryEseguite++;
  497.                             }
  498.                             $articoloPresente $this->servizi->ritornaArticoloSeInserito(substr($data[0], 0255), substr($data[9], 0255));
  499.                             //articolo
  500.                             if ($articoloPresente != null) {
  501.                                 $articoloPresente->setNome(substr($data[1], 0255));
  502.                                 $articoloPresente->setDescrizione($data[3]);
  503.                                 $articoloPresente->setOrdinamento(count($data) >= 38 ? ($data[37] != '' ? (int)$data[37] : 0) : 0);
  504.                                 $articoloPresente->setDescrizioneBreve(substr($data[2], 0255));
  505.                                 $articoloPresente->setCodiceGruppoArticoli('');
  506.                                 $articoloPresente->setCodiceAliquota($data[6]);
  507.                                 $articoloPresente->setUmPeso($umPeso);
  508.                                 if($data[5] != '')
  509.                                     $articoloPresente->setImage(self::verificaPathImg($data[5]));
  510.                                 $pesoNet str_replace(",""."$data[21]);
  511.                                 if (!is_numeric($pesoNet) || $pesoNet 99999.9)
  512.                                     $pesoNet 0;
  513.                                 $pesoLord str_replace(",""."$data[22]);
  514.                                 if (!is_numeric($pesoLord) || $pesoLord 99999.9)
  515.                                     $pesoLord 0;
  516.                                 $articoloPresente->setPesoNetto($pesoNet);
  517.                                 $articoloPresente->setPesoLordo($pesoLord);
  518.                                 $articoloPresente->setValoreAliquota($data[7] == '' str_replace(",""."$data[7]));
  519.                                 $articoloPresente->setDataModifica($now);
  520.                                 $articoloPresente->setCodiceImportazione(count($data) >= 24 substr($data[23], 0255) : '');
  521.                                 $articoloPresente->setUtente(null);
  522.                                 $articoloPresente->setPrezzoSuRichiesta(count($data) >= 25 ? ($data[24] == '1' true false) : false);
  523.                                 $articoloPresente->setUm($unitaMisura);
  524.                                 $articoloPresente->setAttivo(true);
  525.                                 $em->persist($articoloPresente);
  526.                                 $articolo $articoloPresente;
  527.                             } else {
  528.                                 $art = new Articoli();
  529.                                 $art->setCodice(substr($data[0], 0255));
  530.                                 $art->setMacroCategoria(substr($data[9], 0255));
  531.                                 $art->setNome(substr($data[1], 0255));
  532.                                 $art->setDescrizione($data[3]);
  533.                                 $art->setOrdinamento(count($data) >= 38 ? ($data[37] != '' ? (int)$data[37] : 0) : 0);
  534.                                 if($data[5] != '')
  535.                                     $art->setImage(self::verificaPathImg($data[5]));
  536.                                 $art->setDescrizioneBreve(substr($data[2], 0255));
  537.                                 $art->setCodiceGruppoArticoli('');
  538.                                 $art->setCodiceAliquota($data[6]);
  539.                                 $art->setValoreAliquota($data[7] == '' str_replace(",""."$data[7]));
  540.                                 $art->setUmPeso($umPeso);
  541.                                 $pesoNet str_replace(",""."$data[21]);
  542.                                 if (!is_numeric($pesoNet))
  543.                                     $pesoNet 0;
  544.                                 $pesoLord str_replace(",""."$data[22]);
  545.                                 if (!is_numeric($pesoLord))
  546.                                     $pesoLord 0;
  547.                                 $art->setPesoNetto($pesoNet);
  548.                                 $art->setPesoLordo($pesoLord);
  549.                                 $art->setUm($unitaMisura);
  550.                                 $art->setDataCreazione($now);
  551.                                 $art->setDataModifica($now);
  552.                                 $art->setCodiceImportazione(count($data) >= 24 $data[23] : '');
  553.                                 $art->setUtente(null);
  554.                                 $art->setTipologiePreimpostate(null);
  555.                                 $art->setUsaTipologiePreimpostate(false);
  556.                                 $art->setPrezzoSuRichiesta(count($data) >= 25 ? ($data[24] == '1' true false) : false);
  557.                                 $art->setAttivo(true);
  558.                                 $em->persist($art);
  559.                                 $articolo $art;
  560.                             }
  561.                             $queryEseguite++;
  562.                             if (!$unitaMisura) {
  563.                                 $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Unita di misura: ' $data[8] . ' non trovata per l\' articolo: ' $data[0] . '-' $data[1], null);
  564.                             }
  565.                             //mappa_categorie_articoli
  566.                             if ($mappaCategoriaArticoliPresente $this->servizi->ritornaMappaCategoriaArticoliSeInserita($articolo$cat1$cat2$cat3$cat4$data[17])) {
  567.                                 if($data[18] == 'E'){
  568.                                     $mappaCategoriaArticoliPresente->setAttivo(false);
  569.                                 }else{
  570.                                     $mappaCategoriaArticoliPresente->setAttivo(true);
  571.                                 }
  572.                                 $mappaCategoriaArticoliPresente->setDataModifica($now);
  573.                                 $mappaCategoriaArticoliPresente->setUtente(null);
  574.                                 $mappaCategoriaArticoliPresente->setCodiceGruppoCategorie(ServiziController::OttieniCodiceGruppoCategorieDaMappa($mappaCategoriaArticoliPresente));
  575.                                 $mappaCategoriaArticoliPresente->setOrdinamento(count($data) >= 39 ? ($data[38] != '' ? (int)$data[38] : 0) : 0);
  576.                                 $mappaCategoriaArticoliPresente->setDisponibile($data[19] == '' str_replace(",""."$data[19]));
  577.                                 $em->persist($mappaCategoriaArticoliPresente);
  578.                             } else {
  579.                                 $mp = new MappaCategorieArticoli();
  580.                                 $mp->setCategoria1($cat1);
  581.                                 $mp->setCategoria2($cat2);
  582.                                 $mp->setCategoria3($cat3);
  583.                                 $mp->setCategoria4($cat4);
  584.                                 $mp->setCategoria5($cat5);
  585.                                 $mp->setUtente(null);
  586.                                 $mp->setMarca($data[17]);
  587.                                 $mp->setDataModifica($now);
  588.                                 $mp->setDataCreazione($now);
  589.                                 $mp->setCodiceGruppoCategorie(ServiziController::OttieniCodiceGruppoCategorieDaMappa($mp));
  590.                                 $mp->setOrdinamento(count($data) >= 39 ? ($data[38] != '' ? (int)$data[38] : 0) : 0);
  591.                                 $mp->setArticolo($articolo);
  592.                                 $mp->setVariantiPresenti(false);
  593.                                 $mp->setDisponibile($data[19] == '' str_replace(",""."$data[19]));
  594.                                 $mp->setAttivo(true);
  595.                                 $em->persist($mp);
  596.                                 $mappaCategoriaArticoliPresente $mp;
  597.                                 if (!$bool_rigeneraAlbero)
  598.                                     $bool_rigeneraAlbero true;
  599.                             }
  600.                             $queryEseguite++;
  601.                             $em->flush();
  602.                             if (count($data) >= 40 && $data[39] != ''){
  603.                                 $elenco = array();
  604.                                 if (strpos($data[39], ',') !== false){
  605.                                     $elenco explode(','$data[39]);
  606.                                 }else{
  607.                                     array_push($elenco$data[39]);
  608.                                 }
  609.                                 foreach ($elenco as $brc){
  610.                                     $barcode = new BarcodeArticoli();
  611.                                     $barcode->setBarcode($brc);
  612.                                     $barcode->setDataCreazione(new \DateTime());
  613.                                     $barcode->setDataModifica(new \DateTime());
  614.                                     $barcode->setMappaCategoriaArticoli($mappaCategoriaArticoliPresente);
  615.                                     $em->persist($barcode);
  616.                                 }
  617.                                 $em->flush();
  618.                             }
  619.                         }catch (Exception $ex2){
  620.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), $ex2->getTraceAsString(), false'Errore importazione (RIGA: ' . ($contatore $row) . ') : ' $ex2->getMessage() . '</br>' $ex2->getTraceAsString() . '</br>'null);
  621.                             $errori .= ('Errore importazione (RIGA: ' . ($contatore $row) . ') : ' $ex2->getMessage() . '</br>' $ex2->getTraceAsString() . '</br>');
  622.                         }catch (\Exception|\Throwable $ex){
  623.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), $ex->getTraceAsString(), false'Errore importazione (RIGA: ' . ($contatore $row) . ') : ' $ex->getMessage() . '</br>' $ex->getTraceAsString() . '</br>'null);
  624.                             $errori .= ('Errore importazione (RIGA: ' . ($contatore $row) . ') : ' $ex->getMessage() . '</br>' $ex->getTraceAsString() . '</br>');
  625.                         }
  626.                         $row++;
  627.                     }
  628.                 }
  629.                 //$row = $contatore + $row;
  630.                 $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row '</br>Errori:' $errorinull);
  631.                 $messaggioSupporto "";
  632.                 if ($bool_rigeneraAlbero)
  633.                     $this->generaAlberoAction($request"1");
  634.                 return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds \n ' $row '\n' $messaggioSupporto);
  635.             } catch (Exception $ex2) {
  636.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), $ex2->getTraceAsString(), false"Errore importazione articoli: " $ex2->getMessage(), null);
  637.                 return new Response('Errore importazione (RIGA: ' . ($contatore $row) . ') : ' $ex2->getMessage() . '/n' $ex2->getTraceAsString());
  638.             } catch (\Exception|\Throwable $ex) {
  639.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), $ex->getTraceAsString(), false"Errore importazione articoli: " $ex->getMessage(), null);
  640.                 return new Response('Errore importazione (RIGA: ' . ($contatore $row) . ') : ' $ex->getMessage() . '/n' $ex->getTraceAsString());
  641.             }
  642.             //return new Response("Importazione completata || " . $time_elapsed_secs = microtime(true) - $start . " || secondi");
  643.         } else {
  644.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false"Errore importazione articoli: ERRORE_PERMESSO"null);
  645.             return new Response("ERRORE PERMESSO");
  646.         }
  647.     } //OK
  648.     /**
  649.      * @Route("/generaIndicizzazioneAttributi", name="genera_indicizzazione_attributi")
  650.      */
  651.     public function generaIndicizzazioneAttributi(Request $request$chiamataInternaSenzaRisposta false){
  652.         try{
  653.             $start microtime(true);
  654.             ini_set('max_execution_time'2400);
  655.             ini_set('memory_limit', -1);
  656.             $connection $this->servizi->doctrine->getConnection();
  657.             $connection->getConfiguration()->setSQLLogger(null);
  658.             $connection->beginTransaction();
  659.             $connection->executeQuery("SET FOREIGN_KEY_CHECKS=0;");
  660.             $connection->executeQuery("TRUNCATE attributi_indicizzazione;");
  661.             $connection->executeQuery("SET FOREIGN_KEY_CHECKS=1; ");
  662.             $sql 'INSERT INTO `attributi_indicizzazione`(`attributo_id`, `categoria1_id`, `categoria2_id`, `categoria3_id`, `categoria4_id`, `categoria5_id`, `data_creazione`, `data_modifica`)  
  663.             SELECT DISTINCT 
  664.                         att.id,
  665.                         mappa.categoria1_id, 
  666.                         mappa.categoria2_id, 
  667.                         mappa.categoria3_id, 
  668.                         mappa.categoria4_id,
  669.                         mappa.categoria5_id,
  670.                         NOW(), 
  671.                         NOW()
  672.                     FROM `associazione_attributi` assAtt
  673.                         LEFT JOIN attributi att ON att.id = assAtt.attributo_id
  674.                         LEFT JOIN mappa_categorie_articoli mappa ON mappa.id = assAtt.mappa_categoria_articolo_id;';
  675.             $connection->executeQuery($sql);
  676.             $connection->commit();
  677.             if(!$chiamataInternaSenzaRisposta)
  678.                 return new Response('Generazione indicizzazione attributi completata in ' $time_elapsed_secs microtime(true) - $start ' seconds \n');
  679.             else
  680.                 return true;
  681.         }catch (\Exception|\Throwable $ex) {
  682.             $this->ScriviRegistroAttivita(null$request->getClientIp(), $ex->getTraceAsString(), false"Errore genera indicizzazione articoli: " $ex->getMessage(), null);
  683.             if(!$chiamataInternaSenzaRisposta)
  684.                 return new Response('Errore genera indicizzazione attributi  EX: ' $ex->getMessage() . '/n' $ex->getTraceAsString());
  685.             else
  686.                 return false;
  687.         }
  688.     }
  689.     /**
  690.      * @Route("/generaAlbero/{indicizzaAttributi}", name="genera_albero", defaults={"indicizzaAttributi"="1"})
  691.      */
  692.     public function generaAlberoAction(Request $request$indicizzaAttributi 1)
  693.     {
  694.         try {
  695.             $start microtime(true);
  696.             ini_set('max_execution_time'2400);
  697.             ini_set('memory_limit', -1);
  698.             $connection $this->servizi->doctrine->getConnection();
  699.             $repoAlbero $this->servizi->doctrine->getRepository(AlberoMenuProdotti::class);
  700.             $connection->executeQuery("SET FOREIGN_KEY_CHECKS=0;");
  701.             $connection->executeQuery("TRUNCATE associazione_albero_menu_prodotti_tipo_ordine;");
  702.             $connection->executeQuery("TRUNCATE albero_menu_prodotti;");
  703.             $connection->executeQuery("SET FOREIGN_KEY_CHECKS=1; ");
  704.             $connection->getConfiguration()->setSQLLogger(null);
  705.             $user $this->servizi->OttieniUtenteCorrente();
  706.             $arrayCacheCategorie = array();
  707.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Chiamata effettuata a /generaAlbero --- Inizio la generazione dell\' albero'$user);
  708.             $posizioneAssoluta 0;
  709.             $conn $this->servizi->doctrine->getConnection();
  710.             $sql "SELECT COUNT(*) AS conta
  711.                         FROM mappa_categorie_articoli mappa
  712.                             GROUP BY mappa.categoria1_id, mappa.categoria2_id, mappa.categoria3_id, mappa.categoria4_id, mappa.categoria5_id";
  713.             $stmt $conn->prepare($sql);
  714.             $rst $stmt->executeQuery();
  715.             $cont $rst->fetchAllAssociative();
  716.             $totRighe count($cont);
  717.             $batch 100;
  718.             $inizio 0;
  719.             while($totRighe $inizio) {
  720.                 $sql 'SELECT 
  721.                             mappa.categoria1_id AS cat1,
  722.                             mappa.categoria2_id AS cat2,
  723.                             mappa.categoria3_id AS cat3,
  724.                             mappa.categoria4_id AS cat4,
  725.                             mappa.categoria5_id AS cat5
  726.                         FROM mappa_categorie_articoli mappa
  727.                             LEFT JOIN categorie c1 ON c1.id = mappa.categoria1_id
  728.                             LEFT JOIN categorie c2 ON c2.id = mappa.categoria2_id
  729.                             LEFT JOIN categorie c3 ON c3.id = mappa.categoria3_id
  730.                             LEFT JOIN categorie c4 ON c4.id = mappa.categoria4_id
  731.                             LEFT JOIN categorie c5 ON c5.id = mappa.categoria5_id
  732.                             LEFT JOIN articoli a on mappa.articolo_id = a.id
  733.                         WHERE mappa.attivo = 1 AND a.attivo = 1
  734.                           AND (c1.attivo = 1 OR mappa.categoria1_id IS NULL) 
  735.                           AND (c2.attivo = 1 OR mappa.categoria2_id IS NULL) 
  736.                           AND (c3.attivo = 1 OR mappa.categoria3_id IS NULL) 
  737.                           AND (c4.attivo = 1 OR mappa.categoria4_id IS NULL) 
  738.                           AND (c5.attivo = 1 OR mappa.categoria5_id IS NULL) 
  739.                         GROUP BY mappa.categoria1_id, mappa.categoria2_id, mappa.categoria3_id, mappa.categoria4_id, mappa.categoria5_id
  740.                         ORDER BY c1.ordinamento, c1.nome, c2.ordinamento, c2.nome, c3.ordinamento, c3.nome, c4.ordinamento, c4.nome, c5.ordinamento, c5.nome
  741.                         LIMIT ' $batch " OFFSET " $inizio;
  742.                 $stmt $conn->prepare($sql);
  743.                 $rst $stmt->executeQuery();
  744.                 $risultati $rst->fetchAllAssociative();
  745.                 foreach ($risultati as $mappa) {
  746.                     $ct1 null$ct2 null$ct3 null$ct4 null$ct5 null;
  747.                     $alberoLivello1 null;
  748.                     $alberoLivello2 null;
  749.                     $alberoLivello3 null;
  750.                     $alberoLivello4 null;
  751.                     $alberoLivello5 null;
  752.                     if ($mappa['cat1']) {
  753.                         /** @var Categorie $ct1 */
  754.                         $ct1 $this->ricavaCategoria($arrayCacheCategorie$mappa['cat1'])[$mappa['cat1']];
  755.                         $alberoLivello1 $repoAlbero->findOneBy(array('categoria' => $ct1'parentId' => null'livello' => '0'));
  756.                         if (!$alberoLivello1) {
  757.                             $sql "INSERT INTO albero_menu_prodotti (categoria_id, parent_id_id, utente_id, livello, has_child, posizione, posizione_assoluta, data_creazione, data_modifica, risorse_presenti)
  758.                                     VALUES (?, NULL, ?, 0, 0, 
  759.                                             CASE WHEN (SELECT COUNT(alb.id) FROM albero_menu_prodotti alb WHERE alb.parent_id_id IS NULL) IS NOT NULL 
  760.                                                 THEN (SELECT COUNT(alb.id) FROM albero_menu_prodotti alb WHERE alb.parent_id_id IS NULL) ELSE 0 END,
  761.                                         ?, NOW(), NOW(),
  762.                                             CASE WHEN EXISTS(SELECT ris.id FROM risorse_anagrafiche ris WHERE 
  763.                                                                 ris.codice_anagrafica = '' AND 
  764.                                                                 ris.codice_categoria1 = ? AND 
  765.                                                                 ris.codice_categoria2 = '' AND  
  766.                                                                 ris.codice_categoria3 = '' AND   
  767.                                                                 ris.codice_categoria4 = '' AND   
  768.                                                                 ris.codice_categoria5 = '' AND                 
  769.                                                                 ris.codice_articolo = '' AND 
  770.                                                                 ris.marca = '' AND 
  771.                                                                 ris.codice_dimensione1 = '' AND   
  772.                                                                 ris.codice_dimensione2 = '' AND 
  773.                                                                 ris.codice_dimensione3 = '' AND 
  774.                                                                 ris.codice_dimensione4 = '' AND 
  775.                                                                 ris.codice_dimensione5 = ''                                           
  776.                                                 ) THEN 1 ELSE 0 END
  777.                                             )";
  778.                             $stmt $connection->prepare($sql);
  779.                             $stmt->bindValue(1$ct1->getId());
  780.                             $stmt->bindValue(2$user $user->getId() : null);
  781.                             $stmt->bindValue(3$posizioneAssoluta);
  782.                             $stmt->bindValue(4$ct1->getCodice());
  783.                             $stmt->execute();
  784.                             $sqlTipoOrdine "
  785.                                 INSERT INTO associazione_albero_menu_prodotti_tipo_ordine (tipo_ordine_id, albero_menu_id) SELECT 
  786.                                     DISTINCT(ass.tipo_ordine_id),
  787.                                     (SELECT alb.id FROM albero_menu_prodotti alb WHERE alb.categoria_id = " $ct1->getId() . " AND alb.parent_id_id IS NULL AND alb.livello = 0 LIMIT 1)
  788.                                 FROM associazione_articoli_tipo_ordine ass
  789.                                     LEFT JOIN mappa_categorie_articoli mappa ON mappa.id = ass.mappa_categoria_articolo_id
  790.                                 WHERE mappa.categoria1_id = " $ct1->getId();
  791.                             $stmt $connection->prepare($sqlTipoOrdine);
  792.                             $stmt->execute();
  793.                             $posizioneAssoluta++;
  794.                             $alberoLivello1 $repoAlbero->findOneBy(array('categoria' => $ct1'parentId' => null'livello' => '0'));
  795.                         }
  796.                     }
  797.                     if ($mappa['cat2']) {
  798.                         /** @var Categorie $ct2 */
  799.                         $ct2 $this->ricavaCategoria($arrayCacheCategorie$mappa['cat2'])[$mappa['cat2']];
  800.                         if($alberoLivello1)
  801.                             $alberoLivello2 $repoAlbero->findOneBy(array('categoria' => $ct2'parentId' => $alberoLivello1->getId(), 'livello' => '1'));
  802.                         if (!$alberoLivello2 && $alberoLivello1) {
  803.                             $sql "INSERT INTO albero_menu_prodotti (categoria_id, parent_id_id, utente_id, livello, has_child, posizione, posizione_assoluta, data_creazione, data_modifica, risorse_presenti)
  804.                                     VALUES (?, ?, ?, 1, 0, 
  805.                                             CASE WHEN (SELECT COUNT(alb.id) FROM albero_menu_prodotti alb WHERE alb.parent_id_id = ?) IS NOT NULL 
  806.                                                 THEN (SELECT COUNT(alb.id) FROM albero_menu_prodotti alb WHERE alb.parent_id_id = ?) ELSE 0 END,
  807.                                         ?, NOW(), NOW(),
  808.                                             CASE WHEN EXISTS(SELECT ris.id FROM risorse_anagrafiche ris WHERE 
  809.                                                                 ris.codice_anagrafica = '' AND 
  810.                                                                 ris.codice_categoria1 = ? AND 
  811.                                                                 ris.codice_categoria2 = ? AND  
  812.                                                                 ris.codice_categoria3 = '' AND   
  813.                                                                 ris.codice_categoria4 = '' AND   
  814.                                                                 ris.codice_categoria5 = '' AND                 
  815.                                                                 ris.codice_articolo = '' AND 
  816.                                                                 ris.marca = '' AND 
  817.                                                                 ris.codice_dimensione1 = '' AND   
  818.                                                                 ris.codice_dimensione2 = '' AND 
  819.                                                                 ris.codice_dimensione3 = '' AND 
  820.                                                                 ris.codice_dimensione4 = '' AND 
  821.                                                                 ris.codice_dimensione5 = ''                                           
  822.                                                 ) THEN 1 ELSE 0 END
  823.                                                 )";
  824.                             $stmt $connection->prepare($sql);
  825.                             $stmt->bindValue(1$ct2->getId());
  826.                             $stmt->bindValue(2$alberoLivello1->getId());
  827.                             $stmt->bindValue(3$user $user->getId() : null);
  828.                             $stmt->bindValue(4$alberoLivello1->getId());
  829.                             $stmt->bindValue(5$alberoLivello1->getId());
  830.                             $stmt->bindValue(6$posizioneAssoluta);
  831.                             $stmt->bindValue(7$ct1->getCodice());
  832.                             $stmt->bindValue(8$ct2->getCodice());
  833.                             $stmt->execute();
  834.                             $sqlTipoOrdine "
  835.                                 INSERT INTO associazione_albero_menu_prodotti_tipo_ordine (tipo_ordine_id, albero_menu_id) SELECT 
  836.                                     DISTINCT(ass.tipo_ordine_id),
  837.                                     (SELECT alb.id FROM albero_menu_prodotti alb WHERE alb.categoria_id = " $ct2->getId() . " AND alb.parent_id_id = " $alberoLivello1->getId() . " AND alb.livello = 1 LIMIT 1)
  838.                                 FROM associazione_articoli_tipo_ordine ass
  839.                                     LEFT JOIN mappa_categorie_articoli mappa ON mappa.id = ass.mappa_categoria_articolo_id
  840.                                 WHERE mappa.categoria1_id = " $ct1->getId() . " AND mappa.categoria2_id = " $ct2->getId();
  841.                             $stmt $connection->prepare($sqlTipoOrdine);
  842.                             $stmt->execute();
  843.                             $posizioneAssoluta++;
  844.                             $sql 'UPDATE albero_menu_prodotti SET has_child = 1 WHERE id = ?';
  845.                             $stmt $connection->prepare($sql);
  846.                             $stmt->bindValue(1$alberoLivello1->getId());
  847.                             $stmt->execute();
  848.                             $alberoLivello2 $repoAlbero->findOneBy(array('categoria' => $ct2'parentId' => $alberoLivello1->getId(), 'livello' => '1'));
  849.                         }
  850.                     }
  851.                     if ($mappa['cat3']) {
  852.                         /** @var Categorie $ct3 */
  853.                         $ct3 $this->ricavaCategoria($arrayCacheCategorie$mappa['cat3'])[$mappa['cat3']];
  854.                         if($alberoLivello2)
  855.                             $alberoLivello3 $repoAlbero->findOneBy(array('categoria' => $ct3'parentId' => $alberoLivello2->getId(), 'livello' => '2'));
  856.                         if (!$alberoLivello3 && $alberoLivello2) {
  857.                             $sql "INSERT INTO albero_menu_prodotti (categoria_id, parent_id_id, utente_id, livello, has_child, posizione, posizione_assoluta, data_creazione, data_modifica, risorse_presenti)
  858.                                     VALUES (?, ?, ?, 2, 0, 
  859.                                             CASE WHEN (SELECT COUNT(alb.id) FROM albero_menu_prodotti alb WHERE alb.parent_id_id = ?) IS NOT NULL 
  860.                                                 THEN (SELECT COUNT(alb.id) FROM albero_menu_prodotti alb WHERE alb.parent_id_id = ?) ELSE 0 END,
  861.                                         ?, NOW(), NOW(),
  862.                                             CASE WHEN EXISTS(SELECT ris.id FROM risorse_anagrafiche ris WHERE 
  863.                                                                 ris.codice_anagrafica = '' AND 
  864.                                                                 ris.codice_categoria1 = ? AND 
  865.                                                                 ris.codice_categoria2 = ? AND  
  866.                                                                 ris.codice_categoria3 = ? AND   
  867.                                                                 ris.codice_categoria4 = '' AND   
  868.                                                                 ris.codice_categoria5 = '' AND                 
  869.                                                                 ris.codice_articolo = '' AND 
  870.                                                                 ris.marca = '' AND 
  871.                                                                 ris.codice_dimensione1 = '' AND   
  872.                                                                 ris.codice_dimensione2 = '' AND 
  873.                                                                 ris.codice_dimensione3 = '' AND 
  874.                                                                 ris.codice_dimensione4 = '' AND 
  875.                                                                 ris.codice_dimensione5 = ''                                           
  876.                                                 ) THEN 1 ELSE 0 END)";
  877.                             $stmt $connection->prepare($sql);
  878.                             $stmt->bindValue(1$ct3->getId());
  879.                             $stmt->bindValue(2$alberoLivello2->getId());
  880.                             $stmt->bindValue(3$user $user->getId() : null);
  881.                             $stmt->bindValue(4$alberoLivello2->getId());
  882.                             $stmt->bindValue(5$alberoLivello2->getId());
  883.                             $stmt->bindValue(6$posizioneAssoluta);
  884.                             $stmt->bindValue(7$ct1->getCodice());
  885.                             $stmt->bindValue(8$ct2->getCodice());
  886.                             $stmt->bindValue(9$ct3->getCodice());
  887.                             $stmt->execute();
  888.                             $posizioneAssoluta++;
  889.                             $sqlTipoOrdine "
  890.                                 INSERT INTO associazione_albero_menu_prodotti_tipo_ordine (tipo_ordine_id, albero_menu_id) SELECT 
  891.                                     DISTINCT(ass.tipo_ordine_id),
  892.                                     (SELECT alb.id FROM albero_menu_prodotti alb WHERE alb.categoria_id = " $ct3->getId() . " AND alb.parent_id_id = " $alberoLivello2->getId() . " AND alb.livello = 2 LIMIT 1)
  893.                                 FROM associazione_articoli_tipo_ordine ass
  894.                                     LEFT JOIN mappa_categorie_articoli mappa ON mappa.id = ass.mappa_categoria_articolo_id
  895.                                 WHERE mappa.categoria1_id = " $ct1->getId() . " AND mappa.categoria2_id = " $ct2->getId() . " AND mappa.categoria3_id = " $ct3->getId();
  896.                             $stmt $connection->prepare($sqlTipoOrdine);
  897.                             $stmt->execute();
  898.                             $sql 'UPDATE albero_menu_prodotti SET has_child = 1 WHERE id = ?';
  899.                             $stmt $connection->prepare($sql);
  900.                             $stmt->bindValue(1$alberoLivello2->getId());
  901.                             $stmt->execute();
  902.                             $alberoLivello3 $repoAlbero->findOneBy(array('categoria' => $ct3'parentId' => $alberoLivello2->getId(), 'livello' => '2'));
  903.                         }
  904.                     }
  905.                     if ($mappa['cat4']) {
  906.                         /** @var Categorie $ct4 */
  907.                         $ct4 $this->ricavaCategoria($arrayCacheCategorie$mappa['cat4'])[$mappa['cat4']];
  908.                         if($alberoLivello3)
  909.                             $alberoLivello4 $repoAlbero->findOneBy(array('categoria' => $ct4'parentId' => $alberoLivello3->getId(), 'livello' => '3'));
  910.                         if (!$alberoLivello4 && $alberoLivello3) {
  911.                             $sql "INSERT INTO albero_menu_prodotti (categoria_id, parent_id_id, utente_id, livello, has_child, posizione, posizione_assoluta, data_creazione, data_modifica, risorse_presenti)
  912.                                     VALUES (?, ?, ?, 3, 0, 
  913.                                             CASE WHEN (SELECT COUNT(alb.id) FROM albero_menu_prodotti alb WHERE alb.parent_id_id = ?) IS NOT NULL 
  914.                                                 THEN (SELECT COUNT(alb.id) FROM albero_menu_prodotti alb WHERE alb.parent_id_id = ?) ELSE 0 END,
  915.                                         ?, NOW(), NOW(),
  916.                                             CASE WHEN EXISTS(SELECT ris.id FROM risorse_anagrafiche ris WHERE 
  917.                                                                 ris.codice_anagrafica = '' AND 
  918.                                                                 ris.codice_categoria1 = ? AND 
  919.                                                                 ris.codice_categoria2 = ? AND  
  920.                                                                 ris.codice_categoria3 = ? AND   
  921.                                                                 ris.codice_categoria4 = ? AND   
  922.                                                                 ris.codice_categoria5 = '' AND                 
  923.                                                                 ris.codice_articolo = '' AND 
  924.                                                                 ris.marca = '' AND 
  925.                                                                 ris.codice_dimensione1 = '' AND   
  926.                                                                 ris.codice_dimensione2 = '' AND 
  927.                                                                 ris.codice_dimensione3 = '' AND 
  928.                                                                 ris.codice_dimensione4 = '' AND 
  929.                                                                 ris.codice_dimensione5 = ''                                           
  930.                                                 ) THEN 1 ELSE 0 END)";
  931.                             $stmt $connection->prepare($sql);
  932.                             $stmt->bindValue(1$ct4->getId());
  933.                             $stmt->bindValue(2$alberoLivello3->getId());
  934.                             $stmt->bindValue(3$user $user->getId() : null);
  935.                             $stmt->bindValue(4$alberoLivello3->getId());
  936.                             $stmt->bindValue(5$alberoLivello3->getId());
  937.                             $stmt->bindValue(6$posizioneAssoluta);
  938.                             $stmt->bindValue(7$ct1->getCodice());
  939.                             $stmt->bindValue(8$ct2->getCodice());
  940.                             $stmt->bindValue(9$ct3->getCodice());
  941.                             $stmt->bindValue(10$ct4->getCodice());
  942.                             $stmt->execute();
  943.                             $posizioneAssoluta++;
  944.                             $sqlTipoOrdine "
  945.                                 INSERT INTO associazione_albero_menu_prodotti_tipo_ordine (tipo_ordine_id, albero_menu_id) SELECT 
  946.                                     DISTINCT(ass.tipo_ordine_id),
  947.                                     (SELECT alb.id FROM albero_menu_prodotti alb WHERE alb.categoria_id = " $ct4->getId() . " AND alb.parent_id_id = " $alberoLivello3->getId() . " AND alb.livello = 3 LIMIT 1)
  948.                                 FROM associazione_articoli_tipo_ordine ass
  949.                                     LEFT JOIN mappa_categorie_articoli mappa ON mappa.id = ass.mappa_categoria_articolo_id
  950.                                 WHERE mappa.categoria1_id = " $ct1->getId() . " AND mappa.categoria2_id = " $ct2->getId() . " AND mappa.categoria3_id = " $ct3->getId() . " AND mappa.categoria4_id = " $ct4->getId();
  951.                             $stmt $connection->prepare($sqlTipoOrdine);
  952.                             $stmt->execute();
  953.                             $sql 'UPDATE albero_menu_prodotti SET has_child = 1 WHERE id = ?';
  954.                             $stmt $connection->prepare($sql);
  955.                             $stmt->bindValue(1$alberoLivello3->getId());
  956.                             $stmt->execute();
  957.                             $alberoLivello4 $repoAlbero->findOneBy(array('categoria' => $ct4'parentId' => $alberoLivello3->getId(), 'livello' => '3'));
  958.                         }
  959.                     }
  960.                     if ($mappa['cat5']) {
  961.                         /** @var Categorie $ct5 */
  962.                         $ct5 $this->ricavaCategoria($arrayCacheCategorie$mappa['cat5'])[$mappa['cat5']];
  963.                         if($alberoLivello4)
  964.                             $alberoLivello5 $repoAlbero->findOneBy(array('categoria' => $ct5'parentId' => $alberoLivello4->getId(), 'livello' => '4'));
  965.                         if (!$alberoLivello5 && $alberoLivello4) {
  966.                             $sql "INSERT INTO albero_menu_prodotti (categoria_id, parent_id_id, utente_id, livello, has_child, posizione, posizione_assoluta, data_creazione, data_modifica, risorse_presenti)
  967.                                     VALUES (?, ?, ?, 4, 0, 
  968.                                             CASE WHEN (SELECT COUNT(alb.id) FROM albero_menu_prodotti alb WHERE alb.parent_id_id = ?) IS NOT NULL 
  969.                                                 THEN (SELECT COUNT(alb.id) FROM albero_menu_prodotti alb WHERE alb.parent_id_id = ?) ELSE 0 END,
  970.                                         ?, NOW(), NOW(),
  971.                                             CASE WHEN EXISTS(SELECT ris.id FROM risorse_anagrafiche ris WHERE 
  972.                                                                 ris.codice_anagrafica = '' AND 
  973.                                                                 ris.codice_categoria1 = ? AND 
  974.                                                                 ris.codice_categoria2 = ? AND  
  975.                                                                 ris.codice_categoria3 = ? AND   
  976.                                                                 ris.codice_categoria4 = ? AND   
  977.                                                                 ris.codice_categoria5 = ? AND                 
  978.                                                                 ris.codice_articolo = '' AND 
  979.                                                                 ris.marca = '' AND 
  980.                                                                 ris.codice_dimensione1 = '' AND   
  981.                                                                 ris.codice_dimensione2 = '' AND 
  982.                                                                 ris.codice_dimensione3 = '' AND 
  983.                                                                 ris.codice_dimensione4 = '' AND 
  984.                                                                 ris.codice_dimensione5 = ''                                           
  985.                                                 ) THEN 1 ELSE 0 END)";
  986.                             $stmt $connection->prepare($sql);
  987.                             $stmt->bindValue(1$ct5->getId());
  988.                             $stmt->bindValue(2$alberoLivello4->getId());
  989.                             $stmt->bindValue(3$user $user->getId() : null);
  990.                             $stmt->bindValue(4$alberoLivello4->getId());
  991.                             $stmt->bindValue(5$alberoLivello4->getId());
  992.                             $stmt->bindValue(6$posizioneAssoluta);
  993.                             $stmt->bindValue(7$ct1->getCodice());
  994.                             $stmt->bindValue(8$ct2->getCodice());
  995.                             $stmt->bindValue(9$ct3->getCodice());
  996.                             $stmt->bindValue(10$ct4->getCodice());
  997.                             $stmt->bindValue(11$ct5->getCodice());
  998.                             $stmt->execute();
  999.                             $posizioneAssoluta++;
  1000.                             $sqlTipoOrdine "
  1001.                                 INSERT INTO associazione_albero_menu_prodotti_tipo_ordine (tipo_ordine_id, albero_menu_id) SELECT 
  1002.                                     DISTINCT(ass.tipo_ordine_id),
  1003.                                     (SELECT alb.id FROM albero_menu_prodotti alb WHERE alb.categoria_id = " $ct5->getId() . " AND alb.parent_id_id = " $alberoLivello4->getId() . " AND alb.livello = 4 LIMIT 1)
  1004.                                 FROM associazione_articoli_tipo_ordine ass
  1005.                                     LEFT JOIN mappa_categorie_articoli mappa ON mappa.id = ass.mappa_categoria_articolo_id
  1006.                                 WHERE mappa.categoria1_id = " $ct1->getId() . " AND mappa.categoria2_id = " $ct2->getId() . " AND mappa.categoria3_id = " $ct3->getId() . " AND mappa.categoria4_id = " $ct4->getId() . " AND mappa.categoria5_id = " $ct5->getId();
  1007.                             $stmt $connection->prepare($sqlTipoOrdine);
  1008.                             $stmt->execute();
  1009.                             $sql 'UPDATE albero_menu_prodotti SET has_child = 1 WHERE id = ?';
  1010.                             $stmt $connection->prepare($sql);
  1011.                             $stmt->bindValue(1$alberoLivello4->getId());
  1012.                             $stmt->execute();
  1013.                         }
  1014.                     }
  1015.                 }
  1016.                 $inizio $inizio $batch;
  1017.             }
  1018.             $this->addFlash(
  1019.                 'notice',
  1020.                 'Albero menu rigenerato con successo in ' $time_elapsed_secs microtime(true) - $start ' seconds'
  1021.             );
  1022.             if($indicizzaAttributi == "1")
  1023.                 $this->generaIndicizzazioneAttributi($requesttrue);
  1024.             $this->servizi->ScriviRegistroAttivita($request->getClientIp(), ''true'Albero menu rigenerato con successo in ' $time_elapsed_secs microtime(true) - $start ' seconds'$user);
  1025.             return $this->render('default/index.html.twig');
  1026.         } catch (\PDOException $exx){
  1027.             $this->servizi->DebuggaException($exx'Errore genera albero: ');
  1028.         } catch (\Exception|\Throwable $ex) {
  1029.             $this->servizi->DebuggaException($ex'Errore genera albero: ');
  1030.         }
  1031.         return new Response('ERRORE');
  1032.     }
  1033.     function ricavaCategoria($arrayCache$idCategoria){
  1034.         if(!array_key_exists($idCategoria$arrayCache)){
  1035.             $cacheCategorie = new Caching_Categorie($this->servizi);
  1036.             $arrayCache[$idCategoria] = $cacheCategorie->getCategoria($idCategoria);
  1037.             //$this->servizi->doctrine->getRepository(Categorie::class)->find($idCategoria);
  1038.         }
  1039.         return $arrayCache;
  1040.     }
  1041.     function controllaEAggiungiSeInsistente($array$chiave)
  1042.     {
  1043.         if (!array_key_exists($chiave$array)) {
  1044.             $array[$chiave] = array();
  1045.         }
  1046.         return $array;
  1047.     }
  1048.     /**
  1049.      * @Route("/caricaRisorseAnagraficheValori", name="carica_risorse_anagrafiche_valori")
  1050.      */
  1051.     public function caricaRisorseAnagraficheValori(Request $request)
  1052.     {
  1053.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  1054.             ini_set('max_execution_time'900);
  1055.             ini_set('memory_limit', -1);
  1056.             $start microtime(true);
  1057.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  1058.             $em $this->servizi->doctrine->getManager();
  1059.             $user $this->servizi->OttieniUtenteCorrente();
  1060.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  1061.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  1062.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  1063.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  1064.             $repoRisorse $this->servizi->doctrine->getRepository(RisorseAnagrafiche::class);
  1065.             $repoRisValori $this->servizi->doctrine->getRepository(RisorseAnagraficheColonneValori::class);
  1066.             $repoColonne $this->servizi->doctrine->getRepository(RisorseAnagraficheColonne::class);
  1067.             $errori "";
  1068.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /caricaRisorseAnagraficheValori --- Inizio l\' importazione delle scontistiche delle anagrafiche'null);
  1069.             $root_path $pathFileBase "risorse_anagrafiche_valori.csv";
  1070.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  1071.             $contatore 0;
  1072.             $query_eseguite 0;
  1073.             $row 0;
  1074.             $batch_size 50;
  1075.             /*
  1076.              * Index    Campo
  1077.                 0    identificativo_unico_risorsa_anagrafica
  1078.                 1    nome_colonna
  1079.                 2    ordinatore
  1080.                 3    valore
  1081.                 4    tipo_dato
  1082.                 5    header_visualizzato
  1083.                 6    nascosto
  1084.                 7    operazione
  1085.                 8   direzione_ordinamento
  1086.                 9   ordinazione_ordinamento
  1087.              */
  1088.             $indici = array(
  1089.                 "identificativoUnicoRisorsaAnagrafica" => 0,
  1090.                 "nomeColonna" => 1,
  1091.                 "ordinatore" => 2,
  1092.                 "valore" => 3,
  1093.                 "tipoDato" => 4,
  1094.                 "headerVisualizzato" => 5,
  1095.                 "nascosto" => 6,
  1096.                 "operazione" => 7,
  1097.                 "direzioneOrdinamento" => 8,
  1098.                 "ordinazioneOrdinamento" => 9
  1099.             );
  1100.             $tipiDatoAutorizzati $this->servizi->RitornaArrayTipoDato();
  1101.             $tt = array();
  1102.             foreach ($tipiDatoAutorizzati as $key){
  1103.                 array_push($tt$key);
  1104.             }
  1105.             $tipiDatoAutorizzati $tt;
  1106.             try {
  1107.                 if (($handle fopen($root_path"r")) !== false) {
  1108.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  1109.                         if ($row == 0) {
  1110.                             $row 1;
  1111.                             continue;
  1112.                         }
  1113.                         if ($query_eseguite >= $batch_size) {
  1114.                             $contatore $contatore $row 1;
  1115.                             $row 1;
  1116.                             $query_eseguite 0;
  1117.                             $em->flush();
  1118.                             $em->clear();
  1119.                         }
  1120.                         if(in_array($data[$indici['tipoDato']], $tipiDatoAutorizzati)) {
  1121.                             $testataRisorsa $repoRisorse->findOneBy(array('identificativoUnico' => $data[$indici['identificativoUnicoRisorsaAnagrafica']]));
  1122.                             if ($testataRisorsa) {
  1123.                                 $risorsa $repoRisValori->findOneBy(array('risorsaAnagrafica' => $testataRisorsa'nomeColonna' => $data[$indici['nomeColonna']]));
  1124.                                 if ($data[$indici['operazione']] == 'E') {
  1125.                                     if ($risorsa) {
  1126.                                         $em->remove($risorsa);
  1127.                                         $query_eseguite++;
  1128.                                     }
  1129.                                 } else {
  1130.                                     //Identifico la testata Risorsa anagrafica
  1131.                                     //Identifico la colonna
  1132.                                     $colonna $repoColonne->findOneBy(array('nome' => $data[$indici['nomeColonna']], 'tipoDato' => $data[$indici['tipoDato']]));
  1133.                                     if (!$colonna) {
  1134.                                         $colonna = new RisorseAnagraficheColonne();
  1135.                                         $colonna->setNome($data[$indici['nomeColonna']]);
  1136.                                         $colonna->setTipoDato($data[$indici['tipoDato']]);
  1137.                                         $colonna->setHeaderVisualizzato($data[$indici['headerVisualizzato']] != '' $data[$indici['headerVisualizzato']] : $colonna->getNome());
  1138.                                         $colonna->setNascosto($data[$indici['nascosto']] != '0' true false);
  1139.                                         $colonna->setDataCreazione(new \DateTime());
  1140.                                         $colonna->setDataModifica(new \DateTime());
  1141.                                         if(count($data) > 8)
  1142.                                             $colonna->setDirezioneOrdinamento(strtolower($data[$indici['direzioneOrdinamento']] ? $data[$indici['direzioneOrdinamento']] : ''));
  1143.                                         if(count($data) > 9)
  1144.                                             $colonna->setOrdinazioneOrdinamento($data[$indici['ordinazioneOrdinamento']] != '' $data[$indici['ordinazioneOrdinamento']] : null);
  1145.                                         $em->persist($colonna);
  1146.                                         $query_eseguite++;
  1147.                                     } else {
  1148.                                         $colonna->setHeaderVisualizzato($data[$indici['headerVisualizzato']] != '' $data[$indici['headerVisualizzato']] : $colonna->getNome());
  1149.                                         $colonna->setNascosto($data[$indici['nascosto']] != '0' true false);
  1150.                                         $colonna->setDataModifica(new \DateTime());
  1151.                                         $em->persist($colonna);
  1152.                                         $query_eseguite++;
  1153.                                     }
  1154.                                     if (!$risorsa) {
  1155.                                         $risorsa = new RisorseAnagraficheColonneValori();
  1156.                                         $risorsa->setRisorsaAnagrafica($testataRisorsa);
  1157.                                         $risorsa->setColonna($colonna);
  1158.                                         $risorsa->setNomeColonna($data[$indici['nomeColonna']]);
  1159.                                         $risorsa->setOrdinatore($data[$indici['ordinatore']]);
  1160.                                         $risorsa->setValore(null);
  1161.                                         $risorsa->setValoreBoolean(null);
  1162.                                         $risorsa->setValoreDatetime(null);
  1163.                                         $risorsa->setValoreDecimale(null);
  1164.                                         $risorsa->setValoreInteger(null);
  1165.                                         switch ($colonna->getTipoDato())
  1166.                                         {
  1167.                                             case 'text':{
  1168.                                                 $risorsa->setValore($data[$indici['valore']]);
  1169.                                                 break;
  1170.                                             }
  1171.                                             case 'integer':{
  1172.                                                 $risorsa->setValoreInteger($data[$indici['valore']]);
  1173.                                                 break;
  1174.                                             }
  1175.                                             case 'decimal':{
  1176.                                                 $risorsa->setValoreDecimale($data[$indici['valore']]);
  1177.                                                 break;
  1178.                                             }
  1179.                                             case 'boolean':{
  1180.                                                 $risorsa->setValoreBoolean(boolval($data[$indici['valore']]));
  1181.                                                 break;
  1182.                                             }
  1183.                                             case 'datetime':{
  1184.                                                 $risorsa->setValoreDatetime(\DateTime::createFromFormat('Y-m-d H:i:s'$data[$indici['valore']]));
  1185.                                                 break;
  1186.                                             }
  1187.                                             case 'date':{
  1188.                                                 $dat \DateTime::createFromFormat('Y-m-d'$data[$indici['valore']]);
  1189.                                                 $dat->setTime(000);
  1190.                                                 $risorsa->setValoreDatetime($dat);
  1191.                                                 break;
  1192.                                             }
  1193.                                             case 'time':{
  1194.                                                 $dat \DateTime::createFromFormat('H:i:s'$data[$indici['valore']]);
  1195.                                                 $dat->setDate(189900);
  1196.                                                 $risorsa->setValoreDatetime($dat);
  1197.                                                 break;
  1198.                                             }
  1199.                                         }
  1200.                                         $risorsa->setDataModifica(new \DateTime());
  1201.                                         $risorsa->setDataCreazione(new \DateTime());
  1202.                                         $em->persist($risorsa);
  1203.                                         $query_eseguite++;
  1204.                                     } else {
  1205.                                         $risorsa->setOrdinatore($data[$indici['ordinatore']]);
  1206.                                         $risorsa->setValore(null);
  1207.                                         $risorsa->setValoreBoolean(null);
  1208.                                         $risorsa->setValoreDatetime(null);
  1209.                                         $risorsa->setValoreDecimale(null);
  1210.                                         $risorsa->setValoreInteger(null);
  1211.                                         switch ($colonna->getTipoDato())
  1212.                                         {
  1213.                                             case 'text':{
  1214.                                                 $risorsa->setValore($data[$indici['valore']]);
  1215.                                                 break;
  1216.                                             }
  1217.                                             case 'integer':{
  1218.                                                 $risorsa->setValoreInteger($data[$indici['valore']]);
  1219.                                                 break;
  1220.                                             }
  1221.                                             case 'decimal':{
  1222.                                                 $risorsa->setValoreDecimale($data[$indici['valore']]);
  1223.                                                 break;
  1224.                                             }
  1225.                                             case 'boolean':{
  1226.                                                 $risorsa->setValoreBoolean(boolval($data[$indici['valore']]));
  1227.                                                 break;
  1228.                                             }
  1229.                                             case 'datetime':{
  1230.                                                 $risorsa->setValoreDatetime(\DateTime::createFromFormat('Y-m-d H:i:s'$data[$indici['valore']]));
  1231.                                                 break;
  1232.                                             }
  1233.                                             case 'date':{
  1234.                                                 $dat \DateTime::createFromFormat('Y-m-d'$data[$indici['valore']]);
  1235.                                                 $dat->setTime(000);
  1236.                                                 $risorsa->setValoreDatetime($dat);
  1237.                                                 break;
  1238.                                             }
  1239.                                             case 'time':{
  1240.                                                 $dat \DateTime::createFromFormat('H:i:s'$data[$indici['valore']]);
  1241.                                                 $dat->setDate(189900);
  1242.                                                 $risorsa->setValoreDatetime($dat);
  1243.                                                 break;
  1244.                                             }
  1245.                                         }
  1246.                                         $risorsa->setDataModifica(new \DateTime());
  1247.                                         $em->persist($risorsa);
  1248.                                         $query_eseguite++;
  1249.                                     }
  1250.                                 }
  1251.                             } else {
  1252.                                 $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Risorsa anagrafica con identificativo univoco: ' $data[$indici['identificativoUnicoRisorsaAnagrafica']] . ' non trovata!'$user);
  1253.                             }
  1254.                         }else{
  1255.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Tipo dato: ' $data[$indici['tipoDato']] . ' non riconosciuto!'null);
  1256.                         }
  1257.                         $row++;
  1258.                         $em->flush();
  1259.                     }
  1260.                     $em->flush();
  1261.                     $em->clear();
  1262.                 }
  1263.                 $row $contatore $row;
  1264.                 if ($errori == "") {
  1265.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds' $rownull);
  1266.                     return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  1267.                 } else {
  1268.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), var_export($erroritrue), false'Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds' $rownull);
  1269.                     return new Response('Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row "</br>Lista Errori:</br>" $errori);
  1270.                 }
  1271.             } catch (\Exception|\Throwable $ex) {
  1272.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), $ex->getTraceAsString(), false'Errore importazione: ' $ex->getMessage(), null);
  1273.                 return new Response('Errore importazione (RIGA: ' $contatore ') : ' $ex->getMessage());
  1274.             }
  1275.         } else {
  1276.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null);
  1277.             return new Response("ERRORE PERMESSO");
  1278.         }
  1279.     } //OK
  1280.     /**
  1281.      * @Route("/caricaAssociazioniArticoliClienti/{svuota}", name="carica_rassociazione_articoli_clienti", defaults={"svuota"="0"})
  1282.      */
  1283.     public function caricaAssociazioneArticoliClienti(Request $request$svuota)
  1284.     {
  1285.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  1286.             ini_set('max_execution_time'7200);
  1287.             ini_set('memory_limit', -1);
  1288.             $start microtime(true);
  1289.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  1290.             $em $this->servizi->doctrine->getManager();
  1291.             $user $this->servizi->OttieniUtenteCorrente();
  1292.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  1293.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  1294.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  1295.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  1296.             $repoArticoli $this->servizi->doctrine->getRepository(Articoli::class);
  1297.             $repoClienti $this->servizi->doctrine->getRepository(User::class);
  1298.             $repoAnagrafica $this->servizi->doctrine->getRepository(Anagrafiche::class);
  1299.             $repoCategoria $this->servizi->doctrine->getRepository(Categorie::class);
  1300.             $repoVarianti $this->servizi->doctrine->getRepository(Varianti::class);
  1301.             $repoAssociazione $this->servizi->doctrine->getRepository(AssociazioneArticoliCliente::class);
  1302.             $errori "";
  1303.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /caricaAssociazioniArticoliClienti/' $svuota ' --- Inizio l\' importazione delle associazione articoli clienti'null);
  1304.             if($svuota == "1"){
  1305.                 $connection $this->servizi->doctrine->getConnection();
  1306.                 $connection->beginTransaction();
  1307.                 try {
  1308.                     $connection->query("SET FOREIGN_KEY_CHECKS=0;");
  1309.                     $connection->executeUpdate("TRUNCATE `associazione_articoli_cliente`;");
  1310.                     $connection->query("SET FOREIGN_KEY_CHECKS=1;");
  1311.                     $connection->commit();
  1312.                 }catch (\Exception|\Throwable $ex){
  1313.                     $this->servizi->DebuggaException($ex"Errore pulizia associazione articoli cliente DB");
  1314.                 }
  1315.             }
  1316.             $root_path $pathFileBase "associazione_articoli_clienti.csv";
  1317.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  1318.             $contatore 0;
  1319.             $query_eseguite 0;
  1320.             $row 0;
  1321.             $batch_size 50;
  1322.             /*
  1323.              * Index    Campo
  1324.                 0    codice_cliente
  1325.                 1    codice_articolo
  1326.                 2    codice_cat1
  1327.                 3    codice_cat2
  1328.                 4    codice_cat3
  1329.                 5    codice_cat4
  1330.                 6    codice_cat5
  1331.                 7    marca
  1332.                 8    codice_variante
  1333.                 9    ass_codice
  1334.                 10    ass_nome
  1335.                 11    ass_descrizione
  1336.                 12    ass_marca
  1337.                 13    ass_immagine_dimensione_1
  1338.                 14    ass_codice_dimensione_1
  1339.                 15    ass_descrizione_dimensione_1
  1340.                 16    ass_immagine_dimensione_2
  1341.                 17    ass_codice_dimensione_2
  1342.                 18    ass_descrizione_dimensione_2
  1343.                 19    ass_immagine_dimensione_3
  1344.                 20    ass_codice_dimensione_3
  1345.                 21    ass_descrizione_dimensione_3
  1346.                 22    ass_immagine_dimensione_4
  1347.                 23    ass_codice_dimensione_4
  1348.                 24    ass_descrizione_dimensione_4
  1349.                 25    ass_immagine_dimensione_5
  1350.                 26    ass_codice_dimensione_5
  1351.                 27    ass_descrizione_dimensione_5
  1352.                 28  operazione
  1353.              */
  1354.             $indici = array(
  1355.                 "codiceCliente" => 0,
  1356.                 "codiceArticolo" => 1,
  1357.                 "cat1" => 2,
  1358.                 "cat2" => 3,
  1359.                 "cat3" => 4,
  1360.                 "cat4" => 5,
  1361.                 "cat5" => 6,
  1362.                 "marca" => 7,
  1363.                 'codiceVariante' => 8,
  1364.                 'assCodice' => 9,
  1365.                 'assNome' => 10,
  1366.                 'assDescrizione' => 11,
  1367.                 'assMarca' => 12,
  1368.                 'assImmagineDimensione1' => 13,
  1369.                 'assCodiceDimensione1' => 14,
  1370.                 'assDescrizioneDimensione1' => 15,
  1371.                 'assImmagineDimensione2' => 16,
  1372.                 'assCodiceDimensione2' => 17,
  1373.                 'assDescrizioneDimensione2' => 18,
  1374.                 'assImmagineDimensione3' => 19,
  1375.                 'assCodiceDimensione3' => 20,
  1376.                 'assDescrizioneDimensione3' => 21,
  1377.                 'assImmagineDimensione4' => 22,
  1378.                 'assCodiceDimensione4' => 23,
  1379.                 'assDescrizioneDimensione4' => 24,
  1380.                 'assImmagineDimensione5' => 25,
  1381.                 'assCodiceDimensione5' => 26,
  1382.                 'assDescrizioneDimensione5' => 27,
  1383.                 'operazione' => 28
  1384.             );
  1385.             try {
  1386.                 if (($handle fopen($root_path"r")) !== false) {
  1387.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  1388.                         if ($row == 0) {
  1389.                             $row 1;
  1390.                             continue;
  1391.                         }
  1392.                         if ($query_eseguite >= $batch_size) {
  1393.                             $contatore $contatore $row 1;
  1394.                             $row 1;
  1395.                             $query_eseguite 0;
  1396.                             $em->flush();
  1397.                             $em->clear();
  1398.                         }
  1399.                         $cliente $repoClienti->findOneBy(array('codiceCliente' => $data[$indici['codiceCliente']]));
  1400.                         $anagrafica $repoAnagrafica->findOneBy(array('codice' => $data[$indici['codiceCliente']]));
  1401.                         $articolo null;
  1402.                         if ($data[$indici['codiceArticolo']] != '') {
  1403.                             $articolo $repoArticoli->findOneBy(array('codice' => $data[$indici['codiceArticolo']]));
  1404.                         }
  1405.                         if ($articolo) {
  1406.                             $cat1 $repoCategoria->findOneBy(array('codice' => $data[$indici['cat1']]));
  1407.                             $cat2 $repoCategoria->findOneBy(array('codice' => $data[$indici['cat2']]));
  1408.                             $cat3 $repoCategoria->findOneBy(array('codice' => $data[$indici['cat3']]));
  1409.                             $cat4 $repoCategoria->findOneBy(array('codice' => $data[$indici['cat4']]));
  1410.                             $cat5 $repoCategoria->findOneBy(array('codice' => $data[$indici['cat5']]));
  1411.                             $mappa $this->servizi->ritornaMappaCategoriaArticoliSeInserita($articolo$cat1$cat2$cat3$cat4$data[$indici['marca']], $cat5);
  1412.                             $variante $repoVarianti->findOneBy(array('mappa' => $mappa'codiceVariante' => $data[$indici['codiceVariante']]));
  1413.                             $qb $repoAssociazione->createQueryBuilder('ass')
  1414.                                 ->where('ass.mappaCategoriaArticoli = :mappa OR ass.articolo = :art')
  1415.                                 ->setParameter('mappa'$mappa)->setParameter('art'$articolo);
  1416.                             if ($variante) {
  1417.                                 $qb $qb->andWhere('ass.variante = :variante')->setParameter('variante'$variante);
  1418.                             } else {
  1419.                                 $qb $qb->andWhere('ass.variante IS NULL');
  1420.                             }
  1421.                             if ($cliente) {
  1422.                                 $qb $qb->andWhere('ass.cliente = :cliente')->setParameter('cliente'$cliente);
  1423.                             } else {
  1424.                                 $qb $qb->andWhere('ass.cliente IS NULL');
  1425.                             }
  1426.                             if ($anagrafica) {
  1427.                                 $qb $qb->andWhere('ass.anagrafica = :anagrafica')->setParameter('anagrafica'$anagrafica);
  1428.                             } else {
  1429.                                 $qb $qb->andWhere('ass.anagrafica IS NULL');
  1430.                             }
  1431.                             if($data[$indici['codiceArticolo']] != ''){
  1432.                                 $qb $qb->andWhere('ass.codiceArticoloOriginale = :codOr')->setParameter('codOr'$data[$indici['codiceArticolo']]);
  1433.                             }else{
  1434.                                 $qb $qb->andWhere("ass.codiceArticoloOriginale IS NULL OR ass.codiceArticoloOriginale = ''");
  1435.                             }
  1436.                             if($data[$indici['codiceCliente']] != ''){
  1437.                                 $qb $qb->andWhere('ass.codiceAnagrafica = :codAna')->setParameter('codAna'$data[$indici['codiceCliente']]);
  1438.                             }else{
  1439.                                 $qb $qb->andWhere("ass.codiceAnagrafica IS NULL OR ass.codiceAnagrafica = ''");
  1440.                             }
  1441.                             $ritorno $qb->setMaxResults(1)->getQuery()->getResult();
  1442.                             $associazioneArticoloCliente null;
  1443.                             if (count($ritorno) > 0) {
  1444.                                 $associazioneArticoloCliente $ritorno[0];
  1445.                             }
  1446.                             if ($data[$indici['operazione']] == 'E') {
  1447.                                 if ($associazioneArticoloCliente != null) {
  1448.                                     $em->remove($associazioneArticoloCliente);
  1449.                                     $query_eseguite++;
  1450.                                 }
  1451.                             } else {
  1452.                                 if ($associazioneArticoloCliente == null) {
  1453.                                     $associazioneArticoloCliente = new AssociazioneArticoliCliente();
  1454.                                     $associazioneArticoloCliente->setMappaCategoriaArticoli($mappa);
  1455.                                     $associazioneArticoloCliente->setArticolo($articolo);
  1456.                                     $associazioneArticoloCliente->setVariante($variante);
  1457.                                     $associazioneArticoloCliente->setCliente($cliente);
  1458.                                     $associazioneArticoloCliente->setAnagrafica($anagrafica);
  1459.                                     $associazioneArticoloCliente->setCodiceAnagrafica($data[$indici['codiceCliente']]);
  1460.                                     $associazioneArticoloCliente->setCodiceArticoloOriginale($data[$indici['codiceArticolo']]);
  1461.                                     $associazioneArticoloCliente->setDataCreazione(new \DateTime());
  1462.                                     $associazioneArticoloCliente->setMarca($data[$indici['marca']]);
  1463.                                 }
  1464.                                 $associazioneArticoloCliente->setNome($data[$indici['assNome']]);
  1465.                                 $associazioneArticoloCliente->setCodice($data[$indici['assCodice']]);
  1466.                                 $associazioneArticoloCliente->setMarca($data[$indici['assMarca']]);
  1467.                                 $associazioneArticoloCliente->setDescrizione($data[$indici['assDescrizione']]);
  1468.                                 $associazioneArticoloCliente->setImmagineDimensione1($data[$indici['assImmagineDimensione1']]);
  1469.                                 $associazioneArticoloCliente->setCodiceDimensione1($data[$indici['assCodiceDimensione1']]);
  1470.                                 $associazioneArticoloCliente->setDescrizioneDimensione1($data[$indici['assDescrizioneDimensione1']]);
  1471.                                 $associazioneArticoloCliente->setImmagineDimensione2($data[$indici['assImmagineDimensione2']]);
  1472.                                 $associazioneArticoloCliente->setCodiceDimensione2($data[$indici['assCodiceDimensione2']]);
  1473.                                 $associazioneArticoloCliente->setDescrizioneDimensione2($data[$indici['assDescrizioneDimensione2']]);
  1474.                                 $associazioneArticoloCliente->setImmagineDimensione3($data[$indici['assImmagineDimensione3']]);
  1475.                                 $associazioneArticoloCliente->setCodiceDimensione3($data[$indici['assCodiceDimensione3']]);
  1476.                                 $associazioneArticoloCliente->setDescrizioneDimensione3($data[$indici['assDescrizioneDimensione3']]);
  1477.                                 $associazioneArticoloCliente->setImmagineDimensione4($data[$indici['assImmagineDimensione4']]);
  1478.                                 $associazioneArticoloCliente->setCodiceDimensione4($data[$indici['assCodiceDimensione4']]);
  1479.                                 $associazioneArticoloCliente->setDescrizioneDimensione4($data[$indici['assDescrizioneDimensione4']]);
  1480.                                 $associazioneArticoloCliente->setImmagineDimensione5($data[$indici['assImmagineDimensione5']]);
  1481.                                 $associazioneArticoloCliente->setCodiceDimensione5($data[$indici['assCodiceDimensione5']]);
  1482.                                 $associazioneArticoloCliente->setDescrizioneDimensione5($data[$indici['assDescrizioneDimensione5']]);
  1483.                                 $associazioneArticoloCliente->setDataModifica(new \DateTime());
  1484.                                 $em->persist($associazioneArticoloCliente);
  1485.                                 $query_eseguite++;
  1486.                             }
  1487.                         } else {
  1488.                             $errori .= ("RIGA: " . ($contatore $row) . ' -- Articolo con codice ' $data[$indici['codiceArticolo']] . ' non trovato!\n');
  1489.                         }
  1490.                         $row++;
  1491.                     }
  1492.                     $em->flush();
  1493.                     $em->clear();
  1494.                 }
  1495.                 $row $contatore $row;
  1496.                 if ($errori == "") {
  1497.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds' $rownull);
  1498.                     return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  1499.                 } else {
  1500.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), var_export($erroritrue), false'Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds' $rownull);
  1501.                     return new Response('Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row "</br>Lista Errori:</br>" $errori);
  1502.                 }
  1503.             } catch (\Exception|\Throwable $ex) {
  1504.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), $ex->getTraceAsString(), false'Errore importazione: ' $ex->getMessage(), null);
  1505.                 return new Response('Errore importazione (RIGA: ' $contatore ') : ' $ex->getMessage());
  1506.             }
  1507.         }else {
  1508.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null);
  1509.             return new Response("ERRORE PERMESSO");
  1510.         }
  1511.     }
  1512.     /**
  1513.      * @Route("/caricaRisorseAnagrafiche/{svuota}", name="carica_risorse_anagrafiche", defaults={"svuota"="0"})
  1514.      */
  1515.     public function caricaRisorseAnagrafiche(Request $request$svuota)
  1516.     {
  1517.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  1518.             ini_set('max_execution_time'900);
  1519.             ini_set('memory_limit', -1);
  1520.             $start microtime(true);
  1521.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  1522.             $em $this->servizi->doctrine->getManager();
  1523.             $user $this->servizi->OttieniUtenteCorrente();
  1524.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  1525.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  1526.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  1527.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  1528.             $repoRisorse $this->servizi->doctrine->getRepository(RisorseAnagrafiche::class);
  1529.             $errori "";
  1530.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /caricaRisorseAnagrafiche/' $svuota ' --- Inizio l\' importazione delle scontistiche delle anagrafiche'null);
  1531.             if($svuota == '1'){
  1532.                 $this->servizi->doctrine->getConnection()->executeQuery('TRUNCATE TABLE risorse_anagrafiche;');
  1533.                 $this->servizi->doctrine->getConnection()->executeQuery('TRUNCATE TABLE risorse_anagrafiche_colonne;');
  1534.                 $this->servizi->doctrine->getConnection()->executeQuery('TRUNCATE TABLE risorse_anagrafiche_colonne_valori;');
  1535.             }
  1536.             $root_path $pathFileBase "risorse_anagrafiche.csv";
  1537.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  1538.             $contatore 0;
  1539.             $query_eseguite 0;
  1540.             $row 0;
  1541.             $batch_size 50;
  1542.             /*
  1543.              * Index    Campo
  1544.                 0    codice_anagrafica
  1545.                 1    tipo_risorsa
  1546.                 2    path_file
  1547.                 3    nome_file
  1548.                 4    identificativo_unico_risorsa
  1549.                 5    categoria
  1550.                 6    operazione
  1551.                 7   visibile a cliente
  1552.                 8   dataRisorsa
  1553.                 9    codice_categoria1
  1554.                 10    codice_categoria2
  1555.                 11    codice_categoria3
  1556.                 12    codice_categoria4
  1557.                 13    codice_categoria5
  1558.                 14    codice_articolo
  1559.                 15    marca
  1560.                 16    codice_dimensione1
  1561.                 17    codice_dimensione2
  1562.                 18    codice_dimensione3
  1563.                 19    codice_dimensione4
  1564.                 20    codice_dimensione5
  1565.              */
  1566.             $indici = array(
  1567.                 "codiceAnagrafica" => 0,
  1568.                 "tipoRisorsa" => 1,
  1569.                 "pathFile" => 2,
  1570.                 "nomeFile" => 3,
  1571.                 "identificativoUnicoRisorsa" => 4,
  1572.                 "categoria" => 5,
  1573.                 "operazione" => 6,
  1574.                 "visibileACliente" => 7,
  1575.                 'dataRisorsa' => 8,
  1576.                 'codiceCategoria1' => 9,
  1577.                 'codiceCategoria2' => 10,
  1578.                 'codiceCategoria3' => 11,
  1579.                 'codiceCategoria4' => 12,
  1580.                 'codiceCategoria5' => 13,
  1581.                 'codiceArticolo' => 14,
  1582.                 'marca' => 15,
  1583.                 'codiceDimensione1' => 16,
  1584.                 'codiceDimensione2' => 17,
  1585.                 'codiceDimensione3' => 18,
  1586.                 'codiceDimensione4' => 19,
  1587.                 'codiceDimensione5' => 20
  1588.             );
  1589.             $tipiRisorsaAutorizzati $this->servizi->RitornaArrayTipoRisorsa();
  1590.             $tt = array();
  1591.             foreach ($tipiRisorsaAutorizzati as $key) {
  1592.                 array_push($tt$key);
  1593.             }
  1594.             $tipiRisorsaAutorizzati $tt;
  1595.             try {
  1596.                 if (($handle fopen($root_path"r")) !== false) {
  1597.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  1598.                         if ($row == 0) {
  1599.                             $row 1;
  1600.                             continue;
  1601.                         }
  1602.                         if ($query_eseguite >= $batch_size) {
  1603.                             $contatore $contatore $row 1;
  1604.                             $row 1;
  1605.                             $query_eseguite 0;
  1606.                             $em->flush();
  1607.                             $em->clear();
  1608.                         }
  1609.                         if(in_array($data[$indici['tipoRisorsa']], $tipiRisorsaAutorizzati)) {
  1610.                             $risorsa $repoRisorse->findOneBy(array('identificativoUnico' => $data[$indici['identificativoUnicoRisorsa']]));
  1611.                             if($data[$indici['operazione']] == 'E'){
  1612.                                 if($risorsa){
  1613.                                     $em->remove($risorsa);
  1614.                                     $query_eseguite++;
  1615.                                 }
  1616.                             }else {
  1617.                                 if (!$risorsa) {
  1618.                                     $risorsa = new RisorseAnagrafiche();
  1619.                                     $risorsa->setDataModifica(new \DateTime());
  1620.                                     $risorsa->setDataCreazione(new \DateTime());
  1621.                                     $risorsa->setCodiceAnagrafica($data[$indici['codiceAnagrafica']]);
  1622.                                     $risorsa->setCategoria($data[$indici['categoria']]);
  1623.                                     $risorsa->setIdentificativoUnico($data[$indici['identificativoUnicoRisorsa']]);
  1624.                                     $risorsa->setNomeFile($data[$indici['nomeFile']]);
  1625.                                     $risorsa->setPathFile($data[$indici["pathFile"]]);
  1626.                                     $risorsa->setTipoRisorsa($data[$indici['tipoRisorsa']]);
  1627.                                     if(count($data) >= 8)
  1628.                                         $risorsa->setVisibileAlCliente($data[$indici["visibileACliente"]]);
  1629.                                     if(count($data) >= 9){
  1630.                                         $valore $data[$indici['dataRisorsa']];
  1631.                                         if($valore != '' ){
  1632.                                             $format 'Ymd';
  1633.                                             if(strpos($valore'-') !== false)
  1634.                                                 $format 'Y-m-d';
  1635.                                             $risorsa->setDataRisorsa(\DateTime::createFromFormat($format$valore));
  1636.                                         }
  1637.                                     }
  1638.                                     if(count($data) >= 10){
  1639.                                         $risorsa->setCodiceCategoria1($data[$indici['codiceCategoria1']]);
  1640.                                         $risorsa->setCodiceCategoria2($data[$indici['codiceCategoria2']]);
  1641.                                         $risorsa->setCodiceCategoria3($data[$indici['codiceCategoria3']]);
  1642.                                         $risorsa->setCodiceCategoria4($data[$indici['codiceCategoria4']]);
  1643.                                         $risorsa->setCodiceCategoria5($data[$indici['codiceCategoria5']]);
  1644.                                         $risorsa->setCodiceArticolo($data[$indici['codiceArticolo']]);
  1645.                                         $risorsa->setMarca($data[$indici['marca']]);
  1646.                                         $risorsa->setCodiceDimensione1($data[$indici['codiceDimensione1']]);
  1647.                                         $risorsa->setCodiceDimensione2($data[$indici['codiceDimensione2']]);
  1648.                                         $risorsa->setCodiceDimensione3($data[$indici['codiceDimensione3']]);
  1649.                                         $risorsa->setCodiceDimensione4($data[$indici['codiceDimensione4']]);
  1650.                                         $risorsa->setCodiceDimensione5($data[$indici['codiceDimensione5']]);
  1651.                                     }
  1652.                                     $em->persist($risorsa);
  1653.                                     $query_eseguite++;
  1654.                                 } else {
  1655.                                     $risorsa->setDataModifica(new \DateTime());
  1656.                                     $risorsa->setCodiceAnagrafica($data[$indici['codiceAnagrafica']]);
  1657.                                     $risorsa->setCategoria($data[$indici['categoria']]);
  1658.                                     $risorsa->setNomeFile($data[$indici['nomeFile']]);
  1659.                                     $risorsa->setPathFile($data[$indici["pathFile"]]);
  1660.                                     $risorsa->setTipoRisorsa($data[$indici['tipoRisorsa']]);
  1661.                                     if(count($data) > 8)
  1662.                                         $risorsa->setVisibileAlCliente($data[$indici["visibileACliente"]]);
  1663.                                     if(count($data) >= 9){
  1664.                                         $valore $data[$indici['dataRisorsa']];
  1665.                                         if($valore != '' ){
  1666.                                             $format 'Ymd';
  1667.                                             if(strpos($valore'-') !== false)
  1668.                                                 $format 'Y-m-d';
  1669.                                             $risorsa->setDataRisorsa(\DateTime::createFromFormat($format$valore));
  1670.                                         }
  1671.                                     }
  1672.                                     if(count($data) >= 10){
  1673.                                         $risorsa->setCodiceCategoria1($data[$indici['codiceCategoria1']]);
  1674.                                         $risorsa->setCodiceCategoria2($data[$indici['codiceCategoria2']]);
  1675.                                         $risorsa->setCodiceCategoria3($data[$indici['codiceCategoria3']]);
  1676.                                         $risorsa->setCodiceCategoria4($data[$indici['codiceCategoria4']]);
  1677.                                         $risorsa->setCodiceCategoria5($data[$indici['codiceCategoria5']]);
  1678.                                         $risorsa->setCodiceArticolo($data[$indici['codiceArticolo']]);
  1679.                                         $risorsa->setMarca($data[$indici['marca']]);
  1680.                                         $risorsa->setCodiceDimensione1($data[$indici['codiceDimensione1']]);
  1681.                                         $risorsa->setCodiceDimensione2($data[$indici['codiceDimensione2']]);
  1682.                                         $risorsa->setCodiceDimensione3($data[$indici['codiceDimensione3']]);
  1683.                                         $risorsa->setCodiceDimensione4($data[$indici['codiceDimensione4']]);
  1684.                                         $risorsa->setCodiceDimensione5($data[$indici['codiceDimensione5']]);
  1685.                                     }
  1686.                                     $em->persist($risorsa);
  1687.                                     $query_eseguite++;
  1688.                                 }
  1689.                             }
  1690.                         }else{
  1691.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Tipo risorsa: ' $data[$indici['tipoRisorsa']] . ' non riconosciuto!'$user);
  1692.                         }
  1693.                         $row++;
  1694.                     }
  1695.                     $em->flush();
  1696.                     $em->clear();
  1697.                 }
  1698.                 $row $contatore $row;
  1699.                 if ($errori == "") {
  1700.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds' $rownull);
  1701.                     return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  1702.                 } else {
  1703.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), var_export($erroritrue), false'Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds' $rownull);
  1704.                     return new Response('Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row "</br>Lista Errori:</br>" $errori);
  1705.                 }
  1706.             } catch (\Exception|\Throwable $ex) {
  1707.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), $ex->getTraceAsString(), false'Errore importazione: ' $ex->getMessage(), null);
  1708.                 return new Response('Errore importazione (RIGA: ' $contatore ') : ' $ex->getMessage());
  1709.             }
  1710.         } else {
  1711.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null);
  1712.             return new Response("ERRORE PERMESSO");
  1713.         }
  1714.     } //OK
  1715.     /**
  1716.      * @Route("/caricaDisponibilitaPerFascia/{svuota}", name="carica_disponibilita_per_fascia", defaults={"svuota"="0"})
  1717.      */
  1718.     public function caricaDisponibilitaPerFascia(Request $request$svuota)
  1719.     {
  1720.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  1721.             ini_set('max_execution_time'900);
  1722.             ini_set('memory_limit', -1);
  1723.             $start microtime(true);
  1724.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  1725.             $em $this->servizi->doctrine->getManager();
  1726.             $user $this->servizi->OttieniUtenteCorrente();
  1727.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  1728.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  1729.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  1730.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  1731.             $repoMappa $this->servizi->doctrine->getRepository(MappaCategorieArticoli::class);
  1732.             $repoArticoli $this->servizi->doctrine->getRepository(Articoli::class);
  1733.             $repo $this->servizi->doctrine->getRepository(DisponibilitaAFasce::class);
  1734.             $repoVariante $this->servizi->doctrine->getRepository(Varianti::class);
  1735.             $errori "";
  1736.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /caricaDisponibilitaPerFascia/' $svuota ' --- Inizio l\' importazione delle disponibilità per fasce'null);
  1737.             if($svuota == '1'){
  1738.                 $this->servizi->doctrine->getConnection()->executeQuery('TRUNCATE TABLE disponibilita_afasce;');
  1739.             }
  1740.             $root_path $pathFileBase "disponibilita_per_fascia.csv";
  1741.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  1742.             $contatore 0;
  1743.             $query_eseguite 0;
  1744.             $row 0;
  1745.             $batch_size 50;
  1746.             /*
  1747.                 0    codice articolo
  1748.                 1    codice categoria 1
  1749.                 2    codice categoria 2
  1750.                 3    codice categoria 3
  1751.                 4    codice categoria 4
  1752.                 5    codice categoria 5
  1753.                 6    marca
  1754.                 7    disponibilita
  1755.                 8    etichetta
  1756.                 9    operazione
  1757.                 10    principale
  1758.                 11    codice_variante
  1759.              */
  1760.             $indici = array(
  1761.                 "codiceArticolo" => 0,
  1762.                 "categoria1" => 1,
  1763.                 "categoria2" => 2,
  1764.                 "categoria3" => 3,
  1765.                 "categoria4" => 4,
  1766.                 "categoria5" => 5,
  1767.                 "marca" => 6,
  1768.                 "disponiblita" => 7,
  1769.                 'etichetta' => 8,
  1770.                 'operazione' => 9,
  1771.                 'principale' => 10,
  1772.                 'codice_variante' => 11
  1773.             );
  1774.             try {
  1775.                 if (($handle fopen($root_path"r")) !== false) {
  1776.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  1777.                         if ($row == 0) {
  1778.                             $row 1;
  1779.                             continue;
  1780.                         }
  1781.                         if ($query_eseguite >= $batch_size) {
  1782.                             $contatore $contatore $row 1;
  1783.                             $row 1;
  1784.                             $query_eseguite 0;
  1785.                             $em->flush();
  1786.                             $em->clear();
  1787.                         }
  1788.                         $articolo $repoArticoli->findOneBy(array('codice' => $data[$indici['codiceArticolo']]));
  1789.                         if($articolo){
  1790.                             $qbMappa $repoMappa->createQueryBuilder('mappa_categorie_articoli')
  1791.                                 ->leftJoin('mappa_categorie_articoli.categoria1''cat1')
  1792.                                 ->leftJoin('mappa_categorie_articoli.categoria2''cat2')
  1793.                                 ->leftJoin('mappa_categorie_articoli.categoria3''cat3')
  1794.                                 ->leftJoin('mappa_categorie_articoli.categoria4''cat4')
  1795.                                 ->leftJoin('mappa_categorie_articoli.categoria5''cat5')
  1796.                                 ->leftJoin('mappa_categorie_articoli.articolo''art')
  1797.                                 ->where('art.codice = :art')->setParameter('art'$articolo->getCodice());
  1798.                             if($data[$indici['categoria1']] != ''){
  1799.                                 $qbMappa $qbMappa->andWhere('cat1.codice = :cat1')->setParameter('cat1'$data[$indici['categoria1']]);
  1800.                             }else{
  1801.                                 $qbMappa $qbMappa->andWhere('cat1.codice IS NULL');
  1802.                             }
  1803.                             if($data[$indici['categoria2']] != ''){
  1804.                                 $qbMappa $qbMappa->andWhere('cat2.codice = :cat2')->setParameter('cat2'$data[$indici['categoria2']]);
  1805.                             }else{
  1806.                                 $qbMappa $qbMappa->andWhere('cat2.codice IS NULL');
  1807.                             }
  1808.                             if($data[$indici['categoria3']] != ''){
  1809.                                 $qbMappa $qbMappa->andWhere('cat3.codice = :cat3')->setParameter('cat3'$data[$indici['categoria3']]);
  1810.                             }else{
  1811.                                 $qbMappa $qbMappa->andWhere('cat3.codice IS NULL');
  1812.                             }
  1813.                             if($data[$indici['categoria4']] != ''){
  1814.                                 $qbMappa $qbMappa->andWhere('cat4.codice = :cat4')->setParameter('cat4'$data[$indici['categoria4']]);
  1815.                             }else{
  1816.                                 $qbMappa $qbMappa->andWhere('cat4.codice IS NULL');
  1817.                             }
  1818.                             if($data[$indici['categoria5']] != ''){
  1819.                                 $qbMappa $qbMappa->andWhere('cat5.codice = :cat5')->setParameter('cat5'$data[$indici['categoria5']]);
  1820.                             }else{
  1821.                                 $qbMappa $qbMappa->andWhere('cat5.codice IS NULL');
  1822.                             }
  1823.                             $qbMappa $qbMappa->andWhere('mappa_categorie_articoli.marca = :marca')->setParameter('marca'$data[$indici['marca']])
  1824.                                 ->setMaxResults(1)->getQuery()->getResult();
  1825.                             if(count($qbMappa) > 0){
  1826.                                 $mappa $qbMappa[0];
  1827.                                 $variante $repoVariante->findOneBy(array('mappa' => $mappa'codiceVariante' => $data[$indici['codice_variante']]));
  1828.                                 $entita $repo->findOneBy(array('etichetta' => $data[$indici['etichetta']], 'articolo' => $articolo'mappa_categoria_articolo' => $mappa'variante' => $variante));
  1829.                                 if($data[$indici['operazione']] == 'E' && $entita != null){
  1830.                                     $em->remove($entita);
  1831.                                     $em->flush();
  1832.                                 }else if ($data[$indici['operazione']] != 'E'){
  1833.                                     if(!$entita) {
  1834.                                         $entita = new DisponibilitaAFasce();
  1835.                                         $entita->setArticolo($articolo);
  1836.                                         $entita->setVariante($variante);
  1837.                                         $entita->setMappaCategoriaArticolo($mappa);
  1838.                                         $entita->setEtichetta($data[$indici['etichetta']]);
  1839.                                         $entita->setDataCreazione(new \DateTime());
  1840.                                     }
  1841.                                     $entita->setDataModifica(new \DateTime());
  1842.                                     $entita->setPrincipale($data[$indici['principale']] == '1' true false);
  1843.                                     $entita->setDisponibilita(str_replace(',''.'$data[$indici['disponiblita']]));
  1844.                                     $em->persist($entita);
  1845.                                     $query_eseguite++;
  1846.                                 }
  1847.                             }else{
  1848.                                 $errori .= ("RIGA: " . ($contatore $row) . ' -- Mappa non trovata ');
  1849.                             }
  1850.                         }else{
  1851.                             $errori .= ("RIGA: " . ($contatore $row) . ' - Articolo: ' $data[$indici['codiceArticolo']] . ' non trovato!');
  1852.                         }
  1853.                         $row++;
  1854.                     }
  1855.                     $em->flush();
  1856.                     $em->clear();
  1857.                 }
  1858.                 $row $contatore $row;
  1859.                 if ($errori == "") {
  1860.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds' $rownull);
  1861.                     return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  1862.                 } else {
  1863.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), var_export($erroritrue), false'Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds' $rownull);
  1864.                     return new Response('Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row "</br>Lista Errori:</br>" $errori);
  1865.                 }
  1866.             } catch (\Exception|\Throwable $ex) {
  1867.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), $ex->getTraceAsString(), false'Errore importazione: (RIGA: ' $contatore ') :' $ex->getMessage(), null);
  1868.                 return new Response('Errore importazione (RIGA: ' $contatore ') : ' $ex->getMessage());
  1869.             }
  1870.         } else {
  1871.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null);
  1872.             return new Response("ERRORE PERMESSO");
  1873.         }
  1874.     } //OK
  1875.     /**
  1876.      * @Route("/caricaAssociazioneArticoliTipoOrdine/{svuota}", name="carica_associazione_articoli_tipo_ordine", defaults={"svuota"="0"})
  1877.      */
  1878.     public function caricaAssociazioneArticoliTipoOrdine(Request $request$svuota)
  1879.     {
  1880.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  1881.             ini_set('max_execution_time'900);
  1882.             ini_set('memory_limit', -1);
  1883.             $start microtime(true);
  1884.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  1885.             $em $this->servizi->doctrine->getManager();
  1886.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  1887.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  1888.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  1889.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  1890.             $repoMappa $this->servizi->doctrine->getRepository(MappaCategorieArticoli::class);
  1891.             $repoArticoli $this->servizi->doctrine->getRepository(Articoli::class);
  1892.             $repo $this->servizi->doctrine->getRepository(AssociazioneArticoliTipoOrdine::class);
  1893.             $repoTipoOrdine $this->servizi->doctrine->getRepository(TipoOrdine::class);
  1894.             $repoVariante $this->servizi->doctrine->getRepository(Varianti::class);
  1895.             $errori "";
  1896.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /caricaAssociazioneArticoliTipoOrdine/' $svuota ' --- Inizio l\' importazione delle associazione articoli tipo ordine'null);
  1897.             if($svuota == '1'){
  1898.                 $this->servizi->doctrine->getConnection()->executeQuery('TRUNCATE TABLE associazione_articoli_tipo_ordine;');
  1899.             }
  1900.             $root_path $pathFileBase "associazione_articoli_tipo_ordine.csv";
  1901.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  1902.             $contatore 0;
  1903.             $query_eseguite 0;
  1904.             $row 0;
  1905.             $batch_size 50;
  1906.             /*
  1907.                 0    codice articolo
  1908.                 1    codice categoria 1
  1909.                 2    codice categoria 2
  1910.                 3    codice categoria 3
  1911.                 4    codice categoria 4
  1912.                 5    codice categoria 5
  1913.                 6    marca
  1914.                 7    codice_variante
  1915.                 8    codice_tipo_ordine
  1916.                 9    operazione
  1917.              */
  1918.             $indici = array(
  1919.                 "codiceArticolo" => 0,
  1920.                 "categoria1" => 1,
  1921.                 "categoria2" => 2,
  1922.                 "categoria3" => 3,
  1923.                 "categoria4" => 4,
  1924.                 "categoria5" => 5,
  1925.                 "marca" => 6,
  1926.                 "codiceVariante" => 7,
  1927.                 'codiceTipoOrdine' => 8,
  1928.                 'operazione' => 9
  1929.             );
  1930.             try {
  1931.                 if (($handle fopen($root_path"r")) !== false) {
  1932.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  1933.                         if ($row == 0) {
  1934.                             $row 1;
  1935.                             continue;
  1936.                         }
  1937.                         if ($query_eseguite >= $batch_size) {
  1938.                             $contatore $contatore $row 1;
  1939.                             $row 1;
  1940.                             $query_eseguite 0;
  1941.                             $em->flush();
  1942.                             $em->clear();
  1943.                         }
  1944.                         $articolo $repoArticoli->findOneBy(array('codice' => $data[$indici['codiceArticolo']]));
  1945.                         if($articolo){
  1946.                             $qbMappa $repoMappa->createQueryBuilder('mappa_categorie_articoli')
  1947.                                 ->leftJoin('mappa_categorie_articoli.categoria1''cat1')
  1948.                                 ->leftJoin('mappa_categorie_articoli.categoria2''cat2')
  1949.                                 ->leftJoin('mappa_categorie_articoli.categoria3''cat3')
  1950.                                 ->leftJoin('mappa_categorie_articoli.categoria4''cat4')
  1951.                                 ->leftJoin('mappa_categorie_articoli.categoria5''cat5')
  1952.                                 ->leftJoin('mappa_categorie_articoli.articolo''art')
  1953.                                 ->where('art.codice = :art')->setParameter('art'$articolo->getCodice());
  1954.                             if($data[$indici['categoria1']] != ''){
  1955.                                 $qbMappa $qbMappa->andWhere('cat1.codice = :cat1')->setParameter('cat1'$data[$indici['categoria1']]);
  1956.                             }else{
  1957.                                 $qbMappa $qbMappa->andWhere('mappa_categorie_articoli.categoria1 IS NULL');
  1958.                             }
  1959.                             if($data[$indici['categoria2']] != ''){
  1960.                                 $qbMappa $qbMappa->andWhere('cat2.codice = :cat2')->setParameter('cat2'$data[$indici['categoria2']]);
  1961.                             }else{
  1962.                                 $qbMappa $qbMappa->andWhere('mappa_categorie_articoli.categoria2 IS NULL');
  1963.                             }
  1964.                             if($data[$indici['categoria3']] != ''){
  1965.                                 $qbMappa $qbMappa->andWhere('cat3.codice = :cat3')->setParameter('cat3'$data[$indici['categoria3']]);
  1966.                             }else{
  1967.                                 $qbMappa $qbMappa->andWhere('mappa_categorie_articoli.categoria3 IS NULL');
  1968.                             }
  1969.                             if($data[$indici['categoria4']] != ''){
  1970.                                 $qbMappa $qbMappa->andWhere('cat4.codice = :cat4')->setParameter('cat4'$data[$indici['categoria4']]);
  1971.                             }else{
  1972.                                 $qbMappa $qbMappa->andWhere('mappa_categorie_articoli.categoria4 IS NULL');
  1973.                             }
  1974.                             if($data[$indici['categoria5']] != ''){
  1975.                                 $qbMappa $qbMappa->andWhere('cat5.codice = :cat5')->setParameter('cat5'$data[$indici['categoria5']]);
  1976.                             }else{
  1977.                                 $qbMappa $qbMappa->andWhere('mappa_categorie_articoli.categoria5 IS NULL');
  1978.                             }
  1979.                             $qbMappa $qbMappa->andWhere('mappa_categorie_articoli.marca = :marca')->setParameter('marca'$data[$indici['marca']])
  1980.                                 ->setMaxResults(1)->getQuery();
  1981.                             $query $qbMappa->getSQL();
  1982.                             $risultati $qbMappa->getResult();
  1983.                             if(count($risultati) > 0){
  1984.                                 $mappa $risultati[0];
  1985.                                 $variante $data[$indici['codiceVariante']] != '' $repoVariante->findOneBy(array('mappa' => $mappa'codiceVariante' => $data[$indici['codiceVariante']])) : null;
  1986.                                 $tipoOrdine $repoTipoOrdine->findOneBy(array('codice' => $data[$indici['codiceTipoOrdine']]));
  1987.                                 if($tipoOrdine) {
  1988.                                     $entita $repo->findOneBy(array('tipoOrdine' => $tipoOrdine'articolo' => $articolo'mappaCategoriaArticolo' => $mappa'variante' => $variante));
  1989.                                     if ($data[$indici['operazione']] == 'E' && $entita != null) {
  1990.                                         $em->remove($entita);
  1991.                                         $em->flush();
  1992.                                     } else if ($data[$indici['operazione']] != 'E') {
  1993.                                         if (!$entita) {
  1994.                                             $entita = new AssociazioneArticoliTipoOrdine();
  1995.                                             $entita->setArticolo($articolo);
  1996.                                             $entita->setVariante($variante);
  1997.                                             $entita->setMappaCategoriaArticolo($mappa);
  1998.                                             $entita->setTipoOrdine($tipoOrdine);
  1999.                                             $entita->setDataCreazione(new \DateTime());
  2000.                                         }
  2001.                                         $entita->setDataModifica(new \DateTime());
  2002.                                         $em->persist($entita);
  2003.                                         $query_eseguite++;
  2004.                                     }
  2005.                                 }else{
  2006.                                     $errori .= ("RIGA: " . ($contatore $row) . ' -- Tipo ordine non trovato: ' $data[$indici['codiceTipoOrdine']] . "\n<br/>");
  2007.                                 }
  2008.                             }else{
  2009.                                 $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/>");
  2010.                             }
  2011.                         }else{
  2012.                             $errori .= ("RIGA: " . ($contatore $row) . ' - Articolo: ' $data[$indici['codiceArticolo']] . ' non trovato!' "\n<br/>");
  2013.                         }
  2014.                         $row++;
  2015.                     }
  2016.                     $em->flush();
  2017.                     $em->clear();
  2018.                 }
  2019.                 $row $contatore $row;
  2020.                 $this->generaAlberoAction($request"1");
  2021.                 if ($errori == "") {
  2022.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds' $rownull);
  2023.                     return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  2024.                 } else {
  2025.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), var_export($erroritrue), false'Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds' $rownull);
  2026.                     return new Response('Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row "</br>Lista Errori:</br>" $errori);
  2027.                 }
  2028.             } catch (\Exception|\Throwable $ex) {
  2029.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), $ex->getTraceAsString(), false'Errore importazione: ' $ex->getMessage(), null);
  2030.                 return new Response('Errore importazione (RIGA: ' $contatore ') : ' $ex->getMessage());
  2031.             }
  2032.         } else {
  2033.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null);
  2034.             return new Response("ERRORE PERMESSO");
  2035.         }
  2036.     } //OK
  2037.     /**
  2038.      * @Route("/caricaTipoOrdine/{svuota}", name="carica_tipo_ordine", defaults={"svuota"="0"})
  2039.      */
  2040.     public function caricaTipoOrdine(Request $request$svuota)
  2041.     {
  2042.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  2043.             ini_set('max_execution_time'900);
  2044.             ini_set('memory_limit', -1);
  2045.             $start microtime(true);
  2046.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  2047.             $em $this->servizi->doctrine->getManager();
  2048.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  2049.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  2050.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  2051.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  2052.             $repo $this->servizi->doctrine->getRepository(TipoOrdine::class);
  2053.             $errori "";
  2054.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /caricaTipoOrdine/' $svuota ' --- Inizio l\' importazione dei tipi ordine'null);
  2055.             if($svuota == '1'){
  2056.                 $this->servizi->doctrine->getConnection()->executeQuery('TRUNCATE TABLE tipo_ordine;');
  2057.             }
  2058.             $root_path $pathFileBase "tipo_ordine.csv";
  2059.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  2060.             $contatore 0;
  2061.             $query_eseguite 0;
  2062.             $row 0;
  2063.             $batch_size 50;
  2064.             /*
  2065.                 0    codice
  2066.                 1    descrizione
  2067.                 2    testo visualizzato
  2068.                 3    codice esportazione
  2069.                 4    operazione
  2070.                 5   mostra tutto
  2071.                 6   nascondi disponibilita
  2072.              */
  2073.             $indici = array(
  2074.                 'codice' => 0,
  2075.                 'descrizione' => 1,
  2076.                 'testoVisualizzato' => 2,
  2077.                 'codiceEsportazione' => 3,
  2078.                 'operazione' => 4,
  2079.                 'mostraTutto' => 5,
  2080.                 'nascondiDisponibilita' => 6
  2081.             );
  2082.             try {
  2083.                 if (($handle fopen($root_path"r")) !== false) {
  2084.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  2085.                         if ($row == 0) {
  2086.                             $row 1;
  2087.                             continue;
  2088.                         }
  2089.                         if ($query_eseguite >= $batch_size) {
  2090.                             $contatore $contatore $row 1;
  2091.                             $row 1;
  2092.                             $query_eseguite 0;
  2093.                             $em->flush();
  2094.                             $em->clear();
  2095.                         }
  2096.                         $tipoOrdine $repo->findOneBy(array('codice' => $data[$indici['codice']]));
  2097.                         if ($tipoOrdine && $data[$indici['operazione']] == 'E') {
  2098.                             $em->remove($tipoOrdine);
  2099.                             $query_eseguite++;
  2100.                         } else {
  2101.                             if (!$tipoOrdine) {
  2102.                                 $tipoOrdine = new TipoOrdine();
  2103.                                 $tipoOrdine->setDataCreazione(new \DateTime());
  2104.                                 $tipoOrdine->setCodice($data[$indici['codice']]);
  2105.                             }
  2106.                             $tipoOrdine->setDescrizione($data[$indici['descrizione']]);
  2107.                             $tipoOrdine->setTestoVisualizzato($data[$indici['testoVisualizzato']]);
  2108.                             $tipoOrdine->setCodiceEsportazione($data[$indici['codiceEsportazione']]);
  2109.                             $tipoOrdine->setMostraTutto($data[$indici['mostraTutto']] == '1' true false);
  2110.                             if(count($data) >= 5){
  2111.                                 $tipoOrdine->setNascondiDisponibilita($data[$indici['nascondiDisponibilita']] == '1' true false);
  2112.                             }
  2113.                             $tipoOrdine->setDataModifica(new \DateTime());
  2114.                             $tipoOrdine->setUtenteModifica($this->servizi->OttieniUtenteCorrente());
  2115.                             $em->persist($tipoOrdine);
  2116.                             $query_eseguite++;
  2117.                         }
  2118.                         $em->flush();
  2119.                         $em->clear();
  2120.                         $row $contatore $row;
  2121.                     }
  2122.                 }
  2123.                 if ($errori == "") {
  2124.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds' $rownull);
  2125.                     return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  2126.                 } else {
  2127.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), var_export($erroritrue), false'Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds' $rownull);
  2128.                     return new Response('Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row "</br>Lista Errori:</br>" $errori);
  2129.                 }
  2130.             } catch (\Exception|\Throwable $ex) {
  2131.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), $ex->getTraceAsString(), false'Errore importazione: ' $ex->getMessage(), null);
  2132.                 return new Response('Errore importazione (RIGA: ' $contatore ') : ' $ex->getMessage());
  2133.             }
  2134.         } else {
  2135.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null);
  2136.             return new Response("ERRORE PERMESSO");
  2137.         }
  2138.     } //OK
  2139.     /**
  2140.      * @Route("/aggiornaOrdini", name="aggiorna_ordini")
  2141.      */
  2142.     public function aggiornaOrdini(Request $request)
  2143.     {
  2144.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  2145.             ini_set('max_execution_time'900);
  2146.             ini_set('memory_limit', -1);
  2147.             $start microtime(true);
  2148.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  2149.             $em $this->servizi->doctrine->getManager();
  2150.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  2151.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  2152.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  2153.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  2154.             $repo $this->servizi->doctrine->getRepository(Ordini::class);
  2155.             $errori "";
  2156.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /aggiornaOrdini --- Inizio l\' aggiornamento degli ordini'null);
  2157.             $root_path $pathFileBase "aggiornamento_ordini.csv";
  2158.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  2159.             $contatore 0;
  2160.             $query_eseguite 0;
  2161.             $row 0;
  2162.             $batch_size 50;
  2163.             /*
  2164.                 0    id_ordine
  2165.                 1    fattura
  2166.                 2    nome_file_fattura
  2167.                 3    ddt
  2168.                 4    nome_file_ddt
  2169.                 5    ordine
  2170.                 6    nome_file_ordine
  2171.                 7    offerta
  2172.                 8    nome_file_offerta
  2173.                 9    url_tracking_vettore
  2174.                 10    vettore
  2175.                 11    codice_tracking_vettore
  2176.              */
  2177.             $indici = array(
  2178.                 'idOrdine' => 0,
  2179.                 'fattura' => 1,
  2180.                 'nomeFileFattura' => 2,
  2181.                 'ddt' => 3,
  2182.                 'nomeFileDdt' => 4,
  2183.                 'ordine' => 5,
  2184.                 'nomeFileOrdine' => 6,
  2185.                 'offerta' => 7,
  2186.                 'nomeFileOfferta' => 8,
  2187.                 'urlTrackingVettore' => 9,
  2188.                 'vettore' => 10,
  2189.                 'codiceTrackingVettore' => 11
  2190.             );
  2191.             try {
  2192.                 if (($handle fopen($root_path"r")) !== false) {
  2193.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  2194.                         if ($row == 0) {
  2195.                             $row 1;
  2196.                             continue;
  2197.                         }
  2198.                         if ($query_eseguite >= $batch_size) {
  2199.                             $contatore $contatore $row 1;
  2200.                             $row 1;
  2201.                             $query_eseguite 0;
  2202.                             $em->flush();
  2203.                             $em->clear();
  2204.                         }
  2205.                         /** $ordine Ordini */
  2206.                         $ordine $repo->find($data[$indici['idOrdine']]);
  2207.                         if($ordine) {
  2208.                             $ordine->setFattura($data[$indici["fattura"]]);
  2209.                             $ordine->setNomeFileFattura($data[$indici["nomeFileFattura"]]);
  2210.                             $ordine->setDdt($data[$indici['ddt']]);
  2211.                             $ordine->setNomeFileDdt($data[$indici['nomeFileDdt']]);
  2212.                             $ordine->setOrdine($data[$indici["ordine"]]);
  2213.                             $ordine->setNomeFileOrdine($data[$indici["nomeFileOrdine"]]);
  2214.                             $ordine->setOfferta($data[$indici["offerta"]]);
  2215.                             $ordine->setNomeFileOfferta($data[$indici["nomeFileOfferta"]]);
  2216.                             $ordine->setUrlTrackingVettore($data[$indici["urlTrackingVettore"]]);
  2217.                             $ordine->setVettore($data[$indici["vettore"]]);
  2218.                             $ordine->setCodiceTrackingVettore($data[$indici["codiceTrackingVettore"]]);
  2219.                             $em->persist($ordine);
  2220.                             $query_eseguite++;
  2221.                         }else{
  2222.                             $errori .= ("Ordine cond id: " $data[$indici['idOrdine']] . " non trovato!");
  2223.                         }
  2224.                         $row $contatore $row;
  2225.                     }
  2226.                     $em->flush();
  2227.                     $em->clear();
  2228.                 }
  2229.                 if ($errori == "") {
  2230.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds' $rownull);
  2231.                     return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  2232.                 } else {
  2233.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), var_export($erroritrue), false'Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds' $rownull);
  2234.                     return new Response('Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row "</br>Lista Errori:</br>" $errori);
  2235.                 }
  2236.             } catch (\Exception|\Throwable $ex) {
  2237.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), $ex->getTraceAsString(), false'Errore importazione: ' $ex->getMessage(), null);
  2238.                 return new Response('Errore importazione (RIGA: ' $contatore ') : ' $ex->getMessage());
  2239.             }
  2240.         } else {
  2241.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null);
  2242.             return new Response("ERRORE PERMESSO");
  2243.         }
  2244.     } //OK
  2245.     /**
  2246.      * @Route("/caricaFiltriVisualizzazioneArticoli/{svuota}", name="carica_filtri_visualizzazione_articoli", defaults={"svuota"="0"})
  2247.      */
  2248.     public function caricaFiltriVisualizzazioneArticoli(Request $request$svuota)
  2249.     {
  2250.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  2251.             ini_set('max_execution_time'900);
  2252.             ini_set('memory_limit', -1);
  2253.             $start microtime(true);
  2254.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  2255.             $em $this->servizi->doctrine->getManager();
  2256.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  2257.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  2258.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  2259.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  2260.             $repoUser $this->servizi->doctrine->getRepository(User::class);
  2261.             $repo $this->servizi->doctrine->getRepository(FiltroVisualizzazioneArticoliClienti::class);
  2262.             $errori "";
  2263.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /caricaFiltriVisualizzazioneArticoli/' $svuota ' --- Inizio l\' importazione dei filtri visualizzazione articoli'null);
  2264.             if($svuota == '1'){
  2265.                 $this->servizi->doctrine->getConnection()->exec('UPDATE fos_user SET filtro_visualizzazione_articoli_clienti_id = NULL;');
  2266.             }
  2267.             $root_path $pathFileBase "filtri_visualizzazione_articoli.csv";
  2268.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  2269.             $contatore 0;
  2270.             $query_eseguite 0;
  2271.             $row 0;
  2272.             $batch_size 50;
  2273.             /*
  2274.                 0    username
  2275.                 1    categorie
  2276.                 2    mostra
  2277.                 3    operazione
  2278.              */
  2279.             $indici = array(
  2280.                 "username" => 0,
  2281.                 "categorie" => 1,
  2282.                 "mostra" => 2,
  2283.                 "operazione" => 3
  2284.             );
  2285.             try {
  2286.                 if (($handle fopen($root_path"r")) !== false) {
  2287.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  2288.                         if ($row == 0) {
  2289.                             $row 1;
  2290.                             continue;
  2291.                         }
  2292.                         if ($query_eseguite >= $batch_size) {
  2293.                             $contatore $contatore $row 1;
  2294.                             $row 1;
  2295.                             $query_eseguite 0;
  2296.                             $em->flush();
  2297.                             $em->clear();
  2298.                         }
  2299.                         $utente $repoUser->findOneBy(array('username' => $data[$indici['username']]));
  2300.                         if ($utente) {
  2301.                             //Verifico se il filtro esiste
  2302.                             $entita $repo->findOneBy(array('elencoCategorie' => $data[$indici['categorie']], 'mostra' => $data[$indici['mostra']] == '1' true false));
  2303.                             if ($entita != null) {
  2304.                                 $utente->setFiltroVisualizzazioneArticoliClienti($entita);
  2305.                                 $em->persist($utente);
  2306.                             } else {
  2307.                                 $entita = new FiltroVisualizzazioneArticoliClienti();
  2308.                                 $entita->setNome(randomString(15));
  2309.                                 $entita->setUtenteModifica($this->servizi->OttieniUtenteCorrente());
  2310.                                 $entita->setDataModifica(new \DateTime());
  2311.                                 $entita->setDataCreazione(new \DateTime());
  2312.                                 $entita->setMostra($data[$indici['mostra']] == '1' true false);
  2313.                                 $entita->setElencoCategorie($data[$indici['categorie']]);
  2314.                                 $em->persist($entita);
  2315.                                 $utente->setFiltroVisualizzazioneArticoliClienti($entita);
  2316.                                 $em->persist($utente);
  2317.                                 $query_eseguite++;
  2318.                             }
  2319.                         } else {
  2320.                             $errori .= ("RIGA: " $contatore ' - Utente con username: ' $data[$indici['username']] . ' non trovato!');
  2321.                         }
  2322.                         $row++;
  2323.                     }
  2324.                     $em->flush();
  2325.                     $em->clear();
  2326.                     $row $contatore $row;
  2327.                     if ($errori == "") {
  2328.                         $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds' $rownull);
  2329.                         return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  2330.                     } else {
  2331.                         $this->ScriviRegistroAttivita(null$request->getClientIp(), var_export($erroritrue), false'Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds' $rownull);
  2332.                         return new Response('Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row "</br>Lista Errori:</br>" $errori);
  2333.                     }
  2334.                 }
  2335.             } catch (\Exception|\Throwable $ex) {
  2336.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), $ex->getTraceAsString(), false'Errore importazione: ' $ex->getMessage(), null);
  2337.                 return new Response('Errore importazione (RIGA: ' $contatore ') : ' $ex->getMessage());
  2338.             }
  2339.         } else {
  2340.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null);
  2341.             return new Response("ERRORE PERMESSO");
  2342.         }
  2343.     } //OK
  2344.     /**
  2345.      * @Route("/caricaScontiClientiAnagrafiche/{svuota}", name="carica_sconti_clienti_anagrafiche", defaults={"svuota"="0"})
  2346.      */
  2347.     public function caricaScontiAnagraficheAction(Request $request$svuota)
  2348.     {
  2349.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  2350.             ini_set('max_execution_time'900);
  2351.             ini_set('memory_limit', -1);
  2352.             $start microtime(true);
  2353.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  2354.             $em $this->servizi->doctrine->getManager();
  2355.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  2356.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  2357.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  2358.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  2359.             $repoScontiClientiBase $this->servizi->doctrine->getRepository(ScontiAnagrafiche::class);
  2360.             $errori "";
  2361.             $connection $this->servizi->doctrine->getConnection();
  2362.             if($svuota == "1"){
  2363.                 $em $this->servizi->doctrine->getManager();
  2364.                 $connection->beginTransaction();
  2365.                 try {
  2366.                     $connection->query("SET FOREIGN_KEY_CHECKS=0;");
  2367.                     $connection->executeUpdate("TRUNCATE `sconti_anagrafiche`;");
  2368.                     $connection->query("SET FOREIGN_KEY_CHECKS=1;");
  2369.                     $connection->commit();
  2370.                 }catch (\Exception|\Throwable|\Throwable $ex){
  2371.                     $this->servizi->DebuggaException($ex"Errore pulizia sconti anagrafiche");
  2372.                 }
  2373.             }
  2374.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /caricaScontiAnagrafiche/' $svuota ' --- Inizio l\' importazione delle scontistiche delle anagrafiche'null);
  2375.             $root_path $pathFileBase "articoli_sconti.csv";
  2376.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  2377.             $contatore 0;
  2378.             $query_eseguite 0;
  2379.             $row 0;
  2380.             $batch_size 50;
  2381.             /*
  2382.              * Index    Campo
  2383.                 0    codice_anagrafica
  2384.                 1    codice_articolo
  2385.                 2    codice_variante
  2386.                 3    etichetta
  2387.                 4    sconto
  2388.                 5    operazione
  2389.                 6   applica_sempre
  2390.                 7   codice_categorie
  2391.              */
  2392.             $indici = array(
  2393.                 "codiceAnagrafica" => 0,
  2394.                 "codiceGruppoAnagrafica" => '',
  2395.                 "codiceGruppoArticoli" => '',
  2396.                 "codiceArticolo" => 1,
  2397.                 "codiceVariante" => 2,
  2398.                 "etichetta" => 3,
  2399.                 "sconto" => 4,
  2400.                 "operazione" => 5,
  2401.                 'applicaSempre' => 6,
  2402.                 'codiceGruppoCategorie' => 7
  2403.             );
  2404.             try {
  2405.                 if (($handle fopen($root_path"r")) !== false) {
  2406.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  2407.                         if ($row == 0) {
  2408.                             $row 1;
  2409.                             continue;
  2410.                         }
  2411.                         if ($query_eseguite >= $batch_size) {
  2412.                             $contatore $contatore $row 1;
  2413.                             $row 1;
  2414.                             $query_eseguite 0;
  2415.                             $em->flush();
  2416.                             $em->clear();
  2417.                         }
  2418.                         $now = new \DateTime('now');
  2419.                         $criterioRicerca = [
  2420.                             'codiceAnagrafica' => $indici["codiceAnagrafica"] !== '' $data[$indici["codiceAnagrafica"]] : "",
  2421.                             'codiceGruppoAnagrafica' => $indici["codiceGruppoAnagrafica"] !== '' $data[$indici["codiceGruppoAnagrafica"]] : "",
  2422.                             'codiceGruppoArticoli' => $indici["codiceGruppoArticoli"] !== '' $data[$indici["codiceGruppoArticoli"]] : "",
  2423.                             'codiceVariante' => $indici["codiceVariante"] !== '' $data[$indici["codiceVariante"]] : "",
  2424.                             'codiceArticolo' => $indici["codiceArticolo"] !== '' $data[$indici["codiceArticolo"]] : "",
  2425.                         ];
  2426.                         if(count($data) > 7){
  2427.                             $criterioRicerca['codiceGruppoCategorie'] = $indici['codiceGruppoCategorie'] !== '' $data[$indici['codiceGruppoCategorie']] : "";
  2428.                         }
  2429.                         if(count($data) > ) {
  2430.                             $criterioRicerca['applicaSempre'] = $data[$indici['applicaSempre']] == '1' true false;
  2431.                         }
  2432.                         $scontoPresente $repoScontiClientiBase->findOneBy($criterioRicerca);
  2433.                         if ($scontoPresente) {
  2434.                             if ($data[$indici["operazione"]] == "E") {
  2435.                                 $em->remove($scontoPresente);
  2436.                                 $query_eseguite++;
  2437.                             } else {
  2438.                                 $scontoPresente->setSconto($indici["sconto"] !== '' $data[$indici["sconto"]] : "");
  2439.                                 if(count($data) > ){
  2440.                                     $scontoPresente->setApplicaSempre($data[$indici['applicaSempre']]);
  2441.                                 }
  2442.                                 $scontoPresente->setEtichetta($indici["etichetta"] !== '' $data[$indici["etichetta"]] : "");
  2443.                                 $scontoPresente->setDataModifica($now);
  2444.                                 $em->persist($scontoPresente);
  2445.                                 $query_eseguite++;
  2446.                             }
  2447.                         } else {
  2448.                             $scontoPresente = new ScontiAnagrafiche();
  2449.                             $scontoPresente->setCodiceAnagrafica($indici["codiceAnagrafica"] !== '' $data[$indici["codiceAnagrafica"]] : "");
  2450.                             $scontoPresente->setCodiceGruppoAnagrafica($indici["codiceGruppoAnagrafica"] !== '' $data[$indici["codiceGruppoAnagrafica"]] : "");
  2451.                             $scontoPresente->setCodiceGruppoArticoli($indici["codiceGruppoArticoli"] !== '' $data[$indici["codiceGruppoArticoli"]] : "");
  2452.                             $scontoPresente->setCodiceArticolo($indici["codiceArticolo"] !== '' $data[$indici["codiceArticolo"]] : "");
  2453.                             $scontoPresente->setCodiceVariante($indici["codiceVariante"] !== '' $data[$indici["codiceVariante"]] : "");
  2454.                             $scontoPresente->setSconto($indici["sconto"] !== '' $data[$indici["sconto"]] : "");
  2455.                             if(count($data) > ){
  2456.                                 $scontoPresente->setApplicaSempre($data[$indici['applicaSempre']]);
  2457.                             }
  2458.                             if(count($data) > 7){
  2459.                                 $scontoPresente->setCodiceGruppoCategorie($indici['codiceGruppoCategorie'] !== '' $data[$indici['codiceGruppoCategorie']] : "");
  2460.                             }
  2461.                             $scontoPresente->setEtichetta($indici["etichetta"] !== '' $data[$indici["etichetta"]] : "");
  2462.                             $scontoPresente->setDataCreazione($now);
  2463.                             $scontoPresente->setDataModifica($now);
  2464.                             $em->persist($scontoPresente);
  2465.                             $query_eseguite++;
  2466.                         }
  2467.                         $row++;
  2468.                         $em->flush();
  2469.                     }
  2470.                     $em->flush();
  2471.                     $em->clear();
  2472.                 }
  2473.                 $row $contatore $row;
  2474.                 if ($errori == "") {
  2475.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds' $rownull);
  2476.                     return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  2477.                 } else {
  2478.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), var_export($erroritrue), false'Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds' $rownull);
  2479.                     return new Response('Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row "</br>Lista Errori:</br>" $errori);
  2480.                 }
  2481.             } catch (\Exception|\Throwable $ex) {
  2482.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), $ex->getTraceAsString(), false'Errore importazione: ' $ex->getMessage(), null);
  2483.                 return new Response('Errore importazione (RIGA: ' $contatore ') : ' $ex->getMessage());
  2484.             }
  2485.         } else {
  2486.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null);
  2487.             return new Response("ERRORE PERMESSO");
  2488.         }
  2489.     } //OK
  2490.     /**
  2491.      * @Route("/caricaAnagraficheOpzioniAggiuntive/{svuota}", name="carica_anagrafiche_opzioni_aggiuntive", defaults={"svuota"="0"})
  2492.      */
  2493.     public function caricaAnagraficheOpzioniAggiuntive(Request $request$svuota)
  2494.     {
  2495.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  2496.             ini_set('max_execution_time'900);
  2497.             ini_set('memory_limit', -1);
  2498.             $start microtime(true);
  2499.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  2500.             $em $this->servizi->doctrine->getManager();
  2501.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  2502.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  2503.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  2504.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  2505.             $repo $this->servizi->doctrine->getRepository(AnagraficaOpzioniAggiuntive::class);
  2506.             $errori "";
  2507.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /caricaAnagraficheOpzioniAggiuntive/' $svuota ' --- Inizio l\' importazione delle scontistiche delle anagrafiche'null);
  2508.             if($svuota == '1'){
  2509.                 $this->servizi->doctrine->getConnection()->executeQuery('TRUNCATE TABLE anagrafica_opzioni_aggiuntive;');
  2510.             }
  2511.             $root_path $pathFileBase "anagrafiche_opzioni_aggiuntive.csv";
  2512.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  2513.             $contatore 0;
  2514.             $query_eseguite 0;
  2515.             $row 0;
  2516.             $batch_size 50;
  2517.             /*
  2518.              Index    Campo
  2519.                 0    codice_anagrafica
  2520.                 1    ordine
  2521.                 2    identificativo
  2522.                 3    etichetta
  2523.                 4    valore
  2524.                 5    operazione
  2525.                 6    tipo
  2526.              */
  2527.             $indici = array(
  2528.                 "codiceAnagrafica" => 0,
  2529.                 "ordine" => 1,
  2530.                 "identificativo" => 2,
  2531.                 "etichetta" => 3,
  2532.                 "valore" => 4,
  2533.                 "tipo" => 6,
  2534.                 "operazione" => 5
  2535.             );
  2536.             try {
  2537.                 if (($handle fopen($root_path"r")) !== false) {
  2538.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  2539.                         if ($row == 0) {
  2540.                             $row 1;
  2541.                             continue;
  2542.                         }
  2543.                         if ($query_eseguite >= $batch_size) {
  2544.                             $contatore $contatore $row 1;
  2545.                             $row 1;
  2546.                             $query_eseguite 0;
  2547.                             $em->flush();
  2548.                             $em->clear();
  2549.                         }
  2550.                         $now = new \DateTime('now');
  2551.                         try {
  2552.                             $opzioneAgg $repo->findOneBy(array(
  2553.                                 'codiceAnagrafica' => $data[$indici["codiceAnagrafica"]],
  2554.                                 'identificativo' => $data[$indici["identificativo"]]
  2555.                             ));
  2556.                             if ($opzioneAgg) {
  2557.                                 if ($data[$indici["operazione"]] == "E") {
  2558.                                     $em->remove($opzioneAgg);
  2559.                                     $query_eseguite++;
  2560.                                 } else {
  2561.                                     $opzioneAgg->setEtichetta($indici["etichetta"] !== '' $data[$indici["etichetta"]] : '');
  2562.                                     $opzioneAgg->setOrdine($indici["ordine"] !== '' $data[$indici["ordine"]] : '');
  2563.                                     $opzioneAgg->setValore($indici["valore"] !== '' $data[$indici["valore"]] : '');
  2564.                                     $opzioneAgg->setTipo($indici["tipo"] !== '' $data[$indici["tipo"]] : '');
  2565.                                     $opzioneAgg->setDataModifica($now);
  2566.                                     $em->persist($opzioneAgg);
  2567.                                     $query_eseguite++;
  2568.                                 }
  2569.                             } else {
  2570.                                 $opzioneAgg = new AnagraficaOpzioniAggiuntive();
  2571.                                 $opzioneAgg->setCodiceAnagrafica($indici["codiceAnagrafica"] !== '' $data[$indici["codiceAnagrafica"]] : '');
  2572.                                 $opzioneAgg->setOrdine($indici["ordine"] !== '' $data[$indici["ordine"]] : '');
  2573.                                 $opzioneAgg->setIdentificativo($indici["identificativo"] !== '' $data[$indici["identificativo"]] : '');
  2574.                                 $opzioneAgg->setEtichetta($indici["etichetta"] !== '' $data[$indici["etichetta"]] : '');
  2575.                                 $opzioneAgg->setValore($indici["valore"] !== '' $data[$indici["valore"]] : '');
  2576.                                 $opzioneAgg->setTipo($indici["tipo"] !== '' $data[$indici["tipo"]] : '');
  2577.                                 $opzioneAgg->setDataCreazione($now);
  2578.                                 $opzioneAgg->setDataModifica($now);
  2579.                                 $em->persist($opzioneAgg);
  2580.                                 $query_eseguite++;
  2581.                             }
  2582.                         } catch (\Exception|\Throwable $ex) {
  2583.                             $this->ScriviRegistroAttivita(null$request->getClientIp(), $ex->getTraceAsString(), false'Errore importazione: (RIGA: ' $contatore '): ' $ex->getMessage(), null);
  2584.                             $errori .= ('Errore importazione (RIGA: ' $contatore ') : ' $ex->getMessage() . '<br>');
  2585.                         }
  2586.                         $row++;
  2587.                         $em->flush();
  2588.                     }
  2589.                     $em->flush();
  2590.                     $em->clear();
  2591.                 }
  2592.                 $row $contatore $row;
  2593.                 if ($errori == "") {
  2594.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds' $rownull);
  2595.                     return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  2596.                 } else {
  2597.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), var_export($erroritrue), false'Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds' $rownull);
  2598.                     return new Response('Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row "</br>Lista Errori:</br>" $errori);
  2599.                 }
  2600.             } catch (\Exception|\Throwable $ex) {
  2601.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), $ex->getTraceAsString(), false'Errore importazione: (RIGA: ' $contatore '): ' $ex->getMessage(), null);
  2602.                 return new Response('Errore importazione (RIGA: ' $contatore ') : ' $ex->getMessage());
  2603.             }
  2604.         } else {
  2605.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null);
  2606.             return new Response("ERRORE PERMESSO");
  2607.         }
  2608.     } //OK
  2609.     function randomString($length 6)
  2610.     {
  2611.         $str "";
  2612.         $characters array_merge(range('A''Z'), range('a''z'), range('0''9'));
  2613.         $max count($characters) - 1;
  2614.         for ($i 0$i $length$i++) {
  2615.             $rand mt_rand(0$max);
  2616.             $str .= $characters[$rand];
  2617.         }
  2618.         return $str;
  2619.     }
  2620.     /**
  2621.      * @Route("/caricaUnitaDiMisura", name="carica_unita_misura")
  2622.      */
  2623.     public function caricaUnitaDiMisura(Request $request)
  2624.     {
  2625.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  2626.             ini_set('max_execution_time'1200);
  2627.             ini_set('memory_limit', -1);
  2628.             $start microtime(true);
  2629.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  2630.             $em $this->servizi->doctrine->getManager();
  2631.             $repo $this->servizi->doctrine->getRepository(UnitaMisura::class);
  2632.             $errori "";
  2633.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  2634.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  2635.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  2636.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  2637.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /caricaUnitaDiMisura --- Inizio l\' importazione dei dati'null);
  2638.             $errori "";
  2639.             $root_path $pathFileBase "um.csv";
  2640.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  2641.             $contatore 0;
  2642.             $row 0;
  2643.             $query_eseguite 0;
  2644.             $batch_size 50;
  2645.             /*
  2646.              *  0    codice
  2647.                 1    descrizione
  2648.                 2    fattore conversione
  2649.                 3    numero decimali
  2650.              */
  2651.             try {
  2652.                 if (($handle fopen($root_path"r")) !== false) {
  2653.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  2654.                         if ($row == 0) {
  2655.                             $row 1;
  2656.                             continue;
  2657.                         }
  2658.                         if ($query_eseguite >= $batch_size) {
  2659.                             $contatore $contatore $row 1;
  2660.                             $row 1;
  2661.                             $query_eseguite 0;
  2662.                             $em->flush();
  2663.                             $em->clear();
  2664.                         }
  2665.                         $now = new \DateTime('now');
  2666.                         try {
  2667.                             $umDb $repo->findOneBy(array('codice' => $data[0]));
  2668.                             if ($umDb) {
  2669.                                 $umDb->setDescrizione($data[1]);
  2670.                                 $umDb->setFattoreConversione(str_replace(',''.'$data[2]));
  2671.                                 $umDb->setNumeroDecimali(str_replace(',''.'$data[3]));
  2672.                                 $umDb->setDataModifica(new \DateTime());
  2673.                             } else {
  2674.                                 $umDb = new UnitaMisura();
  2675.                                 $umDb->setCodice($data[0]);
  2676.                                 $umDb->setDescrizione($data[1]);
  2677.                                 $umDb->setFattoreConversione(str_replace(',''.'$data[2]));
  2678.                                 $umDb->setNumeroDecimali(str_replace(',''.'$data[3]));
  2679.                                 $umDb->setAttivo(true);
  2680.                                 $umDb->setDataCreazione(new \DateTime());
  2681.                                 $umDb->setDataModifica(new \DateTime());
  2682.                             }
  2683.                             $em->persist($umDb);
  2684.                         } catch (\PDOException $ex) {
  2685.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione: ' $ex->getMessage(), null);
  2686.                         } catch (\Exception|\Throwable $exception) {
  2687.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione: ' $exception->getMessage(), null);
  2688.                         }
  2689.                         $row++;
  2690.                         $em->flush();
  2691.                     }
  2692.                 }
  2693.                 $em->flush();
  2694.                 $row $contatore $row 1;
  2695.                 if ($errori == "") {
  2696.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull);
  2697.                     return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  2698.                 } else {
  2699.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull);
  2700.                     return new Response('Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row "</br>Lista Errori:</br>" $errori);
  2701.                 }
  2702.             } catch (\Exception|\Throwable $ex) {
  2703.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ' $ex->getMessage(), null);
  2704.                 return new Response('Errore importazione (RIGA: ' $contatore ') : ' $ex->getMessage());
  2705.             }
  2706.         } else {
  2707.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null);
  2708.             return new Response("ERRORE PERMESSO");
  2709.         }
  2710.     } //OK
  2711.     /**
  2712.      * @Route("/caricaNazioni", name="carica_nazioni")
  2713.      */
  2714.     public function caricaNazioni(Request $request)
  2715.     {
  2716.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  2717.             ini_set('max_execution_time'1200);
  2718.             ini_set('memory_limit', -1);
  2719.             $start microtime(true);
  2720.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  2721.             $em $this->servizi->doctrine->getManager();
  2722.             $repo $this->servizi->doctrine->getRepository(Nazioni::class);
  2723.             $errori "";
  2724.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  2725.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  2726.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  2727.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  2728.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /caricaNazioni --- Inizio l\' importazione dei dati'null);
  2729.             $errori "";
  2730.             $root_path $pathFileBase "nazioni.csv";
  2731.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  2732.             $contatore 0;
  2733.             $row 0;
  2734.             $query_eseguite 0;
  2735.             $batch_size 50;
  2736.             /*
  2737.              *  0    sigla iso
  2738.                 1    descrizione
  2739.                 2    flag paese cee
  2740.                 3    flag black list
  2741.                 4    operazione
  2742.              */
  2743.             try {
  2744.                 if (($handle fopen($root_path"r")) !== false) {
  2745.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  2746.                         if ($row == 0) {
  2747.                             $row 1;
  2748.                             continue;
  2749.                         }
  2750.                         if ($query_eseguite >= $batch_size) {
  2751.                             $contatore $contatore $row 1;
  2752.                             $row 1;
  2753.                             $query_eseguite 0;
  2754.                             $em->flush();
  2755.                             $em->clear();
  2756.                         }
  2757.                         $now = new \DateTime('now');
  2758.                         try {
  2759.                             $entity $repo->findOneBy(array('siglaIso' => $data[0]));
  2760.                             if ($entity) {
  2761.                                 if ($data[4] == "E") {
  2762.                                     $em->remove($entity);
  2763.                                     $query_eseguite++;
  2764.                                 } else {
  2765.                                     $entity->setDataModifica($now);
  2766.                                     $entity->setDescrizione($data[1]);
  2767.                                     $entity->setPaeseCee($data[2] == "1" true false);
  2768.                                     $entity->setBlacklist($data[3] == "1" true false);
  2769.                                     $em->persist($entity);
  2770.                                     $query_eseguite++;
  2771.                                 }
  2772.                             } else {
  2773.                                 $entity = new Nazioni();
  2774.                                 $entity->setSiglaIso($data[0]);
  2775.                                 $entity->setDescrizione($data[1]);
  2776.                                 $entity->setPaeseCee($data[2] == "1" true false);
  2777.                                 $entity->setBlacklist($data[3] == "1" true false);
  2778.                                 $entity->setDataCreazione($now);
  2779.                                 $entity->setDataModifica($now);
  2780.                                 $em->persist($entity);
  2781.                                 $query_eseguite++;
  2782.                             }
  2783.                         } catch (\PDOException $ex) {
  2784.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione: ' $ex->getMessage(), null);
  2785.                         } catch (\Exception|\Throwable $exception) {
  2786.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione: ' $exception->getMessage(), null);
  2787.                         }
  2788.                         $row++;
  2789.                         $em->flush();
  2790.                     }
  2791.                 }
  2792.                 $em->flush();
  2793.                 $row $contatore $row 1;
  2794.                 if ($errori == "") {
  2795.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull);
  2796.                     return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  2797.                 } else {
  2798.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull);
  2799.                     return new Response('Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row "</br>Lista Errori:</br>" $errori);
  2800.                 }
  2801.             } catch (\Exception|\Throwable $ex) {
  2802.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ' $ex->getMessage(), null);
  2803.                 return new Response('Errore importazione (RIGA: ' $contatore ') : ' $ex->getMessage());
  2804.             }
  2805.         } else {
  2806.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null);
  2807.             return new Response("ERRORE PERMESSO");
  2808.         }
  2809.     } //OK
  2810.     /**
  2811.      * @Route("/caricaBlocchiAnagrafiche/{svuota}", name="carica_blocchi_anagrafiche", defaults={"svuota" = 0})
  2812.      */
  2813.     public function caricaBlocchiAnagrafiche(Request $request$svuota 0)
  2814.     {
  2815.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  2816.             ini_set('max_execution_time'1200);
  2817.             ini_set('memory_limit', -1);
  2818.             $start microtime(true);
  2819.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  2820.             $em $this->servizi->doctrine->getManager();
  2821.             $repo $this->servizi->doctrine->getRepository(AnagraficheBlocchi::class);
  2822.             $errori "";
  2823.             /** @var User|null $user */
  2824.             $user $this->servizi->OttieniUtenteCorrente();
  2825.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  2826.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  2827.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  2828.             $svuota = ($svuota == '1' true false);
  2829.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  2830.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /caricaBlocchiAnagrafiche --- Inizio l\' importazione dei dati' . ($svuota ' con svuotamento tabella' ''), null);
  2831.             $errori "";
  2832.             $root_path $pathFileBase "blocchi_anagrafiche.csv";
  2833.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  2834.             $contatore 0;
  2835.             $row 0;
  2836.             $query_eseguite 0;
  2837.             $batch_size 50;
  2838.             if($svuota){
  2839.                 $this->servizi->doctrine->getConnection()->executeQuery("TRUNCATE TABLE anagrafiche_blocchi;");
  2840.             }
  2841.             /*
  2842.              *  0    codice_cliente
  2843.                 1    identificativo_blocco
  2844.                 2    tipo_blocco
  2845.                 3    mostra_avviso
  2846.                 4    testo_avviso
  2847.                 5    vincola_a_codice_agente
  2848.                 6    operazione
  2849.              */
  2850.             $indici = array(
  2851.                 "codiceCliente" => 0,
  2852.                 "identificativoBlocco" => 1,
  2853.                 "tipoBlocco" => 2,
  2854.                 "mostraAvviso" => 3,
  2855.                 "testoAvviso" => 4,
  2856.                 "vincolaACodiceAgente" => 5,
  2857.                 "operazione" => 6
  2858.             );
  2859.             try {
  2860.                 if (($handle fopen($root_path"r")) !== false) {
  2861.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  2862.                         if ($row == 0) {
  2863.                             $row 1;
  2864.                             continue;
  2865.                         }
  2866.                         if ($query_eseguite >= $batch_size) {
  2867.                             $contatore $contatore $row 1;
  2868.                             $row 1;
  2869.                             $query_eseguite 0;
  2870.                             $em->flush();
  2871.                             $em->clear();
  2872.                         }
  2873.                         try {
  2874.                             $entity null;
  2875.                             if (!$svuota && $data[$indici['identificativoBlocco']] != ''){
  2876.                                 $entity $repo->findOneBy(array('codiceCliente' => $data[$indici['codiceCliente']], 'identificativoBlocco' => $data[$indici['identificativoBlocco']]));
  2877.                             }
  2878.                             if ($entity) {
  2879.                                 if ($data[$indici['operazione']] == "E") {
  2880.                                     $em->remove($entity);
  2881.                                     $query_eseguite++;
  2882.                                 } else {
  2883.                                     $entity->setDataModifica(new \DateTime());
  2884.                                     $entity->setTipoBlocco($data[$indici['tipoBlocco']]);
  2885.                                     $entity->setMostraAvviso($data[$indici['mostraAvviso']] == '1' true false);
  2886.                                     $entity->setTestoAvviso($data[$indici['testoAvviso']]);
  2887.                                     $entity->setVincolaACodiceAgente($data[$indici['vincolaACodiceAgente']]);
  2888.                                     $em->persist($entity);
  2889.                                     $query_eseguite++;
  2890.                                 }
  2891.                             } else {
  2892.                                 $entity = new AnagraficheBlocchi();
  2893.                                 $entity->setDataModifica(new \DateTime());
  2894.                                 $entity->setTipoBlocco($data[$indici['tipoBlocco']]);
  2895.                                 $entity->setMostraAvviso($data[$indici['mostraAvviso']] == '1' true false);
  2896.                                 $entity->setTestoAvviso($data[$indici['testoAvviso']]);
  2897.                                 $entity->setVincolaACodiceAgente($data[$indici['vincolaACodiceAgente']]);
  2898.                                 $entity->setCodiceCliente($data[$indici['codiceCliente']]);
  2899.                                 $entity->setDataCreazione(new \DateTime());
  2900.                                 $em->persist($entity);
  2901.                                 $query_eseguite++;
  2902.                             }
  2903.                         } catch (\PDOException $ex) {
  2904.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione: ' $ex->getMessage(), null);
  2905.                         } catch (\Exception|\Throwable $exception) {
  2906.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione: ' $exception->getMessage(), null);
  2907.                         }
  2908.                         $row++;
  2909.                         $em->flush();
  2910.                     }
  2911.                 }
  2912.                 $em->flush();
  2913.                 $row $contatore $row 1;
  2914.                 if ($errori == "") {
  2915.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull);
  2916.                     return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  2917.                 } else {
  2918.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull);
  2919.                     return new Response('Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row "</br>Lista Errori:</br>" $errori);
  2920.                 }
  2921.             } catch (\Exception|\Throwable $ex) {
  2922.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ' $ex->getMessage(), null);
  2923.                 return new Response('Errore importazione (RIGA: ' $contatore ') : ' $ex->getMessage());
  2924.             }
  2925.         } else {
  2926.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null);
  2927.             return new Response("ERRORE PERMESSO");
  2928.         }
  2929.     } //OK
  2930.     /**
  2931.      * @Route("/caricaAttributiArticoli", name="carica_attributi_articoli")
  2932.      */
  2933.     public function carticaAttributiArticoli(Request $request$svuota 0)
  2934.     {
  2935.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  2936.             ini_set('max_execution_time'1200);
  2937.             ini_set('memory_limit', -1);
  2938.             $start microtime(true);
  2939.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  2940.             $em $this->servizi->doctrine->getManager();
  2941.             $repo $this->servizi->doctrine->getRepository(Attributi::class);
  2942.             $repoAssociazioneAtt $this->servizi->doctrine->getRepository(AssociazioneAttributi::class);
  2943.             $repoMappa $this->servizi->doctrine->getRepository(MappaCategorieArticoli::class);
  2944.             $repoArticoli $this->servizi->doctrine->getRepository(Articoli::class);
  2945.             $errori "";
  2946.             /** @var User|null $user */
  2947.             $user $this->servizi->OttieniUtenteCorrente();
  2948.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  2949.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  2950.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  2951.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  2952.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /caricaAttributiArticoli --- Inizio l\' importazione dei dati' . ($svuota ' con svuotamento tabella' ''), null);
  2953.             $errori "";
  2954.             $root_path $pathFileBase "attributi_articoli.csv";
  2955.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  2956.             $contatore 0;
  2957.             $row 0;
  2958.             $query_eseguite 0;
  2959.             $batch_size 50;
  2960.             $indiciPrimaRiga = array();
  2961.             try {
  2962.                 if (($handle fopen($root_path"r")) !== false) {
  2963.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  2964.                         if ($row == 0) {
  2965.                             for($i 0$i count($data); $i++){
  2966.                                 $indiciPrimaRiga[$i] = $data[$i];
  2967.                             }
  2968.                             $row 1;
  2969.                             continue;
  2970.                         }
  2971.                         if ($query_eseguite >= $batch_size) {
  2972.                             $contatore $contatore $row 1;
  2973.                             $row 1;
  2974.                             $query_eseguite 0;
  2975.                             $em->flush();
  2976.                             $em->clear();
  2977.                         }
  2978.                         try {
  2979.                             $articolo $repoArticoli->findOneBy(array('codice' => $data[0]));
  2980.                             if($articolo){
  2981.                                 $mappa $repoMappa->findOneBy(array('articolo' => $articolo'marca' => $data[1]));
  2982.                                 if($mappa){
  2983.                                     for($i 2$i count($indiciPrimaRiga); $i++){
  2984.                                         if($data[$i] != '') {
  2985.                                             $attributo $repo->findOneBy(array('nome' => $indiciPrimaRiga[$i]));
  2986.                                             if (!$attributo) {
  2987.                                                 $attributo = new Attributi();
  2988.                                                 $attributo->setNome($indiciPrimaRiga[$i]);
  2989.                                                 $attributo->setTestoVisualizzato($indiciPrimaRiga[$i]);
  2990.                                                 $attributo->setCodiceIdentificativo($indiciPrimaRiga[$i]);
  2991.                                                 $attributo->setDataCreazione(new \DateTime());
  2992.                                                 $attributo->setDataModifica(new \DateTime());
  2993.                                                 $em->persist($attributo);
  2994.                                                 $em->flush();
  2995.                                             }
  2996.                                             $assAtt $repoAssociazioneAtt->findOneBy(array('mappaCategoriaArticolo' => $mappa'articolo' => $articolo'attributo' => $attributo));
  2997.                                             if (!$assAtt) {
  2998.                                                 $assAtt = new AssociazioneAttributi();
  2999.                                                 $assAtt->setDataCreazione(new \DateTime());
  3000.                                                 $assAtt->setDataModifica(new \DateTime());
  3001.                                                 $assAtt->setMappaCategoriaArticolo($mappa);
  3002.                                                 $assAtt->setArticolo($articolo);
  3003.                                                 $assAtt->setAttributo($attributo);
  3004.                                                 $assAtt->setValore(str_replace(',''.'$data[$i]));
  3005.                                                 $em->persist($assAtt);
  3006.                                                 $query_eseguite++;
  3007.                                             } else {
  3008.                                                 $assAtt->setDataModifica(new \DateTime());
  3009.                                                 $assAtt->setValore(str_replace(',''.'$data[$i]));
  3010.                                                 $em->persist($assAtt);
  3011.                                                 $query_eseguite++;
  3012.                                             }
  3013.                                         }
  3014.                                     }
  3015.                                 }else{
  3016.                                     $errori .= 'Errore carica attributi articoli! Mappa articolo con codice articolo: ' $data[0] . ' e marca: ' $data[1] . ' non trovata!<br/>';
  3017.                                 }
  3018.                             }else{
  3019.                                 $errori .= 'Errore carica attributi articoli! Articolo con codice: ' $data[0] . ' non trovato!<br/>';
  3020.                             }
  3021.                         } catch (\PDOException $ex) {
  3022.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione: ' $ex->getMessage(), null);
  3023.                         } catch (\Exception|\Throwable $exception) {
  3024.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione: ' $exception->getMessage(), null);
  3025.                         }
  3026.                         $row++;
  3027.                         $em->flush();
  3028.                     }
  3029.                 }
  3030.                 $em->flush();
  3031.                 $row $contatore $row 1;
  3032.                 if ($errori == "") {
  3033.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull);
  3034.                     return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  3035.                 } else {
  3036.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull);
  3037.                     return new Response('Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row "</br>Lista Errori:</br>" $errori);
  3038.                 }
  3039.             } catch (\Exception|\Throwable $ex) {
  3040.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ' $ex->getMessage(), null);
  3041.                 return new Response('Errore importazione (RIGA: ' $contatore ') : ' $ex->getMessage());
  3042.             }
  3043.         } else {
  3044.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null);
  3045.             return new Response("ERRORE PERMESSO");
  3046.         }
  3047.     } //OK
  3048.     /**
  3049.      * @Route("/caricaVarianti", name="carica_varianti")
  3050.      */
  3051.     public function caricaVarianti(Request $request)
  3052.     {
  3053.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  3054.             ini_set('max_execution_time'1200);
  3055.             ini_set('memory_limit', -1);
  3056.             $start microtime(true);
  3057.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  3058.             $em $this->servizi->doctrine->getManager();
  3059.             $repo $this->servizi->doctrine->getRepository(Varianti::class);
  3060.             $errori "";
  3061.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  3062.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  3063.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  3064.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  3065.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  3066.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /caricaVarianti --- Inizio l\' importazione dei dati'null);
  3067.             $errori "";
  3068.             $root_path $pathFileBase "articoli_varianti.csv";
  3069.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  3070.             $contatore 0;
  3071.             $row 0;
  3072.             $query_eseguite 0;
  3073.             $batch_size 50;
  3074.             /*  0    codice articolo
  3075.                 1    codice dimensione 01
  3076.                 2    descrizione dimensione 01
  3077.                 3    posizione dimensione 01
  3078.                 4    immagine dimensione 01
  3079.                 5    codice dimensione 02
  3080.                 6    descrizione dimensione 02
  3081.                 7    posizione dimensione 02
  3082.                 8    immagine dimensione 02
  3083.                 9    codice dimensione 02
  3084.                 10    descrizione dimensione 02
  3085.                 11    posizione dimensione 02
  3086.                 12    immagine dimensione 02
  3087.                 13    codice dimensione 02
  3088.                 14    descrizione dimensione 02
  3089.                 15    posizione dimensione 02
  3090.                 16    immagine dimensione 02
  3091.                 17    codice dimensione 02
  3092.                 18    descrizione dimensione 02
  3093.                 19    posizione dimensione 02
  3094.                 20    immagine dimensione 02
  3095.                 21    codice variante
  3096.                 22    disponibilita
  3097.                 23    operazione
  3098.                 24  um_peso
  3099.                 25    peso netto
  3100.                 26    peso lordo
  3101.              */
  3102.             $indici = array(
  3103.                 "codiceArticolo" => 0,
  3104.                 "codiceDimensione1" => 1,
  3105.                 "descrizioneDimenisone1" => 2,
  3106.                 "posizioneDimensione1" => 3,
  3107.                 "immagineDimensione1" => 4,
  3108.                 "codiceDimensione2" => 5,
  3109.                 "descrizioneDimenisone2" => 6,
  3110.                 "posizioneDimensione2" => 7,
  3111.                 "immagineDimensione2" => 8,
  3112.                 "codiceDimensione3" => 9,
  3113.                 "descrizioneDimenisone3" => 10,
  3114.                 "posizioneDimensione3" => 11,
  3115.                 "immagineDimensione3" => 12,
  3116.                 "codiceDimensione4" => 13,
  3117.                 "descrizioneDimenisone4" => 14,
  3118.                 "posizioneDimensione4" => 15,
  3119.                 "immagineDimensione4" => 16,
  3120.                 "codiceDimensione5" => 17,
  3121.                 "descrizioneDimenisone5" => 18,
  3122.                 "posizioneDimensione5" => 19,
  3123.                 "immagineDimensione5" => 20,
  3124.                 "codiceVariante" => 21,
  3125.                 "disponibilita" => 22,
  3126.                 "operazione" => 23,
  3127.                 "umPeso" => 24,
  3128.                 "pesoNetto" => 25,
  3129.                 "pesoLordo" => 26
  3130.             );
  3131.             try {
  3132.                 if (($handle fopen($root_path"r")) !== false) {
  3133.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  3134.                         if ($row == 0) {
  3135.                             $row 1;
  3136.                             continue;
  3137.                         }
  3138.                         if ($query_eseguite >= $batch_size) {
  3139.                             $contatore $contatore $row 1;
  3140.                             $row 1;
  3141.                             $query_eseguite 0;
  3142.                             $em->flush();
  3143.                             $em->clear();
  3144.                         }
  3145.                         $now = new \DateTime('now');
  3146.                         try {
  3147.                             $entita null;
  3148.                             $umPeso null;
  3149.                             if(count($data) >= 25) {
  3150.                                 $umPeso $this->servizi->doctrine->getRepository(UnitaMisura::class)->findOneBy(array('codice' => $data[$indici['umPeso']]));
  3151.                                 if (!$umPeso && $data[$indici['umPeso']] != '') {
  3152.                                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true"Nuova unita di misura peso trovata: " $data[20], null);
  3153.                                     $umPeso = new UnitaMisura();
  3154.                                     $umPeso->setDataCreazione(new \DateTime());
  3155.                                     $umPeso->setDataModifica(new \DateTime());
  3156.                                     $umPeso->setAttivo(true);
  3157.                                     $umPeso->setFattoreConversione(1);
  3158.                                     $umPeso->setCodice($data[20]);
  3159.                                     $umPeso->setNumeroDecimali(3);
  3160.                                     $em->persist($umPeso);
  3161.                                     $query_eseguite++;
  3162.                                 }
  3163.                             }
  3164.                             /** @var  $listaVarianti Varianti[] */
  3165.                             $listaVarianti $repo->createQueryBuilder('varianti')
  3166.                                 ->leftJoin('varianti.mappa''mappa')
  3167.                                 ->leftJoin('mappa.articolo''articolo')
  3168.                                 ->where('articolo.codice = :codArt')->setParameter('codArt'$data[$indici["codiceArticolo"]])
  3169.                                 ->andWhere('varianti.codiceVariante = :codVar')->setParameter('codVar'$data[$indici["codiceVariante"]])
  3170.                                 ->andWhere('varianti.codiceDimensione1 = :codDim1')->setParameter('codDim1'$data[$indici["codiceDimensione1"]])
  3171.                                 ->andWhere('varianti.codiceDimensione2 = :codDim2')->setParameter('codDim2'$data[$indici["codiceDimensione2"]])
  3172.                                 ->andWhere('varianti.codiceDimensione3 = :codDim3')->setParameter('codDim3'$data[$indici["codiceDimensione3"]])
  3173.                                 ->andWhere('varianti.codiceDimensione4 = :codDim4')->setParameter('codDim4'$data[$indici["codiceDimensione4"]])
  3174.                                 ->andWhere('varianti.codiceDimensione5 = :codDim5')->setParameter('codDim5'$data[$indici["codiceDimensione5"]])
  3175.                                 ->getQuery()->getResult();
  3176.                             if (count($listaVarianti) > 0) {
  3177.                                 $entita $listaVarianti[0];
  3178.                                 if ($data[$indici["operazione"]] == "E") {
  3179.                                     $entita->setDataModifica(new \DateTime());
  3180.                                     $entita->setAttivo(false);
  3181.                                     $em->persist($entita);
  3182.                                     $query_eseguite++;
  3183.                                 } else {
  3184.                                     $entita->setDescrizioneDimensione1($data[$indici["descrizioneDimenisone1"]]);
  3185.                                     $entita->setPosizioneDimensione1($data[$indici["posizioneDimensione1"]]);
  3186.                                     $entita->setImmagineDimensione1($data[$indici["immagineDimensione1"]]);
  3187.                                     $entita->setDescrizioneDimensione2($data[$indici["descrizioneDimenisone2"]]);
  3188.                                     $entita->setPosizioneDimensione2($data[$indici["posizioneDimensione2"]]);
  3189.                                     $entita->setImmagineDimensione2($data[$indici["immagineDimensione2"]]);
  3190.                                     $entita->setDescrizioneDimensione3($data[$indici["descrizioneDimenisone3"]]);
  3191.                                     $entita->setPosizioneDimensione3($data[$indici["posizioneDimensione3"]]);
  3192.                                     $entita->setImmagineDimensione3($data[$indici["immagineDimensione3"]]);
  3193.                                     $entita->setDescrizioneDimensione4($data[$indici["descrizioneDimenisone4"]]);
  3194.                                     $entita->setPosizioneDimensione4($data[$indici["posizioneDimensione4"]]);
  3195.                                     $entita->setImmagineDimensione4($data[$indici["immagineDimensione4"]]);
  3196.                                     $entita->setDescrizioneDimensione5($data[$indici["descrizioneDimenisone5"]]);
  3197.                                     $entita->setPosizioneDimensione5($data[$indici["posizioneDimensione5"]]);
  3198.                                     $entita->setImmagineDimensione5($data[$indici["immagineDimensione5"]]);
  3199.                                     $entita->setDisponibile(str_replace(',''.'$data[$indici["disponibilita"]]));
  3200.                                     $entita->setUmPeso($umPeso);
  3201.                                     $entita->setPesoNetto(str_replace(',''.', (count($data) >= 26 $data[$indici["pesoNetto"]] : 0)));
  3202.                                     $entita->setPesoLordo(str_replace(',''.', (count($data) >= 27 $data[$indici["pesoLordo"]] : 0)));
  3203.                                     $entita->setOrdiniFornitori(0);
  3204.                                     $entita->setAttivo(true);
  3205.                                     $entita->setDataModifica($now);
  3206.                                     $em->persist($entita);
  3207.                                     $mappa $entita->getMappa();
  3208.                                     $mappa->setVariantiPresenti(true);
  3209.                                     $em->persist($mappa);
  3210.                                     $query_eseguite += 2;
  3211.                                 }
  3212.                             } else {
  3213.                                 $listaMappe $this->servizi->doctrine->getRepository(MappaCategorieArticoli::class)->createQueryBuilder('mappa_categorie_articoli')
  3214.                                     ->leftJoin('mappa_categorie_articoli.articolo''articolo')
  3215.                                     ->where('articolo.codice = :cod')->setParameter('cod'$data[0])
  3216.                                     ->getQuery()->getResult();
  3217.                                 if (count($listaMappe) > 0) {
  3218.                                     /** @var MappaCategorieArticoli $mp */
  3219.                                     $mp $listaMappe[0];
  3220.                                     if (!$mp->getVariantiPresenti()) {
  3221.                                         $mp->setVariantiPresenti(true);
  3222.                                         $em->persist($mp);
  3223.                                         $query_eseguite++;
  3224.                                     }
  3225.                                     $entita = new Varianti();
  3226.                                     $entita->setMappa($listaMappe[0]);
  3227.                                     $entita->setCodiceVariante($data[$indici["codiceVariante"]]);
  3228.                                     $entita->setCodiceDimensione1($data[$indici["codiceDimensione1"]]);
  3229.                                     $entita->setDescrizioneDimensione1($data[$indici["descrizioneDimenisone1"]]);
  3230.                                     $entita->setPosizioneDimensione1($data[$indici["posizioneDimensione1"]]);
  3231.                                     $entita->setImmagineDimensione1($data[$indici["immagineDimensione1"]]);
  3232.                                     $entita->setCodiceDimensione2($data[$indici["codiceDimensione2"]]);
  3233.                                     $entita->setDescrizioneDimensione2($data[$indici["descrizioneDimenisone2"]]);
  3234.                                     $entita->setPosizioneDimensione2($data[$indici["posizioneDimensione2"]]);
  3235.                                     $entita->setImmagineDimensione2($data[$indici["immagineDimensione2"]]);
  3236.                                     $entita->setCodiceDimensione3($data[$indici["codiceDimensione3"]]);
  3237.                                     $entita->setDescrizioneDimensione3($data[$indici["descrizioneDimenisone3"]]);
  3238.                                     $entita->setPosizioneDimensione3($data[$indici["posizioneDimensione3"]]);
  3239.                                     $entita->setImmagineDimensione3($data[$indici["immagineDimensione3"]]);
  3240.                                     $entita->setCodiceDimensione4($data[$indici["codiceDimensione4"]]);
  3241.                                     $entita->setDescrizioneDimensione4($data[$indici["descrizioneDimenisone4"]]);
  3242.                                     $entita->setPosizioneDimensione4($data[$indici["posizioneDimensione4"]]);
  3243.                                     $entita->setImmagineDimensione4($data[$indici["immagineDimensione4"]]);
  3244.                                     $entita->setCodiceDimensione5($data[$indici["codiceDimensione5"]]);
  3245.                                     $entita->setDescrizioneDimensione5($data[$indici["descrizioneDimenisone5"]]);
  3246.                                     $entita->setPosizioneDimensione5($data[$indici["posizioneDimensione5"]]);
  3247.                                     $entita->setImmagineDimensione5($data[$indici["immagineDimensione5"]]);
  3248.                                     $entita->setDisponibile(str_replace(',''.'$data[$indici["disponibilita"]]));
  3249.                                     $entita->setUmPeso($umPeso);
  3250.                                     $entita->setAttivo(true);
  3251.                                     $entita->setPesoNetto(str_replace(',''.', (count($data) >= 26 $data[$indici["pesoNetto"]] : 0)));
  3252.                                     $entita->setPesoLordo(str_replace(',''.', (count($data) >= 27 $data[$indici["pesoLordo"]] : 0)));
  3253.                                     $entita->setOrdiniFornitori(0);
  3254.                                     $entita->setDataModifica($now);
  3255.                                     $entita->setDataCreazione($now);
  3256.                                     $em->persist($entita);
  3257.                                     $query_eseguite++;
  3258.                                 } else {
  3259.                                     $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione variante. Mappa con codice articolo: ' $data[$indici["codiceArticolo"]] . ' non trovata! 'null);
  3260.                                 }
  3261.                             }
  3262.                         } catch (\PDOException $ex) {
  3263.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione: ' $ex->getMessage(), null);
  3264.                         } catch (\Exception|\Throwable $exception) {
  3265.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione: ' $exception->getMessage(), null);
  3266.                         }
  3267.                         $row++;
  3268.                         $em->flush();
  3269.                     }
  3270.                 }
  3271.                 $em->flush();
  3272.                 $row $contatore $row 1;
  3273.                 if ($errori == "") {
  3274.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull);
  3275.                     return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  3276.                 } else {
  3277.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull);
  3278.                     return new Response('Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row "</br>Lista Errori:</br>" $errori);
  3279.                 }
  3280.             } catch (\Exception|\Throwable $ex) {
  3281.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ' $ex->getMessage(), null);
  3282.                 return new Response('Errore importazione (RIGA: ' $contatore ') : ' $ex->getMessage());
  3283.             }
  3284.         } else {
  3285.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null);
  3286.             return new Response("ERRORE PERMESSO");
  3287.         }
  3288.     } //OK
  3289.     /**
  3290.      * @Route("/caricaPagamenti", name="carica_pagamenti")
  3291.      */
  3292.     public function caricaPagamenti(Request $request)
  3293.     {
  3294.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  3295.             ini_set('max_execution_time'1200);
  3296.             ini_set('memory_limit', -1);
  3297.             $start microtime(true);
  3298.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  3299.             $em $this->servizi->doctrine->getManager();
  3300.             $repo $this->servizi->doctrine->getRepository(Pagamenti::class);
  3301.             $errori "";
  3302.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  3303.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  3304.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  3305.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  3306.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /caricaPagamenti --- Inizio l\' importazione dei dati'null);
  3307.             $errori "";
  3308.             $root_path $pathFileBase "pagamenti.csv";
  3309.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  3310.             $contatore 0;
  3311.             $row 0;
  3312.             $query_eseguite 0;
  3313.             $batch_size 50;
  3314.             /*
  3315.              * 0    codice
  3316.                 1    descrizione
  3317.                 2    operazione
  3318.              */
  3319.             try {
  3320.                 if (($handle fopen($root_path"r")) !== false) {
  3321.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  3322.                         if ($row == 0) {
  3323.                             $row 1;
  3324.                             continue;
  3325.                         }
  3326.                         if ($query_eseguite >= $batch_size) {
  3327.                             $contatore $contatore $row 1;
  3328.                             $row 1;
  3329.                             $query_eseguite 0;
  3330.                             $em->flush();
  3331.                             $em->clear();
  3332.                         }
  3333.                         $now = new \DateTime('now');
  3334.                         try {
  3335.                             $entita null;
  3336.                             $nuovo false;
  3337.                             $entita $repo->findOneBy(array('codice' => $data[0]));
  3338.                             if (!$entita) {
  3339.                                 $entita = new Pagamenti();
  3340.                                 $nuovo true;
  3341.                             }
  3342.                             if ($data[2] == "E") {
  3343.                                 $em->remove($entita);
  3344.                                 $query_eseguite++;
  3345.                             } else {
  3346.                                 $entita->setCodice($data[0]);
  3347.                                 $entita->setNome($data[1]);
  3348.                                 $entita->setDescrizione($data[1]);
  3349.                                 $entita->setCodiceEsportazione($data[0]);
  3350.                                 $entita->setDataModifica($now);
  3351.                                 if ($nuovo)
  3352.                                     $entita->setDataCreazione($now);
  3353.                                 $em->persist($entita);
  3354.                                 $query_eseguite++;
  3355.                             }
  3356.                         } catch (\PDOException $ex) {
  3357.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione: ' $ex->getMessage(), null);
  3358.                         } catch (\Exception|\Throwable $exception) {
  3359.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione: ' $exception->getMessage(), null);
  3360.                         }
  3361.                         $row++;
  3362.                         $em->flush();
  3363.                     }
  3364.                 }
  3365.                 $em->flush();
  3366.                 $row $contatore $row 1;
  3367.                 if ($errori == "") {
  3368.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull);
  3369.                     return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  3370.                 } else {
  3371.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull);
  3372.                     return new Response('Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row "</br>Lista Errori:</br>" $errori);
  3373.                 }
  3374.             } catch (\Exception|\Throwable $ex) {
  3375.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ' $ex->getMessage(), null);
  3376.                 return new Response('Errore importazione (RIGA: ' $contatore ') : ' $ex->getMessage());
  3377.             }
  3378.         } else {
  3379.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null);
  3380.             return new Response("ERRORE PERMESSO");
  3381.         }
  3382.     } //OK
  3383.     /**
  3384.      * @Route("/caricaLimitazioneOrdinazioni", name="carica_limitazioni_ordinazioni")
  3385.      */
  3386.     public function caricaLimitazioneOrdinazioni(Request $request)
  3387.     {
  3388.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  3389.             ini_set('max_execution_time'1200);
  3390.             ini_set('memory_limit', -1);
  3391.             $start microtime(true);
  3392.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  3393.             $em $this->servizi->doctrine->getManager();
  3394.             $repo $this->servizi->doctrine->getRepository(LimitazioniOrdinazioniArticoli::class);
  3395.             $errori "";
  3396.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  3397.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  3398.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  3399.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  3400.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /caricaLimitazioneOrdinazioni --- Inizio l\' importazione dei dati'null);
  3401.             $errori "";
  3402.             $root_path $pathFileBase "limitazione_ordinazioni.csv";
  3403.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  3404.             $contatore 0;
  3405.             $row 0;
  3406.             $query_eseguite 0;
  3407.             $batch_size 50;
  3408.             /*
  3409.              *  0    codice_variante
  3410.                 1    identificativo_campo
  3411.                 2    nome
  3412.                 3    multipli_di
  3413.                 4    qta_minima
  3414.                 5    messaggio_errore
  3415.                 6    attivo
  3416.                 7    operazione
  3417.                 8   codice_articolo
  3418.              */
  3419.             try {
  3420.                 if (($handle fopen($root_path"r")) !== false) {
  3421.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  3422.                         if ($row == 0) {
  3423.                             $row 1;
  3424.                             continue;
  3425.                         }
  3426.                         $contatore++;
  3427.                         if ($query_eseguite >= $batch_size) {
  3428.                             $contatore $contatore $row 1;
  3429.                             $row 1;
  3430.                             $query_eseguite 0;
  3431.                             $em->flush();
  3432.                             $em->clear();
  3433.                         }
  3434.                         $now = new \DateTime('now');
  3435.                         try {
  3436.                             $entita null;
  3437.                             $nuovo false;
  3438.                             $variante $this->servizi->doctrine->getRepository(Varianti::class)->findOneBy(array('codiceVariante' => $data[0]));
  3439.                             if($variante) {
  3440.                                 $entita $repo->findOneBy(array('identificativoCampo' => $data[1]));
  3441.                                 if (!$entita) {
  3442.                                     $entita = new LimitazioniOrdinazioniArticoli();
  3443.                                     $nuovo true;
  3444.                                 }
  3445.                                 if ($data[7] == "E") {
  3446.                                     if ($data[0] != '') {
  3447.                                         $variante $this->servizi->doctrine->getRepository(Varianti::class)->findOneBy(array('codiceVariante' => $data[0]));
  3448.                                         if ($entita->getVarianti()->contains($variante->getId())){
  3449.                                             $entita->removeVarianti($variante);
  3450.                                             $em->persist($entita);
  3451.                                         }
  3452.                                     }else if (count($data) >= && $data[8] != '') {
  3453.                                         $articolo $this->servizi->doctrine->getRepository(Articoli::class)->findOneBy(array('codice' => $data[8]));
  3454.                                         if($entita->getArticoli()->contains($articolo->getId())){
  3455.                                             $entita->removeArticoli($articolo);
  3456.                                             $em->persist($entita);
  3457.                                         }
  3458.                                     }
  3459.                                     if($entita->getArticoli()->count() <= 0
  3460.                                         && $entita->getVarianti()->count() <= 0
  3461.                                         && $entita->getCategorie1()->count() <= 0
  3462.                                         && $entita->getCategorie2()->count() <= 0
  3463.                                         && $entita->getCategorie3()->count() <= 0
  3464.                                         && $entita->getCategorie4()->count() <= 0
  3465.                                         && $entita->getCategorie5()->count() <= 0
  3466.                                         && $entita->getMappeCategorieArticoli()->count() <= 0
  3467.                                     ){
  3468.                                         $em->remove($entita);
  3469.                                         $query_eseguite++;
  3470.                                     }
  3471.                                 } else {
  3472.                                     $variante null;
  3473.                                     $articolo null;
  3474.                                     if ($data[0] != '')
  3475.                                         $variante $this->servizi->doctrine->getRepository(Varianti::class)->findOneBy(array('codiceVariante' => $data[0]));
  3476.                                     if (count($data) >= && $data[8] != '')
  3477.                                         $articolo $this->servizi->doctrine->getRepository(Articoli::class)->findOneBy(array('codice' => $data[8]));
  3478.                                     if ($variante || $articolo) {
  3479.                                         if($variante){
  3480.                                             $entita->addVarianti($variante);
  3481.                                         } else if($articolo){
  3482.                                             $entita->addArticoli($articolo);
  3483.                                         }
  3484.                                         $entita->setIdentificativoCampo($data[1]);
  3485.                                         $entita->setNome($data[2]);
  3486.                                         $entita->setBloccaOrdinazioneSeEsaurito(false);
  3487.                                         $entita->setMultipliDi(str_replace(",""."$data[3]));
  3488.                                         $entita->setQtaMinima(str_replace(",""."$data[4]));
  3489.                                         if ($data[5] != "")
  3490.                                             $entita->setMessaggioErrore($data[5]);
  3491.                                         else
  3492.                                             $entita->setMessaggioErrore("Attenzione la quantità minima ordinabile Ã¨ di " number_format($entita->getQtaMinima(), 0) . "<br />sono ammessi solo multipli di " number_format($entita->getMultipliDi(), 0));
  3493.                                         $entita->setAttivo($data[6] == '1' true false);
  3494.                                         $entita->setDataModifica($now);
  3495.                                         if ($nuovo)
  3496.                                             $entita->setDataCreazione($now);
  3497.                                         $em->persist($entita);
  3498.                                         $query_eseguite++;
  3499.                                     } else {
  3500.                                         $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione limitazione ordinazione articoli - Variante articolo con codice variante: ' $data[0] . ' non trovata!'null);
  3501.                                     }
  3502.                                 }
  3503.                             }else{
  3504.                                 $errori .= ('Errore importazione (RIGA: ' $contatore ') : Variante con codice: ' $data[0] . ' non trovata!\n' );
  3505.                             }
  3506.                         } catch (\PDOException $ex) {
  3507.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione:  (RIGA: ' $contatore ') : ' $ex->getMessage(), null);
  3508.                         } catch (\Exception|\Throwable $exception) {
  3509.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione:  (RIGA: ' $contatore ') : ' $exception->getMessage(), null);
  3510.                         }
  3511.                         $row++;
  3512.                         $em->flush();
  3513.                     }
  3514.                 }
  3515.                 $em->flush();
  3516.                 $row $contatore $row 1;
  3517.                 if ($errori == "") {
  3518.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull);
  3519.                     return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  3520.                 } else {
  3521.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull);
  3522.                     return new Response('Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row "</br>Lista Errori:</br>" $errori);
  3523.                 }
  3524.             } catch (\Exception|\Throwable $ex) {
  3525.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione:  (RIGA: ' $contatore ') : ' $ex->getMessage(), null);
  3526.                 return new Response('Errore importazione (RIGA: ' $contatore ') : ' $ex->getMessage());
  3527.             }
  3528.         } else {
  3529.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null);
  3530.             return new Response("ERRORE PERMESSO");
  3531.         }
  3532.     } //OK
  3533.     /**
  3534.      * @Route("/caricaAnagraficheIndirizzi", name="carica_anagrafiche_indirizzi")
  3535.      */
  3536.     public function caricaAnagraficheIndirizzi(Request $request)
  3537.     {
  3538.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  3539.             ini_set('max_execution_time'1200);
  3540.             ini_set('memory_limit', -1);
  3541.             $start microtime(true);
  3542.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  3543.             $em $this->servizi->doctrine->getManager();
  3544.             $repo $this->servizi->doctrine->getRepository(Anagrafiche::class);
  3545.             $repoIndirizzi $this->servizi->doctrine->getRepository(AnagraficheIndirizzi::class);
  3546.             $repoFosUser $this->servizi->doctrine->getRepository(User::class);
  3547.             $errori "";
  3548.             $this->imp->caricaCacheImpostazioniDaFamiglie(['Google']);
  3549.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  3550.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  3551.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  3552.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  3553.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /caricaAnagraficheIndirizzi --- Inizio l\' importazione dei dati'null);
  3554.             $errori "";
  3555.             $root_path $pathFileBase "anagrafiche_indirizzi.csv";
  3556.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  3557.             $contatore 0;
  3558.             $row 0;
  3559.             $query_eseguite 0;
  3560.             $batch_size 50;
  3561.             /*
  3562.              *  0    codice_cliente
  3563.                 1    tipo_indirizzo
  3564.                 2    ragione_sociale
  3565.                 3    indirizzo
  3566.                 4    cap
  3567.                 5    citta
  3568.                 6    provincia
  3569.                 7    nazione
  3570.                 8    latitudine
  3571.                 9    longitudine
  3572.                 10    operazione
  3573.              */
  3574.             try {
  3575.                 if (($handle fopen($root_path"r")) !== false) {
  3576.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  3577.                         if ($row == 0) {
  3578.                             $row 1;
  3579.                             continue;
  3580.                         }
  3581.                         if ($query_eseguite >= $batch_size) {
  3582.                             $contatore $contatore $row 1;
  3583.                             $row 1;
  3584.                             $query_eseguite 0;
  3585.                             $em->flush();
  3586.                             $em->clear();
  3587.                         }
  3588.                         $now = new \DateTime('now');
  3589.                         try {
  3590.                             $nuova false;
  3591.                             $indirizzo $repoIndirizzi->findOneBy(array('codice' => $data[0], 'tipoIndirizzo' => $data[1]));
  3592.                             if ($data[10] == "E"//trovata operazione E quindi devo eliminare la riga
  3593.                             {
  3594.                                 if ($indirizzo) {
  3595.                                     $em->remove($indirizzo);
  3596.                                     $query_eseguite++;
  3597.                                 }
  3598.                             } else {
  3599.                                 $clienteAttivoOnline $this->servizi->doctrine->getRepository(User::class)->findOneBy(array('codiceCliente' => $data[0]));
  3600.                                 if (!$indirizzo) {
  3601.                                     $indirizzo = new AnagraficheIndirizzi();
  3602.                                     $indirizzo->setCodice($data[0]);
  3603.                                     $indirizzo->setTipoIndirizzo($data[1]);
  3604.                                     $indirizzo->setDataCreazione($now);
  3605.                                 }
  3606.                                 $indirizzo->setRagioneSociale($data[2]);
  3607.                                 $indirizzo->setIndirizzo($data[3]);
  3608.                                 $indirizzo->setCap($data[4]);
  3609.                                 $indirizzo->setCitta($data[5]);
  3610.                                 $indirizzo->setProvincia($data[6]);
  3611.                                 $indirizzo->setNazione($data[7]);
  3612.                                 $indirizzo->setLatitudine(str_replace(",""."$data[8]));
  3613.                                 $indirizzo->setLongitudine(str_replace(",""."$data[9]));
  3614.                                 if($data[8] != '' && $data[8] != && $data[9] != '' && $data[9] != && $this->imp->ritornaImpostazioneDaNome('GoogleMapsAPIAttiva') == '1' && $this->imp->ritornaImpostazioneDaNome('GoogleMapsAPIRecuperaInAutomaticoImportAnagrafiche') == '1'){
  3615.                                     $gogl = new GoogleMapsAPI($this->imp$this->servizi);
  3616.                                     $latLon $gogl->OttieniLatitudineLongitudine($indirizzo->getIndirizzo() . ' ' $indirizzo->getCitta() . ' ' $indirizzo->getProvincia() . ' ' $indirizzo->getCap() . ' ' $indirizzo->getNazione());
  3617.                                     $indirizzo->setLatitudine($latLon['latitudine']);
  3618.                                     $indirizzo->setLongitudine($latLon['longitudine']);
  3619.                                 }
  3620.                                 $indirizzo->setDataModifica($now);
  3621.                                 $em->persist($indirizzo);
  3622.                                 $query_eseguite++;
  3623.                                 if ($clienteAttivoOnline) {
  3624.                                     //verifico se presente la destinazione altrimenti la creo
  3625.                                     $destinazione $this->servizi->doctrine->getRepository(Destinazioni::class)->findOneBy(array('azienda' => $clienteAttivoOnline'codiceGestionale' => $data[1]));
  3626.                                     if (!$destinazione) {
  3627.                                         $destinazione = new Destinazioni();
  3628.                                         $destinazione->setAzienda($clienteAttivoOnline);
  3629.                                         $destinazione->setUtente($clienteAttivoOnline);
  3630.                                         $destinazione->setCodiceGestionale($data[1]);
  3631.                                         $destinazione->setDataCreazione($now);
  3632.                                     }
  3633.                                     $destinazione->setRagioneSociale($data[2]);
  3634.                                     $destinazione->setEmail($clienteAttivoOnline->getEmail());
  3635.                                     $destinazione->setIndirizzo($data[3]);
  3636.                                     $destinazione->setCap($data[4]);
  3637.                                     $destinazione->setCitta($data[5]);
  3638.                                     $destinazione->setProvincia($data[6]);
  3639.                                     $destinazione->setStato($data[7]);
  3640.                                     $destinazione->setTelefono($clienteAttivoOnline->getTelefono());
  3641.                                     $destinazione->setDataModifica($now);
  3642.                                     $destinazione->setDenominazioneDestinazioneDiversa($data[1]);
  3643.                                     $destinazione->setUnivocoIndirizzo($data[1]);// codice AA perchè indirizzo base
  3644.                                     $em->persist($destinazione);
  3645.                                     $query_eseguite++;
  3646.                                 }
  3647.                             }
  3648.                         } catch (\PDOException $ex) {
  3649.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione: ' $ex->getMessage(), null);
  3650.                         } catch (\Exception|\Throwable $exception) {
  3651.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione: ' $exception->getMessage(), null);
  3652.                         }
  3653.                         $row++;
  3654.                         $em->flush();
  3655.                     }
  3656.                 }
  3657.                 $em->flush();
  3658.                 $row $contatore $row 1;
  3659.                 if ($errori == "") {
  3660.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull);
  3661.                     return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  3662.                 } else {
  3663.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull);
  3664.                     return new Response('Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row "</br>Lista Errori:</br>" $errori);
  3665.                 }
  3666.             } catch (\Exception|\Throwable $ex) {
  3667.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ' $ex->getMessage(), null);
  3668.                 return new Response('Errore importazione (RIGA: ' $contatore ') : ' $ex->getMessage());
  3669.             }
  3670.         } else {
  3671.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null);
  3672.             return new Response("ERRORE PERMESSO");
  3673.         }
  3674.     } //OK
  3675.     /**
  3676.      * @Route("/caricaAnagrafiche/{svuota}", name="carica_anagrafiche", defaults={"svuota"="0"})
  3677.      */
  3678.     public function caricaAnagrafiche(Request $request$svuota)
  3679.     {
  3680.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  3681.             ini_set('max_execution_time'1200);
  3682.             ini_set('memory_limit', -1);
  3683.             $this->imp->caricaCacheImpostazioniDaFamiglie(['Google']);
  3684.             $inviaMail $this->imp->ritornaImpostazioneDaNome("InviaMailNuoviClienti");
  3685.             $ccMail $this->imp->ritornaImpostazioneDaNome("MailCcComunicazioni");
  3686.             $from $this->imp->ritornaImpostazioneDaNome("IndirizzoMailFromInvioComunicazioni");
  3687.             $nomeShop $this->imp->ritornaImpostazioneDaNome("NomeShop");
  3688.             $start microtime(true);
  3689.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  3690.             $em $this->servizi->doctrine->getManager();
  3691.             $repo $this->servizi->doctrine->getRepository(Anagrafiche::class);
  3692.             $repoIndirizzi $this->servizi->doctrine->getRepository(AnagraficheIndirizzi::class);
  3693.             $repoFosUser $this->servizi->doctrine->getRepository(User::class);
  3694.             $repoSpedizione $this->servizi->doctrine->getRepository(Spedizione::class);
  3695.             $repoConsegna $this->servizi->doctrine->getRepository(Consegna::class);
  3696.             $errori "";
  3697.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  3698.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  3699.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  3700.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  3701.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /caricaAnagrafiche/' $svuota ' --- Inizio l\' importazione dei dati'null);
  3702.             switch ($svuota){
  3703.                 case "1":{ //Svuoto tutte le tabelle collegate
  3704.                     $em $this->servizi->doctrine->getManager();
  3705.                     $connection $this->servizi->doctrine->getConnection();
  3706.                     $connection->executeQuery("SET FOREIGN_KEY_CHECKS=0;");
  3707.                     $connection->executeQuery("TRUNCATE `anagrafica_opzioni_aggiuntive`;");
  3708.                     $connection->executeQuery("TRUNCATE `anagrafiche`;");
  3709.                     $connection->executeQuery("TRUNCATE `anagrafiche_indirizzi`;");
  3710.                     $connection->executeQuery("TRUNCATE `risorse_anagrafiche_colonne_valori`;");
  3711.                     $connection->executeQuery("TRUNCATE `risorse_anagrafiche`;");
  3712.                     $connection->executeQuery("TRUNCATE `risorse_anagrafiche_colonne`;");
  3713.                     $connection->executeQuery("TRUNCATE `sconti_anagrafiche`;");
  3714.                     $connection->executeQuery("TRUNCATE `anagrafiche_blocchi`;");
  3715.                     $connection->executeQuery("SET FOREIGN_KEY_CHECKS=1;");
  3716.                     break;
  3717.                 }
  3718.             }
  3719.             $errori "";
  3720.             $root_path $pathFileBase "anagrafiche.csv";
  3721.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  3722.             $contatore 0;
  3723.             $row 0;
  3724.             $query_eseguite 0;
  3725.             $batch_size 50;
  3726.             /*
  3727.              *  0    codice_cliente
  3728.                 1    ragione_sociale
  3729.                 2    indirizzo
  3730.                 3    cap
  3731.                 4    citta
  3732.                 5    provincia
  3733.                 6    nazione
  3734.                 7    codice_zona
  3735.                 8    descrizione_zona
  3736.                 9    telefono
  3737.                 10    fax
  3738.                 11    cellulare
  3739.                 12    sito_web
  3740.                 13    indirizzi_mail
  3741.                 14    codice_fiscale
  3742.                 15    partita_iva
  3743.                 16    codice_assoggettamento_fiscale
  3744.                 17    descrizione_assoggettamento_fiscale
  3745.                 18    codice_abi
  3746.                 19    codice_cab
  3747.                 20    iban
  3748.                 21    codice_pagamnto
  3749.                 22    descrizione_pagamento
  3750.                 23    sconto_commerciale
  3751.                 24    sconto_pagamento
  3752.                 25    codice_riclassifica_amm_1
  3753.                 26    descrizione_riclassifica_amministrativa_1
  3754.                 27    codice_spedizione
  3755.                 28    descrizione_spedizione
  3756.                 29    codice_consegna
  3757.                 30    descrizione_consegna
  3758.                 31    codice_agente
  3759.                 32    descrizione_agente
  3760.                 33    codice_canale_commerciale
  3761.                 34    descrizione_canale_commerciale
  3762.                 35    latitudine
  3763.                 36    longitudine
  3764.                 37    note_anagrafica
  3765.                 38    operazione
  3766.                 39    codice_listino
  3767.                 40    descrizione_listino
  3768.                 41    attiva_online
  3769.                 42    mail_attivazione_online
  3770.                 43  valore_aliquota_iva
  3771.                 44  codice_aliquota_iva
  3772.                 45  ruolo
  3773.                 46  associazione_codici_agenti_fornitori
  3774.              */
  3775.             try {
  3776.                 if (($handle fopen($root_path"r")) !== false) {
  3777.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  3778.                         if ($row == 0) {
  3779.                             $row 1;
  3780.                             continue;
  3781.                         }
  3782.                         if ($query_eseguite >= $batch_size) {
  3783.                             $contatore $contatore $row 1;
  3784.                             $row 1;
  3785.                             $query_eseguite 0;
  3786.                             $em->flush();
  3787.                             $em->clear();
  3788.                         }
  3789.                         $now = new \DateTime('now');
  3790.                         try {
  3791.                             $nuova false;
  3792.                             $anagrafica $repo->findOneBy(array('codice' => $data[0]));
  3793.                             if ($data[38] == "E"//trovata operazione E quindi devo eliminare la riga
  3794.                             {
  3795.                                 if ($anagrafica) {
  3796.                                     $anagrafica->setAttivo(false);
  3797.                                     $anagrafica->setDataModifica(new \DateTime());
  3798.                                     $em->persist($anagrafica);
  3799.                                     $utente $this->servizi->doctrine->getRepository(User::class)->findOneBy(array('codiceCliente' => $data[0]));
  3800.                                     if ($utente) ;
  3801.                                     {
  3802.                                         $utente->setEnabled(false);
  3803.                                         $em->persist($utente);
  3804.                                         $query_eseguite++;
  3805.                                     }
  3806.                                     $query_eseguite++;
  3807.                                 }
  3808.                             }
  3809.                             if (!$anagrafica) {
  3810.                                 $anagrafica = new Anagrafiche();
  3811.                                 $nuova true;
  3812.                             }
  3813.                             $anagrafica->setCodice($data[0]);
  3814.                             $anagrafica->setRagioneSociale($data[1]);
  3815.                             $anagrafica->setIndirizzo($data[2]);
  3816.                             $anagrafica->setComune($data[4]);
  3817.                             $anagrafica->setProvincia($data[5]);
  3818.                             $anagrafica->setCap($data[3]);
  3819.                             $anagrafica->setNazione($data[6]);
  3820.                             $anagrafica->setCodiceZona($data[7]);
  3821.                             $anagrafica->setDescrizioneZona($data[8]);
  3822.                             $anagrafica->setTelefono($data[9]);
  3823.                             $anagrafica->setFax($data[10]);
  3824.                             $anagrafica->setCellulare($data[11]);
  3825.                             $anagrafica->setSitoWeb($data[12]);
  3826.                             $anagrafica->setIndirizziMail($data[13]);
  3827.                             $anagrafica->setCodiceFiscale($data[14]);
  3828.                             $anagrafica->setPartitaIva($data[15]);
  3829.                             $anagrafica->setCodiceAssoggettamentoFiscale($data[16]);
  3830.                             $anagrafica->setDescrizioneAssoggettamentoFiscale($data[17]);
  3831.                             $anagrafica->setCodiceAbi($data[18]);
  3832.                             $anagrafica->setCodiceCab($data[19]);
  3833.                             $anagrafica->setIban($data[20]);
  3834.                             $anagrafica->setCodicePagamento($data[21]);
  3835.                             $anagrafica->setDescrizionePagamento($data[22]);
  3836.                             $anagrafica->setScontoCommerciale(str_replace(',''.'$data[23] ? $data[23] : "0"));
  3837.                             $anagrafica->setScontoPagamento(str_replace(',''.'$data[24] ? $data[24] : "0"));
  3838.                             $anagrafica->setCodiceRiclassificaAmministrativa1($data[25]);
  3839.                             $anagrafica->setDescrizioneRiclassificaAmministrativa1($data[26]);
  3840.                             $anagrafica->setCodiceSpedizione($data[27]);
  3841.                             $anagrafica->setDescrizioneSpedizione($data[28]);
  3842.                             $anagrafica->setCodiceConsegna($data[29]);
  3843.                             $anagrafica->setDescrizioneConsegna($data[30]);
  3844.                             $anagrafica->setCodiceAgente($data[31]);
  3845.                             $anagrafica->setDescrizioneAgente($data[32]);
  3846.                             $anagrafica->setCodiceCanaleCommerciale($data[33]);
  3847.                             $anagrafica->setDescrizioneCanaleCommerciale($data[34]);
  3848.                             $anagrafica->setLatitudine(str_replace(',''.'$data[35] ? $data[35] : "0"));
  3849.                             $anagrafica->setLongitudine(str_replace(',''.'$data[36] ? $data[36] : "0"));
  3850.                             if($data[35] != '' && $data[35] != && $data[36] != '' && $data[36] != && $this->imp->ritornaImpostazioneDaNome('GoogleMapsAPIAttiva') == '1' && $this->imp->ritornaImpostazioneDaNome('GoogleMapsAPIRecuperaInAutomaticoImportAnagrafiche') == '1'){
  3851.                                 $gogl = new GoogleMapsAPI($this->imp$this->servizi);
  3852.                                 $latLon $gogl->OttieniLatitudineLongitudine($anagrafica->getIndirizzo() . ' ' $anagrafica->getComune() . ' ' $anagrafica->getProvincia() . ' ' $anagrafica->getCap() . ' ' $anagrafica->getNazione());
  3853.                                 $anagrafica->setLatitudine($latLon['latitudine']);
  3854.                                 $anagrafica->setLongitudine($latLon['longitudine']);
  3855.                             }
  3856.                             $anagrafica->setNoteAnagrafica($data[37]);
  3857.                             $anagrafica->setCodiceListinoVendita($data[39]);
  3858.                             $anagrafica->setDescrizioneListinoVendita($data[40]);
  3859.                             $anagrafica->setAttivo(true);
  3860.                             if(isset($data[43]))
  3861.                                 $anagrafica->setValoreAliquotaIva(str_replace(',''.'$data[43] ? $data[43] : "0"));
  3862.                             if(isset($data[44]))
  3863.                                 $anagrafica->setCodiceAliquotaIva($data[44]);
  3864.                             if(isset($data[45])) {
  3865.                                 $tipo strtoupper($data[44]);
  3866.                                 if(!in_array($tipo, ['COMMERCIALE''AGENTE''CLIENTE''FORNITORE'])){
  3867.                                     $tipo 'CLIENTE';
  3868.                                 }
  3869.                                 $anagrafica->setTipo($tipo);
  3870.                             }
  3871.                             if(!$anagrafica->getTipo())
  3872.                                 $anagrafica->setTipo('CLIENTE');
  3873.                             $now = new \DateTime('now');
  3874.                             if ($nuova)
  3875.                                 $anagrafica->setDataCreazione($now);
  3876.                             $anagrafica->setDataModifica($now);
  3877.                             $em->persist($anagrafica);
  3878.                             $query_eseguite++;
  3879.                             if ($data[41] == "1") { //devo attivarlo online
  3880.                                 $clienteOnline $repoFosUser->findOneBy(array('codiceCliente' => $anagrafica->getCodice()));
  3881.                                 if (!$clienteOnline) {
  3882.                                     $newPass $this->randomString(8);
  3883.                                     /** @var $clienteOnline User */
  3884.                                     $clienteOnline = new User();
  3885.                                     $clienteOnline->setCodiceCliente($data[0]);
  3886.                                     $clienteOnline->setRagioneSociale($data[1]);
  3887.                                     $clienteOnline->setEmail($data[42]);
  3888.                                     $clienteOnline->setIndirizzo($data[2]);
  3889.                                     $clienteOnline->setCap($data[3]);
  3890.                                     $clienteOnline->setCitta($data[4]);
  3891.                                     $clienteOnline->setProvincia($data[5]);
  3892.                                     $clienteOnline->setNazione($data[6]);
  3893.                                     $clienteOnline->setTelefono($data[9]);
  3894.                                     $clienteOnline->setCodiceFiscale($data[14]);
  3895.                                     $clienteOnline->setPartitaIva($data[15]);
  3896.                                     $clienteOnline->setCodiceListinoVendita($data[39]);
  3897.                                     $clienteOnline->setPassword($this->passwordHasher->hashPassword($clienteOnline$newPass));
  3898.                                     $clienteOnline->setUsername($data[0]);
  3899.                                     $clienteOnline->setEnabled(true);
  3900.                                     $clienteOnline->setRoles(array('ROLE_USER'));
  3901.                                     $clienteOnline->setAgente(false);
  3902.                                     $clienteOnline->setUtenteComune(false);
  3903.                                     $clienteOnline->setPrivato(false);
  3904.                                     $clienteOnline->setCommerciale(false);
  3905.                                     $clienteOnline->setCodiceAssoggettamentoFiscale($data[16]);
  3906.                                     if(isset($data[43]))
  3907.                                         $clienteOnline->setValoreAliquotaIva(str_replace(',''.'$data[43] ? $data[43] : "0"));
  3908.                                     if(isset($data[44]))
  3909.                                         $clienteOnline->setCodiceAliquotaIva($data[44]);
  3910.                                     $anagraficaDaMail $this->servizi->doctrine->getRepository(User::class)->findOneBy(array('email' => strtolower($data[42])));
  3911.                                     //Controllo esistenza di un'account con lo stesso indirizzo mail se Ã¨ presente annullo la registrazione e passo ad un altra riga
  3912.                                     if (!$anagraficaDaMail) {
  3913.                                         $em $this->servizi->doctrine->getManager();
  3914.                                         $em->persist($clienteOnline);
  3915.                                         $em->flush();
  3916.                                     } else {
  3917.                                         $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Anagrafica con codice: ' $data[0] . ' ----  indirizzo email: ' $data[42] . " già presente!"null);
  3918.                                         continue;
  3919.                                     }
  3920.                                     if ($data[27] != "" && $data[29] != "") {
  3921.                                         $sped $repoSpedizione->findOneBy(array('codice' => $data[27]));
  3922.                                         $cons $repoConsegna->findOneBy(array('codice' => $data[29]));
  3923.                                         if (!$sped) {
  3924.                                             $sped = new Spedizione();
  3925.                                             $sped->setCodice($data[27]);
  3926.                                             $sped->setDescrizione($data[28]);
  3927.                                             $em->persist($sped);
  3928.                                             $query_eseguite++;
  3929.                                             $query_eseguite++;
  3930.                                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Spedizione con codice ' $sped->getCodice() . ' creata perchè inesistente!' $rownull);
  3931.                                         }
  3932.                                         if (!$cons) {
  3933.                                             $cons = new Consegna();
  3934.                                             $cons->setCodice($data[29]);
  3935.                                             $cons->setDescrizione($data[30]);
  3936.                                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Consegna con codice ' $cons->getCodice() . ' creata perchè inesistente!' $rownull);
  3937.                                             $em->persist($cons);
  3938.                                             $query_eseguite++;
  3939.                                             $query_eseguite++;
  3940.                                         }
  3941.                                         $ass = new AssociazioneSpedizioniClienti();
  3942.                                         $ass->setAzienda($clienteOnline);
  3943.                                         $ass->setConsegna($cons);
  3944.                                         $ass->setSpedizione($sped);
  3945.                                         $ass->setPrimaria(true);
  3946.                                         $em->persist($ass);
  3947.                                         $query_eseguite++;
  3948.                                     }
  3949.                                     $adresses explode(";"$data[13]);
  3950.                                     $mailSecondarie $this->servizi->doctrine->getRepository(MailSecondarieUtenti::class);
  3951.                                     array_push($adresses$ccMail);
  3952.                                     foreach ($adresses as $item) {
  3953.                                         $ms = new MailSecondarieUtenti();
  3954.                                         $ms->setInviaConfermaOrdine(false);
  3955.                                         $ms->setUtenteModifica(null);
  3956.                                         $ms->setAzienda($clienteOnline);
  3957.                                         $ms->setDataModifica($now);
  3958.                                         $ms->setDataCreazione($now);
  3959.                                         $ms->setRuolo("");
  3960.                                         $ms->setNominativo("");
  3961.                                         $ms->setIndirizzoMail($item);
  3962.                                         $em->persist($ms);
  3963.                                     }
  3964.                                     $em->flush();
  3965.                                     unset($adresses[0]);
  3966.                                     //Associo il ruolo corretto e i vari codici agente associati
  3967.                                     if(count($data) > 46){
  3968.                                         if(strtoupper($data[45]) == 'AGENTE'){
  3969.                                             $clienteOnline->setRoles(array("ROLE_AGENTE"));
  3970.                                             $clienteOnline->setAgente(true);
  3971.                                             $em->persist($clienteOnline);
  3972.                                             $em->flush();
  3973.                                             if(isset($data[46])){
  3974.                                                 $elenco explode(','$data[46]);
  3975.                                                 if($elenco){
  3976.                                                     $assAg $this->servizi->doctrine->getRepository(AssociazioneCodiciAgentiUtente::class);
  3977.                                                     foreach ($elenco as $i){
  3978.                                                         $entitaAssAg = new AssociazioneCodiciAgentiUtente();
  3979.                                                         $entitaAssAg->setCodice($i);
  3980.                                                         $entitaAssAg->setDataCreazione(new \DateTime());
  3981.                                                         $entitaAssAg->setDataModifica(new \DateTime());
  3982.                                                         $entitaAssAg->setUtente($clienteOnline);
  3983.                                                         $em->persist($entitaAssAg);
  3984.                                                     }
  3985.                                                     $em->flush();
  3986.                                                 }
  3987.                                             }
  3988.                                         }
  3989.                                         elseif(strtoupper($data[45]) == 'COMMERCIALE'){
  3990.                                             $clienteOnline->setRoles(array("ROLE_COMMERCIALE"));
  3991.                                             $clienteOnline->setCommerciale(true);
  3992.                                             $em->persist($clienteOnline);
  3993.                                             $em->flush();
  3994.                                         }
  3995.                                         elseif (strtoupper($data[45] == "FORNITORE")){
  3996.                                             $clienteOnline->setRoles(array("ROLE_FORNITORE"));
  3997.                                             $clienteOnline->setCommerciale(false);
  3998.                                             $clienteOnline->setAgente(false);
  3999.                                             if(count($data) > 47) {
  4000.                                                 $clienteOnline->setCodiceFornitore($data[46]);
  4001.                                             }
  4002.                                             $em->persist($clienteOnline);
  4003.                                             $em->flush();
  4004.                                         }
  4005.                                     }
  4006.                                     $translator $this->translating;
  4007.                                     /** @var $clienteOnline User */
  4008.                                     if ($clienteOnline->getNazione() != 'IT') {
  4009.                                         $translator->CaricaTraduzioniDaFamiglia('mail_benvenuto''en');
  4010.                                     }else{
  4011.                                         $translator->CaricaTraduzioniDaFamiglia('mail_benvenuto''it');
  4012.                                     }
  4013.                                     try {
  4014.                                         if ($inviaMail) {
  4015.                                             $header $translator->OttieniElementoDizionario('benvenuto_header_mail''mail_benvenuto')->valoreUscita;
  4016.                                             $mailer $this->mailer;
  4017.                                             $mailer->SendMail(
  4018.                                                 $header " " $nomeShop,
  4019.                                                 $this->renderView(
  4020.                                                     'email/registrazione/nuovo_inserimento.html.twig',
  4021.                                                     array(
  4022.                                                         'utente' => $clienteOnline,
  4023.                                                         'password' => $newPass
  4024.                                                     )
  4025.                                                 ),
  4026.                                                 $clienteOnline->getEmail(),
  4027.                                                 $adresses,
  4028.                                                 $from,
  4029.                                                 "text/html"
  4030.                                             );
  4031.                                         }
  4032.                                     } catch (\Exception|\Throwable $e) {
  4033.                                         $this->logger->critical("Errore invio mail: " $e->getMessage());
  4034.                                         $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);
  4035.                                         $query_eseguite++;
  4036.                                     }
  4037.                                     $indirizzo_mail $data[13];
  4038.                                     if (!strpos($indirizzo_mail";") === false) {
  4039.                                         $indirizzi explode(";"$indirizzo_mail);
  4040.                                         $mailSecondarie $this->servizi->doctrine->getRepository(MailSecondarieUtenti::class);
  4041.                                         foreach ($indirizzi as $item) {
  4042.                                             if (!$mailSecondarie->findOneBy(array('azienda' => $clienteOnline'indirizzoMail' => $item))) {
  4043.                                                 $ms = new MailSecondarieUtenti();
  4044.                                                 $ms->setInviaConfermaOrdine(true);
  4045.                                                 $ms->setUtenteModifica(null);
  4046.                                                 $ms->setAzienda($clienteOnline);
  4047.                                                 $ms->setDataModifica($now);
  4048.                                                 $ms->setDataCreazione($now);
  4049.                                                 $ms->setRuolo("");
  4050.                                                 $ms->setNominativo("");
  4051.                                                 $ms->setIndirizzoMail($item);
  4052.                                                 $em->persist($ms);
  4053.                                             }
  4054.                                         }
  4055.                                         $indirizzo_mail $indirizzi[0];
  4056.                                     }
  4057.                                 }
  4058.                             }
  4059.                         } catch (\PDOException $ex) {
  4060.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione: ' $ex->getMessage(), null);
  4061.                         } catch (\Exception|\Throwable $exception) {
  4062.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione: ' $exception->getMessage(), null);
  4063.                         }
  4064.                         $row++;
  4065.                         $em->flush();
  4066.                     }
  4067.                 }
  4068.                 $em->flush();
  4069.                 $row $contatore $row 1;
  4070.                 if ($errori == "") {
  4071.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull);
  4072.                     return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  4073.                 } else {
  4074.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull);
  4075.                     return new Response('Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row "</br>Lista Errori:</br>" $errori);
  4076.                 }
  4077.             } catch (\Exception|\Throwable $ex) {
  4078.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ' $ex->getMessage(), null);
  4079.                 return new Response('Errore importazione (RIGA: ' $contatore ') : ' $ex->getMessage());
  4080.             }
  4081.         } else {
  4082.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null);
  4083.             return new Response("ERRORE PERMESSO");
  4084.         }
  4085.     } //OK
  4086.     /**
  4087.      * @Route("/caricaListiniVendita/{svuota}", name="carica_listini_vendita", defaults={"svuota"="0"})
  4088.      */
  4089.     public function caricaListiniVendita(Request $request$svuota)
  4090.     {
  4091.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  4092.             ini_set('max_execution_time', -1);
  4093.             ini_set('memory_limit', -1);
  4094.             $start microtime(true);
  4095.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  4096.             $em $this->servizi->doctrine->getManager();
  4097.             $repo $this->servizi->doctrine->getRepository(ListiniVendita::class);
  4098.             $repoMappe $this->servizi->doctrine->getRepository(MappaCategorieArticoli::class);
  4099.             $repoVarianti $this->servizi->doctrine->getRepository(Varianti::class);
  4100.             $errori "";
  4101.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  4102.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  4103.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  4104.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  4105.             $connection $this->servizi->doctrine->getConnection();
  4106.             if($svuota == "1"){
  4107.                 $em $this->servizi->doctrine->getManager();
  4108.                 $connection->beginTransaction();
  4109.                 try {
  4110.                     $connection->executeQuery("SET FOREIGN_KEY_CHECKS=0;");
  4111.                     $connection->executeQuery("TRUNCATE `listini_vendita`;");
  4112.                     $connection->executeQuery("SET FOREIGN_KEY_CHECKS=1;");
  4113.                     $connection->commit();
  4114.                 }catch (\Exception|\Throwable $ex){
  4115.                     $this->servizi->DebuggaException($ex"Errore pulizia listini vendita");
  4116.                 }
  4117.             }
  4118.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /caricaListiniVendita/' $svuota ' --- Inizio l\' importazione dei dati'null);
  4119.             $errori "";
  4120.             $root_path $pathFileBase "articoli_listini_vendita.csv";
  4121.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  4122.             $contatore 0;
  4123.             $row 0;
  4124.             $query_eseguite 0;
  4125.             $batch_size 50;
  4126.             /*
  4127.              *  0    codice listino
  4128.                 1    descrizione listino
  4129.                 2    codice_anagrafica
  4130.                 3    codice articolo
  4131.                 4    codice variante
  4132.                 5    prezzo
  4133.                 6    operazione
  4134.                 7    flag_prezzo_netto
  4135.                 8    codice_cat_1
  4136.                 9    codice_cat_2
  4137.                 10    codice_cat_3
  4138.                 11    codice_cat_4
  4139.                 12    codice_cat_5
  4140.                 13    marca
  4141.                 14  costo
  4142.                 15  codice_tipo_ordine
  4143.                 16  chiave_esterna
  4144.              */
  4145.             $indici = array(
  4146.                 'codiceListino' => 0,
  4147.                 'descrizioneListino' => 1,
  4148.                 'codiceAnagrafica' => 2,
  4149.                 'codiceArticolo' => 3,
  4150.                 'codiceVariante' => 4,
  4151.                 'prezzo' => 5,
  4152.                 'flagPrezzoNetto' => 7,
  4153.                 'operazione' => 6,
  4154.                 'cat1' => 8,
  4155.                 'cat2' => 9,
  4156.                 'cat3' => 10,
  4157.                 'cat4' => 11,
  4158.                 'cat5' => 12,
  4159.                 'marca' => 13,
  4160.                 'costo' => 14,
  4161.                 'codiceTipoOrdine' => 15,
  4162.                 'chiaveEsterna' => 16
  4163.             );
  4164.             try {
  4165.                 if (($handle fopen($root_path"r")) !== false) {
  4166.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  4167.                         if ($row == 0) {
  4168.                             $row 1;
  4169.                             continue;
  4170.                         }
  4171.                         if ($query_eseguite >= $batch_size) {
  4172.                             $contatore $contatore $row 1;
  4173.                             $row 1;
  4174.                             $query_eseguite 0;
  4175.                             $em->flush();
  4176.                             $em->clear();
  4177.                         }
  4178.                         $now = new \DateTime('now');
  4179.                         try {
  4180.                             $listaMappe $repoMappe->createQueryBuilder('mappa_categorie_articoli')
  4181.                                 ->leftJoin('mappa_categorie_articoli.articolo''articolo')
  4182.                                 ->leftJoin('mappa_categorie_articoli.categoria1''cat1')
  4183.                                 ->leftJoin('mappa_categorie_articoli.categoria2''cat2')
  4184.                                 ->leftJoin('mappa_categorie_articoli.categoria3''cat3')
  4185.                                 ->leftJoin('mappa_categorie_articoli.categoria4''cat4')
  4186.                                 ->leftJoin('mappa_categorie_articoli.categoria5''cat5')
  4187.                                 ->where('articolo.codice = :cod')->setParameter('cod'$data[$indici['codiceArticolo']]);
  4188.                             if ($data[$indici['cat1']] != '') {
  4189.                                 $listaMappe->andWhere('cat1.codice = :cat1')->setParameter('cat1'$data[$indici['cat1']]);
  4190.                             }
  4191.                             if ($data[$indici['cat2']] != '') {
  4192.                                 $listaMappe->andWhere('cat2.codice = :cat2')->setParameter('cat2'$data[$indici['cat2']]);
  4193.                             }
  4194.                             if ($data[$indici['cat3']] != '') {
  4195.                                 $listaMappe->andWhere('cat3.codice = :cat3')->setParameter('cat3'$data[$indici['cat3']]);
  4196.                             }
  4197.                             if ($data[$indici['cat4']] != '') {
  4198.                                 $listaMappe->andWhere('cat4.codice = :cat4')->setParameter('cat4'$data[$indici['cat4']]);
  4199.                             }
  4200.                             if ($data[$indici['cat5']] != '') {
  4201.                                 $listaMappe->andWhere('cat5.codice = :cat5')->setParameter('cat5'$data[$indici['cat5']]);
  4202.                             }
  4203.                             if ($data[$indici['marca']] != '') {
  4204.                                 $listaMappe->andWhere('mappa_categorie_articoli.marca = :marca')->setParameter('marca'$data[$indici['marca']]);
  4205.                             }
  4206.                             $listaMappe $listaMappe->getQuery()->getResult();
  4207.                             if (count($listaMappe) > 0) {
  4208.                                 /** @var MappaCategorieArticoli $mappa */
  4209.                                 $mappa $listaMappe[0];
  4210.                                 $codiceTipoOrdine null;
  4211.                                 if (count($data) > $indici['codiceTipoOrdine'] && $data[$indici['codiceTipoOrdine']] != '')
  4212.                                 {
  4213.                                     $codiceTipoOrdine $this->servizi->doctrine->getRepository(TipoOrdine::class)->findOneBy(array('codice' => $data[$indici['codiceTipoOrdine']]));
  4214.                                     if(!$codiceTipoOrdine)
  4215.                                     {
  4216.                                         $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/>');
  4217.                                         continue;
  4218.                                     }
  4219.                                 }
  4220.                                 if ($data[$indici['codiceVariante']] != '') {
  4221.                                     $listaVarianti $repoVarianti->createQueryBuilder('varianti')
  4222.                                         ->where('varianti.mappa = :mappa')->setParameter('mappa'$mappa)
  4223.                                         ->andWhere('varianti.codiceVariante = :codvar')->setParameter('codvar'$data[$indici["codiceVariante"]])
  4224.                                         ->getQuery()->getResult();
  4225.                                     if (count($listaVarianti) > 0) {
  4226.                                         $variante $listaVarianti[0];
  4227.                                         $array = array(
  4228.                                             'variante' => $variante,
  4229.                                             'codiceListino' => $data[$indici['codiceListino']],
  4230.                                             'mappaCategorieArticoli' => $mappa,
  4231.                                             'tipoOrdine' => $codiceTipoOrdine
  4232.                                         );
  4233.                                         if ($data[$indici['codiceAnagrafica']] != '') {
  4234.                                             $array['codiceAnagrafica'] = $data[$indici['codiceAnagrafica']];
  4235.                                         }
  4236.                                         /** @var ListiniVendita $listino */
  4237.                                         $listino $repo->findOneBy($array);
  4238.                                         if ($listino) {
  4239.                                             if ($data[$indici['operazione']] == 'E') {
  4240.                                                 $em->remove($listino);
  4241.                                                 $query_eseguite++;
  4242.                                             } else {
  4243.                                                 $listino->setPrezzo(ServiziController::convertiInNumero($data[$indici["prezzo"]]));
  4244.                                                 $listino->setFlagPrezzoNetto($data[$indici['flagPrezzoNetto']]);
  4245.                                                 $listino->setCodiceAnagrafica($data[$indici["codiceAnagrafica"]]);
  4246.                                                 $listino->setTipoOrdine($codiceTipoOrdine);
  4247.                                                 if(count($data) > $indici['costo'] && $data[$indici['costo']] != '') {
  4248.                                                     $listino->setCosto(ServiziController::convertiInNumero($data[$indici["costo"]]));
  4249.                                                 }
  4250.                                                 if (count($data) > $indici['chiaveEsterna'])
  4251.                                                     $listino->setChiaveEsterna($data[$indici['chiaveEsterna']]);
  4252.                                                 $listino->setDataModifica($now);
  4253.                                                 $em->persist($listino);
  4254.                                                 $query_eseguite++;
  4255.                                             }
  4256.                                         } else {
  4257.                                             $listino = new ListiniVendita();
  4258.                                             $listino->setVariante($variante);
  4259.                                             $listino->setCodiceListino($data[$indici["codiceListino"]]);
  4260.                                             $listino->setPrezzo(ServiziController::convertiInNumero($data[$indici["prezzo"]]));
  4261.                                             $listino->setFlagPrezzoNetto($data[$indici['flagPrezzoNetto']]);
  4262.                                             $listino->setMappaCategorieArticoli($mappa);
  4263.                                             $listino->setTipoOrdine($codiceTipoOrdine);
  4264.                                             $listino->setCodiceAnagrafica($data[$indici["codiceAnagrafica"]]);
  4265.                                             $listino->setDataCreazione($now);
  4266.                                             $listino->setDataModifica($now);
  4267.                                             if(count($data) > $indici['costo'] && $data[$indici['costo']] != '') {
  4268.                                                 $listino->setCosto(ServiziController::convertiInNumero($data[$indici["costo"]]));
  4269.                                             }
  4270.                                             if (count($data) > $indici['chiaveEsterna'])
  4271.                                                 $listino->setChiaveEsterna($data[$indici['chiaveEsterna']]);
  4272.                                             $em->persist($listino);
  4273.                                             $query_eseguite++;
  4274.                                         }
  4275.                                     } else {
  4276.                                         $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);
  4277.                                     }
  4278.                                 } else {
  4279.                                     /** @var  $listino ListiniVendita */
  4280.                                     $array = array(
  4281.                                         'variante' => null,
  4282.                                         'codiceListino' => $data[$indici['codiceListino']],
  4283.                                         'mappaCategorieArticoli' => $mappa,
  4284.                                         'tipoOrdine' => $codiceTipoOrdine
  4285.                                     );
  4286.                                     if ($data[$indici['codiceAnagrafica']] != '') {
  4287.                                         $array['codiceAnagrafica'] = $data[$indici['codiceAnagrafica']];
  4288.                                     }
  4289.                                     $listino $repo->findOneBy($array);
  4290.                                     if ($listino) {
  4291.                                         if ($data[$indici['operazione']] == "E") {
  4292.                                             $em->remove($listino);
  4293.                                             $query_eseguite++;
  4294.                                         } else {
  4295.                                             $listino->setPrezzo(ServiziController::convertiInNumero($data[$indici["prezzo"]]));
  4296.                                             $listino->setFlagPrezzoNetto($data[$indici['flagPrezzoNetto']]);
  4297.                                             $listino->setCodiceAnagrafica($data[$indici["codiceAnagrafica"]]);
  4298.                                             $listino->setDataModifica($now);
  4299.                                             $listino->setTipoOrdine($codiceTipoOrdine);
  4300.                                             if(count($data) > $indici['costo']){
  4301.                                                 $listino->setCosto(ServiziController::convertiInNumero($data[$indici["costo"]]));
  4302.                                             }
  4303.                                             if (count($data) > $indici['chiaveEsterna'])
  4304.                                                 $listino->setChiaveEsterna($data[$indici['chiaveEsterna']]);
  4305.                                             $em->persist($listino);
  4306.                                             $query_eseguite++;
  4307.                                         }
  4308.                                     } else {
  4309.                                         $listino = new ListiniVendita();
  4310.                                         $listino->setVariante(null);
  4311.                                         $listino->setCodiceListino($data[$indici["codiceListino"]]);
  4312.                                         $listino->setPrezzo(ServiziController::convertiInNumero($data[$indici["prezzo"]]));
  4313.                                         $listino->setFlagPrezzoNetto($data[$indici['flagPrezzoNetto']]);
  4314.                                         $listino->setMappaCategorieArticoli($mappa);
  4315.                                         $listino->setTipoOrdine($codiceTipoOrdine);
  4316.                                         $listino->setCodiceAnagrafica($data[$indici["codiceAnagrafica"]]);
  4317.                                         $listino->setDataCreazione($now);
  4318.                                         $listino->setDataModifica($now);
  4319.                                         if(count($data) > $indici['costo']){
  4320.                                             $listino->setCosto(ServiziController::convertiInNumero($data[$indici["costo"]]));
  4321.                                         }
  4322.                                         if (count($data) > $indici['chiaveEsterna'])
  4323.                                             $listino->setChiaveEsterna($data[$indici['chiaveEsterna']]);
  4324.                                         $em->persist($listino);
  4325.                                         $query_eseguite++;
  4326.                                     }
  4327.                                 }
  4328.                             } else {
  4329.                                 $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);
  4330.                                 $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/>';
  4331.                             }
  4332.                         } catch (\PDOException $ex) {
  4333.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione (RIGA: ' $contatore ') : ' $ex->getMessage(), null);
  4334.                         } catch (\Exception|\Throwable $exception) {
  4335.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione: ' $exception->getMessage(), null);
  4336.                         }
  4337.                         $row++;
  4338.                         $em->flush();
  4339.                     }
  4340.                 }
  4341.                 $em->flush();
  4342.                 $row $contatore $row 1;
  4343.                 if ($errori == "") {
  4344.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull);
  4345.                     return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  4346.                 } else {
  4347.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull);
  4348.                     return new Response('Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row "</br>Lista Errori:</br>" $errori);
  4349.                 }
  4350.             } catch (\Exception|\Throwable $ex) {
  4351.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ' $ex->getMessage(), null);
  4352.                 return new Response('Errore importazione: ' $ex->getMessage() . '<br/>' $ex->getTraceAsString());
  4353.             }
  4354.         } else {
  4355.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null);
  4356.             return new Response("ERRORE PERMESSO");
  4357.         }
  4358.     } //OK
  4359.     /**
  4360.      * @Route("/caricaOfferte", name="carica_offerte")
  4361.      */
  4362.     public function caricaOfferte(Request $request)
  4363.     {
  4364.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  4365.             ini_set('max_execution_time'1200);
  4366.             ini_set('memory_limit', -1);
  4367.             $start microtime(true);
  4368.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  4369.             $em $this->servizi->doctrine->getManager();
  4370.             $repo $this->servizi->doctrine->getRepository(Offerte::class);
  4371.             $repoAnagrafica $this->servizi->doctrine->getRepository(Anagrafiche::class);
  4372.             $errori "";
  4373.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  4374.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  4375.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  4376.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  4377.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /caricaOfferte --- Inizio l\' importazione dei dati'null);
  4378.             $errori "";
  4379.             $root_path $pathFileBase "offerte.csv";
  4380.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  4381.             $contatore 0;
  4382.             $row 0;
  4383.             $query_eseguite 0;
  4384.             $batch_size 50;
  4385.             /*
  4386.              *  0    codice_cliente
  4387.                 1    ragione_sociale
  4388.                 2    descrizione_breve
  4389.                 3    descrizione_lunga
  4390.                 4    data_documento
  4391.                 5    importo
  4392.                 6    stato
  4393.                 7    documento
  4394.                 8    numero
  4395.                 9    anno
  4396.                 10    moneta
  4397.                 11    importante
  4398.                 12    path_pdf_originale
  4399.                 13    operazione
  4400.              */
  4401.             $indici = array(
  4402.                 'codiceCliente' => 0,
  4403.                 'ragioneSociale' => 1,
  4404.                 'descrizioneBreve' => 2,
  4405.                 'descrizioneLunga' => 3,
  4406.                 'dataDocumento' => 4,
  4407.                 'importo' => 5,
  4408.                 'stato' => 6,
  4409.                 'documento' => 7,
  4410.                 'numero' => 8,
  4411.                 'anno' => 9,
  4412.                 'moneta' => 10,
  4413.                 'importante' => 11,
  4414.                 'pathPdfOriginale' => 12,
  4415.                 'operazione' => 13
  4416.             );
  4417.             try {
  4418.                 if (($handle fopen($root_path"r")) !== false) {
  4419.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  4420.                         if ($row == 0) {
  4421.                             $row 1;
  4422.                             continue;
  4423.                         }
  4424.                         if ($query_eseguite >= $batch_size) {
  4425.                             $contatore $contatore $row 1;
  4426.                             $row 1;
  4427.                             $query_eseguite 0;
  4428.                             $em->flush();
  4429.                             $em->clear();
  4430.                         }
  4431.                         $now = new \DateTime('now');
  4432.                         try {
  4433.                             //Verifico se presente già un offerte
  4434.                             $offerta $repo->findOneBy(array('documento' => $data[$indici['documento']], 'numero' => $data[$indici['numero']], 'anno' => $data[$indici['anno']]));
  4435.                             if($offerta){
  4436.                                 if($data[$indici['operazione']] == 'E'){
  4437.                                     foreach ($offerta->getAllegati() as $all)
  4438.                                         $em->remove($all);
  4439.                                     foreach ($offerta->getContattiClienti() as $cont)
  4440.                                         $em->remove($cont);
  4441.                                     foreach ($offerta->getRegistroEventi() as $reg)
  4442.                                         $em->remove($reg);
  4443.                                     $em->remove($offerta);
  4444.                                     $query_eseguite++;
  4445.                                 }else if ($data[$indici['operazione']] != 'E'){
  4446.                                     $offerta->setDataModifica($now);
  4447.                                 }
  4448.                             }else if ($data[$indici['operazione']] != 'E'){
  4449.                                 $offerta = new Offerte();
  4450.                                 $offerta->setDataCreazione($now);
  4451.                                 $offerta->setDataModifica($now);
  4452.                                 $offerta->setDocumento($data[$indici['documento']]);
  4453.                                 $offerta->setNumero($data[$indici['numero']]);
  4454.                                 $offerta->setAnno($data[$indici['anno']]);
  4455.                             }
  4456.                             if($data[$indici['operazione']] != 'E'){
  4457.                                 $offerta->setCodiceCliente($data[$indici['codiceCliente']]);
  4458.                                 $offerta->setRagioneSociale($data[$indici['ragioneSociale']]);
  4459.                                 $offerta->setDescrizioneBreve($data[$indici['descrizioneBreve']]);
  4460.                                 $offerta->setDescrizioneLunga($data[$indici['descrizioneLunga']]);
  4461.                                 $offerta->setDataDocumento(ServiziController::convertiInDatetime($data[$indici['dataDocumento']], false'Y-m-d'));
  4462.                                 $offerta->setImporto(ServiziController::convertiInNumero($data[$indici['importo']]));
  4463.                                 $offerta->setStato($data[$indici['stato']]);
  4464.                                 $collegamentoAnagrafica $repoAnagrafica->findOneBy(array('codice' => $offerta->getCodiceCliente()));
  4465.                                 $offerta->setCollegamentoAnagrafica($collegamentoAnagrafica);
  4466.                                 $offerta->setMoneta($data[$indici['moneta']]);
  4467.                                 $offerta->setImportante($data[$indici['importante']] == true false);
  4468.                                 $offerta->setPathPdfOriginale($data[$indici['pathPdfOriginale']]);
  4469.                                 $em->persist($offerta);
  4470.                                 $query_eseguite++;
  4471.                             }
  4472.                         } catch (\PDOException $ex) {
  4473.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione (RIGA: ' $contatore ') : ' $ex->getMessage(), null);
  4474.                         } catch (\Exception|\Throwable $exception) {
  4475.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione: ' $exception->getMessage(), null);
  4476.                         }
  4477.                         $row++;
  4478.                     }
  4479.                 }
  4480.                 $em->flush();
  4481.                 $row $contatore $row 1;
  4482.                 if ($errori == "") {
  4483.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull);
  4484.                     return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  4485.                 } else {
  4486.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull);
  4487.                     return new Response('Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row "</br>Lista Errori:</br>" $errori);
  4488.                 }
  4489.             } catch (\Exception|\Throwable $ex) {
  4490.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ' $ex->getMessage(), null);
  4491.                 return new Response('Errore importazione: ' $ex->getMessage());
  4492.             }
  4493.         } else {
  4494.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null);
  4495.             return new Response("ERRORE PERMESSO");
  4496.         }
  4497.     } //OK
  4498.     /**
  4499.      * @Route("/caricaDocumenti/{svuota}", name="carica_documenti", defaults={"svuota"="0"})
  4500.      */
  4501.     public function caricaDocumenti(Request $request$svuota "0")
  4502.     {
  4503.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  4504.             ini_set('max_execution_time', -1);
  4505.             ini_set('memory_limit', -1);
  4506.             $start microtime(true);
  4507.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  4508.             $em $this->servizi->doctrine->getManager();
  4509.             $repo $this->servizi->doctrine->getRepository(Documenti::class);
  4510.             $repoAnagrafiche $this->servizi->doctrine->getRepository(Anagrafiche::class);
  4511.             $errori "";
  4512.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  4513.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  4514.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  4515.             $connection $this->servizi->doctrine->getConnection();
  4516.             if($svuota == "1"){
  4517.                 $em $this->servizi->doctrine->getManager();
  4518.                 $connection->beginTransaction();
  4519.                 try {
  4520.                     $connection->query("SET FOREIGN_KEY_CHECKS=0;");
  4521.                     $connection->executeUpdate("TRUNCATE `documenti`;");
  4522.                     $connection->executeUpdate("TRUNCATE `documenti_righe`;");
  4523.                     $connection->query("SET FOREIGN_KEY_CHECKS=1;");
  4524.                     $connection->commit();
  4525.                 }catch (\Exception|\Throwable $ex){
  4526.                     $this->servizi->DebuggaException($ex"Errore pulizia documenti e documenti_righe DB");
  4527.                 }
  4528.             }
  4529.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  4530.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /caricaDocumenti/' $svuota ' --- Inizio l\' importazione dei dati'null);
  4531.             $errori "";
  4532.             $root_path $pathFileBase "documenti.csv";
  4533.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  4534.             $contatore 0;
  4535.             $row 0;
  4536.             $query_eseguite 0;
  4537.             $batch_size 50;
  4538.             /*
  4539.             0    identificativo    Identificativo univoco documento
  4540.             1    documento
  4541.             2    anno
  4542.             3    data_documento    2021-12-31
  4543.             4    numero
  4544.             5    numero_fattura
  4545.             6    data_fattura    2021-12-31
  4546.             7    numero_ddt
  4547.             8    data_ddt    2021-12-31
  4548.             9    agente
  4549.             10    codice_anagrafica
  4550.             11    tipo_anagrafica    cliente/fornitore/agente/altro
  4551.             12    ragione_sociale
  4552.             13    indirizzo
  4553.             14    citta
  4554.             15    provincia
  4555.             16    cap
  4556.             17    regione
  4557.             18    codice_fiscale
  4558.             19    partita_iva
  4559.             20    modalita_pagamento
  4560.             21    modalita_spedizione
  4561.             22    modalita_consegna
  4562.             23    totale_documento_netto    decimal(18,5)
  4563.             24    totale_costo_netto    decimal(18,5)
  4564.             25    zona
  4565.             26    mercato
  4566.             27    sub_agente
  4567.             28    capo_area
  4568.             29    nome_file_pdf_documento
  4569.             30    nome_file_pdf_fattura
  4570.             31    nome_file_pdf_ddt
  4571.             32    stato_avanzamento
  4572.             33    indirizzo_tracking_corriere
  4573.             34    utente
  4574.             35    data_consegna    2021-12-31
  4575.             36    operazione    E=Elimina - A=Aggiorna - N=Aggiungi
  4576.             37  codice_agente
  4577.             38    variabile stringa 1
  4578.             39    variabile stringa 2
  4579.             40    variabile stringa 3
  4580.             41    variabile stringa 4
  4581.             42    variabile stringa 5
  4582.             43    variabile decimale 1
  4583.             44    variabile decimale 2
  4584.             45    variabile decimale 3
  4585.             46    variabile decimale 4
  4586.             47    variabile decimale 5
  4587.             48    variabile data ora 1
  4588.             49    variabile data ora 2
  4589.             50    variabile data ora 3
  4590.             51    variabile booleana 1
  4591.             52    variabile booleana 2
  4592.             53    variabile booleana 3
  4593.             54  codice_fornitore
  4594.             55  tipo_documento
  4595.             56  identificativo_utente
  4596.              */
  4597.             $indici = array(
  4598.                 'identificativo' => 0,
  4599.                 'documento' => 1,
  4600.                 'anno' => 2,
  4601.                 'dataDocumento' => 3,
  4602.                 'numero' => 4,
  4603.                 'numeroFattura' => 5,
  4604.                 'dataFattura' => 6,
  4605.                 'numeroDdt' => 7,
  4606.                 'dataDdt' => 8,
  4607.                 'agente' => 9,
  4608.                 'codiceAnagrafica' => 10,
  4609.                 'tipoAnagrafica' => 11,
  4610.                 'ragioneSociale' => 12,
  4611.                 'indirizzo' => 13,
  4612.                 'citta' => 14,
  4613.                 'provincia' => 15,
  4614.                 'cap' => 16,
  4615.                 'regione' => 17,
  4616.                 'codiceFiscale' => 18,
  4617.                 'partitaIva' => 19,
  4618.                 'modalitaPagamento' => 20,
  4619.                 'modalitaSpedizione' => 21,
  4620.                 'modalitaConsegna' => 22,
  4621.                 'totaleDocumentoNetto' => 23,
  4622.                 'totaleCostoNetto' => 24,
  4623.                 'zona' => 25,
  4624.                 'mercato' => 26,
  4625.                 'subAgente' => 27,
  4626.                 'capoArea' => 28,
  4627.                 'nomeFilePdfDocumento' => 29,
  4628.                 'nomeFilePdfFattura' => 30,
  4629.                 'nomeFilePdfDdt' => 31,
  4630.                 'statoAvanzamento' => 32,
  4631.                 'indirizzoTrackingCorriere' => 33,
  4632.                 'utente' => 34,
  4633.                 'dataConsegna' => 35,
  4634.                 'operazione' => 36,
  4635.                 'codiceAgente' => 37,
  4636.                 'variabileStringa1' => 38,
  4637.                 'variabileStringa2' => 39,
  4638.                 'variabileStringa3' => 40,
  4639.                 'variabileStringa4' => 41,
  4640.                 'variabileStringa5' => 42,
  4641.                 'variabileDecimale1' => 43,
  4642.                 'variabileDecimale2' => 44,
  4643.                 'variabileDecimale3' => 45,
  4644.                 'variabileDecimale4' => 46,
  4645.                 'variabileDecimale5' => 47,
  4646.                 'variabileDataora1' => 48,
  4647.                 'variabileDataora2' => 49,
  4648.                 'variabileDataora3' => 50,
  4649.                 'variabileBooleana1' => 51,
  4650.                 'variabileBooleana2' => 52,
  4651.                 'variabileBooleana3' => 53,
  4652.                 'codiceFornitore' => 54,
  4653.                 'tipoDocumento' => 55,
  4654.                 'identificativoUtente' => 56
  4655.             );
  4656.             try {
  4657.                 if (($handle fopen($root_path"r")) !== false) {
  4658.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  4659.                         if ($row == 0) {
  4660.                             $row 1;
  4661.                             continue;
  4662.                         }
  4663.                         if ($query_eseguite >= $batch_size) {
  4664.                             $contatore $contatore $row 1;
  4665.                             $row 1;
  4666.                             $query_eseguite 0;
  4667.                             $em->flush();
  4668.                             $em->clear();
  4669.                         }
  4670.                         $now = new \DateTime('now');
  4671.                         try {
  4672.                             //Verifico se presente già un offerte
  4673.                             $doc $repo->findOneBy(array('identificativo' => $data[$indici['identificativo']]));
  4674.                             if($doc){
  4675.                                 if($data[$indici['operazione']] == 'E'){
  4676.                                     foreach ($doc->getRighe() as $all)
  4677.                                         $em->remove($all);
  4678.                                     $em->remove($doc);
  4679.                                     $query_eseguite++;
  4680.                                 } else if ($data[$indici['operazione']] != 'E'){
  4681.                                     $doc->setDataModifica($now);
  4682.                                 }
  4683.                             } else if ($data[$indici['operazione']] != 'E'){
  4684.                                 $doc = new Documenti();
  4685.                                 $doc->setDataCreazione(new \DateTime());
  4686.                                 $doc->setIdentificativo($data[$indici['identificativo']]);
  4687.                             }
  4688.                             if($data[$indici['operazione']] != 'E'){
  4689.                                 $doc->setDocumento($data[$indici['documento']]);
  4690.                                 $doc->setAnno($data[$indici['anno']]);
  4691.                                 $doc->setDataDocumento(self::OttieniDataDaStringa($data[$indici['dataDocumento']], false));
  4692.                                 $doc->setNumero($data[$indici['numero']]);
  4693.                                 $doc->setNumeroDdt($data[$indici['numeroDdt']]);
  4694.                                 $doc->setDataDdt(self::OttieniDataDaStringa($data[$indici['dataDdt']], false));
  4695.                                 $doc->setNumeroFattura($data[$indici['numeroFattura']]);
  4696.                                 $doc->setDataFattura(self::OttieniDataDaStringa($data[$indici['dataFattura']], false));
  4697.                                 $doc->setAgente($data[$indici['agente']]);
  4698.                                 $doc->setCodiceAnagrafica($data[$indici['codiceAnagrafica']]);
  4699.                                 $doc->setTipoAnagrafica($data[$indici['tipoAnagrafica']]);
  4700.                                 $doc->setRagioneSociale($data[$indici['ragioneSociale']]);
  4701.                                 $doc->setIndirizzo($data[$indici['indirizzo']]);
  4702.                                 $doc->setCitta($data[$indici['citta']]);
  4703.                                 $doc->setProvincia($data[$indici['provincia']]);
  4704.                                 $doc->setCap($data[$indici['cap']]);
  4705.                                 $doc->setRegione($data[$indici['regione']]);
  4706.                                 $doc->setCodiceFiscale($data[$indici['codiceFiscale']]);
  4707.                                 $doc->setPartitaIva($data[$indici['partitaIva']]);
  4708.                                 $doc->setModalitaPagamento($data[$indici['modalitaPagamento']]);
  4709.                                 $doc->setModalitaSpedizione($data[$indici['modalitaSpedizione']]);
  4710.                                 $doc->setModalitaConsegna($data[$indici['modalitaConsegna']]);
  4711.                                 $doc->setTotaleDocumentoNetto(str_replace(',','.'$data[$indici['totaleDocumentoNetto']]));
  4712.                                 $doc->setTotaleCostoNetto(str_replace(',','.',$data[$indici['totaleCostoNetto']]));
  4713.                                 $doc->setZona($data[$indici['zona']]);
  4714.                                 $doc->setMercato($data[$indici['mercato']]);
  4715.                                 $doc->setSubAgente($data[$indici['subAgente']]);
  4716.                                 $doc->setCapoArea($data[$indici['capoArea']]);
  4717.                                 $doc->setNomeFilePdfDocumento($data[$indici['nomeFilePdfDocumento']]);
  4718.                                 $doc->setNomeFilePdfFattura($data[$indici['nomeFilePdfFattura']]);
  4719.                                 $doc->setNomefilePdfDdt($data[$indici['nomeFilePdfDdt']]);
  4720.                                 $doc->setStatoAvanzamento($data[$indici['statoAvanzamento']]);
  4721.                                 $doc->setIndirizzoTrackingCorriere($data[$indici['indirizzoTrackingCorriere']]);
  4722.                                 $doc->setUtente($data[$indici['utente']]);
  4723.                                 $doc->setDataConsegna(self::OttieniDataDaStringa($data[$indici['dataConsegna']], false));
  4724.                                 $doc->setCodiceAgente($data[$indici['codiceAgente']]);
  4725.                                 $doc->setDataModifica(new \DateTime());
  4726.                                 $doc->setVariabileStringa1($data[$indici['variabileStringa1']]);
  4727.                                 $doc->setVariabileStringa2($data[$indici['variabileStringa2']]);
  4728.                                 $doc->setVariabileStringa3($data[$indici['variabileStringa3']]);
  4729.                                 $doc->setVariabileStringa4($data[$indici['variabileStringa4']]);
  4730.                                 $doc->setVariabileStringa5($data[$indici['variabileStringa5']]);
  4731.                                 $doc->setVariabileDecimale1(ServiziController::convertiInNumero($data[$indici['variabileDecimale1']]));
  4732.                                 $doc->setVariabileDecimale2(ServiziController::convertiInNumero($data[$indici['variabileDecimale2']]));
  4733.                                 $doc->setVariabileDecimale3(ServiziController::convertiInNumero($data[$indici['variabileDecimale3']]));
  4734.                                 $doc->setVariabileDecimale4(ServiziController::convertiInNumero($data[$indici['variabileDecimale4']]));
  4735.                                 $doc->setVariabileDecimale5(ServiziController::convertiInNumero($data[$indici['variabileDecimale5']]));
  4736.                                 $doc->setVariabileDataora1(self::OttieniDataDaStringa($data[$indici['variabileDataora1']], true));
  4737.                                 $doc->setVariabileDataora2(self::OttieniDataDaStringa($data[$indici['variabileDataora2']], true));
  4738.                                 $doc->setVariabileDataora3(self::OttieniDataDaStringa($data[$indici['variabileDataora3']], true));
  4739.                                 $doc->setVariabileBooleana1(ServiziController::convertiInBoolean($data[$indici['variabileBooleana1']]));
  4740.                                 $doc->setVariabileBooleana2(ServiziController::convertiInBoolean($data[$indici['variabileBooleana2']]));
  4741.                                 $doc->setVariabileBooleana3(ServiziController::convertiInBoolean($data[$indici['variabileBooleana3']]));
  4742.                                 if(count($data) > $indici['codiceFornitore'])
  4743.                                     $doc->setCodiceFornitore($data[$indici['codiceFornitore']]);
  4744.                                 if(count($data) > $indici['tipoDocumento'])
  4745.                                     $doc->setTipoDocumento($data[$indici['tipoDocumento']]);
  4746.                                 if(count($data) > $indici['identificativoUtente'])
  4747.                                     $doc->setVincolaIdentificativoUtente($data[$indici['identificativoUtente']]);
  4748.                                 $em->persist($doc);
  4749.                                 $query_eseguite++;
  4750.                             }
  4751.                         } catch (\PDOException $ex) {
  4752.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione (RIGA: ' . ($contatore $row) . ') : ' $ex->getMessage(), null);
  4753.                         } catch (\Exception|\Throwable $exception) {
  4754.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione: (RIGA: ' . ($contatore $row) . ') : ' $exception->getMessage(), null);
  4755.                         }
  4756.                         $row++;
  4757.                     }
  4758.                 }
  4759.                 $em->flush();
  4760.                 $row $contatore $row 1;
  4761.                 if ($errori == "") {
  4762.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull);
  4763.                     return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  4764.                 } else {
  4765.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull);
  4766.                     return new Response('Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row "</br>Lista Errori:</br>" $errori);
  4767.                 }
  4768.             } catch (\Exception|\Throwable $ex) {
  4769.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ' $ex->getMessage(), null);
  4770.                 return new Response('Errore importazione: ' $ex->getMessage());
  4771.             }
  4772.         } else {
  4773.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null);
  4774.             return new Response("ERRORE PERMESSO");
  4775.         }
  4776.     } //OK
  4777.     /**
  4778.      * @Route("/caricaRigheDocumenti/{svuota}", name="carica_documenti_righe", defaults={"svuota"="0"})
  4779.      */
  4780.     public function caricaRigheDocumenti(Request $request$svuota "0")
  4781.     {
  4782.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  4783.             ini_set('max_execution_time'1200);
  4784.             ini_set('memory_limit', -1);
  4785.             $start microtime(true);
  4786.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  4787.             $em $this->servizi->doctrine->getManager();
  4788.             $repo $this->servizi->doctrine->getRepository(DocumentiRighe::class);
  4789.             $repoDoc $this->servizi->doctrine->getRepository(Documenti::class);
  4790.             $errori "";
  4791.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  4792.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  4793.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  4794.             $connection $this->servizi->doctrine->getConnection();
  4795.             if($svuota == "1"){
  4796.                 $em $this->servizi->doctrine->getManager();
  4797.                 $connection->beginTransaction();
  4798.                 try {
  4799.                     $connection->query("SET FOREIGN_KEY_CHECKS=0;");
  4800.                     $connection->executeUpdate("TRUNCATE `documenti_righe`;");
  4801.                     $connection->query("SET FOREIGN_KEY_CHECKS=1;");
  4802.                     $connection->commit();
  4803.                 }catch (\Exception|\Throwable $ex){
  4804.                     $this->servizi->DebuggaException($ex"Errore pulizia documenti_righe DB");
  4805.                 }
  4806.             }
  4807.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  4808.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /caricaDocumentiRighe/' $svuota ' --- Inizio l\' importazione dei dati'null);
  4809.             $errori "";
  4810.             $root_path $pathFileBase "righe_documenti.csv";
  4811.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  4812.             $contatore 0;
  4813.             $row 0;
  4814.             $query_eseguite 0;
  4815.             $batch_size 50;
  4816.             /*
  4817.                 0    identificativo_documento    Collegamento con documento
  4818.                 1    numero_riga    intero che identifica la riga (Chiave univoca)
  4819.                 2    codice_articolo
  4820.                 3    descrizione_articolo
  4821.                 4    marca
  4822.                 5    um
  4823.                 6    data_consegna    2021-12-31
  4824.                 7    quantita    decimal(18,5)
  4825.                 8    prezzo_netto_totale    decimal(18,5)
  4826.                 9    prezzo_netto_cad    decimal(18,5)
  4827.                 10    prezzo_lordo_totale    decimal(18,5)
  4828.                 11    prezzo_lordo_cad    decimal(18,5)
  4829.                 12    sconti_maggiorazioni    -0.00#-3.00#+10.00#-0.00#-0.00#-0.00
  4830.                 13    descrizione_articolo_agg1
  4831.                 14    descrizione_articolo_agg2
  4832.                 15    variabile_1
  4833.                 16    variabile_2
  4834.                 17    variabile_3
  4835.                 18    variabile_4
  4836.                 19    variabile_5
  4837.                 20    qta_alt_1
  4838.                 21    qta_alt_2
  4839.                 22    qta_alt_3
  4840.                 23    costo_cad    decimal(18,5)
  4841.                 24    costo_totale    decimal(18,5)
  4842.                 25    stato_avanzamento
  4843.                 26    numero_riga_alternativo    intero
  4844.                 27    operazione    E=Elimina - A=Aggiorna - N=Aggiungi
  4845.                 28    variabile stringa 1
  4846.                 29    variabile stringa 2
  4847.                 30    variabile stringa 3
  4848.                 31    variabile stringa 4
  4849.                 32    variabile stringa 5
  4850.                 33    variabile decimale 1
  4851.                 34    variabile decimale 2
  4852.                 35    variabile decimale 3
  4853.                 36    variabile decimale 4
  4854.                 37    variabile decimale 5
  4855.                 38    variabile data ora 1
  4856.                 39    variabile data ora 2
  4857.                 40    variabile data ora 3
  4858.                 41    variabile booleana 1
  4859.                 42    variabile booleana 2
  4860.                 43    variabile booleana 3
  4861.                 44  stato
  4862.              */
  4863.             $indici = array(
  4864.                 'identificativoDocumento' => 0,
  4865.                 'numeroRiga' => 1,
  4866.                 'codiceArticolo' => 2,
  4867.                 'descrizioneArticolo' => 3,
  4868.                 'marca' => 4,
  4869.                 'um' => 5,
  4870.                 'dataConsegna' => 6,
  4871.                 'quantita' => 7,
  4872.                 'prezzoNettoTotale' => 8,
  4873.                 'prezzoNettoCad' => 9,
  4874.                 'prezzoLordoTotale' => 10,
  4875.                 'prezzoLordoCad' => 11,
  4876.                 'scontiMaggiorazioni' => 12,
  4877.                 'descrizioneArticoloAgg1' => 13,
  4878.                 'descrizioneArticoloAgg2' => 14,
  4879.                 'variabile1' => 15,
  4880.                 'variabile2' => 16,
  4881.                 'variabile3' => 17,
  4882.                 'variabile4' => 18,
  4883.                 'variabile5' => 19,
  4884.                 'qtaAlt1' => 20,
  4885.                 'qtaAlt2' => 21,
  4886.                 'qtaAlt3' => 22,
  4887.                 'costoCad' => 23,
  4888.                 'costoTotale' => 24,
  4889.                 'statoAvanzamento' => 25,
  4890.                 'numeroRigaAlternativo' => 26,
  4891.                 'operazione' => 27,
  4892.                 'variabileStringa1' => 28,
  4893.                 'variabileStringa2' => 29,
  4894.                 'variabileStringa3' => 30,
  4895.                 'variabileStringa4' => 31,
  4896.                 'variabileStringa5' => 32,
  4897.                 'variabileDecimale1' => 33,
  4898.                 'variabileDecimale2' => 34,
  4899.                 'variabileDecimale3' => 35,
  4900.                 'variabileDecimale4' => 36,
  4901.                 'variabileDecimale5' => 37,
  4902.                 'variabileDataora1' => 38,
  4903.                 'variabileDataora2' => 39,
  4904.                 'variabileDataora3' => 40,
  4905.                 'variabileBooleana1' => 41,
  4906.                 'variabileBooleana2' => 42,
  4907.                 'variabileBooleana3' => 43,
  4908.                 'stato' => 44
  4909.             );
  4910.             try {
  4911.                 if (($handle fopen($root_path"r")) !== false) {
  4912.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  4913.                         if ($row == 0) {
  4914.                             $row 1;
  4915.                             continue;
  4916.                         }
  4917.                         if ($query_eseguite >= $batch_size) {
  4918.                             $contatore $contatore $row 1;
  4919.                             $row 1;
  4920.                             $query_eseguite 0;
  4921.                             $em->flush();
  4922.                             $em->clear();
  4923.                         }
  4924.                         $now = new \DateTime('now');
  4925.                         try {
  4926.                             $doc $repoDoc->findOneBy(array('identificativo' => $data[$indici['identificativoDocumento']]));
  4927.                             if($doc) {
  4928.                                 //Verifico se presente già un offerte
  4929.                                 $rigaDoc $repo->findOneBy(array('identificativoDocumento' => $data[$indici['identificativoDocumento']], 'numeroRiga' => $data[$indici['numeroRiga']]));
  4930.                                 if ($rigaDoc) {
  4931.                                     if ($data[$indici['operazione']] == 'E') {
  4932.                                         $em->remove($rigaDoc);
  4933.                                         $query_eseguite++;
  4934.                                     } else if ($data[$indici['operazione']] != 'E') {
  4935.                                         $rigaDoc->setDataModifica($now);
  4936.                                     }
  4937.                                 } else if ($data[$indici['operazione']] != 'E') {
  4938.                                     $rigaDoc = new DocumentiRighe();
  4939.                                     $rigaDoc->setDataCreazione(new \DateTime());
  4940.                                     $rigaDoc->setIdentificativoDocumento($doc);
  4941.                                     $rigaDoc->setNumeroRiga($data[$indici['numeroRiga']]);
  4942.                                 }
  4943.                                 if ($data[$indici['operazione']] != 'E') {
  4944.                                     $rigaDoc->setCodiceArticolo($data[$indici['codiceArticolo']]);
  4945.                                     $rigaDoc->setDescrizioneArticolo($data[$indici['descrizioneArticolo']]);
  4946.                                     $rigaDoc->setMarca($data[$indici['marca']]);
  4947.                                     $rigaDoc->setUm($data[$indici['um']]);
  4948.                                     $rigaDoc->setDataConsegna(self::OttieniDataDaStringa($data[$indici['dataConsegna']], false));
  4949.                                     $rigaDoc->setQuantita(ServiziController::convertiInNumero($data[$indici['quantita']]));
  4950.                                     $rigaDoc->setPrezzoNettoTotale(ServiziController::convertiInNumero($data[$indici['prezzoNettoTotale']]));
  4951.                                     $rigaDoc->setPrezzoNettoCad(ServiziController::convertiInNumero($data[$indici['prezzoNettoCad']]));
  4952.                                     $rigaDoc->setPrezzoLordoTotale(ServiziController::convertiInNumero($data[$indici['prezzoLordoTotale']]));
  4953.                                     $rigaDoc->setPrezzoLordoCad(ServiziController::convertiInNumero($data[$indici['prezzoLordoCad']]));
  4954.                                     $rigaDoc->setScontiMaggiorazioni($data[$indici['scontiMaggiorazioni']]);
  4955.                                     $rigaDoc->setDescrizioneArticoloAgg1($data[$indici['descrizioneArticoloAgg1']]);
  4956.                                     $rigaDoc->setDescrizioneArticoloAgg2($data[$indici['descrizioneArticoloAgg2']]);
  4957.                                     $rigaDoc->setVariabile1($data[$indici['variabile1']]);
  4958.                                     $rigaDoc->setVariabile2($data[$indici['variabile2']]);
  4959.                                     $rigaDoc->setVariabile3($data[$indici['variabile3']]);
  4960.                                     $rigaDoc->setVariabile4($data[$indici['variabile4']]);
  4961.                                     $rigaDoc->setVariabile5($data[$indici['variabile5']]);
  4962.                                     $rigaDoc->setQtaAlt1(ServiziController::convertiInNumero($data[$indici['qtaAlt1']]));
  4963.                                     $rigaDoc->setQtaAlt2(ServiziController::convertiInNumero($data[$indici['qtaAlt2']]));
  4964.                                     $rigaDoc->setQtaAlt3(ServiziController::convertiInNumero($data[$indici['qtaAlt3']]));
  4965.                                     $rigaDoc->setCostoCad(ServiziController::convertiInNumero($data[$indici['costoCad']]));
  4966.                                     $rigaDoc->setCostoTotale(ServiziController::convertiInNumero($data[$indici['costoTotale']]));
  4967.                                     $rigaDoc->setStatoAvanzamento($data[$indici['statoAvanzamento']]);
  4968.                                     $rigaDoc->setNumeroRigaAlternativo(ServiziController::convertiInNumero($data[$indici['numeroRigaAlternativo']]));
  4969.                                     $rigaDoc->setDataModifica(new \DateTime());
  4970.                                     $rigaDoc->setVariabileStringa1($data[$indici['variabileStringa1']]);
  4971.                                     $rigaDoc->setVariabileStringa2($data[$indici['variabileStringa2']]);
  4972.                                     $rigaDoc->setVariabileStringa3($data[$indici['variabileStringa3']]);
  4973.                                     $rigaDoc->setVariabileStringa4($data[$indici['variabileStringa4']]);
  4974.                                     $rigaDoc->setVariabileStringa5($data[$indici['variabileStringa5']]);
  4975.                                     $rigaDoc->setVariabileDecimale1(ServiziController::convertiInNumero($data[$indici['variabileDecimale1']]));
  4976.                                     $rigaDoc->setVariabileDecimale2(ServiziController::convertiInNumero($data[$indici['variabileDecimale2']]));
  4977.                                     $rigaDoc->setVariabileDecimale3(ServiziController::convertiInNumero($data[$indici['variabileDecimale3']]));
  4978.                                     $rigaDoc->setVariabileDecimale4(ServiziController::convertiInNumero($data[$indici['variabileDecimale4']]));
  4979.                                     $rigaDoc->setVariabileDecimale5(ServiziController::convertiInNumero($data[$indici['variabileDecimale5']]));
  4980.                                     $rigaDoc->setVariabileDataora1(self::OttieniDataDaStringa($data[$indici['variabileDataora1']], true));
  4981.                                     $rigaDoc->setVariabileDataora2(self::OttieniDataDaStringa($data[$indici['variabileDataora2']], true));
  4982.                                     $rigaDoc->setVariabileDataora3(self::OttieniDataDaStringa($data[$indici['variabileDataora3']], true));
  4983.                                     $rigaDoc->setVariabileBooleana1(ServiziController::convertiInBoolean($data[$indici['variabileBooleana1']]));
  4984.                                     $rigaDoc->setVariabileBooleana2(ServiziController::convertiInBoolean($data[$indici['variabileBooleana2']]));
  4985.                                     $rigaDoc->setVariabileBooleana3(ServiziController::convertiInBoolean($data[$indici['variabileBooleana3']]));
  4986.                                     if (count($data) >= $indici['stato'] - 1){
  4987.                                         $rigaDoc->setStato($data[$indici['stato']]);
  4988.                                     }
  4989.                                     $em->persist($rigaDoc);
  4990.                                     $query_eseguite++;
  4991.                                 }
  4992.                             }else{
  4993.                                 $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione (RIGA: ' . ($row $contatore) . ') : Documento non trovato!' null);
  4994.                                 $errori .= ('Errore importazione (RIGA: ' $contatore ') : Documento non trovato!');
  4995.                             }
  4996.                         } catch (\PDOException $ex) {
  4997.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione (RIGA: ' . ($row $contatore) . ') : ' $ex->getMessage(), null);
  4998.                         } catch (\Exception|\Throwable $exception) {
  4999.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione: (RIGA: ' . ($row $contatore) . ') : ' $exception->getMessage(), null);
  5000.                         }
  5001.                         $row++;
  5002.                     }
  5003.                 }
  5004.                 $em->flush();
  5005.                 $row $contatore $row 1;
  5006.                 if ($errori == "") {
  5007.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull);
  5008.                     return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  5009.                 } else {
  5010.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull);
  5011.                     return new Response('Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row "</br>Lista Errori:</br>" $errori);
  5012.                 }
  5013.             } catch (\Exception|\Throwable $ex) {
  5014.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ' $ex->getMessage(), null);
  5015.                 return new Response('Errore importazione: ' $ex->getMessage());
  5016.             }
  5017.         } else {
  5018.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null);
  5019.             return new Response("ERRORE PERMESSO");
  5020.         }
  5021.     } //OK
  5022.     /**
  5023.      * @Route("/caricaOfferteRighe", name="carica_offerte_righe")
  5024.      */
  5025.     public function caricaOfferteRighe(Request $request)
  5026.     {
  5027.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  5028.             ini_set('max_execution_time'1200);
  5029.             ini_set('memory_limit', -1);
  5030.             $start microtime(true);
  5031.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  5032.             $em $this->servizi->doctrine->getManager();
  5033.             $repo $this->servizi->doctrine->getRepository(OfferteRighe::class);
  5034.             $repoOfferte $this->servizi->doctrine->getRepository(Offerte::class);
  5035.             $errori "";
  5036.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  5037.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  5038.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  5039.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  5040.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /caricaOfferteRighe --- Inizio l\' importazione dei dati'null);
  5041.             $errori "";
  5042.             $root_path $pathFileBase "offerte_righe.csv";
  5043.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  5044.             $contatore 0;
  5045.             $row 0;
  5046.             $query_eseguite 0;
  5047.             $batch_size 50;
  5048.             /*
  5049.                 0    documento
  5050.                 1    numero
  5051.                 2    anno
  5052.                 3    macro_categoria_articolo
  5053.                 4    codice_articolo
  5054.                 5    marca_articolo
  5055.                 6    descrizione_articolo
  5056.                 7    descrizione_seconaria_articolo
  5057.                 8    um
  5058.                 9    stringa_sconti
  5059.                 10    qta
  5060.                 11    nota_riga
  5061.                 12    netto_cad
  5062.                 13    lordo_cad
  5063.                 14    netto_totale
  5064.                 15    lordo_totale
  5065.                 16    imposta
  5066.                 17    imponibile
  5067.                 18    operazione
  5068.                 19  numeroRiga
  5069.                 20  stato
  5070.              */
  5071.             $indici = array(
  5072.                 'documento' => 0,
  5073.                 'numero' => 1,
  5074.                 'anno' => 2,
  5075.                 'macroCategoriaArticolo' => 3,
  5076.                 'codiceArticolo' => 4,
  5077.                 'marcaArticolo' => 5,
  5078.                 'descrizioneArticolo' => 6,
  5079.                 'descrizioneSecondariaArticolo' => 7,
  5080.                 'um' => 8,
  5081.                 'stringaSconti' => 9,
  5082.                 'qta' => 10,
  5083.                 'notaRiga' => 11,
  5084.                 'nettoCad' => 12,
  5085.                 'lordoCad' => 13,
  5086.                 'nettoTotale' => 14,
  5087.                 'lordoTotale' => 15,
  5088.                 'imposta' => 16,
  5089.                 'imponibile' => 17,
  5090.                 'operazione' => 18,
  5091.                 'numeroRiga' => 19,
  5092.                 'stato' => 20
  5093.             );
  5094.             try {
  5095.                 if (($handle fopen($root_path"r")) !== false) {
  5096.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  5097.                         if ($row == 0) {
  5098.                             $row 1;
  5099.                             continue;
  5100.                         }
  5101.                         if ($query_eseguite >= $batch_size) {
  5102.                             $contatore $contatore $row 1;
  5103.                             $row 1;
  5104.                             $query_eseguite 0;
  5105.                             $em->flush();
  5106.                             $em->clear();
  5107.                         }
  5108.                         $now = new \DateTime('now');
  5109.                         try {
  5110.                             //Recupero l'offerta
  5111.                             $offerta $repoOfferte->findOneBy(array('documento' => $data[$indici['documento']], 'numero' => $data[$indici['numero']], 'anno' => $data[$indici['anno']]));
  5112.                             if($offerta){
  5113.                                 /** @var OfferteRighe $riga */
  5114.                                 $riga $offerta->RitornaRigaDaNumero($data[$indici['numeroRiga']]);
  5115.                                 if($riga && $data[$indici['operazione']] == 'E'){
  5116.                                     $em->remove($riga);
  5117.                                     $query_eseguite++;
  5118.                                 }
  5119.                                 if($data[$indici['operazione']] != "E"){
  5120.                                     if(!$riga) {
  5121.                                         $riga = new OfferteRighe();
  5122.                                         $riga->setDataCreazione($now);
  5123.                                         $riga->setOfferta($offerta);
  5124.                                     }
  5125.                                     $riga->setDataModifica($now);
  5126.                                     $riga->setMacroCategoria($data[$indici['macroCategoriaArticolo']]);
  5127.                                     $riga->setCodiceArticolo($data[$indici['codiceArticolo']]);
  5128.                                     $riga->setDescrizioneArticolo($data[$indici['descrizioneArticolo']]);
  5129.                                     $riga->setDescrizioneSecondariaArticolo($data[$indici['descrizioneSecondariaArticolo']]);
  5130.                                     $riga->setMarca($data[$indici['marcaArticolo']]);
  5131.                                     $riga->setNumeroRiga($data[$indici['numeroRiga']]);
  5132.                                     $riga->setUm($data[$indici['um']]);
  5133.                                     $riga->setStringaSconti($data[$indici['stringaSconti']]);
  5134.                                     $riga->setQta(ServiziController::convertiInNumero($data[$indici['qta']]));
  5135.                                     $riga->setNotaRiga($data[$indici['notaRiga']]);
  5136.                                     $riga->setNettoCad(ServiziController::convertiInNumero($data[$indici['nettoCad']]));
  5137.                                     $riga->setLordoCad(ServiziController::convertiInNumero($data[$indici['lordoCad']]));
  5138.                                     $riga->setNettoTotale(ServiziController::convertiInNumero($data[$indici['nettoTotale']]));
  5139.                                     $riga->setLordoTotale(ServiziController::convertiInNumero($data[$indici['lordoTotale']]));
  5140.                                     $riga->setImposta(ServiziController::convertiInNumero($data[$indici['imposta']]));
  5141.                                     $riga->setImponibile(ServiziController::convertiInNumero($data[$indici['imponibile']]));
  5142.                                     if (count($data) >= $indici['stato'] - 1){
  5143.                                         $riga->setStato($data[$indici['stato']]);
  5144.                                     }
  5145.                                     //Vedo se presente un collegamento con una mappa articolo dell'ecommerce
  5146.                                     $articoloTrovato $this->servizi->doctrine->getRepository(MappaCategorieArticoli::class)->createQueryBuilder('mappa_categorie_articoli')
  5147.                                         ->leftJoin('mappa_categorie_articoli.articolo''articolo')
  5148.                                         ->where('articolo.codice = :cod')->setParameter('cod'$data[$indici['codiceArticolo']])
  5149.                                         ->andWhere('articolo.macroCategoria = :macro')->setParameter('macro'$data[$indici['macroCategoriaArticolo']])
  5150.                                         ->andWhere('mappa_categorie_articoli.marca = :marca')->setParameter('marca'$data[$indici['marcaArticolo']])
  5151.                                         ->setMaxResults(1)
  5152.                                         ->getQuery()->getResult();
  5153.                                     if(count($articoloTrovato) > 0)
  5154.                                         $riga->setCollegamentoMappaCategorieArticoli($articoloTrovato[0]);
  5155.                                     $em->persist($riga);
  5156.                                     $query_eseguite++;
  5157.                                 }
  5158.                             }else {
  5159.                                 $errori .= ("Riga: " $contatore " -- Offerta non trovata con Documento: " $data[$indici['documento']] . " - Numero: " $data[$indici['numero']] . " - Anno: " $data[$indici['anno']] . "\n");
  5160.                             }
  5161.                         } catch (\PDOException $ex) {
  5162.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione (RIGA: ' $contatore ') : ' $ex->getMessage(), null);
  5163.                         } catch (\Exception|\Throwable $exception) {
  5164.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione: ' $exception->getMessage(), null);
  5165.                         }
  5166.                         $row++;
  5167.                     }
  5168.                 }
  5169.                 $em->flush();
  5170.                 $row $contatore $row 1;
  5171.                 if ($errori == "") {
  5172.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull);
  5173.                     return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  5174.                 } else {
  5175.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull);
  5176.                     return new Response('Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row "</br>Lista Errori:</br>" $errori);
  5177.                 }
  5178.             } catch (\Exception|\Throwable $ex) {
  5179.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ' $ex->getMessage(), null);
  5180.                 return new Response('Errore importazione: ' $ex->getMessage());
  5181.             }
  5182.         } else {
  5183.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null);
  5184.             return new Response("ERRORE PERMESSO");
  5185.         }
  5186.     } //OK
  5187.     /**
  5188.      * @Route("/caricaOfferteRegistroEventi", name="carica_offerte_registro_eventi")
  5189.      */
  5190.     public function caricaOfferteRegistroEventi(Request $request)
  5191.     {
  5192.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  5193.             ini_set('max_execution_time'1200);
  5194.             ini_set('memory_limit', -1);
  5195.             $start microtime(true);
  5196.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  5197.             $em $this->servizi->doctrine->getManager();
  5198.             $repo $this->servizi->doctrine->getRepository(OfferteRegistroEventi::class);
  5199.             $repoOfferte $this->servizi->doctrine->getRepository(Offerte::class);
  5200.             $errori "";
  5201.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  5202.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  5203.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  5204.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  5205.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /caricaOfferteRegistroEventi --- Inizio l\' importazione dei dati'null);
  5206.             $errori "";
  5207.             $root_path $pathFileBase "offerte_registro_eventi.csv";
  5208.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  5209.             $contatore 0;
  5210.             $row 0;
  5211.             $query_eseguite 0;
  5212.             $batch_size 50;
  5213.             /*
  5214.                 0    documento
  5215.                 1    numero
  5216.                 2    anno
  5217.                 3    titolo
  5218.                 4    descrizione
  5219.                 5    operazione
  5220.                 6    identificativo
  5221.                 7   data_ora
  5222.              */
  5223.             $indici = array(
  5224.                 'documento' => 0,
  5225.                 'numero' => 1,
  5226.                 'anno' => 2,
  5227.                 'titolo' => 3,
  5228.                 'descrizione' => 4,
  5229.                 'operazione' => 5,
  5230.                 'identificativo' => 6,
  5231.                 'dataOra' => 7
  5232.             );
  5233.             try {
  5234.                 if (($handle fopen($root_path"r")) !== false) {
  5235.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  5236.                         if ($row == 0) {
  5237.                             $row 1;
  5238.                             continue;
  5239.                         }
  5240.                         if ($query_eseguite >= $batch_size) {
  5241.                             $contatore $contatore $row 1;
  5242.                             $row 1;
  5243.                             $query_eseguite 0;
  5244.                             $em->flush();
  5245.                             $em->clear();
  5246.                         }
  5247.                         $now = new \DateTime('now');
  5248.                         try {
  5249.                             //Recupero l'offerta
  5250.                             $offerta $repoOfferte->findOneBy(array('documento' => $data[$indici['documento']], 'numero' => $data[$indici['numero']], 'anno' => $data[$indici['anno']]));
  5251.                             if($offerta){
  5252.                                 /** @var OffertaRegistroEventi $reg */
  5253.                                 $reg $offerta->RitornaRegistroEventoDaIdentificativo($data[$indici['identificativo']]);
  5254.                                 if($reg && $data[$indici['operazione']] == 'E'){
  5255.                                     $em->remove($reg);
  5256.                                     $query_eseguite++;
  5257.                                 }
  5258.                                 if($data[$indici['operazione']] != "E"){
  5259.                                     if(!$reg){
  5260.                                         $reg = new OfferteRegistroEventi();
  5261.                                         $reg->setDataCreazione($now);
  5262.                                         $reg->setOfferta($offerta);
  5263.                                     }
  5264.                                     if(count($data) >= 8){
  5265.                                         $reg->setDataModifica(self::OttieniDataDaStringa($data[$indici['dataOra']], true));
  5266.                                     }else {
  5267.                                         $reg->setDataModifica($now);
  5268.                                     }
  5269.                                     if($data[$indici['identificativo']] != ''){
  5270.                                         $reg->setIdentificativo($data[$indici['identificativo']]);
  5271.                                     }else {
  5272.                                         $reg->setIdentificativo($this->servizi->generaStringaCasuale(20));
  5273.                                     }
  5274.                                     $reg->setTitolo($data[$indici['titolo']]);
  5275.                                     $reg->setDescrizione($data[$indici['descrizione']]);
  5276.                                     $em->persist($reg);
  5277.                                     $query_eseguite++;
  5278.                                 }
  5279.                             }else {
  5280.                                 $errori .= ("RIGA: " $contatore " -- Offerta non trovata con Documento: " $data[$indici['documento']] . " - Numero: " $data[$indici['numero']] . " - Anno: " $data[$indici['anno']] . "\n");
  5281.                             }
  5282.                         } catch (\PDOException $ex) {
  5283.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione (RIGA: ' $contatore ') : ' $ex->getMessage(), null);
  5284.                         } catch (\Exception|\Throwable $exception) {
  5285.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione: ' $exception->getMessage(), null);
  5286.                         }
  5287.                         $row++;
  5288.                     }
  5289.                 }
  5290.                 $em->flush();
  5291.                 $row $contatore $row 1;
  5292.                 if ($errori == "") {
  5293.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull);
  5294.                     return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  5295.                 } else {
  5296.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull);
  5297.                     return new Response('Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row "</br>Lista Errori:</br>" $errori);
  5298.                 }
  5299.             } catch (\Exception|\Throwable $ex) {
  5300.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ' $ex->getMessage(), null);
  5301.                 return new Response('Errore importazione: ' $ex->getMessage());
  5302.             }
  5303.         } else {
  5304.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null);
  5305.             return new Response("ERRORE PERMESSO");
  5306.         }
  5307.     } //OK
  5308.     /**
  5309.      * @Route("/caricaOfferteAllegati", name="carica_offerte_allegati")
  5310.      */
  5311.     public function caricaOfferteAllegati(Request $request)
  5312.     {
  5313.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  5314.             ini_set('max_execution_time'1200);
  5315.             ini_set('memory_limit', -1);
  5316.             $start microtime(true);
  5317.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  5318.             $em $this->servizi->doctrine->getManager();
  5319.             $repo $this->servizi->doctrine->getRepository(OfferteAllegati::class);
  5320.             $repoOfferte $this->servizi->doctrine->getRepository(Offerte::class);
  5321.             $errori "";
  5322.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  5323.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  5324.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  5325.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  5326.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /caricaOfferteAllegati--- Inizio l\' importazione dei dati'null);
  5327.             $errori "";
  5328.             $root_path $pathFileBase "offerte_allegati.csv";
  5329.             $separator $this->imp->ritornaImpostazioneDaNome("ImportazioniFileCsvSeparatore");
  5330.             $contatore 0;
  5331.             $row 0;
  5332.             $query_eseguite 0;
  5333.             $batch_size 50;
  5334.             /*
  5335.                 0    documento
  5336.                 1    numero
  5337.                 2    anno
  5338.                 3    nome
  5339.                 4    file finale
  5340.                 5    tipo_file
  5341.                 6    operazione
  5342.                 7    identificativo
  5343.              */
  5344.             $indici = array(
  5345.                 'documento' => 0,
  5346.                 'numero' => 1,
  5347.                 'anno' => 2,
  5348.                 'nome' => 3,
  5349.                 'tipoFile' => 4,
  5350.                 'operazione' => 5,
  5351.                 'identificativo' => 6
  5352.             );
  5353.             try {
  5354.                 if (($handle fopen($root_path"r")) !== false) {
  5355.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  5356.                         if ($row == 0) {
  5357.                             $row 1;
  5358.                             continue;
  5359.                         }
  5360.                         if ($query_eseguite >= $batch_size) {
  5361.                             $contatore $contatore $row 1;
  5362.                             $row 1;
  5363.                             $query_eseguite 0;
  5364.                             $em->flush();
  5365.                             $em->clear();
  5366.                         }
  5367.                         $now = new \DateTime('now');
  5368.                         try {
  5369.                             //Recupero l'offerta
  5370.                             $offerta $repoOfferte->findOneBy(array('documento' => $data[$indici['documento']], 'numero' => $data[$indici['numero']], 'anno' => $data[$indici['anno']]));
  5371.                             if($offerta){
  5372.                                 /** @var OfferteAllegati $all */
  5373.                                 $all $offerta->RitornaAllegatoDaIdentificativo($data[$indici['identificativo']]);
  5374.                                 if($all && $data[$indici['operazione']] == 'E'){
  5375.                                     $em->remove($all);
  5376.                                     $query_eseguite++;
  5377.                                 }
  5378.                                 if($data[$indici['operazione']] != "E"){
  5379.                                     if(!$all){
  5380.                                         $all = new OfferteAllegati();
  5381.                                         $all->setDataCaricamento($now);
  5382.                                         $all->setOfferta($offerta);
  5383.                                     }
  5384.                                     $all->setNome($data[$indici['nome']]);
  5385.                                     $all->setTipoFile($data[$indici['tipoFile']]);
  5386.                                     $all->setIdentificativo($this->servizi->generaStringaCasuale(20));
  5387.                                     $pathFile $pathFileBase $all->getNome();
  5388.                                     if(file_exists($pathFile)){
  5389.                                         $all->setFile(file_get_contents($pathFile));
  5390.                                         if(!unlink($pathFile)){
  5391.                                             $errori .= ("RIGA: " $contatore " --- il file non può essere eliminato dal disco!");
  5392.                                         }
  5393.                                     }else{
  5394.                                         $errori .= ("RIGA: " $contatore " --- Il file " $pathFile " non esiste!");
  5395.                                     }
  5396.                                     $em->persist($all);
  5397.                                     $query_eseguite++;
  5398.                                 }
  5399.                             }else {
  5400.                                 $errori .= ("RIGA: " $contatore " -- Offerta non trovata con Documento: " $data[$indici['documento']] . " - Numero: " $data[$indici['numero']] . " - Anno: " $data[$indici['anno']] . "\n");
  5401.                             }
  5402.                         } catch (\PDOException $ex) {
  5403.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione (RIGA: ' $contatore ') : ' $ex->getMessage(), null);
  5404.                         } catch (\Exception|\Throwable $exception) {
  5405.                             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""false'Errore importazione: ' $exception->getMessage(), null);
  5406.                         }
  5407.                         $row++;
  5408.                     }
  5409.                 }
  5410.                 $em->flush();
  5411.                 $row $contatore $row 1;
  5412.                 if ($errori == "") {
  5413.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull);
  5414.                     return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  5415.                 } else {
  5416.                     $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull);
  5417.                     return new Response('Importazione completata con errori in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row "</br>Lista Errori:</br>" $errori);
  5418.                 }
  5419.             } catch (\Exception|\Throwable $ex) {
  5420.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ' $ex->getMessage(), null);
  5421.                 return new Response('Errore importazione: ' $ex->getMessage());
  5422.             }
  5423.         } else {
  5424.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null);
  5425.             return new Response("ERRORE PERMESSO");
  5426.         }
  5427.     } //OK
  5428.     /**
  5429.      * @Route("/importaImmaginiPicard", name="carica_immagini_picard")
  5430.      */
  5431.     public function importaImmaginiPicard(Request $request)
  5432.     {
  5433.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  5434.             ini_set('max_execution_time'21600); // 4 ore
  5435.             ini_set('memory_limit', -1);
  5436.             $start microtime(true);
  5437.             $this->imp->caricaCacheImpostazioniDaFamiglie(['Importazioni']);
  5438.             //IMPORTO LE IMMAGINI
  5439.                 try {
  5440.                     $usr $this->imp->ritornaImpostazioneDaNome('ImportazioniPicardUsername');
  5441.                     $psw $this->imp->ritornaImpostazioneDaNome('ImportazioniPicardPassword');
  5442.                     $file_contents file_get_contents("http://" $usr ":" $psw "@stock.picard.de/bmecat/bilder.zip");
  5443.                     $pathTemp tempnam(sys_get_temp_dir(), 'imgPicard');
  5444.                     $zp = new \ZipArchive;
  5445.                     if($file_contents){
  5446.                         $res $zp->open($pathTemp);
  5447.                             if($res === true){
  5448.                                 $zp->extractTo("uploads/PK/");
  5449.                                 $zp->close();
  5450.                             }
  5451.                     }
  5452.                 }catch (\Exception|\Throwable $ex){
  5453.                     $this->get('web_shop.servizi')->DebuggaException($ex);
  5454.                     return new Response('Errore importazione: ' $ex->getMessage());
  5455.                 }
  5456.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>'null);
  5457.             return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' );
  5458.         } else {
  5459.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null);
  5460.             return new Response("ERRORE PERMESSO");
  5461.         }
  5462.     }
  5463.     /**
  5464.      * @Route("/importaGiacenzeArticoliPicardXML", name="carica_giacenze_lista_articoli_picard")
  5465.      */
  5466.     public function importaGiacenzePicardXML(Request $request)
  5467.     {
  5468.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  5469.             ini_set('max_execution_time'21600); // 4 ore
  5470.             ini_set('memory_limit', -1);
  5471.             $start microtime(true);
  5472.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  5473.             $em $this->servizi->doctrine->getManager();
  5474.             $repo $this->servizi->doctrine->getRepository(MagazzinoSecondarioDisponibilita::class);
  5475.             $repoMappa $this->servizi->doctrine->getRepository(MappaCategorieArticoli::class);
  5476.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  5477.             $this->imp->caricaCacheImpostazioniDaFamiglie(['Importazioni']);
  5478.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  5479.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  5480.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  5481.             $categorieEscluseDaImportazione explode(','$this->imp->ritornaImpostazioneDaNome('ImportazioniPicardCategorieEscluseImportazione'));
  5482.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /importaGiacenzaArticoliPicardXML --- Inizio l\' importazione dei dati'null);
  5483.             try {
  5484.                 $filesystem = new Filesystem();
  5485.                 //Verifico che esista la cartella pk
  5486.                 if (!$filesystem->exists($pathFileBase 'pk/')) {
  5487.                     $filesystem->mkdir($pathFileBase 'pk/'0777);
  5488.                 }
  5489.                 // set up basic connection
  5490.                 $conn_id ftp_connect($this->imp->ritornaImpostazioneDaNome('ImportazioniPicardIndirizzoServerFtp'));
  5491.                 // login with username and password
  5492.                 $login_result ftp_login($conn_id$this->imp->ritornaImpostazioneDaNome('ImportazioniPicardUsername'), $this->imp->ritornaImpostazioneDaNome('ImportazioniPicardPassword'));
  5493.                 //Set passive mode
  5494.                 ftp_pasv($conn_idtrue);
  5495.                 // try to download $server_file and save to $local_file
  5496.                 ftp_get($conn_id$pathFileBase 'pk/bestand.csv''/OUT/bestand.csv'FTP_BINARY);
  5497.                 // close the connection
  5498.                 ftp_close($conn_id);
  5499.             } catch (\Exception|\Throwable $ex) {
  5500.                 $this->servizi->DebuggaException($ex);
  5501.                 die('Errore ' $ex->getMessage());
  5502.             }
  5503.             $root_path $pathFileBase 'pk/bestand.csv';
  5504.             $separator ";";
  5505.             $contatore 0;
  5506.             $row 0;
  5507.             $query_eseguite 0;
  5508.             $batch_size 50;
  5509.             $magazzinoSecondario $this->servizi->doctrine->getRepository(MagazziniSecondari::class)->findOneBy(array('nome' => 'PICARD'));
  5510.             if (!$magazzinoSecondario) {
  5511.                 $magazzinoSecondario = new MagazziniSecondari();
  5512.                 $magazzinoSecondario->setNome('PICARD');
  5513.                 $magazzinoSecondario->setApprovvigionamentoStimato('4/5 gg lavorativi');
  5514.                 $magazzinoSecondario->setAttivo(true);
  5515.                 $magazzinoSecondario->setDataCreazione(new \DateTime());
  5516.                 $magazzinoSecondario->setDataModifica(new \DateTime());
  5517.                 $magazzinoSecondario->setPercentualeDecremento(0);
  5518.                 $magazzinoSecondario->setPercentualeIncremento(0);
  5519.                 $magazzinoSecondario->setMetodoAcquisizioneDati('');
  5520.                 $magazzinoSecondario->setFondiCategorie(false);
  5521.                 $magazzinoSecondario->setImportazioneInCorso(false);
  5522.                 $em->persist($magazzinoSecondario);
  5523.                 $em->flush();
  5524.                 $magazzinoSecondario $this->servizi->doctrine->getRepository(MagazziniSecondari::class)->findOneBy(array('nome' => 'PICARD'));
  5525.             }
  5526.             try {
  5527.                 if (($handle fopen($root_path"r")) !== false) {
  5528.                     while (($data fgetcsv($handle0$separator$this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEnclosure"), $this->imp->ritornaImpostazioneDaNome("ImportazioneFileCsvEscape"))) !== false) {
  5529.                         if ($query_eseguite >= $batch_size) {
  5530.                             $contatore $contatore $row 1;
  5531.                             $row 1;
  5532.                             $query_eseguite 0;
  5533.                             $em->flush();
  5534.                         }
  5535.                         $mappa $repoMappa->createQueryBuilder('mappa')
  5536.                             ->leftJoin('mappa.articolo''articolo')
  5537.                             ->where('articolo.codiceImportazione = :cod')->setParameter('cod'$data[0])
  5538.                             ->setMaxResults(1)
  5539.                             ->getQuery()->getResult();
  5540.                         if ($mappa) {
  5541.                             $mappa $mappa[0];
  5542.                             $disp $repo->findOneBy(array('mappaCategorieArticoli' => $mappa'magazzinoSecondario' => $magazzinoSecondario));
  5543.                             if (!$disp) {
  5544.                                 $disp = new MagazzinoSecondarioDisponibilita();
  5545.                                 $disp->setDataCreazione(new \DateTime());
  5546.                                 $disp->setMagazzinoSecondario($magazzinoSecondario);
  5547.                                 $disp->setMappaCategorieArticoli($mappa);
  5548.                             }
  5549.                             $disp->setDisponibilita($data[1]);
  5550.                             $disp->setDataModifica(new \DateTime());
  5551.                             $em->merge($disp);
  5552.                             $query_eseguite++;
  5553.                         } else {
  5554.                             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Articolo con codice importazione: ' $data[0] . ' non trovato!'null);
  5555.                         }
  5556.                     }
  5557.                 }
  5558.                 $em->flush();
  5559.                 $em->clear();
  5560.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull);
  5561.                 return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  5562.             } catch (\Exception|\Throwable $ex) {
  5563.                 $this->servizi->DebuggaException($ex);
  5564.                 return new Response('Errore importazione: ' $ex->getMessage());
  5565.             }
  5566.         } else {
  5567.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null);
  5568.             return new Response("ERRORE PERMESSO");
  5569.         }
  5570.     }
  5571.     /**
  5572.      * @Route("/importaArticoliPicardXML", name="carica_lista_articoli_picard")
  5573.      */
  5574.     public function importaPicardXML(Request $request)
  5575.     {
  5576.         if ($this->servizi->verificaSeIpAutorizzatoChiamateImportExport($request->getClientIp())) {
  5577.             ini_set('max_execution_time'21600); // 4 ore
  5578.             ini_set('memory_limit', -1);
  5579.             $start microtime(true);
  5580.             $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  5581.             $em $this->servizi->doctrine->getManager();
  5582.             $conn $this->servizi->doctrine->getConnection();
  5583.             $repoListini $this->servizi->doctrine->getRepository(ListiniVendita::class);
  5584.             $repoCategorie $this->servizi->doctrine->getRepository(Categorie::class);
  5585.             $repoAttributi $this->servizi->doctrine->getRepository(Attributi::class);
  5586.             $repoAssociazioneAttributi $this->servizi->doctrine->getRepository(AssociazioneAttributi::class);
  5587.             $repoArticoli $this->servizi->doctrine->getRepository(Articoli::class);
  5588.             $codiceListinoBase $this->imp->ritornaImpostazioneDaNome('CodiceListinoShopComune');
  5589.             $this->imp->caricaCacheImpostazioniDaFamiglie(['Importazioni']);
  5590.             $pathFileBase $this->imp->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  5591.             if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  5592.                 $pathFileBase .= DIRECTORY_SEPARATOR;
  5593.             $pathFileBase .= ('IN' DIRECTORY_SEPARATOR);
  5594.             $cacheUmEsistenti = array();
  5595.             $stmt $conn->prepare('SELECT DISTINCT codice FROM unita_misura');
  5596.             $rst $stmt->executeQuery();
  5597.             $umEsis $rst->fetchAllAssociative();
  5598.             foreach ($umEsis as $it) {
  5599.                 array_push($cacheUmEsistenti$it['codice']);
  5600.             }
  5601.             $categorieEscluseDaImportazione explode(','$this->imp->ritornaImpostazioneDaNome('ImportazioniPicardCategorieEscluseImportazione'));
  5602.             $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Chiamata effettuata a /importaArticoliPicardXML --- Inizio l\' importazione dei dati'null);
  5603.             try {
  5604.                 $filesystem = new Filesystem();
  5605.                 //Verifico che esista la cartella pk
  5606.                 if (!$filesystem->exists($pathFileBase 'pk/')) {
  5607.                     $filesystem->mkdir($pathFileBase 'pk/'0777);
  5608.                 }
  5609.                 // set up basic connection
  5610.                 $conn_id ftp_connect($this->imp->ritornaImpostazioneDaNome('ImportazioniPicardIndirizzoServerFtp'));
  5611.                 // login with username and password
  5612.                 $login_result ftp_login($conn_id$this->imp->ritornaImpostazioneDaNome('ImportazioniPicardUsername'), $this->imp->ritornaImpostazioneDaNome('ImportazioniPicardPassword'));
  5613.                 //Set passive mode
  5614.                 ftp_pasv($conn_idtrue);
  5615.                 // try to download $server_file and save to $local_file
  5616.                 ftp_get($conn_id$pathFileBase 'pk/picard_bmecat_it.zip''/OUT/picard_bmecat_it.zip'FTP_BINARY);
  5617.                 // close the connection
  5618.                 ftp_close($conn_id);
  5619.                 $zp = new \ZipArchive;
  5620.                 $res $zp->open($pathFileBase 'pk/picard_bmecat_it.zip');
  5621.                 if ($res === true) {
  5622.                     $zp->extractTo($pathFileBase 'pk/');
  5623.                     $zp->close();
  5624.                     chmod($pathFileBase 'pk/picard_bmecat_it.xml'0755);
  5625.                 }
  5626.             } catch (\Exception|\Throwable $ex) {
  5627.                 $this->servizi->DebuggaException($ex);
  5628.                 die('Errore ' $ex->getMessage());
  5629.             }
  5630.             $root_path $pathFileBase 'pk/picard_bmecat_it.xml';
  5631.             $contatore 0;
  5632.             $row 0;
  5633.             $query_eseguite 0;
  5634.             $batch_size 50;
  5635.             $cacheAttributi = array(); // Chiave codice identificativo
  5636.             if (!in_array('NR'$cacheUmEsistenti)) {
  5637.                 $sql "INSERT INTO unita_misura(codice, descrizione, fattore_conversione, numero_decimali, data_creazione, data_modifica, attivo) VALUES (?,?,?,?,NOW(), NOW(), 1)";
  5638.                 $stmt $conn->prepare($sql);
  5639.                 $stmt->bindValue(1'NR');
  5640.                 $stmt->bindValue(2'Numero');
  5641.                 $stmt->bindValue(31);
  5642.                 $stmt->bindValue(40);
  5643.                 $stmt->execute();
  5644.                 array_push($cacheUmEsistenti'NR');
  5645.             }
  5646.             $umNR $this->servizi->doctrine->getRepository(UnitaMisura::class)->findOneBy(array('codice' => 'NR'));
  5647.             if (!in_array('KG'$cacheUmEsistenti)) {
  5648.                 $sql "INSERT INTO unita_misura(codice, descrizione, fattore_conversione, numero_decimali, data_creazione, data_modifica, attivo) VALUES (?,?,?,?,NOW(), NOW(), 1)";
  5649.                 $stmt $conn->prepare($sql);
  5650.                 $stmt->bindValue(1'KG');
  5651.                 $stmt->bindValue(2'Chilogrammi');
  5652.                 $stmt->bindValue(31);
  5653.                 $stmt->bindValue(43);
  5654.                 $stmt->execute();
  5655.                 array_push($cacheUmEsistenti'KG');
  5656.             }
  5657.             $strutturaCategorie = array(); //array di array con dentro le varie categorie come chiave ho il group id
  5658.             $listaArticoli = array(); //array di array con chiave il supplier_pid
  5659.             try {
  5660.                 $xmlReader = new \XMLReader();
  5661.                 if (!$xmlReader->open($root_pathnull<< 19)) {
  5662.                     $this->ScriviRegistroAttivita($em$request->getClientIp(), ""true'Impossibile aprire il file: ' $root_pathnull);
  5663.                     die('Failed to open file');
  5664.                 }
  5665.                 while ($xmlReader->read()) {
  5666.                     if ($xmlReader->nodeType == \XMLReader::ELEMENT && $xmlReader->name == 'CATALOG_STRUCTURE') {
  5667.                         $nodo = new \SimpleXMLElement($xmlReader->readOuterXml());
  5668.                         $img '';
  5669.                         if (isset($nodo->MIME_INFO) && isset($nodo->MIME_INFO->MIME) && isset($nodo->MIME_INFO->MIME->MIME_SOURCE)) {
  5670.                             $img '/uploads/PK/' strval($nodo->MIME_INFO->MIME->MIME_SOURCE);
  5671.                         }
  5672.                         $strutturaCategorie[strval($nodo->GROUP_ID)] = array(strval($nodo->GROUP_ID), strval($nodo->GROUP_NAME), strval($nodo->PARENT_ID));
  5673.                         if (!in_array(strval($nodo->GROUP_ID), $categorieEscluseDaImportazione)) {
  5674.                             //Salvo categoria db se inesistente altrimenti la aggiorno
  5675.                             $cat $repoCategorie->findOneBy(array('codiceOriginale' => strval($nodo->GROUP_ID), 'codice' => ('PKR_' strval($nodo->GROUP_ID))));
  5676.                             if ($cat) {
  5677.                                 //Categoria esistente aggiorno nome
  5678.                                 $cat->setNome(strval($nodo->GROUP_NAME));
  5679.                                 $cat->setDataModifica(new \DateTime());
  5680.                                 $em->persist($cat);
  5681.                                 $query_eseguite++;
  5682.                             } else {
  5683.                                 //Nuova categoria la creo
  5684.                                 $cat = new Categorie();
  5685.                                 $cat->setNome(strval($nodo->GROUP_NAME));
  5686.                                 $cat->setCodiceOriginale(strval($nodo->GROUP_ID));
  5687.                                 $cat->setImmagine($img);
  5688.                                 $cat->setCodice('PKR_' strval($nodo->GROUP_ID));
  5689.                                 $cat->setNomeUnivoco($cat->getCodiceOriginale());
  5690.                                 $cat->setDataCreazione(new \DateTime());
  5691.                                 $cat->setDataModifica(new \DateTime());
  5692.                                 $cat->setAttivo(true);
  5693.                                 $em->persist($cat);
  5694.                                 $query_eseguite++;
  5695.                             }
  5696.                             $query_eseguite 0;
  5697.                             $em->flush();
  5698.                         }
  5699.                         unset($nodo);
  5700.                     } else if ($xmlReader->nodeType == \XMLReader::ELEMENT && $xmlReader->name == 'PRODUCT') {
  5701.                         //Dettaglio prodotti
  5702.                         $nodo = new \SimpleXMLElement($xmlReader->readOuterXml());
  5703.                         $articolo null;
  5704.                         $articolo $repoArticoli->findOneBy(array('codiceImportazione' => strval($nodo->SUPPLIER_PID)));
  5705.                         if ($articolo) {
  5706.                             $articolo->setDataModifica(new \DateTime());
  5707.                             $articolo->setNome(strval($nodo->MIME_INFO->MIME->MIME_ALT));
  5708.                             $articolo->setDescrizioneBreve(strval($nodo->PRODUCT_DETAILS->DESCRIPTION_SHORT));
  5709.                         } else {
  5710.                             $articolo = new Articoli();
  5711.                             $articolo->setUm($umNR);
  5712.                             $articolo->setUsaTipologiePreimpostate(false);
  5713.                             $articolo->setMacroCategoria('PK');
  5714.                             $articolo->setNome(strval($nodo->MIME_INFO->MIME->MIME_ALT));
  5715.                             $articolo->setDescrizioneBreve(strval($nodo->PRODUCT_DETAILS->DESCRIPTION_SHORT));
  5716.                             $articolo->setCodice(strval($nodo->PRODUCT_DETAILS->MANUFACTURER_PID));
  5717.                             $articolo->setCodiceImportazione(strval($nodo->SUPPLIER_PID));
  5718.                             $articolo->setDataCreazione(new \DateTime());
  5719.                             $articolo->setDataModifica(new \DateTime());
  5720.                         }
  5721.                         $listaAttributi = array(); //Ricordarsi di iterare alla fine ed associare i vari attributi agli articoli
  5722.                         if (isset($nodo->PRODUCT_FEATURES)) {
  5723.                             foreach ($nodo->PRODUCT_FEATURES->FEATURE as $feature) {
  5724.                                 if (strval($feature->FNAME) == 'Peso') {
  5725.                                     if (strval($feature->FUNIT) == 'kg') {
  5726.                                         $articolo->setPesoLordo(floatval($feature->FVALUE));
  5727.                                         if (!$articolo->getUmPeso())
  5728.                                             $articolo->setUmPeso($this->servizi->doctrine->getRepository(UnitaMisura::class)->findOneBy(array('codice' => 'KG')));
  5729.                                     }
  5730.                                 } else {
  5731.                                     $listaAttributi[strval($feature->FNAME)] = strval($feature->FVALUE);
  5732.                                 }
  5733.                             }
  5734.                         }
  5735.                         $em->merge($articolo);
  5736.                         $query_eseguite++;
  5737.                         $prezzo 0;
  5738.                         $costo 0;
  5739.                         if (isset($nodo->PRODUCT_PRICE_DETAILS->PRODUCT_PRICE->PRICE_AMOUNT)) {
  5740.                             foreach ($nodo->PRODUCT_PRICE_DETAILS->PRODUCT_PRICE as $price) {
  5741.                                 $att $price->attributes();
  5742.                                 if ($att['price_type'] && $att['price_type'] == 'nrp') {
  5743.                                     $prezzo strval($price->PRICE_AMOUNT);
  5744.                                 } else if ($att['price_type'] && $att['price_type'] == 'net_list') {
  5745.                                     $costo strval($price->PRICE_AMOUNT);
  5746.                                 }
  5747.                             }
  5748.                         }
  5749.                         $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);
  5750.                         if ($query_eseguite >= $batch_size) {
  5751.                             $query_eseguite 0;
  5752.                             $em->flush();
  5753.                         }
  5754.                         unset($nodo);
  5755.                     } else if ($xmlReader->nodeType == \XMLReader::ELEMENT && $xmlReader->name == 'PRODUCT_TO_CATALOGGROUP_MAP') {
  5756.                         $nodo = new \SimpleXMLElement($xmlReader->readOuterXml());
  5757.                         $prodId strval($nodo->PROD_ID);
  5758.                         $catGrId strval($nodo->CATALOG_GROUP_ID); //riferimento alla categoria
  5759.                         //qui creo le varie categorie, mappe e associo il valore attributi
  5760.                         if (!in_array($catGrId$categorieEscluseDaImportazione)) {
  5761.                             //Ottengo le categorie
  5762.                             $arraySequenzaCategorie $this->ritornaCategoria($catGrId$strutturaCategorie, array());
  5763.                             if (count($arraySequenzaCategorie) >= 5) {
  5764.                                 $cat1 = isset($arraySequenzaCategorie[4]) ? $arraySequenzaCategorie[4] : null;
  5765.                                 $cat2 = isset($arraySequenzaCategorie[3]) ? $arraySequenzaCategorie[3] : null;
  5766.                                 $cat3 = isset($arraySequenzaCategorie[2]) ? $arraySequenzaCategorie[2] : null;
  5767.                                 $cat4 = isset($arraySequenzaCategorie[1]) ? $arraySequenzaCategorie[1] : null;
  5768.                                 $cat5 = isset($arraySequenzaCategorie[0]) ? $arraySequenzaCategorie[0] : null;
  5769.                             } else if (count($arraySequenzaCategorie) == 4) {
  5770.                                 $cat1 = isset($arraySequenzaCategorie[3]) ? $arraySequenzaCategorie[3] : null;
  5771.                                 $cat2 = isset($arraySequenzaCategorie[2]) ? $arraySequenzaCategorie[2] : null;
  5772.                                 $cat3 = isset($arraySequenzaCategorie[1]) ? $arraySequenzaCategorie[1] : null;
  5773.                                 $cat4 = isset($arraySequenzaCategorie[0]) ? $arraySequenzaCategorie[0] : null;
  5774.                                 $cat5 null;
  5775.                             } else if (count($arraySequenzaCategorie) == 3) {
  5776.                                 $cat1 = isset($arraySequenzaCategorie[2]) ? $arraySequenzaCategorie[2] : null;
  5777.                                 $cat2 = isset($arraySequenzaCategorie[1]) ? $arraySequenzaCategorie[1] : null;
  5778.                                 $cat3 = isset($arraySequenzaCategorie[0]) ? $arraySequenzaCategorie[0] : null;
  5779.                                 $cat4 null;
  5780.                                 $cat5 null;
  5781.                             } else if (count($arraySequenzaCategorie) == 2) {
  5782.                                 $cat1 = isset($arraySequenzaCategorie[1]) ? $arraySequenzaCategorie[1] : null;
  5783.                                 $cat2 = isset($arraySequenzaCategorie[0]) ? $arraySequenzaCategorie[0] : null;
  5784.                                 $cat3 null;
  5785.                                 $cat4 null;
  5786.                                 $cat5 null;
  5787.                             } else if (count($arraySequenzaCategorie) == 1) {
  5788.                                 $cat1 = isset($arraySequenzaCategorie[0]) ? $arraySequenzaCategorie[0] : null;
  5789.                                 $cat2 null;
  5790.                                 $cat3 null;
  5791.                                 $cat4 null;
  5792.                                 $cat5 null;
  5793.                             } else {
  5794.                                 $cat1 null;
  5795.                                 $cat2 null;
  5796.                                 $cat3 null;
  5797.                                 $cat4 null;
  5798.                                 $cat5 null;
  5799.                             }
  5800.                             //Ottengo l'articolo
  5801.                             $articolo $repoArticoli->findOneBy(array('codiceImportazione' => $prodId'macroCategoria' => 'PK'));
  5802.                             $art $listaArticoli[$prodId];
  5803.                             $marca '';
  5804.                             if ($art && count($art) > 3) {
  5805.                                 $marca $art[2];
  5806.                             }
  5807.                             $mappa $this->servizi->doctrine->getRepository(MappaCategorieArticoli::class)
  5808.                                 ->findOneBy(array(
  5809.                                     'articolo' => $articolo,
  5810.                                     'marca' => $marca,
  5811.                                     'categoria1' => $cat1,
  5812.                                     'categoria2' => $cat2,
  5813.                                     'categoria3' => $cat3,
  5814.                                     'categoria4' => $cat4,
  5815.                                     'categoria5' => $cat5));
  5816.                             if ($articolo && $art) {
  5817.                                 if (!$mappa) {
  5818.                                     $mappa = new MappaCategorieArticoli();
  5819.                                     $mappa->setArticolo($articolo);
  5820.                                     $mappa->setCategoria1($cat1);
  5821.                                     $mappa->setCategoria2($cat2);
  5822.                                     $mappa->setCategoria3($cat3);
  5823.                                     $mappa->setCategoria4($cat4);
  5824.                                     $mappa->setCategoria5($cat5);
  5825.                                     $mappa->setMarca($marca);
  5826.                                     $mappa->setDisponibile(0);
  5827.                                     $mappa->setVariantiPresenti(false);
  5828.                                     $mappa->setDataCreazione(new \DateTime());
  5829.                                     $mappa->setDataModifica(new \DateTime());
  5830.                                     $em->merge($mappa);
  5831.                                     $em->flush();
  5832.                                     $mappa $this->servizi->doctrine->getRepository(MappaCategorieArticoli::class)
  5833.                                         ->findOneBy(array(
  5834.                                             'articolo' => $articolo,
  5835.                                             'marca' => $marca,
  5836.                                             'categoria1' => $cat1,
  5837.                                             'categoria2' => $cat2,
  5838.                                             'categoria3' => $cat3,
  5839.                                             'categoria4' => $cat4,
  5840.                                             'categoria5' => $cat5));
  5841.                                 }
  5842.                                 if ($art[4] && $art[4] != '0' && floatval($art[4]) > 0) {
  5843.                                     $listino $repoListini->findOneBy(array('mappaCategorieArticoli' => $mappa'codiceListino' => $codiceListinoBase'codiceAnagrafica' => null));
  5844.                                     if (!$listino) {
  5845.                                         $listino = new ListiniVendita();
  5846.                                         $listino->setDataCreazione(new \DateTime());
  5847.                                         $listino->setMappaCategorieArticoli($mappa);
  5848.                                         $listino->setCodiceListino($codiceListinoBase);
  5849.                                     }
  5850.                                     $listino->setDataModifica(new \DateTime());
  5851.                                     $listino->setFlagPrezzoNetto(false);
  5852.                                     $listino->setPrezzo($art[4]);
  5853.                                     $listino->setCosto($art[5]);
  5854.                                     $em->persist($listino);
  5855.                                     $query_eseguite++;
  5856.                                 }
  5857.                                 //Gestisco gli attributi
  5858.                                 foreach ($art[3] as $key => $val) {
  5859.                                     $value $art[3][$key];
  5860.                                     /** @var Attributi $attributo */
  5861.                                     $attributo null;
  5862.                                     if ($value != '' && $value !== false) {
  5863.                                         if (!array_key_exists($key$cacheAttributi)) {
  5864.                                             $attributo $repoAttributi->findOneBy(array('codiceIdentificativo' => $key));
  5865.                                             if (!$attributo) {
  5866.                                                 $attributo = new Attributi();
  5867.                                                 $attributo->setNome($key);
  5868.                                                 $attributo->setTestoVisualizzato($key);
  5869.                                                 $attributo->setDataCreazione(new \DateTime());
  5870.                                                 $attributo->setDataModifica(new \DateTime());
  5871.                                                 $attributo->setCodiceIdentificativo($key);
  5872.                                                 $em->persist($attributo);
  5873.                                                 $em->flush();
  5874.                                                 $attributo $repoAttributi->findOneBy(array('codiceIdentificativo' => $key));
  5875.                                                 $cacheAttributi[$key] = $attributo;
  5876.                                             }
  5877.                                         } else {
  5878.                                             $attributo $cacheAttributi[$key];
  5879.                                         }
  5880.                                         if ($attributo) {
  5881.                                             $associazione $repoAssociazioneAttributi->findOneBy(array('articolo' => $articolo'mappaCategoriaArticolo' => $mappa'attributo' => $attributo));
  5882.                                             if (!$associazione) {
  5883.                                                 $associazione = new AssociazioneAttributi();
  5884.                                                 $associazione->setArticolo($articolo);
  5885.                                                 $associazione->setMappaCategoriaArticolo($mappa);
  5886.                                                 $associazione->setAttributo($attributo);
  5887.                                                 $associazione->setDataCreazione(new \DateTime());
  5888.                                             }
  5889.                                             $associazione->setDataModifica(new \DateTime());
  5890.                                             $associazione->setValore($value);
  5891.                                             $em->persist($associazione);
  5892.                                             $query_eseguite++;
  5893.                                         }
  5894.                                     }
  5895.                                 }
  5896.                             } else {
  5897.                                 $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Errore articolo: ' $prodId ' - GroupId: ' $catGrId ' non trvoato!'null);
  5898.                             }
  5899.                         }
  5900.                         if ($query_eseguite >= $batch_size) {
  5901.                             $query_eseguite 0;
  5902.                             $em->flush();
  5903.                         }
  5904.                         unset($nodo);
  5905.                     }
  5906.                 }
  5907.                 $em->flush();
  5908.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), ""true'Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $rownull);
  5909.                 return new Response('Importazione completata in ' $time_elapsed_secs microtime(true) - $start ' seconds</br>' $row);
  5910.             } catch (\Exception|\Throwable $ex) {
  5911.                 $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ' $ex->getMessage(), null);
  5912.                 //unlink($root_path); //Elimino il file temporaneo
  5913.                 return new Response('Errore importazione: ' $ex->getMessage() . '<br/>' $this->servizi->DebuggaException($ex''true));
  5914.             }
  5915.         } else {
  5916.             $this->ScriviRegistroAttivita(null$request->getClientIp(), ""false'Errore importazione: ERRORE_PERMESSO'null);
  5917.             return new Response("ERRORE PERMESSO");
  5918.         }
  5919.     }
  5920.     function ritornaCategoria($catalogGroupId$strutturaCategorie$arrayCategorie = array())
  5921.     {
  5922.         if(isset($strutturaCategorie[$catalogGroupId])) {
  5923.             $elemento $strutturaCategorie[$catalogGroupId];
  5924.             if ($elemento) {
  5925.                 $categoria $this->servizi->doctrine->getRepository(Categorie::class)->findOneBy(array('codice' => ('PKR_' $catalogGroupId)));
  5926.                 if ($categoria) {
  5927.                     array_push($arrayCategorie$categoria);
  5928.                     if ($elemento[2] != '0') {
  5929.                         $arrayCategorie self::ritornaCategoria($elemento[2], $strutturaCategorie$arrayCategorie);
  5930.                     }
  5931.                 }
  5932.             }
  5933.         }
  5934.         return $arrayCategorie;
  5935.     }
  5936. }