src/Controller/ServiziController.php line 693

  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\AlberoMenuProdotti;
  4. use App\Entity\Anagrafiche;
  5. use App\Entity\Articoli;
  6. use App\Entity\AssociazioneCategorieAlberoMappaCategorieArticoli;
  7. use App\Entity\AssociazioneCodiciAgentiUtente;
  8. use App\Entity\BarcodeArticoli;
  9. use App\Entity\Categorie;
  10. use App\Entity\CategorieAlbero;
  11. use App\Entity\CouponDettaglio;
  12. use App\Entity\Lingue;
  13. use App\Entity\MagazzinoSecondarioDisponibilita;
  14. use App\Entity\MappaCategorieArticoli;
  15. use App\Entity\NascondiEsauritiSuMarca;
  16. use Doctrine\ORM\Query\Expr;
  17. use App\Entity\Offerte;
  18. use App\Entity\Ordini;
  19. use App\Entity\OrdiniRighe;
  20. use App\Entity\PagineEComponenti;
  21. use App\Entity\PermessiAccessoUtenti;
  22. use App\Entity\RegistroMail;
  23. use App\Entity\RigheCarrello;
  24. use App\Entity\RisorseAnagrafiche;
  25. use App\Entity\RisorseAnagraficheColonneValori;
  26. use App\Entity\ScontiAnagrafiche;
  27. use App\Entity\TipologiePreimpostate;
  28. use App\Entity\TipoOrdine;
  29. use App\Entity\UserCampiCustomDettaglio;
  30. use App\Entity\UserCampiCustomTestata;
  31. use App\Entity\Varianti;
  32. use App\Model\Carrello\RitornoCalcoloPrezzoNetto;
  33. use App\Model\ContenitoreCategoriePerFiltri;
  34. use App\Model\Costanti;
  35. use App\Model\Coupon\RitornoValiditaCoupon;
  36. use App\Model\DizionarioDatabase;
  37. use App\Model\Entita\AlberoCategorie;
  38. use App\Model\Entita\AltriDatiUtente;
  39. use App\Model\Entita\Articolo;
  40. use App\Model\Entita\Carrello;
  41. use App\Model\Entita\MappaCategoriaArticolo;
  42. use App\Model\Entita\Offerta;
  43. use App\Model\Entita\OffertaRiga;
  44. use App\Model\Entita\Ordine;
  45. use App\Model\Entita\OrdineRiga;
  46. use App\Model\Entita\RigaCarrello;
  47. use App\Model\Entita\Sconti;
  48. use App\Model\Entita\Variante;
  49. use App\Model\RecuperoDati;
  50. use App\Model\SubstringWithFind;
  51. use App\Model\Templating\RitornoBreadCrumb;
  52. use App\Model\Templating\RitornoButton;
  53. use App\Model\Templating\RitornoCalcoloDisponibile;
  54. use App\Model\Templating\RitornoDaMoltiplicatoreLayout;
  55. use App\Model\Templating\RitornoElementiBase;
  56. use App\Model\Templating\RitornoElementoDizionario;
  57. use App\Model\Templating\Templating;
  58. use App\Model\Templating\VerificatoreMatchForm;
  59. use App\Model\Translating\RitornoTradotto;
  60. use App\Model\Translating\Translating;
  61. use Carbon\Carbon;
  62. use App\Entity\User;
  63. use phpDocumentor\Reflection\Types\Self_;
  64. use Psr\Log\LoggerInterface;
  65. use Random\RandomException;
  66. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  67. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  68. use Doctrine\Persistence\ManagerRegistry;
  69. use App\Entity\Nazioni;
  70. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  71. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  72. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  73. use Symfony\Component\Form\Extension\Core\Type\EmailType;
  74. use Symfony\Component\Form\Extension\Core\Type\PasswordType;
  75. use Symfony\Component\Form\Extension\Core\Type\TextType;
  76. use Symfony\Component\Form\FormBuilderInterface;
  77. use Symfony\Component\HttpFoundation\Request;
  78. use Symfony\Component\HttpFoundation\RequestStack;
  79. use Symfony\Component\Routing\Router;
  80. use Symfony\Component\Routing\RouterInterface;
  81. use Symfony\Bundle\SecurityBundle\Security;
  82. use Symfony\Component\Security\Core\User\UserInterface;
  83. use Twig\Environment;
  84. /**
  85.  * Class ServiziController
  86.  * @package App\Controller
  87.  */
  88. class ServiziController extends AbstractController
  89. {
  90.     public $doctrine;
  91.     public $logger;
  92.     public $twig;
  93.     /** @var RouterInterface $router */
  94.     public $router;
  95.     /** @var Translating $translating */
  96.     public $translating;
  97.     /** @var ReturnImpostazioniServiceController $impostazioni */
  98.     public $impostazioni;
  99.     /** @var RequestStack $requestStack */
  100.     public $requestStack;
  101.     /** @var Security $security */
  102.     public $security;
  103.     /** @var ParameterBagInterface */
  104.     public $parameterBag;
  105.     public $locale 'it';
  106.     /** @var RecuperoDati */
  107.     public $recuperoDati;
  108.     // TEMPLATING
  109.     public $imageNotFound null;
  110.     public function __construct(ManagerRegistry $registryLoggerInterface $_loggerEnvironment $_twigTranslating $_translatingRouterInterface $_routerReturnImpostazioniServiceController $_impostazioniRequestStack $_requestStackSecurity $_securityParameterBagInterface $_parameterBag)
  111.     {
  112.         $this->doctrine $registry;
  113.         $this->logger $_logger;
  114.         $this->twig $_twig;
  115.         $this->router $_router;
  116.         $this->translating $_translating;
  117.         $this->impostazioni $_impostazioni;
  118.         $this->requestStack $_requestStack;
  119.         $this->parameterBag $_parameterBag;
  120.         $this->security $_security;
  121.         $this->recuperoDati = new RecuperoDati($registry$_impostazioni$this);
  122.         return $this;
  123.     }
  124.     /**
  125.      * @param $collezione
  126.      * @return string
  127.      * NON FUNZIONA
  128.      */
  129.     public function generaTabellaHtmlDaCollezioneDiOggetti($collezione){
  130.         $stringa "";
  131.         if (count($collezione) > 0){
  132.             $ar get_object_vars($collezione[0]);
  133.             $stringa .= "<table class='table table-striped'>";
  134.             $stringa .= "<tr>";
  135.             foreach (array_keys($ar) as $key ) {
  136.                 $stringa .= ("<th>" $key "</th>");
  137.             }
  138.             $stringa .= "</tr>";
  139.             foreach($collezione as $i){
  140.                 $dati get_object_vars($i);
  141.                 $stringa .= "<tr>";
  142.                 foreach(array_keys($dati) as $dt){
  143.                     $stringa .= ("<td>" . ($dati[$dt] instanceof \Closure "" strval($dati[$dt])) . '</td>');
  144.                 }
  145.                 $stringa .= "</tr>";
  146.             }
  147.             $stringa .= "</table>";
  148.         }
  149.         return $stringa;
  150.     }
  151.     /**
  152.      * @param $ip
  153.      * @return bool
  154.      */
  155.     public function verificaSeIpAutorizzatoChiamateImportExport($ip){
  156.         $this->impostazioni->caricaCacheImpostazioniDaNomi(['IpAbilitatiChiamateExpImp']);
  157.         $elencoIp = [];
  158.         try{
  159.             $el $this->impostazioni->ritornaImpostazioneDaNome('IpAbilitatiChiamateExpImp');
  160.             if($el == ''){
  161.                 return true;
  162.             }
  163.             if(strpos(',',$el) !== false){
  164.                 $elencoIp explode(','$el);
  165.             }else{
  166.                 $elencoIp = [$el];
  167.             }
  168.         }catch (\Exception $ex){
  169.         }
  170.         return in_array($ip$elencoIp);
  171.     }
  172.     /**
  173.      * @param $idOrdine
  174.      * @return int|mixed
  175.      */
  176.     public function OttieniQtaArticoliOrdinatiDaOrdine($idOrdine){
  177.         $ritorno 0;
  178.         $con $this->doctrine->getConnection();
  179.         $stmt $con->prepare("SELECT SUM(quantita) as 'qta' FROM ordini_righe WHERE ordine_id = :id");
  180.         $stmt->bindParam("id"$idOrdine);
  181.         $rst $stmt->executeQuery();
  182.         $ris $rst->fetchAllAssociative();
  183.         if(count($ris) > 0){
  184.             $ritorno $ris[0]['qta'];
  185.         }
  186.         return $ritorno;
  187.     }
  188.     /**
  189.      * @param $idCarrello
  190.      * @return int|mixed
  191.      */
  192.     public function OttieniQtaArticoliOrdinatiDaCarrello($idCarrello){
  193.         $ritorno 0;
  194.         $con $this->doctrine->getConnection();
  195.         $stmt $con->prepare("SELECT SUM(quantita) as 'qta' FROM righe_carrello WHERE carrello_id = :id");
  196.         $stmt->bindParam("id"$idCarrello);
  197.         $rst $stmt->executeQuery();
  198.         $ris $rst->fetchAllAssociative();
  199.         if(count($ris) > 0){
  200.             $ritorno $ris[0]['qta'];
  201.         }
  202.         return $ritorno;
  203.     }
  204.     /**
  205.      * @param $role
  206.      * @return bool
  207.      */
  208.     public function checkRole($role){
  209.         try {
  210.             if ($this->security->isGranted($role)) {
  211.                 return true;
  212.             } else {
  213.                 return false;
  214.             }
  215.         }catch (\Exception $ex){
  216.             return false;
  217.         }
  218.     }
  219.     /**
  220.      * @param $chiave
  221.      * @return mixed
  222.      */
  223.     public function OttieniParametro($chiave){
  224.         return $this->parameterBag->get($chiave);
  225.     }
  226.     /**
  227.      * @param int $length
  228.      * @return string
  229.      */
  230.     function randomString($length 6) {
  231.         $str "";
  232.         $characters array_merge(range('A','Z'), range('a','z'), range('0','9'));
  233.         $max count($characters) - 1;
  234.         for ($i 0$i $length$i++) {
  235.             $rand mt_rand(0$max);
  236.             $str .= $characters[$rand];
  237.         }
  238.         return $str;
  239.     }
  240.     /**
  241.      * @param string $codiceAnagrafica
  242.      * @param MappaCategoriaArticolo $mappa
  243.      * @param null|Variante $variante
  244.      */
  245.     public function RitornaScontiAnagrafica($codiceAnagrafica$mappa$variante null) {
  246.         /** @var ScontiAnagrafiche[] $ritorno */
  247.         $ritorno = []; //Cumulo di tutti gli sconti
  248.         //Prima estraggo sconti anagrafica
  249.         $scontiAnagrafica $this->doctrine->getRepository(ScontiAnagrafiche::class)->createQueryBuilder('sconti')
  250.             ->where("sconti.codiceAnagrafica = :codA AND sconti.codiceArticolo = '' AND sconti.codiceVariante = '' AND (sconti.codiceGruppoCategorie = '' OR sconti.codiceGruppoCategorie IS NULL) ")->setParameter('codA'$codiceAnagrafica)
  251.             ->getQuery()->getResult();
  252.         if(count($scontiAnagrafica) > 0){
  253.             $ritorno array_merge($ritorno$scontiAnagrafica);
  254.         }
  255.         $codiceVariante '';
  256.         if($variante != null) {
  257.             $codiceVariante ltrim(str_replace($mappa->articolo->codice''$variante->codiceVariante));
  258.         }
  259.         //Verifico le combinazioni partendo dalla più restrittiva
  260.         $sc $this->doctrine->getRepository(ScontiAnagrafiche::class)->createQueryBuilder('sconti')
  261.             ->where("sconti.codiceAnagrafica = :codA AND sconti.codiceArticolo = :codArt AND sconti.codiceVariante = :codVar AND (sconti.codiceGruppoCategorie = '' OR sconti.codiceGruppoCategorie IS NULL)")
  262.             ->setParameter('codA'$codiceAnagrafica)->setParameter('codArt'$mappa->articolo->codice)->setParameter('codVar'$codiceVariante)
  263.             ->getQuery()->getResult();
  264.         if(!count($sc) > 0){
  265.             //Verifico combinazione codice articolo - variante
  266.             $scArtVar $this->doctrine->getRepository(ScontiAnagrafiche::class)->createQueryBuilder('sconti')
  267.                 ->where("sconti.codiceArticolo = :codArt AND sconti.codiceVariante = :codVar AND (sconti.codiceAnagrafica = '' OR sconti.codiceAnagrafica IS NULL) AND (sconti.codiceGruppoCategorie = '' OR sconti.codiceGruppoCategorie IS NULL)")
  268.                 ->setParameter('codArt'$mappa->articolo->codice)->setParameter('codVar'$codiceVariante)
  269.                 ->getQuery()->getResult();
  270.             if(!count($scArtVar) > 0){
  271.                 //Verifico combinazione codice articolo
  272.                 $scArt $this->doctrine->getRepository(ScontiAnagrafiche::class)->createQueryBuilder('sconti')
  273.                     ->where("sconti.codiceArticolo = :codArt AND (sconti.codiceVariante = '' OR sconti.codiceVariante IS NULL) AND (sconti.codiceAnagrafica = '' OR sconti.codiceAnagrafica IS NULL) AND (sconti.codiceGruppoCategorie = '' OR sconti.codiceGruppoCategorie IS NULL) ")
  274.                     ->setParameter('codArt'$mappa->articolo->codice)
  275.                     ->getQuery()->getResult();
  276.                 if(count($scArtVar) > 0)
  277.                     $ritorno array_merge($ritorno$scArt);
  278.             }else{
  279.                 $ritorno array_merge($ritorno$scArtVar);
  280.             }
  281.         }else{
  282.             $ritorno array_merge($ritorno$sc);
  283.         }
  284.         if($this->impostazioni->ritornaImpostazioneDaNome('AbilitaScontisticheDaGruppoCategorieArticoli') == '1') {
  285.             //Estraggo scontistiche su codice gruppo categorie
  286.             $scontiCodiceGruppoCategorie $this->doctrine->getRepository(ScontiAnagrafiche::class)->createQueryBuilder('sconti')
  287.                 ->where('sconti.codiceGruppoCategorie = :codGrCat AND sconti.codiceAnagrafica = :codA')
  288.                 ->setParameter('codA'$codiceAnagrafica)->setParameter('codGrCat'$mappa->codiceGruppoCategorie)
  289.                 ->getQuery()->getResult();
  290.             switch ($this->impostazioni->ritornaImpostazioneDaNome('ModalitaApplicazioneScontisticheDaGruppoCategorieArticoli')){
  291.                 case "Solo se non ci sono sconti":{
  292.                     if (count($ritorno) <= 0){
  293.                         $ritorno array_merge($ritorno$scontiCodiceGruppoCategorie);
  294.                     }
  295.                     break;
  296.                 }
  297.                 case "Applica sempre":{
  298.                     if (count($scontiCodiceGruppoCategorie) > 0) {
  299.                         $ritorno array_merge($ritorno$scontiCodiceGruppoCategorie);
  300.                     }
  301.                     break;
  302.                 }
  303.             }
  304.         }
  305.         return $ritorno;
  306.     }
  307.     /**
  308.      * @param string $coda
  309.      * @return string
  310.      * //Se coda è diverso da '' vuol dire che devo accodare qualcosa quindi verifico se inizia con / se vero lo rimuovo perchè già presente
  311.      */
  312.     public function RitornaPathBase($coda ''){
  313.         $pathFileBase $this->impostazioni->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  314.         if (!$this->endsWith($pathFileBaseDIRECTORY_SEPARATOR))
  315.             $pathFileBase .= DIRECTORY_SEPARATOR;
  316.         $pathFileBase .= ('OUT' DIRECTORY_SEPARATOR);
  317.         if($coda != ''){
  318.             if(substr($coda01) == DIRECTORY_SEPARATOR){
  319.                 $coda substr($coda1strlen($coda) - 1);
  320.             }
  321.             $pathFileBase .= $coda;
  322.         }
  323.         return $pathFileBase;
  324.     }
  325.     /**
  326.      * @param $haystack
  327.      * @param $needle
  328.      * @return bool
  329.      */
  330.     function endsWith($haystack$needle)
  331.     {
  332.         $length strlen($needle);
  333.         if ($length == 0) {
  334.             return true;
  335.         }
  336.         return (substr($haystack, -$length) === $needle);
  337.     }
  338.     /**
  339.      * @param $haystack
  340.      * @param $needle
  341.      * @return bool
  342.      */
  343.     function startsWith($haystack$needle)
  344.     {
  345.         $length strlen($needle);
  346.         return (substr($haystack0$length) === $needle);
  347.     }
  348.     /**
  349.      * @return UserInterface
  350.      */
  351.     public function OttieniUtenteCorrente(){
  352.         return $this->security->getUser();
  353.     }
  354.     /**
  355.      * @param $nomeUnivoco
  356.      * @param string $locale
  357.      * @return mixed|null
  358.      */
  359.     public function RitornaIdCategoriaDaNomeUnivoco($nomeUnivoco$locale ''){
  360.         $usaCategorieAlbero $this->impostazioni->ritornaImpostazioneDaNome('UtilizzaCategorieAlberoPerGenerazione');
  361.         $sql '';
  362.         if($usaCategorieAlbero == '1'){
  363.             $sql 'SELECT categorie_albero.id as identificativo FROM categorie_albero
  364.                     LEFT JOIN categorie_albero_in_lingua cil on categorie_albero.id = cil.categoria_albero_id AND cil.locale = ?
  365.                     WHERE (categorie_albero.nome_univoco = ? OR cil.nome_univoco = ?) AND categorie_albero.attivo = 1 LIMIT 1';
  366.         }else {
  367.             $sql 'SELECT categorie.id as identificativo FROM categorie 
  368.                     LEFT JOIN categorie_in_lingua cil on categorie.id = cil.categoria_id AND cil.locale = ?
  369.                     WHERE (categorie.nome_univoco = ? OR cil.nome_univoco = ?) AND categorie.attivo = 1 LIMIT 1';
  370.         }
  371.         $stmt $this->doctrine->getConnection()->prepare($sql);
  372.         $stmt->bindValue(1$locale);
  373.         $stmt->bindValue(2$nomeUnivoco);
  374.         $stmt->bindValue(3$nomeUnivoco);
  375.         $rst $stmt->executeQuery();
  376.         $risultati $rst->fetchAllAssociative();
  377.         if(count($risultati) > 0){
  378.             return $risultati[0]['identificativo'];
  379.         }
  380.         return null;
  381.     }
  382.     /**
  383.      * @return string
  384.      */
  385.     public function OttieniLocale(){
  386.         return $this->requestStack->getCurrentRequest()->getLocale();
  387.     }
  388.     /**
  389.      * @param Request $request
  390.      * @return string|null
  391.      */
  392.     public function getRefererRoute(Request $request)
  393.     {
  394.         $referer $request->headers->get('referer');
  395.         if ($referer == NULL) {
  396.             $url $this->router->generate('homepage');
  397.         } else {
  398.             $url $referer;
  399.         }
  400.         return $url;
  401.     }
  402.     /**
  403.      * @param $mappa
  404.      * @return string
  405.      */
  406.     public function creaCodiceIdMappaPerDettaglioProdotto($mappa){
  407.         if ($mappa instanceof MappaCategorieArticoli){
  408.             return $mappa->getId() . '-' $mappa->getArticolo()->getCodice();
  409.         } else if ($mappa instanceof MappaCategoriaArticolo){
  410.             return $mappa->id '-' $mappa->articolo->codice;
  411.         } else if ($mappa instanceof RigaCarrello){
  412.             return $mappa->mappaCategoriaArticolo->id '-' $mappa->mappaCategoriaArticolo->articolo->codice;
  413.         } else if ($mappa instanceof RigheCarrello){
  414.             return $mappa->getMappaCategorieArticoli()->getId() . '-' $mappa->getMappaCategorieArticoli()->getArticolo()->getCodice();
  415.         } else if ($mappa instanceof OrdineRiga){
  416.             return $mappa->mappaCategoriaArticolo->id '-' $mappa->mappaCategoriaArticolo->articolo->codice;
  417.         } else if ($mappa instanceof OrdiniRighe){
  418.             return $mappa->getMappaCategorieArticoli()->getId() . '-' $mappa->getMappaCategorieArticoli()->getArticolo()->getCodice();
  419.         } else{
  420.             return '-';
  421.         }
  422.     }
  423.     /**
  424.      * @param $costante
  425.      * @return mixed
  426.      */
  427.     public function RitornaCostante($costante){
  428.         return Costanti::ritornaCostante($costante);
  429.     }
  430.     /**
  431.      * @return AltriDatiUtente|null
  432.      */
  433.     public function RitornaAltriDatiUtente(){
  434.         return AltriDatiUtente::CreaDaUtente(self::OttieniUtenteCorrente());
  435.     }
  436.     /**
  437.      * @return Anagrafiche|null
  438.      */
  439.     public function RitornaAnagraficaCollegataUtente(){
  440.         /** @var User $user */
  441.         $user self::OttieniUtenteCorrente();
  442.         if($user) {
  443.             $anagraficaUtente $this->doctrine->getRepository(Anagrafiche::class)->findOneBy(array('codice' => $user->getCodiceCliente()));
  444.             return $anagraficaUtente;
  445.         }else{
  446.             return null;
  447.         }
  448.     }
  449.     /**
  450.      * @return TipoOrdine|object|null
  451.      */
  452.     public function RitornaTipoOrdineAttuale(){
  453.         if($this->impostazioni->ritornaImpostazioneDaNome('AbilitaTipoOrdine') == '1') {
  454.             $dat self::RitornaAltriDatiUtente();
  455.             return self::RitornaTipoOrdine($dat->tipoOrdine);
  456.         }else{
  457.             return null;
  458.         }
  459.     }
  460.     /**
  461.      * @param $id
  462.      * @return TipoOrdine|object|null
  463.      */
  464.     public function RitornaTipoOrdine($id){
  465.         if($id && $id != null && $id != '') {
  466.             return $this->doctrine->getRepository(TipoOrdine::class)->find($id);
  467.         }else{
  468.             return null;
  469.         }
  470.     }
  471.     /**
  472.      * @param $codiceEsito string
  473.      * @param $successo boolean
  474.      * @param $oggetto string
  475.      * @param $contenuto string
  476.      * @param $da string
  477.      * @param $a string
  478.      * @param null $utente
  479.      * @param string $messaggioSupplementare
  480.      * @param string $cc
  481.      * @param string $ccn
  482.      */
  483.     public function InserisciRegistroMail($successo$oggetto$contenuto$da$a$utente null$log ''$messaggioSupplementare ''$cc ''$ccn ''$contentType ''){
  484.         try {
  485.             $rm = new RegistroMail();
  486.             $rm->setUtente($utente);
  487.             $rm->setDataInvio(new \DateTime());
  488.             $rm->setLog($log);
  489.             $rm->setSuccesso($successo);
  490.             $rm->setOggetto($oggetto);
  491.             $rm->setMessaggioSupplementare($messaggioSupplementare);
  492.             $rm->setContenuto($contenuto);
  493.             $rm->setDa($da);
  494.             $rm->setA($a);
  495.             $rm->setContentType($contentType);
  496.             $rm->setCc($cc);
  497.             $rm->setCcn($ccn);
  498.             $em $this->doctrine->getManager();
  499.             $em->persist($rm);
  500.             $em->flush();
  501.         }catch (\Exception $ex){
  502.             $this->DebuggaException($ex);
  503.         }
  504.     }
  505.     public static function OttieniCodiceGruppoCategorieDaMappa(MappaCategorieArticoli $mappa){
  506.         $ritorno "";
  507.         if($mappa->getCategoria1()){
  508.             $ritorno .= $mappa->getCategoria1()->getCodice();
  509.         }
  510.         if($mappa->getCategoria2()){
  511.             $ritorno .= $mappa->getCategoria2()->getCodice();
  512.         }
  513.         if($mappa->getCategoria3()){
  514.             $ritorno .= $mappa->getCategoria3()->getCodice();
  515.         }
  516.         if($mappa->getCategoria4()){
  517.             $ritorno .= $mappa->getCategoria4()->getCodice();
  518.         }
  519.         if($mappa->getCategoria5()){
  520.             $ritorno .= $mappa->getCategoria5()->getCodice();
  521.         }
  522.         return $ritorno;
  523.     }
  524.     public static function convertiInNumero($valore$ritorna0SeVuoto false){
  525.         $rit $valore;
  526.         if ($rit == ''){
  527.             if($ritorna0SeVuoto)
  528.                 $rit 0;
  529.             else
  530.                 $rit null;
  531.         }
  532.         if ($rit)
  533.             $rit str_replace(',''.'$rit);
  534.         return $rit;
  535.     }
  536.     public static function convertiInBoolean($valore$ritornaFalseSeVuoto false){
  537.         $rit null;
  538.         if(strtolower($valore) == 'true' || $valore == '1' || $valore == 1){
  539.             $rit true;
  540.         }
  541.         elseif (strtolower($valore) == 'false' || $valore '0' || $valore == 0){
  542.             $rit false;
  543.         } else {
  544.             if ($ritornaFalseSeVuoto) {
  545.                 $rit false;
  546.             } else {
  547.                 $rit null;
  548.             }
  549.         }
  550.         return $rit;
  551.     }
  552.     public static function convertiInDatetime($valore$conOra false$format 'd/m/Y'){
  553.         $rit null;
  554.         try {
  555.             $rit \DateTime::createFromFormat($format$valore);
  556.             if (!$conOra) {
  557.                 $rit->setTime(000);
  558.             }
  559.         }catch (\Exception $ex){
  560.         }
  561.         return $rit;
  562.     }
  563.     /**
  564.      * @param $barcode
  565.      * @param bool $ritornoJson
  566.      * @return MappaCategoriaArticolo
  567.      */
  568.     public function ritornaJsonArticoloDaBarcode($barcodebool $ritornoJson false){
  569.         $ritorno null;
  570.         $risultato $this->doctrine->getRepository(BarcodeArticoli::class)
  571.             ->createQueryBuilder('barcode_articoli')
  572.             ->leftJoin('barcode_articoli.mappaCategoriaArticoli''mappa')
  573.             ->leftJoin('mappa.articolo''articolo')
  574.             ->where('barcode_articoli.barcode = :brcd')->setParameter('brcd'$barcode)
  575.             ->setMaxResults(1)
  576.             ->getQuery()->getResult();
  577.         if(count($risultato) > 0){
  578.             /** @var BarcodeArticoli $brc */
  579.             $brc $risultato[0];
  580.             $mappa null;
  581.             if ($brc->getMappaCategoriaArticoli())
  582.                 $mappa MappaCategoriaArticolo::CreaDaEntitaDoctrine($this->doctrine$this''$brc->getMappaCategoriaArticoli(), $this->OttieniUtenteCorrente());
  583.             $ritorno $mappa;
  584.         }
  585.         if($ritornoJson) {
  586.             $ritorno json_encode($ritorno);
  587.         }
  588.         return $ritorno;
  589.     }
  590.     /**
  591.      * @param User $agente
  592.      * @return array
  593.      */
  594.     public function ritornaArrayCodiciAssociatiAgenteFornitoreUtente(User $agente$aggiungiApici false$fornitore false): array
  595.     {
  596.         $arrayCodici = array();
  597.         $db $this->doctrine->getRepository(AssociazioneCodiciAgentiUtente::class)->createQueryBuilder('ass')
  598.             ->where('ass.utente = :utente')->setParameter('utente'$agente);
  599.         if(!$fornitore){
  600.             $db $db->andWhere('ass.tipo = :tp OR ass.tipo IS NULL')->setParameter('tp''AGENTE');
  601.         } else{
  602.             $db $db->andWhere('ass.tipo = :tp')->setParameter('tp''FORNITORE');
  603.         }
  604.         $db $db->getQuery()->getResult();
  605.         /** @var AssociazioneCodiciAgentiUtente $itm */
  606.         foreach ($db as $itm){
  607.             array_push($arrayCodici$aggiungiApici ? ("'" $itm->getCodice() . "'") : $itm->getCodice());
  608.         }
  609.         return $arrayCodici;
  610.     }
  611.     /**
  612.      * @return array
  613.      */
  614.     public function ritornaArrayMarcheDaNascondereSeNonDisponibili(){
  615.         $arrayCodici = array();
  616.         /** @var NascondiEsauritiSuMarca[] $db */
  617.         $db $this->doctrine->getRepository(NascondiEsauritiSuMarca::class)->findAll();
  618.         /** @var NascondiEsauritiSuMarca $itm */
  619.         foreach ($db as $itm){
  620.             if($itm->getAttivo())
  621.                 array_push($arrayCodici"'" $itm->getMarca() . "'");
  622.         }
  623.         return $arrayCodici;
  624.     }
  625.     /**
  626.      * @param $link
  627.      * @return false|string
  628.      */
  629.     public function estraiIdMappaDaLink($link){
  630.         $pos strpos($link'-');
  631.         return substr($link0$pos);
  632.     }
  633.     /**
  634.      * @param Categorie $categoria
  635.      * @param Request $request
  636.      * @param $user
  637.      * @return void
  638.      */
  639.     public function inserisciStatisticaNavigazioneCategoria(Categorie $categoriaRequest $request$user){
  640.         try{
  641.             $conn $this->doctrine->getConnection();
  642.             $sql "INSERT INTO statistiche_categorie (categoria_id, azienda_id, data, indirizzo_ip, nome, codice, user_agent) VALUES (?, ?, NOW(), ?, ?, ?, ?);";
  643.             $stmt $conn->prepare($sql);
  644.             $stmt->bindValue(1$categoria->getId());
  645.             $stmt->bindValue(2$user $user->getId() : null);
  646.             $stmt->bindValue(3$request->getClientIp());
  647.             $stmt->bindValue(4$categoria->getNome());
  648.             $stmt->bindValue(5$categoria->getCodice());
  649.             $stmt->bindValue(6$request->headers->get('User-Agent'));
  650.             $stmt->execute();
  651.         } catch (\Exception $ex){
  652.             $this->DebuggaException($ex'Errore inserimento statistica navigazione categoria');
  653.         }
  654.     }
  655.     /**
  656.      * @return TipoOrdine[]
  657.      */
  658.     public function RitornaTipiOrdine(): array
  659.     {
  660.         /** @var TipoOrdine[] $ritorno */
  661.         $ritorno $this->doctrine->getRepository(TipoOrdine::class)->createQueryBuilder('tipoOrdine')
  662.             ->orderBy('tipoOrdine.testoVisualizzato')
  663.             ->getQuery()->getResult();
  664.         return $ritorno;
  665.     }
  666.     /**
  667.      * @param User $user
  668.      * @param string $ambito
  669.      * @param string $dettaglio
  670.      * @param bool $forzaInserimento
  671.      */
  672.     public function ScriviRegistroAttivitaUtente($user$ambito$dettaglio$forzaInserimento false)
  673.     {
  674.         try {
  675.             if(true) {
  676.                 $conn $this->doctrine->getConnection();
  677.                 $sql "INSERT INTO registro_attivita_utenti(user_id, role, ragione_sociale, data, ambito, dettaglio) VALUES(?,?,?,NOW(),?,?);";
  678.                 $stmt $conn->prepare($sql);
  679.                 $stmt->bindValue(1$user != null $user->getId() : null);
  680.                 $stmt->bindValue(2$user != null print_r($user->getRoles(), true) : null);
  681.                 $stmt->bindValue(3$user != null $user->getRagioneSociale() : null);
  682.                 $stmt->bindValue(4$ambito);
  683.                 $stmt->bindValue(5$dettaglio);
  684.                 $stmt->execute();
  685.             }
  686.         }catch (PDOException $ex){
  687.             $this->logger->critical("Errore inserimento registro attività utente --- " $ambito ' -- ' $dettaglio "-EXC:" $ex->getMessage() . "Trace: " $ex->getTraceAsString());
  688.         }catch (\Exception $ex){
  689.             $this->logger->critical("Errore inserimento registro attività utente --- " $ambito ' -- ' $dettaglio "-EXC:" $ex->getMessage() . "Trace: " $ex->getTraceAsString());
  690.         }
  691.     }
  692.     /**
  693.      * @param $lenght
  694.      * @return string
  695.      * @throws RandomException
  696.      */
  697.     public function randomString2($lenght 10): string
  698.     {
  699.         return bin2hex(random_bytes($lenght));
  700.     }
  701.     /**
  702.      * @param $ip string
  703.      * @param $debug string
  704.      * @param $esito boolean
  705.      * @param $messaggio string
  706.      * @param $utente User
  707.      */
  708.     public function ScriviRegistroAttivita($ip$debug$esito$messaggio$utente$collegamento=''$categoria1=''$categoria2='')
  709.     {
  710.         try {
  711.             $conn $this->doctrine->getConnection();
  712.             $sql "INSERT INTO registro_attivita(utente_id, data, esito, messaggio, client_ip, debug, collegamento, categoria1, categoria2) VALUES(?,NOW(),?,?,?,?,?,?,?);";
  713.             $stmt $conn->prepare($sql);
  714.             $stmt->bindValue(1$utente != null $utente->getId() : null);
  715.             $stmt->bindValue(2$esito 0);
  716.             $stmt->bindValue(3$messaggio);
  717.             $stmt->bindValue(4$ip);
  718.             $stmt->bindValue(5$debug);
  719.             $stmt->bindValue(6$collegamento);
  720.             $stmt->bindValue(7$categoria1);
  721.             $stmt->bindValue(8$categoria2);
  722.             $stmt->execute();
  723.         }catch (PDOException $ex){
  724.             $this->logger->critical("Errore inserimento registro attività --- " $messaggio "-EXC:" $ex->getMessage() . "Trace: " $ex->getTraceAsString());
  725.         }catch (\Exception $ex){
  726.             $this->logger->critical("Errore inserimento registro attività --- " $messaggio "-EXC:" $ex->getMessage() . "Trace: " $ex->getTraceAsString());
  727.         }
  728.     }
  729.     public function DebuggaException(\Exception $ex$messaggioIniziale ''$ritornaStringa false$utente null$collegamento=""$categoria1=""$categoria2=""){
  730.         $this->logger->error($messaggioIniziale ' Eccezzione: ' $ex->getMessage() . '<br/>Riga: ' $ex->getLine() . '<br/>File: ' $ex->getFile() . '<br/>Trace: ' $ex->getTraceAsString());
  731.         $this->ScriviRegistroAttivita(''''false$messaggioIniziale ' Eccezzione: ' $ex->getMessage() . '<br/>Riga: ' $ex->getLine() . '<br/>File: ' $ex->getFile() . '<br/>Trace: ' $ex->getTraceAsString(), $utente$collegamento$categoria1$categoria2);
  732.         if($ritornaStringa){
  733.             return $messaggioIniziale ' Eccezzione: ' $ex->getMessage() . '<br/>Riga: ' $ex->getLine() . '<br/>File: ' $ex->getFile() . '<br/>Trace: ' $ex->getTraceAsString();
  734.         }
  735.         return true;
  736.     }
  737.     public function ScriviLogDebug($messaggio){
  738.         if ($this->logger){
  739.             $this->logger->debug($messaggio);
  740.         }
  741.     }
  742.     /**
  743.      * @param Request $request
  744.      * @param $codiceAnagrafica
  745.      * @param false $soloVisibiliAlCliente
  746.      * @param string $cat1
  747.      * @param string $cat2
  748.      * @param string $cat3
  749.      * @param string $cat4
  750.      * @param string $cat5
  751.      * @param string $articolo
  752.      * @param string $marca
  753.      * @param string $codDim1
  754.      * @param string $codDim2
  755.      * @param string $codDim3
  756.      * @param string $codDim4
  757.      * @param string $codDim5
  758.      * @return array
  759.      */
  760.     public function ritornaRisorseAnagrafiche(Request $request$codiceAnagrafica ""$soloVisibiliAlCliente false$cat1 ''$cat2 ''$cat3 ''$cat4 ''$cat5 ''$articolo ''$marca ''$codDim1 ''$codDim2 ''$codDim3 ''$codDim4 ''$codDim5 '' ){
  761.         /** @var RisorseAnagrafiche[] $risorse */
  762.         $risorse $this->doctrine->getRepository(RisorseAnagrafiche::class)->createQueryBuilder('risorse_anagrafiche')
  763.             ->where("risorse_anagrafiche.codiceAnagrafica = :anagrafica")->setParameter('anagrafica'$codiceAnagrafica)
  764.             ->andWhere('risorse_anagrafiche.categoria = :cat')->setParameter('cat'$request->get('categoria'))
  765.             ->andWhere("risorse_anagrafiche.codiceCategoria1 = :cat1")->setParameter('cat1'$cat1)
  766.             ->andWhere('risorse_anagrafiche.codiceCategoria2 = :cat2')->setParameter('cat2'$cat2)
  767.             ->andWhere('risorse_anagrafiche.codiceCategoria3 = :cat3')->setParameter('cat3'$cat3)
  768.             ->andWhere('risorse_anagrafiche.codiceCategoria4 = :cat4')->setParameter('cat4'$cat4)
  769.             ->andWhere('risorse_anagrafiche.codiceCategoria5 = :cat5')->setParameter('cat5'$cat5)
  770.             ->andWhere('risorse_anagrafiche.codiceArticolo = :art')->setParameter('art'$articolo)
  771.             ->andWhere('risorse_anagrafiche.marca = :marca')->setParameter('marca'$marca)
  772.             ->andWhere('risorse_anagrafiche.codiceDimensione1 = :dim1')->setParameter('dim1'$codDim1)
  773.             ->andWhere('risorse_anagrafiche.codiceDimensione2 = :dim2')->setParameter('dim2'$codDim2)
  774.             ->andWhere('risorse_anagrafiche.codiceDimensione3 = :dim3')->setParameter('dim3'$codDim3)
  775.             ->andWhere('risorse_anagrafiche.codiceDimensione4 = :dim4')->setParameter('dim4'$codDim4)
  776.             ->andWhere('risorse_anagrafiche.codiceDimensione5 = :dim5')->setParameter('dim5'$codDim5);
  777.         if($soloVisibiliAlCliente){
  778.             $risorse $risorse->andWhere('risorse_anagrafiche.visibileAlCliente = 1');
  779.         }
  780.         $risorse $risorse->orderBy('risorse_anagrafiche.dataRisorsa''DESC')->getQuery()->getResult();
  781.         $ritorno = array();
  782.         $sorting = array();
  783.         $colonne = array(
  784.             array(
  785.                 'title' => 'idRisorsa',
  786.                 'field' => 'idRisorsa',
  787.                 'visible' => false
  788.             ),
  789.         );
  790.         $getCol true;
  791.         if(count($risorse) > 0){
  792.             foreach ($risorse as $r){
  793.                 $arrTemp = array(
  794.                     'idRisorsa' => $r->getId(),
  795.                 );
  796.                 $arrTempCol = array();
  797.                 /** @var RisorseAnagraficheColonneValori[] $campi */
  798.                 $campi $r->getDettaglioCampi();
  799.                 foreach ($campi as $dettaglio){
  800.                     if($getCol){
  801.                         $arrTempCol['title'] = $dettaglio->getColonna()->getHeaderVisualizzato();
  802.                         $arrTempCol['field'] = $dettaglio->getNomeColonna();
  803.                         if($dettaglio->getColonna()->getOrdinazioneOrdinamento()){ //è presente l'ordinamento
  804.                             $sorting[$dettaglio->getColonna()->getOrdinazioneOrdinamento()] = array(
  805.                                 'field' => $dettaglio->getNomeColonna(),
  806.                                 'direction' => $dettaglio->getColonna()->getDirezioneOrdinamento() == 'desc' 'desc' 'asc',
  807.                             );
  808.                         }
  809.                     }
  810.                     switch ($dettaglio->getColonna()->getTipoDato()){
  811.                         case 'text':{
  812.                             if($getCol){
  813.                                 $arrTempCol['sorter'] = 'text';
  814.                                 $arrTempCol['headerFilter'] = 'input';
  815.                             }
  816.                             $arrTemp[$dettaglio->getNomeColonna()] = $dettaglio->getValore();
  817.                             break;
  818.                         }
  819.                         case 'integer':{
  820.                             if($getCol){
  821.                                 $arrTempCol['align'] = 'right';
  822.                                 $arrTempCol['sorter'] = 'number';
  823.                                 $arrTempCol['headerFilter'] = 'number';
  824.                             }
  825.                             $arrTemp[$dettaglio->getNomeColonna()] = $dettaglio->getValoreInteger();
  826.                             break;
  827.                         }
  828.                         case 'decimal':{
  829.                             if($getCol){
  830.                                 $arrTempCol['align'] = 'right';
  831.                                 $arrTempCol['sorter'] = 'number';
  832.                                 $arrTempCol['headerFilter'] = 'number';
  833.                             }
  834.                             $arrTemp[$dettaglio->getNomeColonna()] = $dettaglio->getValoreDecimale();
  835.                             break;
  836.                         }
  837.                         case 'boolean':{
  838.                             if($getCol){
  839.                                 $arrTempCol['align'] = 'center';
  840.                                 $arrTempCol['sorter'] = 'boolean';
  841.                                 $arrTempCol['headerFilter'] = 'checkbox';
  842.                             }
  843.                             $arrTemp[$dettaglio->getNomeColonna()] = $dettaglio->getValoreBoolean();
  844.                             break;
  845.                         }
  846.                         case 'datetime':
  847.                         case 'date':
  848.                         case 'time':{
  849.                             if($getCol){
  850.                                 $arrTempCol['sorter'] = 'date';
  851.                                 $arrTempCol['headerFilter'] = 'input';
  852.                             }
  853.                             if($dettaglio->getColonna()->getTipoDato() == 'datetime'){
  854.                                 $arrTemp[$dettaglio->getNomeColonna()] = $dettaglio->getValoreDatetime()->format('d/m/Y H:i:s');
  855.                             }else if ($dettaglio->getColonna()->getTipoDato() == 'date'){
  856.                                 $arrTemp[$dettaglio->getNomeColonna()] = $dettaglio->getValoreDatetime()->format('d/m/Y');
  857.                             }else if ($dettaglio->getColonna()->getTipoDato() == 'time'){
  858.                                 $arrTemp[$dettaglio->getNomeColonna()] = $dettaglio->getValoreDatetime()->format('H:i:s');
  859.                             }
  860.                             break;
  861.                         }
  862.                     }
  863.                     if($getCol){
  864.                         array_push($colonne$arrTempCol);
  865.                     }
  866.                 }
  867.                 if($getCol){
  868.                     $getCol false;
  869.                 }
  870.                 array_push($ritorno$arrTemp);
  871.             }
  872.         }
  873.         ksort($sortingSORT_NUMERIC); //Ordino in base alle chiavi che sono le posizioni di ordinamento
  874.         return array(
  875.             'data' => $ritorno,
  876.             'colonne' => $colonne,
  877.             'sorting' => $sorting,
  878.         );
  879.     }
  880.     public function ritornaPathRisorse(){
  881.         $pathBaseRisorse $this->impostazioni->ritornaImpostazioneDaNome('PathRecuperoRisorse');
  882.         if (!$this->endsWith($pathBaseRisorseDIRECTORY_SEPARATOR))
  883.             $pathBaseRisorse .= DIRECTORY_SEPARATOR;
  884.         return $pathBaseRisorse;
  885.     }
  886.     public function ritornaPathBaseScambioDati(){
  887.         $pathBaseRisorse $this->impostazioni->ritornaImpostazioneDaNome('PathFileBaseScambioDati');
  888.         if (!$this->endsWith($pathBaseRisorseDIRECTORY_SEPARATOR))
  889.             $pathBaseRisorse .= DIRECTORY_SEPARATOR;
  890.         return $pathBaseRisorse;
  891.     }
  892.     public function ritornaTempFolderPath(){
  893.         $ret sys_get_temp_dir();
  894.         if(!$this->endsWith($retDIRECTORY_SEPARATOR))
  895.             $ret $ret DIRECTORY_SEPARATOR;
  896.         return $ret;
  897.     }
  898.     /** @return array */
  899.     public function pagineEComponentiRitornaTipiPagina(){
  900.         return Templating::PagineEComponentiRitornaTipiPagina();
  901.     }
  902.     /** @return array */
  903.     public function ritonaTipiPaginaMetaTags(){
  904.         return Templating::RitornaTipiPaginaPerMetaTag();
  905.     }
  906.     /** @return Articoli
  907.      *  @param $codiceArticolo string
  908.      */
  909.     function ritornaArticoloSeInserito($codiceArticolo$codiceMacroCategoria=null)
  910.     {
  911.         if($codiceMacroCategoria){
  912.             $repo $this->doctrine->getRepository(Articoli::class)->findBy(array('codice' => $codiceArticolo'macroCategoria' => $codiceMacroCategoria));
  913.         }else{
  914.             $repo $this->doctrine->getRepository(Articoli::class)->findBy(array('codice' => $codiceArticolo));
  915.         }
  916.         if (count($repo) > 0)
  917.             return $repo[0];
  918.         else
  919.             return null;
  920.     }
  921.     /** @return Categorie
  922.      * @param $codiceCategoria string
  923.      */
  924.     function ritornaCategoriaSeInserita($codiceCategoria$colonnaProvenienza)
  925.     {
  926.         $repo $this->doctrine->getRepository(Categorie::class)->findBy(['codice' => $codiceCategoria'colonnaProvenienza' => $colonnaProvenienza]);
  927.         if (count($repo) > 0)
  928.             return $repo[0];
  929.         else
  930.             return null;
  931.     }
  932.     /** @return CategorieAlbero
  933.      * @param $codiceCategoriaAlbero string
  934.      */
  935.     function ritornaCategoriaAlberoSeInserita($codiceCategoriaAlbero$livello)
  936.     {
  937.         $repo $this->doctrine->getRepository(CategorieAlbero::class)->findBy(['codice' => $codiceCategoriaAlbero'colonnaProvenienza' => $livello]);
  938.         if (count($repo) > 0)
  939.             return $repo[0];
  940.         else
  941.             return null;
  942.     }
  943.     /**
  944.      * @param User|UserInterface $agente
  945.      * @param Ordini $ordine
  946.      * @return bool
  947.      */
  948.     function VerificaAssociazioneOrdineAgente(User|UserInterface $agenteOrdini $ordine){
  949.         $ritorno false;
  950.         $codiciAgente self::ritornaArrayCodiciAssociatiAgenteFornitoreUtente($agente);
  951.         if($ordine->getAgente() == $agente && in_array($ordine->getAnagrafica()->getCodiceAgente(), $codiciAgente)){
  952.             $ritorno true;
  953.         }
  954.         return $ritorno;
  955.     }
  956.     /**
  957.      * @param $idTipologiaPreimpostata
  958.      * @return TipologiePreimpostate|null
  959.      */
  960.     public function ritornaTipologiaPreimpostataDaId($idTipologiaPreimpostata){
  961.         /** @var TipologiePreimpostate[] $tip */
  962.         $tip $this->doctrine->getRepository(TipologiePreimpostate::class)->createQueryBuilder('tipologie_preimpostate')
  963.             ->leftJoin('tipologie_preimpostate.lista''lista')
  964.             ->where('tipologie_preimpostate.id = :i')->setParameter('i'$idTipologiaPreimpostata)
  965.             ->getQuery()->getResult();
  966.         if (count($tip) > 0){
  967.             $tip $tip[0];
  968.         }
  969.         /** @var $tip TipologiePreimpostate */
  970.         return $tip;
  971.     }
  972.     /** @return MappaCategorieArticoli
  973.      * @param $articolo Articoli|Articolo
  974.      * @param $cat1 Categorie
  975.      * @param $cat2 Categorie
  976.      * @param $cat3 Categorie
  977.      * @param $cat4 Categorie
  978.      * @param $cat5 Categorie
  979.      * @param $marca string
  980.      */
  981.     function ritornaMappaCategoriaArticoliSeInserita($articolo$cat1$cat2$cat3$cat4$marca$cat5 null)
  982.     {
  983.         $repo $this->doctrine->getRepository(MappaCategorieArticoli::class);
  984.         $idArticolo '';
  985.         if($articolo instanceof Articoli)
  986.             $idArticolo $articolo->getId();
  987.         else if ($articolo instanceof Articolo)
  988.             $idArticolo $articolo->id;
  989.         $qb $repo->createQueryBuilder('mappa_categorie_articoli')->select()
  990.             ->where('mappa_categorie_articoli.articolo = :articolo')
  991.             ->setParameter('articolo'$idArticolo);
  992.         if ($cat1 != null)
  993.             $qb->andWhere('mappa_categorie_articoli.categoria1 = :cat1')->setParameter('cat1'$cat1->getId());
  994.         if ($cat2 != null)
  995.             $qb->andWhere('mappa_categorie_articoli.categoria2 = :cat2')->setParameter('cat2'$cat2->getId());
  996.         if ($cat3 != null)
  997.             $qb->andWhere('mappa_categorie_articoli.categoria3 = :cat3')->setParameter('cat3'$cat3->getId());
  998.         if ($cat4 != null)
  999.             $qb->andWhere('mappa_categorie_articoli.categoria4 = :cat4')->setParameter('cat4'$cat4->getId());
  1000.         if ($cat5 != null)
  1001.             $qb->andWhere('mappa_categorie_articoli.categoria5 = :cat5')->setParameter('cat5'$cat5->getId());
  1002.         if ($marca != null)
  1003.             $qb->andWhere('mappa_categorie_articoli.marca = :marca')->setParameter('marca'$marca);
  1004.         $res $qb->getQuery()->getResult();
  1005.         if (count($res) > 0)
  1006.             return $res[0];
  1007.         else
  1008.             return null;
  1009.     }
  1010.     /** @param $mappaCatArt MappaCategorieArticoli
  1011.      * @param CategorieAlbero$cat1
  1012.      * @param $cat2 CategorieAlbero
  1013.      * @param $cat3 CategorieAlbero
  1014.      * @param $cat4 CategorieAlbero
  1015.      * @param $cat5 CategorieAlbero
  1016.      * @param CategorieAlbero $cat6
  1017.      * @param $cat7 CategorieAlbero
  1018.      * @param $cat8 CategorieAlbero
  1019.      * @param $cat9 CategorieAlbero
  1020.      * @param $cat10 CategorieAlbero
  1021.      *@return AssociazioneCategorieAlberoMappaCategorieArticoli
  1022.      */
  1023.     function ritornaAssociazioneCategorieAlberoMappaCategoriaArticoliSeInserita($mappaCatArt$cat1$cat2$cat3$cat4$cat5 null$cat6 null$cat7 null$cat8 null$cat9 null$cat10 null)
  1024.     {
  1025.         $repo $this->doctrine->getRepository(AssociazioneCategorieAlberoMappaCategorieArticoli::class);
  1026.         $qb $repo->createQueryBuilder('associazione_categorie_albero_mappa_categorie_articoli')
  1027.             ->leftJoin('associazione_categorie_albero_mappa_categorie_articoli.categoriaAlbero1''cat1')
  1028.             ->leftJoin('associazione_categorie_albero_mappa_categorie_articoli.categoriaAlbero2''cat2')
  1029.             ->leftJoin('associazione_categorie_albero_mappa_categorie_articoli.categoriaAlbero3''cat3')
  1030.             ->leftJoin('associazione_categorie_albero_mappa_categorie_articoli.categoriaAlbero4''cat4')
  1031.             ->leftJoin('associazione_categorie_albero_mappa_categorie_articoli.categoriaAlbero5''cat5')
  1032.             ->leftJoin('associazione_categorie_albero_mappa_categorie_articoli.categoriaAlbero6''cat6')
  1033.             ->leftJoin('associazione_categorie_albero_mappa_categorie_articoli.categoriaAlbero7''cat7')
  1034.             ->leftJoin('associazione_categorie_albero_mappa_categorie_articoli.categoriaAlbero8''cat8')
  1035.             ->leftJoin('associazione_categorie_albero_mappa_categorie_articoli.categoriaAlbero9''cat9')
  1036.             ->leftJoin('associazione_categorie_albero_mappa_categorie_articoli.categoriaAlbero10''cat10')
  1037.             ->where('associazione_categorie_albero_mappa_categorie_articoli.mappaCategoriaArticolo = :mappa')
  1038.             ->setParameter(":mappa"$mappaCatArt);
  1039.         if ($cat1 != null)
  1040.             $qb->andWhere('cat1.id = :ct1')->setParameter('ct1'$cat1->getId());
  1041.         if ($cat2 != null)
  1042.             $qb->andWhere('cat2.id = :ct2')->setParameter('ct2'$cat2->getId());
  1043.         if ($cat3 != null)
  1044.             $qb->andWhere('cat3.id = :ct3')->setParameter('ct3'$cat3->getId());
  1045.         if ($cat4 != null)
  1046.             $qb->andWhere('cat4.id = :ct4')->setParameter('ct4'$cat4->getId());
  1047.         if ($cat5 != null)
  1048.             $qb->andWhere('cat5.id = :ct5')->setParameter('ct5'$cat5->getId());
  1049.         if ($cat6 != null)
  1050.             $qb->andWhere('cat6.id = :ct6')->setParameter('ct6'$cat6->getId());
  1051.         if ($cat7 != null)
  1052.             $qb->andWhere('cat7.id = :ct7')->setParameter('ct7'$cat7->getId());
  1053.         if ($cat8 != null)
  1054.             $qb->andWhere('cat8.id = :ct8')->setParameter('ct8'$cat8->getId());
  1055.         if ($cat9 != null)
  1056.             $qb->andWhere('cat9.id = :ct9')->setParameter('ct9'$cat9->getId());
  1057.         if ($cat10 != null)
  1058.             $qb->andWhere('cat10.id = :ct10')->setParameter('ct10'$cat10->getId());
  1059.         $res $qb->getQuery()->getResult();
  1060.         if (count($res) > 0)
  1061.             return $res[0];
  1062.         else
  1063.             return null;
  1064.     }
  1065.     /**
  1066.      * @param $tipoPagina
  1067.      * @param $valoriSupporto
  1068.      * @return string|null
  1069.      */
  1070.     public function ritornaDefaultLayoutPagineEComponenti($tipoPagina$valoriSupporto$soloForm false){
  1071.         return Templating::ritornaDefaultLayoutPagineEComponenti($tipoPagina$valoriSupporto$this->twig$soloForm);
  1072.     }
  1073.     /**
  1074.      *  @param $tipoPagina string
  1075.      *  @return string
  1076.      */
  1077.     public function pagineEComponentiRitornaNomeDaValoreTipoPagina($tipoPagina){
  1078.         $arr $this->pagineEComponentiRitornaTipiPagina();
  1079.         foreach ($arr as $key => $value){
  1080.             if ($value == $tipoPagina)
  1081.                 return $key;
  1082.         }
  1083.         return "";
  1084.     }
  1085.     /**
  1086.      * @param Ordine|Carrello $ordine
  1087.      * @return array|null
  1088.      */
  1089.     public function creaArrayRaggruppatoPerVariantiVisualizzazioneOrizzontaleOrdineCarrello($ordine){
  1090.         $arrayDivisioneArticoli = array(); // {
  1091.         //   codiceArticolo : { articolo : (classeArticolo), divisioneHeaderRiga : [ arrayDi->divisioneHeaderRiga ] },
  1092.         //   articoliSenzaVarianti : [ righe ]
  1093.         // }
  1094.         $arrayDivisioneHeaderRiga = array(); // { headerRiga : [ arrayDivisioneInColonne ] }
  1095.         $arrayDivisioneInColonne = array(); // { codiceVariante5 : [ righe ]} codiceVariante5 è il codice dell'ultima variante da inserire in colonna usata come chiave
  1096.         //VARIABILI ESAME
  1097.         $esameCodiceArticolo '';
  1098.         $classeArticoloEsame null;
  1099.         $arrayTemporaneHeaderRiga = array();
  1100.         $esameHeaderRiga '';
  1101.         $arrayTemporaneoDivisioneIncolonne = array();
  1102.         $arrayTemporaneoSchemaVariantiDisponibiliArticolo = array();
  1103.         $codiceDimensione5Inserita = array();
  1104.         $listaRigheSenzaVarianti = array();
  1105.         $this->logger->info("Conteggio righe ordine: " count($ordine->righe));
  1106.         foreach ($ordine->righe as $riga) {
  1107.             $this->logger->info("Array raggruppato varianti 1: Codice variante: " $riga->codiceVariante);
  1108.             $trovataVariante true;
  1109.             if ($riga->variante == null || $riga->variante->id == '') {
  1110.                 array_push($listaRigheSenzaVarianti$riga);
  1111.                 $trovataVariante false;
  1112.             }
  1113.             $this->logger->info("Valore di -trovata variante- : " . ($trovataVariante 'True' 'False'));
  1114.             if($trovataVariante) {
  1115.                 if ($esameCodiceArticolo == '' || $esameCodiceArticolo != $riga->mappaCategoriaArticolo->articolo->codice) {
  1116.                     if ($esameCodiceArticolo != '') {
  1117.                         $arrayTemporaneHeaderRiga[$esameHeaderRiga] = $arrayTemporaneoDivisioneIncolonne;
  1118.                         $arrayDivisioneArticoli['articoliConVarianti'][$esameCodiceArticolo] = array(
  1119.                             'articolo' => $classeArticoloEsame,
  1120.                             'divisioneHeaderRiga' => $arrayTemporaneHeaderRiga,
  1121.                             'schemaVariantiDisponibili' => $arrayTemporaneoSchemaVariantiDisponibiliArticolo
  1122.                         );
  1123.                     }
  1124.                     $classeArticoloEsame $riga->mappaCategoriaArticolo->articolo;
  1125.                     $esameCodiceArticolo $riga->mappaCategoriaArticolo->articolo->codice;
  1126.                     $this->logger->info("Esame codice articolo: " $esameCodiceArticolo);
  1127.                     $arrayTemporaneHeaderRiga = array();
  1128.                     $arrayTemporaneoSchemaVariantiDisponibiliArticolo = array();
  1129.                     $codiceDimensione5Inserita = array();
  1130.                     for ($i 1$i <= count($riga->mappaCategoriaArticolo->varianti); $i++) {
  1131.                         $vrtn $riga->mappaCategoriaArticolo->varianti[$i 1];
  1132.                         if (!in_array($vrtn->codiceDimensione5$codiceDimensione5Inserita)) {
  1133.                             $arrayTemporaneoSchemaVariantiDisponibiliArticolo[$vrtn->codiceDimensione5] = $vrtn;
  1134.                             array_push($codiceDimensione5Inserita$vrtn->codiceDimensione5);
  1135.                         }
  1136.                     }
  1137.                     $esameHeaderRiga $this->generaHeaderRiga($riga->variante);
  1138.                     $this->logger->info("Esame header riga: " $esameHeaderRiga);
  1139.                     $arrayTemporaneoDivisioneIncolonne = array();
  1140.                 }
  1141.                 if ($esameHeaderRiga != $this->generaHeaderRiga($riga->variante)) {
  1142.                     $this->logger->info("Esame header riga diverso da nuovo generato. Vecchio: " $esameHeaderRiga " --- Nuovo: " $this->generaHeaderRiga($riga->variante));
  1143.                     $arrayTemporaneHeaderRiga[$esameHeaderRiga] = $arrayTemporaneoDivisioneIncolonne;
  1144.                     $esameHeaderRiga $this->generaHeaderRiga($riga->variante);
  1145.                     $arrayTemporaneoDivisioneIncolonne = array();
  1146.                 }
  1147.                 if (key_exists($riga->variante->codiceDimensione5$arrayTemporaneoDivisioneIncolonne)) {
  1148.                     $this->logger->info("Array temporaneo divisione in colonne contiene codiceDimensione5: " $riga->variante->codiceDimensione5);
  1149.                     array_push($arrayTemporaneoDivisioneIncolonne[$riga->variante->codiceDimensione5], $riga);
  1150.                 } else {
  1151.                     $this->logger->info("Array temporaneo divisione in colonne NON contiene codiceDimensione5: " $riga->variante->codiceDimensione5);
  1152.                     $arrayTemporaneoDivisioneIncolonne[$riga->variante->codiceDimensione5] = array($riga);
  1153.                 }
  1154.             }
  1155.         }
  1156.         if (count($arrayTemporaneoDivisioneIncolonne) > 0) {
  1157.             $arrayTemporaneHeaderRiga[$esameHeaderRiga] = $arrayTemporaneoDivisioneIncolonne;
  1158.             $arrayDivisioneArticoli['articoliConVarianti'][$esameCodiceArticolo] = array(
  1159.                 'articolo' => $classeArticoloEsame,
  1160.                 'divisioneHeaderRiga' => $arrayTemporaneHeaderRiga,
  1161.                 'schemaVariantiDisponibili' => $arrayTemporaneoSchemaVariantiDisponibiliArticolo
  1162.             );
  1163.         }else{
  1164.             $arrayDivisioneArticoli['articoliConVarianti'] = array();
  1165.         }
  1166.         $arrayDivisioneArticoli['articoliSenzaVarianti'] = $listaRigheSenzaVarianti;
  1167.         return $arrayDivisioneArticoli;
  1168.     }
  1169.     /**
  1170.      * @param $offerta Offerta
  1171.      * @return array|null
  1172.      */
  1173.     public function creaArrayRaggruppatoPerVariantiVisualizzazioneOrizzontaleOfferta($offerta){
  1174.         if($offerta instanceof Offerte){
  1175.             $offerta Offerta::CreaDaConversioneEntita($offerta$this->doctrine$this$this->OttieniUtenteCorrente(), $this->locale);
  1176.         }
  1177.         $arrayDivisioneArticoli = array(); // {
  1178.         //   codiceArticolo : { articolo : (classeArticolo), divisioneHeaderRiga : [ arrayDi->divisioneHeaderRiga ] },
  1179.         //   articoliSenzaVarianti : [ righe ]
  1180.         // }
  1181.         $arrayDivisioneHeaderRiga = array(); // { headerRiga : [ arrayDivisioneInColonne ] }
  1182.         $arrayDivisioneInColonne = array(); // { codiceVariante5 : [ righe ]} codiceVariante5 è il codice dell'ultima variante da inserire in colonna usata come chiave
  1183.         //VARIABILI ESAME
  1184.         $esameCodiceArticolo '';
  1185.         $classeArticoloEsame null;
  1186.         $arrayTemporaneHeaderRiga = array();
  1187.         $esameHeaderRiga '';
  1188.         $arrayTemporaneoDivisioneIncolonne = array();
  1189.         $arrayTemporaneoSchemaVariantiDisponibiliArticolo = array();
  1190.         $codiceDimensione5Inserita = array();
  1191.         $listaRigheSenzaVarianti = array();
  1192.         $this->logger->info("Conteggio righe offerta: " count($offerta->righe));
  1193.         foreach ($offerta->righe as $riga) {
  1194.             //$this->logger->info("Array raggruppato varianti 1: Codice variante: " . $riga->codiceVariante);
  1195.             $trovataVariante true;
  1196.             if ($riga->collegamentoVariante == null || $riga->collegamentoVariante->id == '') {
  1197.                 array_push($listaRigheSenzaVarianti$riga);
  1198.                 $trovataVariante false;
  1199.             }
  1200.             $this->logger->info("Valore di -trovata variante- : " . ($trovataVariante 'True' 'False'));
  1201.             if($trovataVariante) {
  1202.                 if ($esameCodiceArticolo == '' || $esameCodiceArticolo != $riga->collegamentoMappaCategoriaArticolo->articolo->codice) {
  1203.                     if ($esameCodiceArticolo != '') {
  1204.                         $arrayTemporaneHeaderRiga[$esameHeaderRiga] = $arrayTemporaneoDivisioneIncolonne;
  1205.                         $arrayDivisioneArticoli['articoliConVarianti'][$esameCodiceArticolo] = array(
  1206.                             'articolo' => $classeArticoloEsame,
  1207.                             'divisioneHeaderRiga' => $arrayTemporaneHeaderRiga,
  1208.                             'schemaVariantiDisponibili' => $arrayTemporaneoSchemaVariantiDisponibiliArticolo
  1209.                         );
  1210.                     }
  1211.                     $classeArticoloEsame $riga->collegamentoMappaCategoriaArticolo->articolo;
  1212.                     $esameCodiceArticolo $riga->collegamentoMappaCategoriaArticolo->articolo->codice;
  1213.                     $this->logger->info("Esame codice articolo: " $esameCodiceArticolo);
  1214.                     $arrayTemporaneHeaderRiga = array();
  1215.                     $arrayTemporaneoSchemaVariantiDisponibiliArticolo = array();
  1216.                     $codiceDimensione5Inserita = array();
  1217.                     for ($i 1$i <= count($riga->collegamentoMappaCategoriaArticolo->varianti); $i++) {
  1218.                         $vrtn $riga->collegamentoMappaCategoriaArticolo->varianti[$i 1];
  1219.                         if (!in_array($vrtn->codiceDimensione5$codiceDimensione5Inserita)) {
  1220.                             $arrayTemporaneoSchemaVariantiDisponibiliArticolo[$vrtn->codiceDimensione5] = $vrtn;
  1221.                             array_push($codiceDimensione5Inserita$vrtn->codiceDimensione5);
  1222.                         }
  1223.                     }
  1224.                     $esameHeaderRiga $this->generaHeaderRiga($riga->collegamentoVariante);
  1225.                     $this->logger->info("Esame header riga: " $esameHeaderRiga);
  1226.                     $arrayTemporaneoDivisioneIncolonne = array();
  1227.                 }
  1228.                 if ($esameHeaderRiga != $this->generaHeaderRiga($riga->collegamentoVariante)) {
  1229.                     $this->logger->info("Esame header riga diverso da nuovo generato. Vecchio: " $esameHeaderRiga " --- Nuovo: " $this->generaHeaderRiga($riga->collegamentoVariante));
  1230.                     $arrayTemporaneHeaderRiga[$esameHeaderRiga] = $arrayTemporaneoDivisioneIncolonne;
  1231.                     $esameHeaderRiga $this->generaHeaderRiga($riga->collegamentoVariante);
  1232.                     $arrayTemporaneoDivisioneIncolonne = array();
  1233.                 }
  1234.                 if (key_exists($riga->collegamentoVariante->codiceDimensione5$arrayTemporaneoDivisioneIncolonne)) {
  1235.                     $this->logger->info("Array temporaneo divisione in colonne contiene codiceDimensione5: " $riga->collegamentoVariante->codiceDimensione5);
  1236.                     array_push($arrayTemporaneoDivisioneIncolonne[$riga->collegamentoVariante->codiceDimensione5], $riga);
  1237.                 } else {
  1238.                     $this->logger->info("Array temporaneo divisione in colonne NON contiene codiceDimensione5: " $riga->collegamentoVariante->codiceDimensione5);
  1239.                     $arrayTemporaneoDivisioneIncolonne[$riga->collegamentoVariante->codiceDimensione5] = array($riga);
  1240.                 }
  1241.             }
  1242.         }
  1243.         if (count($arrayTemporaneoDivisioneIncolonne) > 0) {
  1244.             $arrayTemporaneHeaderRiga[$esameHeaderRiga] = $arrayTemporaneoDivisioneIncolonne;
  1245.             $arrayDivisioneArticoli['articoliConVarianti'][$esameCodiceArticolo] = array(
  1246.                 'articolo' => $classeArticoloEsame,
  1247.                 'divisioneHeaderRiga' => $arrayTemporaneHeaderRiga,
  1248.                 'schemaVariantiDisponibili' => $arrayTemporaneoSchemaVariantiDisponibiliArticolo
  1249.             );
  1250.         }else{
  1251.             $arrayDivisioneArticoli['articoliConVarianti'] = array();
  1252.         }
  1253.         $arrayDivisioneArticoli['articoliSenzaVarianti'] = $listaRigheSenzaVarianti;
  1254.         return $arrayDivisioneArticoli;
  1255.     }
  1256.     /**
  1257.      * @param $ordine Ordine
  1258.      * @return array|null
  1259.      */
  1260.     public function creaArrayRaggruppatoPerVariantiVisualizzazioneOrizzontaleOrdine($ordine){
  1261.         $arrayDivisioneArticoli = array(); // {
  1262.                                            //   codiceArticolo : { articolo : (classeArticolo), divisioneHeaderRiga : [ arrayDi->divisioneHeaderRiga ] },
  1263.                                            //   articoliSenzaVarianti : [ righe ]
  1264.                                            // }
  1265.         $arrayDivisioneHeaderRiga = array(); // { headerRiga : [ arrayDivisioneInColonne ] }
  1266.         $arrayDivisioneInColonne = array(); // { codiceVariante5 : [ righe ]} codiceVariante5 è il codice dell'ultima variante da inserire in colonna usata come chiave
  1267.         //VARIABILI ESAME
  1268.         $esameCodiceArticolo '';
  1269.         $classeArticoloEsame null;
  1270.         $arrayTemporaneHeaderRiga = array();
  1271.         $esameHeaderRiga '';
  1272.         $arrayTemporaneoDivisioneIncolonne = array();
  1273.         $arrayTemporaneoSchemaVariantiDisponibiliArticolo = array();
  1274.         $codiceDimensione5Inserita = array();
  1275.         $listaRigheSenzaVarianti = array();
  1276.         $this->logger->info("Conteggio righe ordine: " count($ordine->righe));
  1277.         foreach ($ordine->righe as $riga) {
  1278.             //$this->logger->info("Array raggruppato varianti 1: Codice variante: " . $riga->codiceVariante);
  1279.             $trovataVariante true;
  1280.             if ($riga->variante == null || $riga->variante->id == '') {
  1281.                 array_push($listaRigheSenzaVarianti$riga);
  1282.                 $trovataVariante false;
  1283.             }
  1284.             $this->logger->info("Valore di -trovata variante- : " . ($trovataVariante 'True' 'False'));
  1285.             if($trovataVariante) {
  1286.                 if ($esameCodiceArticolo == '' || $esameCodiceArticolo != $riga->mappaCategoriaArticolo->articolo->codice) {
  1287.                     if ($esameCodiceArticolo != '') {
  1288.                         $arrayTemporaneHeaderRiga[$esameHeaderRiga] = $arrayTemporaneoDivisioneIncolonne;
  1289.                         $arrayDivisioneArticoli['articoliConVarianti'][$esameCodiceArticolo] = array(
  1290.                             'articolo' => $classeArticoloEsame,
  1291.                             'divisioneHeaderRiga' => $arrayTemporaneHeaderRiga,
  1292.                             'schemaVariantiDisponibili' => $arrayTemporaneoSchemaVariantiDisponibiliArticolo
  1293.                         );
  1294.                     }
  1295.                     $classeArticoloEsame $riga->mappaCategoriaArticolo->articolo;
  1296.                     $esameCodiceArticolo $riga->mappaCategoriaArticolo->articolo->codice;
  1297.                     $this->logger->info("Esame codice articolo: " $esameCodiceArticolo);
  1298.                     $arrayTemporaneHeaderRiga = array();
  1299.                     $arrayTemporaneoSchemaVariantiDisponibiliArticolo = array();
  1300.                     $codiceDimensione5Inserita = array();
  1301.                     for ($i 1$i <= count($riga->mappaCategoriaArticolo->varianti); $i++) {
  1302.                         $vrtn $riga->mappaCategoriaArticolo->varianti[$i 1];
  1303.                         if (!in_array($vrtn->codiceDimensione5$codiceDimensione5Inserita)) {
  1304.                             $arrayTemporaneoSchemaVariantiDisponibiliArticolo[$vrtn->codiceDimensione5] = $vrtn;
  1305.                             array_push($codiceDimensione5Inserita$vrtn->codiceDimensione5);
  1306.                         }
  1307.                     }
  1308.                     $esameHeaderRiga $this->generaHeaderRiga($riga->variante);
  1309.                     $this->logger->info("Esame header riga: " $esameHeaderRiga);
  1310.                     $arrayTemporaneoDivisioneIncolonne = array();
  1311.                 }
  1312.                 if ($esameHeaderRiga != $this->generaHeaderRiga($riga->variante)) {
  1313.                     $this->logger->info("Esame header riga diverso da nuovo generato. Vecchio: " $esameHeaderRiga " --- Nuovo: " $this->generaHeaderRiga($riga->variante));
  1314.                     $arrayTemporaneHeaderRiga[$esameHeaderRiga] = $arrayTemporaneoDivisioneIncolonne;
  1315.                     $esameHeaderRiga $this->generaHeaderRiga($riga->variante);
  1316.                     $arrayTemporaneoDivisioneIncolonne = array();
  1317.                 }
  1318.                 if (key_exists($riga->variante->codiceDimensione5$arrayTemporaneoDivisioneIncolonne)) {
  1319.                     $this->logger->info("Array temporaneo divisione in colonne contiene codiceDimensione5: " $riga->variante->codiceDimensione5);
  1320.                     array_push($arrayTemporaneoDivisioneIncolonne[$riga->variante->codiceDimensione5], $riga);
  1321.                 } else {
  1322.                     $this->logger->info("Array temporaneo divisione in colonne NON contiene codiceDimensione5: " $riga->variante->codiceDimensione5);
  1323.                     $arrayTemporaneoDivisioneIncolonne[$riga->variante->codiceDimensione5] = array($riga);
  1324.                 }
  1325.             }
  1326.         }
  1327.         if (count($arrayTemporaneoDivisioneIncolonne) > 0) {
  1328.             $arrayTemporaneHeaderRiga[$esameHeaderRiga] = $arrayTemporaneoDivisioneIncolonne;
  1329.             $arrayDivisioneArticoli['articoliConVarianti'][$esameCodiceArticolo] = array(
  1330.                 'articolo' => $classeArticoloEsame,
  1331.                 'divisioneHeaderRiga' => $arrayTemporaneHeaderRiga,
  1332.                 'schemaVariantiDisponibili' => $arrayTemporaneoSchemaVariantiDisponibiliArticolo
  1333.             );
  1334.         }else{
  1335.             $arrayDivisioneArticoli['articoliConVarianti'] = array();
  1336.         }
  1337.         $arrayDivisioneArticoli['articoliSenzaVarianti'] = $listaRigheSenzaVarianti;
  1338.         return $arrayDivisioneArticoli;
  1339.     }
  1340.     /**
  1341.      * @param $carrello Carrello
  1342.      * @return array|null
  1343.      */
  1344.     public function creaArrayRaggruppatoPerVariantiVisualizzazioneOrizzontaleCarrello($carrello){
  1345.         $arrayDivisioneArticoli = array(); // {
  1346.         //   codiceArticolo : { articolo : (classeArticolo), divisioneHeaderRiga : [ arrayDi->divisioneHeaderRiga ] },
  1347.         //   articoliSenzaVarianti : [ righe ]
  1348.         // }
  1349.         $arrayDivisioneHeaderRiga = array(); // { headerRiga : [ arrayDivisioneInColonne ] }
  1350.         $arrayDivisioneInColonne = array(); // { codiceVariante5 : [ righe ]} codiceVariante5 è il codice dell'ultima variante da inserire in colonna usata come chiave
  1351.         //VARIABILI ESAME
  1352.         $esameCodiceArticolo '';
  1353.         $classeArticoloEsame null;
  1354.         $arrayTemporaneHeaderRiga = array();
  1355.         $esameHeaderRiga '';
  1356.         $arrayTemporaneoDivisioneIncolonne = array();
  1357.         $arrayTemporaneoSchemaVariantiDisponibiliArticolo = array();
  1358.         $codiceDimensione5Inserita = array();
  1359.         $listaRigheSenzaVarianti = array();
  1360.         foreach ($carrello->righe as $riga){
  1361.             if (!$riga->variante){
  1362.                 array_push($listaRigheSenzaVarianti$riga);
  1363.                 continue;
  1364.             }
  1365.             if ($esameCodiceArticolo == '' || $esameCodiceArticolo != $riga->mappaCategoriaArticolo->articolo->codice)
  1366.             {
  1367.                 if ($esameCodiceArticolo != ''){
  1368.                     $arrayTemporaneHeaderRiga[$esameHeaderRiga] = $arrayTemporaneoDivisioneIncolonne;
  1369.                     $arrayDivisioneArticoli['articoliConVarianti'][$esameCodiceArticolo] = array(
  1370.                         'articolo' => $classeArticoloEsame,
  1371.                         'divisioneHeaderRiga' => $arrayTemporaneHeaderRiga,
  1372.                         'schemaVariantiDisponibili' => $arrayTemporaneoSchemaVariantiDisponibiliArticolo
  1373.                     );
  1374.                 }
  1375.                 $classeArticoloEsame $riga->mappaCategoriaArticolo->articolo;
  1376.                 $esameCodiceArticolo $riga->mappaCategoriaArticolo->articolo->codice;
  1377.                 $arrayTemporaneHeaderRiga = array();
  1378.                 $arrayTemporaneoSchemaVariantiDisponibiliArticolo = array();
  1379.                 $codiceDimensione5Inserita = array();
  1380.                 for ($i 1$i <= count($riga->mappaCategoriaArticolo->varianti); $i++) {
  1381.                     $vrtn $riga->mappaCategoriaArticolo->varianti[$i 1];
  1382.                     if (!in_array($vrtn->codiceDimensione5$codiceDimensione5Inserita)){
  1383.                         $arrayTemporaneoSchemaVariantiDisponibiliArticolo[$vrtn->codiceDimensione5] = $vrtn;
  1384.                         array_push($codiceDimensione5Inserita$vrtn->codiceDimensione5);
  1385.                     }
  1386.                 }
  1387.                 $esameHeaderRiga $this->generaHeaderRiga($riga->variante);
  1388.                 $arrayTemporaneoDivisioneIncolonne = array();
  1389.             }
  1390.             if ($esameHeaderRiga != $this->generaHeaderRiga($riga->variante)){
  1391.                 $arrayTemporaneHeaderRiga[$esameHeaderRiga] = $arrayTemporaneoDivisioneIncolonne;
  1392.                 $esameHeaderRiga $this->generaHeaderRiga($riga->variante);
  1393.                 $arrayTemporaneoDivisioneIncolonne = array();
  1394.             }
  1395.             if (key_exists($riga->variante->codiceDimensione5$arrayTemporaneoDivisioneIncolonne)){
  1396.                 array_push($arrayTemporaneoDivisioneIncolonne[$riga->variante->codiceDimensione5], $riga);
  1397.             }else{
  1398.                 $arrayTemporaneoDivisioneIncolonne[$riga->variante->codiceDimensione5] = array($riga);
  1399.             }
  1400.         }
  1401.         $arrayTemporaneHeaderRiga[$esameHeaderRiga] = $arrayTemporaneoDivisioneIncolonne;
  1402.         $arrayDivisioneArticoli['articoliConVarianti'][$esameCodiceArticolo] = array(
  1403.             'articolo' => $classeArticoloEsame,
  1404.             'divisioneHeaderRiga' => $arrayTemporaneHeaderRiga,
  1405.             'schemaVariantiDisponibili' => $arrayTemporaneoSchemaVariantiDisponibiliArticolo
  1406.         );
  1407.         $arrayDivisioneArticoli['articoliSenzaVarianti'] = $listaRigheSenzaVarianti;
  1408.         return $arrayDivisioneArticoli;
  1409.     }
  1410.     /**
  1411.      * @param $variante Variante
  1412.      * @return string
  1413.      */
  1414.     public function generaHeaderRiga($variante){
  1415.         $ritorno "";
  1416.         if ($variante->codiceDimensione1 != ""){
  1417.             if($variante->associazioneArticoliCliente && $variante->associazioneArticoliCliente->codiceDimensione1 != '')
  1418.                 $ritorno .= $variante->associazioneArticoliCliente->descrizioneDimensione1 "/////";
  1419.             else
  1420.                 $ritorno .= $variante->descrizioneDimensione1 "/////";
  1421.         }
  1422.         if ($variante->codiceDimensione2 != ""){
  1423.             if($variante->associazioneArticoliCliente && $variante->associazioneArticoliCliente->codiceDimensione2 != '')
  1424.                 $ritorno .= $variante->associazioneArticoliCliente->descrizioneDimensione2 "/////";
  1425.             else
  1426.                 $ritorno .= $variante->descrizioneDimensione2 "/////";
  1427.         }
  1428.         if ($variante->codiceDimensione3 != ""){
  1429.             if($variante->associazioneArticoliCliente && $variante->associazioneArticoliCliente->codiceDimensione3 != '')
  1430.                 $ritorno .= $variante->associazioneArticoliCliente->descrizioneDimensione3 "/////";
  1431.             else
  1432.                 $ritorno .= $variante->descrizioneDimensione3 "/////";
  1433.         }
  1434.         if ($variante->codiceDimensione4 != ""){
  1435.             if($variante->associazioneArticoliCliente && $variante->associazioneArticoliCliente->codiceDimensione4 != '')
  1436.                 $ritorno .= $variante->associazioneArticoliCliente->descrizioneDimensione4 "/////";
  1437.             else
  1438.                 $ritorno .= $variante->descrizioneDimensione4 "/////";
  1439.         }
  1440.         //Salto il codiceDimensione5 perchè è incolonnato
  1441.         return substr($ritorno0strlen($ritorno));
  1442.     }
  1443.     /*================================================================================================================
  1444.     =====================================================  SEO META  =================================================
  1445.     ==================================================================================================================*/
  1446.     public function ritornaSeoMetatags($route$variabiliTemplate$idPagina null){
  1447.         return Templating::ritornaMetaTagsRoute($route$variabiliTemplate$this->doctrine$this$idPagina);
  1448.     }
  1449.     /*================================================================================================================
  1450.     =======================================================  COUPON  =================================================
  1451.     ==================================================================================================================*/
  1452.     /**
  1453.      * @param $dettaglioCoupon CouponDettaglio
  1454.      * @param $carrello Carrello
  1455.      * @return RitornoValiditaCoupon
  1456.      * @throws \Exception
  1457.      */
  1458.     public function verificaValiditaCoupon($dettaglioCoupon$carrello){
  1459.         $ritorno = new RitornoValiditaCoupon();
  1460.         $ritorno->esito $dettaglioCoupon->getCoupon()->getAttivo();
  1461.         if (!$ritorno->esito) {
  1462.             $ritorno->messaggio "Coupon non attivo!";
  1463.             return $ritorno;
  1464.         }else{
  1465.             //il coupon è attivo
  1466.             //VERIFICO SE IL COUPON NON è ANCORA STATO UTILIZZATO
  1467.             if ($dettaglioCoupon->getUtilizzato()){
  1468.                 $ritorno->esito false;
  1469.                 $ritorno->messaggio "Coupon già utilizzato!";
  1470.                 return $ritorno;
  1471.             }
  1472.             //VERIFICO SE IL COUPON HA RAGGIUNTO IL LIMITE DI UTILIZZI
  1473.             if ($dettaglioCoupon->getNumeroUtilizziConsentiti() != -&& (count($dettaglioCoupon->getUtilizzo()) > $dettaglioCoupon->getNumeroUtilizziConsentiti())){
  1474.                 $ritorno->esito false;
  1475.                 $ritorno->messaggio "E' stato raggiunto il limite di utilizzi per il coupon selezionato!";
  1476.                 return $ritorno;
  1477.             }
  1478.             //VERIFICO SE ESISTONO IMPORTi MINIMI
  1479.             if ($dettaglioCoupon->getImportoMinimoOrdine()){
  1480.                 if ($dettaglioCoupon->getImportoMinimoOrdine() > $carrello->totale){
  1481.                     $ritorno->esito false;
  1482.                     $ritorno->messaggio "Per utilizzare questo coupon il carrello deve avere un valore di almeno € " $dettaglioCoupon->getImportoMinimoOrdine();
  1483.                     return $ritorno;
  1484.                 }
  1485.             } else if ($dettaglioCoupon->getCoupon()->getImportoMinimoOrdine()){
  1486.                 if ($dettaglioCoupon->getCoupon()->getImportoMinimoOrdine() > $carrello->totale){
  1487.                     $ritorno->esito false;
  1488.                     $ritorno->messaggio "Per utilizzare questo coupon il carrello deve avere un valore di almeno € " $dettaglioCoupon->getCoupon()->getImportoMinimoOrdine();
  1489.                     return $ritorno;
  1490.                 }
  1491.             }
  1492.             //VERIFICO SE IL COUPON E' SCADUTO
  1493.             if ($dettaglioCoupon->getLimiteValidita()){
  1494.                 $dataEsame $dettaglioCoupon->getLimiteValidita();
  1495.                 $dataEsame->setTime(000);
  1496.                 $adesso = new \DateTime();
  1497.                 $adesso->setTime(000);
  1498.                 if ($adesso $dataEsame){
  1499.                     $ritorno->esito false;
  1500.                     $ritorno->messaggio "Il coupon è scaduto il " $dataEsame->format("d/m/Y");
  1501.                     return $ritorno;
  1502.                 }
  1503.             }
  1504.         }
  1505.         return $ritorno;
  1506.     }
  1507.     /**
  1508.      * @param $length
  1509.      * @return string
  1510.      * @throws \Exception
  1511.      */
  1512.     public function generaStringaCasuale($length){
  1513.         $token "";
  1514.         $codeAlphabet "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  1515.         $codeAlphabet.= "abcdefghijklmnopqrstuvwxyz";
  1516.         $codeAlphabet.= "0123456789";
  1517.         $max strlen($codeAlphabet); // edited
  1518.         for ($i=0$i $length$i++) {
  1519.             $token .= $codeAlphabet[random_int(0$max-1)];
  1520.         }
  1521.         return $token;
  1522.     }
  1523.     /**
  1524.      * @param $carrello \App\Entity\Carrello
  1525.      * @return double
  1526.      */
  1527.     function calcolaValoreScontoCoupon($carrello){
  1528.         $totaleScontoCoupon 0;
  1529.         if ($carrello->getCouponDettaglioUtilizzo()){
  1530.             /** @var CouponDettaglio $coupon */
  1531.             $coupon $carrello->getCouponDettaglioUtilizzo()->getDettaglioCoupon();
  1532.             //Non c'è il dettaglio allora prendo la testata
  1533.             if ($coupon->getCoupon()->getScontoPercentuale() != 0){
  1534.                 $imponibileScontato $carrello->getTotale();
  1535.                 $imponibileScontato $imponibileScontato - ($imponibileScontato * ($coupon->getCoupon()->getScontoPercentuale() / (float)100));
  1536.                 $totaleScontoCoupon += $carrello->getTotale() - $imponibileScontato;
  1537.             }
  1538.             if ($coupon->getCoupon()->getScontoGenerico() != 0){
  1539.                 $totaleScontoCoupon += $coupon->getCoupon()->getScontoGenerico();
  1540.             }
  1541.             if ($coupon->getScontoGenericoExtra() || $coupon->getScontoPercentualeExtra()){
  1542.               if ($coupon->getScontoPercentualeExtra() != 0){
  1543.                   $imponibileScontato $carrello->getTotale() - $totaleScontoCoupon;
  1544.                   $imponibileScontato $imponibileScontato - ($imponibileScontato * ($coupon->getScontoPercentualeExtra() / (float)100));
  1545.                   $totaleScontoCoupon += $carrello->getTotale() - $imponibileScontato;
  1546.               }
  1547.               if ($coupon->getScontoGenericoExtra() != 0){
  1548.                   $totaleScontoCoupon += $coupon->getScontoGenericoExtra();
  1549.               }
  1550.             }
  1551.         }
  1552.         return $totaleScontoCoupon;
  1553.     }
  1554.     //==================================================================================================================
  1555.     /** @return bool */
  1556.     public function controllaSeNazioneBlackList($nazione)
  1557.     {
  1558.         $imp $this->doctrine->getRepository(Nazioni::class)->findOneBy(array('siglaIso' => $nazione));
  1559.         if ($imp) {
  1560.             if ($imp->getBlacklist())
  1561.                 return true;
  1562.             else
  1563.                 return false;
  1564.         }else{
  1565.             $this->ScriviRegistroAttivita(""""false"Sigla iso nazione non trovata. Sigla: " $nazionenull);
  1566.             return false;
  1567.         }
  1568.     }
  1569.     /**
  1570.      * @param $tipoSchedulazione string
  1571.      * @param $ricorrenza string
  1572.      * @param $valoreRicorrenza string
  1573.      * @return \DateTime
  1574.      */
  1575.     public function ottieniProssimaDataEsecuzione($tipoSchedulazione$ricorrenza$valoreRicorrenza)
  1576.     {
  1577.         $ritorno null;
  1578.         /*
  1579.          * TIPO_SCHEDULAZIONE
  1580.          *      "Una volta" => 'unaVolta',
  1581.          *      "Ogni" => 'ogni'
  1582.          *
  1583.          * RICORRENZA
  1584.          *      "Ora" => 'ora',
  1585.          *      "Giorno" => 'giorni',
  1586.          *      "Mese" => 'mese'
  1587.          *
  1588.          * Una volta si intente per esempio una volta all'ora $valore di ogni giorno oppure una volta al giorno numero $valore di ogni mese
  1589.          * La ricorrenza invece è ogni $valore ora oppure ogni $valore giorno
  1590.          *
  1591.          * Se non è presente la data di ultimo avvio parte subito
  1592.          */
  1593.         $dataAttuale = new Carbon();
  1594.         $dataProssimaEsecuzione $dataAttuale;
  1595.         switch ($tipoSchedulazione) {
  1596.             case "unaVolta":
  1597.                 {
  1598.                     if ($ricorrenza == "ora") {
  1599.                         $dataProssimaEsecuzione->setTime($valoreRicorrenza$dataProssimaEsecuzione->format('i'), $dataProssimaEsecuzione->format('s'));
  1600.                         $dataProssimaEsecuzione $dataAttuale->addDay();
  1601.                     } else if ($ricorrenza == "giorni") {
  1602.                         $dataProssimaEsecuzione $dataProssimaEsecuzione->addMonth();
  1603.                         $dataProssimaEsecuzione->setDate($dataProssimaEsecuzione->format('y'), $dataProssimaEsecuzione->format('m'), $valoreRicorrenza);
  1604.                     } else if ($ricorrenza == "mese") {
  1605.                         $dataProssimaEsecuzione->addYear();
  1606.                         $dataProssimaEsecuzione->setDate($dataProssimaEsecuzione->format('y'), $valoreRicorrenza1);
  1607.                     }
  1608.                     break;
  1609.                 }
  1610.             case "ogni":
  1611.                 {
  1612.                     if ($ricorrenza == "ora") {
  1613.                         $dataProssimaEsecuzione $dataProssimaEsecuzione->addHours($valoreRicorrenza);
  1614.                         $dataProssimaEsecuzione->setTime($dataProssimaEsecuzione->format('h'), 00);
  1615.                     } else if ($ricorrenza == "giorni") {
  1616.                         $dataProssimaEsecuzione $dataProssimaEsecuzione->addDays($valoreRicorrenza);
  1617.                         $dataProssimaEsecuzione->setTime(000);
  1618.                     } else if ($ricorrenza == "mese") {
  1619.                         $dataProssimaEsecuzione $dataProssimaEsecuzione->addMonths($valoreRicorrenza);
  1620.                         $dataProssimaEsecuzione->setTime(0,0,0);
  1621.                         $dataProssimaEsecuzione->setDate($dataProssimaEsecuzione->format('y'), $dataProssimaEsecuzione->format('m'), $dataProssimaEsecuzione->format('d'));
  1622.                     }
  1623.                     break;
  1624.                 }
  1625.         }
  1626.         return $dataProssimaEsecuzione;
  1627.     }
  1628.     /**
  1629.      * @param $nomePermesso string
  1630.      * @param $utente User
  1631.      * @return boolean
  1632.      */
  1633.     public function controllaPermessoPresente($nomePermesso$utente){
  1634.         $ritorno false;
  1635.         /** @var  $permessi PermessiAccessoUtenti[] */
  1636.         $permessi $this->doctrine->getRepository(PermessiAccessoUtenti::class)->findBy(array('utente' => $utente'nomePermesso' => $nomePermesso));
  1637.         if (count($permessi) > 0){
  1638.             $ritorno true;
  1639.         }
  1640.         return $ritorno;
  1641.     }
  1642.     /**
  1643.      * @param Sconti[] $sconti
  1644.      * @param boolean $soloDaApplicareSempre  //Se attiva ritorna solo la stringa sconti con i prezzi da applicare solo se il prezzo è flaggato come netto
  1645.      */
  1646.     public static function CreaStringaScontiDaArray($sconti$soloDaApplicareSempre false){
  1647.         $ritorno "";
  1648.         foreach ($sconti as $sc){
  1649.             if($soloDaApplicareSempre)
  1650.             {
  1651.                 if($sc->applicaSempre){
  1652.                     $ritorno = ($ritorno "#" $sc->sconto);
  1653.                 }
  1654.             }else{
  1655.                 $ritorno = ($ritorno "#" $sc->sconto);
  1656.             }
  1657.         }
  1658.         return $ritorno;
  1659.     }
  1660.     /**
  1661.      * @param $secret string
  1662.      * @param $agente User|null
  1663.      * @param $anagrafica Anagrafiche|null
  1664.      * @param $utente User|null
  1665.      */
  1666.     public function RecuperaCarrello($secret$agente$anagrafica$utente){
  1667.         $altriDati $this->RitornaAltriDatiUtente();
  1668.         if ($secret && $secret != '') {
  1669.             $carrello $this->doctrine->getRepository(\App\Entity\Carrello::class)->findOneBy(array('secret' => $secret));
  1670.         } else {
  1671.             if ($agente && $anagrafica && ($agente->hasRole("ROLE_ADMIN") || $agente->hasRole('ROLE_COMMERCIALE') || $agente->hasRole("ROLE_AGENTE"))) {
  1672.                 $carrello $this->doctrine->getRepository(\App\Entity\Carrello::class)->findOneBy(array('anagrafica' => $anagrafica'agente' => $agente'tipoOrdine' => $altriDati->tipoOrdine != '' $altriDati->tipoOrdine null));
  1673.                 if ($anagrafica->getCodiceAliquotaIva() != '' && $anagrafica->getCodiceAliquotaIva()){
  1674.                     $aliquotaIva $anagrafica->getValoreAliquotaIva();
  1675.                 }
  1676.             } else if ($agente) {
  1677.                 if ($utente->getCodiceAliquotaIva() != '' && $utente->getCodiceAliquotaIva()){
  1678.                     $aliquotaIva $utente->getValoreAliquotaIva();
  1679.                 }
  1680.                 $carrello $this->doctrine->getRepository(\App\Entity\Carrello::class)->findOneBy(array('anagrafica' => null'agente' => $agente'cliente' => $utente'tipoOrdine' => $altriDati->tipoOrdine != '' $altriDati->tipoOrdine null));
  1681.             } else{
  1682.                 if ($utente->getCodiceAliquotaIva() != '' && $utente->getCodiceAliquotaIva()){
  1683.                     $aliquotaIva $utente->getValoreAliquotaIva();
  1684.                 }
  1685.                 $carrello $this->doctrine->getRepository(\App\Entity\Carrello::class)->findOneBy(array('cliente' => $utente'agente' => null'tipoOrdine' => $altriDati->tipoOrdine != '' $altriDati->tipoOrdine null));
  1686.             }
  1687.         }
  1688.         return $carrello;
  1689.     }
  1690.     /**
  1691.      * @param $mappa MappaCategoriaArticolo
  1692.      * @param $variante Variante
  1693.      * @return RitornoCalcoloPrezzoNetto
  1694.      */
  1695.     public function calcolaPrezzoNettoMappaOVariante($mappa$variante null){
  1696.         $prezzoNetto = (double)0;
  1697.         $ritorno = new RitornoCalcoloPrezzoNetto();
  1698.         $flagPrezzoNetto false;
  1699.         if ($variante){
  1700.             if ($variante->listino){
  1701.                 $prezzoNetto $variante->listino->prezzo;
  1702.                 $flagPrezzoNetto $variante->listino->flagPrezzoNetto;
  1703.                 $ritorno->prezzoLordo $prezzoNetto;
  1704.                 $ritorno->prezzoNetto $prezzoNetto;
  1705.             } else {
  1706.                 $ritorno->errori "Listino non presente!";
  1707.             }
  1708.         }else if ($mappa){
  1709.             if ($mappa->listinoVendita){
  1710.                 $prezzoNetto $mappa->listinoVendita->prezzo;
  1711.                 $flagPrezzoNetto $mappa->listinoVendita->flagPrezzoNetto;
  1712.                 $ritorno->prezzoLordo $prezzoNetto;
  1713.                 $ritorno->prezzoNetto $prezzoNetto;
  1714.             } else{
  1715.                 $ritorno->errori "Listino non presente!";
  1716.             }
  1717.         } else{
  1718.             $ritorno->errori "Mappa o variante non specificata!";
  1719.         }
  1720.         if ($ritorno->errori == "" && !$flagPrezzoNetto){
  1721.             $stringaSconti ""//-0.00#-3.00#-0.00#-0.00#-0.00#-0.00
  1722.             if (($variante != null && count($variante->sconti) > 0) || $mappa != null && count($mappa->sconti) > 0){
  1723.                 $stringaSconti ServiziController::CreaStringaScontiDaArray($variante != null $variante->sconti $mappa->sconti);
  1724.                 $ritorno->stringaSconti $stringaSconti;
  1725.                 $prezzoNetto $this->elaboraStringaSconti($stringaSconti$prezzoNetto);
  1726.                 $ritorno->prezzoNetto $prezzoNetto;
  1727.             }else if (count($mappa->scontiBase) > 0){
  1728.                 $stringaSconti $mappa->scontiBase[0]->sconto;
  1729.                 $ritorno->stringaSconti $stringaSconti;
  1730.                 $prezzoNetto $this->elaboraStringaSconti($stringaSconti$prezzoNetto);
  1731.                 $ritorno->prezzoNetto $prezzoNetto;
  1732.             }
  1733.         }
  1734.         if ($ritorno->errori == "" && $flagPrezzoNetto){{
  1735.         }
  1736.             if (($variante != null && count($variante->sconti) > 0) || $mappa != null && count($mappa->sconti) > 0){
  1737.                 $stringaSconti ServiziController::CreaStringaScontiDaArray($variante != null $variante->sconti $mappa->scontitrue);
  1738.                 $ritorno->stringaSconti $stringaSconti;
  1739.                 $prezzoNetto $this->elaboraStringaSconti($stringaSconti$prezzoNetto);
  1740.                 $ritorno->prezzoNetto $prezzoNetto;
  1741.             }
  1742.         }
  1743.         $valorizzaPrezzo0SeScontisticaNonPresente $this->impostazioni->ritornaImpostazioneDaNome('ValorizzaPrezzo0PerTuttiGliArticoliSenzaSconti');
  1744.         if($valorizzaPrezzo0SeScontisticaNonPresente == '1' && $ritorno->prezzoNetto == $ritorno->prezzoLordo){
  1745.             $ritorno->prezzoLordo 0;
  1746.             $ritorno->prezzoNetto 0;
  1747.             $ritorno->stringaSconti '';
  1748.         }
  1749.         return $ritorno;
  1750.     }
  1751.     /**
  1752.      * @param $mappa MappaCategoriaArticolo|MappaCategorieArticoli
  1753.      * @param $imp ReturnImpostazioniServiceController
  1754.      * @param $variante Variante|Varianti
  1755.      * @param $richiestaDaB2b boolean
  1756.      * @return RitornoCalcoloDisponibile
  1757.      */
  1758.     public function calcolaDisponibileMappaOVariante($mappaReturnImpostazioniServiceController $imp$variante null$richiestaDaB2b false){
  1759.         $imp->caricaCacheImpostazioniDaNomi(array('MostraDisponibilitaShop''MostraDisponibilitaMagazziniSecondari''DisponibileSommatoMagazziniSecondari''DisponibileSommatoMagazziniSecondariB2B'));
  1760.         $mostraDisponibilita $imp->ritornaImpostazioneDaNome('MostraDisponibilitaShop');
  1761.         $mostraDisponibilitaMagazziniSecondari $imp->ritornaImpostazioneDaNome('MostraDisponibilitaMagazziniSecondari');
  1762.         $sommaDisponibilita $imp->ritornaImpostazioneDaNome('DisponibileSommatoMagazziniSecondari');
  1763.         $sommaDisponibilitaB2b $imp->ritornaImpostazioneDaNome('DisponibileSommatoMagazziniSecondariB2B');
  1764.         $ritorno = new RitornoCalcoloDisponibile();
  1765.         $disponibile 0;
  1766.         if ($mostraDisponibilita) {
  1767.             if ($variante) {
  1768.                 if($variante instanceof Varianti){
  1769.                     if ($variante->getDisponibile() !== null) {
  1770.                         $disponibile $variante->getDisponibile();
  1771.                         $ritorno->disponibile $disponibile;
  1772.                         $ritorno->disponibileFinale $disponibile;
  1773.                     }
  1774.                 }else {
  1775.                     if ($variante->disponibile !== null) {
  1776.                         $disponibile $variante->disponibile;
  1777.                         $ritorno->disponibile $disponibile;
  1778.                         $ritorno->disponibileFinale $disponibile;
  1779.                     }
  1780.                 }
  1781.             } else if ($mappa) {
  1782.                 if($mappa instanceof MappaCategorieArticoli){
  1783.                     $disponibile $mappa->getDisponibile();
  1784.                     $ritorno->disponibile $disponibile;
  1785.                     $ritorno->disponibileFinale $disponibile;
  1786.                 }else {
  1787.                     $disponibile $mappa->disponibile;
  1788.                     $ritorno->disponibile $disponibile;
  1789.                     $ritorno->disponibileFinale $disponibile;
  1790.                 }
  1791.                 if ($mostraDisponibilitaMagazziniSecondari) {
  1792.                     if($mappa instanceof MappaCategorieArticoli){
  1793.                         /** @var MagazzinoSecondarioDisponibilita[] $magazziniSecondari */
  1794.                         $magazziniSecondari $this->doctrine->getRepository(MagazzinoSecondarioDisponibilita::class)->findBy(array('mappaCategorieArticoli' => $mappa));
  1795.                         foreach ($magazziniSecondari as $itm){
  1796.                             if($itm->getDisponibilita() && $itm->getDisponibilita() > 0){
  1797.                                 $ritorno->magazziniSecondari += $itm->getDisponibilita();
  1798.                             }
  1799.                         }
  1800.                     }else {
  1801.                         if ($mappa->magazziniSecondari && count($mappa->magazziniSecondari) > 0) {
  1802.                             foreach ($mappa->magazziniSecondari as $itm) {
  1803.                                 if ($itm->disponibilita && count($itm->disponibilita) > 0) {
  1804.                                     foreach ($itm->disponibilita as $dsp) {
  1805.                                         $ritorno->magazziniSecondari += $dsp->disponibilita;
  1806.                                     }
  1807.                                 }
  1808.                             }
  1809.                         }
  1810.                     }
  1811.                     if($sommaDisponibilitaB2b && $richiestaDaB2b){
  1812.                         $ritorno->disponibileFinale $ritorno->disponibile $ritorno->magazziniSecondari;
  1813.                     }else if ($sommaDisponibilita && !$richiestaDaB2b) {
  1814.                         $ritorno->disponibileFinale $ritorno->disponibile $ritorno->magazziniSecondari;
  1815.                     }
  1816.                 }
  1817.             }
  1818.         }
  1819.         return $ritorno;
  1820.     }
  1821.     /**
  1822.      * @param $albero AlberoMenuProdotti
  1823.      * @return ContenitoreCategoriePerFiltri
  1824.      */
  1825.     public function ricavaCategorieDaAlbero($albero){
  1826.         $alberoEntity $this->doctrine->getRepository(AlberoMenuProdotti::class)->find($albero);
  1827.         /** @var Categorie[]|CategorieAlbero[] $categorie */
  1828.         $categorie $this->risaliAlberoCategorie($alberoEntity);
  1829.         $categorie array_reverse($categorie);
  1830.         $contenitoreCategorie = new ContenitoreCategoriePerFiltri();
  1831.         if (array_key_exists(0$categorie)){
  1832.             $contenitoreCategorie->idCat1 $categorie[0]->getId();
  1833.             $contenitoreCategorie->nomeUnivocoCat1 $categorie[0]->getNomeUnivoco();
  1834.         }
  1835.         if (array_key_exists(1$categorie)){
  1836.             $contenitoreCategorie->idCat2 $categorie[1]->getId();
  1837.             $contenitoreCategorie->nomeUnivocoCat2 $categorie[1]->getNomeUnivoco();
  1838.         }
  1839.         if (array_key_exists(2$categorie)){
  1840.             $contenitoreCategorie->idCat3 $categorie[2]->getId();
  1841.             $contenitoreCategorie->nomeUnivocoCat3 $categorie[2]->getNomeUnivoco();
  1842.         }
  1843.         if (array_key_exists(3$categorie)){
  1844.             $contenitoreCategorie->idCat4 $categorie[3]->getId();
  1845.             $contenitoreCategorie->nomeUnivocoCat4 $categorie[3]->getNomeUnivoco();
  1846.         }
  1847.         if (array_key_exists(4$categorie)){
  1848.             $contenitoreCategorie->idCat5 $categorie[4]->getId();
  1849.             $contenitoreCategorie->nomeUnivocoCat5 $categorie[4]->getNomeUnivoco();
  1850.         }
  1851.         return $contenitoreCategorie;
  1852.     }
  1853.     /**
  1854.      * @param $albero AlberoMenuProdotti
  1855.      * @param array $categorieTrovate
  1856.      * @return array
  1857.      */
  1858.     function risaliAlberoCategorie($albero$categorieTrovate = array())
  1859.     {
  1860.         $usaCategorieAlbero $this->impostazioni->ritornaImpostazioneDaNome('UtilizzaCategorieAlberoPerGenerazione');
  1861.         if($usaCategorieAlbero == '1'){
  1862.             array_push($categorieTrovate$albero->getCategoriaAlbero());
  1863.         }else {
  1864.             array_push($categorieTrovate$albero->getCategoria());
  1865.         }
  1866.         if ($albero->getParentId()){
  1867.             $categorieTrovate $this->risaliAlberoCategorie($albero->getParentId(), $categorieTrovate);
  1868.         }
  1869.         return $categorieTrovate;
  1870.     }
  1871.     /**
  1872.      * @param string $codiceCliente
  1873.      * @param User $agente
  1874.      * @return Anagrafiche|null
  1875.      */
  1876.     public function ritornaAnagraficaShopSelezionataDaCookieIdentificativo($codiceCliente$agente){
  1877.         $ritorno null;
  1878.         if (!$agente->hasRole("ROLE_ADMIN") && !$agente->hasRole("ROLE_COMMERCIALE") ) {
  1879.             $listaCodiciAgente self::ritornaArrayCodiciAssociatiAgenteFornitoreUtente($this->OttieniUtenteCorrente());
  1880.         }
  1881.         /** @var Anagrafiche[] $clSel */
  1882.         $clSel $this->doctrine->getRepository(Anagrafiche::class)->createQueryBuilder('anagrafiche')
  1883.             ->where('anagrafiche.codice = :cod')->setParameter('cod'$codiceCliente);
  1884.         if (!$agente->hasRole("ROLE_ADMIN") && !$agente->hasRole("ROLE_COMMERCIALE") ) {
  1885.             $clSel $clSel->andWhere('anagrafiche.codiceAgente IN (:list)')->setParameter('list'$listaCodiciAgente);
  1886.         }
  1887.             $clSel $clSel->setMaxResults(1)->getQuery()->getResult();
  1888.         if (count($clSel) > 0)
  1889.         {
  1890.             $ritorno $clSel[0];
  1891.         }
  1892.         return $ritorno;
  1893.     }
  1894.     /**
  1895.      *  @param $importo double
  1896.      *  @param $valoreAliquota double
  1897.      *  @return double
  1898.      */
  1899.     public function calcolaImpostaSuImporto($importo$valoreAliquota){
  1900.         $imposta 0;
  1901.         $imposta = ($importo * ((double)$valoreAliquota / (double)100)) - $importo;
  1902.         return $imposta;
  1903.     }
  1904.     /**
  1905.      * @param $stringSconti
  1906.      * @return string
  1907.      */
  1908.     public function pulisciStringaScontiEMantieniSoloQuelliValidi($stringSconti){
  1909.         $nuovaStringaRitorno "";
  1910.         $arr = array();
  1911.         if(strpos($stringSconti'#') !== false){
  1912.             $arr explode('#'$stringSconti);
  1913.         }else{
  1914.             array_push($arr$stringSconti);
  1915.         }
  1916.         foreach ($arr as $item){
  1917.             if($item != '' && floatval($item) != 0){
  1918.                 $nuovaStringaRitorno .= ("#" $item);
  1919.             }
  1920.         }
  1921.         return $nuovaStringaRitorno;
  1922.     }
  1923.     /**
  1924.      * @param $stringSconti string
  1925.      * @param $prezzoLordo double
  1926.      * @return double
  1927.      */
  1928.     public function elaboraStringaSconti($stringSconti$prezzoLordo){
  1929.         $prezzoNetto = (double)$prezzoLordo;
  1930.         //StringaSconti ===>   -0.00#-3.00#-0.00#-0.00#-0.00#-0.00
  1931.         $arr = array();
  1932.         if(strpos($stringSconti'#') !== false){
  1933.             $arr explode('#'$stringSconti);
  1934.         }else{
  1935.             array_push($arr$stringSconti);
  1936.         }
  1937.         foreach ($arr as $item){
  1938.             if($item != '') {
  1939.                 //$this->logger->info("Stringa sconto: " . $item);
  1940.                 $segno substr($item01);
  1941.                 $valore substr($item1strlen($item) - 1);
  1942.                 if ($segno == '-') {
  1943.                     $prezzoNetto $prezzoNetto - ($prezzoNetto * ($valore / (float)100));
  1944.                 } else {
  1945.                     $prezzoNetto $prezzoNetto + ($prezzoNetto * ($valore / (float)100));
  1946.                 }
  1947.             }
  1948.         }
  1949.         return $prezzoNetto;
  1950.     }
  1951.     /**
  1952.      * @param $stringaSconti string
  1953.      * @return string
  1954.      */
  1955.     public function ritornaStringaScontiPerVisualizzazione($stringaSconti){
  1956.         $ritorno "";
  1957.         try {
  1958.             if ($stringaSconti != null && $stringaSconti != '') {
  1959.                 if(!str_contains($stringaSconti'#')){
  1960.                     $ritorno $stringaSconti;
  1961.                 }else {
  1962.                     $arr = array();
  1963.                     if (strpos($stringaSconti'#') !== false) {
  1964.                         $arr explode('#'$stringaSconti);
  1965.                     } else {
  1966.                         array_push($arr$stringaSconti);
  1967.                     }
  1968.                     foreach ($arr as $item) {
  1969.                         if ($item != '') {
  1970.                             $segno substr($item01);
  1971.                             $valore substr($item1strlen($item) - 1);
  1972.                             if ((float)$valore != && $valore != '') {
  1973.                                 $ritorno .= ($segno number_format((float)$valore2',''.') . "% ");
  1974.                             }
  1975.                         }
  1976.                     }
  1977.                 }
  1978.             }
  1979.         }catch (\Exception $e){
  1980.             $ritorno $stringaSconti;
  1981.         }
  1982.         return $ritorno;
  1983.     }
  1984.     /**
  1985.      * @param $variabile Variante
  1986.      * @return string
  1987.      */
  1988.     public function ottieniImmagineDaVariabileEsclusoLivello5($variabile): string
  1989.     {
  1990.         $ritorno '';
  1991.         if ($variabile->immagineDimensione4 != ''){
  1992.             $ritorno $variabile->immagineDimensione4;
  1993.             return $ritorno;
  1994.         } elseif ($variabile->immagineDimensione3 != ''){
  1995.             $ritorno $variabile->immagineDimensione3;
  1996.             return $ritorno;
  1997.         } elseif ($variabile->immagineDimensione2 != ''){
  1998.             $ritorno $variabile->immagineDimensione2;
  1999.             return $ritorno;
  2000.         } elseif ($variabile->immagineDimensione1 != ''){
  2001.             $ritorno $variabile->immagineDimensione1;
  2002.             return $ritorno;
  2003.         } elseif ($variabile->mappa){
  2004.             $mappa $variabile->mappa;
  2005.             if ($mappa->articolo){
  2006.                 $ritorno $mappa->articolo->image;
  2007.                 return $ritorno;
  2008.             } else {
  2009.                 if ($mappa->categoria5){
  2010.                     $ritorno $mappa->categoria5->immagine;
  2011.                 } elseif ($mappa->categoria4){
  2012.                     $ritorno $mappa->categoria4->immagine;
  2013.                 } elseif ($mappa->categoria3){
  2014.                     $ritorno $mappa->categoria3->immagine;
  2015.                 } elseif ($mappa->categoria2){
  2016.                     $ritorno $mappa->categoria2->immagine;
  2017.                 } elseif ($mappa->categoria1){
  2018.                     $ritorno $mappa->categoria1->immagine;
  2019.                 }
  2020.                 return $ritorno;
  2021.             }
  2022.         }
  2023.         return $ritorno;
  2024.     }
  2025.     /**
  2026.      * @param $mappa MappaCategoriaArticolo
  2027.      * @return string
  2028.      */
  2029.     public function ottieniImmagineDaMappaCategoriaArticolo($mappa$absolutePath false){
  2030.         $ritorno "";
  2031.         if ($mappa->articolo->image != ''){
  2032.             $ritorno $mappa->articolo->image;
  2033.         }
  2034.         else{
  2035.             if ($mappa->categoria5 && $mappa->categoria5->immagine != ''){
  2036.                 $ritorno $mappa->categoria5->immagine;
  2037.             } elseif ($mappa->categoria4 && $mappa->categoria4->immagine != ''){
  2038.                 $ritorno $mappa->categoria4->immagine;
  2039.             } elseif ($mappa->categoria3 && $mappa->categoria3->immagine != ''){
  2040.                 $ritorno $mappa->categoria3->immagine;
  2041.             } elseif ($mappa->categoria2 && $mappa->categoria2->immagine != ''){
  2042.                 $ritorno $mappa->categoria2->immagine;
  2043.             } elseif ($mappa->categoria1 && $mappa->categoria1->immagine != ''){
  2044.                 $ritorno $mappa->categoria1->immagine;
  2045.             }
  2046.         }
  2047.         if ($absolutePath){
  2048.             $ritorno $this->requestStack->getCurrentRequest()->getSchemeAndHttpHost() . $ritorno;
  2049.         }
  2050.         return $ritorno;
  2051.     }
  2052.     public function OttieniImmagineRigaOrdineRigaCarrello(OrdineRiga|RigaCarrello $riga){
  2053.         $pathRitorno '';
  2054.         if($riga->variante){
  2055.             $varianteAgg null;
  2056.             if($riga->variante != null && $riga->variante->codiceVariante != $riga->codiceVariante){
  2057.                 $varianteAgg $this->doctrine->getRepository(Varianti::class)->findOneBy(['codiceVariante' => $riga->codiceVariante]);
  2058.             }
  2059.             if ($riga->variante->immagineDimensione3 != '' || ($varianteAgg != null && $varianteAgg->getImmagineDimensione3() != '')) {
  2060.                 $pathRitorno $varianteAgg $varianteAgg->getImmagineDimensione3() : $riga->variante->immagineDimensione3;
  2061.             } elseif ($riga->variante->immagineDimensione2 != ''|| ($varianteAgg != null && $varianteAgg->getImmagineDimensione2() != '')) {
  2062.                 $pathRitorno $varianteAgg $varianteAgg->getImmagineDimensione2() : $riga->variante->immagineDimensione2;
  2063.             } elseif ($riga->variante->immagineDimensione1 != ''|| ($varianteAgg != null && $varianteAgg->getImmagineDimensione1() != '')) {
  2064.                 $pathRitorno $varianteAgg $varianteAgg->getImmagineDimensione1() : $riga->variante->immagineDimensione1;
  2065.             }
  2066.             if($pathRitorno != '')
  2067.                 return $pathRitorno;
  2068.         }
  2069.         if($pathRitorno == ''){
  2070.             $artAgg null;
  2071.             if($riga->articolo != null &&  $riga->articolo->codice != $riga->codiceArticolo) {
  2072.                 $artAgg $this->doctrine->getRepository(Articoli::class)->findOneBy(['codice' => $riga->codiceArticolo]);
  2073.                 if($artAgg && $artAgg->getImage() != '')
  2074.                     $pathRitorno $artAgg->getImage();
  2075.             }else{
  2076.                 if($riga->articolo != null && $riga->articolo->image != '')
  2077.                     $pathRitorno $riga->articolo->image;
  2078.             }
  2079.             if($pathRitorno != '')
  2080.                 return $pathRitorno;
  2081.         }
  2082.         //Se ancora non ho l'immagine verifico le varie categorie
  2083.         if($pathRitorno == ''){
  2084.             //CATEGORIA 5
  2085.             if($riga->codiceCat5 != ''){
  2086.                 if($riga->mappaCategoriaArticolo && $riga->mappaCategoriaArticolo->categoria5 && $riga->mappaCategoriaArticolo->categoria5->codice != $riga->codiceCat5){
  2087.                     $cat5 $this->doctrine->getRepository(Categorie::class)->findOneBy(['codice' => $riga->codiceCat5]);
  2088.                     if($cat5){
  2089.                         $pathRitorno $cat5->getImmagine();
  2090.                     }
  2091.                 }else{
  2092.                     $pathRitorno $riga->mappaCategoriaArticolo->categoria5->immagine;
  2093.                 }
  2094.                 if($pathRitorno != '')
  2095.                     return $pathRitorno;
  2096.             }
  2097.             //CATEGORIA 4
  2098.             if($riga->codiceCat5 != ''){
  2099.                 if($riga->mappaCategoriaArticolo && $riga->mappaCategoriaArticolo->categoria4 && $riga->mappaCategoriaArticolo->categoria4->codice != $riga->codiceCat4){
  2100.                     $cat4 $this->doctrine->getRepository(Categorie::class)->findOneBy(['codice' => $riga->codiceCat4]);
  2101.                     if($cat4){
  2102.                         $pathRitorno $cat4->getImmagine();
  2103.                     }
  2104.                 }else{
  2105.                     $pathRitorno $riga->mappaCategoriaArticolo->categoria4->immagine;
  2106.                 }
  2107.                 if($pathRitorno != '')
  2108.                     return $pathRitorno;
  2109.             }
  2110.             //CATEGORIA 3
  2111.             if($riga->codiceCat5 != ''){
  2112.                 if($riga->mappaCategoriaArticolo && $riga->mappaCategoriaArticolo->categoria3 && $riga->mappaCategoriaArticolo->categoria3->codice != $riga->codiceCat3){
  2113.                     $cat3 $this->doctrine->getRepository(Categorie::class)->findOneBy(['codice' => $riga->codiceCat3]);
  2114.                     if($cat3){
  2115.                         $pathRitorno $cat3->getImmagine();
  2116.                     }
  2117.                 }else{
  2118.                     $pathRitorno $riga->mappaCategoriaArticolo->categoria3->immagine;
  2119.                 }
  2120.                 if($pathRitorno != '')
  2121.                     return $pathRitorno;
  2122.             }
  2123.             //CATEGORIA 2
  2124.             if($riga->codiceCat5 != ''){
  2125.                 if($riga->mappaCategoriaArticolo && $riga->mappaCategoriaArticolo->categoria2 && $riga->mappaCategoriaArticolo->categoria2->codice != $riga->codiceCat2){
  2126.                     $cat2 $this->doctrine->getRepository(Categorie::class)->findOneBy(['codice' => $riga->codiceCat2]);
  2127.                     if($cat2){
  2128.                         $pathRitorno $cat2->getImmagine();
  2129.                     }
  2130.                 }else{
  2131.                     $pathRitorno $riga->mappaCategoriaArticolo->categoria2->immagine;
  2132.                 }
  2133.                 if($pathRitorno != '')
  2134.                     return $pathRitorno;
  2135.             }
  2136.             //CATEGORIA 1
  2137.             if($riga->codiceCat5 != ''){
  2138.                 if($riga->mappaCategoriaArticolo && $riga->mappaCategoriaArticolo->categoria1 && $riga->mappaCategoriaArticolo->categoria1->codice != $riga->codiceCat1){
  2139.                     $cat1 $this->doctrine->getRepository(Categorie::class)->findOneBy(['codice' => $riga->codiceCat1]);
  2140.                     if($cat1){
  2141.                         $pathRitorno $cat1->getImmagine();
  2142.                     }
  2143.                 }else{
  2144.                     $pathRitorno $riga->mappaCategoriaArticolo->categoria1->immagine;
  2145.                 }
  2146.                 if($pathRitorno != '')
  2147.                     return $pathRitorno;
  2148.             }
  2149.         }
  2150.         return $pathRitorno;
  2151.     }
  2152.     public function OttieniImmagineRigaOfferta(OffertaRiga $riga){
  2153.         $pathRitorno '';
  2154.         if($riga->collegamentoVariante){
  2155.             $varianteAgg null;
  2156.             if($riga->collegamentoVariante != null && $riga->collegamentoVariante->codiceVariante != $riga->codiceVariante){
  2157.                 $varianteAgg $this->doctrine->getRepository(Varianti::class)->findOneBy(['codiceVariante' => $riga->codiceVariante]);
  2158.             }
  2159.             if($riga->collegamentoVariante->immagineDimensione3 != '' || ($varianteAgg != null && $varianteAgg->getImmagineDimensione3() != ''))
  2160.                 $pathRitorno $varianteAgg $varianteAgg->getImmagineDimensione3() : $riga->collegamentoVariante->immagineDimensione3;
  2161.             if($riga->collegamentoVariante->immagineDimensione2 != ''|| ($varianteAgg != null && $varianteAgg->getImmagineDimensione2() != ''))
  2162.                 $pathRitorno $varianteAgg $varianteAgg->getImmagineDimensione2() : $riga->collegamentoVariante->immagineDimensione2;
  2163.             if($riga->collegamentoVariante->immagineDimensione1 != ''|| ($varianteAgg != null && $varianteAgg->getImmagineDimensione1() != ''))
  2164.                 $pathRitorno $varianteAgg $varianteAgg->getImmagineDimensione1() : $riga->collegamentoVariante->immagineDimensione1;
  2165.             if($pathRitorno != '')
  2166.                 return $pathRitorno;
  2167.         }
  2168.         if($pathRitorno == ''){
  2169.             $artAgg null;
  2170.             if($riga->collegamentoMappaCategoriaArticolo != null && $riga->collegamentoMappaCategoriaArticolo->articolo != null &&  $riga->collegamentoMappaCategoriaArticolo->articolo->codice != $riga->codiceArticolo) {
  2171.                 $artAgg $this->doctrine->getRepository(Articoli::class)->findOneBy(['codice' => $riga->codiceArticolo]);
  2172.                 if($artAgg && $artAgg->getImage() != '')
  2173.                     $pathRitorno $artAgg->getImage();
  2174.             }else{
  2175.                 if($riga->collegamentoMappaCategoriaArticolo != null && $riga->collegamentoMappaCategoriaArticolo->articolo != null && $riga->collegamentoMappaCategoriaArticolo->articolo->image != '')
  2176.                     $pathRitorno $riga->collegamentoMappaCategoriaArticolo->articolo->image;
  2177.             }
  2178.             if($pathRitorno != '')
  2179.                 return $pathRitorno;
  2180.         }
  2181.         //Se ancora non ho l'immagine verifico le varie categorie
  2182.         if($pathRitorno == ''){
  2183.             //CATEGORIA 5
  2184.             if($riga->codiceCat5 != ''){
  2185.                 if($riga->collegamentoMappaCategoriaArticolo && $riga->collegamentoMappaCategoriaArticolo->categoria5 && $riga->collegamentoMappaCategoriaArticolo->categoria5->codice != $riga->codiceCat5){
  2186.                     $cat5 $this->doctrine->getRepository(Categorie::class)->findOneBy(['codice' => $riga->codiceCat5]);
  2187.                     if($cat5){
  2188.                         $pathRitorno $cat5->getImmagine();
  2189.                     }
  2190.                 }else{
  2191.                     $pathRitorno $riga->collegamentoMappaCategoriaArticolo->categoria5->immagine;
  2192.                 }
  2193.                 if($pathRitorno != '')
  2194.                     return $pathRitorno;
  2195.             }
  2196.             //CATEGORIA 4
  2197.             if($riga->codiceCat5 != ''){
  2198.                 if($riga->collegamentoMappaCategoriaArticolo && $riga->collegamentoMappaCategoriaArticolo->categoria4 && $riga->collegamentoMappaCategoriaArticolo->categoria4->codice != $riga->codiceCat4){
  2199.                     $cat4 $this->doctrine->getRepository(Categorie::class)->findOneBy(['codice' => $riga->codiceCat4]);
  2200.                     if($cat4){
  2201.                         $pathRitorno $cat4->getImmagine();
  2202.                     }
  2203.                 }else{
  2204.                     $pathRitorno $riga->collegamentoMappaCategoriaArticolo->categoria4->immagine;
  2205.                 }
  2206.                 if($pathRitorno != '')
  2207.                     return $pathRitorno;
  2208.             }
  2209.             //CATEGORIA 3
  2210.             if($riga->codiceCat5 != ''){
  2211.                 if($riga->collegamentoMappaCategoriaArticolo && $riga->collegamentoMappaCategoriaArticolo->categoria3 && $riga->collegamentoMappaCategoriaArticolo->categoria3->codice != $riga->codiceCat3){
  2212.                     $cat3 $this->doctrine->getRepository(Categorie::class)->findOneBy(['codice' => $riga->codiceCat3]);
  2213.                     if($cat3){
  2214.                         $pathRitorno $cat3->getImmagine();
  2215.                     }
  2216.                 }else{
  2217.                     $pathRitorno $riga->collegamentoMappaCategoriaArticolo->categoria3->immagine;
  2218.                 }
  2219.                 if($pathRitorno != '')
  2220.                     return $pathRitorno;
  2221.             }
  2222.             //CATEGORIA 2
  2223.             if($riga->codiceCat5 != ''){
  2224.                 if($riga->collegamentoMappaCategoriaArticolo && $riga->collegamentoMappaCategoriaArticolo->categoria2 && $riga->collegamentoMappaCategoriaArticolo->categoria2->codice != $riga->codiceCat2){
  2225.                     $cat2 $this->doctrine->getRepository(Categorie::class)->findOneBy(['codice' => $riga->codiceCat2]);
  2226.                     if($cat2){
  2227.                         $pathRitorno $cat2->getImmagine();
  2228.                     }
  2229.                 }else{
  2230.                     $pathRitorno $riga->collegamentoMappaCategoriaArticolo->categoria2->immagine;
  2231.                 }
  2232.                 if($pathRitorno != '')
  2233.                     return $pathRitorno;
  2234.             }
  2235.             //CATEGORIA 1
  2236.             if($riga->codiceCat5 != ''){
  2237.                 if($riga->collegamentoMappaCategoriaArticolo && $riga->collegamentoMappaCategoriaArticolo->categoria1 && $riga->collegamentoMappaCategoriaArticolo->categoria1->codice != $riga->codiceCat1){
  2238.                     $cat1 $this->doctrine->getRepository(Categorie::class)->findOneBy(['codice' => $riga->codiceCat1]);
  2239.                     if($cat1){
  2240.                         $pathRitorno $cat1->getImmagine();
  2241.                     }
  2242.                 }else{
  2243.                     $pathRitorno $riga->collegamentoMappaCategoriaArticolo->categoria1->immagine;
  2244.                 }
  2245.                 if($pathRitorno != '')
  2246.                     return $pathRitorno;
  2247.             }
  2248.         }
  2249.         return $pathRitorno;
  2250.     }
  2251.     /**
  2252.      * @param $alberoProdotti AlberoMenuProdotti|AlberoCategorie
  2253.      * @return string
  2254.      */
  2255.     public function saliAlberoPerImmagine($alberoProdotti){
  2256.         $usaCategorieAlbero $this->impostazioni->ritornaImpostazioneDaNome('UtilizzaCategorieAlberoPerGenerazione');
  2257.         if ($alberoProdotti instanceof AlberoMenuProdotti) {
  2258.             /** @var $alberoProdotti AlberoMenuProdotti */
  2259.             if($usaCategorieAlbero){
  2260.                 if ($alberoProdotti->getCategoriaAlbero()->getImmagine() != '') {
  2261.                     return $alberoProdotti->getCategoriaAlbero()->getImmagine();
  2262.                 } else {
  2263.                     if ($alberoProdotti->getParentId()) {
  2264.                         return $this->saliAlberoPerImmagine($alberoProdotti->getParentId());
  2265.                     } else {
  2266.                         return '';
  2267.                     }
  2268.                 }
  2269.             }else {
  2270.                 if ($alberoProdotti->getCategoria()->getImmagine() != '') {
  2271.                     return $alberoProdotti->getCategoria()->getImmagine();
  2272.                 } else {
  2273.                     if ($alberoProdotti->getParentId()) {
  2274.                         return $this->saliAlberoPerImmagine($alberoProdotti->getParentId());
  2275.                     } else {
  2276.                         return '';
  2277.                     }
  2278.                 }
  2279.             }
  2280.         } elseif ($alberoProdotti instanceof AlberoCategorie){
  2281.             /** @var $alberoProdotti AlberoCategorie */
  2282.             if ($usaCategorieAlbero){
  2283.                 if ($alberoProdotti->categoriaAlbero->immagine != '') {
  2284.                     return $alberoProdotti->categoriaAlbero->immagine;
  2285.                 } else {
  2286.                     if ($alberoProdotti->parent) {
  2287.                         return $this->saliAlberoPerImmagine($alberoProdotti->parent);
  2288.                     } else {
  2289.                         return '';
  2290.                     }
  2291.                 }
  2292.             }else {
  2293.                 if ($alberoProdotti->categoria->immagine != '') {
  2294.                     return $alberoProdotti->categoria->immagine;
  2295.                 } else {
  2296.                     if ($alberoProdotti->parent) {
  2297.                         return $this->saliAlberoPerImmagine($alberoProdotti->parent);
  2298.                     } else {
  2299.                         return '';
  2300.                     }
  2301.                 }
  2302.             }
  2303.         } else {
  2304.             return '';
  2305.         }
  2306.     }
  2307.     /*
  2308.     * ============================================================================================================================
  2309.     * ====================================================  TRANSLATING  =========================================================
  2310.     * ============================================================================================================================
  2311.     */
  2312.     /**
  2313.      * @param $famiglia
  2314.      * @param $locale
  2315.      * @param bool $famigliaIniziaPer
  2316.      */
  2317.     public function caricaArrayTraduzioni($famiglia$locale$famigliaIniziaPer true){
  2318.         $this->translating->CaricaTraduzioniDaFamiglia($famiglia$locale$famigliaIniziaPer);
  2319.     }
  2320.     /**
  2321.      * @param $identificativo
  2322.      * @param $famiglia
  2323.      * @return RitornoTradotto|null
  2324.      */
  2325.     public function ottieniVoceDizionario($identificativo$famiglia){
  2326.         return $this->translating->OttieniElementoDizionario($identificativo$famiglia);
  2327.     }
  2328.     /**
  2329.      * @return array
  2330.      */
  2331.     public function ritornaIdentificativiDizionario()
  2332.     {
  2333.         $sql "SELECT DISTINCT(dizionario.identificativo_campo) FROM dizionario ORDER BY dizionario.identificativo_campo";
  2334.         $conn $this->servizi->doctrine->getConnection();
  2335.         $stmt $conn->prepare($sql);
  2336.         $stmt->execute();
  2337.         $risultati $stmt->fetchArray();
  2338.         return $risultati;
  2339.     }
  2340.     /**
  2341.      * @return Lingue[]
  2342.      */
  2343.     public function RitornaLingue(){
  2344.         /** @var  $lingue Lingue[] */
  2345.         $lingue $this->doctrine->getRepository(Lingue::class)->findAll();
  2346.         return $lingue;
  2347.     }
  2348.     /**
  2349.      * @param $locale string
  2350.      * @return Lingue|null
  2351.      */
  2352.     public function RitornaLinguaDaLocale($locale){
  2353.         $lingua $this->doctrine->getRepository(Lingue::class)->findOneBy(array('locale' => $locale));
  2354.         return $lingua;
  2355.     }
  2356.     /*
  2357.      * ============================================================================================================================
  2358.      * ==================================================  DATI DATABASE  =========================================================
  2359.      * ============================================================================================================================
  2360.      */
  2361.     public function RitornaArrayElementiDatabase($categoriaPagina){
  2362.         $dizionarioDb = new DizionarioDatabase($this->doctrine);
  2363.         /** @var  $listaCollegamentiDbPossibili */
  2364.         $listaCollegamentiDbPossibili $dizionarioDb->ritornaArrayColonneDaTipo($categoriaPaginatrue);
  2365.         return $listaCollegamentiDbPossibili;
  2366.     }
  2367.     /*
  2368.      * ============================================================================================================================
  2369.      * ============================================  REGISTRAZIONE UTENTE  ========================================================
  2370.      * ============================================================================================================================
  2371.      */
  2372.     /**
  2373.      * @param FormBuilderInterface $formBuilder
  2374.      * @param string $locale
  2375.      * @return FormBuilderInterface
  2376.      */
  2377.     public function RitornaFormCompletoRegistrazioneUtente(FormBuilderInterface $formBuilder$locale 'it'){
  2378.         $traduci $this->translating;
  2379.         $traduci->CaricaTraduzioniDaFamiglia("carrello"$localefalse);
  2380.         $traduci->CaricaTraduzioniDaFamiglia('dati_utente'$localefalse);
  2381.         $formBuilder->add(Costanti::RU_AZIENDA_O_PRIVATOChoiceType::class, array('label' => $traduci->OttieniElementoDizionario('dati_utente_privato_o_azienda''dati_utente')->valoreUscita'expanded' => true'multiple' => false'choices' => array($traduci->OttieniElementoDizionario('dati_utente_azienda''dati_utente')->valoreUscita => 'azienda'$traduci->OttieniElementoDizionario('dati_utente_privato''dati_utente')->valoreUscita => 'privato'), 'attr' => array()))
  2382.             ->add(Costanti::RU_RAGIONE_SOCIALETextType::class, array('required' => false'label' => $traduci->OttieniElementoDizionario('dati_utente_ragione_sociale''dati_utente')->valoreUscita'attr' => array('class' => "form-control input-sm"'style' => 'padding-left:5px;padding-right:5px;')))
  2383.             ->add(Costanti::RU_NOMETextType::class, array('required' => false'label' => $traduci->OttieniElementoDizionario('dati_utente_nome''dati_utente')->valoreUscita'attr' => array('class' => "form-control input-sm"'style' => 'padding-left:5px;padding-right:5px;')))
  2384.             ->add(Costanti::RU_COGNOMETextType::class, array('required' => false'label' => $traduci->OttieniElementoDizionario('dati_utente_cognome''dati_utente')->valoreUscita'attr' => array('class' => "form-control input-sm"'style' => 'padding-left:5px;padding-right:5px;')))
  2385.             ->add(Costanti::RU_CODICE_FISCALETextType::class, array('required' => false'label' => $traduci->OttieniElementoDizionario('dati_utente_codice_fiscale''dati_utente')->valoreUscita'attr' => array('class' => "form-control input-sm"'style' => 'padding-left:5px;padding-right:5px;')))
  2386.             ->add(Costanti::RU_PARTITA_IVATextType::class, array('required' => false'label' => $traduci->OttieniElementoDizionario('dati_utente_partita_iva''dati_utente')->valoreUscita'attr' => array('class' => "form-control input-sm"'style' => 'padding-left:5px;padding-right:5px;')))
  2387.             ->add(Costanti::RU_INDIRIZZOTextType::class, array('required' => false'label' => $traduci->OttieniElementoDizionario('dati_utente_indirizzo''dati_utente')->valoreUscita'attr' => array('class' => "form-control input-sm"'style' => 'padding-left:5px;padding-right:5px;')))
  2388.             ->add(Costanti::RU_CITTATextType::class, array('required' => false'label' => $traduci->OttieniElementoDizionario('dati_utente_citta''dati_utente')->valoreUscita'attr' => array('class' => "form-control input-sm"'style' => 'padding-left:5px;padding-right:5px;')))
  2389.             ->add(Costanti::RU_PROVINCIATextType::class, array('required' => false'label' => $traduci->OttieniElementoDizionario('dati_utente_provincia''dati_utente')->valoreUscita'attr' => array('class' => "form-control input-sm"'style' => 'padding-left:5px;padding-right:5px;')))
  2390.             ->add(Costanti::RU_CAPTextType::class, array('required' => false'label' => $traduci->OttieniElementoDizionario('dati_utente_cap''dati_utente')->valoreUscita'attr' => array('class' => "form-control input-sm"'style' => 'padding-left:5px;padding-right:5px;')))
  2391.             ->add(Costanti::RU_STATO,  EntityType::class, array('required' => true'class' => Nazioni::class, 'choice_label' => function ($nazione) {
  2392.                 /** @var $nazione Nazioni */
  2393.                 return $nazione->getDescrizione();
  2394.             }, 'label' => $traduci->OttieniElementoDizionario('dati_utente_nazione''dati_utente')->valoreUscita'attr' => array('class' => "form-control input-sm"'style' => 'padding-left:5px;padding-right:5px;')))
  2395.             ->add(Costanti::RU_TELEFONOTextType::class, array('required' => false'label' => $traduci->OttieniElementoDizionario('dati_utente_cellulare''dati_utente')->valoreUscita'attr' => array('class' => "form-control input-sm"'style' => 'padding-left:5px;padding-right:5px;')))
  2396.             ->add(Costanti::RU_FAXTextType::class, array('required' => false'label' => $traduci->OttieniElementoDizionario('dati_utente_fax''dati_utente')->valoreUscita'attr' => array('class' => "form-control input-sm"'style' => 'padding-left:5px;padding-right:5px;')))
  2397.             ->add(Costanti::RU_INDIRIZZO_MAILEmailType::class, array('required' => true'label' => $traduci->OttieniElementoDizionario('dati_utente_email''dati_utente')->valoreUscita'attr' => array('class' => "form-control input-sm"'style' => 'padding-left:5px;padding-right:5px;')))
  2398.             ->add(Costanti::RU_INDIRIZZO_PECEmailType::class, array('required' => false'label' => $traduci->OttieniElementoDizionario('dati_utente_indirizzo_pec''dati_utente')->valoreUscita'attr' => array('class' => "form-control input-sm"'style' => 'padding-left:5px;padding-right:5px;')))
  2399.             ->add(Costanti::RU_CODICE_DESTINATARIO_FATTURAZIONE_ELETTRONICATextType::class, array('required' => false'label' => $traduci->OttieniElementoDizionario('dati_utente_codice_destinatario_fattura_elettronica''dati_utente')->valoreUscita'attr' => array('class' => "form-control input-sm"'style' => 'padding-left:5px;padding-right:5px;')))
  2400.             ->add(Costanti::RU_DESTINAZIONE_DIVERSA,  CheckboxType::class, array('required' => false'label' => $traduci->OttieniElementoDizionario("carrello_rdu_destinazione_diversa""carrello")->valoreUscita'attr' => array('class' => "form-control input-sm"'style' => 'padding-left:5px;padding-right:5px;')))
  2401.             ->add(Costanti::RU_DD_RAGIONE_SOCIALETextType::class, array('required' => false'label' => $traduci->OttieniElementoDizionario('dati_utente_destinazione_ragione_sociale''dati_utente')->valoreUscita'attr' => array('class' => "form-control input-sm"'style' => 'padding-left:5px;padding-right:5px;')))
  2402.             ->add(Costanti::RU_DD_INDIRIZZOTextType::class, array('required' => false'label' => $traduci->OttieniElementoDizionario('dati_utente_destinazione_indirizzo''dati_utente')->valoreUscita'attr' => array('class' => "form-control input-sm"'style' => 'padding-left:5px;padding-right:5px;')))
  2403.             ->add(Costanti::RU_DD_CITTATextType::class, array('required' => false'label' => $traduci->OttieniElementoDizionario('dati_utente_destinazione_citta''dati_utente')->valoreUscita'attr' => array('class' => "form-control input-sm"'style' => 'padding-left:5px;padding-right:5px;')))
  2404.             ->add(Costanti::RU_DD_PROVINCIATextType::class, array('required' => false'label' => $traduci->OttieniElementoDizionario('dati_utente_destinazione_provincia''dati_utente')->valoreUscita'attr' => array('class' => "form-control input-sm"'style' => 'padding-left:5px;padding-right:5px;')))
  2405.             ->add(Costanti::RU_DD_CAPTextType::class, array('required' => false'label' => $traduci->OttieniElementoDizionario('dati_utente_destinazione_cap''dati_utente')->valoreUscita'attr' => array('class' => "form-control input-sm"'style' => 'padding-left:5px;padding-right:5px;')))
  2406.             ->add(Costanti::RU_DD_TELEFONOTextType::class, array('required' => false'label' => $traduci->OttieniElementoDizionario('dati_utente_destinazione_telefono''dati_utente')->valoreUscita'attr' => array('class' => "form-control input-sm"'style' => 'padding-left:5px;padding-right:5px;')))
  2407.             ->add(Costanti::RU_DD_STATO,  EntityType::class, array('required' => false'class' => Nazioni::class, 'choice_label' => function ($nazione) {
  2408.                 /** @var $nazione Nazioni */
  2409.                 return $nazione->getDescrizione();
  2410.             }, 'label' => $traduci->OttieniElementoDizionario('dati_utente_destinazione_nazione''dati_utente')->valoreUscita'attr' => array('class' => "form-control input-sm"'style' => 'padding-left:5px;padding-right:5px;')))->add('telefono'TextType::class, array('required' => false'label' => "Telefono"'attr' => array('class' => "form-control input-sm"'style' => 'padding-left:5px;padding-right:5px;')))
  2411.             ->add(Costanti::RU_DD_INDIRIZZO_MAILEmailType::class, array('required' => false'label' => $traduci->OttieniElementoDizionario('dati_utente_destinazione_mail''dati_utente')->valoreUscita'attr' => array('class' => "form-control input-sm"'style' => 'padding-left:5px;padding-right:5px;')))
  2412.             ->add(Costanti::RU_USERNAMETextType::class, array('required' => true'label' => $traduci->OttieniElementoDizionario('dati_utente_username''dati_utente')->valoreUscita'attr' => array('class' => "form-control input-sm"'style' => 'padding-left:5px;padding-right:5px;')))
  2413.             ->add(Costanti::RU_PASSWORDPasswordType::class, array('required' => true'label' => $traduci->OttieniElementoDizionario('dati_utente_password''dati_utente')->valoreUscita'attr' => array('class' => "form-control input-sm"'style' => 'padding-left:5px;padding-right:5px;')))
  2414.             ->add(Costanti::RU_RIPETI_PASSWORDPasswordType::class, array('required' => true'label' => $traduci->OttieniElementoDizionario('dati_utente_ripeti_password''dati_utente')->valoreUscita'attr' => array('class' => "form-control input-sm"'style' => 'padding-left:5px;padding-right:5px;')))
  2415.             ->add(Costanti::RU_PRIVACY,  CheckboxType::class, array('required' => true,'label' => $traduci->OttieniElementoDizionario("carrello_privacy_esprimo_il_consenso""carrello")->valoreUscita'attr' => array('class' => "form-control input-sm"'style' => 'padding-left:5px;padding-right:5px;')));
  2416.         /** @var UserCampiCustomTestata[] $campiCustomUser */
  2417.         $campiCustomUser $this->doctrine->getRepository(UserCampiCustomTestata::class)->findBy(array('luogoVisualizzazione' => 'registrazioneUtente'));
  2418.         foreach ($campiCustomUser as $tst) {
  2419.             $formBuilder $this->AggiungiChildAFormUserCampiCustom($tst$formBuilder);
  2420.         }
  2421.         return $formBuilder;
  2422.     }
  2423.     /*
  2424.      * ============================================================================================================================
  2425.      * ============================================  RISORSE ANAGRAFICHE  =========================================================
  2426.      * ============================================================================================================================
  2427.      */
  2428.     public function RitornaArrayTipoRisorsa(){
  2429.         return array(
  2430.             'Immagine' => 'immagine',
  2431.             'Pdf' => 'pdf',
  2432.             'Link esterno' => 'linkEsterno',
  2433.             'File' => 'file'
  2434.         );
  2435.     }
  2436.     public function RitornaArrayTipoDato(){
  2437.         return array(
  2438.             'Testo' => 'text',
  2439.             'Numero intero' => 'integer',
  2440.             'Numero decimale' => 'decimal',
  2441.             'Boolean' => 'boolean',
  2442.             'Data' => 'date',
  2443.             'Time' => 'time',
  2444.             'Data e ora' => 'datetime'
  2445.         );
  2446.     }
  2447.     /*
  2448.      * ============================================================================================================================
  2449.      * ============================================  USER CAMPI CUSTOM  =========================================================
  2450.      * ============================================================================================================================
  2451.      */
  2452.     public function RitornaArrayLuoghiVisualizzazione(){
  2453.         return array(
  2454.             'Registrazione utente' => 'registrazioneUtente',
  2455.             'Effettuo ordine' => 'effettuoOrdine',
  2456.         );
  2457.     }
  2458.     public function RitornaChiaviUserCampiCustom(UserCampiCustomTestata $testata){
  2459.         $ritorno = array();
  2460.         /** @var UserCampiCustomDettaglio $item */
  2461.         foreach ($testata->getDettaglio() as $item) {
  2462.             /*
  2463.              *  'Testo' => 'text',
  2464.                     'Checkbox' => 'checkbox',
  2465.                     'Radio' => 'radio',
  2466.                     'Select' => 'select'
  2467.              */
  2468.             $campo $item->getCampo();
  2469.             if ($campo) {
  2470.                 array_push($ritorno'usrCst_' $item->getId());
  2471.             }
  2472.         }
  2473.         return $ritorno;
  2474.     }
  2475.     /**
  2476.      * @param $stringaCompleta
  2477.      * @return UserCampiCustomDettaglio|null
  2478.      */
  2479.     public function RitornaDettaglioUserCampiCustom($stringaCompleta){
  2480.         $id str_replace('usrCst_'''$stringaCompleta);
  2481.         return $this->doctrine->getRepository(UserCampiCustomDettaglio::class)->find($id);
  2482.     }
  2483.     public function AggiungiChildAFormUserCampiCustom(UserCampiCustomTestata $testataFormBuilderInterface $formBuilder){
  2484.         /** @var UserCampiCustomDettaglio $item */
  2485.         foreach ($testata->getDettaglio() as $item) {
  2486.             /*
  2487.              *  'Testo' => 'text',
  2488.                     'Checkbox' => 'checkbox',
  2489.                     'Radio' => 'radio',
  2490.                     'Select' => 'select'
  2491.              */
  2492.             $campo $item->getCampo();
  2493.             if ($campo) {
  2494.                 $tipo "";
  2495.                 $arrayValoriSelect = array();
  2496.                 if ($campo->getObbligatorio()) {
  2497.                     array_push($chiaviControllo$campo->getId());
  2498.                 }
  2499.                 switch ($campo->getTipoDato()) {
  2500.                     case "text":
  2501.                     default:
  2502.                     {
  2503.                         $tipo TextType::class;
  2504.                         break;
  2505.                     }
  2506.                     case "checkbox":
  2507.                     {
  2508.                         $tipo CheckboxType::class;
  2509.                         break;
  2510.                     }
  2511.                     case "radio":
  2512.                     case "select":
  2513.                     {
  2514.                         $tipo ChoiceType::class;
  2515.                         if (strpos($campo->getValoriSelect(), "$$") !== false) {
  2516.                             $arr explode("$$"$campo->getValoriSelect());
  2517.                             $arrayValoriSelect = array();
  2518.                             foreach ($arr as $item) {
  2519.                                 $arrayValoriSelect[$item] = $item;
  2520.                             }
  2521.                         } else if ($tipo != "") {
  2522.                             array_push($arrayValoriSelect$tipo);
  2523.                         }
  2524.                         break;
  2525.                     }
  2526.                 }
  2527.                 $arrayConfigurazione = array(
  2528.                     'label' => $campo->getTestoVisualizzato(),
  2529.                     'required' => $campo->getObbligatorio(),
  2530.                     'attr' => array(
  2531.                         'class' => "form-control input-sm",
  2532.                         'style' => 'padding-left:5px;padding-right:5px;'
  2533.                     )
  2534.                 );
  2535.                 if ($campo->getTipoDato() == "select" || $campo->getTipoDato() == 'radio') {
  2536.                     $arrayConfigurazione["choices"] = $arrayValoriSelect;
  2537.                     if ($campo->getTipoDato() == 'radio') {
  2538.                         $arrayConfigurazione["expanded"] = true;
  2539.                         $arrayConfigurazione["multiple"] = false;
  2540.                     }
  2541.                 }
  2542.                 $formBuilder->add(
  2543.                     'usrCst_' $item->getId(),
  2544.                     $tipo,
  2545.                     $arrayConfigurazione
  2546.                 );
  2547.             }
  2548.         }
  2549.         return $formBuilder;
  2550.     }
  2551.     /*
  2552.      * ============================================================================================================================
  2553.      * ====================================================  TEMPLATING  ==========================================================
  2554.      * ============================================================================================================================
  2555.      */
  2556.     public function RitornaListaBlocchiPerLayout($tipoLayout){
  2557.         $lat Templating::RitornaArrayFinaleInBaseAlLayout($tipoLayout$this->router);
  2558.         return $lat;
  2559.     }
  2560.     public function VerificaSeMappaConPrezzoSuRichiesta(MappaCategoriaArticolo $mappa){
  2561.         $ritorno false;
  2562.         if($mappa){
  2563.             if($mappa->articolo){
  2564.                 $ritorno $mappa->articolo->prezzoSuRichiesta;
  2565.             }
  2566.             if(!$ritorno){
  2567.                 if($mappa->categoria1){
  2568.                     $ritorno $mappa->categoria1->prezzoSuRichiesta;
  2569.                 }
  2570.                 if(!$ritorno && $mappa->categoria2){
  2571.                     $ritorno $mappa->categoria2->prezzoSuRichiesta;
  2572.                 }
  2573.                 if(!$ritorno && $mappa->categoria3){
  2574.                     $ritorno $mappa->categoria3->prezzoSuRichiesta;
  2575.                 }
  2576.                 if(!$ritorno && $mappa->categoria4){
  2577.                     $ritorno $mappa->categoria4->prezzoSuRichiesta;
  2578.                 }
  2579.                 if(!$ritorno && $mappa->categoria5){
  2580.                     $ritorno $mappa->categoria5->prezzoSuRichiesta;
  2581.                 }
  2582.             }
  2583.         }
  2584.         return $ritorno;
  2585.     }
  2586.     /**
  2587.      * @param $idPagina
  2588.      * @param $ritorno array|null
  2589.      * @param $valoriSupporto array
  2590.      * @param $twigAppArray array|null
  2591.      * @return array
  2592.      * <p>Valori di supporto viene passato a twig nel render del template</p>
  2593.      */
  2594.     public function renderizzaPaginaOComponente($idPagina$ritorno$valoriSupporto$locale 'it'$htmlCustom ''$ordineCasuale false$padreAvvio false$twigAppArray null)
  2595.     {
  2596.         if (!$ritorno){
  2597.             $ritorno = array(
  2598.                 'html' => '',
  2599.                 'css' => ''
  2600.             );
  2601.         }
  2602.         $this->locale $locale;
  2603.         $pagina null;
  2604.         if ($idPagina != 0) {
  2605.             $pagina $this->doctrine->getRepository(PagineEComponenti::class)->find($idPagina);
  2606.             // Carico le traduzioni
  2607.             $this->translating->CaricaTraduzioniPerLayoutPagineEComponenti($pagina$locale);
  2608.         }
  2609.         if ($pagina){
  2610.             if ($padreAvvio)
  2611.             {
  2612.                 $ritorno['css'] = $ritorno['css'] . ' ' . ($pagina->getCssAggiuntivo() ? $pagina->getCssAggiuntivo() : '');
  2613.             }
  2614.             $ritorno['css'] = $ritorno['css'] . ' ' $pagina->getCss();
  2615.             $ritorno['html'] = $pagina->getHtml();
  2616.         }else if ($htmlCustom != ''){
  2617.             $ritorno['html'] = $htmlCustom;
  2618.         }
  2619.         if($pagina->getTipoPagina() == ("rigaHomeShop"||"paginaDettaglioArticolo"||"dettaglioArticolo"||"modalRichiestaPrezzo") && strpos($ritorno["html"], '<sezione-da-verificare ') !== false) {
  2620.             $prezzoSuRichiesta false;
  2621.             $chiaveRighe Templating::ottieniElementoDaUtilizzareInBaseATipoPagina($pagina->getTipoPagina(), $ordineCasuale);
  2622.             $percorso = array('articolo');
  2623.             if(array_key_exists($chiaveRighe$valoriSupporto))
  2624.                 $prezzoSuRichiesta Templating::ritornaValoreDaPercorso($valoriSupporto[$chiaveRighe], $percorso'prezzoSuRichiesta');
  2625.             if(!$prezzoSuRichiesta){
  2626.                 //Verifico se le categorie hanno il flag su prezzo a richiesta
  2627.                 $prezzoSuRichiesta Templating::ritornaValoreDaPercorso($valoriSupporto[$chiaveRighe], array('categoria1'), 'prezzoSuRichiesta');
  2628.                 if(!$prezzoSuRichiesta)
  2629.                     $prezzoSuRichiesta Templating::ritornaValoreDaPercorso($valoriSupporto[$chiaveRighe], array('categoria2'), 'prezzoSuRichiesta');
  2630.                 if(!$prezzoSuRichiesta)
  2631.                     $prezzoSuRichiesta Templating::ritornaValoreDaPercorso($valoriSupporto[$chiaveRighe], array('categoria3'), 'prezzoSuRichiesta');
  2632.                 if(!$prezzoSuRichiesta)
  2633.                     $prezzoSuRichiesta Templating::ritornaValoreDaPercorso($valoriSupporto[$chiaveRighe], array('categoria4'), 'prezzoSuRichiesta');
  2634.                 if(!$prezzoSuRichiesta)
  2635.                     $prezzoSuRichiesta Templating::ritornaValoreDaPercorso($valoriSupporto[$chiaveRighe], array('categoria5'), 'prezzoSuRichiesta');
  2636.             }
  2637.             $stringaRicercaWhile '<sezione-da-verificare type="sezione" ';
  2638.             if($prezzoSuRichiesta)
  2639.                 $stringaRicercaWhile .= 'ambito="prezzo"';
  2640.             else
  2641.                 $stringaRicercaWhile .= 'ambito="prezzo-su-richiesta"';
  2642.             while (strpos($ritorno["html"], $stringaRicercaWhile) !== false) {
  2643.                 //substringo l'intero tag
  2644.                 $sbs1 SubstringWithFind::SubstringWithFind(
  2645.                     $stringaRicercaWhile,
  2646.                     '</sezione-da-verificare>',
  2647.                     $ritorno['html']);
  2648.                 $elementoTagCompleto $sbs1->substring;
  2649.                 $sbTipo SubstringWithFind::SubstringWithFind(
  2650.                     'type="',
  2651.                     '"',
  2652.                     $elementoTagCompleto,
  2653.                     0,
  2654.                     true
  2655.                 );
  2656.                 $tipo $sbTipo->substring;
  2657.                 $sbAmbito SubstringWithFind::SubstringWithFind(
  2658.                     'ambito="',
  2659.                     '"',
  2660.                     $elementoTagCompleto,
  2661.                     0,
  2662.                     true
  2663.                 );
  2664.                 $ambito $sbAmbito->substring;
  2665.                 $ritorno['html'] = str_replace($elementoTagCompleto''$ritorno['html']);
  2666.             }
  2667.         }
  2668.         while(strpos($ritorno["html"], "<TMPLT ") !== false){
  2669.             //se trovo l'elemento TMPLT effettuo l'azione in base al tp
  2670.             //substringo l'intero tag
  2671.             $sbs1 SubstringWithFind::SubstringWithFind(
  2672.                 '<TMPLT ',
  2673.                 '/>',
  2674.                 $ritorno['html']);
  2675.             $elementoTagCompleto $sbs1->substring;
  2676.             //ottengo il tp
  2677.             $sbTipo SubstringWithFind::SubstringWithFind(
  2678.                 'tp="',
  2679.                 '"',
  2680.                 $elementoTagCompleto,
  2681.                 0,
  2682.                 true
  2683.             );
  2684.             $tipo $sbTipo->substring;
  2685.             switch ($tipo){
  2686.                 case 'ALTRO-LAYOUT':{
  2687.                     $sbs2 SubstringWithFind::SubstringWithFind(
  2688.                         'component-id="',
  2689.                         '"',
  2690.                         $elementoTagCompleto,
  2691.                         0,
  2692.                         true
  2693.                     );
  2694.                     $riferimentoId $sbs2->substring;
  2695.                     if ($riferimentoId == 'default' || $riferimentoId == 'form_default') {
  2696.                         $ritorno['html'] = str_replace(
  2697.                             $elementoTagCompleto,
  2698.                             $this->ritornaDefaultLayoutPagineEComponenti($pagina->getTipoPagina(), $valoriSupporto, ($riferimentoId == 'form_default' true false)),
  2699.                             $ritorno['html']
  2700.                         );
  2701.                     } else {
  2702.                         $rit $this->renderizzaPaginaOComponente($riferimentoIdnull$valoriSupporto$locale''$ordineCasualefalse$twigAppArray);
  2703.                         $ritorno['css'] = $ritorno['css'] . ' ' $rit["css"];
  2704.                         $ritorno['html'] = str_replace($elementoTagCompleto$rit['html'], $ritorno['html']);
  2705.                     }
  2706.                     break;
  2707.                 }
  2708.                 case "DATO-DB":{
  2709.                     $ritornoConvertDb Templating::ConvertiStringaDatoDb($elementoTagCompleto);
  2710.                     $chiaveRighe Templating::ottieniElementoDaUtilizzareInBaseATipoPagina($pagina->getTipoPagina(), $ordineCasuale);
  2711.                     if (array_key_exists($chiaveRighe$valoriSupporto)) {
  2712.                         $valoreSostituito '';
  2713.                         $valoreInizialeLink '';
  2714.                         if($this->logger)
  2715.                             $this->logger->debug('Click automatico: ' $ritornoConvertDb->clickLinkAutomatico);
  2716.                         if($ritornoConvertDb->clickLinkAutomatico != '' || $ritornoConvertDb->clickLink != ''){
  2717.                             $valoreLink $ritornoConvertDb->clickLink;
  2718.                             if($valoreLink == '' && $ritornoConvertDb->clickLinkAutomatico != ''){
  2719.                                 $valoreLink Templating::creaLinkAutomatico($ritornoConvertDb->clickLinkAutomatico$this->router$valoriSupporto$pagina$ordineCasuale$this->logger$this);
  2720.                             }
  2721.                             $valoreInizialeLink .= ('<a href="' $valoreLink '">');
  2722.                             if($this->startsWith($ritornoConvertDb->clickLinkAutomatico'js_')){//Ad esempio js_ApriModal(false);
  2723.                                 $valoreInizialeLink .= '<a onclick="' substr($ritornoConvertDb->clickLinkAutomatico3) . '">';
  2724.                             }
  2725.                         }
  2726.                         if ($ritornoConvertDb->datoSpeciale != '') {
  2727.                             $valoreSostituito Templating::ritornaValoreDatoDbSpeciale($ritornoConvertDb$this$valoriSupporto[$chiaveRighe]);
  2728.                         } else {
  2729.                             $valoreSostituito Templating::ritornaValoreDaPercorso($valoriSupporto[$chiaveRighe], $ritornoConvertDb->percorso$ritornoConvertDb->nomeColonna$ritornoConvertDb);
  2730.                         }
  2731.                         if ($ritornoConvertDb->immagine) {
  2732.                             if ($this->imageNotFound == null){
  2733.                                 $this->imageNotFound $this->impostazioni->ritornaImpostazioneDaNome('ImmagineNonPresenteProdotto');
  2734.                             }
  2735.                             $valoreSostituito = ('<img src="' . ($valoreSostituito != '' $valoreSostituito $this->imageNotFound ) . '" class="' $ritornoConvertDb->class '" id="' $ritornoConvertDb->id '" style="' $ritornoConvertDb->style '" />');
  2736.                         }
  2737.                         $valoreSostituito = ('<span style="' $ritornoConvertDb->style '" class="' $ritornoConvertDb->class '" id="' $ritornoConvertDb->id '">' $valoreSostituito '</span>');
  2738.                         if($ritornoConvertDb->clickLinkAutomatico != '' || $ritornoConvertDb->clickLink != ''){
  2739.                             $valoreSostituito $valoreInizialeLink $valoreSostituito '</a>';
  2740.                         }
  2741.                         $ritorno['html'] = str_replace($elementoTagCompleto$valoreSostituito$ritorno['html']);
  2742.                     }else{
  2743.                         $ritorno['html'] = str_replace($elementoTagCompleto'<p style="color:red; font-weight: bold; text-decoration: underline; font-style: oblique;">Errore DATO-DB. Chiave righe: ' $chiaveRighe ' non trovata</p>'$ritorno['html']);
  2744.                     }
  2745.                     break;
  2746.                 }
  2747.                 case "TIPOLOGIE-PREIMPOSTATE-SELECT":{
  2748.                     $ritornoElementiBase RitornoElementiBase::OttieniDaElementoTag($elementoTagCompleto);
  2749.                     $chiaveRighe Templating::ottieniElementoDaUtilizzareInBaseATipoPagina($pagina->getTipoPagina(), $ordineCasuale);
  2750.                     $this->translating->CaricaTraduzioniDaFamiglia('home_shop'$locale);
  2751.                     if (array_key_exists($chiaveRighe$valoriSupporto)){
  2752.                         $ritorno['html'] = str_replace($elementoTagCompletoTemplating::ritornaSelectTipologiePreimpostate($valoriSupporto[$chiaveRighe], $ritornoElementiBase$this), $ritorno['html']);
  2753.                     }else{
  2754.                         $ritorno['html'] = str_replace($elementoTagCompleto'<p style="color:red; font-weight: bold; text-decoration: underline; font-style: oblique;">Errore TIPOLOGIE-PREIMPOSTATE-SELECT. Chiave righe: ' $chiaveRighe ' non trovata</p>'$ritorno['html']);
  2755.                     }
  2756.                     break;
  2757.                 }
  2758.                 case "ELEMENTO-DIZIONARIO":{
  2759.                     $ritornoDizionario RitornoElementoDizionario::OttieniDaElementoTag($elementoTagCompleto);
  2760.                     $traduzione $this->translating->OttieniElementoDizionario($ritornoDizionario->identificativo$ritornoDizionario->famiglia);
  2761.                     $ritornoElementiBase RitornoElementiBase::OttieniDaElementoTag($elementoTagCompleto);
  2762.                     if ($traduzione){
  2763.                         if ($ritornoDizionario->link != '' || $ritornoDizionario->linkAutomatico != ''){
  2764.                             $link $ritornoDizionario->link;
  2765.                             if ($ritornoDizionario->linkAutomatico != ''){
  2766.                                 $link Templating::creaLinkAutomatico($ritornoDizionario->linkAutomatico$this->router$valoriSupporto$pagina$ordineCasuale$this->logger$this);
  2767.                             }
  2768.                             $valFinale '<a ' $ritornoElementiBase->RitornaStringaElementiBase() . ' href="' $link '" title="' $traduzione->valoreUscita '">' $traduzione->valoreUscita '</a>';
  2769.                         } else {
  2770.                             $valFinale '<span ' $ritornoElementiBase->RitornaStringaElementiBase() . '>' $traduzione->valoreUscita '</span>';
  2771.                         }
  2772.                         $ritorno['html'] = str_replace($elementoTagCompleto$valFinale$ritorno['html']);
  2773.                     }else{
  2774.                         $ritorno['html'] = str_replace($elementoTagCompleto'<p style="color: red; font-weight: bold; text-decoration: underline; font-style: oblique;">Errore! Identificativo o famiglia non trovato!</p>'$ritorno['html']);
  2775.                     }
  2776.                     break;
  2777.                 }
  2778.                 case "BREADCRUMB":{
  2779.                     $ritornoElemento RitornoBreadCrumb::OttieniDaElementoTag($elementoTagCompleto);
  2780.                     $rttt Templating::eseguiBreadcrumb($ritornoElemento$valoriSupporto$this$locale$this->logger);
  2781.                     $ritorno['html'] = str_replace($elementoTagCompleto$rttt["html"] , $ritorno['html']);
  2782.                     $ritorno["css"] = $ritorno["css"] . $rttt["css"];
  2783.                 }
  2784.                 case "MOLTIPLICATORE-LAYOUT":{
  2785.                     $ritornoMoltiplicatore RitornoDaMoltiplicatoreLayout::OttieniDaElementoTag($elementoTagCompleto);
  2786.                     /** @var  $listaPagine PagineEComponenti[] */
  2787.                     $listaPagine $this->doctrine->getRepository(PagineEComponenti::class)->createQueryBuilder('pagine_ecomponenti')
  2788.                         ->where("pagine_ecomponenti.tipoPagina NOT LIKE :pag")->setParameter('pag''Pagina%')
  2789.                         ->andWhere("pagine_ecomponenti.tipoPagina NOT LIKE :mail")->setParameter('mail''Mail%')
  2790.                         ->andWhere("pagine_ecomponenti.html <> '' AND pagine_ecomponenti.html IS NOT NULL")
  2791.                         ->andWhere('pagine_ecomponenti.id = :iden')->setParameter('iden'$ritornoMoltiplicatore->componentId)
  2792.                         ->setMaxResults(1)
  2793.                         ->orderBy('pagine_ecomponenti.categoria, pagine_ecomponenti.tipoPagina')
  2794.                         ->getQuery()->getResult();
  2795.                     if (count($listaPagine) > 0){
  2796.                         $rttt Templating::eseguiMoltiplicatoreLayout($listaPagine[0], $ritornoMoltiplicatore$valoriSupporto$this$locale$ritornoMoltiplicatore->ordineCasuale$this->logger$twigAppArray);
  2797.                         $ritorno['html'] = str_replace($elementoTagCompleto$rttt["html"] , $ritorno['html']);
  2798.                         $ritorno["css"] = $ritorno["css"] . $rttt["css"];
  2799.                     }else{
  2800.                         $ritorno['html'] = str_replace($elementoTagCompleto'<p style="color:red; font-weight: bold; text-decoration: underline; font-style: oblique;">Errore. Componente con ID: ' $ritornoMoltiplicatore->componentId ' non trovato</p>'$ritorno['html']);
  2801.                     }
  2802.                     break;
  2803.                 }
  2804.                 case "PAGINATION":{
  2805.                     $ritornoBase RitornoElementiBase::OttieniDaElementoTag($elementoTagCompleto);
  2806.                     $sbs2 SubstringWithFind::SubstringWithFind(
  2807.                         'mstr-avanti="',
  2808.                         '"',
  2809.                         $elementoTagCompleto,
  2810.                         0,
  2811.                         true
  2812.                     );
  2813.                     $mostraAvanti $sbs2->substring;
  2814.                     $sbs3 SubstringWithFind::SubstringWithFind(
  2815.                         'mstr-indietro="',
  2816.                         '"',
  2817.                         $elementoTagCompleto,
  2818.                         0,
  2819.                         true
  2820.                     );
  2821.                     $mostraIndietro $sbs3->substring;
  2822.                     $sbs4 SubstringWithFind::SubstringWithFind(
  2823.                         'nr-pag="',
  2824.                         '"',
  2825.                         $elementoTagCompleto,
  2826.                         0,
  2827.                         true
  2828.                     );
  2829.                     $nrPag $sbs4->substring;
  2830.                     $routeRiferimento Templating::ritornaRoutePaginationInBaseATipoPagina($pagina->getTipoPagina());
  2831.                     $stringaRitorno Templating::ritornaStringaPagination($mostraAvanti$mostraIndietro$nrPag$this$routeRiferimento$this->router$valoriSupporto$this->logger$twigAppArray);
  2832.                     $ritorno['html'] = str_replace($elementoTagCompleto$stringaRitorno$ritorno['html']);
  2833.                     break;
  2834.                 }
  2835.                 case "MENU-CATEGORIE":{
  2836.                     $sbs1 SubstringWithFind::SubstringWithFind(
  2837.                         '<TMPLT ',
  2838.                         '<TMPLT />',
  2839.                         $ritorno['html']);
  2840.                     $elementoTagCompleto $sbs1->substring;
  2841.                     //$this->logger->debug($sbs1->substring);
  2842.                     $rtt Templating::eseguiStrutturaMenuCategorie($elementoTagCompleto$valoriSupporto$pagina$this$locale$this->router$this->translatingnull$this->logger$twigAppArray);
  2843.                     $ritorno['html'] = str_replace($elementoTagCompleto$rtt['html'], $ritorno['html']);
  2844.                     $ritorno['css'] = $ritorno['css'] . $rtt['css'];
  2845.                     break;
  2846.                 }
  2847.                 case "MENU-CATEGORIE-ORIZZONTALE-DROPDOWN":{
  2848.                     $sbs1 SubstringWithFind::SubstringWithFind(
  2849.                         '<TMPLT ',
  2850.                         ' />',
  2851.                         $ritorno['html']);
  2852.                     $elementoTagCompleto $sbs1->substring;
  2853.                     //$this->logger->debug($sbs1->substring);
  2854.                     $rtt Templating::eseguiStrutturaMenuCategorieOrizzontaleDropdown($elementoTagCompleto$valoriSupporto$pagina$this$locale$this->router$this->translatingnull$this->logger$twigAppArray);
  2855.                     $ritorno['html'] = str_replace($elementoTagCompleto$rtt['html'], $ritorno['html']);
  2856.                     $ritorno['css'] = $ritorno['css'] . $rtt['css'];
  2857.                     break;
  2858.                 }
  2859.                 case "GRIGLIA-ORDINAZIONE-VARIANTI":{
  2860.                     $sbs1 SubstringWithFind::SubstringWithFind(
  2861.                         '<TMPLT ',
  2862.                         ' />',
  2863.                         $ritorno['html']);
  2864.                     $elementoTagCompleto $sbs1->substring;
  2865.                     //$this->logger->debug($sbs1->substring);
  2866.                     $rtt Templating::eseguiGrigliaOrdinazioneVarianti($elementoTagCompleto$valoriSupporto$pagina$this$locale$this->router$this->translatingnull$this->logger$twigAppArray);
  2867.                     $ritorno['html'] = str_replace($elementoTagCompleto$rtt['html'], $ritorno['html']);
  2868.                     $ritorno['css'] = $ritorno['css'] . $rtt['css'];
  2869.                     break;
  2870.                 }
  2871.                 case "CORENAV": {
  2872.                     $sbs1 SubstringWithFind::SubstringWithFind(
  2873.                         '<TMPLT tp="CORENAV" ',
  2874.                         '<TMPLT CORENAV />',
  2875.                         $ritorno['html']);
  2876.                     $elementoNuovo $sbs1->substring;
  2877.                     $sbsTestata SubstringWithFind::SubstringWithFind(
  2878.                         '<TMPLT tp="CORENAV" ',
  2879.                         '>',
  2880.                         $elementoNuovo
  2881.                     );
  2882.                     $testata $sbsTestata->substring;
  2883.                     $sbElementoDb SubstringWithFind::SubstringWithFind(
  2884.                         ' elemento-visualizzato="',
  2885.                         '"',
  2886.                         $elementoTagCompleto,
  2887.                         0,
  2888.                         true
  2889.                     );
  2890.                     $elementoDbDaVisualizzare $sbElementoDb->substring;
  2891.                     $rtt Templating::eseguiStrutturaCoreNav($elementoTagCompleto$elementoNuovo$testata$elementoDbDaVisualizzare$valoriSupporto$pagina$this$locale$this->router$this->translating$this->logger$twigAppArray);
  2892.                     $ritorno['html'] = str_replace($elementoNuovo$rtt$ritorno['html']);
  2893.                     break;
  2894.                 }
  2895.                 case "DIV-CLICCABILE":{
  2896.                     $sbs1 SubstringWithFind::SubstringWithFind(
  2897.                         '<TMPLT ',
  2898.                         '<TMPLT DIV-CLICCABILE />',
  2899.                         $ritorno['html']);
  2900.                     $elementoNuovo $sbs1->substring;
  2901.                     $sbsTestata SubstringWithFind::SubstringWithFind(
  2902.                         '<TMPLT ',
  2903.                         '>',
  2904.                         $elementoNuovo
  2905.                     );
  2906.                     //$this->logger->debug('Sbs testata: ' . $sbsTestata->substring);
  2907.                     $stringaSostituireTestata Templating::convertiTestataDivSecondario($sbsTestata->substring$this$this->router$pagina$valoriSupporto$this->logger$ordineCasuale);
  2908.                     //$this->logger->debug('Stringa sostituire testat: ' . $stringaSostituireTestata);
  2909.                     $elementoNuovo str_replace($sbsTestata->substring$stringaSostituireTestata$elementoNuovo);
  2910.                     $elementoNuovo str_replace('<TMPLT DIV-CLICCABILE />''</a>'$elementoNuovo);
  2911.                     $ritorno['html'] = str_replace($sbs1->substring$elementoNuovo$ritorno['html']);
  2912.                     break;
  2913.                 }
  2914.                 case "GENERA_ROUTE":{
  2915.                     $sbRoute SubstringWithFind::SubstringWithFind(
  2916.                         ' route="',
  2917.                         '"',
  2918.                         $elementoTagCompleto,
  2919.                         0,
  2920.                         true
  2921.                     );
  2922.                     $sostituzione Templating::creaLinkAutomatico($sbRoute->substring$this->router$valoriSupporto$pagina$ordineCasuale$this->logger$this);
  2923.                     $ritorno['html'] = str_replace($elementoTagCompleto$sostituzione$ritorno['html']);
  2924.                     break;
  2925.                 }
  2926.                 case "BUTTON":{
  2927.                     $ritornoButton RitornoButton::RitonaDaTagCompleto($elementoTagCompleto);
  2928.                     $valoreLink $ritornoButton->clicLink;
  2929.                     if ($ritornoButton->linkAutomatico != '' && !$this->startsWith($ritornoButton->linkAutomatico'js_')){
  2930.                         $valoreLink Templating::creaLinkAutomatico($ritornoButton->linkAutomatico$this->router$valoriSupporto$pagina$ordineCasuale$this->logger$this);
  2931.                     }
  2932.                     $testo $ritornoButton->testo;
  2933.                     if ($ritornoButton->identificativo != ''){
  2934.                         $trad $this->translating->OttieniElementoDizionario($ritornoButton->identificativo$ritornoButton->famiglia);
  2935.                         $testo $trad->valoreUscita;
  2936.                     }
  2937.                     if($this->startsWith($ritornoButton->linkAutomatico'js_')){//Ad esempio js_ApriModal(false);
  2938.                         $onClk substr($ritornoButton->linkAutomatico3);
  2939.                         if($this->startsWith($ritornoButton->linkAutomatico'js_ApriModalRichiestaPrezzo(')){
  2940.                             $chiaveRighe Templating::ottieniElementoDaUtilizzareInBaseATipoPagina($pagina->getTipoPagina(), $ordineCasuale);
  2941.                             $idMp Templating::ritornaValoreDaPercorso($valoriSupporto[$chiaveRighe], array(), 'id');
  2942.                             $onClk "ApriModalRichiestaPrezzo('" $idMp "');";
  2943.                         }
  2944.                         $stringaSostituzione = ('<button onclick="' $onClk '" id="' $ritornoButton->id '" name="' $ritornoButton->name '" class="' $ritornoButton->class '" style="' $ritornoButton->style '">' $testo '</button>');
  2945.                     }else {
  2946.                         $tag '<button ';
  2947.                         if ($valoreLink != '') {
  2948.                             $tag '<a ';
  2949.                         } else {
  2950.                             if ($ritornoButton->type != '' && $ritornoButton->type != 'button') {
  2951.                                 $tag '<input type="' $ritornoButton->type '" ';
  2952.                             }
  2953.                         }
  2954.                         $aggiungiOnClick '';
  2955.                         if (($ritornoButton->type == 'button' || $ritornoButton->type == '') && !$ritornoButton->linkAutomatico != '') {
  2956.                             $aggiungiOnClick ' onclick="location.href=\'' $ritornoButton->clicLink '\'" ';
  2957.                         }
  2958.                         $stringaSostituzione $tag $aggiungiOnClick '  href="' $valoreLink '" id="' $ritornoButton->id '" name="' $ritornoButton->name '" class="' $ritornoButton->class '" style="' $ritornoButton->style '" ';
  2959.                         if ($ritornoButton->type != '' && $ritornoButton->type != 'button') {
  2960.                             $stringaSostituzione .= ' value="' $testo '">';
  2961.                         } else {
  2962.                             $stringaSostituzione .= '">' $testo . ($valoreLink != '' '</a>' '</button>');
  2963.                         }
  2964.                     }
  2965.                     $ritorno['html'] = str_replace($elementoTagCompleto$stringaSostituzione$ritorno['html']);
  2966.                     break;
  2967.                 }
  2968.                 case "VISTA-ATTRIBUTI":{
  2969.                     $sbs1 SubstringWithFind::SubstringWithFind(
  2970.                         '<TMPLT ',
  2971.                         '</VISTA-ATTRIBUTI>',
  2972.                         $ritorno['html']);
  2973.                     $elementoNuovo $sbs1->substring;
  2974.                     $sbsTestata SubstringWithFind::SubstringWithFind(
  2975.                         '<TMPLT ',
  2976.                         '>',
  2977.                         $elementoNuovo
  2978.                     );
  2979.                     $rtt Templating::eseguiStrutturaVistaAttributi($elementoNuovo$valoriSupporto$this$locale$this->router$this->translatingnull$this->logger);
  2980.                     $ritorno['html'] = str_replace($elementoNuovo$rtt['html'], $ritorno['html']);
  2981.                     $ritorno['css'] = $ritorno['css'] . $rtt['css'];
  2982.                 }
  2983.                 default:{
  2984.                     //se non trovo il corripondente Tp lo sostituisco con una striga di errore
  2985.                     $ritorno['html'] = str_replace($elementoTagCompleto'<p style="color:red; font-weight: bold; text-decoration: underline; font-style: oblique;">Errore. Tipo elemento non trovato: ' $tipo '</p>'$ritorno['html']);
  2986.                     break;
  2987.                 }
  2988.             }
  2989.         }
  2990.         if ($padreAvvio && $pagina){
  2991.             //Verifico se i vari form mappati hanno il corrispondente nella variabile passata a twig
  2992.             $verificatoreForm = new VerificatoreMatchForm($this);
  2993.             $ritorno['html'] = $verificatoreForm->VerificaCodiceHtml($valoriSupporto$ritorno['html']);
  2994.             $ritorno['html'] = Templating::ElaboraValoriSpecialiInCodiceHTML($ritorno['html'], $valoriSupporto$this$pagina$ordineCasuale$this->logger); //Sostituisco i valori speciali %%: :%% con i corrispondenti dopo aver caricato tutto il layout
  2995.             $ritorno['html'] = Templating::ElaboraTagSostituzionePercorso($ritorno['html'], $valoriSupporto$this$this->logger); // Sostituisco i valori %££% con i valori corrispondenti al percorso indicato all'interno
  2996.             $ritorno['html'] = Templating::ElaboraTagSostituzioneEntita($ritorno['html'], $valoriSupporto$this$this->logger); // Sostituisco i valori entità per popolare le opzioni select
  2997.         }
  2998.         return $ritorno;
  2999.     }
  3000. }