src/Controller/ServiziController.php line 1695
<?phpnamespace App\Controller;use App\Entity\AlberoMenuProdotti;use App\Entity\Anagrafiche;use App\Entity\Articoli;use App\Entity\AssociazioneCategorieAlberoMappaCategorieArticoli;use App\Entity\AssociazioneCodiciAgentiUtente;use App\Entity\BarcodeArticoli;use App\Entity\Categorie;use App\Entity\CategorieAlbero;use App\Entity\CouponDettaglio;use App\Entity\Lingue;use App\Entity\MagazzinoSecondarioDisponibilita;use App\Entity\MappaCategorieArticoli;use App\Entity\NascondiEsauritiSuMarca;use App\Entity\Report;use Doctrine\ORM\Query\Expr;use App\Entity\Offerte;use App\Entity\Ordini;use App\Entity\OrdiniRighe;use App\Entity\PagineEComponenti;use App\Entity\PermessiAccessoUtenti;use App\Entity\RegistroMail;use App\Entity\RigheCarrello;use App\Entity\RisorseAnagrafiche;use App\Entity\RisorseAnagraficheColonneValori;use App\Entity\ScontiAnagrafiche;use App\Entity\TipologiePreimpostate;use App\Entity\TipoOrdine;use App\Entity\UserCampiCustomDettaglio;use App\Entity\UserCampiCustomTestata;use App\Entity\Varianti;use App\Model\Carrello\RitornoCalcoloPrezzoNetto;use App\Model\ContenitoreCategoriePerFiltri;use App\Model\Costanti;use App\Model\Coupon\RitornoValiditaCoupon;use App\Model\DizionarioDatabase;use App\Model\Entita\AlberoCategorie;use App\Model\Entita\AltriDatiUtente;use App\Model\Entita\Articolo;use App\Model\Entita\Carrello;use App\Model\Entita\MappaCategoriaArticolo;use App\Model\Entita\Offerta;use App\Model\Entita\OffertaRiga;use App\Model\Entita\Ordine;use App\Model\Entita\OrdineRiga;use App\Model\Entita\RigaCarrello;use App\Model\Entita\Sconti;use App\Model\Entita\Variante;use App\Model\RecuperoDati;use App\Model\SubstringWithFind;use App\Model\Templating\RitornoBreadCrumb;use App\Model\Templating\RitornoButton;use App\Model\Templating\RitornoCalcoloDisponibile;use App\Model\Templating\RitornoDaMoltiplicatoreLayout;use App\Model\Templating\RitornoElementiBase;use App\Model\Templating\RitornoElementoDizionario;use App\Model\Templating\Templating;use App\Model\Templating\VerificatoreMatchForm;use App\Model\Translating\RitornoTradotto;use App\Model\Translating\Translating;use Carbon\Carbon;use App\Entity\User;use phpDocumentor\Reflection\Types\Self_;use Psr\Log\LoggerInterface;use Random\RandomException;use Symfony\Bridge\Doctrine\Form\Type\EntityType;use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;use Doctrine\Persistence\ManagerRegistry;use App\Entity\Nazioni;use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;use Symfony\Component\Form\Extension\Core\Type\CheckboxType;use Symfony\Component\Form\Extension\Core\Type\ChoiceType;use Symfony\Component\Form\Extension\Core\Type\EmailType;use Symfony\Component\Form\Extension\Core\Type\PasswordType;use Symfony\Component\Form\Extension\Core\Type\TextType;use Symfony\Component\Form\FormBuilderInterface;use Symfony\Component\HttpFoundation\Request;use Symfony\Component\HttpFoundation\RequestStack;use Symfony\Component\Routing\Router;use Symfony\Component\Routing\RouterInterface;use Symfony\Bundle\SecurityBundle\Security;use Symfony\Component\Security\Core\User\UserInterface;use Twig\Environment;/*** Class ServiziController* @package App\Controller*/class ServiziController extends AbstractController{public $doctrine;public $logger;public $twig;/** @var RouterInterface $router */public $router;/** @var Translating $translating */public $translating;/** @var ReturnImpostazioniServiceController $impostazioni */public $impostazioni;/** @var RequestStack $requestStack */public $requestStack;/** @var Security $security */public $security;/** @var ParameterBagInterface */public $parameterBag;public $locale = 'it';/** @var RecuperoDati */public $recuperoDati;// TEMPLATINGpublic $imageNotFound = null;public function __construct(ManagerRegistry $registry, LoggerInterface $_logger, Environment $_twig, Translating $_translating, RouterInterface $_router, ReturnImpostazioniServiceController $_impostazioni, RequestStack $_requestStack, Security $_security, ParameterBagInterface $_parameterBag){$this->doctrine = $registry;$this->logger = $_logger;$this->twig = $_twig;$this->router = $_router;$this->translating = $_translating;$this->impostazioni = $_impostazioni;$this->requestStack = $_requestStack;$this->parameterBag = $_parameterBag;$this->security = $_security;$this->recuperoDati = new RecuperoDati($registry, $_impostazioni, $this);return $this;}/*** @param $collezione* @return string* NON FUNZIONA*/public function generaTabellaHtmlDaCollezioneDiOggetti($collezione){$stringa = "";if (count($collezione) > 0){$ar = get_object_vars($collezione[0]);$stringa .= "<table class='table table-striped'>";$stringa .= "<tr>";foreach (array_keys($ar) as $key ) {$stringa .= ("<th>" . $key . "</th>");}$stringa .= "</tr>";foreach($collezione as $i){$dati = get_object_vars($i);$stringa .= "<tr>";foreach(array_keys($dati) as $dt){$stringa .= ("<td>" . ($dati[$dt] instanceof \Closure ? "" : strval($dati[$dt])) . '</td>');}$stringa .= "</tr>";}$stringa .= "</table>";}return $stringa;}/*** @param $ip* @return bool*/public function verificaSeIpAutorizzatoChiamateImportExport($ip){$this->impostazioni->caricaCacheImpostazioniDaNomi(['IpAbilitatiChiamateExpImp']);$elencoIp = [];try{$el = $this->impostazioni->ritornaImpostazioneDaNome('IpAbilitatiChiamateExpImp');if($el == ''){return true;}if(strpos($el, ',') !== false){$elencoIp = explode(',', $el);}else{$elencoIp = [$el];}}catch (\Exception $ex){}return in_array($ip, $elencoIp);}/*** @param $idOrdine* @return int|mixed*/public function OttieniQtaArticoliOrdinatiDaOrdine($idOrdine){$ritorno = 0;$con = $this->doctrine->getConnection();$stmt = $con->prepare("SELECT SUM(quantita) as 'qta' FROM ordini_righe WHERE ordine_id = :id");$stmt->bindParam("id", $idOrdine);$rst = $stmt->executeQuery();$ris = $rst->fetchAllAssociative();if(count($ris) > 0){$ritorno = $ris[0]['qta'];}return $ritorno;}/*** @param $idCarrello* @return int|mixed*/public function OttieniQtaArticoliOrdinatiDaCarrello($idCarrello){$ritorno = 0;$con = $this->doctrine->getConnection();$stmt = $con->prepare("SELECT SUM(quantita) as 'qta' FROM righe_carrello WHERE carrello_id = :id");$stmt->bindParam("id", $idCarrello);$rst = $stmt->executeQuery();$ris = $rst->fetchAllAssociative();if(count($ris) > 0){$ritorno = $ris[0]['qta'];}return $ritorno;}/*** @param $role* @return bool*/public function checkRole($role){try {if ($this->security->isGranted($role)) {return true;} else {return false;}}catch (\Exception $ex){return false;}}/*** @param $chiave* @return mixed*/public function OttieniParametro($chiave){return $this->parameterBag->get($chiave);}/*** @param int $length* @return string*/function randomString($length = 6) {$str = "";$characters = array_merge(range('A','Z'), range('a','z'), range('0','9'));$max = count($characters) - 1;for ($i = 0; $i < $length; $i++) {$rand = mt_rand(0, $max);$str .= $characters[$rand];}return $str;}/*** @param string $codiceAnagrafica* @param MappaCategoriaArticolo $mappa* @param null|Variante $variante*/public function RitornaScontiAnagrafica($codiceAnagrafica, $mappa, $variante = null) {/** @var ScontiAnagrafiche[] $ritorno */$ritorno = []; //Cumulo di tutti gli sconti//Prima estraggo sconti anagrafica$scontiAnagrafica = $this->doctrine->getRepository(ScontiAnagrafiche::class)->createQueryBuilder('sconti')->where("sconti.codiceAnagrafica = :codA AND sconti.codiceArticolo = '' AND sconti.codiceVariante = '' AND (sconti.codiceGruppoCategorie = '' OR sconti.codiceGruppoCategorie IS NULL) ")->setParameter('codA', $codiceAnagrafica)->getQuery()->getResult();if(count($scontiAnagrafica) > 0){$ritorno = array_merge($ritorno, $scontiAnagrafica);}$codiceVariante = '';if($variante != null) {$codiceVariante = ltrim(str_replace($mappa->articolo->codice, '', $variante->codiceVariante));}//Verifico le combinazioni partendo dalla più restrittiva$sc = $this->doctrine->getRepository(ScontiAnagrafiche::class)->createQueryBuilder('sconti')->where("sconti.codiceAnagrafica = :codA AND sconti.codiceArticolo = :codArt AND sconti.codiceVariante = :codVar AND (sconti.codiceGruppoCategorie = '' OR sconti.codiceGruppoCategorie IS NULL)")->setParameter('codA', $codiceAnagrafica)->setParameter('codArt', $mappa->articolo->codice)->setParameter('codVar', $codiceVariante)->getQuery()->getResult();if(!count($sc) > 0){//Verifico combinazione codice articolo - variante$scArtVar = $this->doctrine->getRepository(ScontiAnagrafiche::class)->createQueryBuilder('sconti')->where("sconti.codiceArticolo = :codArt AND sconti.codiceVariante = :codVar AND (sconti.codiceAnagrafica = '' OR sconti.codiceAnagrafica IS NULL) AND (sconti.codiceGruppoCategorie = '' OR sconti.codiceGruppoCategorie IS NULL)")->setParameter('codArt', $mappa->articolo->codice)->setParameter('codVar', $codiceVariante)->getQuery()->getResult();if(!count($scArtVar) > 0){//Verifico combinazione codice articolo$scArt = $this->doctrine->getRepository(ScontiAnagrafiche::class)->createQueryBuilder('sconti')->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) ")->setParameter('codArt', $mappa->articolo->codice)->getQuery()->getResult();if(count($scArtVar) > 0)$ritorno = array_merge($ritorno, $scArt);}else{$ritorno = array_merge($ritorno, $scArtVar);}}else{$ritorno = array_merge($ritorno, $sc);}if($this->impostazioni->ritornaImpostazioneDaNome('AbilitaScontisticheDaGruppoCategorieArticoli') == '1') {//Estraggo scontistiche su codice gruppo categorie$scontiCodiceGruppoCategorie = $this->doctrine->getRepository(ScontiAnagrafiche::class)->createQueryBuilder('sconti')->where('sconti.codiceGruppoCategorie = :codGrCat AND sconti.codiceAnagrafica = :codA')->setParameter('codA', $codiceAnagrafica)->setParameter('codGrCat', $mappa->codiceGruppoCategorie)->getQuery()->getResult();switch ($this->impostazioni->ritornaImpostazioneDaNome('ModalitaApplicazioneScontisticheDaGruppoCategorieArticoli')){case "Solo se non ci sono sconti":{if (count($ritorno) <= 0){$ritorno = array_merge($ritorno, $scontiCodiceGruppoCategorie);}break;}case "Applica sempre":{if (count($scontiCodiceGruppoCategorie) > 0) {$ritorno = array_merge($ritorno, $scontiCodiceGruppoCategorie);}break;}}}if($this->impostazioni->ritornaImpostazioneDaNome('AbilitaScontisticheDaGruppoArticoli') == '1') {//Estraggo scontistiche su codice gruppo articoli$scontiCodiceGruppoArticoli = $this->doctrine->getRepository(ScontiAnagrafiche::class)->createQueryBuilder('sconti')->where('sconti.codiceGruppoArticoli = :codGrCat AND sconti.codiceAnagrafica = :codA')->setParameter('codA', $codiceAnagrafica)->setParameter('codGrCat', $mappa->articolo->codiceGruppoArticoli)->getQuery()->getResult();switch ($this->impostazioni->ritornaImpostazioneDaNome('ModalitaApplicazioneScontisticheDaGruppoArticoli')){case "Solo se non ci sono sconti":{if (count($ritorno) <= 0){$ritorno = array_merge($ritorno, $scontiCodiceGruppoArticoli);}break;}case "Applica sempre":{if (count($scontiCodiceGruppoArticoli) > 0) {$ritorno = array_merge($ritorno, $scontiCodiceGruppoArticoli);}break;}}}return $ritorno;}/*** @param string $coda* @return string* //Se coda è diverso da '' vuol dire che devo accodare qualcosa quindi verifico se inizia con / se vero lo rimuovo perchè già presente*/public function RitornaPathBase($coda = ''){$pathFileBase = $this->impostazioni->ritornaImpostazioneDaNome('PathFileBaseScambioDati');if (!$this->endsWith($pathFileBase, DIRECTORY_SEPARATOR))$pathFileBase .= DIRECTORY_SEPARATOR;$pathFileBase .= ('OUT' . DIRECTORY_SEPARATOR);if($coda != ''){if(substr($coda, 0, 1) == DIRECTORY_SEPARATOR){$coda = substr($coda, 1, strlen($coda) - 1);}$pathFileBase .= $coda;}return $pathFileBase;}/*** @param $haystack* @param $needle* @return bool*/function endsWith($haystack, $needle){$length = strlen($needle);if ($length == 0) {return true;}return (substr($haystack, -$length) === $needle);}/*** @param $haystack* @param $needle* @return bool*/function startsWith($haystack, $needle){$length = strlen($needle);return (substr($haystack, 0, $length) === $needle);}/*** @return UserInterface*/public function OttieniUtenteCorrente(){return $this->security->getUser();}/*** @param $nomeUnivoco* @param string $locale* @return mixed|null*/public function RitornaIdCategoriaDaNomeUnivoco($nomeUnivoco, $locale = ''){$usaCategorieAlbero = $this->impostazioni->ritornaImpostazioneDaNome('UtilizzaCategorieAlberoPerGenerazione');$sql = '';if($usaCategorieAlbero == '1'){$sql = 'SELECT categorie_albero.id as identificativo FROM categorie_alberoLEFT JOIN categorie_albero_in_lingua cil on categorie_albero.id = cil.categoria_albero_id AND cil.locale = ?WHERE (categorie_albero.nome_univoco = ? OR cil.nome_univoco = ?) AND categorie_albero.attivo = 1 LIMIT 1';}else {$sql = 'SELECT categorie.id as identificativo FROM categorieLEFT JOIN categorie_in_lingua cil on categorie.id = cil.categoria_id AND cil.locale = ?WHERE (categorie.nome_univoco = ? OR cil.nome_univoco = ?) AND categorie.attivo = 1 LIMIT 1';}$stmt = $this->doctrine->getConnection()->prepare($sql);$stmt->bindValue(1, $locale);$stmt->bindValue(2, $nomeUnivoco);$stmt->bindValue(3, $nomeUnivoco);$rst = $stmt->executeQuery();$risultati = $rst->fetchAllAssociative();if(count($risultati) > 0){return $risultati[0]['identificativo'];}return null;}/*** @return string*/public function OttieniLocale(){return $this->requestStack->getCurrentRequest()->getLocale();}/*** @param $username* @param $email* @return bool*/public function VerificaEsistenzaUsernameOEmail($username, $email){$esistenza = false;$user = $this->doctrine->getRepository(User::class)->findBy(['username' => $username]);if($user && count($user) > 0){$esistenza = true;}else{$mail = $this->doctrine->getRepository(User::class)->findBy(['email' => $email]);if($mail && count($mail) > 0){$esistenza = true;}}return $esistenza;}/*** @return Report[]*/public function OttieniElencoReport(){$report = $this->doctrine->getRepository(Report::class)->createQueryBuilder('report');/** @var User $utenteAttuale */$utenteAttuale = $this->OttieniUtenteCorrente();if ($utenteAttuale->getAgente() && !$this->isGranted('ROLE_ADMIN')) {$report = $report->andWhere("report.livelloPermesso LIKE '%AGENTE%'")->andWhere("report.codiceCliente IS NULL OR report.codiceCliente = '' ")->andWhere('report.agente = :ag')->setParameter('ag', $utenteAttuale->getCodiceCliente());}if ($utenteAttuale->getCommerciale() && !$this->isGranted('ROLE_ADMIN')) {$report = $report->andWhere("report.livelloPermesso LIKE '%COMMERCIALE%'")->andWhere("report.codiceCliente IS NULL OR report.codiceCliente = '' ")->andWhere('report.agente = :ag')->setParameter('ag', $utenteAttuale->getCodiceCliente());}if (!$utenteAttuale->getAgente() && !$utenteAttuale->getCommerciale() && !$this->isGranted('ROLE_ADMIN')) {$report = $report->andWhere("report.livelloPermesso LIKE '%UTENTE%' AND report.livelloPermesso IS NOT NULL")->andWhere("report.codiceCliente = :codCli")->setParameter('codCli', $utenteAttuale->getCodiceCliente());}if ($this->isGranted('ROLE_ADMIN')) {$report = $report->andWhere("report.livelloPermesso LIKE '%AMMINISTRATORE%' OR report.livelloPermesso IS NULL OR report.livelloPermesso = ''")->andWhere("report.codiceCliente IS NULL OR report.codiceCliente = '' ");}/** @var Report[] $report */$rpt = $report->getQuery()->getResult();return $rpt;}/*** @param Request $request* @return string|null*/public function getRefererRoute(Request $request){$referer = $request->headers->get('referer');if ($referer == NULL) {$url = $this->router->generate('homepage');} else {$url = $referer;}return $url;}/*** @param $mappa* @return string*/public function creaCodiceIdMappaPerDettaglioProdotto($mappa){if ($mappa instanceof MappaCategorieArticoli){return $mappa->getId() . '-' . $mappa->getArticolo()->getCodice();} else if ($mappa instanceof MappaCategoriaArticolo){return $mappa->id . '-' . $mappa->articolo->codice;} else if ($mappa instanceof RigaCarrello){return $mappa->mappaCategoriaArticolo->id . '-' . $mappa->mappaCategoriaArticolo->articolo->codice;} else if ($mappa instanceof RigheCarrello){return $mappa->getMappaCategorieArticoli()->getId() . '-' . $mappa->getMappaCategorieArticoli()->getArticolo()->getCodice();} else if ($mappa instanceof OrdineRiga){return $mappa->mappaCategoriaArticolo->id . '-' . $mappa->mappaCategoriaArticolo->articolo->codice;} else if ($mappa instanceof OrdiniRighe){return $mappa->getMappaCategorieArticoli()->getId() . '-' . $mappa->getMappaCategorieArticoli()->getArticolo()->getCodice();} else{return '-';}}/*** @param $costante* @return mixed*/public function RitornaCostante($costante){return Costanti::ritornaCostante($costante);}/*** @return AltriDatiUtente|null*/public function RitornaAltriDatiUtente(){return AltriDatiUtente::CreaDaUtente(self::OttieniUtenteCorrente());}/*** @return Anagrafiche|null*/public function RitornaAnagraficaCollegataUtente(){/** @var User $user */$user = self::OttieniUtenteCorrente();if($user) {$anagraficaUtente = $this->doctrine->getRepository(Anagrafiche::class)->findOneBy(array('codice' => $user->getCodiceCliente()));return $anagraficaUtente;}else{return null;}}/*** @return TipoOrdine|object|null*/public function RitornaTipoOrdineAttuale(){if($this->impostazioni->ritornaImpostazioneDaNome('AbilitaTipoOrdine') == '1') {$dat = self::RitornaAltriDatiUtente();return self::RitornaTipoOrdine($dat->tipoOrdine);}else{return null;}}/*** @param $id* @return TipoOrdine|object|null*/public function RitornaTipoOrdine($id){if($id && $id != null && $id != '') {return $this->doctrine->getRepository(TipoOrdine::class)->find($id);}else{return null;}}/*** @param $codiceEsito string* @param $successo boolean* @param $oggetto string* @param $contenuto string* @param $da string* @param $a string* @param null $utente* @param string $messaggioSupplementare* @param string $cc* @param string $ccn*/public function InserisciRegistroMail($successo, $oggetto, $contenuto, $da, $a, $utente = null, $log = '', $messaggioSupplementare = '', $cc = '', $ccn = '', $contentType = ''){try {$rm = new RegistroMail();$rm->setUtente($utente);$rm->setDataInvio(new \DateTime());$rm->setLog($log);$rm->setSuccesso($successo);$rm->setOggetto($oggetto);$rm->setMessaggioSupplementare($messaggioSupplementare);$rm->setContenuto($contenuto);$rm->setDa($da);$rm->setA($a);$rm->setContentType($contentType);$rm->setCc($cc);$rm->setCcn($ccn);$em = $this->doctrine->getManager();$em->persist($rm);$em->flush();}catch (\Exception $ex){$this->DebuggaException($ex);}}public static function OttieniCodiceGruppoCategorieDaMappa(MappaCategorieArticoli $mappa){$ritorno = "";if($mappa->getCategoria1()){$ritorno .= $mappa->getCategoria1()->getCodice();}if($mappa->getCategoria2()){$ritorno .= $mappa->getCategoria2()->getCodice();}if($mappa->getCategoria3()){$ritorno .= $mappa->getCategoria3()->getCodice();}if($mappa->getCategoria4()){$ritorno .= $mappa->getCategoria4()->getCodice();}if($mappa->getCategoria5()){$ritorno .= $mappa->getCategoria5()->getCodice();}return $ritorno;}public static function convertiInNumero($valore, $ritorna0SeVuoto = false){$rit = $valore;if ($rit == ''){if($ritorna0SeVuoto)$rit = 0;else$rit = null;}if ($rit)$rit = str_replace(',', '.', $rit);return $rit;}public static function convertiInBoolean($valore, $ritornaFalseSeVuoto = false){$rit = null;if(strtolower($valore) == 'true' || $valore == '1' || $valore == 1){$rit = true;}elseif (strtolower($valore) == 'false' || $valore = '0' || $valore == 0){$rit = false;} else {if ($ritornaFalseSeVuoto) {$rit = false;} else {$rit = null;}}return $rit;}public static function convertiInDatetime($valore, $conOra = false, $format = 'd/m/Y'){$rit = null;try {$rit = \DateTime::createFromFormat($format, $valore);if (!$conOra) {$rit->setTime(0, 0, 0);}}catch (\Exception $ex){}return $rit;}/*** @param $barcode* @param bool $ritornoJson* @return MappaCategoriaArticolo*/public function ritornaJsonArticoloDaBarcode($barcode, bool $ritornoJson = false){$ritorno = null;$risultato = $this->doctrine->getRepository(BarcodeArticoli::class)->createQueryBuilder('barcode_articoli')->leftJoin('barcode_articoli.mappaCategoriaArticoli', 'mappa')->leftJoin('mappa.articolo', 'articolo')->where('barcode_articoli.barcode = :brcd')->setParameter('brcd', $barcode)->setMaxResults(1)->getQuery()->getResult();if(count($risultato) > 0){/** @var BarcodeArticoli $brc */$brc = $risultato[0];$mappa = null;if ($brc->getMappaCategoriaArticoli())$mappa = MappaCategoriaArticolo::CreaDaEntitaDoctrine($this->doctrine, $this, '', $brc->getMappaCategoriaArticoli(), $this->OttieniUtenteCorrente());$ritorno = $mappa;}if($ritornoJson) {$ritorno = json_encode($ritorno);}return $ritorno;}/*** @param User $agente* @return array*/public function ritornaArrayCodiciAssociatiAgenteFornitoreUtente(User $agente, $aggiungiApici = false, $fornitore = false): array{$arrayCodici = array();$db = $this->doctrine->getRepository(AssociazioneCodiciAgentiUtente::class)->createQueryBuilder('ass')->where('ass.utente = :utente')->setParameter('utente', $agente);if(!$fornitore){$db = $db->andWhere('ass.tipo = :tp OR ass.tipo IS NULL')->setParameter('tp', 'AGENTE');} else{$db = $db->andWhere('ass.tipo = :tp')->setParameter('tp', 'FORNITORE');}$db = $db->getQuery()->getResult();/** @var AssociazioneCodiciAgentiUtente $itm */foreach ($db as $itm){array_push($arrayCodici, $aggiungiApici ? ("'" . $itm->getCodice() . "'") : $itm->getCodice());}return $arrayCodici;}public function aggiungiApiciAdArrayString($elenco){$ritorno = array();foreach ($elenco as $item){array_push($ritorno, "'" . $item . "'");}return $ritorno;}/*** @return array*/public function ritornaArrayMarcheDaNascondereSeNonDisponibili(){$arrayCodici = array();/** @var NascondiEsauritiSuMarca[] $db */$db = $this->doctrine->getRepository(NascondiEsauritiSuMarca::class)->findAll();/** @var NascondiEsauritiSuMarca $itm */foreach ($db as $itm){if($itm->getAttivo())array_push($arrayCodici, "'" . $itm->getMarca() . "'");}return $arrayCodici;}/*** @param $link* @return false|string*/public function estraiIdMappaDaLink($link){$pos = strpos($link, '-');return substr($link, 0, $pos);}/*** @param Categorie $categoria* @param Request $request* @param $user* @return void*/public function inserisciStatisticaNavigazioneCategoria(Categorie $categoria, Request $request, $user){try{$conn = $this->doctrine->getConnection();$sql = "INSERT INTO statistiche_categorie (categoria_id, azienda_id, data, indirizzo_ip, nome, codice, user_agent) VALUES (?, ?, NOW(), ?, ?, ?, ?);";$stmt = $conn->prepare($sql);$stmt->bindValue(1, $categoria->getId());$stmt->bindValue(2, $user ? $user->getId() : null);$stmt->bindValue(3, $request->getClientIp());$stmt->bindValue(4, $categoria->getNome());$stmt->bindValue(5, $categoria->getCodice());$stmt->bindValue(6, $request->headers->get('User-Agent'));$stmt->execute();} catch (\Exception $ex){$this->DebuggaException($ex, 'Errore inserimento statistica navigazione categoria');}}/*** @return TipoOrdine[]*/public function RitornaTipiOrdine(): array{/** @var TipoOrdine[] $ritorno */$ritorno = $this->doctrine->getRepository(TipoOrdine::class)->createQueryBuilder('tipoOrdine')->orderBy('tipoOrdine.testoVisualizzato')->getQuery()->getResult();return $ritorno;}/*** @param User $user* @param string $ambito* @param string $dettaglio* @param bool $forzaInserimento*/public function ScriviRegistroAttivitaUtente($user, $ambito, $dettaglio, $forzaInserimento = false){try {if(true) {$conn = $this->doctrine->getConnection();$sql = "INSERT INTO registro_attivita_utenti(user_id, role, ragione_sociale, data, ambito, dettaglio) VALUES(?,?,?,NOW(),?,?);";$stmt = $conn->prepare($sql);$stmt->bindValue(1, $user != null ? $user->getId() : null);$stmt->bindValue(2, $user != null ? print_r($user->getRoles(), true) : null);$stmt->bindValue(3, $user != null ? $user->getRagioneSociale() : null);$stmt->bindValue(4, $ambito);$stmt->bindValue(5, $dettaglio);$stmt->execute();}}catch (PDOException $ex){$this->logger->critical("Errore inserimento registro attività utente --- " . $ambito . ' -- ' . $dettaglio . "-EXC:" . $ex->getMessage() . "Trace: " . $ex->getTraceAsString());}catch (\Exception $ex){$this->logger->critical("Errore inserimento registro attività utente --- " . $ambito . ' -- ' . $dettaglio . "-EXC:" . $ex->getMessage() . "Trace: " . $ex->getTraceAsString());}}/*** @param $lenght* @return string* @throws RandomException*/public function randomString2($lenght = 10): string{return bin2hex(random_bytes($lenght));}/*** @param $ip string* @param $debug string* @param $esito boolean* @param $messaggio string* @param $utente User*/public function ScriviRegistroAttivita($ip, $debug, $esito, $messaggio, $utente, $collegamento="", $categoria1="", $categoria2=""){try {$conn = $this->doctrine->getConnection();$sql = "INSERT INTO registro_attivita(utente_id, data, esito, messaggio, client_ip, debug, collegamento, categoria1, categoria2) VALUES(?,NOW(),?,?,?,?,?,?,?);";$stmt = $conn->prepare($sql);$stmt->bindValue(1, $utente != null ? $utente->getId() : null);$stmt->bindValue(2, $esito ? 1 : 0);$stmt->bindValue(3, $messaggio);$stmt->bindValue(4, $ip);$stmt->bindValue(5, $debug);$stmt->bindValue(6, $collegamento);$stmt->bindValue(7, $categoria1);$stmt->bindValue(8, $categoria2);$stmt->execute();}catch (PDOException $ex){$this->logger->critical("Errore inserimento registro attività --- " . $messaggio . "-EXC:" . $ex->getMessage() . "Trace: " . $ex->getTraceAsString());}catch (\Exception $ex){$this->logger->critical("Errore inserimento registro attività --- " . $messaggio . "-EXC:" . $ex->getMessage() . "Trace: " . $ex->getTraceAsString());}}public function DebuggaException(\Exception $ex, $messaggioIniziale = '', $ritornaStringa = false, $utente = null, $collegamento="", $categoria1="", $categoria2=""){$this->logger->error($messaggioIniziale . ' Eccezzione: ' . $ex->getMessage() . '<br/>Riga: ' . $ex->getLine() . '<br/>File: ' . $ex->getFile() . '<br/>Trace: ' . $ex->getTraceAsString());$this->ScriviRegistroAttivita('', '', false, $messaggioIniziale . ' Eccezzione: ' . $ex->getMessage() . '<br/>Riga: ' . $ex->getLine() . '<br/>File: ' . $ex->getFile() . '<br/>Trace: ' . $ex->getTraceAsString(), $utente, $collegamento, $categoria1, $categoria2);if($ritornaStringa){return $messaggioIniziale . ' Eccezzione: ' . $ex->getMessage() . '<br/>Riga: ' . $ex->getLine() . '<br/>File: ' . $ex->getFile() . '<br/>Trace: ' . $ex->getTraceAsString();}return true;}public function ScriviLogDebug($messaggio){if ($this->logger){$this->logger->debug($messaggio);}}/*** @param Request $request* @param $codiceAnagrafica* @param false $soloVisibiliAlCliente* @param string $cat1* @param string $cat2* @param string $cat3* @param string $cat4* @param string $cat5* @param string $articolo* @param string $marca* @param string $codDim1* @param string $codDim2* @param string $codDim3* @param string $codDim4* @param string $codDim5* @return array*/public function ritornaRisorseAnagrafiche(Request $request, $codiceAnagrafica = "", $soloVisibiliAlCliente = false, $cat1 = '', $cat2 = '', $cat3 = '', $cat4 = '', $cat5 = '', $articolo = '', $marca = '', $codDim1 = '', $codDim2 = '', $codDim3 = '', $codDim4 = '', $codDim5 = '' ){/** @var RisorseAnagrafiche[] $risorse */$risorse = $this->doctrine->getRepository(RisorseAnagrafiche::class)->createQueryBuilder('risorse_anagrafiche')->where("risorse_anagrafiche.codiceAnagrafica = :anagrafica")->setParameter('anagrafica', $codiceAnagrafica)->andWhere('risorse_anagrafiche.categoria = :cat')->setParameter('cat', $request->get('categoria'))->andWhere("risorse_anagrafiche.codiceCategoria1 = :cat1")->setParameter('cat1', $cat1)->andWhere('risorse_anagrafiche.codiceCategoria2 = :cat2')->setParameter('cat2', $cat2)->andWhere('risorse_anagrafiche.codiceCategoria3 = :cat3')->setParameter('cat3', $cat3)->andWhere('risorse_anagrafiche.codiceCategoria4 = :cat4')->setParameter('cat4', $cat4)->andWhere('risorse_anagrafiche.codiceCategoria5 = :cat5')->setParameter('cat5', $cat5)->andWhere('risorse_anagrafiche.codiceArticolo = :art')->setParameter('art', $articolo)->andWhere('risorse_anagrafiche.marca = :marca')->setParameter('marca', $marca)->andWhere('risorse_anagrafiche.codiceDimensione1 = :dim1')->setParameter('dim1', $codDim1)->andWhere('risorse_anagrafiche.codiceDimensione2 = :dim2')->setParameter('dim2', $codDim2)->andWhere('risorse_anagrafiche.codiceDimensione3 = :dim3')->setParameter('dim3', $codDim3)->andWhere('risorse_anagrafiche.codiceDimensione4 = :dim4')->setParameter('dim4', $codDim4)->andWhere('risorse_anagrafiche.codiceDimensione5 = :dim5')->setParameter('dim5', $codDim5);if($soloVisibiliAlCliente){$risorse = $risorse->andWhere('risorse_anagrafiche.visibileAlCliente = 1');}$risorse = $risorse->orderBy('risorse_anagrafiche.dataRisorsa', 'DESC')->getQuery()->getResult();$ritorno = array();$sorting = array();$colonne = array(array('title' => 'idRisorsa','field' => 'idRisorsa','visible' => false),);$getCol = true;if(count($risorse) > 0){foreach ($risorse as $r){$arrTemp = array('idRisorsa' => $r->getId(),);$arrTempCol = array();/** @var RisorseAnagraficheColonneValori[] $campi */$campi = $r->getDettaglioCampi();foreach ($campi as $dettaglio){if($getCol){$arrTempCol['title'] = $dettaglio->getColonna()->getHeaderVisualizzato();$arrTempCol['field'] = $dettaglio->getNomeColonna();if($dettaglio->getColonna()->getOrdinazioneOrdinamento()){ //è presente l'ordinamento$sorting[$dettaglio->getColonna()->getOrdinazioneOrdinamento()] = array('field' => $dettaglio->getNomeColonna(),'direction' => $dettaglio->getColonna()->getDirezioneOrdinamento() == 'desc' ? 'desc' : 'asc',);}}switch ($dettaglio->getColonna()->getTipoDato()){case 'text':{if($getCol){$arrTempCol['sorter'] = 'text';$arrTempCol['headerFilter'] = 'input';}$arrTemp[$dettaglio->getNomeColonna()] = $dettaglio->getValore();break;}case 'integer':{if($getCol){$arrTempCol['align'] = 'right';$arrTempCol['sorter'] = 'number';$arrTempCol['headerFilter'] = 'number';}$arrTemp[$dettaglio->getNomeColonna()] = $dettaglio->getValoreInteger();break;}case 'decimal':{if($getCol){$arrTempCol['align'] = 'right';$arrTempCol['sorter'] = 'number';$arrTempCol['headerFilter'] = 'number';}$arrTemp[$dettaglio->getNomeColonna()] = $dettaglio->getValoreDecimale();break;}case 'boolean':{if($getCol){$arrTempCol['align'] = 'center';$arrTempCol['sorter'] = 'boolean';$arrTempCol['headerFilter'] = 'checkbox';}$arrTemp[$dettaglio->getNomeColonna()] = $dettaglio->getValoreBoolean();break;}case 'datetime':case 'date':case 'time':{if($getCol){$arrTempCol['sorter'] = 'date';$arrTempCol['headerFilter'] = 'input';}if($dettaglio->getColonna()->getTipoDato() == 'datetime'){$arrTemp[$dettaglio->getNomeColonna()] = $dettaglio->getValoreDatetime()->format('d/m/Y H:i:s');}else if ($dettaglio->getColonna()->getTipoDato() == 'date'){$arrTemp[$dettaglio->getNomeColonna()] = $dettaglio->getValoreDatetime()->format('d/m/Y');}else if ($dettaglio->getColonna()->getTipoDato() == 'time'){$arrTemp[$dettaglio->getNomeColonna()] = $dettaglio->getValoreDatetime()->format('H:i:s');}break;}}if($getCol){array_push($colonne, $arrTempCol);}}if($getCol){$getCol = false;}array_push($ritorno, $arrTemp);}}ksort($sorting, SORT_NUMERIC); //Ordino in base alle chiavi che sono le posizioni di ordinamentoreturn array('data' => $ritorno,'colonne' => $colonne,'sorting' => $sorting,);}public function ritornaPathRisorse(){$pathBaseRisorse = $this->impostazioni->ritornaImpostazioneDaNome('PathRecuperoRisorse');if (!$this->endsWith($pathBaseRisorse, DIRECTORY_SEPARATOR))$pathBaseRisorse .= DIRECTORY_SEPARATOR;return $pathBaseRisorse;}public function ritornaPathBaseScambioDati(){$pathBaseRisorse = $this->impostazioni->ritornaImpostazioneDaNome('PathFileBaseScambioDati');if (!$this->endsWith($pathBaseRisorse, DIRECTORY_SEPARATOR))$pathBaseRisorse .= DIRECTORY_SEPARATOR;return $pathBaseRisorse;}public function ritornaTempFolderPath(){$ret = sys_get_temp_dir();if(!$this->endsWith($ret, DIRECTORY_SEPARATOR))$ret = $ret . DIRECTORY_SEPARATOR;return $ret;}/** @return array */public function pagineEComponentiRitornaTipiPagina(){return Templating::PagineEComponentiRitornaTipiPagina();}/** @return array */public function ritonaTipiPaginaMetaTags(){return Templating::RitornaTipiPaginaPerMetaTag();}/** @return Articoli* @param $codiceArticolo string*/function ritornaArticoloSeInserito($codiceArticolo, $codiceMacroCategoria=null){if($codiceMacroCategoria){$repo = $this->doctrine->getRepository(Articoli::class)->findBy(array('codice' => $codiceArticolo, 'macroCategoria' => $codiceMacroCategoria));}else{$repo = $this->doctrine->getRepository(Articoli::class)->findBy(array('codice' => $codiceArticolo));}if (count($repo) > 0)return $repo[0];elsereturn null;}/** @return Categorie* @param $codiceCategoria string*/function ritornaCategoriaSeInserita($codiceCategoria, $colonnaProvenienza){$repo = $this->doctrine->getRepository(Categorie::class)->findBy(['codice' => $codiceCategoria, 'colonnaProvenienza' => $colonnaProvenienza]);if (count($repo) > 0)return $repo[0];elsereturn null;}/** @return CategorieAlbero* @param $codiceCategoriaAlbero string*/function ritornaCategoriaAlberoSeInserita($codiceCategoriaAlbero, $livello){$repo = $this->doctrine->getRepository(CategorieAlbero::class)->findBy(['codice' => $codiceCategoriaAlbero, 'colonnaProvenienza' => $livello]);if (count($repo) > 0)return $repo[0];elsereturn null;}/*** @param User|UserInterface $agente* @param Ordini $ordine* @return bool*/function VerificaAssociazioneOrdineAgente(User|UserInterface $agente, Ordini $ordine){$ritorno = false;$codiciAgente = self::ritornaArrayCodiciAssociatiAgenteFornitoreUtente($agente);if($ordine->getAgente() == $agente && in_array($ordine->getAnagrafica()->getCodiceAgente(), $codiciAgente)){$ritorno = true;}return $ritorno;}/*** @param $idTipologiaPreimpostata* @return TipologiePreimpostate|null*/public function ritornaTipologiaPreimpostataDaId($idTipologiaPreimpostata){/** @var TipologiePreimpostate[] $tip */$tip = $this->doctrine->getRepository(TipologiePreimpostate::class)->createQueryBuilder('tipologie_preimpostate')->leftJoin('tipologie_preimpostate.lista', 'lista')->where('tipologie_preimpostate.id = :i')->setParameter('i', $idTipologiaPreimpostata)->getQuery()->getResult();if (count($tip) > 0){$tip = $tip[0];}/** @var $tip TipologiePreimpostate */return $tip;}/** @return MappaCategorieArticoli* @param $articolo Articoli|Articolo* @param $cat1 Categorie* @param $cat2 Categorie* @param $cat3 Categorie* @param $cat4 Categorie* @param $cat5 Categorie* @param $marca string*/function ritornaMappaCategoriaArticoliSeInserita($articolo, $cat1, $cat2, $cat3, $cat4, $marca, $cat5 = null){$repo = $this->doctrine->getRepository(MappaCategorieArticoli::class);$idArticolo = '';if($articolo instanceof Articoli)$idArticolo = $articolo->getId();else if ($articolo instanceof Articolo)$idArticolo = $articolo->id;$qb = $repo->createQueryBuilder('mappa_categorie_articoli')->select()->where('mappa_categorie_articoli.articolo = :articolo')->setParameter('articolo', $idArticolo);if ($cat1 != null)$qb->andWhere('mappa_categorie_articoli.categoria1 = :cat1')->setParameter('cat1', $cat1->getId());if ($cat2 != null)$qb->andWhere('mappa_categorie_articoli.categoria2 = :cat2')->setParameter('cat2', $cat2->getId());if ($cat3 != null)$qb->andWhere('mappa_categorie_articoli.categoria3 = :cat3')->setParameter('cat3', $cat3->getId());if ($cat4 != null)$qb->andWhere('mappa_categorie_articoli.categoria4 = :cat4')->setParameter('cat4', $cat4->getId());if ($cat5 != null)$qb->andWhere('mappa_categorie_articoli.categoria5 = :cat5')->setParameter('cat5', $cat5->getId());if ($marca != null)$qb->andWhere('mappa_categorie_articoli.marca = :marca')->setParameter('marca', $marca);$res = $qb->getQuery()->getResult();if (count($res) > 0)return $res[0];elsereturn null;}/** @param $mappaCatArt MappaCategorieArticoli* @param CategorieAlbero$cat1* @param $cat2 CategorieAlbero* @param $cat3 CategorieAlbero* @param $cat4 CategorieAlbero* @param $cat5 CategorieAlbero* @param CategorieAlbero $cat6* @param $cat7 CategorieAlbero* @param $cat8 CategorieAlbero* @param $cat9 CategorieAlbero* @param $cat10 CategorieAlbero*@return AssociazioneCategorieAlberoMappaCategorieArticoli*/function ritornaAssociazioneCategorieAlberoMappaCategoriaArticoliSeInserita($mappaCatArt, $cat1, $cat2, $cat3, $cat4, $cat5 = null, $cat6 = null, $cat7 = null, $cat8 = null, $cat9 = null, $cat10 = null){$repo = $this->doctrine->getRepository(AssociazioneCategorieAlberoMappaCategorieArticoli::class);$qb = $repo->createQueryBuilder('associazione_categorie_albero_mappa_categorie_articoli')->leftJoin('associazione_categorie_albero_mappa_categorie_articoli.categoriaAlbero1', 'cat1')->leftJoin('associazione_categorie_albero_mappa_categorie_articoli.categoriaAlbero2', 'cat2')->leftJoin('associazione_categorie_albero_mappa_categorie_articoli.categoriaAlbero3', 'cat3')->leftJoin('associazione_categorie_albero_mappa_categorie_articoli.categoriaAlbero4', 'cat4')->leftJoin('associazione_categorie_albero_mappa_categorie_articoli.categoriaAlbero5', 'cat5')->leftJoin('associazione_categorie_albero_mappa_categorie_articoli.categoriaAlbero6', 'cat6')->leftJoin('associazione_categorie_albero_mappa_categorie_articoli.categoriaAlbero7', 'cat7')->leftJoin('associazione_categorie_albero_mappa_categorie_articoli.categoriaAlbero8', 'cat8')->leftJoin('associazione_categorie_albero_mappa_categorie_articoli.categoriaAlbero9', 'cat9')->leftJoin('associazione_categorie_albero_mappa_categorie_articoli.categoriaAlbero10', 'cat10')->where('associazione_categorie_albero_mappa_categorie_articoli.mappaCategoriaArticolo = :mappa')->setParameter(":mappa", $mappaCatArt);if ($cat1 != null)$qb->andWhere('cat1.id = :ct1')->setParameter('ct1', $cat1->getId());if ($cat2 != null)$qb->andWhere('cat2.id = :ct2')->setParameter('ct2', $cat2->getId());if ($cat3 != null)$qb->andWhere('cat3.id = :ct3')->setParameter('ct3', $cat3->getId());if ($cat4 != null)$qb->andWhere('cat4.id = :ct4')->setParameter('ct4', $cat4->getId());if ($cat5 != null)$qb->andWhere('cat5.id = :ct5')->setParameter('ct5', $cat5->getId());if ($cat6 != null)$qb->andWhere('cat6.id = :ct6')->setParameter('ct6', $cat6->getId());if ($cat7 != null)$qb->andWhere('cat7.id = :ct7')->setParameter('ct7', $cat7->getId());if ($cat8 != null)$qb->andWhere('cat8.id = :ct8')->setParameter('ct8', $cat8->getId());if ($cat9 != null)$qb->andWhere('cat9.id = :ct9')->setParameter('ct9', $cat9->getId());if ($cat10 != null)$qb->andWhere('cat10.id = :ct10')->setParameter('ct10', $cat10->getId());$res = $qb->getQuery()->getResult();if (count($res) > 0)return $res[0];elsereturn null;}/*** @param $tipoPagina* @param $valoriSupporto* @return string|null*/public function ritornaDefaultLayoutPagineEComponenti($tipoPagina, $valoriSupporto, $soloForm = false){return Templating::ritornaDefaultLayoutPagineEComponenti($tipoPagina, $valoriSupporto, $this->twig, $soloForm);}/*** @param $tipoPagina string* @return string*/public function pagineEComponentiRitornaNomeDaValoreTipoPagina($tipoPagina){$arr = $this->pagineEComponentiRitornaTipiPagina();foreach ($arr as $key => $value){if ($value == $tipoPagina)return $key;}return "";}/*** @param Ordine|Carrello $ordine* @return array|null*/public function creaArrayRaggruppatoPerVariantiVisualizzazioneOrizzontaleOrdineCarrello($ordine){$arrayDivisioneArticoli = array(); // {// codiceArticolo : { articolo : (classeArticolo), divisioneHeaderRiga : [ arrayDi->divisioneHeaderRiga ] },// articoliSenzaVarianti : [ righe ]// }$arrayDivisioneHeaderRiga = array(); // { headerRiga : [ arrayDivisioneInColonne ] }$arrayDivisioneInColonne = array(); // { codiceVariante5 : [ righe ]} codiceVariante5 è il codice dell'ultima variante da inserire in colonna usata come chiave//VARIABILI ESAME$esameCodiceArticolo = '';$classeArticoloEsame = null;$arrayTemporaneHeaderRiga = array();$esameHeaderRiga = '';$arrayTemporaneoDivisioneIncolonne = array();$arrayTemporaneoSchemaVariantiDisponibiliArticolo = array();$codiceDimensione5Inserita = array();$listaRigheSenzaVarianti = array();$this->logger->info("Conteggio righe ordine: " . count($ordine->righe));foreach ($ordine->righe as $riga) {$this->logger->info("Array raggruppato varianti 1: Codice variante: " . $riga->codiceVariante);$trovataVariante = true;if ($riga->variante == null || $riga->variante->id == '') {array_push($listaRigheSenzaVarianti, $riga);$trovataVariante = false;}$this->logger->info("Valore di -trovata variante- : " . ($trovataVariante ? 'True' : 'False'));if($trovataVariante) {if ($esameCodiceArticolo == '' || $esameCodiceArticolo != $riga->mappaCategoriaArticolo->articolo->codice) {if ($esameCodiceArticolo != '') {$arrayTemporaneHeaderRiga[$esameHeaderRiga] = $arrayTemporaneoDivisioneIncolonne;$arrayDivisioneArticoli['articoliConVarianti'][$esameCodiceArticolo] = array('articolo' => $classeArticoloEsame,'divisioneHeaderRiga' => $arrayTemporaneHeaderRiga,'schemaVariantiDisponibili' => $arrayTemporaneoSchemaVariantiDisponibiliArticolo);}$classeArticoloEsame = $riga->mappaCategoriaArticolo->articolo;$esameCodiceArticolo = $riga->mappaCategoriaArticolo->articolo->codice;$this->logger->info("Esame codice articolo: " . $esameCodiceArticolo);$arrayTemporaneHeaderRiga = array();$arrayTemporaneoSchemaVariantiDisponibiliArticolo = array();$codiceDimensione5Inserita = array();for ($i = 1; $i <= count($riga->mappaCategoriaArticolo->varianti); $i++) {$vrtn = $riga->mappaCategoriaArticolo->varianti[$i - 1];if (!in_array($vrtn->codiceDimensione5, $codiceDimensione5Inserita)) {$arrayTemporaneoSchemaVariantiDisponibiliArticolo[$vrtn->codiceDimensione5] = $vrtn;array_push($codiceDimensione5Inserita, $vrtn->codiceDimensione5);}}$esameHeaderRiga = $this->generaHeaderRiga($riga->variante);$this->logger->info("Esame header riga: " . $esameHeaderRiga);$arrayTemporaneoDivisioneIncolonne = array();}if ($esameHeaderRiga != $this->generaHeaderRiga($riga->variante)) {$this->logger->info("Esame header riga diverso da nuovo generato. Vecchio: " . $esameHeaderRiga . " --- Nuovo: " . $this->generaHeaderRiga($riga->variante));$arrayTemporaneHeaderRiga[$esameHeaderRiga] = $arrayTemporaneoDivisioneIncolonne;$esameHeaderRiga = $this->generaHeaderRiga($riga->variante);$arrayTemporaneoDivisioneIncolonne = array();}if (key_exists($riga->variante->codiceDimensione5, $arrayTemporaneoDivisioneIncolonne)) {$this->logger->info("Array temporaneo divisione in colonne contiene codiceDimensione5: " . $riga->variante->codiceDimensione5);array_push($arrayTemporaneoDivisioneIncolonne[$riga->variante->codiceDimensione5], $riga);} else {$this->logger->info("Array temporaneo divisione in colonne NON contiene codiceDimensione5: " . $riga->variante->codiceDimensione5);$arrayTemporaneoDivisioneIncolonne[$riga->variante->codiceDimensione5] = array($riga);}}}if (count($arrayTemporaneoDivisioneIncolonne) > 0) {$arrayTemporaneHeaderRiga[$esameHeaderRiga] = $arrayTemporaneoDivisioneIncolonne;$arrayDivisioneArticoli['articoliConVarianti'][$esameCodiceArticolo] = array('articolo' => $classeArticoloEsame,'divisioneHeaderRiga' => $arrayTemporaneHeaderRiga,'schemaVariantiDisponibili' => $arrayTemporaneoSchemaVariantiDisponibiliArticolo);}else{$arrayDivisioneArticoli['articoliConVarianti'] = array();}$arrayDivisioneArticoli['articoliSenzaVarianti'] = $listaRigheSenzaVarianti;return $arrayDivisioneArticoli;}/*** @param $offerta Offerta* @return array|null*/public function creaArrayRaggruppatoPerVariantiVisualizzazioneOrizzontaleOfferta($offerta){if($offerta instanceof Offerte){$offerta = Offerta::CreaDaConversioneEntita($offerta, $this->doctrine, $this, $this->OttieniUtenteCorrente(), $this->locale);}$arrayDivisioneArticoli = array(); // {// codiceArticolo : { articolo : (classeArticolo), divisioneHeaderRiga : [ arrayDi->divisioneHeaderRiga ] },// articoliSenzaVarianti : [ righe ]// }$arrayDivisioneHeaderRiga = array(); // { headerRiga : [ arrayDivisioneInColonne ] }$arrayDivisioneInColonne = array(); // { codiceVariante5 : [ righe ]} codiceVariante5 è il codice dell'ultima variante da inserire in colonna usata come chiave//VARIABILI ESAME$esameCodiceArticolo = '';$classeArticoloEsame = null;$arrayTemporaneHeaderRiga = array();$esameHeaderRiga = '';$arrayTemporaneoDivisioneIncolonne = array();$arrayTemporaneoSchemaVariantiDisponibiliArticolo = array();$codiceDimensione5Inserita = array();$listaRigheSenzaVarianti = array();$this->logger->info("Conteggio righe offerta: " . count($offerta->righe));foreach ($offerta->righe as $riga) {//$this->logger->info("Array raggruppato varianti 1: Codice variante: " . $riga->codiceVariante);$trovataVariante = true;if ($riga->collegamentoVariante == null || $riga->collegamentoVariante->id == '') {array_push($listaRigheSenzaVarianti, $riga);$trovataVariante = false;}$this->logger->info("Valore di -trovata variante- : " . ($trovataVariante ? 'True' : 'False'));if($trovataVariante) {if ($esameCodiceArticolo == '' || $esameCodiceArticolo != $riga->collegamentoMappaCategoriaArticolo->articolo->codice) {if ($esameCodiceArticolo != '') {$arrayTemporaneHeaderRiga[$esameHeaderRiga] = $arrayTemporaneoDivisioneIncolonne;$arrayDivisioneArticoli['articoliConVarianti'][$esameCodiceArticolo] = array('articolo' => $classeArticoloEsame,'divisioneHeaderRiga' => $arrayTemporaneHeaderRiga,'schemaVariantiDisponibili' => $arrayTemporaneoSchemaVariantiDisponibiliArticolo);}$classeArticoloEsame = $riga->collegamentoMappaCategoriaArticolo->articolo;$esameCodiceArticolo = $riga->collegamentoMappaCategoriaArticolo->articolo->codice;$this->logger->info("Esame codice articolo: " . $esameCodiceArticolo);$arrayTemporaneHeaderRiga = array();$arrayTemporaneoSchemaVariantiDisponibiliArticolo = array();$codiceDimensione5Inserita = array();for ($i = 1; $i <= count($riga->collegamentoMappaCategoriaArticolo->varianti); $i++) {$vrtn = $riga->collegamentoMappaCategoriaArticolo->varianti[$i - 1];if (!in_array($vrtn->codiceDimensione5, $codiceDimensione5Inserita)) {$arrayTemporaneoSchemaVariantiDisponibiliArticolo[$vrtn->codiceDimensione5] = $vrtn;array_push($codiceDimensione5Inserita, $vrtn->codiceDimensione5);}}$esameHeaderRiga = $this->generaHeaderRiga($riga->collegamentoVariante);$this->logger->info("Esame header riga: " . $esameHeaderRiga);$arrayTemporaneoDivisioneIncolonne = array();}if ($esameHeaderRiga != $this->generaHeaderRiga($riga->collegamentoVariante)) {$this->logger->info("Esame header riga diverso da nuovo generato. Vecchio: " . $esameHeaderRiga . " --- Nuovo: " . $this->generaHeaderRiga($riga->collegamentoVariante));$arrayTemporaneHeaderRiga[$esameHeaderRiga] = $arrayTemporaneoDivisioneIncolonne;$esameHeaderRiga = $this->generaHeaderRiga($riga->collegamentoVariante);$arrayTemporaneoDivisioneIncolonne = array();}if (key_exists($riga->collegamentoVariante->codiceDimensione5, $arrayTemporaneoDivisioneIncolonne)) {$this->logger->info("Array temporaneo divisione in colonne contiene codiceDimensione5: " . $riga->collegamentoVariante->codiceDimensione5);array_push($arrayTemporaneoDivisioneIncolonne[$riga->collegamentoVariante->codiceDimensione5], $riga);} else {$this->logger->info("Array temporaneo divisione in colonne NON contiene codiceDimensione5: " . $riga->collegamentoVariante->codiceDimensione5);$arrayTemporaneoDivisioneIncolonne[$riga->collegamentoVariante->codiceDimensione5] = array($riga);}}}if (count($arrayTemporaneoDivisioneIncolonne) > 0) {$arrayTemporaneHeaderRiga[$esameHeaderRiga] = $arrayTemporaneoDivisioneIncolonne;$arrayDivisioneArticoli['articoliConVarianti'][$esameCodiceArticolo] = array('articolo' => $classeArticoloEsame,'divisioneHeaderRiga' => $arrayTemporaneHeaderRiga,'schemaVariantiDisponibili' => $arrayTemporaneoSchemaVariantiDisponibiliArticolo);}else{$arrayDivisioneArticoli['articoliConVarianti'] = array();}$arrayDivisioneArticoli['articoliSenzaVarianti'] = $listaRigheSenzaVarianti;return $arrayDivisioneArticoli;}/*** @param $ordine Ordine* @return array|null*/public function creaArrayRaggruppatoPerVariantiVisualizzazioneOrizzontaleOrdine($ordine){$arrayDivisioneArticoli = array(); // {// codiceArticolo : { articolo : (classeArticolo), divisioneHeaderRiga : [ arrayDi->divisioneHeaderRiga ] },// articoliSenzaVarianti : [ righe ]// }$arrayDivisioneHeaderRiga = array(); // { headerRiga : [ arrayDivisioneInColonne ] }$arrayDivisioneInColonne = array(); // { codiceVariante5 : [ righe ]} codiceVariante5 è il codice dell'ultima variante da inserire in colonna usata come chiave//VARIABILI ESAME$esameCodiceArticolo = '';$classeArticoloEsame = null;$arrayTemporaneHeaderRiga = array();$esameHeaderRiga = '';$arrayTemporaneoDivisioneIncolonne = array();$arrayTemporaneoSchemaVariantiDisponibiliArticolo = array();$codiceDimensione5Inserita = array();$listaRigheSenzaVarianti = array();$this->logger->info("Conteggio righe ordine: " . count($ordine->righe));foreach ($ordine->righe as $riga) {//$this->logger->info("Array raggruppato varianti 1: Codice variante: " . $riga->codiceVariante);$trovataVariante = true;if ($riga->variante == null || $riga->variante->id == '') {array_push($listaRigheSenzaVarianti, $riga);$trovataVariante = false;}$this->logger->info("Valore di -trovata variante- : " . ($trovataVariante ? 'True' : 'False'));if($trovataVariante) {if ($esameCodiceArticolo == '' || $esameCodiceArticolo != $riga->mappaCategoriaArticolo->articolo->codice) {if ($esameCodiceArticolo != '') {$arrayTemporaneHeaderRiga[$esameHeaderRiga] = $arrayTemporaneoDivisioneIncolonne;$arrayDivisioneArticoli['articoliConVarianti'][$esameCodiceArticolo] = array('articolo' => $classeArticoloEsame,'divisioneHeaderRiga' => $arrayTemporaneHeaderRiga,'schemaVariantiDisponibili' => $arrayTemporaneoSchemaVariantiDisponibiliArticolo);}$classeArticoloEsame = $riga->mappaCategoriaArticolo->articolo;$esameCodiceArticolo = $riga->mappaCategoriaArticolo->articolo->codice;$this->logger->info("Esame codice articolo: " . $esameCodiceArticolo);$arrayTemporaneHeaderRiga = array();$arrayTemporaneoSchemaVariantiDisponibiliArticolo = array();$codiceDimensione5Inserita = array();for ($i = 1; $i <= count($riga->mappaCategoriaArticolo->varianti); $i++) {$vrtn = $riga->mappaCategoriaArticolo->varianti[$i - 1];if (!in_array($vrtn->codiceDimensione5, $codiceDimensione5Inserita)) {$arrayTemporaneoSchemaVariantiDisponibiliArticolo[$vrtn->codiceDimensione5] = $vrtn;array_push($codiceDimensione5Inserita, $vrtn->codiceDimensione5);}}$esameHeaderRiga = $this->generaHeaderRiga($riga->variante);$this->logger->info("Esame header riga: " . $esameHeaderRiga);$arrayTemporaneoDivisioneIncolonne = array();}if ($esameHeaderRiga != $this->generaHeaderRiga($riga->variante)) {$this->logger->info("Esame header riga diverso da nuovo generato. Vecchio: " . $esameHeaderRiga . " --- Nuovo: " . $this->generaHeaderRiga($riga->variante));$arrayTemporaneHeaderRiga[$esameHeaderRiga] = $arrayTemporaneoDivisioneIncolonne;$esameHeaderRiga = $this->generaHeaderRiga($riga->variante);$arrayTemporaneoDivisioneIncolonne = array();}if (key_exists($riga->variante->codiceDimensione5, $arrayTemporaneoDivisioneIncolonne)) {$this->logger->info("Array temporaneo divisione in colonne contiene codiceDimensione5: " . $riga->variante->codiceDimensione5);array_push($arrayTemporaneoDivisioneIncolonne[$riga->variante->codiceDimensione5], $riga);} else {$this->logger->info("Array temporaneo divisione in colonne NON contiene codiceDimensione5: " . $riga->variante->codiceDimensione5);$arrayTemporaneoDivisioneIncolonne[$riga->variante->codiceDimensione5] = array($riga);}}}if (count($arrayTemporaneoDivisioneIncolonne) > 0) {$arrayTemporaneHeaderRiga[$esameHeaderRiga] = $arrayTemporaneoDivisioneIncolonne;$arrayDivisioneArticoli['articoliConVarianti'][$esameCodiceArticolo] = array('articolo' => $classeArticoloEsame,'divisioneHeaderRiga' => $arrayTemporaneHeaderRiga,'schemaVariantiDisponibili' => $arrayTemporaneoSchemaVariantiDisponibiliArticolo);}else{$arrayDivisioneArticoli['articoliConVarianti'] = array();}$arrayDivisioneArticoli['articoliSenzaVarianti'] = $listaRigheSenzaVarianti;return $arrayDivisioneArticoli;}/*** @param $carrello Carrello* @return array|null*/public function creaArrayRaggruppatoPerVariantiVisualizzazioneOrizzontaleCarrello($carrello){$arrayDivisioneArticoli = array(); // {// codiceArticolo : { articolo : (classeArticolo), divisioneHeaderRiga : [ arrayDi->divisioneHeaderRiga ] },// articoliSenzaVarianti : [ righe ]// }$arrayDivisioneHeaderRiga = array(); // { headerRiga : [ arrayDivisioneInColonne ] }$arrayDivisioneInColonne = array(); // { codiceVariante5 : [ righe ]} codiceVariante5 è il codice dell'ultima variante da inserire in colonna usata come chiave//VARIABILI ESAME$esameCodiceArticolo = '';$classeArticoloEsame = null;$arrayTemporaneHeaderRiga = array();$esameHeaderRiga = '';$arrayTemporaneoDivisioneIncolonne = array();$arrayTemporaneoSchemaVariantiDisponibiliArticolo = array();$codiceDimensione5Inserita = array();$listaRigheSenzaVarianti = array();foreach ($carrello->righe as $riga){if (!$riga->variante){array_push($listaRigheSenzaVarianti, $riga);continue;}if ($esameCodiceArticolo == '' || $esameCodiceArticolo != $riga->mappaCategoriaArticolo->articolo->codice){if ($esameCodiceArticolo != ''){$arrayTemporaneHeaderRiga[$esameHeaderRiga] = $arrayTemporaneoDivisioneIncolonne;$arrayDivisioneArticoli['articoliConVarianti'][$esameCodiceArticolo] = array('articolo' => $classeArticoloEsame,'divisioneHeaderRiga' => $arrayTemporaneHeaderRiga,'schemaVariantiDisponibili' => $arrayTemporaneoSchemaVariantiDisponibiliArticolo);}$classeArticoloEsame = $riga->mappaCategoriaArticolo->articolo;$esameCodiceArticolo = $riga->mappaCategoriaArticolo->articolo->codice;$arrayTemporaneHeaderRiga = array();$arrayTemporaneoSchemaVariantiDisponibiliArticolo = array();$codiceDimensione5Inserita = array();for ($i = 1; $i <= count($riga->mappaCategoriaArticolo->varianti); $i++) {$vrtn = $riga->mappaCategoriaArticolo->varianti[$i - 1];if (!in_array($vrtn->codiceDimensione5, $codiceDimensione5Inserita)){$arrayTemporaneoSchemaVariantiDisponibiliArticolo[$vrtn->codiceDimensione5] = $vrtn;array_push($codiceDimensione5Inserita, $vrtn->codiceDimensione5);}}$esameHeaderRiga = $this->generaHeaderRiga($riga->variante);$arrayTemporaneoDivisioneIncolonne = array();}if ($esameHeaderRiga != $this->generaHeaderRiga($riga->variante)){$arrayTemporaneHeaderRiga[$esameHeaderRiga] = $arrayTemporaneoDivisioneIncolonne;$esameHeaderRiga = $this->generaHeaderRiga($riga->variante);$arrayTemporaneoDivisioneIncolonne = array();}if (key_exists($riga->variante->codiceDimensione5, $arrayTemporaneoDivisioneIncolonne)){array_push($arrayTemporaneoDivisioneIncolonne[$riga->variante->codiceDimensione5], $riga);}else{$arrayTemporaneoDivisioneIncolonne[$riga->variante->codiceDimensione5] = array($riga);}}$arrayTemporaneHeaderRiga[$esameHeaderRiga] = $arrayTemporaneoDivisioneIncolonne;$arrayDivisioneArticoli['articoliConVarianti'][$esameCodiceArticolo] = array('articolo' => $classeArticoloEsame,'divisioneHeaderRiga' => $arrayTemporaneHeaderRiga,'schemaVariantiDisponibili' => $arrayTemporaneoSchemaVariantiDisponibiliArticolo);$arrayDivisioneArticoli['articoliSenzaVarianti'] = $listaRigheSenzaVarianti;return $arrayDivisioneArticoli;}/*** @param $variante Variante* @return string*/public function generaHeaderRiga($variante){$ritorno = "";if ($variante->codiceDimensione1 != ""){if($variante->associazioneArticoliCliente && $variante->associazioneArticoliCliente->codiceDimensione1 != '')$ritorno .= $variante->associazioneArticoliCliente->descrizioneDimensione1 . "/////";else$ritorno .= $variante->descrizioneDimensione1 . "/////";}if ($variante->codiceDimensione2 != ""){if($variante->associazioneArticoliCliente && $variante->associazioneArticoliCliente->codiceDimensione2 != '')$ritorno .= $variante->associazioneArticoliCliente->descrizioneDimensione2 . "/////";else$ritorno .= $variante->descrizioneDimensione2 . "/////";}if ($variante->codiceDimensione3 != ""){if($variante->associazioneArticoliCliente && $variante->associazioneArticoliCliente->codiceDimensione3 != '')$ritorno .= $variante->associazioneArticoliCliente->descrizioneDimensione3 . "/////";else$ritorno .= $variante->descrizioneDimensione3 . "/////";}if ($variante->codiceDimensione4 != ""){if($variante->associazioneArticoliCliente && $variante->associazioneArticoliCliente->codiceDimensione4 != '')$ritorno .= $variante->associazioneArticoliCliente->descrizioneDimensione4 . "/////";else$ritorno .= $variante->descrizioneDimensione4 . "/////";}//Salto il codiceDimensione5 perchè è incolonnatoreturn substr($ritorno, 0, strlen($ritorno));}/*===================================================================================================================================================================== SEO META ===================================================================================================================================================================*/public function ritornaSeoMetatags($route, $variabiliTemplate, $idPagina = null){return Templating::ritornaMetaTagsRoute($route, $variabiliTemplate, $this->doctrine, $this, $idPagina);}/*======================================================================================================================================================================= COUPON ===================================================================================================================================================================*//*** @param $dettaglioCoupon CouponDettaglio* @param $carrello Carrello* @return RitornoValiditaCoupon* @throws \Exception*/public function verificaValiditaCoupon($dettaglioCoupon, $carrello){$ritorno = new RitornoValiditaCoupon();$ritorno->esito = $dettaglioCoupon->getCoupon()->getAttivo();if (!$ritorno->esito) {$ritorno->messaggio = "Coupon non attivo!";return $ritorno;}else{//il coupon è attivo//VERIFICO SE IL COUPON NON è ANCORA STATO UTILIZZATOif ($dettaglioCoupon->getUtilizzato()){$ritorno->esito = false;$ritorno->messaggio = "Coupon già utilizzato!";return $ritorno;}//VERIFICO SE IL COUPON HA RAGGIUNTO IL LIMITE DI UTILIZZIif ($dettaglioCoupon->getNumeroUtilizziConsentiti() != -1 && (count($dettaglioCoupon->getUtilizzo()) > $dettaglioCoupon->getNumeroUtilizziConsentiti())){$ritorno->esito = false;$ritorno->messaggio = "E' stato raggiunto il limite di utilizzi per il coupon selezionato!";return $ritorno;}//VERIFICO SE ESISTONO IMPORTi MINIMIif ($dettaglioCoupon->getImportoMinimoOrdine()){if ($dettaglioCoupon->getImportoMinimoOrdine() > $carrello->totale){$ritorno->esito = false;$ritorno->messaggio = "Per utilizzare questo coupon il carrello deve avere un valore di almeno € " . $dettaglioCoupon->getImportoMinimoOrdine();return $ritorno;}} else if ($dettaglioCoupon->getCoupon()->getImportoMinimoOrdine()){if ($dettaglioCoupon->getCoupon()->getImportoMinimoOrdine() > $carrello->totale){$ritorno->esito = false;$ritorno->messaggio = "Per utilizzare questo coupon il carrello deve avere un valore di almeno € " . $dettaglioCoupon->getCoupon()->getImportoMinimoOrdine();return $ritorno;}}//VERIFICO SE IL COUPON E' SCADUTOif ($dettaglioCoupon->getLimiteValidita()){$dataEsame = $dettaglioCoupon->getLimiteValidita();$dataEsame->setTime(0, 0, 0);$adesso = new \DateTime();$adesso->setTime(0, 0, 0);if ($adesso > $dataEsame){$ritorno->esito = false;$ritorno->messaggio = "Il coupon è scaduto il " . $dataEsame->format("d/m/Y");return $ritorno;}}}return $ritorno;}/*** @param $length* @return string* @throws \Exception*/public function generaStringaCasuale($length){$token = "";$codeAlphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";$codeAlphabet.= "abcdefghijklmnopqrstuvwxyz";$codeAlphabet.= "0123456789";$max = strlen($codeAlphabet); // editedfor ($i=0; $i < $length; $i++) {$token .= $codeAlphabet[random_int(0, $max-1)];}return $token;}/*** @param $carrello \App\Entity\Carrello* @return double*/function calcolaValoreScontoCoupon($carrello){$totaleScontoCoupon = 0;if ($carrello->getCouponDettaglioUtilizzo()){/** @var CouponDettaglio $coupon */$coupon = $carrello->getCouponDettaglioUtilizzo()->getDettaglioCoupon();//Non c'è il dettaglio allora prendo la testataif ($coupon->getCoupon()->getScontoPercentuale() != 0){$imponibileScontato = $carrello->getTotale();$imponibileScontato = $imponibileScontato - ($imponibileScontato * ($coupon->getCoupon()->getScontoPercentuale() / (float)100));$totaleScontoCoupon += $carrello->getTotale() - $imponibileScontato;}if ($coupon->getCoupon()->getScontoGenerico() != 0){$totaleScontoCoupon += $coupon->getCoupon()->getScontoGenerico();}if ($coupon->getScontoGenericoExtra() || $coupon->getScontoPercentualeExtra()){if ($coupon->getScontoPercentualeExtra() != 0){$imponibileScontato = $carrello->getTotale() - $totaleScontoCoupon;$imponibileScontato = $imponibileScontato - ($imponibileScontato * ($coupon->getScontoPercentualeExtra() / (float)100));$totaleScontoCoupon += $carrello->getTotale() - $imponibileScontato;}if ($coupon->getScontoGenericoExtra() != 0){$totaleScontoCoupon += $coupon->getScontoGenericoExtra();}}}return $totaleScontoCoupon;}//==================================================================================================================/** @return bool */public function controllaSeNazioneBlackList($nazione){$imp = $this->doctrine->getRepository(Nazioni::class)->findOneBy(array('siglaIso' => $nazione));if ($imp) {if ($imp->getBlacklist())return true;elsereturn false;}else{$this->ScriviRegistroAttivita("", "", false, "Sigla iso nazione non trovata. Sigla: " . $nazione, null);return false;}}/*** @param $tipoSchedulazione string* @param $ricorrenza string* @param $valoreRicorrenza string* @return \DateTime*/public function ottieniProssimaDataEsecuzione($tipoSchedulazione, $ricorrenza, $valoreRicorrenza){$ritorno = null;/** TIPO_SCHEDULAZIONE* "Una volta" => 'unaVolta',* "Ogni" => 'ogni'** RICORRENZA* "Ora" => 'ora',* "Giorno" => 'giorni',* "Mese" => 'mese'** Una volta si intente per esempio una volta all'ora $valore di ogni giorno oppure una volta al giorno numero $valore di ogni mese* La ricorrenza invece è ogni $valore ora oppure ogni $valore giorno** Se non è presente la data di ultimo avvio parte subito*/$dataAttuale = new Carbon();$dataProssimaEsecuzione = $dataAttuale;switch ($tipoSchedulazione) {case "unaVolta":{if ($ricorrenza == "ora") {$dataProssimaEsecuzione->setTime($valoreRicorrenza, $dataProssimaEsecuzione->format('i'), $dataProssimaEsecuzione->format('s'));$dataProssimaEsecuzione = $dataAttuale->addDay();} else if ($ricorrenza == "giorni") {$dataProssimaEsecuzione = $dataProssimaEsecuzione->addMonth();$dataProssimaEsecuzione->setDate($dataProssimaEsecuzione->format('y'), $dataProssimaEsecuzione->format('m'), $valoreRicorrenza);} else if ($ricorrenza == "mese") {$dataProssimaEsecuzione->addYear();$dataProssimaEsecuzione->setDate($dataProssimaEsecuzione->format('y'), $valoreRicorrenza, 1);}break;}case "ogni":{if ($ricorrenza == "ora") {$dataProssimaEsecuzione = $dataProssimaEsecuzione->addHours($valoreRicorrenza);$dataProssimaEsecuzione->setTime($dataProssimaEsecuzione->format('h'), 0, 0);} else if ($ricorrenza == "giorni") {$dataProssimaEsecuzione = $dataProssimaEsecuzione->addDays($valoreRicorrenza);$dataProssimaEsecuzione->setTime(0, 0, 0);} else if ($ricorrenza == "mese") {$dataProssimaEsecuzione = $dataProssimaEsecuzione->addMonths($valoreRicorrenza);$dataProssimaEsecuzione->setTime(0,0,0);$dataProssimaEsecuzione->setDate($dataProssimaEsecuzione->format('y'), $dataProssimaEsecuzione->format('m'), $dataProssimaEsecuzione->format('d'));}break;}}return $dataProssimaEsecuzione;}/*** @param $nomePermesso string* @param $utente User* @return boolean*/public function controllaPermessoPresente($nomePermesso, $utente){$ritorno = false;/** @var $permessi PermessiAccessoUtenti[] */$permessi = $this->doctrine->getRepository(PermessiAccessoUtenti::class)->findBy(array('utente' => $utente, 'nomePermesso' => $nomePermesso));if (count($permessi) > 0){$ritorno = true;}return $ritorno;}/*** @param Sconti[] $sconti* @param boolean $soloDaApplicareSempre //Se attiva ritorna solo la stringa sconti con i prezzi da applicare solo se il prezzo è flaggato come netto*/public static function CreaStringaScontiDaArray($sconti, $soloDaApplicareSempre = false){$ritorno = "";foreach ($sconti as $sc){if($soloDaApplicareSempre){if($sc->applicaSempre){$ritorno = ($ritorno . "#" . $sc->sconto);}}else{$ritorno = ($ritorno . "#" . $sc->sconto);}}return $ritorno;}/*** @param $secret string* @param $agente User|null* @param $anagrafica Anagrafiche|null* @param $utente User|null*/public function RecuperaCarrello($secret, $agente, $anagrafica, $utente){$altriDati = $this->RitornaAltriDatiUtente();if ($secret && $secret != '') {$carrello = $this->doctrine->getRepository(\App\Entity\Carrello::class)->findOneBy(array('secret' => $secret));} else {if ($agente && $anagrafica && ($agente->hasRole("ROLE_ADMIN") || $agente->hasRole('ROLE_COMMERCIALE') || $agente->hasRole("ROLE_AGENTE"))) {$carrello = $this->doctrine->getRepository(\App\Entity\Carrello::class)->findOneBy(array('anagrafica' => $anagrafica, 'agente' => $agente, 'tipoOrdine' => $altriDati->tipoOrdine != '' ? $altriDati->tipoOrdine : null));if ($anagrafica->getCodiceAliquotaIva() != '' && $anagrafica->getCodiceAliquotaIva()){$aliquotaIva = $anagrafica->getValoreAliquotaIva();}} else if ($agente) {if ($utente->getCodiceAliquotaIva() != '' && $utente->getCodiceAliquotaIva()){$aliquotaIva = $utente->getValoreAliquotaIva();}$carrello = $this->doctrine->getRepository(\App\Entity\Carrello::class)->findOneBy(array('anagrafica' => null, 'agente' => $agente, 'cliente' => $utente, 'tipoOrdine' => $altriDati->tipoOrdine != '' ? $altriDati->tipoOrdine : null));} else{if ($utente->getCodiceAliquotaIva() != '' && $utente->getCodiceAliquotaIva()){$aliquotaIva = $utente->getValoreAliquotaIva();}$carrello = $this->doctrine->getRepository(\App\Entity\Carrello::class)->findOneBy(array('cliente' => $utente, 'agente' => null, 'tipoOrdine' => $altriDati->tipoOrdine != '' ? $altriDati->tipoOrdine : null));}}return $carrello;}/*** @param $mappa MappaCategoriaArticolo* @param $variante Variante* @return RitornoCalcoloPrezzoNetto*/public function calcolaPrezzoNettoMappaOVariante($mappa, $variante = null){$prezzoNetto = (double)0;$ritorno = new RitornoCalcoloPrezzoNetto();$flagPrezzoNetto = false;if ($variante){if ($variante->listino){$prezzoNetto = $variante->listino->prezzo;$flagPrezzoNetto = $variante->listino->flagPrezzoNetto;$ritorno->prezzoLordo = $prezzoNetto;$ritorno->prezzoNetto = $prezzoNetto;} else {$ritorno->errori = "Listino non presente!";}}else if ($mappa){if ($mappa->listinoVendita){$prezzoNetto = $mappa->listinoVendita->prezzo;$flagPrezzoNetto = $mappa->listinoVendita->flagPrezzoNetto;$ritorno->prezzoLordo = $prezzoNetto;$ritorno->prezzoNetto = $prezzoNetto;} else{$ritorno->errori = "Listino non presente!";}} else{$ritorno->errori = "Mappa o variante non specificata!";}if ($ritorno->errori == "" && !$flagPrezzoNetto){$stringaSconti = ""; //-0.00#-3.00#-0.00#-0.00#-0.00#-0.00if (($variante != null && count($variante->sconti) > 0) || $mappa != null && count($mappa->sconti) > 0){$stringaSconti = ServiziController::CreaStringaScontiDaArray($variante != null ? $variante->sconti : $mappa->sconti);$ritorno->stringaSconti = $stringaSconti;$prezzoNetto = $this->elaboraStringaSconti($stringaSconti, $prezzoNetto);$ritorno->prezzoNetto = $prezzoNetto;}else if (count($mappa->scontiBase) > 0){$stringaSconti = $mappa->scontiBase[0]->sconto;$ritorno->stringaSconti = $stringaSconti;$prezzoNetto = $this->elaboraStringaSconti($stringaSconti, $prezzoNetto);$ritorno->prezzoNetto = $prezzoNetto;}}if ($ritorno->errori == "" && $flagPrezzoNetto){{}if (($variante != null && count($variante->sconti) > 0) || $mappa != null && count($mappa->sconti) > 0){$stringaSconti = ServiziController::CreaStringaScontiDaArray($variante != null ? $variante->sconti : $mappa->sconti, true);$ritorno->stringaSconti = $stringaSconti;$prezzoNetto = $this->elaboraStringaSconti($stringaSconti, $prezzoNetto);$ritorno->prezzoNetto = $prezzoNetto;}}$valorizzaPrezzo0SeScontisticaNonPresente = $this->impostazioni->ritornaImpostazioneDaNome('ValorizzaPrezzo0PerTuttiGliArticoliSenzaSconti');if($valorizzaPrezzo0SeScontisticaNonPresente == '1' && $ritorno->prezzoNetto == $ritorno->prezzoLordo){$ritorno->prezzoLordo = 0;$ritorno->prezzoNetto = 0;$ritorno->stringaSconti = '';}return $ritorno;}/*** @param $mappa MappaCategoriaArticolo|MappaCategorieArticoli* @param $imp ReturnImpostazioniServiceController* @param $variante Variante|Varianti* @param $richiestaDaB2b boolean* @return RitornoCalcoloDisponibile*/public function calcolaDisponibileMappaOVariante($mappa, ReturnImpostazioniServiceController $imp, $variante = null, $richiestaDaB2b = false){$imp->caricaCacheImpostazioniDaNomi(array('MostraDisponibilitaShop', 'MostraDisponibilitaMagazziniSecondari', 'DisponibileSommatoMagazziniSecondari', 'DisponibileSommatoMagazziniSecondariB2B'));$mostraDisponibilita = $imp->ritornaImpostazioneDaNome('MostraDisponibilitaShop');$mostraDisponibilitaMagazziniSecondari = $imp->ritornaImpostazioneDaNome('MostraDisponibilitaMagazziniSecondari');$sommaDisponibilita = $imp->ritornaImpostazioneDaNome('DisponibileSommatoMagazziniSecondari');$sommaDisponibilitaB2b = $imp->ritornaImpostazioneDaNome('DisponibileSommatoMagazziniSecondariB2B');$ritorno = new RitornoCalcoloDisponibile();$disponibile = 0;if ($mostraDisponibilita) {if ($variante) {if($variante instanceof Varianti){if ($variante->getDisponibile() !== null) {$disponibile = $variante->getDisponibile();$ritorno->disponibile = $disponibile;$ritorno->disponibileFinale = $disponibile;}}else {if ($variante->disponibile !== null) {$disponibile = $variante->disponibile;$ritorno->disponibile = $disponibile;$ritorno->disponibileFinale = $disponibile;}}} else if ($mappa) {if($mappa instanceof MappaCategorieArticoli){$disponibile = $mappa->getDisponibile();$ritorno->disponibile = $disponibile;$ritorno->disponibileFinale = $disponibile;}else {$disponibile = $mappa->disponibile;$ritorno->disponibile = $disponibile;$ritorno->disponibileFinale = $disponibile;}if ($mostraDisponibilitaMagazziniSecondari) {if($mappa instanceof MappaCategorieArticoli){/** @var MagazzinoSecondarioDisponibilita[] $magazziniSecondari */$magazziniSecondari = $this->doctrine->getRepository(MagazzinoSecondarioDisponibilita::class)->findBy(array('mappaCategorieArticoli' => $mappa));foreach ($magazziniSecondari as $itm){if($itm->getDisponibilita() && $itm->getDisponibilita() > 0){$ritorno->magazziniSecondari += $itm->getDisponibilita();}}}else {if ($mappa->magazziniSecondari && count($mappa->magazziniSecondari) > 0) {foreach ($mappa->magazziniSecondari as $itm) {if ($itm->disponibilita && count($itm->disponibilita) > 0) {foreach ($itm->disponibilita as $dsp) {$ritorno->magazziniSecondari += $dsp->disponibilita;}}}}}if($sommaDisponibilitaB2b && $richiestaDaB2b){$ritorno->disponibileFinale = $ritorno->disponibile + $ritorno->magazziniSecondari;}else if ($sommaDisponibilita && !$richiestaDaB2b) {$ritorno->disponibileFinale = $ritorno->disponibile + $ritorno->magazziniSecondari;}}}}return $ritorno;}/*** @param $albero AlberoMenuProdotti* @return ContenitoreCategoriePerFiltri*/public function ricavaCategorieDaAlbero($albero){$alberoEntity = $this->doctrine->getRepository(AlberoMenuProdotti::class)->find($albero);/** @var Categorie[]|CategorieAlbero[] $categorie */$categorie = $this->risaliAlberoCategorie($alberoEntity);$categorie = array_reverse($categorie);$contenitoreCategorie = new ContenitoreCategoriePerFiltri();if (array_key_exists(0, $categorie)){$contenitoreCategorie->idCat1 = $categorie[0]->getId();$contenitoreCategorie->nomeUnivocoCat1 = $categorie[0]->getNomeUnivoco();}if (array_key_exists(1, $categorie)){$contenitoreCategorie->idCat2 = $categorie[1]->getId();$contenitoreCategorie->nomeUnivocoCat2 = $categorie[1]->getNomeUnivoco();}if (array_key_exists(2, $categorie)){$contenitoreCategorie->idCat3 = $categorie[2]->getId();$contenitoreCategorie->nomeUnivocoCat3 = $categorie[2]->getNomeUnivoco();}if (array_key_exists(3, $categorie)){$contenitoreCategorie->idCat4 = $categorie[3]->getId();$contenitoreCategorie->nomeUnivocoCat4 = $categorie[3]->getNomeUnivoco();}if (array_key_exists(4, $categorie)){$contenitoreCategorie->idCat5 = $categorie[4]->getId();$contenitoreCategorie->nomeUnivocoCat5 = $categorie[4]->getNomeUnivoco();}return $contenitoreCategorie;}/*** @param $albero AlberoMenuProdotti* @param array $categorieTrovate* @return array*/function risaliAlberoCategorie($albero, $categorieTrovate = array()){$usaCategorieAlbero = $this->impostazioni->ritornaImpostazioneDaNome('UtilizzaCategorieAlberoPerGenerazione');if($usaCategorieAlbero == '1'){array_push($categorieTrovate, $albero->getCategoriaAlbero());}else {array_push($categorieTrovate, $albero->getCategoria());}if ($albero->getParentId()){$categorieTrovate = $this->risaliAlberoCategorie($albero->getParentId(), $categorieTrovate);}return $categorieTrovate;}/*** @param string $codiceCliente* @param User $agente* @return Anagrafiche|null*/public function ritornaAnagraficaShopSelezionataDaCookieIdentificativo($codiceCliente, $agente){$ritorno = null;if (!$agente->hasRole("ROLE_ADMIN") && !$agente->hasRole("ROLE_COMMERCIALE") ) {$listaCodiciAgente = self::ritornaArrayCodiciAssociatiAgenteFornitoreUtente($this->OttieniUtenteCorrente());}/** @var Anagrafiche[] $clSel */$clSel = $this->doctrine->getRepository(Anagrafiche::class)->createQueryBuilder('anagrafiche')->where('anagrafiche.codice = :cod')->setParameter('cod', $codiceCliente);if (!$agente->hasRole("ROLE_ADMIN") && !$agente->hasRole("ROLE_COMMERCIALE") ) {$clSel = $clSel->andWhere('anagrafiche.codiceAgente IN (:list)')->setParameter('list', $listaCodiciAgente);}$clSel = $clSel->setMaxResults(1)->getQuery()->getResult();if (count($clSel) > 0){$ritorno = $clSel[0];}return $ritorno;}/*** @param $importo double* @param $valoreAliquota double* @return double*/public function calcolaImpostaSuImporto($importo, $valoreAliquota){$imposta = 0;$imposta = ($importo * ((double)1 + $valoreAliquota / (double)100)) - $importo;return $imposta;}/*** @param $stringSconti* @return string*/public function pulisciStringaScontiEMantieniSoloQuelliValidi($stringSconti){$nuovaStringaRitorno = "";$arr = array();if(strpos($stringSconti, '#') !== false){$arr = explode('#', $stringSconti);}else{array_push($arr, $stringSconti);}foreach ($arr as $item){if($item != '' && floatval($item) != 0){$nuovaStringaRitorno .= ("#" . $item);}}return $nuovaStringaRitorno;}/*** @param $stringSconti string* @param $prezzoLordo double* @return double*/public function elaboraStringaSconti($stringSconti, $prezzoLordo){$prezzoNetto = (double)$prezzoLordo;//StringaSconti ===> -0.00#-3.00#-0.00#-0.00#-0.00#-0.00$arr = array();if(strpos($stringSconti, '#') !== false){$arr = explode('#', $stringSconti);}else{array_push($arr, $stringSconti);}foreach ($arr as $item){if($item != '') {//$this->logger->info("Stringa sconto: " . $item);$segno = substr($item, 0, 1);$valore = substr($item, 1, strlen($item) - 1);if ($segno == '-') {$prezzoNetto = $prezzoNetto - ($prezzoNetto * ($valore / (float)100));} else {$prezzoNetto = $prezzoNetto + ($prezzoNetto * ($valore / (float)100));}}}return $prezzoNetto;}/*** @param $stringaSconti string* @return string*/public function ritornaStringaScontiPerVisualizzazione($stringaSconti){$ritorno = "";try {if ($stringaSconti != null && $stringaSconti != '') {if(!str_contains($stringaSconti, '#')){$ritorno = $stringaSconti;}else {$arr = array();if (strpos($stringaSconti, '#') !== false) {$arr = explode('#', $stringaSconti);} else {array_push($arr, $stringaSconti);}foreach ($arr as $item) {if ($item != '') {$segno = substr($item, 0, 1);$valore = substr($item, 1, strlen($item) - 1);if ((float)$valore != 0 && $valore != '') {$ritorno .= ($segno . number_format((float)$valore, 2, ',', '.') . "% ");}}}}}}catch (\Exception $e){$ritorno = $stringaSconti;}return $ritorno;}/*** @param $variabile Variante* @return string*/public function ottieniImmagineDaVariabileEsclusoLivello5($variabile): string{$ritorno = '';if ($variabile->immagineDimensione4 != ''){$ritorno = $variabile->immagineDimensione4;return $ritorno;} elseif ($variabile->immagineDimensione3 != ''){$ritorno = $variabile->immagineDimensione3;return $ritorno;} elseif ($variabile->immagineDimensione2 != ''){$ritorno = $variabile->immagineDimensione2;return $ritorno;} elseif ($variabile->immagineDimensione1 != ''){$ritorno = $variabile->immagineDimensione1;return $ritorno;} elseif ($variabile->mappa){$mappa = $variabile->mappa;if ($mappa->articolo && $mappa->articolo->image != ""){$ritorno = $mappa->articolo->image;return $ritorno;} else {if ($mappa->categoria5 && $mappa->categoria5->immagine != ""){$ritorno = $mappa->categoria5->immagine;} elseif ($mappa->categoria4 && $mappa->categoria4->immagine != ""){$ritorno = $mappa->categoria4->immagine;} elseif ($mappa->categoria3 && $mappa->categoria3->immagine != ""){$ritorno = $mappa->categoria3->immagine;} elseif ($mappa->categoria2 && $mappa->categoria2->immagine != ""){$ritorno = $mappa->categoria2->immagine;} elseif ($mappa->categoria1 && $mappa->categoria1->immagine != ""){$ritorno = $mappa->categoria1->immagine;}return $ritorno;}}return $ritorno;}/*** @param $mappa MappaCategoriaArticolo* @return string*/public function ottieniImmagineDaMappaCategoriaArticolo($mappa, $absolutePath = false){$ritorno = "";if ($mappa->articolo->image != ''){$ritorno = $mappa->articolo->image;}else{if ($mappa->categoria5 && $mappa->categoria5->immagine != ''){$ritorno = $mappa->categoria5->immagine;} elseif ($mappa->categoria4 && $mappa->categoria4->immagine != ''){$ritorno = $mappa->categoria4->immagine;} elseif ($mappa->categoria3 && $mappa->categoria3->immagine != ''){$ritorno = $mappa->categoria3->immagine;} elseif ($mappa->categoria2 && $mappa->categoria2->immagine != ''){$ritorno = $mappa->categoria2->immagine;} elseif ($mappa->categoria1 && $mappa->categoria1->immagine != ''){$ritorno = $mappa->categoria1->immagine;}}if ($absolutePath){$ritorno = $this->requestStack->getCurrentRequest()->getSchemeAndHttpHost() . $ritorno;}return $ritorno;}public function OttieniImmagineRigaOrdineRigaCarrello(OrdineRiga|RigaCarrello $riga){$pathRitorno = '';if($riga->variante){$varianteAgg = null;if($riga->variante != null && $riga->variante->codiceVariante != $riga->codiceVariante){$varianteAgg = $this->doctrine->getRepository(Varianti::class)->findOneBy(['codiceVariante' => $riga->codiceVariante]);}if ($riga->variante->immagineDimensione3 != '' || ($varianteAgg != null && $varianteAgg->getImmagineDimensione3() != '')) {$pathRitorno = $varianteAgg ? $varianteAgg->getImmagineDimensione3() : $riga->variante->immagineDimensione3;} elseif ($riga->variante->immagineDimensione2 != ''|| ($varianteAgg != null && $varianteAgg->getImmagineDimensione2() != '')) {$pathRitorno = $varianteAgg ? $varianteAgg->getImmagineDimensione2() : $riga->variante->immagineDimensione2;} elseif ($riga->variante->immagineDimensione1 != ''|| ($varianteAgg != null && $varianteAgg->getImmagineDimensione1() != '')) {$pathRitorno = $varianteAgg ? $varianteAgg->getImmagineDimensione1() : $riga->variante->immagineDimensione1;}if($pathRitorno != '')return $pathRitorno;}if($pathRitorno == ''){$artAgg = null;if($riga->articolo != null && $riga->articolo->codice != $riga->codiceArticolo) {$artAgg = $this->doctrine->getRepository(Articoli::class)->findOneBy(['codice' => $riga->codiceArticolo]);if($artAgg && $artAgg->getImage() != '')$pathRitorno = $artAgg->getImage();}else{if($riga->articolo != null && $riga->articolo->image != '')$pathRitorno = $riga->articolo->image;}if($pathRitorno != '')return $pathRitorno;}//Se ancora non ho l'immagine verifico le varie categorieif($pathRitorno == ''){//CATEGORIA 5if($riga->codiceCat5 != ''){if($riga->mappaCategoriaArticolo && $riga->mappaCategoriaArticolo->categoria5 && $riga->mappaCategoriaArticolo->categoria5->codice != $riga->codiceCat5){$cat5 = $this->doctrine->getRepository(Categorie::class)->findOneBy(['codice' => $riga->codiceCat5]);if($cat5){$pathRitorno = $cat5->getImmagine();}}else{$pathRitorno = $riga->mappaCategoriaArticolo->categoria5->immagine;}if($pathRitorno != '')return $pathRitorno;}//CATEGORIA 4if($riga->codiceCat5 != ''){if($riga->mappaCategoriaArticolo && $riga->mappaCategoriaArticolo->categoria4 && $riga->mappaCategoriaArticolo->categoria4->codice != $riga->codiceCat4){$cat4 = $this->doctrine->getRepository(Categorie::class)->findOneBy(['codice' => $riga->codiceCat4]);if($cat4){$pathRitorno = $cat4->getImmagine();}}else{$pathRitorno = $riga->mappaCategoriaArticolo->categoria4->immagine;}if($pathRitorno != '')return $pathRitorno;}//CATEGORIA 3if($riga->codiceCat5 != ''){if($riga->mappaCategoriaArticolo && $riga->mappaCategoriaArticolo->categoria3 && $riga->mappaCategoriaArticolo->categoria3->codice != $riga->codiceCat3){$cat3 = $this->doctrine->getRepository(Categorie::class)->findOneBy(['codice' => $riga->codiceCat3]);if($cat3){$pathRitorno = $cat3->getImmagine();}}else{$pathRitorno = $riga->mappaCategoriaArticolo->categoria3->immagine;}if($pathRitorno != '')return $pathRitorno;}//CATEGORIA 2if($riga->codiceCat5 != ''){if($riga->mappaCategoriaArticolo && $riga->mappaCategoriaArticolo->categoria2 && $riga->mappaCategoriaArticolo->categoria2->codice != $riga->codiceCat2){$cat2 = $this->doctrine->getRepository(Categorie::class)->findOneBy(['codice' => $riga->codiceCat2]);if($cat2){$pathRitorno = $cat2->getImmagine();}}else{$pathRitorno = $riga->mappaCategoriaArticolo->categoria2->immagine;}if($pathRitorno != '')return $pathRitorno;}//CATEGORIA 1if($riga->codiceCat5 != ''){if($riga->mappaCategoriaArticolo && $riga->mappaCategoriaArticolo->categoria1 && $riga->mappaCategoriaArticolo->categoria1->codice != $riga->codiceCat1){$cat1 = $this->doctrine->getRepository(Categorie::class)->findOneBy(['codice' => $riga->codiceCat1]);if($cat1){$pathRitorno = $cat1->getImmagine();}}else{$pathRitorno = $riga->mappaCategoriaArticolo->categoria1->immagine;}if($pathRitorno != '')return $pathRitorno;}}return $pathRitorno;}public function OttieniImmagineRigaOfferta(OffertaRiga $riga){$pathRitorno = '';if($riga->collegamentoVariante){$varianteAgg = null;if($riga->collegamentoVariante != null && $riga->collegamentoVariante->codiceVariante != $riga->codiceVariante){$varianteAgg = $this->doctrine->getRepository(Varianti::class)->findOneBy(['codiceVariante' => $riga->codiceVariante]);}if($riga->collegamentoVariante->immagineDimensione3 != '' || ($varianteAgg != null && $varianteAgg->getImmagineDimensione3() != ''))$pathRitorno = $varianteAgg ? $varianteAgg->getImmagineDimensione3() : $riga->collegamentoVariante->immagineDimensione3;if($riga->collegamentoVariante->immagineDimensione2 != ''|| ($varianteAgg != null && $varianteAgg->getImmagineDimensione2() != ''))$pathRitorno = $varianteAgg ? $varianteAgg->getImmagineDimensione2() : $riga->collegamentoVariante->immagineDimensione2;if($riga->collegamentoVariante->immagineDimensione1 != ''|| ($varianteAgg != null && $varianteAgg->getImmagineDimensione1() != ''))$pathRitorno = $varianteAgg ? $varianteAgg->getImmagineDimensione1() : $riga->collegamentoVariante->immagineDimensione1;if($pathRitorno != '')return $pathRitorno;}if($pathRitorno == ''){$artAgg = null;if($riga->collegamentoMappaCategoriaArticolo != null && $riga->collegamentoMappaCategoriaArticolo->articolo != null && $riga->collegamentoMappaCategoriaArticolo->articolo->codice != $riga->codiceArticolo) {$artAgg = $this->doctrine->getRepository(Articoli::class)->findOneBy(['codice' => $riga->codiceArticolo]);if($artAgg && $artAgg->getImage() != '')$pathRitorno = $artAgg->getImage();}else{if($riga->collegamentoMappaCategoriaArticolo != null && $riga->collegamentoMappaCategoriaArticolo->articolo != null && $riga->collegamentoMappaCategoriaArticolo->articolo->image != '')$pathRitorno = $riga->collegamentoMappaCategoriaArticolo->articolo->image;}if($pathRitorno != '')return $pathRitorno;}//Se ancora non ho l'immagine verifico le varie categorieif($pathRitorno == ''){//CATEGORIA 5if($riga->codiceCat5 != ''){if($riga->collegamentoMappaCategoriaArticolo && $riga->collegamentoMappaCategoriaArticolo->categoria5 && $riga->collegamentoMappaCategoriaArticolo->categoria5->codice != $riga->codiceCat5){$cat5 = $this->doctrine->getRepository(Categorie::class)->findOneBy(['codice' => $riga->codiceCat5]);if($cat5){$pathRitorno = $cat5->getImmagine();}}else{$pathRitorno = $riga->collegamentoMappaCategoriaArticolo->categoria5->immagine;}if($pathRitorno != '')return $pathRitorno;}//CATEGORIA 4if($riga->codiceCat5 != ''){if($riga->collegamentoMappaCategoriaArticolo && $riga->collegamentoMappaCategoriaArticolo->categoria4 && $riga->collegamentoMappaCategoriaArticolo->categoria4->codice != $riga->codiceCat4){$cat4 = $this->doctrine->getRepository(Categorie::class)->findOneBy(['codice' => $riga->codiceCat4]);if($cat4){$pathRitorno = $cat4->getImmagine();}}else{$pathRitorno = $riga->collegamentoMappaCategoriaArticolo->categoria4->immagine;}if($pathRitorno != '')return $pathRitorno;}//CATEGORIA 3if($riga->codiceCat5 != ''){if($riga->collegamentoMappaCategoriaArticolo && $riga->collegamentoMappaCategoriaArticolo->categoria3 && $riga->collegamentoMappaCategoriaArticolo->categoria3->codice != $riga->codiceCat3){$cat3 = $this->doctrine->getRepository(Categorie::class)->findOneBy(['codice' => $riga->codiceCat3]);if($cat3){$pathRitorno = $cat3->getImmagine();}}else{$pathRitorno = $riga->collegamentoMappaCategoriaArticolo->categoria3->immagine;}if($pathRitorno != '')return $pathRitorno;}//CATEGORIA 2if($riga->codiceCat5 != ''){if($riga->collegamentoMappaCategoriaArticolo && $riga->collegamentoMappaCategoriaArticolo->categoria2 && $riga->collegamentoMappaCategoriaArticolo->categoria2->codice != $riga->codiceCat2){$cat2 = $this->doctrine->getRepository(Categorie::class)->findOneBy(['codice' => $riga->codiceCat2]);if($cat2){$pathRitorno = $cat2->getImmagine();}}else{$pathRitorno = $riga->collegamentoMappaCategoriaArticolo->categoria2->immagine;}if($pathRitorno != '')return $pathRitorno;}//CATEGORIA 1if($riga->codiceCat5 != ''){if($riga->collegamentoMappaCategoriaArticolo && $riga->collegamentoMappaCategoriaArticolo->categoria1 && $riga->collegamentoMappaCategoriaArticolo->categoria1->codice != $riga->codiceCat1){$cat1 = $this->doctrine->getRepository(Categorie::class)->findOneBy(['codice' => $riga->codiceCat1]);if($cat1){$pathRitorno = $cat1->getImmagine();}}else{$pathRitorno = $riga->collegamentoMappaCategoriaArticolo->categoria1->immagine;}if($pathRitorno != '')return $pathRitorno;}}return $pathRitorno;}/*** @param $alberoProdotti AlberoMenuProdotti|AlberoCategorie* @return string*/public function saliAlberoPerImmagine($alberoProdotti){$usaCategorieAlbero = $this->impostazioni->ritornaImpostazioneDaNome('UtilizzaCategorieAlberoPerGenerazione');if ($alberoProdotti instanceof AlberoMenuProdotti) {/** @var $alberoProdotti AlberoMenuProdotti */if($usaCategorieAlbero){if ($alberoProdotti->getCategoriaAlbero()->getImmagine() != '') {return $alberoProdotti->getCategoriaAlbero()->getImmagine();} else {if ($alberoProdotti->getParentId()) {return $this->saliAlberoPerImmagine($alberoProdotti->getParentId());} else {return '';}}}else {if ($alberoProdotti->getCategoria()->getImmagine() != '') {return $alberoProdotti->getCategoria()->getImmagine();} else {if ($alberoProdotti->getParentId()) {return $this->saliAlberoPerImmagine($alberoProdotti->getParentId());} else {return '';}}}} elseif ($alberoProdotti instanceof AlberoCategorie){/** @var $alberoProdotti AlberoCategorie */if ($usaCategorieAlbero){if ($alberoProdotti->categoriaAlbero->immagine != '') {return $alberoProdotti->categoriaAlbero->immagine;} else {if ($alberoProdotti->parent) {return $this->saliAlberoPerImmagine($alberoProdotti->parent);} else {return '';}}}else {if ($alberoProdotti->categoria->immagine != '') {return $alberoProdotti->categoria->immagine;} else {if ($alberoProdotti->parent) {return $this->saliAlberoPerImmagine($alberoProdotti->parent);} else {return '';}}}} else {return '';}}/** ============================================================================================================================* ==================================================== TRANSLATING =========================================================* ============================================================================================================================*//*** @param $famiglia* @param $locale* @param bool $famigliaIniziaPer*/public function caricaArrayTraduzioni($famiglia, $locale, $famigliaIniziaPer = true){$this->translating->CaricaTraduzioniDaFamiglia($famiglia, $locale, $famigliaIniziaPer);}/*** @param $identificativo* @param $famiglia* @return RitornoTradotto|null*/public function ottieniVoceDizionario($identificativo, $famiglia){return $this->translating->OttieniElementoDizionario($identificativo, $famiglia);}/*** @return array*/public function ritornaIdentificativiDizionario(){$sql = "SELECT DISTINCT(dizionario.identificativo_campo) FROM dizionario ORDER BY dizionario.identificativo_campo";$conn = $this->servizi->doctrine->getConnection();$stmt = $conn->prepare($sql);$stmt->execute();$risultati = $stmt->fetchArray();return $risultati;}/*** @return Lingue[]*/public function RitornaLingue(){/** @var $lingue Lingue[] */$lingue = $this->doctrine->getRepository(Lingue::class)->findAll();return $lingue;}/*** @param $locale string* @return Lingue|null*/public function RitornaLinguaDaLocale($locale){$lingua = $this->doctrine->getRepository(Lingue::class)->findOneBy(array('locale' => $locale));return $lingua;}/** ============================================================================================================================* ================================================== DATI DATABASE =========================================================* ============================================================================================================================*/public function RitornaArrayElementiDatabase($categoriaPagina){$dizionarioDb = new DizionarioDatabase($this->doctrine);/** @var $listaCollegamentiDbPossibili */$listaCollegamentiDbPossibili = $dizionarioDb->ritornaArrayColonneDaTipo($categoriaPagina, true);return $listaCollegamentiDbPossibili;}/** ============================================================================================================================* ============================================ REGISTRAZIONE UTENTE ========================================================* ============================================================================================================================*//*** @param FormBuilderInterface $formBuilder* @param string $locale* @return FormBuilderInterface*/public function RitornaFormCompletoRegistrazioneUtente(FormBuilderInterface $formBuilder, $locale = 'it'){$traduci = $this->translating;$traduci->CaricaTraduzioniDaFamiglia("carrello", $locale, false);$traduci->CaricaTraduzioniDaFamiglia('dati_utente', $locale, false);$formBuilder->add(Costanti::RU_AZIENDA_O_PRIVATO, ChoiceType::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()))->add(Costanti::RU_RAGIONE_SOCIALE, TextType::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;')))->add(Costanti::RU_NOME, TextType::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;')))->add(Costanti::RU_COGNOME, TextType::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;')))->add(Costanti::RU_CODICE_FISCALE, TextType::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;')))->add(Costanti::RU_PARTITA_IVA, TextType::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;')))->add(Costanti::RU_INDIRIZZO, TextType::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;')))->add(Costanti::RU_CITTA, TextType::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;')))->add(Costanti::RU_PROVINCIA, TextType::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;')))->add(Costanti::RU_CAP, TextType::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;')))->add(Costanti::RU_STATO, EntityType::class, array('required' => true, 'class' => Nazioni::class, 'choice_label' => function ($nazione) {/** @var $nazione Nazioni */return $nazione->getDescrizione();}, 'label' => $traduci->OttieniElementoDizionario('dati_utente_nazione', 'dati_utente')->valoreUscita, 'attr' => array('class' => "form-control input-sm", 'style' => 'padding-left:5px;padding-right:5px;')))->add(Costanti::RU_TELEFONO, TextType::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;')))->add(Costanti::RU_FAX, TextType::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;')))->add(Costanti::RU_INDIRIZZO_MAIL, EmailType::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;')))->add(Costanti::RU_INDIRIZZO_PEC, EmailType::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;')))->add(Costanti::RU_CODICE_DESTINATARIO_FATTURAZIONE_ELETTRONICA, TextType::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;')))->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;')))->add(Costanti::RU_DD_RAGIONE_SOCIALE, TextType::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;')))->add(Costanti::RU_DD_INDIRIZZO, TextType::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;')))->add(Costanti::RU_DD_CITTA, TextType::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;')))->add(Costanti::RU_DD_PROVINCIA, TextType::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;')))->add(Costanti::RU_DD_CAP, TextType::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;')))->add(Costanti::RU_DD_TELEFONO, TextType::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;')))->add(Costanti::RU_DD_STATO, EntityType::class, array('required' => false, 'class' => Nazioni::class, 'choice_label' => function ($nazione) {/** @var $nazione Nazioni */return $nazione->getDescrizione();}, '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;')))->add(Costanti::RU_DD_INDIRIZZO_MAIL, EmailType::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;')))->add(Costanti::RU_USERNAME, TextType::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;')))->add(Costanti::RU_PASSWORD, PasswordType::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;')))->add(Costanti::RU_RIPETI_PASSWORD, PasswordType::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;')))->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;')));/** @var UserCampiCustomTestata[] $campiCustomUser */$campiCustomUser = $this->doctrine->getRepository(UserCampiCustomTestata::class)->findBy(array('luogoVisualizzazione' => 'registrazioneUtente'));foreach ($campiCustomUser as $tst) {$formBuilder = $this->AggiungiChildAFormUserCampiCustom($tst, $formBuilder);}return $formBuilder;}/** ============================================================================================================================* ============================================ RISORSE ANAGRAFICHE =========================================================* ============================================================================================================================*/public function RitornaArrayTipoRisorsa(){return array('Immagine' => 'immagine','Pdf' => 'pdf','Link esterno' => 'linkEsterno','File' => 'file');}public function RitornaArrayTipoDato(){return array('Testo' => 'text','Numero intero' => 'integer','Numero decimale' => 'decimal','Boolean' => 'boolean','Data' => 'date','Time' => 'time','Data e ora' => 'datetime');}/** ============================================================================================================================* ============================================ USER CAMPI CUSTOM =========================================================* ============================================================================================================================*/public function RitornaArrayLuoghiVisualizzazione(){return array('Registrazione utente' => 'registrazioneUtente','Effettuo ordine' => 'effettuoOrdine',);}public function RitornaChiaviUserCampiCustom(UserCampiCustomTestata $testata){$ritorno = array();/** @var UserCampiCustomDettaglio $item */foreach ($testata->getDettaglio() as $item) {/** 'Testo' => 'text','Checkbox' => 'checkbox','Radio' => 'radio','Select' => 'select'*/$campo = $item->getCampo();if ($campo) {array_push($ritorno, 'usrCst_' . $item->getId());}}return $ritorno;}/*** @param $stringaCompleta* @return UserCampiCustomDettaglio|null*/public function RitornaDettaglioUserCampiCustom($stringaCompleta){$id = str_replace('usrCst_', '', $stringaCompleta);return $this->doctrine->getRepository(UserCampiCustomDettaglio::class)->find($id);}public function AggiungiChildAFormUserCampiCustom(UserCampiCustomTestata $testata, FormBuilderInterface $formBuilder){/** @var UserCampiCustomDettaglio $item */foreach ($testata->getDettaglio() as $item) {/** 'Testo' => 'text','Checkbox' => 'checkbox','Radio' => 'radio','Select' => 'select'*/$campo = $item->getCampo();if ($campo) {$tipo = "";$arrayValoriSelect = array();if ($campo->getObbligatorio()) {array_push($chiaviControllo, $campo->getId());}switch ($campo->getTipoDato()) {case "text":default:{$tipo = TextType::class;break;}case "checkbox":{$tipo = CheckboxType::class;break;}case "radio":case "select":{$tipo = ChoiceType::class;if (strpos($campo->getValoriSelect(), "$$") !== false) {$arr = explode("$$", $campo->getValoriSelect());$arrayValoriSelect = array();foreach ($arr as $item) {$arrayValoriSelect[$item] = $item;}} else if ($tipo != "") {array_push($arrayValoriSelect, $tipo);}break;}}$arrayConfigurazione = array('label' => $campo->getTestoVisualizzato(),'required' => $campo->getObbligatorio(),'attr' => array('class' => "form-control input-sm",'style' => 'padding-left:5px;padding-right:5px;'));if ($campo->getTipoDato() == "select" || $campo->getTipoDato() == 'radio') {$arrayConfigurazione["choices"] = $arrayValoriSelect;if ($campo->getTipoDato() == 'radio') {$arrayConfigurazione["expanded"] = true;$arrayConfigurazione["multiple"] = false;}}$formBuilder->add('usrCst_' . $item->getId(),$tipo,$arrayConfigurazione);}}return $formBuilder;}/** ============================================================================================================================* ==================================================== TEMPLATING ==========================================================* ============================================================================================================================*/public function RitornaListaBlocchiPerLayout($tipoLayout){$lat = Templating::RitornaArrayFinaleInBaseAlLayout($tipoLayout, $this->router);return $lat;}public function VerificaSeMappaConPrezzoSuRichiesta(MappaCategoriaArticolo $mappa){$ritorno = false;if($mappa){if($mappa->articolo){$ritorno = $mappa->articolo->prezzoSuRichiesta;}if(!$ritorno){if($mappa->categoria1){$ritorno = $mappa->categoria1->prezzoSuRichiesta;}if(!$ritorno && $mappa->categoria2){$ritorno = $mappa->categoria2->prezzoSuRichiesta;}if(!$ritorno && $mappa->categoria3){$ritorno = $mappa->categoria3->prezzoSuRichiesta;}if(!$ritorno && $mappa->categoria4){$ritorno = $mappa->categoria4->prezzoSuRichiesta;}if(!$ritorno && $mappa->categoria5){$ritorno = $mappa->categoria5->prezzoSuRichiesta;}}}return $ritorno;}/*** @param $idPagina* @param $ritorno array|null* @param $valoriSupporto array* @param $twigAppArray array|null* @return array* <p>Valori di supporto viene passato a twig nel render del template</p>*/public function renderizzaPaginaOComponente($idPagina, $ritorno, $valoriSupporto, $locale = 'it', $htmlCustom = '', $ordineCasuale = false, $padreAvvio = false, $twigAppArray = null){if (!$ritorno){$ritorno = array('html' => '','css' => '');}$this->locale = $locale;$pagina = null;if ($idPagina != 0) {$pagina = $this->doctrine->getRepository(PagineEComponenti::class)->find($idPagina);// Carico le traduzioni$this->translating->CaricaTraduzioniPerLayoutPagineEComponenti($pagina, $locale);}if ($pagina){if ($padreAvvio){$ritorno['css'] = $ritorno['css'] . ' ' . ($pagina->getCssAggiuntivo() ? $pagina->getCssAggiuntivo() : '');}$ritorno['css'] = $ritorno['css'] . ' ' . $pagina->getCss();$ritorno['html'] = $pagina->getHtml();}else if ($htmlCustom != ''){$ritorno['html'] = $htmlCustom;}if($pagina->getTipoPagina() == ("rigaHomeShop"||"paginaDettaglioArticolo"||"dettaglioArticolo"||"modalRichiestaPrezzo") && strpos($ritorno["html"], '<sezione-da-verificare ') !== false) {$prezzoSuRichiesta = false;$chiaveRighe = Templating::ottieniElementoDaUtilizzareInBaseATipoPagina($pagina->getTipoPagina(), $ordineCasuale);$percorso = array('articolo');if(array_key_exists($chiaveRighe, $valoriSupporto))$prezzoSuRichiesta = Templating::ritornaValoreDaPercorso($valoriSupporto[$chiaveRighe], $percorso, 'prezzoSuRichiesta');if(!$prezzoSuRichiesta){//Verifico se le categorie hanno il flag su prezzo a richiesta$prezzoSuRichiesta = Templating::ritornaValoreDaPercorso($valoriSupporto[$chiaveRighe], array('categoria1'), 'prezzoSuRichiesta');if(!$prezzoSuRichiesta)$prezzoSuRichiesta = Templating::ritornaValoreDaPercorso($valoriSupporto[$chiaveRighe], array('categoria2'), 'prezzoSuRichiesta');if(!$prezzoSuRichiesta)$prezzoSuRichiesta = Templating::ritornaValoreDaPercorso($valoriSupporto[$chiaveRighe], array('categoria3'), 'prezzoSuRichiesta');if(!$prezzoSuRichiesta)$prezzoSuRichiesta = Templating::ritornaValoreDaPercorso($valoriSupporto[$chiaveRighe], array('categoria4'), 'prezzoSuRichiesta');if(!$prezzoSuRichiesta)$prezzoSuRichiesta = Templating::ritornaValoreDaPercorso($valoriSupporto[$chiaveRighe], array('categoria5'), 'prezzoSuRichiesta');}$stringaRicercaWhile = '<sezione-da-verificare type="sezione" ';if($prezzoSuRichiesta)$stringaRicercaWhile .= 'ambito="prezzo"';else$stringaRicercaWhile .= 'ambito="prezzo-su-richiesta"';while (strpos($ritorno["html"], $stringaRicercaWhile) !== false) {//substringo l'intero tag$sbs1 = SubstringWithFind::SubstringWithFind($stringaRicercaWhile,'</sezione-da-verificare>',$ritorno['html']);$elementoTagCompleto = $sbs1->substring;$sbTipo = SubstringWithFind::SubstringWithFind('type="','"',$elementoTagCompleto,0,true);$tipo = $sbTipo->substring;$sbAmbito = SubstringWithFind::SubstringWithFind('ambito="','"',$elementoTagCompleto,0,true);$ambito = $sbAmbito->substring;$ritorno['html'] = str_replace($elementoTagCompleto, '', $ritorno['html']);}}while(strpos($ritorno["html"], "<TMPLT ") !== false){//se trovo l'elemento TMPLT effettuo l'azione in base al tp//substringo l'intero tag$sbs1 = SubstringWithFind::SubstringWithFind('<TMPLT ','/>',$ritorno['html']);$elementoTagCompleto = $sbs1->substring;//ottengo il tp$sbTipo = SubstringWithFind::SubstringWithFind('tp="','"',$elementoTagCompleto,0,true);$tipo = $sbTipo->substring;switch ($tipo){case 'ALTRO-LAYOUT':{$sbs2 = SubstringWithFind::SubstringWithFind('component-id="','"',$elementoTagCompleto,0,true);$riferimentoId = $sbs2->substring;if ($riferimentoId == 'default' || $riferimentoId == 'form_default') {$ritorno['html'] = str_replace($elementoTagCompleto,$this->ritornaDefaultLayoutPagineEComponenti($pagina->getTipoPagina(), $valoriSupporto, ($riferimentoId == 'form_default' ? true : false)),$ritorno['html']);} else {$rit = $this->renderizzaPaginaOComponente($riferimentoId, null, $valoriSupporto, $locale, '', $ordineCasuale, false, $twigAppArray);$ritorno['css'] = $ritorno['css'] . ' ' . $rit["css"];$ritorno['html'] = str_replace($elementoTagCompleto, $rit['html'], $ritorno['html']);}break;}case "DATO-DB":{$ritornoConvertDb = Templating::ConvertiStringaDatoDb($elementoTagCompleto);$chiaveRighe = Templating::ottieniElementoDaUtilizzareInBaseATipoPagina($pagina->getTipoPagina(), $ordineCasuale);if (array_key_exists($chiaveRighe, $valoriSupporto)) {$valoreSostituito = '';$valoreInizialeLink = '';if($this->logger)$this->logger->debug('Click automatico: ' . $ritornoConvertDb->clickLinkAutomatico);if($ritornoConvertDb->clickLinkAutomatico != '' || $ritornoConvertDb->clickLink != ''){$valoreLink = $ritornoConvertDb->clickLink;if($valoreLink == '' && $ritornoConvertDb->clickLinkAutomatico != ''){$valoreLink = Templating::creaLinkAutomatico($ritornoConvertDb->clickLinkAutomatico, $this->router, $valoriSupporto, $pagina, $ordineCasuale, $this->logger, $this);}$valoreInizialeLink .= ('<a href="' . $valoreLink . '">');if($this->startsWith($ritornoConvertDb->clickLinkAutomatico, 'js_')){//Ad esempio js_ApriModal(false);$valoreInizialeLink .= '<a onclick="' . substr($ritornoConvertDb->clickLinkAutomatico, 3) . '">';}}if ($ritornoConvertDb->datoSpeciale != '') {$valoreSostituito = Templating::ritornaValoreDatoDbSpeciale($ritornoConvertDb, $this, $valoriSupporto[$chiaveRighe]);} else {$valoreSostituito = Templating::ritornaValoreDaPercorso($valoriSupporto[$chiaveRighe], $ritornoConvertDb->percorso, $ritornoConvertDb->nomeColonna, $ritornoConvertDb);}if ($ritornoConvertDb->immagine) {if ($this->imageNotFound == null){$this->imageNotFound = $this->impostazioni->ritornaImpostazioneDaNome('ImmagineNonPresenteProdotto');}$valoreSostituito = ('<img src="' . ($valoreSostituito != '' ? $valoreSostituito : $this->imageNotFound ) . '" class="' . $ritornoConvertDb->class . '" id="' . $ritornoConvertDb->id . '" style="' . $ritornoConvertDb->style . '" />');}$valoreSostituito = ('<span style="' . $ritornoConvertDb->style . '" class="' . $ritornoConvertDb->class . '" id="' . $ritornoConvertDb->id . '">' . $valoreSostituito . '</span>');if($ritornoConvertDb->clickLinkAutomatico != '' || $ritornoConvertDb->clickLink != ''){$valoreSostituito = $valoreInizialeLink . $valoreSostituito . '</a>';}$ritorno['html'] = str_replace($elementoTagCompleto, $valoreSostituito, $ritorno['html']);}else{$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']);}break;}case "TIPOLOGIE-PREIMPOSTATE-SELECT":{$ritornoElementiBase = RitornoElementiBase::OttieniDaElementoTag($elementoTagCompleto);$chiaveRighe = Templating::ottieniElementoDaUtilizzareInBaseATipoPagina($pagina->getTipoPagina(), $ordineCasuale);$this->translating->CaricaTraduzioniDaFamiglia('home_shop', $locale);if (array_key_exists($chiaveRighe, $valoriSupporto)){$ritorno['html'] = str_replace($elementoTagCompleto, Templating::ritornaSelectTipologiePreimpostate($valoriSupporto[$chiaveRighe], $ritornoElementiBase, $this), $ritorno['html']);}else{$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']);}break;}case "ELEMENTO-DIZIONARIO":{$ritornoDizionario = RitornoElementoDizionario::OttieniDaElementoTag($elementoTagCompleto);$traduzione = $this->translating->OttieniElementoDizionario($ritornoDizionario->identificativo, $ritornoDizionario->famiglia);$ritornoElementiBase = RitornoElementiBase::OttieniDaElementoTag($elementoTagCompleto);if ($traduzione){if ($ritornoDizionario->link != '' || $ritornoDizionario->linkAutomatico != ''){$link = $ritornoDizionario->link;if ($ritornoDizionario->linkAutomatico != ''){$link = Templating::creaLinkAutomatico($ritornoDizionario->linkAutomatico, $this->router, $valoriSupporto, $pagina, $ordineCasuale, $this->logger, $this);}$valFinale = '<a ' . $ritornoElementiBase->RitornaStringaElementiBase() . ' href="' . $link . '" title="' . $traduzione->valoreUscita . '">' . $traduzione->valoreUscita . '</a>';} else {$valFinale = '<span ' . $ritornoElementiBase->RitornaStringaElementiBase() . '>' . $traduzione->valoreUscita . '</span>';}$ritorno['html'] = str_replace($elementoTagCompleto, $valFinale, $ritorno['html']);}else{$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']);}break;}case "BREADCRUMB":{$ritornoElemento = RitornoBreadCrumb::OttieniDaElementoTag($elementoTagCompleto);$rttt = Templating::eseguiBreadcrumb($ritornoElemento, $valoriSupporto, $this, $locale, $this->logger);$ritorno['html'] = str_replace($elementoTagCompleto, $rttt["html"] , $ritorno['html']);$ritorno["css"] = $ritorno["css"] . $rttt["css"];}case "MOLTIPLICATORE-LAYOUT":{$ritornoMoltiplicatore = RitornoDaMoltiplicatoreLayout::OttieniDaElementoTag($elementoTagCompleto);/** @var $listaPagine PagineEComponenti[] */$listaPagine = $this->doctrine->getRepository(PagineEComponenti::class)->createQueryBuilder('pagine_ecomponenti')->where("pagine_ecomponenti.tipoPagina NOT LIKE :pag")->setParameter('pag', 'Pagina%')->andWhere("pagine_ecomponenti.tipoPagina NOT LIKE :mail")->setParameter('mail', 'Mail%')->andWhere("pagine_ecomponenti.html <> '' AND pagine_ecomponenti.html IS NOT NULL")->andWhere('pagine_ecomponenti.id = :iden')->setParameter('iden', $ritornoMoltiplicatore->componentId)->setMaxResults(1)->orderBy('pagine_ecomponenti.categoria, pagine_ecomponenti.tipoPagina')->getQuery()->getResult();if (count($listaPagine) > 0){$rttt = Templating::eseguiMoltiplicatoreLayout($listaPagine[0], $ritornoMoltiplicatore, $valoriSupporto, $this, $locale, $ritornoMoltiplicatore->ordineCasuale, $this->logger, $twigAppArray);$ritorno['html'] = str_replace($elementoTagCompleto, $rttt["html"] , $ritorno['html']);$ritorno["css"] = $ritorno["css"] . $rttt["css"];}else{$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']);}break;}case "PAGINATION":{$ritornoBase = RitornoElementiBase::OttieniDaElementoTag($elementoTagCompleto);$sbs2 = SubstringWithFind::SubstringWithFind('mstr-avanti="','"',$elementoTagCompleto,0,true);$mostraAvanti = $sbs2->substring;$sbs3 = SubstringWithFind::SubstringWithFind('mstr-indietro="','"',$elementoTagCompleto,0,true);$mostraIndietro = $sbs3->substring;$sbs4 = SubstringWithFind::SubstringWithFind('nr-pag="','"',$elementoTagCompleto,0,true);$nrPag = $sbs4->substring;$routeRiferimento = Templating::ritornaRoutePaginationInBaseATipoPagina($pagina->getTipoPagina());$stringaRitorno = Templating::ritornaStringaPagination($mostraAvanti, $mostraIndietro, $nrPag, $this, $routeRiferimento, $this->router, $valoriSupporto, $this->logger, $twigAppArray);$ritorno['html'] = str_replace($elementoTagCompleto, $stringaRitorno, $ritorno['html']);break;}case "MENU-CATEGORIE":{$sbs1 = SubstringWithFind::SubstringWithFind('<TMPLT ','<TMPLT />',$ritorno['html']);$elementoTagCompleto = $sbs1->substring;//$this->logger->debug($sbs1->substring);$rtt = Templating::eseguiStrutturaMenuCategorie($elementoTagCompleto, $valoriSupporto, $pagina, $this, $locale, $this->router, $this->translating, null, $this->logger, $twigAppArray);$ritorno['html'] = str_replace($elementoTagCompleto, $rtt['html'], $ritorno['html']);$ritorno['css'] = $ritorno['css'] . $rtt['css'];break;}case "MENU-CATEGORIE-ORIZZONTALE-DROPDOWN":{$sbs1 = SubstringWithFind::SubstringWithFind('<TMPLT ',' />',$ritorno['html']);$elementoTagCompleto = $sbs1->substring;//$this->logger->debug($sbs1->substring);$rtt = Templating::eseguiStrutturaMenuCategorieOrizzontaleDropdown($elementoTagCompleto, $valoriSupporto, $pagina, $this, $locale, $this->router, $this->translating, null, $this->logger, $twigAppArray);$ritorno['html'] = str_replace($elementoTagCompleto, $rtt['html'], $ritorno['html']);$ritorno['css'] = $ritorno['css'] . $rtt['css'];break;}case "GRIGLIA-ORDINAZIONE-VARIANTI":{$sbs1 = SubstringWithFind::SubstringWithFind('<TMPLT ',' />',$ritorno['html']);$elementoTagCompleto = $sbs1->substring;//$this->logger->debug($sbs1->substring);$rtt = Templating::eseguiGrigliaOrdinazioneVarianti($elementoTagCompleto, $valoriSupporto, $pagina, $this, $locale, $this->router, $this->translating, null, $this->logger, $twigAppArray);$ritorno['html'] = str_replace($elementoTagCompleto, $rtt['html'], $ritorno['html']);$ritorno['css'] = $ritorno['css'] . $rtt['css'];break;}case "CORENAV": {$sbs1 = SubstringWithFind::SubstringWithFind('<TMPLT tp="CORENAV" ','<TMPLT CORENAV />',$ritorno['html']);$elementoNuovo = $sbs1->substring;$sbsTestata = SubstringWithFind::SubstringWithFind('<TMPLT tp="CORENAV" ','>',$elementoNuovo);$testata = $sbsTestata->substring;$sbElementoDb = SubstringWithFind::SubstringWithFind(' elemento-visualizzato="','"',$elementoTagCompleto,0,true);$elementoDbDaVisualizzare = $sbElementoDb->substring;$rtt = Templating::eseguiStrutturaCoreNav($elementoTagCompleto, $elementoNuovo, $testata, $elementoDbDaVisualizzare, $valoriSupporto, $pagina, $this, $locale, $this->router, $this->translating, $this->logger, $twigAppArray);$ritorno['html'] = str_replace($elementoNuovo, $rtt, $ritorno['html']);break;}case "DIV-CLICCABILE":{$sbs1 = SubstringWithFind::SubstringWithFind('<TMPLT ','<TMPLT DIV-CLICCABILE />',$ritorno['html']);$elementoNuovo = $sbs1->substring;$sbsTestata = SubstringWithFind::SubstringWithFind('<TMPLT ','>',$elementoNuovo);//$this->logger->debug('Sbs testata: ' . $sbsTestata->substring);$stringaSostituireTestata = Templating::convertiTestataDivSecondario($sbsTestata->substring, $this, $this->router, $pagina, $valoriSupporto, $this->logger, $ordineCasuale);//$this->logger->debug('Stringa sostituire testat: ' . $stringaSostituireTestata);$elementoNuovo = str_replace($sbsTestata->substring, $stringaSostituireTestata, $elementoNuovo);$elementoNuovo = str_replace('<TMPLT DIV-CLICCABILE />', '</a>', $elementoNuovo);$ritorno['html'] = str_replace($sbs1->substring, $elementoNuovo, $ritorno['html']);break;}case "GENERA_ROUTE":{$sbRoute = SubstringWithFind::SubstringWithFind(' route="','"',$elementoTagCompleto,0,true);$sostituzione = Templating::creaLinkAutomatico($sbRoute->substring, $this->router, $valoriSupporto, $pagina, $ordineCasuale, $this->logger, $this);$ritorno['html'] = str_replace($elementoTagCompleto, $sostituzione, $ritorno['html']);break;}case "BUTTON":{$ritornoButton = RitornoButton::RitonaDaTagCompleto($elementoTagCompleto);$valoreLink = $ritornoButton->clicLink;if ($ritornoButton->linkAutomatico != '' && !$this->startsWith($ritornoButton->linkAutomatico, 'js_')){$valoreLink = Templating::creaLinkAutomatico($ritornoButton->linkAutomatico, $this->router, $valoriSupporto, $pagina, $ordineCasuale, $this->logger, $this);}$testo = $ritornoButton->testo;if ($ritornoButton->identificativo != ''){$trad = $this->translating->OttieniElementoDizionario($ritornoButton->identificativo, $ritornoButton->famiglia);$testo = $trad->valoreUscita;}if($this->startsWith($ritornoButton->linkAutomatico, 'js_')){//Ad esempio js_ApriModal(false);$onClk = substr($ritornoButton->linkAutomatico, 3);if($this->startsWith($ritornoButton->linkAutomatico, 'js_ApriModalRichiestaPrezzo(')){$chiaveRighe = Templating::ottieniElementoDaUtilizzareInBaseATipoPagina($pagina->getTipoPagina(), $ordineCasuale);$idMp = Templating::ritornaValoreDaPercorso($valoriSupporto[$chiaveRighe], array(), 'id');$onClk = "ApriModalRichiestaPrezzo('" . $idMp . "');";}$stringaSostituzione = ('<button onclick="' . $onClk . '" id="' . $ritornoButton->id . '" name="' . $ritornoButton->name . '" class="' . $ritornoButton->class . '" style="' . $ritornoButton->style . '">' . $testo . '</button>');}else {$tag = '<button ';if ($valoreLink != '') {$tag = '<a ';} else {if ($ritornoButton->type != '' && $ritornoButton->type != 'button') {$tag = '<input type="' . $ritornoButton->type . '" ';}}$aggiungiOnClick = '';if (($ritornoButton->type == 'button' || $ritornoButton->type == '') && !$ritornoButton->linkAutomatico != '') {$aggiungiOnClick = ' onclick="location.href=\'' . $ritornoButton->clicLink . '\'" ';}$stringaSostituzione = $tag . $aggiungiOnClick . ' href="' . $valoreLink . '" id="' . $ritornoButton->id . '" name="' . $ritornoButton->name . '" class="' . $ritornoButton->class . '" style="' . $ritornoButton->style . '" ';if ($ritornoButton->type != '' && $ritornoButton->type != 'button') {$stringaSostituzione .= ' value="' . $testo . '">';} else {$stringaSostituzione .= '">' . $testo . ($valoreLink != '' ? '</a>' : '</button>');}}$ritorno['html'] = str_replace($elementoTagCompleto, $stringaSostituzione, $ritorno['html']);break;}case "VISTA-ATTRIBUTI":{$sbs1 = SubstringWithFind::SubstringWithFind('<TMPLT ','</VISTA-ATTRIBUTI>',$ritorno['html']);$elementoNuovo = $sbs1->substring;$sbsTestata = SubstringWithFind::SubstringWithFind('<TMPLT ','>',$elementoNuovo);$rtt = Templating::eseguiStrutturaVistaAttributi($elementoNuovo, $valoriSupporto, $this, $locale, $this->router, $this->translating, null, $this->logger);$ritorno['html'] = str_replace($elementoNuovo, $rtt['html'], $ritorno['html']);$ritorno['css'] = $ritorno['css'] . $rtt['css'];}default:{//se non trovo il corripondente Tp lo sostituisco con una striga di errore$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']);break;}}}if ($padreAvvio && $pagina){//Verifico se i vari form mappati hanno il corrispondente nella variabile passata a twig$verificatoreForm = new VerificatoreMatchForm($this);$ritorno['html'] = $verificatoreForm->VerificaCodiceHtml($valoriSupporto, $ritorno['html']);$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$ritorno['html'] = Templating::ElaboraTagSostituzionePercorso($ritorno['html'], $valoriSupporto, $this, $this->logger); // Sostituisco i valori %££% con i valori corrispondenti al percorso indicato all'interno$ritorno['html'] = Templating::ElaboraTagSostituzioneEntita($ritorno['html'], $valoriSupporto, $this, $this->logger); // Sostituisco i valori entità per popolare le opzioni select}return $ritorno;}}