src/Controller/ServiziController.php line 693
<?php
namespace 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 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;
// TEMPLATING
public $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;
}
}
}
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_albero
LEFT 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 categorie
LEFT 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 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;
}
/**
* @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 ordinamento
return 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];
else
return 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];
else
return 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];
else
return 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];
else
return 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];
else
return 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è è incolonnato
return 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 UTILIZZATO
if ($dettaglioCoupon->getUtilizzato()){
$ritorno->esito = false;
$ritorno->messaggio = "Coupon già utilizzato!";
return $ritorno;
}
//VERIFICO SE IL COUPON HA RAGGIUNTO IL LIMITE DI UTILIZZI
if ($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 MINIMI
if ($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' SCADUTO
if ($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); // edited
for ($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 testata
if ($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;
else
return 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.00
if (($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){
$ritorno = $mappa->articolo->image;
return $ritorno;
} else {
if ($mappa->categoria5){
$ritorno = $mappa->categoria5->immagine;
} elseif ($mappa->categoria4){
$ritorno = $mappa->categoria4->immagine;
} elseif ($mappa->categoria3){
$ritorno = $mappa->categoria3->immagine;
} elseif ($mappa->categoria2){
$ritorno = $mappa->categoria2->immagine;
} elseif ($mappa->categoria1){
$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 categorie
if($pathRitorno == ''){
//CATEGORIA 5
if($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 4
if($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 3
if($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 2
if($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 1
if($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 categorie
if($pathRitorno == ''){
//CATEGORIA 5
if($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 4
if($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 3
if($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 2
if($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 1
if($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;
}
}