src/Controller/CarrelloController.php line 920

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