src/Controller/CarrelloController.php line 813

  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Anagrafiche;
  4. use App\Entity\AnagraficheIndirizzi;
  5. use App\Entity\Articoli;
  6. use App\Entity\AssociazioneSpedizioniClienti;
  7. use App\Entity\Carrello;
  8. use App\Entity\CouponDettaglio;
  9. use App\Entity\CouponDettaglioUtilizzo;
  10. use App\Entity\Destinazioni;
  11. use App\Entity\FiltroVisualizzazioneArticoliClienti;
  12. use App\Entity\MailSecondarieUtenti;
  13. use App\Entity\MappaCategorieArticoli;
  14. use App\Entity\ModalitaPagamento;
  15. use App\Entity\ModalitaSpedizione;
  16. use App\Entity\Ordini;
  17. use App\Entity\Pagamenti;
  18. use App\Entity\RigheCarrello;
  19. use App\Entity\User;
  20. use App\Entity\UserCampiCustomTestata;
  21. use App\Entity\UserCampiCustomValori;
  22. use App\Model\Carrello\CreaRigaCarrelloValoriOpzionali;
  23. use App\Model\Carrello\FunzioniCarrello;
  24. use App\Model\Carrello\RitornoConversioneCarrelloInOrdine;
  25. use App\Model\Carrello\RitornoGenericoCarrello;
  26. use App\Model\Carrello\Validator;
  27. use App\Model\ContenitoreCategoriePerFiltri;
  28. use App\Model\Costanti;
  29. use App\Model\Entita\AlberoCategorie;
  30. use App\Model\Entita\AltriDatiUtente;
  31. use App\Model\GestioneUtenti;
  32. use App\Model\Mailer;
  33. use App\Model\RecuperoDati;
  34. use App\Model\Translating\Translating;
  35. use App\Repository\AssociazioneSpedizioniClientiRepository;
  36. use Doctrine\ORM\EntityRepository;
  37. use Doctrine\ORM\Mapping\Entity;
  38. use Psr\Log\LoggerInterface;
  39. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  40. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  41. use Symfony\Component\Form\Extension\Core\Type\TextareaType;
  42. use Symfony\Component\Form\Extension\Core\Type\TextType;
  43. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  44. use Symfony\Component\Form\FormFactoryInterface;
  45. use Symfony\Component\HttpFoundation\RequestStack;
  46. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  47. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  48. use Symfony\Component\Routing\Annotation\Route;
  49. use Symfony\Component\HttpFoundation\JsonResponse;
  50. use Symfony\Component\HttpFoundation\Request;
  51. use Symfony\Component\HttpFoundation\Response;
  52. use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
  53. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  54. use Twig\Environment;
  55. /**
  56.  * Class CarrelloController
  57.  * @package App\Controller
  58.  */
  59. class CarrelloController extends AbstractController
  60. {
  61.     /** @var TokenStorageInterface */
  62.     private $token;
  63.     /** @var ServiziController */
  64.     private $servizi;
  65.     /** @var ReturnImpostazioniServiceController */
  66.     private $imp;
  67.     /** @var Translating */
  68.     private $translating;
  69.     /** @var Environment */
  70.     private $twig;
  71.     /** @var Mailer */
  72.     private $mailer;
  73.     /** @var SessionInterface */
  74.     private $session;
  75.     /** @var FormFactoryInterface */
  76.     private $formFactory;
  77.     /** @var LoggerInterface */
  78.     private $logger;
  79.     /** @var GestioneUtenti */
  80.     private $gestioneUtenti;
  81.     /**
  82.      * CarrelloController constructor.
  83.      * @param TokenStorageInterface $token
  84.      * @param ServiziController $servizi
  85.      * @param ReturnImpostazioniServiceController $imp
  86.      * @param Translating $translating
  87.      * @param Environment $twig
  88.      * @param Mailer $mailer
  89.      * @param SessionInterface $session
  90.      * @param LoggerInterface $logger
  91.      * @param GestioneUtenti $gestioneUtenti
  92.      */
  93.     public function __construct(TokenStorageInterface $tokenServiziController $serviziReturnImpostazioniServiceController $impTranslating $translatingEnvironment $twigMailer $mailerRequestStack $requestStackFormFactoryInterface $formFactoryLoggerInterface $loggerGestioneUtenti $gestioneUtenti)
  94.     {
  95.         $this->token $token;
  96.         $this->servizi $servizi;
  97.         $this->imp $imp;
  98.         $this->translating $translating;
  99.         $this->twig $twig;
  100.         $this->mailer $mailer;
  101.         $this->session $requestStack->getSession();
  102.         $this->formFactory $formFactory;
  103.         $this->logger $logger;
  104.         $this->gestioneUtenti $gestioneUtenti;
  105.     }
  106.     /**
  107.      * @Route("/cart/empty", name="carrello_svuota_carrello")
  108.      */
  109.     public function svuotaCarrelloAjaxAction(Request $request)
  110.     {
  111.         $user $this->servizi->OttieniUtenteCorrente();
  112.         $secret "";
  113.         if(!$user)
  114.             $secret $request->cookies->get('secret_user');
  115.         $repo $this->servizi->doctrine->getRepository(Carrello::class);
  116.         $altriDati AltriDatiUtente::CreaDaUtente($user);
  117.         if ($user) {
  118.             if ($this->isGranted("ROLE_ADMIN") || $this->isGranted("ROLE_AGENTE") || $this->isGranted("ROLE_COMMERCIALE")) {
  119.                 if ($altriDati && $altriDati->codice != ''){
  120.                     $anagraficaTrovata $this->servizi->ritornaAnagraficaShopSelezionataDaCookieIdentificativo($altriDati->codice$this->servizi->OttieniUtenteCorrente());
  121.                     if ($anagraficaTrovata) {
  122.                         $clienteSelezionatoAgente $anagraficaTrovata;
  123.                     }
  124.                     $carrello $repo->findOneBy(array('agente' => $this->servizi->OttieniUtenteCorrente(), 'anagrafica' => $anagraficaTrovata'tipoOrdine' => $altriDati->tipoOrdine != '' $altriDati->tipoOrdine null));
  125.                 }else{
  126.                     $carrello $repo->findOneBy(array('cliente' => $user'tipoOrdine' => $altriDati->tipoOrdine != '' $altriDati->tipoOrdine null));
  127.                 }
  128.             }else{
  129.                 $carrello $repo->findOneBy(array('cliente' => $user'tipoOrdine' => $altriDati->tipoOrdine != '' $altriDati->tipoOrdine null));
  130.             }
  131.         }
  132.         else
  133.             $carrello $repo->findOneBy(array('secret' => $secret));
  134.         $em $this->servizi->doctrine->getManager();
  135.         $em->remove($carrello);
  136.         $em->flush();
  137.         $this->addFlash('notice''Carrello svuotato con successo!');
  138.         return $this->redirectToRoute('carrello');
  139.     }
  140.     /**
  141.      * @Route("/cart/addFromExcel", name="carrello_aggiungi_da_excel", options={"expose"=true})
  142.      */
  143.     public function aggiungiCodiciDaExcelAction(Request $request)
  144.     {
  145.         $funzioniCarrello = new FunzioniCarrello($this->servizi->doctrine$this->imp$this->servizi);
  146.         $recuperaDati = new RecuperoDati($this->servizi->doctrine$this->imp$this->servizi);
  147.         $secret "";
  148.         /** @var User|null $agente */
  149.         $agente null;
  150.         /** @var Anagrafiche|null $anagrafica */
  151.         $anagrafica null;
  152.         $codiceCliente "";
  153.         /** @var \App\Model\Entita\Carrello $carrello */
  154.         $carrello null;
  155.         ini_set('max_execution_time'180);
  156.         $this->servizi->doctrine->getConnection()->getConfiguration()->setSQLLogger(null);
  157.         $em $this->servizi->doctrine->getManager();
  158.         $user $this->servizi->OttieniUtenteCorrente();
  159.         $errori = array();
  160.         /** @var RitornoGenericoCarrello[] $ritorniGenericiCarrello */
  161.         $ritorniGenericiCarrello = array();
  162.         $batch_size 100;
  163.         $count_righe 1;
  164.         $row 0;
  165.         $now = new \DateTime();
  166.         $altriDati AltriDatiUtente::CreaDaUtente($user);
  167.         if (!$user)
  168.             $secret $request->cookies->get('secret_user');
  169.         else {
  170.             $codiceCliente $user->getCodiceCliente();
  171.             if ($this->isGranted("ROLE_ADMIN") || $this->isGranted("ROLE_AGENTE") || $this->isGranted("ROLE_COMMERCIALE")) {
  172.                 $agente $this->servizi->OttieniUtenteCorrente();
  173.                 if ($altriDati && $altriDati->codice != '') {
  174.                     $anagraficaTrovata $this->servizi->ritornaAnagraficaShopSelezionataDaCookieIdentificativo($altriDati->codice$this->servizi->OttieniUtenteCorrente());
  175.                     if ($anagraficaTrovata) {
  176.                         $codiceCliente $anagraficaTrovata->getCodice();
  177.                         $anagrafica $anagraficaTrovata;
  178.                     }
  179.                 }
  180.             }
  181.         }
  182.         /** @var $carrello \App\Model\Entita\Carrello */
  183.         $carrello $recuperaDati->recuperaDettagliCarrello($secret$user$request->getLocale(), $codiceCliente$anagrafica$agentetrue$altriDati->tipoOrdine);
  184.         $split_linee explode("\n"$request->get('lista_da_importare'));
  185.         foreach ($split_linee as $riga) {
  186.             if ($row == $batch_size) {
  187.                 $row 0;
  188.                 $em->flush();
  189.                 $em->clear();
  190.             }
  191.             try {
  192.                 //CODICE ARTICOLO - QUANTITA - MARCA
  193.                 $colonne explode("\t"$riga);
  194.                 if ($colonne[0] != "") {
  195.                     $codiceArticolo $colonne[0];
  196.                     $quantita str_replace(",""."$colonne[1]);
  197.                     $marca null;
  198.                     if (count($colonne) >= 3)
  199.                         $marca $colonne[2];
  200.                     $articolo $this->servizi->doctrine->getRepository(Articoli::class)->findOneBy(array('codice' => $codiceArticolo));
  201.                     if(!$articolo){
  202.                         array_push($errori"Errore riga: " $count_righe " articolo non trovato! Codice: " $codiceArticolo ' - Marca: ' $marca);
  203.                         continue;
  204.                     }
  205.                     /** @var MappaCategorieArticoli $mappa */
  206.                     $mappa $this->servizi->ritornaMappaCategoriaArticoliSeInserita($articolonullnullnullnull$marca $marca nullnull);
  207.                     if (!$mappa) {
  208.                         array_push($errori"Errore riga: " $count_righe " mappa categoria articolo non trovato! Codice: " $codiceArticolo ' - Marca: ' $marca);
  209.                         continue;
  210.                     }
  211.                     if($quantita <= 0){
  212.                         array_push($errori"Errore riga: " $count_righe " La quantità deve essere maggiore di 0! Codice: " $codiceArticolo ' - Marca: ' $marca);
  213.                         continue;
  214.                     }
  215.                     $ritornoGenericoCarrello $funzioniCarrello->CreaRigaCarrello(
  216.                         $mappa->getId(),
  217.                         '',
  218.                         '',
  219.                         $quantita,
  220.                         $user,
  221.                         $secret,
  222.                         $agente,
  223.                         $anagrafica,
  224.                         new CreaRigaCarrelloValoriOpzionali(),
  225.                         $request->getLocale(),
  226.                         $this->servizi->doctrine->getManager()
  227.                     );
  228.                     if(!$ritornoGenericoCarrello->esito){
  229.                         array_push($errori"Errore riga: " $count_righe " Codice: " $codiceArticolo " - Marca: " $marca " -- Errore: " $ritornoGenericoCarrello->RitornaStringaCompostaMessaggiSemplificati());
  230.                     }
  231.                     array_push($ritorniGenericiCarrello$ritornoGenericoCarrello);
  232.                 }
  233.             }
  234.             catch (\Exception $ex){
  235.                 array_push($errori"Errore riga: " $count_righe " Codice: " $codiceArticolo " - Marca: " $marca " -- Errore: Generico");
  236.                 $this->servizi->ScriviRegistroAttivita($request->getClientIp(), ""false$ex->getTraceAsString(), $user);
  237.             }
  238.             $count_righe++;
  239.         }
  240.         $em->flush();
  241.         return new JsonResponse(array(
  242.             'errori' => $errori
  243.         ));
  244.     }
  245.     /**
  246.      * @Route("/agente/spostaCarrello/{idCarrelloOrigine}/{idAnagraficaDestinazione}", name="agente_sposta_carrello", options={"expose"=true})
  247.      */
  248.     public function agenteSpostaCarrello(Request $request$idCarrelloOrigine$idAnagraficaDestinazione)
  249.     {
  250.         $ritorno = array(
  251.             'successo' => 'SI',
  252.             'messaggio' => ''
  253.         );
  254.         $carrello $this->servizi->doctrine->getRepository(Carrello::class)->find($idCarrelloOrigine);
  255.         if($carrello){
  256.             $anagraficaDestinazione $this->servizi->doctrine->getRepository(Anagrafiche::class)->find($idAnagraficaDestinazione);
  257.             if($anagraficaDestinazione) {
  258.                 if (!$this->isGranted("ROLE_ADMIN") && $this->isGranted("ROLE_AGENTE")) {
  259.                     //Verifico che l'agente sia autorizzato a gestire questo carrello
  260.                     if ($carrello->getAgente() != $this->servizi->OttieniUtenteCorrente() && $carrello->getCliente() != $this->servizi->OttieniUtenteCorrente()) {
  261.                         $ritorno['successo'] = 'NO';
  262.                         $ritorno['messaggio'] = "Autorizzazione negata!";
  263.                         return new JsonResponse($ritorno);
  264.                     }
  265.                     if(!in_array($anagraficaDestinazione->getCodiceAgente(), $this->servizi->ritornaArrayCodiciAssociatiAgenteFornitoreUtente($this->servizi->OttieniUtenteCorrente()))){
  266.                         $ritorno['successo'] = 'NO';
  267.                         $ritorno['messaggio'] = "Autorizzazione negata!";
  268.                         return new JsonResponse($ritorno);
  269.                     }
  270.                 }
  271.                 $funzioniCarrello = new FunzioniCarrello($this->servizi->doctrine$this->imp$this->servizi);
  272.                 $spostamentoCarrello $funzioniCarrello->SpostaERicalcolaCarrello($carrello$this->servizi->OttieniUtenteCorrente(), $anagraficaDestinazione$this->servizi->OttieniUtenteCorrente(), $request->getLocale());
  273.                 if($spostamentoCarrello->esito){
  274.                     $ritorno['messaggio'] = 'Carrello spostato correttamente!';
  275.                     return new JsonResponse($ritorno);
  276.                 }else{
  277.                     $ritorno['successo'] = 'NO';
  278.                     $ritorno['messaggio'] = $spostamentoCarrello->RitornaStringaCompostaMessaggiSemplificati();
  279.                     return new JsonResponse($ritorno);
  280.                 }
  281.             }else{
  282.                 $ritorno['successo'] = 'NO';
  283.                 $ritorno['messaggio'] = "Anagrafica con ID: " $idAnagraficaDestinazione ' non trovata!';
  284.                 return new JsonResponse($ritorno);
  285.             }
  286.         }else{
  287.             $ritorno['successo'] = 'NO';
  288.             $ritorno['messaggio'] = "Carrello con ID: " $idCarrelloOrigine ' non trovato!';
  289.             return new JsonResponse($ritorno);
  290.         }
  291.     }
  292.     /**
  293.      * @Route("/cart/dettagliJson", name="carrello_dettagli_json", options={"expose"=true})
  294.      */
  295.     public function dettagliCarrelloAjaxJson(Request $request)
  296.     {
  297.         $user $this->servizi->OttieniUtenteCorrente();
  298.         $secret "";
  299.         /** @var User $agente */
  300.         $agente null;
  301.         /** @var Anagrafiche $anagrafica */
  302.         $anagrafica null;
  303.         $altriDati AltriDatiUtente::CreaDaUtente($user);
  304.         if(!$user)
  305.             $secret $request->cookies->get('secret_user');
  306.         else {
  307.             if ($this->isGranted("ROLE_ADMIN") || $this->isGranted("ROLE_AGENTE") || $this->isGranted("ROLE_COMMERCIALE")) {
  308.                 $agente $this->servizi->OttieniUtenteCorrente();
  309.                 if ($altriDati && $altriDati->codice != ''){
  310.                     $anagraficaTrovata $this->servizi->ritornaAnagraficaShopSelezionataDaCookieIdentificativo($altriDati->codice$this->servizi->OttieniUtenteCorrente());
  311.                     if ($anagraficaTrovata) {
  312.                         $anagrafica $anagraficaTrovata;
  313.                     }
  314.                 }
  315.             }
  316.         }
  317.         $repo $this->servizi->doctrine->getRepository(RigheCarrello::class);
  318.         /** @var Carrello|null $carrello */
  319.         $carrello $this->servizi->RecuperaCarrello($secret$agente$anagrafica$user);
  320.         $ritorno = array(
  321.             'imponibile' => $carrello $carrello->getTotale() : 0,
  322.             'imposta' => $carrello $carrello->getTotaleImposta() : 0,
  323.             'totale' => $carrello $carrello->getTotale() + $carrello->getTotaleImposta() : 0,
  324.         );
  325.         return new JsonResponse($ritorno);
  326.     }
  327.     /**
  328.      * @Route("/cart/count", name="carrello_conta_articoli", options={"expose"=true})
  329.      */
  330.     public function contaArticoliCarrelloAjaxAction(Request $request)
  331.     {
  332.         $user $this->servizi->OttieniUtenteCorrente();
  333.         $secret "";
  334.         /** @var User $agente */
  335.         $agente null;
  336.         /** @var Anagrafiche $anagrafica */
  337.         $anagrafica null;
  338.         $altriDati AltriDatiUtente::CreaDaUtente($user);
  339.         if(!$user)
  340.             $secret $request->cookies->get('secret_user');
  341.         else {
  342.             if ($this->isGranted("ROLE_ADMIN") || $this->isGranted("ROLE_AGENTE") || $this->isGranted("ROLE_COMMERCIALE")) {
  343.                 $agente $this->servizi->OttieniUtenteCorrente();
  344.                 if ($altriDati && $altriDati->codice != ''){
  345.                     $anagraficaTrovata $this->servizi->ritornaAnagraficaShopSelezionataDaCookieIdentificativo($altriDati->codice$this->servizi->OttieniUtenteCorrente());
  346.                     if ($anagraficaTrovata) {
  347.                         $anagrafica $anagraficaTrovata;
  348.                     }
  349.                 }
  350.             }
  351.         }
  352.         $repo $this->servizi->doctrine->getRepository(RigheCarrello::class);
  353.         if ($user) {
  354.             $queryBuilder $repo->createQueryBuilder('righe_carrello')->leftJoin('righe_carrello.carrello''carrello')->select('SUM(righe_carrello.quantita), carrello.id');
  355.             if ($agente && $anagrafica){
  356.                 $queryBuilder $queryBuilder->where('carrello.agente = :ag')->setParameter('ag'$agente)
  357.                     ->andWhere('carrello.anagrafica = :ana')->setParameter('ana'$anagrafica);
  358.             } else{
  359.                 $queryBuilder $queryBuilder->where('carrello.cliente = :cliente')->setParameter('cliente'$user)
  360.                     ->andWhere('carrello.anagrafica IS NULL');
  361.             }
  362.             if($altriDati && $altriDati->tipoOrdine != ''){
  363.                 $queryBuilder $queryBuilder->andWhere('carrello.tipoOrdine = :tipo')->setParameter('tipo'$altriDati->tipoOrdine);
  364.             }
  365.         }
  366.         else{
  367.             $queryBuilder $repo->createQueryBuilder('righe_carrello')->leftJoin('righe_carrello.carrello''carrello')->select('SUM(righe_carrello.quantita), carrello.id')
  368.                 ->where('carrello.secret = :secret')->setParameter('secret'$secret);
  369.         }
  370.         $riga $queryBuilder->groupBy('carrello.id')->getQuery()->getResult();
  371.         $ritorno = array(
  372.             'count' => 0,
  373.             'idCarrello' => 0
  374.         );
  375.         if(count($riga) > 0) {
  376.             $riga $riga[0];
  377.             $ritorno = array(
  378.                 'count' => round($riga["1"], 0),
  379.                 'idCarrello' => $riga["id"]
  380.             );
  381.         }
  382.         return new JsonResponse($ritorno);
  383.     }
  384.     /**
  385.      * @Route("/cart/deleteRow/{idRiga}/{ajax}", name="carrello_elimina_riga", defaults={"ajax" = 0}, options={"expose"=true})
  386.      */
  387.     public function eliminaRigaiCarrelloAjaxAction(Request $request$idRiga$ajax 0)
  388.     {
  389.         $user $this->servizi->OttieniUtenteCorrente();
  390.         $secret "";
  391.         /** @var User|null $agente */
  392.         $agente null;
  393.         /** @var Anagrafiche|null $anagrafica */
  394.         $anagrafica null;
  395.         $altriDati AltriDatiUtente::CreaDaUtente($user);
  396.         if(!$user)
  397.             $secret $request->cookies->get('secret_user');
  398.         else {
  399.             if ($this->isGranted("ROLE_ADMIN") || $this->isGranted("ROLE_AGENTE") || $this->isGranted("ROLE_COMMERCIALE")) {
  400.                 $agente $this->servizi->OttieniUtenteCorrente();
  401.                 if ($altriDati && $altriDati->codice != ''){
  402.                     $anagraficaTrovata $this->servizi->ritornaAnagraficaShopSelezionataDaCookieIdentificativo($altriDati->codice$this->servizi->OttieniUtenteCorrente());
  403.                     if ($anagraficaTrovata) {
  404.                         $anagrafica $anagraficaTrovata;
  405.                     }
  406.                 }
  407.             }
  408.         }
  409.         $repo $this->servizi->doctrine->getRepository(RigheCarrello::class);
  410.         if ($user) {
  411.             /** @var  $queryBuilder RigheCarrello */
  412.             $queryBuilder $repo->createQueryBuilder('righe_carrello')->leftJoin('righe_carrello.carrello''carrello');
  413.             if ($agente && $anagrafica){
  414.                 $queryBuilder $queryBuilder->where('carrello.agente = :ag')->setParameter('ag'$agente)
  415.                     ->andWhere('carrello.anagrafica = :ana')->setParameter('ana'$anagrafica)
  416.                     ->andWhere('righe_carrello.id = :idRiga')->setParameter('idRiga'$idRiga);
  417.             } else{
  418.                 $queryBuilder $queryBuilder->where('carrello.cliente = :cliente')->setParameter('cliente'$user)
  419.                     ->andWhere('righe_carrello.id = :idRiga')->setParameter('idRiga'$idRiga)
  420.                     ->andWhere('carrello.anagrafica IS NULL');
  421.             }
  422.             if($altriDati && $altriDati->tipoOrdine != ''){
  423.                 $queryBuilder $queryBuilder->andWhere('carrello.tipoOrdine = :tipo')->setParameter('tipo'$altriDati->tipoOrdine);
  424.             }
  425.         }
  426.         else{
  427.             /** @var  $queryBuilder RigheCarrello */
  428.             $queryBuilder $repo->createQueryBuilder('righe_carrello')->leftJoin('righe_carrello.carrello''carrello')
  429.                 ->where('carrello.secret = :secret')->setParameter('secret'$secret)
  430.                 ->andWhere('righe_carrello.id = :idRiga')->setParameter('idRiga'$idRiga);
  431.         }
  432.         $funzioniCarrello = new FunzioniCarrello($this->servizi->doctrine$this->imp$this->servizi);
  433.         $ritornoGenericoCarrello $funzioniCarrello->ModificaOEliminaRiga($queryBuilder->getQuery()->getSingleResult(), true);
  434.         if ($ajax)
  435.         {
  436.             return new Response("");
  437.         }
  438.         if ($ritornoGenericoCarrello->esito){
  439.             $this->addFlash(
  440.                 'notice',
  441.                 'Riga eliminata'
  442.             );
  443.         }else{
  444.             $this->addFlash(
  445.                 'error',
  446.                 $ritornoGenericoCarrello->RitornaStringaCompostaMessaggiSemplificati()
  447.             );
  448.         }
  449.         return $this->redirectToRoute('carrello');
  450.     }
  451.     /**
  452.      * @Route("/admin/carrello/elimina/{id}", name="elimina_carrello")
  453.      */
  454.     public function deleteAction(Request $request$id)
  455.     {
  456.         $em $this->servizi->doctrine->getManager();
  457.         $prom $em->getRepository(Carrello::class)->find($id);
  458.         if ($prom) {
  459.             $sql "SET FOREIGN_KEY_CHECKS=0;
  460.                     DELETE FROM righe_carrello WHERE carrello_id = ?;
  461.                     DELETE FROM carrello WHERE id = ?;
  462.                     SET FOREIGN_KEY_CHECKS=1";
  463.             $query explode(';'$sql);
  464.             foreach ($query as $item)
  465.             {
  466.                 $conn $this->servizi->doctrine->getConnection();
  467.                 $stmt $conn->prepare($item);
  468.                 $stmt->bindValue(1$id);
  469.                 $stmt->execute();
  470.             }
  471.             $em->remove($prom);
  472.             $em->flush();
  473.             $this->addFlash(
  474.                 'notice',
  475.                 'Carrello eliminato'
  476.             );
  477.             return $this->redirectToRoute('lista_carrelli');
  478.         }
  479.         else{
  480.             $this->addFlash(
  481.                 'error',
  482.                 "Carrello con ID: " $id " inesistente!"
  483.             );
  484.             return $this->redirect($this->generateUrl('lista_carrelli'));
  485.         }
  486.     }
  487.     /**
  488.      * @Route("/cart/editRowNote/{idRiga}/{aziendale}", name="carrello_modifica_nota_riga", defaults={"aziendale" = "0"}, options={"expose"=true})
  489.      */
  490.     public function modificaNotaRigaCarrelloAjaxAction(Request $request$idRiga$aziendale '0')
  491.     {
  492.         $user $this->servizi->OttieniUtenteCorrente();
  493.         /** @var User|null $agente */
  494.         $agente null;
  495.         /** @var Anagrafiche|null $anagrafica */
  496.         $anagrafica null;
  497.         $altriDati AltriDatiUtente::CreaDaUtente($user);
  498.         $secret "";
  499.         if(!$user)
  500.             $secret $request->cookies->get('secret_user');
  501.         else {
  502.             if ($this->isGranted("ROLE_ADMIN") || $this->isGranted("ROLE_AGENTE") || $this->isGranted("ROLE_COMMERCIALE")) {
  503.                 $agente $this->servizi->OttieniUtenteCorrente();
  504.                 if ($altriDati && $altriDati->codice != ''){
  505.                     $anagraficaTrovata $this->servizi->ritornaAnagraficaShopSelezionataDaCookieIdentificativo($altriDati->codice$this->servizi->OttieniUtenteCorrente());
  506.                     if ($anagraficaTrovata) {
  507.                         $anagrafica $anagraficaTrovata;
  508.                     }
  509.                 }
  510.             }
  511.         }
  512.         $repo $this->servizi->doctrine->getRepository(RigheCarrello::class);
  513.         /** @var  $queryBuilder RigheCarrello*/
  514.         if ($user) {
  515.             $queryBuilder $repo->createQueryBuilder('righe_carrello')->leftJoin('righe_carrello.carrello''carrello');
  516.             if ($agente && $anagrafica){
  517.                 $queryBuilder $queryBuilder->where('carrello.agente = :ag')->setParameter('ag'$agente)
  518.                     ->andWhere('carrello.anagrafica = :ana')->setParameter('ana'$anagrafica)
  519.                     ->andWhere('righe_carrello.id = :idRiga')->setParameter('idRiga'$idRiga);
  520.             } else {
  521.                 $queryBuilder $queryBuilder->where('carrello.cliente = :cliente')->setParameter('cliente'$user)
  522.                     ->andWhere('righe_carrello.id = :idRiga')->setParameter('idRiga'$idRiga)
  523.                     ->andWhere('carrello.anagrafica IS NULL');
  524.             }
  525.             if($altriDati && $altriDati->tipoOrdine != ''){
  526.                 $queryBuilder $queryBuilder->andWhere('carrello.tipoOrdine = :tipo')->setParameter('tipo'$altriDati->tipoOrdine);
  527.             }
  528.             $queryBuilder $queryBuilder->getQuery()->getResult();
  529.         }
  530.         else{
  531.             $queryBuilder $repo->createQueryBuilder('righe_carrello')->leftJoin('righe_carrello.carrello''carrello')
  532.                 ->where('carrello.secret = :secret')->setParameter('secret'$secret)
  533.                 ->andWhere('righe_carrello.id = :idRiga')->setParameter('idRiga'$idRiga)->getQuery()->getResult();
  534.         }
  535.         $data $request->get('data');
  536.         if (count($queryBuilder) > 0){
  537.             $queryBuilder $queryBuilder[0];
  538.             $consentiModificaNota true;
  539.             if ($queryBuilder->getTipologiaPreimpostata())
  540.             {
  541.                 if (!$queryBuilder->getTipologiaPreimpostata()->getConsentiModificaNota())
  542.                     $consentiModificaNota false;
  543.             }
  544.             if ($consentiModificaNota) {
  545.                 if($aziendale != '1') {
  546.                     $queryBuilder->setNota($data['nota']);
  547.                 } else {
  548.                     $queryBuilder->setNotaAziendale($data['nota']);
  549.                 }
  550.                 $em $this->servizi->doctrine->getManager();
  551.                 $em->persist($queryBuilder);
  552.                 $em->flush();
  553.             }
  554.         }
  555.         return new Response("");
  556.     }
  557.     /**
  558.      * @Route("/cart/editDataConsegna/{idRiga}", name="carrello_modifica_data_consegna_riga", options={"expose"=true})
  559.      */
  560.     public function modificaDataConsegnaRigaCarrelloAjaxAction(Request $request$idRiga)
  561.     {
  562.         $user $this->servizi->OttieniUtenteCorrente();
  563.         /** @var User|null $agente */
  564.         $agente null;
  565.         /** @var Anagrafiche|null $anagrafica */
  566.         $anagrafica null;
  567.         $altriDati AltriDatiUtente::CreaDaUtente($user);
  568.         $secret "";
  569.         if(!$user)
  570.             $secret $request->cookies->get('secret_user');
  571.         else {
  572.             if ($this->isGranted("ROLE_ADMIN") || $this->isGranted("ROLE_AGENTE") || $this->isGranted("ROLE_COMMERCIALE")) {
  573.                 $agente $this->servizi->OttieniUtenteCorrente();
  574.                 if ($altriDati && $altriDati->codice != ''){
  575.                     $anagraficaTrovata $this->servizi->ritornaAnagraficaShopSelezionataDaCookieIdentificativo($altriDati->codice$this->servizi->OttieniUtenteCorrente());
  576.                     if ($anagraficaTrovata) {
  577.                         $anagrafica $anagraficaTrovata;
  578.                     }
  579.                 }
  580.             }
  581.         }
  582.         $repo $this->servizi->doctrine->getRepository(RigheCarrello::class);
  583.         /** @var  $queryBuilder RigheCarrello*/
  584.         if ($user) {
  585.             $queryBuilder $repo->createQueryBuilder('righe_carrello')->leftJoin('righe_carrello.carrello''carrello');
  586.             if ($agente && $anagrafica){
  587.                 $queryBuilder $queryBuilder->where('carrello.agente = :ag')->setParameter('ag'$agente)
  588.                     ->andWhere('carrello.anagrafica = :ana')->setParameter('ana'$anagrafica)
  589.                     ->andWhere('righe_carrello.id = :idRiga')->setParameter('idRiga'$idRiga);
  590.             } else{
  591.                 $queryBuilder $queryBuilder->where('carrello.cliente = :cliente')->setParameter('cliente'$user)
  592.                     ->andWhere('righe_carrello.id = :idRiga')->setParameter('idRiga'$idRiga)
  593.                     ->andWhere('carrello.anagrafica = :ana')->setParameter('ana'null);
  594.             }
  595.             if($altriDati && $altriDati->tipoOrdine != ''){
  596.                 $queryBuilder $queryBuilder->andWhere('carrello.tipoOrdine = :tipo')->setParameter('tipo'$altriDati->tipoOrdine);
  597.             }
  598.             $queryBuilder $queryBuilder->getQuery()->getResult();
  599.         }
  600.         else{
  601.             $queryBuilder $repo->createQueryBuilder('righe_carrello')->leftJoin('righe_carrello.carrello''carrello')
  602.                 ->where('carrello.secret = :secret')->setParameter('secret'$secret)
  603.                 ->andWhere('righe_carrello.id = :idRiga')->setParameter('idRiga'$idRiga)->getQuery()->getResult();
  604.         }
  605.         $data $request->get('data');
  606.         if (count($queryBuilder) > 0) {
  607.             $queryBuilder $queryBuilder[0];
  608.             $queryBuilder->setDataConsegna($data['data-consegna'] != '' \DateTime::createFromFormat("d/m/Y"$data['data-consegna']) : null);
  609.             $em $this->servizi->doctrine->getManager();
  610.             $em->persist($queryBuilder);
  611.             $em->flush();
  612.         }
  613.         return new Response("");
  614.     }
  615.     /**
  616.      * @Route("/cart/editRowQuantity/{idRiga}", name="carrello_modifica_qta_riga", options={"expose"=true})
  617.      */
  618.     public function modificaQtaRigaCarrelloAjaxAction(Request $request$idRiga)
  619.     {
  620.         $user $this->servizi->OttieniUtenteCorrente();
  621.         $secret "";
  622.         /** @var User|null $agente */
  623.         $agente null;
  624.         /** @var Anagrafiche|null $anagrafica */
  625.         $anagrafica null;
  626.         $altriDati AltriDatiUtente::CreaDaUtente($user);
  627.         if(!$user)
  628.             $secret $request->cookies->get('secret_user');
  629.         else {
  630.             if ($this->isGranted("ROLE_ADMIN") || $this->isGranted("ROLE_AGENTE") || $this->isGranted("ROLE_COMMERCIALE")) {
  631.                 $agente $this->servizi->OttieniUtenteCorrente();
  632.                 if ($altriDati && $altriDati->codice != ''){
  633.                     $anagraficaTrovata $this->servizi->ritornaAnagraficaShopSelezionataDaCookieIdentificativo($altriDati->codice$this->servizi->OttieniUtenteCorrente());
  634.                     if ($anagraficaTrovata) {
  635.                         $anagrafica $anagraficaTrovata;
  636.                     }
  637.                 }
  638.             }
  639.         }
  640.         $repo $this->servizi->doctrine->getRepository(RigheCarrello::class);
  641.         $funzioniCarrello = new FunzioniCarrello($this->servizi->doctrine$this->imp$this->servizi);
  642.         /** @var  $queryBuilder RigheCarrello*/
  643.         if ($user) {
  644.             $queryBuilder $repo->createQueryBuilder('righe_carrello')->leftJoin('righe_carrello.carrello''carrello');
  645.             if ($agente && $anagrafica){
  646.                 $queryBuilder $queryBuilder->where('carrello.agente = :ag')->setParameter('ag'$agente)
  647.                     ->andWhere('carrello.anagrafica = :ana')->setParameter('ana'$anagrafica)
  648.                     ->andWhere('righe_carrello.id = :idRiga')->setParameter('idRiga'$idRiga);
  649.             }
  650.             else if ($agente){
  651.                 $queryBuilder $queryBuilder
  652.                     ->where('carrello.agente = :ag')->setParameter('ag'$agente)
  653.                     ->andWhere('carrello.cliente = :cliente')->setParameter('cliente'$user)
  654.                     ->andWhere('carrello.anagrafica IS NULL')
  655.                     ->andWhere('righe_carrello.id = :idRiga')->setParameter('idRiga'$idRiga);
  656.             }
  657.             else{
  658.                 $queryBuilder $queryBuilder->where('carrello.cliente = :cliente')->setParameter('cliente'$user)
  659.                     ->andWhere('righe_carrello.id = :idRiga')->setParameter('idRiga'$idRiga)
  660.                     ->andWhere('carrello.anagrafica IS NULL');
  661.             }
  662.             if($altriDati && $altriDati->tipoOrdine != ''){
  663.                 $queryBuilder $queryBuilder->andWhere('carrello.tipoOrdine = :tipo')->setParameter('tipo'$altriDati->tipoOrdine);
  664.             }
  665.             $queryBuilder $queryBuilder->getQuery()->getSingleResult();
  666.         }
  667.         else{
  668.             $queryBuilder $repo->createQueryBuilder('righe_carrello')->leftJoin('righe_carrello.carrello''carrello')
  669.                 ->where('carrello.secret = :secret')->setParameter('secret'$secret)
  670.                 ->andWhere('righe_carrello.id = :idRiga')->setParameter('idRiga'$idRiga)->getQuery()->getSingleResult();
  671.         }
  672.         $data $request->get('data');
  673.         $qtaMod $data['quantita'];
  674.         if ($queryBuilder) {
  675.             $queryBuilder->setQuantita($qtaMod);
  676.             if ($queryBuilder->getTipologiaPreimpostata()) {
  677.                 $qtaMod $qtaMod $queryBuilder->getTipologiaPreimpostata()->getFattoreMoltiplicazione();
  678.                 $queryBuilder->setQuantita($qtaMod);
  679.                 if ($queryBuilder->getTipologiaPreimpostata()->getInserisciQtaAutomatica())
  680.                     $queryBuilder->setNota($data['quantita'] . " PZ " $queryBuilder->getTipologiaPreimpostata()->getNotaEsportazioneRiga());
  681.                 else
  682.                     $queryBuilder->setNota($queryBuilder->getTipologiaPreimpostata()->getNotaEsportazioneRiga());
  683.             }
  684.             $queryBuilder->setTotaleRiga($queryBuilder->getNettoCad() * $queryBuilder->getQuantita());
  685.             $queryBuilder->setTotaleRigaLordo($queryBuilder->getLordoCad() * $queryBuilder->getQuantita());
  686.             $queryBuilder->setTotaleImposta($this->servizi->calcolaImpostaSuImporto($queryBuilder->getTotaleRiga(), $queryBuilder->getAliquotaIva()));
  687.             $ritorno $funzioniCarrello->ModificaOEliminaRiga($queryBuilderfalsefalse);
  688.             $errore "";
  689.             if (!$ritorno->esito){
  690.                 foreach ($ritorno->messaggiSemplificati as $msg){
  691.                     $errore .= ($msg "\n");
  692.                 }
  693.             }
  694.             $carrAggiornato $this->servizi->doctrine->getRepository(Carrello::class)->find($queryBuilder->getCarrello()->getId());
  695.             return new JsonResponse(array(
  696.                 'importoCarrello' => round($carrAggiornato->getTotale(), 2),
  697.                 'impostaCarrello' => round($carrAggiornato->getTotaleImposta(), 2),
  698.                 'totaleCarrello' => round($carrAggiornato->getTotale() + $carrAggiornato->getTotaleImposta(), 2),
  699.                 'errore' => $errore
  700.             ));
  701.         }
  702.         else{
  703.             return new JsonResponse(array(
  704.                 'importoCarrello' => '0',
  705.                 'impostaCarrello' => '0',
  706.                 'totaleCarrello' => '0',
  707.                 'errore' => "PERMESSO_NEGATO"
  708.             ));
  709.         }
  710.     }
  711.     /**
  712.      * @Route("/cart", name="carrello")
  713.      */
  714.     public function mostraCarrello(Request $request)
  715.     {
  716.         /** @var User $user */
  717.         $user $this->servizi->OttieniUtenteCorrente();
  718.         $recuperaDati = new RecuperoDati($this->servizi->doctrine$this->imp$this->servizi);
  719.         $secret "";
  720.         /** @var User|null $agente */
  721.         $agente null;
  722.         /** @var Anagrafiche|null $anagrafica */
  723.         $anagrafica null;
  724.         $codiceCliente "";
  725.         /** @var \App\Model\Entita\Carrello $carrello */
  726.         $carrello null;
  727.         $traduci $this->translating;
  728.         $traduci->CaricaTraduzioniDaFamiglie(array("carrello""mail_nuovo_ordine"), $request->getLocale());
  729.         $filtroComune $this->imp->ritornaImpostazioneDaNome('FiltroVisualizzazioneArticoloPerShopComune');
  730.         // FILTRO VISUALIZZAZIONE ARTICOLI CLIENTI
  731.         $filtroRiferimento null;
  732.         if ($user){
  733.             if ($user->getFiltroVisualizzazioneArticoliClienti()) {
  734.                 if ($user->getFiltroVisualizzazioneArticoliClienti()->getElencoCategorie() != '')
  735.                     $filtroRiferimento $user->getFiltroVisualizzazioneArticoliClienti();
  736.             }
  737.         }else if ($filtroComune != ''){
  738.             $ffl $this->servizi->doctrine->getRepository(FiltroVisualizzazioneArticoliClienti::class)->find($filtroComune);
  739.             if ($ffl && $ffl->getElencoCategorie() != '')
  740.                 $filtroRiferimento $ffl;
  741.         }
  742.         $filtro = new ContenitoreCategoriePerFiltri();
  743.         /** @var $categorie AlberoCategorie[] */
  744.         $listaCategorie $recuperaDati->recuperaAlberoCategorie($filtro$request->getLocale(), $filtroRiferimento);
  745.         $listaCategorieChiaviParent = array();
  746.         foreach ($listaCategorie as $lc){
  747.             if($lc->parent){
  748.                 $_lc_id $lc->parent->id;
  749.                 if (key_exists($_lc_id$listaCategorieChiaviParent)){
  750.                     array_push($listaCategorieChiaviParent[$_lc_id], $lc);
  751.                 }else{
  752.                     $listaCategorieChiaviParent[$_lc_id] = array($lc);
  753.                 }
  754.             }
  755.         }
  756.         $altriDati AltriDatiUtente::CreaDaUtente($user);
  757.         if(!$user)
  758.             $secret $request->cookies->get('secret_user');
  759.         else {
  760.             $codiceCliente $user->getCodiceCliente();
  761.             if ($this->isGranted("ROLE_ADMIN") || $this->isGranted("ROLE_AGENTE") || $this->isGranted("ROLE_COMMERCIALE")) {$agente $this->servizi->OttieniUtenteCorrente();
  762.                 if ($altriDati && $altriDati->codice != ''){
  763.                     $anagraficaTrovata $this->servizi->ritornaAnagraficaShopSelezionataDaCookieIdentificativo($altriDati->codice$this->servizi->OttieniUtenteCorrente());
  764.                     if ($anagraficaTrovata) {
  765.                         $codiceCliente $anagraficaTrovata->getCodice();
  766.                         $anagrafica $anagraficaTrovata;
  767.                     }
  768.                 }
  769.             }
  770.         }
  771.         /** @var $carrello \App\Model\Entita\Carrello */
  772.         $carrello $recuperaDati->recuperaDettagliCarrello($secret$user$request->getLocale(), $codiceCliente$anagrafica$agentetrue$altriDati $altriDati->tipoOrdine null);
  773.         /** @var $destinazioni Destinazioni[] */
  774.         $destinazioni $this->servizi->doctrine->getRepository(Destinazioni::class)->findBy(array('azienda' => $user));
  775.         /** @var $modalitaPagamento ModalitaPagamento[] */
  776.         $modalitaPagamento $this->servizi->doctrine->getRepository(ModalitaPagamento::class)->findAll();
  777.         /** @var $associazioneSpedizioneConsegna AssociazioneSpedizioniClienti[] */
  778.         $associazioneSpedizioneConsegna $this->servizi->doctrine->getRepository(AssociazioneSpedizioniClienti::class)->findBy(array('azienda' => $user));
  779.         /** @var $modalitaSpedizione ModalitaSpedizione[] */
  780.         $modalitaSpedizione $this->servizi->doctrine->getRepository(ModalitaSpedizione::class)->findAll();
  781.         if(!$carrello || $carrello->id == '' || count($carrello->righe) <= ){
  782.             $this->addFlash(
  783.                 'error',
  784.                 $traduci->OttieniElementoDizionario('carrello_errore_vuoto''carrello')->valoreUscita
  785.             );
  786.             return $this->redirectToRoute('home_prodotti');
  787.         }
  788.         $abilitaGestioneCoupon $this->imp->ritornaImpostazioneDaNome("AbilitaUtilizzoCoupon");
  789.         $parametriLayout = array(
  790.             Costanti::T_CARRELLO => $carrello,
  791.             Costanti::T_RIGHE_CARRELLO => $carrello->righe,
  792.             'destinazioni' => $destinazioni,
  793.             'anagrafica' => $anagrafica,
  794.             'modalitaPagamento' => $modalitaPagamento,
  795.             'associazioneSpedizioneConsegna' => $associazioneSpedizioneConsegna,
  796.             'modalitaSpedizione' => $modalitaSpedizione,
  797.             Costanti::T_LISTA_CATEGORIE => $listaCategorie,
  798.             Costanti::T_LISTA_CATEGORIE_CHIAVI_PARENT => $listaCategorieChiaviParent,
  799.             Costanti::ID_MODALITA_PAGAMENTO_SELEZIONATA => ($carrello->modalitaPagamento $carrello->modalitaPagamento->id ''),
  800.             Costanti::ID_MODALITA_SPEDIZIONE_SELEZIONATA => ($carrello->modalitaSpedizione $carrello->modalitaSpedizione->id ''),
  801.             Costanti::MPSC_RADICE_FORM => null
  802.         );
  803.         if (!$user || $user->getUtenteComune() ){
  804.             $formSpedizionePagamento $this->formFactory->createNamedBuilder(Costanti::MPSC_RADICE_FORM)
  805.                 ->add(Costanti::IO_MODALITA_SPEDIZIONE,  EntityType::class, array('required' => false'class' => 'App\Entity\ModalitaSpedizione''choice_label' => function ($modalita) {
  806.                     return $modalita->getTestoDescrittivo();
  807.                 }, 'label' => $traduci->OttieniElementoDizionario("carrello_modalita_spedizione""carrello")->valoreUscita'attr' => array('class' => "form-control input-sm"'style' => 'padding-left:5px;padding-right:5px;')))
  808.                 ->add(Costanti::IO_MODALITA_PAGAMENTO,  EntityType::class, array('required' => false'class' => 'App\Entity\ModalitaPagamento''choice_label' => function ($modalita) {
  809.                     return $modalita->getTestoDescrittivo();
  810.                 }, 'label' => $traduci->OttieniElementoDizionario("carrello_modalita_pagamento""carrello")->valoreUscita'attr' => array('class' => "form-control input-sm"'style' => 'padding-left:5px;padding-right:5px;')))
  811.                 ->add(Costanti::MPSC_AGGIORNA_ORDINESubmitType::class, array('label' => $traduci->OttieniElementoDizionario("carrello_aggiorna""carrello")->valoreUscita'attr' => array('class' => 'form-inline btn btn-sm btn-success''style' => 'margin-top:5px;''autocomplete' => 'off')))
  812.                 ->getForm();
  813.             $formSpedizionePagamento->handleRequest($request);
  814.             if($formSpedizionePagamento->isSubmitted() && $formSpedizionePagamento->isValid()) {
  815.                 $crl $this->servizi->RecuperaCarrello($secret$agente$anagrafica$user);
  816.                 if($formSpedizionePagamento[Costanti::IO_MODALITA_SPEDIZIONE]->getData()){
  817.                     $crl->setModalitaSpedizione($formSpedizionePagamento[Costanti::IO_MODALITA_SPEDIZIONE]->getData());
  818.                 }
  819.                 if($formSpedizionePagamento[Costanti::IO_MODALITA_PAGAMENTO]->getData()){
  820.                     $crl->setModalitaPagamento($formSpedizionePagamento[Costanti::IO_MODALITA_PAGAMENTO]->getData());
  821.                 }
  822.                 $em $this->servizi->doctrine->getManager();
  823.                 $em->persist($crl);
  824.                 $em->flush();
  825.                 $funzioniCarrello = new FunzioniCarrello($this->servizi->doctrine$this->imp$this->servizi);
  826.                 $funzioniCarrello->AggiornaTotaleCarrello($crl->getId());
  827.                 $carrello $recuperaDati->recuperaDettagliCarrello($secret$user$request->getLocale(), $codiceCliente$anagrafica$agente);
  828.                 $parametriLayout[Costanti::T_CARRELLO] = $carrello;
  829.                 $parametriLayout[Costanti::ID_MODALITA_PAGAMENTO_SELEZIONATA] = ($carrello->modalitaPagamento $carrello->modalitaPagamento->id '');
  830.                 $parametriLayout[Costanti::ID_MODALITA_SPEDIZIONE_SELEZIONATA] = ($carrello->modalitaSpedizione $carrello->modalitaSpedizione->id '');
  831.             }
  832.             $parametriLayout[Costanti::MPSC_RADICE_FORM] = $formSpedizionePagamento->createView();
  833.         }
  834.         if ($abilitaGestioneCoupon == '1') {
  835.             $couponForm $this->formFactory->createNamedBuilder(Costanti::CC_RADICE_FORM)
  836.                 ->add(Costanti::CC_CODICE_COUPONTextType::class, array('required' => true'label' => "Codice coupon"'attr' => array('class' => "form-control input-sm"'autocomplete' => 'off''style' => 'padding-left:5px;padding-right:5px;')))
  837.                 ->add(Costanti::CC_APPLICASubmitType::class, array('label' => "Applica"'attr' => array('class' => 'form-inline btn btn-sm btn-success''style' => 'margin-top:5px;')))
  838.                 ->getForm();
  839.             $couponForm->handleRequest($request);
  840.             if($couponForm->isSubmitted() && $couponForm->isValid()){
  841.                 /** @var  $coupon CouponDettaglio */
  842.                 $coupon $this->servizi->doctrine->getRepository(CouponDettaglio::class)->findOneBy(array('codice' => $couponForm[Costanti::CC_CODICE_COUPON]->getData()));
  843.                 if ($coupon) {
  844.                     $ritornoValiditaCoupon $this->servizi->verificaValiditaCoupon($coupon$carrello);
  845.                     if ($ritornoValiditaCoupon->esito) {
  846.                         $em $this->servizi->doctrine->getManager();
  847.                         $crl $carrello->RitornaEntitaDoctrine($this->servizi->doctrine);
  848.                         $utilizzoCoupon = new CouponDettaglioUtilizzo();
  849.                         $utilizzoCoupon->setDettaglioCoupon($coupon);
  850.                         $utilizzoCoupon->setDataUtilizzo(new \DateTime());
  851.                         $utilizzoCoupon->setAgentUtilizzatore($request->headers->get('User-Agent'));
  852.                         $utilizzoCoupon->setLocaleUtilizzatore($request->getLocale());
  853.                         $utilizzoCoupon->setIpUtilizzatore($request->getClientIp());
  854.                         $utilizzoCoupon->setOrdine(null);
  855.                         $utilizzoCoupon->setDataModifica(new \DateTime());
  856.                         $utilizzoCoupon->setDataCreazione(new \DateTime());
  857.                         $utilizzoCoupon->setUtenteModifica($this->servizi->OttieniUtenteCorrente());
  858.                         $em->persist($utilizzoCoupon);
  859.                         $crl->setCouponDettaglioUtilizzo($utilizzoCoupon);
  860.                         $em->persist($crl);
  861.                         $em->flush();
  862.                         $fnzCarrello = new FunzioniCarrello($this->servizi->doctrine$this->imp$this->servizi);
  863.                         $fnzCarrello->AggiornaTotaleCarrello($crl->getId());
  864.                         $this->addFlash(
  865.                             'notice',
  866.                             'Coupon registrato!'
  867.                         );
  868.                     } else {
  869.                         $this->addFlash(
  870.                             'error',
  871.                             $ritornoValiditaCoupon->messaggio
  872.                         );
  873.                     }
  874.                 } else {
  875.                     $this->addFlash(
  876.                         'error',
  877.                         'Coupon con codice ' $couponForm[Costanti::CC_CODICE_COUPON]->getData() . " inesistente"
  878.                     );
  879.                 }
  880.             }
  881.             $parametriLayout[Costanti::CC_RADICE_FORM] = $couponForm->createView();
  882.         }
  883.         return $this->render('ZZ_front_end/carrello/carrello.html.twig'$parametriLayout);
  884.     }
  885.     /**
  886.      * @Route("/shopCM/cart/add/{codice}", name="shopcm_carrello_aggiungi", requirements={"codice"=".+"})
  887.      */
  888.     public function aggiungiCarrelloActionShopComune(Request $request$codice){
  889.         $qta $request->get('qta');
  890.         $idMappa $request->get('id-mappa');
  891.         $idVariante $request->get('id-variante');
  892.         $idListaTipologiaPreimpostata $request->get('id-lista-tipologia-preimpostata''');
  893.         $traduci $this->translating;
  894.         $traduci->CaricaTraduzioniDaFamiglia('carrello'$request->getLocale());
  895.         if ($qta && ($idMappa != '' || $idVariante != '')){
  896.             if ($idVariante != '' && $idMappa == ''){
  897.                 $variante $this->servizi->doctrine->getRepository(Varianti::class)->find($idVariante);
  898.                 if ($variante){
  899.                     $idMappa $variante->getMappa()->getId();
  900.                 }
  901.             }
  902.             $lista = array(
  903.                 array(
  904.                    'idMappaArticoli' => $idMappa,
  905.                    'idVariante' => $idVariante,
  906.                     'qta' => $qta,
  907.                     'idListaTipologiePreimpostate' => $idListaTipologiaPreimpostata
  908.                 )
  909.             );
  910.             $request->attributes->set('lista'$lista);
  911.             /** @var RitornoGenericoCarrello[] $ritorno */
  912.             $ritorno $this->aggiungiCarrelloAction($requesttrue);
  913.             if (count($ritorno) > 0){
  914.                 $primo $ritorno[0];
  915.                 if ($primo->esito){
  916.                     $this->addFlash(
  917.                         'notice',
  918.                         $traduci->OttieniElementoDizionario('carrello_articolo_aggiunto''carrello')->valoreUscita
  919.                     );
  920.                 }else{
  921.                     $this->addFlash(
  922.                         'error',
  923.                         $primo->RitornaStringaCompostaMessaggiSemplificati()
  924.                     );
  925.                 }
  926.             }
  927.         }else{
  928.             $this->addFlash(
  929.                 'error',
  930.                 "Parametri mancanti!"
  931.             );
  932.             $this->logger->error("Parametri mancanti alla chiamata: '" $request->getBaseUrl() . $request->getQueryString() . "' . Parametri necessari: qta - id-mappa - id-variante");
  933.         }
  934.         return $this->redirect($this->servizi->getRefererRoute($request));
  935.     }
  936.     /**
  937.      * @Route("/shopCM/cart/multipleAdd", name="shopcm_carrello_aggiungi_multiplo")
  938.      */
  939.     public function aggiungiCarrelloShopCmMultiplo(Request $request){
  940.         $traduci $this->translating;
  941.         $traduci->CaricaTraduzioniDaFamiglia('carrello'$request->getLocale());
  942.         $field $request->request->all();
  943.         foreach (array_keys($field) as $key) {
  944.             $item $field[$key];
  945.             //Ipotesi campo <input name="form-ord_idVar" value="">
  946.             if (strpos($key'form-ord') !== false) { //Verifico se la variabile fa parte di quelle da analizzare
  947.                 $idVariante = (explode('_'$key))[1];
  948.                 $qta $item;
  949.                 if ($qta && $idVariante != '') {
  950.                     $variante $this->servizi->doctrine->getRepository(Varianti::class)->find($idVariante);
  951.                     if ($variante) {
  952.                         $idMappa $variante->getMappa()->getId();
  953.                     }
  954.                     $lista = array(
  955.                         array(
  956.                             'idMappaArticoli' => $idMappa,
  957.                             'idVariante' => $idVariante,
  958.                             'qta' => $qta,
  959.                             'idListaTipologiePreimpostate' => ''
  960.                         )
  961.                     );
  962.                     $request->attributes->set('lista'$lista);
  963.                     /** @var RitornoGenericoCarrello[] $ritorno */
  964.                     $ritorno $this->aggiungiCarrelloAction($requesttrue);
  965.                     if (count($ritorno) > 0) {
  966.                         $primo $ritorno[0];
  967.                         if ($primo->esito) {
  968.                             $this->addFlash(
  969.                                 'notice',
  970.                                 $traduci->OttieniElementoDizionario('carrello_articolo_aggiunto''carrello')->valoreUscita
  971.                             );
  972.                         } else {
  973.                             $this->addFlash(
  974.                                 'error',
  975.                                 $primo->RitornaStringaCompostaMessaggiSemplificati()
  976.                             );
  977.                         }
  978.                     }
  979.                 }
  980.             }
  981.         }
  982.         return $this->redirect($this->servizi->getRefererRoute($request));
  983.     }
  984.     /**
  985.      * @Route("/cart/fast/add/{codice}/{qta}", name="carrello_fast_aggiungi", defaults={"qta"="1"})
  986.      */
  987.     public function aggiungiFastCarrelloAction(Request $request$codice$qta 1)
  988.     {
  989.         /** @var MappaCategorieArticoli|null $mappa */
  990.         $mappa null;
  991.         $ris $this->servizi->doctrine->getRepository(MappaCategorieArticoli::class)->createQueryBuilder('mappa')
  992.             ->leftJoin('mappa.articolo''articolo')
  993.             ->where('articolo.codice = :cod')->setParameter('cod'$codice)
  994.             ->setMaxResults(1)
  995.             ->getQuery()->getResult();
  996.         if(count($ris) > 0)
  997.         {
  998.             /** @var MappaCategorieArticoli $mappa */
  999.             $mappa $ris[0];
  1000.             $arr = [
  1001.                 [
  1002.                     'idMappaArticoli' => $mappa->getId(),
  1003.                     'idVariante' => '',
  1004.                     'idListaTipologiePreimpostate' => '',
  1005.                     'qta' => $qta
  1006.                 ]
  1007.             ];
  1008.             $request->attributes->set('lista'$arr);
  1009.             /** @var RitornoGenericoCarrello[] $ritorniCarrrello */
  1010.             $ritorniCarrrello $this->aggiungiCarrelloAction($requesttrue);
  1011.             $procedi true;
  1012.             $mess '';
  1013.             foreach ($ritorniCarrrello as $item){
  1014.                 if($procedi && !$item->esito){
  1015.                     $procedi false;
  1016.                     $mess implode(' '$item->messaggiSemplificati);
  1017.                 }
  1018.             }
  1019.             if($procedi) {
  1020.                 $this->addFlash('info''Articolo con codice: ' $codice ' aggiunto al carrello!');
  1021.             }else{
  1022.                 $this->addFlash('error''Errore aggiunta articolo con codice: ' $codice ': ' $mess);
  1023.             }
  1024.             return $this->redirectToRoute('carrello');
  1025.         }else{
  1026.             $this->addFlash('error''Articolo con codice: ' $codice ' non trovato!');
  1027.             return $this->redirectToRoute('homepage');
  1028.         }
  1029.     }
  1030.     /**
  1031.      * @Route("/cart/add", name="carrello_aggiungi", options={"expose"=true})
  1032.      */
  1033.     public function aggiungiCarrelloAction(Request $request$ritornoArray false)
  1034.     {
  1035.         $lista $request->get('lista');
  1036.         $user $this->servizi->OttieniUtenteCorrente();
  1037.         $anagraficaTrovata null;
  1038.         $agente null;
  1039.         $secret "";
  1040.         $altriDati AltriDatiUtente::CreaDaUtente($user);
  1041.         if(!$user)
  1042.             $secret $request->cookies->get('secret_user');
  1043.         else{
  1044.             if ($this->isGranted("ROLE_ADMIN") || $this->isGranted("ROLE_AGENTE") || $this->isGranted("ROLE_COMMERCIALE")){
  1045.                 $agente $this->servizi->OttieniUtenteCorrente();
  1046.                 if ($altriDati && $altriDati->codice != ''){
  1047.                     $anagraficaTrovata $this->servizi->ritornaAnagraficaShopSelezionataDaCookieIdentificativo($altriDati->codice$this->servizi->OttieniUtenteCorrente());
  1048.                     if ($anagraficaTrovata){
  1049.                         $clienteSelezionatoAgente $anagraficaTrovata;
  1050.                     }
  1051.                 }
  1052.             }
  1053.         }
  1054.         /** @var  $ritornoGenericoCarrello RitornoGenericoCarrello[] */
  1055.         $ritorniGenericiCarrello = array();
  1056.         foreach ($lista as $item){
  1057.             $funzioniCarrello = new FunzioniCarrello($this->servizi->doctrine$this->imp$this->servizi);
  1058.             $em $this->servizi->doctrine->getManager();
  1059.             $ritornoGenericoCarrello $funzioniCarrello->CreaRigaCarrello(
  1060.                 $item["idMappaArticoli"],
  1061.                 $item["idVariante"],
  1062.                 $item["idListaTipologiePreimpostate"],
  1063.                 $item["qta"],
  1064.                 $user,
  1065.                 $secret,
  1066.                 $agente,
  1067.                 $anagraficaTrovata,
  1068.                 new CreaRigaCarrelloValoriOpzionali(),
  1069.                 $request->getLocale(),
  1070.                 $em
  1071.             );
  1072.             $em->clear();
  1073.             array_push($ritorniGenericiCarrello$ritornoGenericoCarrello);
  1074.         }
  1075.         if ($ritornoArray){
  1076.             return $ritorniGenericiCarrello;
  1077.         }else {
  1078.             return new JsonResponse($ritorniGenericiCarrello);
  1079.         }
  1080.     }
  1081.     /**
  1082.      * @Route("/cart/checkout", name="carrello_finalizza")
  1083.      */
  1084.     public function finalizzaCarrello(Request $request){
  1085.         /** @var  $user User */
  1086.         $user $this->servizi->OttieniUtenteCorrente();
  1087.         $arrayChiaviControllo = array();
  1088.         $recuperaDati = new RecuperoDati($this->servizi->doctrine$this->imp$this->servizi);
  1089.         /** @var Anagrafiche|null $anagrafica */
  1090.         $anagrafica null;
  1091.         /** @var User|null $agente */
  1092.         $agente null;
  1093.         $codiceCliente "";
  1094.         /** @var Carrello|null $carrello */
  1095.         $carrello null;
  1096.         $this->imp->caricaCacheImpostazioniDaNomi(array('PermettiModificaSpedizioneAgenti''PermettiModificaPagamentoAgenti'));
  1097.         $consentiAgentiModificaSpedizione $this->imp->ritornaImpostazioneDaNome('PermettiModificaSpedizioneAgenti');
  1098.         $consentiAgentiModificaPagamento $this->imp->ritornaImpostazioneDaNome('PermettiModificaPagamentoAgenti');
  1099.         $dataConsegnaObbligatoria $this->imp->ritornaImpostazioneDaNome('OrdiniWebDataConsegnaObbligatoria');
  1100.         $filtro = new ContenitoreCategoriePerFiltri();
  1101.         /** @var $categorie AlberoCategorie[] */
  1102.         $listaCategorie $recuperaDati->recuperaAlberoCategorie($filtro$request->getLocale());
  1103.         $listaCategorieChiaviParent = array();
  1104.         foreach ($listaCategorie as $lc){
  1105.             if($lc->parent){
  1106.                 $_lc_id $lc->parent->id;
  1107.                 if (key_exists($_lc_id$listaCategorieChiaviParent)){
  1108.                     array_push($listaCategorieChiaviParent[$_lc_id], $lc);
  1109.                 }else{
  1110.                     $listaCategorieChiaviParent[$_lc_id] = array($lc);
  1111.                 }
  1112.             }
  1113.         }
  1114.         $traduci $this->translating;
  1115.         $traduci->CaricaTraduzioniDaFamiglia("carrello"$request->getLocale(), false);
  1116.         $secret "";
  1117.         $altriDati AltriDatiUtente::CreaDaUtente($user);
  1118.         if(!$user)
  1119.             $secret $request->cookies->get('secret_user');
  1120.         else {
  1121.             $codiceCliente $user->getCodiceCliente();
  1122.             if ($this->isGranted("ROLE_ADMIN") || $this->isGranted("ROLE_AGENTE") || $this->isGranted("ROLE_COMMERCIALE")) {$agente $this->servizi->OttieniUtenteCorrente();
  1123.                 if ($altriDati && $altriDati->codice != ''){
  1124.                     $anagraficaTrovata $this->servizi->ritornaAnagraficaShopSelezionataDaCookieIdentificativo($altriDati->codice$this->servizi->OttieniUtenteCorrente());
  1125.                     if ($anagraficaTrovata) {
  1126.                         $codiceCliente $anagraficaTrovata->getCodice();
  1127.                         $anagrafica $anagraficaTrovata;
  1128.                     }
  1129.                 }
  1130.             }
  1131.         }
  1132.         /** @var $carrello \App\Model\Entita\Carrello */
  1133.         $carrelloEntita $recuperaDati->recuperaDettagliCarrello($secret$user$request->getLocale(), $codiceCliente$anagrafica$agentetrue$altriDati $altriDati->tipoOrdine null);
  1134.         $carrello null;
  1135.         if($carrelloEntita != null && $carrelloEntita->id != '')
  1136.             $carrello $this->servizi->doctrine->getRepository(Carrello::class)->find($carrelloEntita->id);
  1137.         if(!$carrello || count($carrello->getRighe()) <= ){
  1138.             $this->addFlash(
  1139.                 'error',
  1140.                 $traduci->OttieniElementoDizionario('carrello_errore_vuoto''carrello')->valoreUscita
  1141.             );
  1142.             return $this->redirectToRoute('home_prodotti');
  1143.         }
  1144.         $validazioneCarrello Validator::ValidaCarrello($carrello$this->servizi->doctrine$this->imp$this->servizi$this->servizi->OttieniUtenteCorrente());
  1145.         if($validazioneCarrello->bloccante){
  1146.             $this->addFlash(
  1147.                 'error',
  1148.                 join('<br>'$validazioneCarrello->messaggiSemplificatiPerUtente)
  1149.             );
  1150.             return $this->redirectToRoute('carrello');
  1151.         }
  1152.         /** @var UserCampiCustomTestata[] $campiCustomUser */
  1153.         $campiCustomUser $this->servizi->doctrine->getRepository(UserCampiCustomTestata::class)->findBy(array('luogoVisualizzazione' => 'registrazioneUtente'));
  1154.         $chiaviCampiCustom = array();
  1155.         foreach ($campiCustomUser as $tst) {
  1156.           $chiaviCampiCustom array_merge($this->servizi->RitornaChiaviUserCampiCustom($tst), $chiaviCampiCustom);
  1157.         }
  1158.         $formBuilder $this->createFormBuilder();
  1159.         if (!$user){
  1160.             foreach ($campiCustomUser as $itm){
  1161.                 $formBuilder $this->servizi->AggiungiChildAFormUserCampiCustom($itm$formBuilder);
  1162.             }
  1163.             $formBuilder $formBuilder
  1164.                 ->add(Costanti::IO_RIFERIMENTO_ORDINE,  TextType::class, array('required' => false'label' => $traduci->OttieniElementoDizionario("carrello_riferimento_ordine""carrello")->valoreUscita'attr' => array('class' => "form-control input-sm"'style' => 'padding-left:5px;padding-right:5px;')))
  1165.                 ->add(Costanti::IO_MODALITA_SPEDIZIONE,  EntityType::class, array('required' => true'class' => 'App\Entity\ModalitaSpedizione''choice_label' => function ($modalita) {
  1166.                         return $modalita->getTestoDescrittivo();
  1167.                     }, 'label' => $traduci->OttieniElementoDizionario("carrello_modalita_spedizione""carrello")->valoreUscita'attr' => array('class' => "form-control input-sm"'style' => 'padding-left:5px;padding-right:5px;')))
  1168.                 ->add(Costanti::IO_MODALITA_PAGAMENTO,  EntityType::class, array('required' => true'class' => 'App\Entity\ModalitaPagamento''choice_label' => function ($modalita) {
  1169.                     return $modalita->getTestoDescrittivo();
  1170.                 }, 'label' => $traduci->OttieniElementoDizionario("carrello_modalita_pagamento""carrello")->valoreUscita'attr' => array('class' => "form-control input-sm"'style' => 'padding-left:5px;padding-right:5px;')))
  1171.                 ->add(Costanti::IO_NOTE,  TextareaType::class, array('required' => false'label' => $traduci->OttieniElementoDizionario("carrello_note""carrello")->valoreUscita'attr' => array('class' => "form-control"'rows' => '6''style' => 'padding-left:5px;padding-right:5px;')))
  1172.                 ->add('applica'SubmitType::class, array('label' => $traduci->OttieniElementoDizionario("carrello_completa_btn""carrello")->valoreUscita'attr' => array('class' => 'form-inline btn btn-large btn-success''style' => 'margin-top:2em;float:right;')));
  1173.             $this->servizi->RitornaFormCompletoRegistrazioneUtente($formBuilder$request->getLocale());
  1174.         } else {
  1175.             $formBuilder $formBuilder
  1176.                 ->add(Costanti::IO_DATA_SPEDIZIONE_RITIROTextType::class, array('required' => ($dataConsegnaObbligatoria == '1' true false), 'label' => $traduci->OttieniElementoDizionario("carrello_data_spedizione_ritiro_richiesta""carrello")->valoreUscita'attr' => array('class' => "form-control input-sm input-data"'autocomplete' => 'off''style' => 'padding-left:5px;padding-right:5px;')))
  1177.                 ->add(Costanti::IO_RIFERIMENTO_ORDINETextType::class, array('required' => false'label' => $traduci->OttieniElementoDizionario("carrello_riferimento_ordine""carrello")->valoreUscita'attr' => array('class' => "form-control input-sm"'style' => 'padding-left:5px;padding-right:5px;')));
  1178.             if ($user->getUtenteComune() || $anagrafica) {
  1179.                 if($consentiAgentiModificaSpedizione || $user->getUtenteComune()) {
  1180.                     $formBuilder $formBuilder
  1181.                         ->add(Costanti::IO_MODALITA_SPEDIZIONEEntityType::class, array('required' => true'class' => 'App\Entity\ModalitaSpedizione''choice_label' => function ($modalita) {
  1182.                             return $modalita->getTestoDescrittivo();
  1183.                         }, 'label' => $traduci->OttieniElementoDizionario("carrello_modalita_spedizione""carrello")->valoreUscita'attr' => array('class' => "form-control input-sm"'style' => 'padding-left:5px;padding-right:5px;')));
  1184.                 }
  1185.                 if ($anagrafica){
  1186.                     if($consentiAgentiModificaPagamento) {
  1187.                         $formBuilder->add(Costanti::IO_PAGAMENTOEntityType::class, array('required' => true'class' => 'App\Entity\Pagamenti''choice_label' => function ($pagamento) {
  1188.                             return $pagamento->getNome();
  1189.                         }, 'label' => $traduci->OttieniElementoDizionario("carrello_modalita_pagamento""carrello")->valoreUscita'attr' => array('class' => "form-control input-sm"'style' => 'padding-left:5px;padding-right:5px;')));
  1190.                         $arrayChiaviControllo array_merge($arrayChiaviControllo, array('pagamento'));
  1191.                     }
  1192.                     $formBuilder $formBuilder->add(Costanti::IO_NOTE_AZIENDALITextareaType::class, array('required' => false'label' => $traduci->OttieniElementoDizionario("carrello_note_aziendali""carrello")->valoreUscita'attr' => array('class' => "form-control"'rows' => '6''style' => 'padding-left:5px;padding-right:5px;')));
  1193.                 }else {
  1194.                     $formBuilder->add(Costanti::IO_MODALITA_PAGAMENTOEntityType::class, array('required' => true'class' => 'App\Entity\ModalitaPagamento''choice_label' => function ($modalita) {
  1195.                         return $modalita->getTestoDescrittivo();
  1196.                     }, 'label' => $traduci->OttieniElementoDizionario("carrello_modalita_pagamento""carrello")->valoreUscita'attr' => array('class' => "form-control input-sm"'style' => 'padding-left:5px;padding-right:5px;')));
  1197.                     $arrayChiaviControllo array_merge($arrayChiaviControllo, array('modalitaPagamento'));
  1198.                 }
  1199.                 $arrayChiaviControllo array_merge($arrayChiaviControllo, array('modalitaSpedizione'));
  1200.             } else {
  1201.                 $formBuilder $formBuilder
  1202.                     ->add(Costanti::IO_SPEDIZIONE_CONSEGNAEntityType::class, array('required' => true'class' => 'App\Entity\AssociazioneSpedizioniClienti''query_builder' => function (EntityRepository $er) use ($user) {
  1203.                         return $er->createQueryBuilder('u')
  1204.                             ->where('u.azienda = :azienda')
  1205.                             ->leftJoin('u.spedizione''sped')
  1206.                             ->leftJoin('u.consegna''cons')->setParameter('azienda'$user->getId());
  1207.                     }, 'choice_label' => function ($sped) {
  1208.                         return $sped->getSpedizione()->getDescrizione() . ' - ' $sped->getConsegna()->getDescrizione();
  1209.                     }, 'label' => $traduci->OttieniElementoDizionario("carrello_modalita_spedizione""carrello")->valoreUscita'attr' => array('class' => "form-control input-sm"'style' => 'padding-left:5px;padding-right:5px;')));
  1210.                 $arrayChiaviControllo array_merge($arrayChiaviControllo, array('spedizioneConsegna'));
  1211.             }
  1212.             $formBuilder $formBuilder
  1213.                 ->add(Costanti::IO_NOTETextareaType::class, array('required' => false'label' => $traduci->OttieniElementoDizionario("carrello_note""carrello")->valoreUscita'attr' => array('class' => "form-control"'rows' => '6''style' => 'padding-left:5px;padding-right:5px;')));
  1214.             if ($carrello && $carrello->getAnagrafica())
  1215.             {
  1216.                 /** @var AnagraficheIndirizzi[] $destinazioni */
  1217.                 $formBuilder $formBuilder->add(Costanti::IO_DESTINAZIONIEntityType::class, array('required' => false'class' => 'App\Entity\AnagraficheIndirizzi''label' => $traduci->OttieniElementoDizionario("carrello_destinazioni""carrello")->valoreUscita'query_builder' => function (EntityRepository  $er) use ($carrello) {
  1218.                     return $er->createQueryBuilder('destinazioni')->where('destinazioni.codice = :cod')->setParameter('cod'$carrello->getAnagrafica()->getCodice());
  1219.                 },  'placeholder' => '''choice_label' => function ($destinazione$key$value) {
  1220.                     /** @var AnagraficheIndirizzi $destinazione */
  1221.                     return "(" $destinazione->getTipoIndirizzo() . ") "
  1222.                         $destinazione->getRagioneSociale() . " "
  1223.                         $destinazione->getIndirizzo() . " - "
  1224.                         $destinazione->getCitta() . " (" $destinazione->getProvincia() . ") " $destinazione->getCap() . " - "
  1225.                         $destinazione->getNazione();
  1226.                 }, 'attr' => array('class' => "form-control input-sm"'style' => 'padding-left:5px;padding-right:5px;')));
  1227.             }else{
  1228.                 $formBuilder $formBuilder->add(Costanti::IO_DESTINAZIONIEntityType::class, array('required' => false'class' => 'App\Entity\Destinazioni''label' => $traduci->OttieniElementoDizionario("carrello_destinazioni""carrello")->valoreUscita'query_builder' => function (EntityRepository  $er) use ($user) {
  1229.                     return $er->createQueryBuilder('destinazioni')->where('destinazioni.azienda = :azie')->setParameter('azie'$user);
  1230.                 }, 'placeholder' => '' 'choice_label' => function ($destinazione$key$value) {
  1231.                     /** @var Destinazioni $destinazione */
  1232.                     return "(" $destinazione->getDenominazioneDestinazioneDiversa() . ") "
  1233.                         $destinazione->getRagioneSociale() . " "
  1234.                         $destinazione->getIndirizzo() . " - "
  1235.                         $destinazione->getCitta() . " (" $destinazione->getProvincia() . ")  " $destinazione->getCap() . " - "
  1236.                         $destinazione->getStato();
  1237.                 }, 'attr' => array('class' => "form-control input-sm"'style' => 'padding-left:5px;padding-right:5px;')));
  1238.             }
  1239.             $formBuilder $formBuilder->add(Costanti::IO_INVIO_ORDINESubmitType::class, array('label' => $traduci->OttieniElementoDizionario("carrello_completa_btn""carrello")->valoreUscita'attr' => array('class' => 'form-inline btn btn-large btn-success''style' => 'margin-top:2em;float:right;')));
  1240.         }
  1241.         $formBuilder $formBuilder->getForm();
  1242.         $formBuilder->handleRequest($request);
  1243.         /** @var User $utenteOrdine */
  1244.         $utenteOrdine $this->servizi->OttieniUtenteCorrente();
  1245.         /** @var Destinazioni|AnagraficheIndirizzi $destinazioneOrdine */
  1246.         $destinazioneOrdine null;
  1247.         /** @var ModalitaSpedizione $modalitaSpedizioneOrdine */
  1248.         $modalitaSpedizioneOrdine null;
  1249.         /** @var ModalitaPagamento $modalitaPagamentoOrdine */
  1250.         $modalitaPagamentoOrdine null;
  1251.         /** @var AssociazioneSpedizioniClienti $spedizioneConsegnaOrdine */
  1252.         $spedizioneConsegnaOrdine null;
  1253.         /** @var Pagamenti $pagamentoAzienda */
  1254.         $pagamentoAzienda null;
  1255.         /** @var \DateTime $dataSpedizioneOrdine */
  1256.         $dataSpedizioneOrdine = new \DateTime();
  1257.         $errori_validazione = array();
  1258.         $noteAziendali '';
  1259.         $problemaUtenteGiaEsistente false;
  1260.         if ($formBuilder->isSubmitted() && $formBuilder->isValid()) {
  1261.             foreach ($formBuilder as $key => $value) {
  1262.                 if ($formBuilder[$key]->getData() == "" && (in_array($key$arrayChiaviControllo))) {
  1263.                     array_push($errori_validazione$key);
  1264.                 }
  1265.             }
  1266.             if (count($errori_validazione) <= 0) {
  1267.                 $gestioneUtenti $this->gestioneUtenti;
  1268.                 if (!$user) {
  1269.                     $utenteGiaEsistente $this->servizi->doctrine->getRepository(User::class)->findOneBy(array(
  1270.                         'username' => strtolower($formBuilder[Costanti::RU_USERNAME]->getData())
  1271.                     ));
  1272.                     if(!$utenteGiaEsistente){
  1273.                         $utenteGiaEsistente $this->servizi->doctrine->getRepository(User::class)->findOneBy(array(
  1274.                             'email' => strtolower($formBuilder[Costanti::RU_INDIRIZZO_MAIL]->getData())
  1275.                         ));
  1276.                     }
  1277.                     if (!$utenteGiaEsistente) {
  1278.                         $privato $formBuilder[Costanti::RU_AZIENDA_O_PRIVATO]->getData() == "privato" true false;
  1279.                         $ragioneSociale $formBuilder[Costanti::RU_RAGIONE_SOCIALE]->getData();
  1280.                         if ($privato) {
  1281.                             $ragioneSociale $formBuilder[Costanti::RU_NOME]->getData() . ' ' $formBuilder[Costanti::RU_COGNOME]->getData();
  1282.                         }
  1283.                         $nuovoUtente $gestioneUtenti->CreaUtente(
  1284.                             $ragioneSociale,
  1285.                             $formBuilder[Costanti::RU_NOME]->getData(),
  1286.                             $formBuilder[Costanti::RU_COGNOME]->getData(),
  1287.                             $formBuilder[Costanti::RU_INDIRIZZO_MAIL]->getData(),
  1288.                             $formBuilder[Costanti::RU_INDIRIZZO]->getData(),
  1289.                             $formBuilder[Costanti::RU_CITTA]->getData(),
  1290.                             $formBuilder[Costanti::RU_CAP]->getData(),
  1291.                             $formBuilder[Costanti::RU_PROVINCIA]->getData(),
  1292.                             ($formBuilder[Costanti::RU_STATO]->getData())->getDescrizione(),
  1293.                             $formBuilder[Costanti::RU_TELEFONO]->getData(),
  1294.                             $formBuilder[Costanti::RU_CODICE_FISCALE]->getData(),
  1295.                             $formBuilder[Costanti::RU_PARTITA_IVA]->getData(),
  1296.                             $formBuilder[Costanti::RU_PASSWORD]->getData(),
  1297.                             $formBuilder[Costanti::RU_USERNAME]->getData(),
  1298.                             $formBuilder[Costanti::RU_INDIRIZZO_PEC]->getData(),
  1299.                             $formBuilder[Costanti::RU_CODICE_DESTINATARIO_FATTURAZIONE_ELETTRONICA]->getData(),
  1300.                             $privato,
  1301.                             '',
  1302.                             null,
  1303.                             true
  1304.                         );
  1305.                         //Verifico se ci sono dei campi custom da inserire nel db
  1306.                         if (count($chiaviCampiCustom) > 0) {
  1307.                             $em $this->servizi->doctrine->getManager();
  1308.                             foreach ($chiaviCampiCustom as $cmpCst) {
  1309.                                 $dettaglioCampoCustom $this->servizi->RitornaDettaglioUserCampiCustom($cmpCst);
  1310.                                 $campo $dettaglioCampoCustom->getCampo();
  1311.                                 if ($campo) {
  1312.                                     if ($formBuilder[$cmpCst]->getData() != '') {
  1313.                                         $campoCustom = new UserCampiCustomValori();
  1314.                                         $campoCustom->setDataCreazione(new \DateTime());
  1315.                                         $campoCustom->setDataModifica(new \DateTime());
  1316.                                         $campoCustom->setUser($nuovoUtente);
  1317.                                         $campoCustom->setTestata($dettaglioCampoCustom->getTestata());
  1318.                                         $campoCustom->setCampo($dettaglioCampoCustom->getCampo());
  1319.                                         $campoCustom->setUtenteModifica($this->servizi->OttieniUtenteCorrente());
  1320.                                         $campoCustom->setTipoDato($dettaglioCampoCustom->getCampo()->getTipoDato());
  1321.                                         $campoCustom->setTestoVisualizzato($dettaglioCampoCustom->getCampo()->getTestoVisualizzato());
  1322.                                         $campoCustom->setValore($formBuilder[$cmpCst]->getData());
  1323.                                         $em->persist($campoCustom);
  1324.                                     }
  1325.                                 }
  1326.                             }
  1327.                             $em->flush();
  1328.                         }
  1329.                         $utenteOrdine $nuovoUtente//Setto l'utente dell'ordine con l'utente appena creato
  1330.                         //effettuo automaticamente il login per il nuovo utente creato
  1331.                         $token = new UsernamePasswordToken($nuovoUtente,  'main'$nuovoUtente->getRoles());
  1332.                         $this->token->setToken($token);
  1333.                         $this->session->set('_security_main'serialize($token));
  1334.                         /** @var $destinazione Destinazioni */
  1335.                         $destinazione null;
  1336.                         //Aggiungo la destinazione base
  1337.                         $destinazione $gestioneUtenti->CreaDestinazione($nuovoUtente$nuovoUtente->getRagioneSociale(), $nuovoUtente->getIndirizzo(), $nuovoUtente->getCitta(), $nuovoUtente->getProvincia(),
  1338.                             $nuovoUtente->getCap(), $nuovoUtente->getTelefono(), $nuovoUtente->getNazione(), $nuovoUtente->getEmail());
  1339.                         if ($formBuilder[Costanti::RU_DESTINAZIONE_DIVERSA]->getData() == true) {
  1340.                             $destinazione $gestioneUtenti->CreaDestinazione($nuovoUtente$formBuilder[Costanti::RU_DD_RAGIONE_SOCIALE]->getData(), $formBuilder[Costanti::RU_DD_INDIRIZZO]->getData(), $formBuilder[Costanti::RU_DD_CITTA]->getData(),
  1341.                                 $formBuilder[Costanti::RU_DD_PROVINCIA]->getData(), $formBuilder[Costanti::RU_DD_CAP]->getData(), $formBuilder[Costanti::RU_DD_TELEFONO]->getData(), ($formBuilder[Costanti::RU_DD_STATO]->getData() ? $formBuilder[Costanti::RU_DD_STATO]->getData()->getDescrizione() : ''),
  1342.                                 $formBuilder[Costanti::RU_DD_INDIRIZZO_MAIL]->getData(), $formBuilder[Costanti::RU_DD_CITTA]->getData());
  1343.                         }
  1344.                         $destinazioneOrdine $destinazione;
  1345.                         $modalitaPagamentoOrdine $formBuilder[Costanti::IO_MODALITA_PAGAMENTO]->getData();
  1346.                         $modalitaSpedizioneOrdine $formBuilder[Costanti::IO_MODALITA_SPEDIZIONE]->getData();
  1347.                     } else {
  1348.                         $problemaUtenteGiaEsistente true;
  1349.                     }
  1350.                 } else {
  1351.                     if ($utenteOrdine->getUtenteComune() || $anagrafica) {
  1352.                         $noteAziendali $formBuilder[Costanti::IO_NOTE_AZIENDALI]->getData();
  1353.                         if ($consentiAgentiModificaSpedizione)
  1354.                             $modalitaSpedizioneOrdine $formBuilder[Costanti::IO_MODALITA_SPEDIZIONE]->getData();
  1355.                         if ($anagrafica) {
  1356.                             if ($consentiAgentiModificaPagamento)
  1357.                                 $pagamentoAzienda $formBuilder[Costanti::IO_PAGAMENTO]->getData();
  1358.                         } else {
  1359.                             $modalitaPagamentoOrdine $formBuilder[Costanti::IO_MODALITA_PAGAMENTO]->getData();
  1360.                         }
  1361.                     } else {
  1362.                         $spedizioneConsegnaOrdine $formBuilder[Costanti::IO_SPEDIZIONE_CONSEGNA]->getData();
  1363.                     }
  1364.                     $dataSpedizioneOrdine \DateTime::createFromFormat("d/m/Y"$formBuilder[Costanti::IO_DATA_SPEDIZIONE_RITIRO]->getData());
  1365.                     $destinazioneOrdine $formBuilder[Costanti::IO_DESTINAZIONI]->getData();
  1366.                 }
  1367.                 if (!$problemaUtenteGiaEsistente) {
  1368.                     $noteOrdine $formBuilder[Costanti::IO_NOTE]->getData();
  1369.                     $riferimentoOrdine $formBuilder[Costanti::IO_RIFERIMENTO_ORDINE]->getData();
  1370.                     $funzioniCarrello = new FunzioniCarrello($this->servizi->doctrine$this->imp$this->servizi);
  1371.                     /** @var RitornoConversioneCarrelloInOrdine $ritornoConversioneCarrelloOrdine */
  1372.                     $ritornoConversioneCarrelloOrdine $funzioniCarrello->ConvertiCarrelloInOrdine($utenteOrdine$carrello$destinazioneOrdine$modalitaSpedizioneOrdine$modalitaPagamentoOrdine,
  1373.                         $spedizioneConsegnaOrdine$dataSpedizioneOrdine$riferimentoOrdine$noteOrdine$pagamentoAzienda$request$noteAziendali);
  1374.                     $ordine $ritornoConversioneCarrelloOrdine->ordine;
  1375.                     $noteInvioOrdine "";
  1376.                     foreach ($ritornoConversioneCarrelloOrdine->listaMessaggiConversione as $str) {
  1377.                         $noteInvioOrdine .= $str;
  1378.                     }
  1379.                     $inviaConfermaOrdine $this->imp->ritornaImpostazioneDaNome("InviaConfermaOrdineCliente");
  1380.                     $nomeShop $this->imp->ritornaImpostazioneDaNome("NomeShop");
  1381.                     $inviaConfermaAgente $this->imp->ritornaImpostazioneDaNome('InviaConfermaOrdineAgente');
  1382.                     $translator $traduci;
  1383.                     $translator->CaricaTraduzioniDaFamiglia("mail_nuovo_ordine"$request->getLocale());
  1384.                     $header $translator->OttieniElementoDizionario("mail_nuovo_ordine_header""mail_nuovo_ordine")->valoreUscita;
  1385.                     if ($inviaConfermaOrdine == 1) {
  1386.                         $inviaCopiaConfermaASede $this->imp->ritornaImpostazioneDaNome("InviaCopiaConfermaOrdineClienteSede");
  1387.                         $mailFrom $this->imp->ritornaImpostazioneDaNome("IndirizzoMailFromInvioComunicazioni");
  1388.                         $mailer = new Mailer($this->imp$this->twig$this->servizi);
  1389.                         $listaMailSecondarie $this->servizi->doctrine->getRepository(MailSecondarieUtenti::class)->findBy(array('azienda' => $user'inviaConfermaOrdine' => true));
  1390.                         $adresses = array();
  1391.                         foreach ($listaMailSecondarie as $ms) {
  1392.                             array_push($adresses$ms->getIndirizzoMail());
  1393.                         }
  1394.                         if($ordine->getAnagrafica()){
  1395.                             $elencoAltreMail explode(';'$ordine->getAnagrafica()->getIndirizziMail());
  1396.                             foreach ($elencoAltreMail as $ml){
  1397.                                 if(!in_array($ml$adresses)){
  1398.                                     array_push($adresses$ml);
  1399.                                 }
  1400.                             }
  1401.                         }
  1402.                         $ordineFormattato $ordine;
  1403.                         if ($ordine instanceof Ordini) {
  1404.                             $ordineFormattato $recuperaDati->recuperaDettagliOrdine($ordine->getId(), $ordine->getUtente(), $request->getLocale());
  1405.                         }
  1406.                         $mailToPrima $anagrafica && count($adresses) ? $adresses[0] : $utenteOrdine->getEmail();
  1407.                         array_shift($adresses);
  1408.                         //INVIO MAIL A CLIENTE
  1409.                         $mailer->SendMail(
  1410.                             $header " " $nomeShop,
  1411.                             $this->renderView(
  1412.                                 'email/ordini/nuovo_ordine.html.twig',
  1413.                                 array(
  1414.                                     'ordine_inviato_azienda' => false,
  1415.                                     'ordine' => $ordineFormattato,
  1416.                                     'utente' => $user,
  1417.                                     'noteInvioOrdine' => $noteInvioOrdine,
  1418.                                 )
  1419.                             ),
  1420.                             $mailToPrima,
  1421.                             $adresses,
  1422.                             $mailFrom,
  1423.                             "text/html",
  1424.                             false,
  1425.                             $this->servizi->OttieniUtenteCorrente());
  1426.                         if ($inviaCopiaConfermaASede == || $inviaConfermaAgente == 1) {
  1427.                             $cc = array();
  1428.                             //Compongo l'header
  1429.                             $header2 'Nuovo ordine cliente WEB - ';
  1430.                             if($ordine->getAnagrafica()){
  1431.                                 $header2 .= ($ordine->getAnagrafica()->getCodice() . " - " $ordine->getAnagrafica()->getRagioneSociale());
  1432.                             }else if ($ordine->getAzienda()){
  1433.                                 $header2 .= ($ordine->getAzienda()->getCodiceCliente() . " - " $ordine->getAzienda()->getRagioneSociale());
  1434.                             }
  1435.                             if($inviaCopiaConfermaASede == 1) {
  1436.                                 //INVIO MAIL AZIENDA.
  1437.                                 $mailer->SendMail(
  1438.                                     $header2,
  1439.                                     $this->renderView(
  1440.                                         'email/ordini/nuovo_ordine.html.twig',
  1441.                                         array(
  1442.                                             'ordine_inviato_azienda' => true,
  1443.                                             'ordine' => $ordineFormattato,
  1444.                                             'user' => $user,
  1445.                                             'utente' => $user,
  1446.                                             'noteInvioOrdine' => $noteInvioOrdine,
  1447.                                         )
  1448.                                     ),
  1449.                                     $mailFrom,
  1450.                                     $cc,
  1451.                                     $mailFrom,
  1452.                                     "text/html",
  1453.                                     false,
  1454.                                     $this->servizi->OttieniUtenteCorrente());
  1455.                             }
  1456.                             if ($inviaConfermaAgente == 1){
  1457.                                 $cc = array();
  1458.                                 $mailAgente "";
  1459.                                 if($ordine->getAgente() && $ordine->getAgente()->getEmail() != '')
  1460.                                     $mailAgente $ordine->getAgente()->getEmail();
  1461.                                 //INVIO MAIL AZIENDA.
  1462.                                 $mailer->SendMail(
  1463.                                     $header2,
  1464.                                     $this->renderView(
  1465.                                         'email/ordini/nuovo_ordine.html.twig',
  1466.                                         array(
  1467.                                             'ordine_inviato_azienda' => true,
  1468.                                             'ordine' => $ordineFormattato,
  1469.                                             'user' => $user,
  1470.                                             'utente' => $user,
  1471.                                             'noteInvioOrdine' => $noteInvioOrdine,
  1472.                                         )
  1473.                                     ),
  1474.                                     $mailAgente,
  1475.                                     $cc,
  1476.                                     $mailFrom,
  1477.                                     "text/html",
  1478.                                     false,
  1479.                                     $this->servizi->OttieniUtenteCorrente());
  1480.                             }
  1481.                         }
  1482.                     }
  1483.                     if ($modalitaPagamentoOrdine && $modalitaPagamentoOrdine->getServizioPagamentoAutomatico() != '') {
  1484.                         return $this->redirectToRoute('checkout_ordine', array('id_ordine' => $ordine->getId()));
  1485.                     } else {
  1486.                         $this->addFlash(
  1487.                             'notice',
  1488.                             $traduci->OttieniElementoDizionario('carrello_ordine_inserito''carrello')->valoreUscita
  1489.                         );
  1490.                         return $this->redirectToRoute('dettagli_storico', array('id' => $ordine->getId()));
  1491.                     }
  1492.                 } else {
  1493.                     $this->addFlash(
  1494.                         'error',
  1495.                         $traduci->OttieniElementoDizionario('carrello_errore_mail_o_user_in_uso''carrello')->valoreUscita
  1496.                     );
  1497.                 }
  1498.             }
  1499.         }
  1500.         /** @var $destinazioni Destinazioni[] */
  1501.         $destinazioni $this->servizi->doctrine->getRepository(Destinazioni::class)->findBy(array('azienda' => $user));
  1502.         return $this->render('ZZ_front_end/carrello/carrello_finalizza.html.twig', array(
  1503.             Costanti::T_CARRELLO => $carrelloEntita,
  1504.             Costanti::T_RIGHE_CARRELLO => $carrelloEntita->righe,
  1505.             'carrelloEntita' => $carrelloEntita,
  1506.             'completato' => false,
  1507.             'checkout' => 1,
  1508.             'anagrafica' => $anagrafica,
  1509.             'user' => $user,
  1510.             Costanti::IO_DESTINAZIONI => $destinazioni,
  1511.             Costanti::IO_RADICE_FORM => $formBuilder->createView(),
  1512.             'errori_validazione' => $errori_validazione,
  1513.             'campiCustomUser' => $chiaviCampiCustom,
  1514.             Costanti::T_LISTA_CATEGORIE => $listaCategorie,
  1515.             Costanti::T_LISTA_CATEGORIE_CHIAVI_PARENT => $listaCategorieChiaviParent,
  1516.             'consentiModificaPagamento' => $consentiAgentiModificaPagamento,
  1517.             'consentiModificaSpedizione' => $consentiAgentiModificaSpedizione,
  1518.             Costanti::ID_MODALITA_PAGAMENTO_SELEZIONATA => ($carrello->getModalitaPagamento() ? $carrello->getModalitaPagamento()->getId() : ''),
  1519.             Costanti::ID_MODALITA_SPEDIZIONE_SELEZIONATA => ($carrello->getModalitaSpedizione() ? $carrello->getModalitaSpedizione()->getId() : '')
  1520.         ));
  1521.     }
  1522. }