src/Controller/MesasController.php line 57

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\HttpFoundation\Response;
  5. use Symfony\Component\Routing\Annotation\Route;
  6. use App\Entity\Mesas;
  7. use App\Entity\Pedidos;
  8. use App\Entity\Comida;
  9. use App\Entity\Stock;
  10. use App\Entity\Ventas;
  11. use App\Entity\Zonas;
  12. use App\Entity\TipoComida;
  13. use App\Entity\HistorialPedidos;
  14. use Symfony\Component\HttpFoundation\Request;
  15. use Symfony\Component\HttpFoundation\JsonResponse;
  16. use Doctrine\ORM\EntityManagerInterface;
  17. use App\Controller\TicketController;
  18. use App\Entity\Cajaregistro;
  19. use App\Entity\Impresoras;
  20. use App\Entity\Info;
  21. use App\Entity\Productostienda;
  22. use App\Entity\Statscomida;
  23. use App\Entity\Tickets;
  24. use App\Entity\SunmiCloudPrinter;
  25. use Symfony\Component\Validator\Constraints\Length;
  26. use Symfony\Component\Security\Core\Security;
  27. use Symfony\Component\HttpClient\HttpClient;
  28. use Symfony\Component\Process\Exception\ProcessFailedException;
  29. use DateTime;
  30. use phpDocumentor\Reflection\DocBlock\Tags\Var_;
  31. use App\Repository\MesasRepository;
  32. use function PHPUnit\Framework\isNull;
  33. class MesasController extends AbstractController
  34. {
  35.     private $entityManager;
  36.     private $security;
  37.     private $mesasRepository;
  38.     private $impuesto;
  39.     public function __construct(EntityManagerInterface $entityManagerSecurity $securityMesasRepository $mesasRepository)
  40.     {
  41.         $this->entityManager $entityManager;
  42.         $this->security $security;
  43.         $this->mesasRepository $mesasRepository;
  44.         $this->impuesto 10;
  45.     }
  46.     /**
  47.      * @Route("/", name="mesas")
  48.      */
  49.     public function index(): Response
  50.     {
  51.         $em $this->getDoctrine()->getManager();
  52.         $zona $this->entityManager->getRepository(Zonas::class)->findOneBy(['id' => 1]);
  53.         $fechaActual = new \DateTime();
  54.         $fecha_sin_hora = new \DateTime($fechaActual->format('Y-m-d'));
  55.         $cajaAbierta $this->entityManager->getRepository(Cajaregistro::class)->findOneBy(['dia' => $fecha_sin_hora]);
  56.         if ($zona !== null) {
  57.             $mesasConComensales $this->mesasRepository->mesasConComensales();
  58.             $primerazona $zona->getId();
  59.             $mesas $em->getRepository(Mesas::class)->findOneBy(['zonas' => $zona->getId()]);
  60.             $mesasAll $em->getRepository(Mesas::class)->findAll();
  61.             // $barra = $em->getRepository(Mesas::class)->findOneBy(['localizacion' => 'Barra']);
  62.             $repoMesas $this->entityManager->getRepository(Mesas::class);
  63.             $uniones $repoMesas->findMesasUnidas();
  64.             $mesas_libres $repoMesas->mesasDisponibles();
  65.             $mesas_con_union $repoMesas->mesasConUniones(1);
  66.             $id_mesas = array();
  67.             if ($mesas) {
  68.                 foreach ($mesas as $mesa) {
  69.                     $temp = array(
  70.                         'numero' => $mesa->getNumero(),
  71.                         'loc' => $mesa->getZona(),
  72.                     );
  73.                     array_push($id_mesas$temp);
  74.                 }
  75.             }
  76.             $mesas_all = array();
  77.             foreach ($mesasAll as $mesa) {
  78.                 $temp = array(
  79.                     'id' => $mesa->getId(),
  80.                     'numero' => $mesa->getNumero(),
  81.                     'loc' => $mesa->getZonas()->getId(),
  82.                 );
  83.                 array_push($mesas_all$temp);
  84.             }
  85.             $result_mesas = array();
  86.             foreach ($mesas_con_union as $key => $value) {
  87.                 $result[] = "$key";
  88.                 $numbers explode(","$value);
  89.                 $result_mesas array_merge($result$numbers);
  90.             }
  91.             $total_mesas_comedor $repoMesas->totalMesasComedor();
  92.             $idsMesasComedor $repoMesas->idMesasComedor();
  93.             $idsMesasTerraza $repoMesas->idMesasTerraza();
  94.             $repoZonas $this->entityManager->getRepository(Zonas::class);
  95.             $zonaComedor $repoZonas->findOneBy(['id' => 1]);
  96.             $zonaTerraza $repoZonas->findOneBy(['id' => 2]);
  97.             $zonaBarra $repoZonas->findOneBy(['id' => 3]);
  98.             $zonas $repoZonas->findAll();
  99.             $array_zonas = [];
  100.             $totalpagar_zonas = [];
  101.             foreach ($zonas as $zona) {
  102.                 if ($zona->isActive()) {
  103.                     $temp = array(
  104.                         'id' => $zona->getId(),
  105.                         'name' => $zona->getName(),
  106.                         // 'icon' => $tipocomida->getIcon(),
  107.                     );
  108.                     array_push($array_zonas$temp);
  109.                     $result $this->mesasRepository->totalZonas($zona->getId());
  110.                     $temp2 = array(
  111.                         'totalpagar' => $result[0]['total_porpagar'],
  112.                         'zona' => $result[0]['zonas_id']
  113.                     );
  114.                     array_push($totalpagar_zonas$temp2);
  115.                 }
  116.             }
  117.             $repoTipo $this->entityManager->getRepository(TipoComida::class);
  118.             $TiposComida $repoTipo->findBy(['active' => true]);
  119.             //List para movil
  120.             $newTiposMovil = array();
  121.             foreach ($TiposComida as $tipocomida) {
  122.                 $temp = array(
  123.                     'id' => $tipocomida->getId(),
  124.                     'name' => $tipocomida->getName(),
  125.                     'icon' => $tipocomida->getIcon() ?? $tipocomida->getRutaImg(),
  126.                 );
  127.                 array_push($newTiposMovil$temp);
  128.             }
  129.             //List para Desktop
  130.             $newTipos = array();
  131.             foreach ($TiposComida as $tipocomida) {
  132.                 $temp = array(
  133.                     'id' => $tipocomida->getId(),
  134.                     'name' => $tipocomida->getName(),
  135.                     'icon' => $tipocomida->getIcon() ?? $tipocomida->getRutaImg(),
  136.                 );
  137.                 array_push($newTipos$temp);
  138.             }
  139.             
  140.             $tamanoTrozo count($newTipos) > ceil(count($newTipos) / 3) : 1;
  141.             $tipos_separate array_chunk($newTipos$tamanoTrozo);
  142.             
  143.             $comidas_1 = isset($tipos_separate[0]) ? $tipos_separate[0] : [];
  144.             $comidas_2 = isset($tipos_separate[1]) ? $tipos_separate[1] : []; 
  145.             $comidas_3 = isset($tipos_separate[2]) ? $tipos_separate[2] : [];
  146.             
  147.             $repoComida $this->entityManager->getRepository(Comida::class);
  148.             $isComida $repoComida->findBy(['iscomida' => 1]);
  149.             $list_iscomida = array();
  150.             foreach ($isComida as $comida) {
  151.                 $temp = array(
  152.                     'id' => $comida->getId(),
  153.                 );
  154.                 array_push($list_iscomida$temp);
  155.             }
  156.         } else {
  157.             $id_mesas null;
  158.             $uniones null;
  159.             $mesas_libres null;
  160.             $mesas_con_union null;
  161.             $result_mesas null;
  162.             $total_mesas_comedor null;
  163.             // $barra = null; // Si esta línea estaba comentada, no es necesario asignar a null
  164.             $idsMesasComedor null;
  165.             $idsMesasTerraza null;
  166.             $comedor null;
  167.             $terraza null;
  168.             $barra_zona null;
  169.             $array_zonas null;
  170.             $comidas_1 null;
  171.             $comidas_2 null;
  172.             $comidas_3 null;
  173.             $list_iscomida null;
  174.             $newTiposMovil null;
  175.             $newTipos null;
  176.             $mesas_all null;
  177.             $primerazona null;
  178.             $cajaCerrada null;
  179.             $mesasConComensales null;
  180.             $totalpagar_zonas null;
  181.         }
  182.         $user $this->getUser();
  183.         if ($user) {
  184.             // Verifica el rol del usuario actual
  185.             $user $this->security->getUser();
  186.             if ($user->hasRole('ROLE_ADMIN') || $user->hasRole('ROLE_CAMARERO')) {
  187.                 if ($zona === null) {
  188.                     return $this->render('mesas/index.html.twig', [
  189.                         'controller_name' => 'MesasController',
  190.                         'id_mesas' => $id_mesas,
  191.                         'uniones' => $uniones,
  192.                         'mesas_libres' => $mesas_libres,
  193.                         'mesas_con_uniones' => $mesas_con_union,
  194.                         'result' => $result_mesas,
  195.                         'mesas_comedor' => $total_mesas_comedor,
  196.                         // 'barra' => $barra->getNumero(),
  197.                         'id_comedor' => $idsMesasComedor,
  198.                         'id_terraza' => $idsMesasTerraza,
  199.                         'comedor' => null,
  200.                         'terraza' => null,
  201.                         'barra_zona' => null,
  202.                         'zonas' => $array_zonas,
  203.                         'comida_1' => $comidas_1,
  204.                         'comida_2' => $comidas_2,
  205.                         'comida_3' => $comidas_3,
  206.                         'is_comida' => $list_iscomida,
  207.                         'comida_moviles' => $newTiposMovil,
  208.                         'newcomidas' => $newTipos,
  209.                         'primerazona' => $primerazona,
  210.                         'zonasoff' => true,
  211.                         'cajacerrada' => $cajaCerrada,
  212.                         'mesasconcomensales' => $mesasConComensales,
  213.                         'total_zonas' => $totalpagar_zonas,
  214.                     ]);
  215.                 } else if ($result_mesas !== null) {
  216.                     return $this->render('mesas/index.html.twig', [
  217.                         'controller_name' => 'MesasController',
  218.                         'id_mesas' => $id_mesas,
  219.                         'uniones' => $uniones,
  220.                         'mesas_libres' => $mesas_libres,
  221.                         'mesas_con_uniones' => $mesas_con_union,
  222.                         'result' => $result_mesas,
  223.                         'mesas_comedor' => $total_mesas_comedor,
  224.                         // 'barra' => $barra->getNumero(),
  225.                         'id_comedor' => $idsMesasComedor,
  226.                         'id_terraza' => $idsMesasTerraza,
  227.                         // 'comedor' => $zonaComedor->isActive(),
  228.                         // 'terraza' => $zonaTerraza->isActive(),
  229.                         // 'barra_zona' => $zonaBarra->isActive(),
  230.                         'zonas' => $array_zonas,
  231.                         'comida_1' => $comidas_1,
  232.                         'comida_2' => $comidas_2,
  233.                         'comida_3' => $comidas_3,
  234.                         'is_comida' => $list_iscomida,
  235.                         'comida_moviles' => $newTiposMovil,
  236.                         'newcomidas' => $newTipos,
  237.                         'zonasoff' => false,
  238.                         'mesasall' => $mesas_all,
  239.                         'primerazona' => $primerazona,
  240.                         'cajacerrada' => ($cajaAbierta !== null) ? true false,
  241.                         'mesasconcomensales' => $mesasConComensales,
  242.                         'total_zonas' => $totalpagar_zonas,
  243.                     ]);
  244.                 } else {
  245.                     return $this->render('mesas/index.html.twig', [
  246.                         'controller_name' => 'MesasController',
  247.                         'id_mesas' => $id_mesas,
  248.                         'uniones' => $uniones,
  249.                         'mesas_libres' => $mesas_libres,
  250.                         'mesas_con_uniones' => $mesas_con_union,
  251.                         'result' => '',
  252.                         'mesas_comedor' => $total_mesas_comedor,
  253.                         // 'barra' => $barra->getNumero(),
  254.                         'id_comedor' => $idsMesasComedor,
  255.                         'id_terraza' => $idsMesasTerraza,
  256.                         // 'comedor' => $zonaComedor->isActive(),
  257.                         // 'terraza' => $zonaTerraza->isActive(),
  258.                         // 'barra_zona' => $zonaBarra->isActive(),
  259.                         'zonas' => $array_zonas,
  260.                         'comida_1' => $comidas_1,
  261.                         'comida_2' => $comidas_2,
  262.                         'comida_3' => $comidas_3,
  263.                         'is_comida' => $list_iscomida,
  264.                         'comida_moviles' => $newTiposMovil,
  265.                         'zonasoff' => false,
  266.                         'mesasall' => $mesas_all,
  267.                         'primerazona' => $primerazona,
  268.                         'cajacerrada' => ($cajaAbierta !== null) ? true false,
  269.                         'mesasconcomensales' => $mesasConComensales,
  270.                         'total_zonas' => $totalpagar_zonas,
  271.                     ]);
  272.                 }
  273.             } elseif ($user->hasRole('ROLE_GESTOR')) {
  274.                 return $this->redirectToRoute('facturas');
  275.             }
  276.         } else {
  277.             return $this->redirectToRoute('fos_user_security_login');
  278.         }
  279.     }
  280.     /**
  281.      * @Route("/listcomidamesas", name="list_comida")
  282.      */
  283.     public function listComidaMesa(Request $request)
  284.     {
  285.         $em $this->getDoctrine()->getManager();
  286.         $mesa $em->getRepository(Mesas::class)->findOneBy(['numero' => $request->request->get('mesa_id')]);
  287.         $idzona $request->request->get('idzona');
  288.         $repoTickets $this->entityManager->getRepository(Tickets::class);
  289.         $allTickets $repoTickets->findAll();
  290.         $arrayTickets = [];
  291.         foreach ($allTickets as $ticket) {
  292.             $temp = array(
  293.                 'id' => $ticket->getId(),
  294.                 'mesa' => $ticket->getMesaid()->getId(),
  295.                 'numeroticket' => $ticket->getNumeroticket(),
  296.                 'pedidos' => $ticket->getPedidos()
  297.             );
  298.             array_push($arrayTickets$temp);
  299.         }
  300.         $datos_mesa $mesa->getPedidos();
  301.         $haypedidos $this->entityManager->getRepository(Pedidos::class)->findBy(['mesa' => $request->request->get('mesa_id')]);
  302.         if (count($datos_mesa) === 0) {
  303.             if ($mesa->getPorPagar() !== 0) {
  304.                 $mesa->setPorPagar(0);
  305.                 $this->entityManager->persist($mesa);
  306.                 $this->entityManager->flush();
  307.             }
  308.             if ($mesa->getPagado() !== 0) {
  309.                 $mesa->setPagado(0);
  310.                 $this->entityManager->persist($mesa);
  311.                 $this->entityManager->flush();
  312.             }
  313.         }
  314.         $control_mesa null;
  315.         $totalMesa 0;
  316.         $data_mesa = array();
  317.         foreach ($datos_mesa as $p_mesa) {
  318.             $precioExtra 0;
  319.             $extrasString $p_mesa->getComida() ? $p_mesa->getComida()->getName() : $p_mesa->getProducttienda()->getNombre();
  320.             if ($p_mesa->getExtras()) {
  321.                 $extrasString .= ' ->Extras: ';
  322.                 $arrayExtras $p_mesa->getExtras();
  323.                 foreach ($arrayExtras as $extra) {
  324.                     $repoComida $this->entityManager->getRepository(Comida::class);
  325.                     $comidaExtra $repoComida->findOneBy(['id' => $extra]);
  326.                     $precioExtra += floatval($comidaExtra->getPrecio());
  327.                     $extrasString .= $comidaExtra->getName() . ', ';
  328.                 }
  329.                 $extrasString rtrim($extrasString', ');
  330.             }
  331.             $precio $p_mesa->getComida() ? $p_mesa->getComida()->getPrecio() + $precioExtra $p_mesa->getProducttienda()->getPvp() + $precioExtra;
  332.             $precioFinal null;
  333.             if ($p_mesa->isInvitacion()) {
  334.                 $precioFinal 'Invitación';
  335.             } else if ($p_mesa->getDescuento() !== null) {
  336.                 $descuentoPorcentaje floatval($p_mesa->getDescuento()) / 100;
  337.                 $descuentoEuros $precio $descuentoPorcentaje;
  338.                 $precioFinal $precio $descuentoEuros;
  339.                 $totalMesa += $precioFinal;
  340.             } else if ($p_mesa->getDescuentoEur() !== null) {
  341.                 $precioFinal $precio floatval($p_mesa->getDescuentoEur());
  342.                 $totalMesa += $precioFinal;
  343.             } else {
  344.                 $totalMesa += floatval($p_mesa->getComida()->getPrecio());
  345.             }
  346.             $numTicket '';
  347.             foreach ($arrayTickets as $item) {
  348.                 foreach ($item["pedidos"] as $pedido) {
  349.                     if ($p_mesa->getId() === intval($pedido)) {
  350.                         $numTicket ' (T' $item["numeroticket"] . ')';
  351.                     }
  352.                 }
  353.             }
  354.             $temp = array(
  355.                 'comida' => $extrasString,
  356.                 'id' => $p_mesa->getComida() ? $p_mesa->getComida()->getId() : $p_mesa->getProducttienda()->getId(),
  357.                 'precio' => $precioFinal !== null $precioFinal $precio,
  358.                 'marchando' => $p_mesa->isMarchando(),
  359.                 'pedido_mesa' => $p_mesa->getId(),
  360.                 'invitacion' => $p_mesa->isInvitacion() ? 0,
  361.                 'descP' => $p_mesa->getDescuento(),
  362.                 'descE' => $p_mesa->getDescuentoEur(),
  363.                 'numTicket' => $numTicket
  364.             );
  365.             array_push($data_mesa$temp);
  366.         }
  367.         // $totalMesa = $mesa->getPorPagar();
  368.         // $totalPedidos = $this->entityManager->getRepository(Pedidos::class)->findBy(['mesa' => $mesa->getId()]);
  369.         // $totalEnPedidos = 0;
  370.         // foreach($totalPedidos as $pedidoPrecio){
  371.         //     $totalEnPedidos += $pedidoPrecio->getComida()->getPrecio();
  372.         // }
  373.         // if($totalMesa !== $totalEnPedidos){
  374.         //     $mesa->setPorPagar($totalEnPedidos);
  375.         //     $this->entityManager->persist($mesa);
  376.         //     $this->entityManager->flush();
  377.         //     $totalMesa = $totalEnPedidos;
  378.         // }
  379.         $pedidosRepo =  $this->entityManager->getRepository(Pedidos::class);
  380.         $mesa_id $request->request->get('mesa_id');
  381.         if (!empty($data_mesa)) {
  382.             $pedidos $pedidosRepo->findBy([
  383.                 'mesa' => $mesa_id,
  384.                 'marchando' => 0
  385.             ]);
  386.             $control_mesa = (empty($pedidos)) ? 0;
  387.         }
  388.         $totalPagarZonas $this->mesasRepository->totalZonas($idzona);
  389.         return new JsonResponse([
  390.             'pedido_mesa' => $data_mesa,
  391.             'total_mesa' => $totalMesa,
  392.             'control_mesa' => $control_mesa,
  393.             'total_zona' => $totalPagarZonas
  394.         ]);
  395.     }
  396.     /**
  397.      * @Route("/listcomidamesasterraza", name="list_comida_terraza")
  398.      */
  399.     public function listComidaMesaTerraza(Request $request)
  400.     {
  401.         $mesa $this->entityManager->getRepository(Mesas::class)->findOneBy(['numero' => $request->request->get('mesa_id')]);
  402.         $datos_mesa $mesa->getPedidos();
  403.         if (empty($datos_mesa) || $datos_mesa === null) {
  404.             if ($mesa->getPorPagar() !== 0) {
  405.                 $mesa->setPorPagar(0);
  406.                 $this->entityManager->persist($mesa);
  407.                 $this->entityManager->flush();
  408.             }
  409.             if ($mesa->getPagado() !== 0) {
  410.                 $mesa->setPagado(0);
  411.                 $this->entityManager->persist($mesa);
  412.                 $this->entityManager->flush();
  413.             }
  414.         }
  415.         $control_mesa null;
  416.         $data_mesa = array();
  417.         foreach ($datos_mesa as $p_mesa) {
  418.             $temp = array(
  419.                 'comida' => $p_mesa->getComida()->getName(),
  420.                 'id' => $p_mesa->getComida()->getId(),
  421.                 'precio' => $p_mesa->getComida()->getPrecio(),
  422.             );
  423.             array_push($data_mesa$temp);
  424.         }
  425.         $pedidosRepo =  $this->entityManager->getRepository(Pedidos::class);
  426.         $mesa_id $request->request->get('mesa_id');
  427.         if (!empty($data_mesa)) {
  428.             $pedidos $pedidosRepo->findBy([
  429.                 'mesa' => $mesa_id,
  430.                 'marchando' => 0
  431.             ]);
  432.             $control_mesa = (empty($pedidos)) ? 0;
  433.         }
  434.         return new JsonResponse([
  435.             'pedido_mesa' => $data_mesa,
  436.             'total_mesa' => $mesa->getPorPagar(),
  437.             'control_mesa' => $control_mesa
  438.         ]);
  439.     }
  440.     /**
  441.      * @Route("/listbarra", name="list_barra")
  442.      */
  443.     public function listBarra(Request $request)
  444.     {
  445.         $em $this->getDoctrine()->getManager();
  446.         $mesa $em->getRepository(Mesas::class)->findOneBy(['numero' => $request->request->get('mesa_id')]);
  447.         $datos_mesa $mesa->getPedidos();
  448.         $data_mesa = array();
  449.         foreach ($datos_mesa as $p_mesa) {
  450.             $temp = array(
  451.                 'comida' => $p_mesa->getComida()->getName(),
  452.                 'id' => $p_mesa->getComida()->getId(),
  453.                 'precio' => $p_mesa->getComida()->getPrecio(),
  454.             );
  455.             array_push($data_mesa$temp);
  456.         }
  457.         $repoZonas $this->entityManager->getRepository(Zonas::class);
  458.         $zonaComedor $repoZonas->findOneBy(['id' => 1]);
  459.         $zonaTerraza $repoZonas->findOneBy(['id' => 2]);
  460.         return new JsonResponse([
  461.             'pedido_mesa' => $data_mesa,
  462.             'total_mesa' => $mesa->getPorPagar(),
  463.             'comedor' => $zonaComedor->IsActive(),
  464.             'terraza' => $zonaTerraza->IsActive(),
  465.         ]);
  466.     }
  467.     /**
  468.      * @Route("/pagoparcial", name="pago_parcial")
  469.      */
  470.     public function pagoParcial(Request $requestEntityManagerInterface $entityManager)
  471.     {
  472.         // TO DO: Modificar las llamadas del Entity Manager a la nueva version de Symfony 5
  473.         $em $this->getDoctrine()->getManager(); //DEPRECATED
  474.         // $myRepository = $this->$entityManager->getRepository(Mesas::class); //New version to get Doctrine in Symfony 5
  475.         $repoHistorialPedidos $this->entityManager->getRepository(HistorialPedidos::class);
  476.         $num_mesa $request->request->get('num_mesa');
  477.         $idzona intval($request->request->get('idzona'));
  478.         $mesa $em->getRepository(Mesas::class)->findOneBy(['numero' => $num_mesa]);
  479.         $imagenUrl $mesa->getIcon();
  480.         $mesa_total floatval($mesa->getPorPagar());
  481.         $pedidos $request->request->get('elementos');
  482.         $pago $request->request->get('metodo_pago');
  483.         $pedidosRef = array();
  484.         $a_pagar 0;
  485.         $list_ticket = array();
  486.         foreach ($pedidos as $pedido) {
  487.             $comida $em->getRepository(Comida::class)->findOneBy(['id' => $pedido["itemId"]]);
  488.             $comidaTienda $em->getRepository(Productostienda::class)->findOneBy(['id' => $pedido["itemId"]]);
  489.             $p $this->entityManager->getRepository(Pedidos::class)->findOneBy(['id' => $pedido["pedidoDatos"]]);
  490.             $precioExtra 0;
  491.             $extrasString $p->getComida() ? $p->getComida()->getName() : $p->getProducttienda()->getNombre();
  492.             if ($p->getExtras()) {
  493.                 $extrasString .= ' ->Extras: ';
  494.                 $arrayExtras $p->getExtras();
  495.                 foreach ($arrayExtras as $extra) {
  496.                     $repoComida $this->entityManager->getRepository(Comida::class);
  497.                     $comidaExtra $repoComida->findOneBy(['id' => $extra]);
  498.                     $precioExtra += floatval($comidaExtra->getPrecio());
  499.                     $extrasString .= $comidaExtra->getName() . ', ';
  500.                 }
  501.                 $extrasString rtrim($extrasString', ');
  502.             }
  503.             $precio $precioExtra;
  504.             if ($p->getDescuento()) {
  505.                 $descuento floatval($p->getDescuento()) / 100;
  506.                 $descuentoEur $comida->getPrecio() ? $comida->getPrecio() * $descuento $comidaTienda->getPvp() * $descuento;
  507.                 $precio += $comida->getPrecio() ?  $comida->getPrecio() - $descuentoEur $comidaTienda->getPvp() - $descuentoEur;
  508.             } else if ($p->getDescuentoEur()) {
  509.                 $precio += $comida->getPrecio() ? $comida->getPrecio() - $p->getDescuentoEur() : $comidaTienda->getPvp() - $p->getDescuentoEur();
  510.             } else {
  511.                 $precio += $comida->getPrecio() ? $comida->getPrecio() : $comidaTienda->getPvp();
  512.             }
  513.            
  514.             // Verificar si la comida ya está en el array
  515.             $found false;
  516.             foreach ($list_ticket as &$item) {
  517.                 if ($item['id'] === ($comida $comida->getId() : $comidaTienda->getId())) {
  518.                     $item['cantidad'] += 1;
  519.                     $item['price'] += $precio;
  520.                     $found true;
  521.                     break;
  522.                 }
  523.             }
  524.             if (!$found) {
  525.                 $temp = array(
  526.                     'id' => $comida->getId() ? $comida->getId() : $comidaTienda->getId(),
  527.                     'name' => $comida->getName() ? $comida->getName() : $comidaTienda->getNombre(),
  528.                     'price' => $precio,
  529.                     'cantidad' => 1,
  530.                 );
  531.                 array_push($list_ticket$temp);
  532.             }
  533.             if ($comida !== null) {
  534.                 $stock $em->getRepository(Stock::class)->findOneBy(['comida' => $comida->getId()]);
  535.                 if (isset($stock)) {
  536.                     if ($stock->getAmount() !== 0) {
  537.                         $stock->setAmount($stock->getAmount() - 1);
  538.                         $this->entityManager->persist($stock);
  539.                         $this->entityManager->flush();
  540.                     }
  541.                 }
  542.             }
  543.             if ($comidaTienda !== null) {
  544.                 $stock $em->getRepository(Stock::class)->findOneBy(['producttienda' => $comidaTienda->getId()]);
  545.                 if (isset($stock)) {
  546.                     if ($stock->getAmount() !== 0) {
  547.                         $stock->setAmount($stock->getAmount() - 1);
  548.                         $this->entityManager->persist($stock);
  549.                         $this->entityManager->flush();
  550.                     }
  551.                 }
  552.             }
  553.             $a_pagar += $precio;
  554.             array_push($pedidosRef$p->getNumRef());
  555.             $descuento $p->getDescuento();
  556.             $descuento_eur $p->getDescuentoEur();
  557.             $invitacion $p->isInvitacion();
  558.             $precio $p->getComida() ? $p->getComida()->getPrecio() : $p->getProducttienda()->getPvp();
  559.             $precio_total $precio;
  560.             if ($descuento != null) {
  561.                 $desc $precio $descuento 100;
  562.                 $precio_total $precio $desc;
  563.             } else if ($descuento_eur != null) {
  564.                 $precio_total $precio $descuento_eur;
  565.             } else if ($invitacion != null) {
  566.                 $precio_total 0;
  567.             }
  568.             $fechaActual = new \DateTime();
  569.             $fecha_sin_hora = new \DateTime($fechaActual->format('Y-m-d'));
  570.             $pedidoHistorial = array(
  571.                 'mesa' => $p->getMesa()->getNumero(),
  572.                 'comensales' => $p->getMesa()->getComensales(),
  573.                 'comida' =>  $p->getComida() ? $p->getComida()->getName() : $p->getProducttienda()->getNombre(),
  574.                 'precio' => $p->getComida() ? $p->getComida()->getPrecio() : $p->getProducttienda()->getPvp(),
  575.                 'precio_total' => $precio_total,
  576.                 'comentarios' => $p->getComentarios(),
  577.                 'extras' => $p->getExtras(),
  578.                 'invitacion' => $invitacion,
  579.                 'descuento' => $descuento,
  580.                 'descuento_eur' => $descuento_eur,
  581.                 'num_ref' => $p->getNumRef(),
  582.                 'fecha' => $fechaActual,
  583.                 'user' => $this->getUser(),
  584.                 'iva' => $this->impuesto,
  585.             );
  586.             $newPedidoHistorial = new HistorialPedidos();
  587.             $newPedidoHistorial->setMesa($pedidoHistorial['mesa']);
  588.             $newPedidoHistorial->setComida($pedidoHistorial['comida']);
  589.             $newPedidoHistorial->setPrecio($pedidoHistorial['precio']);
  590.             $newPedidoHistorial->setPrecioTotal($pedidoHistorial['precio_total']);
  591.             $newPedidoHistorial->setComentarios($pedidoHistorial['comentarios']);
  592.             $newPedidoHistorial->setExtras($pedidoHistorial['extras']);
  593.             $newPedidoHistorial->setInvitacion($pedidoHistorial['invitacion']);
  594.             $newPedidoHistorial->setFecha($pedidoHistorial['fecha']);
  595.             $newPedidoHistorial->setComensales($pedidoHistorial['comensales']);
  596.             $newPedidoHistorial->setUser($pedidoHistorial['user']);
  597.             $newPedidoHistorial->setIva($pedidoHistorial['iva']);
  598.             if ($pedidoHistorial['descuento']) {
  599.                 $newPedidoHistorial->setDescuento($pedidoHistorial['descuento']);
  600.             }
  601.             if ($pedidoHistorial['descuento_eur']) {
  602.                 $newPedidoHistorial->setDescuentoEur($pedidoHistorial['descuento_eur']);
  603.             }
  604.             $newPedidoHistorial->setNumRef($pedidoHistorial['num_ref']);
  605.             $em->persist($newPedidoHistorial);
  606.             $em->remove($p);
  607.             $em->flush();
  608.         }
  609.         $pedidosRef json_encode($pedidosRef);
  610.         if ($pago === 'Efectivo') {
  611.             $fechaActual = new \DateTime();
  612.             $fecha_sin_hora = new \DateTime($fechaActual->format('Y-m-d'));
  613.             $objetoDiaActual $this->entityManager->getRepository(Cajaregistro::class)->findOneBy(['dia' => $fecha_sin_hora]);
  614.             if ($objetoDiaActual->getTotalCaja() === null) {
  615.                 $objetoDiaActual->setTotalCaja($objetoDiaActual->getInicioCaja() + floatval($a_pagar));
  616.             } else {
  617.                 $objetoDiaActual->setTotalCaja($objetoDiaActual->getTotalCaja() + floatval($a_pagar));
  618.             }
  619.             $this->entityManager->persist($objetoDiaActual);
  620.             $this->entityManager->flush();
  621.         }
  622.         $ticketController = new TicketController($entityManager);
  623.         $order = [
  624.             'id' => 2,
  625.             'date' => date("d/m/Y H:i:s"),
  626.             'items' => $list_ticket,
  627.             'totalAmount' => $a_pagar,
  628.             'nummesa' => $num_mesa
  629.         ];
  630.         $content $ticketController->generateTicket($order);
  631.         // guarda los cambios en la base de datos
  632.         // $this->$entityManager->flush(); New save in symfony 5
  633.         $falta_pagar $mesa_total $a_pagar;
  634.         $valorRestado $a_pagar / ($this->impuesto 100);  // Precio sin IVA
  635.         $cantidadImpuesto $a_pagar $valorRestado;  // IVA
  636.         if ($a_pagar === $mesa_total) {
  637.             $venta = new Ventas();
  638.             $mesa->setPorPagar(sprintf("%.2f"0));
  639.             $mesa->setPagado(sprintf("%.2f"0));
  640.             $mesa->setFactura(null);
  641.             $mesa->setComensales(0);
  642.             //Al ver que la mesa se ha pagado todo correctamente generamos una venta
  643.             $venta->setMesa($mesa);
  644.             $venta->setFecha(new \DateTime);
  645.             $venta->setPagado($valorRestado);
  646.             $venta->setIva($this->impuesto);
  647.             $venta->setImporteIva(number_format($cantidadImpuesto2));
  648.             $venta->setPago($pago);
  649.             $venta->setPedidosRef($pedidosRef);
  650.             $repoTickets $this->entityManager->getRepository(Tickets::class);
  651.             $tickets $repoTickets->findBy(['mesaid' => $mesa->getId()]);
  652.             foreach ($tickets as $ticket) {
  653.                 $this->entityManager->remove($ticket);
  654.                 $em->flush();
  655.             }
  656.             $em->persist($venta);
  657.             $em->flush();
  658.         } else {
  659.             $venta = new Ventas();
  660.             $pagado floatval($mesa->getPagado() + $a_pagar);
  661.             $mesa->setPorPagar(sprintf("%.2f"$falta_pagar));
  662.             $mesa->setPagado(sprintf("%.2f"$pagado));
  663.             //Al ver que la mesa se ha pagado todo correctamente generamos una venta
  664.             $venta->setMesa($mesa);
  665.             $venta->setFecha(new \DateTime);
  666.             $venta->setPagado($valorRestado);
  667.             $venta->setIva($this->impuesto);
  668.             $venta->setImporteIva(number_format($cantidadImpuesto2));
  669.             $venta->setPago($pago);
  670.             $venta->setPedidosRef($pedidosRef);
  671.             $em->persist($venta);
  672.             $em->flush();
  673.         }
  674.         $em->persist($mesa);
  675.         $em->flush();
  676.         $arrayComensales $this->mesasRepository->mesasConComensales();
  677.         $totalPagarZonas $this->mesasRepository->totalZonas($idzona);
  678.         return new JsonResponse([
  679.             'falta_pagar' => number_format($falta_pagar2',''.'),
  680.             'mesa' => $num_mesa,
  681.             'ticket_content' =>  $content,
  682.             'total' => number_format($a_pagar2),
  683.             'img' => $imagenUrl,
  684.             'arraycomensales' => $arrayComensales,
  685.             'total_zona' => $totalPagarZonas
  686.         ]);
  687.     }
  688.     /**
  689.      * @Route("/pagototal", name="pago_total")
  690.      */
  691.     public function pagoTotal(Request $request)
  692.     {
  693.         // $impuesto = 10;
  694.         $repoMesas $this->entityManager->getRepository(Mesas::class); //New version to get Doctrine in Symfony 5
  695.         $repoPedidos $this->entityManager->getRepository(Pedidos::class); //New version to get Doctrine in Symfony 5
  696.         $repoHistorialPedidos $this->entityManager->getRepository(HistorialPedidos::class);
  697.         $num_mesa $request->request->get('num_mesa');
  698.         $comensales $request->request->get('comensales');
  699.         $idzona intval($request->request->get('idzona'));
  700.         $efectivo floatval($request->request->get('efectivo'));
  701.         $tarjeta floatval($request->request->get('tarjeta'));
  702.         $observaciones $request->request->get('observaciones');
  703.         $mesa $repoMesas->findOneBy(['numero' => $request->request->get('num_mesa')]);
  704.         $imagenUrl $mesa->getIcon();
  705.         $mesa_total floatval($mesa->getPorPagar());
  706.         $pedidos $repoPedidos->findBy(['mesa' => $mesa->getId()]);
  707.         $pago $request->request->get('metodo_pago');
  708.         $list_ticket = array();
  709.         $pedidosRef = array();
  710.         foreach ($pedidos as $pedido) {
  711.             $comidaTienda null;
  712.             $comida null;
  713.             if ($pedido->getComida() === null) {
  714.                 $comidaTienda $this->entityManager->getRepository(Productostienda::class)->findOneBy(['id' => $pedido->getProducttienda()->getId()]);
  715.             } else {
  716.                 $comida $this->entityManager->getRepository(Comida::class)->findOneBy(['id' => $pedido->getComida()->getId()]);
  717.             }
  718.             $precioExtra 0;
  719.             $extrasString $pedido->getComida() ? $pedido->getComida()->getName() : $pedido->getProducttienda()->getNombre();
  720.             if ($pedido->getExtras()) {
  721.                 $extrasString .= ' ->Extras: ';
  722.                 $arrayExtras $pedido->getExtras();
  723.                 foreach ($arrayExtras as $extra) {
  724.                     $repoComida $this->entityManager->getRepository(Comida::class);
  725.                     $comidaExtra $repoComida->findOneBy(['id' => $extra]);
  726.                     $precioExtra += floatval($comidaExtra->getPrecio());
  727.                     $extrasString .= $comidaExtra->getName() . ', ';
  728.                 }
  729.                 $extrasString rtrim($extrasString', ');
  730.             }
  731.             $precio $precioExtra;
  732.             if ($pedido->getDescuento() !== null) {
  733.                 $descuento floatval($pedido->getDescuento()) / 100;
  734.                 $descuentoEur $comida ?  $comida->getPrecio() * $descuento $comidaTienda->getPvp() * $descuento;
  735.                 $precio += $comida $comida->getPrecio() - $descuentoEur $comidaTienda->getPvp() - $descuentoEur;
  736.             } else if ($pedido->getDescuentoEur()) {
  737.                 $precio += $comida $comida->getPrecio()  - $pedido->getDescuentoEur() : $comidaTienda->getPvp()  - $pedido->getDescuentoEur();
  738.             } else {
  739.                 $precio += $comida $comida->getPrecio() : $comidaTienda->getPvp();
  740.             }
  741.             // Verificar si la comida ya está en el array
  742.             $found false;
  743.             foreach ($list_ticket as &$item) {
  744.                 if ($item['id'] === ($comida $comida->getId() : ($comidaTienda $comidaTienda->getId() : null))) {
  745.                     $item['cantidad'] += 1;
  746.                     $item['price'] += $precio;
  747.                     $found true;
  748.                     break;
  749.                 }
  750.             }
  751.             if (!$found) {
  752.                 $temp = array(
  753.                     'id' => $comida $comida->getId() : $comidaTienda->getId(),
  754.                     'name' => $comida $comida->getName() : $comidaTienda->getNombre(),
  755.                     'price' => $precio,
  756.                     'cantidad' => 1,
  757.                 );
  758.                 array_push($list_ticket$temp);
  759.             }
  760.             if ($comida !== null) {
  761.                 $stock $this->entityManager->getRepository(Stock::class)->findOneBy(['comida' => $comida->getId()]);
  762.                 if (isset($stock)) {
  763.                     if ($stock->getAmount() !== 0) {
  764.                         $stock->setAmount($stock->getAmount() - 1);
  765.                         $this->entityManager->persist($stock);
  766.                         $this->entityManager->flush();
  767.                     }
  768.                 }
  769.             }
  770.             if ($comidaTienda !== null) {
  771.                 $stock $this->entityManager->getRepository(Stock::class)->findOneBy(['producttienda' => $comidaTienda->getId()]);
  772.                 if (isset($stock)) {
  773.                     if ($stock->getAmount() !== 0) {
  774.                         $stock->setAmount($stock->getAmount() - 1);
  775.                         $this->entityManager->persist($stock);
  776.                         $this->entityManager->flush();
  777.                     }
  778.                 }
  779.             }
  780.             array_push($pedidosRef$pedido->getNumRef());
  781.             $descuento $pedido->getDescuento();
  782.             $descuento_eur $pedido->getDescuentoEur();
  783.             $invitacion $pedido->isInvitacion();
  784.             $precio $pedido->getComida() ? $pedido->getComida()->getPrecio() : $pedido->getProducttienda()->getPvp();
  785.             $precio_total $precio;
  786.             if ($descuento != null) {
  787.                 $desc $precio $descuento 100;
  788.                 $precio_total $precio $desc;
  789.             } else if ($descuento_eur != null) {
  790.                 $precio_total $precio $descuento_eur;
  791.             } else if ($invitacion != null) {
  792.                 $precio_total 0;
  793.             }
  794.             $fechaActual = new \DateTime();
  795.             $stats = new Statscomida();
  796.             $stats->setFecha($fechaActual);
  797.             $stats->setMesa($mesa);
  798.             if ($comidaTienda !== null) {
  799.                 $stats->setTienda($comidaTienda);
  800.             } else {
  801.                 $stats->setComida($comida);
  802.                 $stats->setTipoComida($comida->getTypeFood());
  803.             }
  804.             $this->entityManager->persist($stats);
  805.             $this->entityManager->flush();
  806.             $pedidoHistorial = array(
  807.                 'mesa' => $pedido->getMesa()->getNumero(),
  808.                 'comensales' => $pedido->getMesa()->getComensales(),
  809.                 'comida' =>  $pedido->getComida() ? $pedido->getComida()->getName() : $pedido->getProducttienda()->getNombre(),
  810.                 'precio' => $pedido->getComida() ? $pedido->getComida()->getPrecio() : $pedido->getProducttienda()->getPvp(),
  811.                 'precio_total' => $precio_total,
  812.                 'comentarios' => $pedido->getComentarios(),
  813.                 'extras' => $pedido->getExtras(),
  814.                 'invitacion' => $invitacion,
  815.                 'descuento' => $descuento,
  816.                 'descuento_eur' => $descuento_eur,
  817.                 'num_ref' => $pedido->getNumRef(),
  818.                 'fecha' => $fechaActual,
  819.                 'user' => $this->getUser(),
  820.                 'iva' => $this->impuesto,
  821.             );
  822.             $newPedidoHistorial = new HistorialPedidos();
  823.             $newPedidoHistorial->setMesa($pedidoHistorial['mesa']);
  824.             $newPedidoHistorial->setComida($pedidoHistorial['comida']);
  825.             $newPedidoHistorial->setPrecio($pedidoHistorial['precio']);
  826.             $newPedidoHistorial->setPrecioTotal($pedidoHistorial['precio_total']);
  827.             $newPedidoHistorial->setComentarios($pedidoHistorial['comentarios']);
  828.             $newPedidoHistorial->setExtras($pedidoHistorial['extras']);
  829.             $newPedidoHistorial->setInvitacion($pedidoHistorial['invitacion']);
  830.             $newPedidoHistorial->setFecha($pedidoHistorial['fecha']);
  831.             $newPedidoHistorial->setComensales($pedidoHistorial['comensales']);
  832.             $newPedidoHistorial->setUser($pedidoHistorial['user']);
  833.             $newPedidoHistorial->setIva($pedidoHistorial['iva']);
  834.             if ($pedidoHistorial['descuento']) {
  835.                 $newPedidoHistorial->setDescuento($pedidoHistorial['descuento']);
  836.             }
  837.             if ($pedidoHistorial['descuento_eur']) {
  838.                 $newPedidoHistorial->setDescuentoEur($pedidoHistorial['descuento_eur']);
  839.             }
  840.             $newPedidoHistorial->setNumRef($pedidoHistorial['num_ref']);
  841.             $this->entityManager->persist($newPedidoHistorial);
  842.             $this->entityManager->remove($pedido);
  843.             $this->entityManager->flush();
  844.         }
  845.         $pedidosRef json_encode($pedidosRef);
  846.         $ticketController = new TicketController($this->entityManager);
  847.         $order = [
  848.             'id' => 2,
  849.             'date' => date("d/m/Y H:i:s"),
  850.             'items' => $list_ticket,
  851.             'totalAmount' => $mesa_total,
  852.             'nummesa' => $mesa->getNumero()
  853.         ];
  854.         $content $ticketController->generateTicket($order);
  855.         $this->entityManager->flush();
  856.         if ($efectivo) {
  857.             $valorRestado $efectivo / ($this->impuesto 100);  // Precio sin IVA
  858.             $cantidadImpuesto $efectivo $valorRestado;  // IVA
  859.             if ($mesa_total !== 0) {
  860.                 $ventaEfectivo = new Ventas();
  861.                 $ventaEfectivo->setMesa($mesa);
  862.                 $ventaEfectivo->setFecha(new \DateTime);
  863.                 $ventaEfectivo->setPagado($valorRestado);
  864.                 $ventaEfectivo->setIva($this->impuesto);
  865.                 $ventaEfectivo->setImporteIva(number_format($cantidadImpuesto2));
  866.                 $ventaEfectivo->setPago('Efectivo');
  867.                 $ventaEfectivo->setNumMesa($num_mesa);
  868.                 $ventaEfectivo->setComesales(intval($request->request->get('comensales')));
  869.                 $ventaEfectivo->setPedidosRef($pedidosRef);
  870.                 $ventaEfectivo->setObservaciones($observaciones);
  871.             } else {
  872.                 $ventaEfectivo = new Ventas();
  873.                 $ventaEfectivo->setMesa($mesa);
  874.                 $ventaEfectivo->setFecha(new \DateTime);
  875.                 $ventaEfectivo->setPagado($valorRestado);
  876.                 $ventaEfectivo->setIva($this->impuesto);
  877.                 $ventaEfectivo->setImporteIva(number_format($cantidadImpuesto2));
  878.                 $ventaEfectivo->setPago('Efectivo');
  879.                 $ventaEfectivo->setNumMesa($num_mesa);
  880.                 $ventaEfectivo->setComesales(intval($request->request->get('comensales')));
  881.                 $ventaEfectivo->setPedidosRef($pedidosRef);
  882.                 $ventaEfectivo->setObservaciones($observaciones);
  883.             }
  884.             $fechaActual = new \DateTime();
  885.             $fecha_sin_hora = new \DateTime($fechaActual->format('Y-m-d'));
  886.             $objetoDiaActual $this->entityManager->getRepository(Cajaregistro::class)->findOneBy(['dia' => $fecha_sin_hora]);
  887.             if ($objetoDiaActual->getTotalCaja() === null) {
  888.                 $objetoDiaActual->setTotalCaja($objetoDiaActual->getInicioCaja() + $efectivo);
  889.             } else {
  890.                 $objetoDiaActual->setTotalCaja($objetoDiaActual->getTotalCaja() + $efectivo);
  891.             }
  892.             $this->entityManager->persist($objetoDiaActual);
  893.             $this->entityManager->persist($ventaEfectivo);
  894.         }
  895.         if ($tarjeta) {
  896.             $valorRestado $tarjeta / ($this->impuesto 100);  // Precio sin IVA
  897.             $cantidadImpuesto $tarjeta $valorRestado;  // IVA
  898.             if ($mesa_total !== 0) {
  899.                 $ventaTarjeta = new Ventas();
  900.                 $ventaTarjeta->setMesa($mesa);
  901.                 $ventaTarjeta->setFecha(new \DateTime);
  902.                 $ventaTarjeta->setPagado($valorRestado);
  903.                 $ventaTarjeta->setIva($this->impuesto);
  904.                 $ventaTarjeta->setImporteIva(number_format($cantidadImpuesto2));
  905.                 $ventaTarjeta->setPago('Tarjeta');
  906.                 $ventaTarjeta->setNumMesa($num_mesa);
  907.                 $ventaTarjeta->setComesales(intval($request->request->get('comensales')));
  908.                 $ventaTarjeta->setPedidosRef($pedidosRef);
  909.                 $ventaTarjeta->setObservaciones($observaciones);
  910.             } else {
  911.                 $ventaTarjeta = new Ventas();
  912.                 $ventaTarjeta->setMesa($mesa);
  913.                 $ventaTarjeta->setFecha(new \DateTime);
  914.                 $ventaTarjeta->setPagado($valorRestado);
  915.                 $ventaTarjeta->setIva($this->impuesto);
  916.                 $ventaTarjeta->setImporteIva(number_format($cantidadImpuesto2));
  917.                 $ventaTarjeta->setPago('Tarjeta');
  918.                 $ventaTarjeta->setNumMesa($num_mesa);
  919.                 $ventaTarjeta->setComesales(intval($request->request->get('comensales')));
  920.                 $ventaTarjeta->setPedidosRef($pedidosRef);
  921.                 $ventaTarjeta->setObservaciones($observaciones);
  922.             }
  923.             $this->entityManager->persist($ventaTarjeta);
  924.         }
  925.         $opentickets $this->entityManager->getRepository(Tickets::class)->findBy(['mesaid' => $mesa->getId()]);
  926.         foreach ($opentickets as $ticket) {
  927.             $this->entityManager->remove($ticket);
  928.             $this->entityManager->flush();
  929.         }
  930.         $mesa->setPorPagar(sprintf("%.2f"0));
  931.         $mesa->setPagado(sprintf("%.2f"0));
  932.         $mesa->setFactura(null);
  933.         $mesa->setComensales(0);
  934.         $this->entityManager->persist($mesa);
  935.         $this->entityManager->flush();
  936.         $arrayComensales $this->mesasRepository->mesasConComensales();
  937.         $totalPagarZonas $this->mesasRepository->totalZonas($idzona);
  938.         return new JsonResponse([
  939.             'pagado' => 'La mesa ' $num_mesa ' se ha cobrado correctamente',
  940.             'ticket_content' =>  $content,
  941.             'total' => $mesa_total,
  942.             'img' => $imagenUrl,
  943.             'arraycomensales' => $arrayComensales,
  944.             'total_zona' => $totalPagarZonas,
  945.         ]);
  946.     }
  947.     /**
  948.      * @Route("/sacartiquet", name="sacar_tiquet")
  949.      */
  950.     public function sacarTiquet(Request $requestEntityManagerInterface $entityManager)
  951.     {
  952.         $repoMesas $this->entityManager->getRepository(Mesas::class); //New version to get Doctrine in Symfony 5
  953.         $repoPedidos $this->entityManager->getRepository(Pedidos::class); //New version to get Doctrine in Symfony 5
  954.         $num_mesa $request->request->get('num_mesa');
  955.         $comensales $request->request->get('comensales');
  956.         $mesa $repoMesas->findOneBy(['numero' => $num_mesa]);
  957.         if ($request->request->get('pago') === 'parcial') {
  958.             $repoTickets $this->entityManager->getRepository(Tickets::class);
  959.             $ticket $repoTickets->findOneBy(['mesaid' => $mesa->getId()], ['id' => 'DESC']);
  960.             $array $request->request->get('elementos');
  961.             $pedidoDatosArray = [];
  962.             foreach ($array as $item) {
  963.                 $pedidoDatosArray[] = $item["pedidoDatos"];
  964.             }
  965.             if ($ticket === null) {
  966.                 $ticket = new Tickets();
  967.                 $ticket->setMesaid($mesa);
  968.                 $ticket->setNumeroticket(1);
  969.                 $ticket->setPedidos($pedidoDatosArray);
  970.                 $this->entityManager->persist($ticket);
  971.             } else {
  972.                 $ticket2 = new Tickets();
  973.                 $ticket2->setMesaid($mesa);
  974.                 $ticket2->setNumeroticket($ticket->getNumeroticket() + 1);
  975.                 $ticket2->setPedidos($pedidoDatosArray);
  976.                 $this->entityManager->persist($ticket2);
  977.             }
  978.             $a_pagar 0;
  979.             $list_ticket = array();
  980.             foreach ($array as $pedido) {
  981.                 $comida $this->entityManager->getRepository(Comida::class)->findOneBy(['id' => $pedido["itemId"]]);
  982.                 $comidaTienda $this->entityManager->getRepository(Productostienda::class)->findOneBy(['id' => $pedido["itemId"]]);
  983.                 $p $this->entityManager->getRepository(Pedidos::class)->findOneBy(['id' => $pedido["pedidoDatos"]]);
  984.                 $precioExtra 0;
  985.                 $extrasString $p->getComida() ? $p->getComida()->getName() : $p->getProducttienda()->getNombre();
  986.                 if ($p->getExtras()) {
  987.                     $extrasString .= ' ->Extras: ';
  988.                     $arrayExtras $p->getExtras();
  989.                     foreach ($arrayExtras as $extra) {
  990.                         $repoComida $this->entityManager->getRepository(Comida::class);
  991.                         $comidaExtra $repoComida->findOneBy(['id' => $extra]);
  992.                         $precioExtra += floatval($comidaExtra->getPrecio());
  993.                         $extrasString .= $comidaExtra->getName() . ', ';
  994.                     }
  995.                     $extrasString rtrim($extrasString', ');
  996.                 }
  997.                 $precio $precioExtra;
  998.                 if ($p->getDescuento()) {
  999.                     $descuento floatval($p->getDescuento()) / 100;
  1000.                     $descuentoEur $comida->getPrecio() ?  $comida->getPrecio() * $descuento $comidaTienda->getPvp();
  1001.                     $precio += $comida->getPrecio() ? $comida->getPrecio() - $descuentoEur $comidaTienda->getPvp() - $descuentoEur;
  1002.                 } else if ($p->getDescuentoEur()) {
  1003.                     $precio += $comida->getPrecio() ? $comida->getPrecio() - $p->getDescuentoEur() : $comidaTienda->getPvp() - $p->getDescuentoEur();
  1004.                 } else if ($p->isInvitacion()) {
  1005.                     $precio += 0;
  1006.                 } else {
  1007.                     $precio += $comida->getPrecio() ? $comida->getPrecio() : $comidaTienda->getPvp();
  1008.                 }
  1009.                 // Verificar si la comida ya está en el array
  1010.                 $found false;
  1011.                 foreach ($list_ticket as &$item) {
  1012.                     if ($item['id'] === $comida->getId()) {
  1013.                         $item['cantidad'] += 1;
  1014.                         $item['price'] += $precio;
  1015.                         $found true;
  1016.                         break;
  1017.                     }
  1018.                 }
  1019.                 if (!$found) {
  1020.                     $temp = array(
  1021.                         'id' => $comida->getId(),
  1022.                         'name' => $this->quitarAcentos($comida->getName()),
  1023.                         'price' => $precio,
  1024.                         'cantidad' => 1,
  1025.                     );
  1026.                     array_push($list_ticket$temp);
  1027.                 }
  1028.                 $a_pagar += $precio;
  1029.             }
  1030.             $ticketController = new TicketController($entityManager);
  1031.             $order = [
  1032.                 'id' => 2,
  1033.                 'date' => date("d/m/Y H:i:s"),
  1034.                 'items' => $list_ticket,
  1035.                 'totalAmount' => $a_pagar,
  1036.                 'nummesa' => $mesa->getNumero(),
  1037.             ];
  1038.             $content $ticketController->generateTicket($order);
  1039.         } else {
  1040.             $mesa->setFactura(true);
  1041.             $mesa_total floatval($mesa->getPorPagar());
  1042.             $totalMesa 0;
  1043.             $pedidos $repoPedidos->findBy(['mesa' => $mesa->getId()]);
  1044.             $pago $request->request->get('metodo_pago');
  1045.             $list_ticket = array();
  1046.             foreach ($pedidos as $pedido) {
  1047.                 $totalMesa += floatval($pedido->getComida()->getPrecio());
  1048.                 $comida null;
  1049.                 $comidaTienda null;
  1050.                 if ($pedido->getComida()) {
  1051.                     $comida $this->entityManager->getRepository(Comida::class)->findOneBy(['id' => $pedido->getComida()->getId()]);
  1052.                 } else {
  1053.                     $comidaTienda $this->entityManager->getRepository(Productostienda::class)->findOneBy(['id' => $pedido->getProducttienda()->getId()]);
  1054.                 }
  1055.                 $precioExtra 0;
  1056.                 $extrasString $pedido->getComida() ? $pedido->getComida()->getName() : $pedido->getProducttienda()->getNombre();
  1057.                 if ($pedido->getExtras()) {
  1058.                     $extrasString .= ' ->Extras: ';
  1059.                     $arrayExtras $pedido->getExtras();
  1060.                     foreach ($arrayExtras as $extra) {
  1061.                         $repoComida $this->entityManager->getRepository(Comida::class);
  1062.                         $comidaExtra $repoComida->findOneBy(['id' => $extra]);
  1063.                         $precioExtra += floatval($comidaExtra->getPrecio());
  1064.                         $extrasString .= $comidaExtra->getName() . ', ';
  1065.                     }
  1066.                     $extrasString rtrim($extrasString', ');
  1067.                 }
  1068.                 $precio $precioExtra;
  1069.                 if ($pedido->getDescuento() !== null) {
  1070.                     $descuento floatval($pedido->getDescuento()) / 100;
  1071.                     $descuentoEur $comida ?  $comida->getPrecio() * $descuento $comidaTienda->getPvp() * $descuento;
  1072.                     $precio += $comida ?  $comida->getPrecio() - $descuentoEur $comidaTienda->getPvp() - $descuentoEur;
  1073.                 } else if ($pedido->getDescuentoEur()) {
  1074.                     $precio += $comida $comida->getPrecio() - $pedido->getDescuentoEur() : $comidaTienda->getPvp() - $pedido->getDescuentoEur();
  1075.                 } else if ($pedido->isInvitacion()) {
  1076.                     $precio += 0;
  1077.                 } else {
  1078.                     $precio += $comida $comida->getPrecio() : $comidaTienda->getPvp();
  1079.                 }
  1080.                 // Verificar si la comida ya está en el array
  1081.                 $found false;
  1082.                 foreach ($list_ticket as &$item) {
  1083.                     if ($item['id'] === ($comida $comida->getId() : ($comidaTienda $comidaTienda->getId() : null))) {
  1084.                         $item['cantidad'] += 1;
  1085.                         $item['price'] += $precio;
  1086.                         $found true;
  1087.                         break;
  1088.                     }
  1089.                 }
  1090.                 if (!$found) {
  1091.                     $temp = array(
  1092.                         'id' => $comida $comida->getId() : $comidaTienda->getId(),
  1093.                         'name' => $comida $comida->getName() : $comidaTienda->getNombre(),
  1094.                         'price' => $precio,
  1095.                         'cantidad' => 1,
  1096.                     );
  1097.                     array_push($list_ticket$temp);
  1098.                 }
  1099.             }
  1100.             if($totalMesa !== $mesa_total){
  1101.                 $mesa_total $totalMesa;
  1102.             }
  1103.             $ticketController = new TicketController($this->entityManager);
  1104.             $order = [
  1105.                 'id' => 2,
  1106.                 'date' => date("d/m/Y H:i:s"),
  1107.                 'items' => $list_ticket,
  1108.                 'totalAmount' => $mesa_total,
  1109.                 'nummesa' => $mesa->getNumero(),
  1110.             ];
  1111.             $content $ticketController->generateTicket($order);
  1112.         }
  1113.         $this->entityManager->flush();
  1114.         if (isset($ticket) || isset($ticket2)) {
  1115.             return new JsonResponse([
  1116.                 'ticket_content' =>  $content,
  1117.                 'numeroTicket' => isset($ticket2) ? $ticket2->getNumeroticket() : $ticket->getNumeroticket(),
  1118.                 'apagar' => isset($a_pagar) ? $a_pagar $mesa_total,
  1119.                 'comensales' => $comensales,
  1120.                 'content' => $content,
  1121.             ]);
  1122.         } else {
  1123.             return new JsonResponse([
  1124.                 'ticket_content' =>  $content,
  1125.                 'apagar' => $mesa_total,
  1126.                 'comensales' => $comensales,
  1127.                 'content' => $content,
  1128.             ]);
  1129.         }
  1130.     }
  1131.     /**
  1132.      * @Route("/unirmesas", name="unir_mesas")
  1133.      */
  1134.     public function unirMesas(Request $request)
  1135.     {
  1136.         $union[] = $request->request->get('union');
  1137.         $union_nueva[] = $union;
  1138.         $repoMesas $this->entityManager->getRepository(Mesas::class);
  1139.         $mesa $repoMesas->findOneBy(['numero' => $union[0]['select1']]);
  1140.         $porPagar $mesa->getPorPagar();
  1141.         unset($union[0]['select1']);
  1142.         $mesasSecundariasIds $union[0]['select2'];
  1143.         foreach ($mesasSecundariasIds as $mesaSecundariaId) {
  1144.             $mesaSecundaria $this->entityManager->getRepository(Mesas::class)->findOneBy(['numero' => $mesaSecundariaId]);
  1145.             $porPagar += $mesaSecundaria->getPorPagar();
  1146.             $mesa->setPorPagar($porPagar);
  1147.             $mesaSecundaria->setPorPagar(0);
  1148.             $pedidosMesaSecundaria $mesaSecundaria->getPedidos();
  1149.             if ($pedidosMesaSecundaria !== null) {
  1150.                 foreach ($pedidosMesaSecundaria as $pedido) {
  1151.                     $pedido->setMesa($mesa);
  1152.                 }
  1153.             }
  1154.         }
  1155.         if (is_array($union)) {
  1156.             $mesa->setUnionMesas($union[0]['select2']);
  1157.         } else {
  1158.             $union gettype($union);
  1159.         }
  1160.         $this->entityManager->persist($mesa);
  1161.         $this->entityManager->flush();
  1162.         $repoMesas $this->entityManager->getRepository(Mesas::class);
  1163.         $mesas_libres $repoMesas->mesasDisponibles();
  1164.         $mesas_con_union $repoMesas->mesasConUniones(1);
  1165.         $result_mesas = array();
  1166.         foreach ($mesas_con_union as $key => $value) {
  1167.             $result[] = "$key";
  1168.             $numbers explode(","$value);
  1169.             $result_mesas array_merge($result$numbers);
  1170.         }
  1171.         return new JsonResponse([
  1172.             'union' => $union,
  1173.             'mesas_libres' => $mesas_libres,
  1174.             'nueva_union' => $union_nueva,
  1175.             'total_uniones' => $mesas_con_union,
  1176.         ]);
  1177.     }
  1178.     /**
  1179.      * @Route("/separarmesa", name="separar_mesa")
  1180.      */
  1181.     public function eliminarUnion(Request $request)
  1182.     {
  1183.         $desunir $request->request->get('idMesa');
  1184.         $repoMesas $this->entityManager->getRepository(Mesas::class);
  1185.         $mesa $repoMesas->findOneBy(['numero' => $desunir]);
  1186.         $idMesa $repoMesas->obtenerMesaConUnionesPorId($desunir);
  1187.         if (empty($mesa->getPedidos())) {
  1188.             return new JsonResponse([
  1189.                 'tiene_uniones' => 'No puedes eliminar una union teniendo pedidos sin cobrar',
  1190.                 'pedido' => $mesa->getPedidos()
  1191.             ], 200);
  1192.         }
  1193.         if ($mesa->setUnionMesas(null)) {
  1194.             $this->entityManager->persist($mesa);
  1195.             $this->entityManager->flush();
  1196.             $mesas_con_union $repoMesas->mesasConUniones(1);
  1197.             $result_mesas = array();
  1198.             foreach ($mesas_con_union as $key => $value) {
  1199.                 $result[] = "$key";
  1200.                 $numbers explode(","$value);
  1201.                 $result_mesas array_merge($result$numbers);
  1202.             }
  1203.             return new JsonResponse([
  1204.                 'desunida' => 'Las mesas se han desunido correctamente',
  1205.                 'desunion' => $idMesa,
  1206.                 'total_uniones' => $mesas_con_union,
  1207.             ], 200);
  1208.         } else {
  1209.             return new JsonResponse([
  1210.                 'desunida' => 'No se ha desunido la mesa',
  1211.             ], 400);
  1212.         }
  1213.     }
  1214.     /**
  1215.      * @Route("/unionescomedor", name="uniones_comedor")
  1216.      */
  1217.     function mesaConUnionesComedor(Request $request)
  1218.     {
  1219.         $idZona intval($request->request->get('idzona'));
  1220.         $zonaname $this->entityManager->getRepository(Zonas::class)->findOneBy(['id' => $idZona])->getName();
  1221.         $repoMesas $this->entityManager->getRepository(Mesas::class);
  1222.         $mesas_con_union $repoMesas->mesasConUniones($idZona);
  1223.         $mesasId $repoMesas->idMesas($idZona);
  1224.         $totalPagarZona $this->mesasRepository->totalZonas($idZona);
  1225.         $result_mesas = array();
  1226.         foreach ($mesas_con_union as $key => $value) {
  1227.             $numbers explode(","$value);
  1228.             $result_mesas[$key] = implode(","$numbers);
  1229.         }
  1230.         $repoZonas $this->entityManager->getRepository(Zonas::class);
  1231.         $zonaBarra $repoZonas->findOneBy(['id' => 3]);
  1232.         $zonaTerraza $repoZonas->findOneBy(['id' => 2]);
  1233.         return new JsonResponse([
  1234.             'uniones_comedor' => $result_mesas,
  1235.             // 'barra' => $zonaBarra->isActive(),
  1236.             'terraza' => $zonaTerraza->isActive(),
  1237.             'mesas' => $mesasId,
  1238.             'zonaname' => $zonaname,
  1239.             'total_zona' => $totalPagarZona,
  1240.         ], 200);
  1241.     }
  1242.     /**
  1243.      * @Route("/unionesterraza", name="uniones_terraza")
  1244.      */
  1245.     function mesaConUnionesTerraza()
  1246.     {
  1247.         $repoMesas $this->entityManager->getRepository(Mesas::class);
  1248.         $mesas_con_union $repoMesas->mesasConUnionesTerraza();
  1249.         $result_mesas = array();
  1250.         foreach ($mesas_con_union as $key => $value) {
  1251.             $numbers explode(","$value);
  1252.             $result_mesas[$key] = implode(","$numbers);
  1253.         }
  1254.         $repoZonas $this->entityManager->getRepository(Zonas::class);
  1255.         $zonaBarra $repoZonas->findOneBy(['id' => 3]);
  1256.         $zonaComedor $repoZonas->findOneBy(['id' => 1]);
  1257.         return new JsonResponse([
  1258.             'uniones_terraza' => $result_mesas,
  1259.             'barra' => $zonaBarra->isActive(),
  1260.             'comedor' => $zonaComedor->isActive(),
  1261.         ], 200);
  1262.     }
  1263.     private function quitarAcentos($cadena)
  1264.     {
  1265.         $acentos = array(
  1266.             'á' => 'a',
  1267.             'é' => 'e',
  1268.             'í' => 'i',
  1269.             'ó' => 'o',
  1270.             'ú' => 'u',
  1271.             'à' => 'a',
  1272.             'è' => 'e',
  1273.             'ì' => 'i',
  1274.             'ò' => 'o',
  1275.             'ù' => 'u',
  1276.             'ü' => 'u',
  1277.             'ñ' => 'n',
  1278.             'Á' => 'A',
  1279.             'É' => 'E',
  1280.             'Í' => 'I',
  1281.             'Ó' => 'O',
  1282.             'Ú' => 'U',
  1283.             'À' => 'A',
  1284.             'È' => 'E',
  1285.             'Ì' => 'I',
  1286.             'Ò' => 'O',
  1287.             'Ù' => 'U',
  1288.             'Ü' => 'U',
  1289.             'Ñ' => 'N'
  1290.         );
  1291.         return strtr($cadena$acentos);
  1292.     }
  1293.     /**
  1294.      * @Route("/eliminarcomida", name="eliminar_comida")
  1295.      */
  1296.     function eliminarComida(Request $request)
  1297.     {
  1298.         $mesa_id $request->request->get('mesa');
  1299.         $comidas $request->request->get('elementosSeleccionados');
  1300.         $idzona intval($request->request->get('idzona'));
  1301.         $pedidosRepo =  $this->entityManager->getRepository(Pedidos::class);
  1302.         $mesasRepo =  $this->entityManager->getRepository(Mesas::class);
  1303.         $comidaRepo $this->entityManager->getRepository(Comida::class);
  1304.         $eliminacionesExitosas true;
  1305.         $mesa $mesasRepo->findOneBy(['numero' => $mesa_id]);
  1306.         $descuento 0;
  1307.         foreach ($comidas as $comidaId) {
  1308.             $descuentoEnProducto 0;
  1309.             $precioFinal 0;
  1310.             $comida_tienda false;
  1311.             $pedido $pedidosRepo->findOneBy([
  1312.                 'mesa' => $mesa->getId(),
  1313.                 'comida' => $comidaId,
  1314.             ]);
  1315.             if ($pedido === null) {
  1316.                 $comida_tienda true;
  1317.                 $pedido $pedidosRepo->findOneBy([
  1318.                     'mesa' => $mesa->getId(),
  1319.                     'producttienda' => $comidaId,
  1320.                 ]);
  1321.             }
  1322.             if (!$comida_tienda) {
  1323.                 $precio_comida $comidaRepo->findOneBy(['id' => $comidaId]);
  1324.             } else {
  1325.                 $precio_tienda $this->entityManager->getRepository(Productostienda::class)->findOneBy(['id' => $comidaId]);
  1326.             }
  1327.             if ($pedido->getDescuento() !== null) {
  1328.                 $precioComida = isset($precio_comida) ? $precio_comida->getPrecio() : $precio_tienda->getPvp();
  1329.                 $descuentoEnProducto $pedido->getDescuento();
  1330.                 // Calcular el descuento en valor monetario
  1331.                 $valorDescuento = ($precioComida $descuentoEnProducto) / 100;
  1332.                 // Calcular el precio final después del descuento
  1333.                 $precioFinal $precioComida $valorDescuento;
  1334.                 // Opcional: formatear el resultado a dos decimales
  1335.                 $precioFinal floatval($precioFinal);
  1336.             } else if ($pedido->getDescuentoEur() !== null) {
  1337.                 $precioFinal $pedido->getDescuentoEur();
  1338.             } else if ($pedido->isInvitacion()) {
  1339.                 $precioFinal = isset($precio_comida) ? floatval($precio_comida->getPrecio()) : floatval($precio_tienda->getPvp());
  1340.             }
  1341.             $descuento += isset($precio_comida) ? ($precio_comida->getPrecio() - $precioFinal) : ($precio_tienda->getPvp() - $precioFinal);
  1342.             if ($pedido) {
  1343.                 $this->entityManager->remove($pedido);
  1344.                 $this->entityManager->flush();
  1345.             } else {
  1346.                 $eliminacionesExitosas false;
  1347.             }
  1348.         }
  1349.         $mesa->setPorPagar($mesa->getPorPagar() - $descuento);
  1350.         $this->entityManager->persist($mesa);
  1351.         $this->entityManager->flush();
  1352.         $icon '';
  1353.         $arrayComensales = [];
  1354.         if ($mesa->getPorPagar() === '0') {
  1355.             $mesa->setComensales(0);
  1356.             $mesa->setPagado(0);
  1357.             $icon $mesa->getIcon();
  1358.             $this->entityManager->persist($mesa);
  1359.             $this->entityManager->flush();
  1360.             $arrayComensales $this->mesasRepository->mesasConComensales();
  1361.         }
  1362.         $totalPagarZona $this->mesasRepository->totalZonas($idzona);
  1363.         if ($eliminacionesExitosas) {
  1364.             // Todas las eliminaciones fueron exitosas, devolver código de estado 200
  1365.             return new JsonResponse([
  1366.                 'total' => number_format(floatval($mesa->getPorPagar()), 2',''.'),
  1367.                 'icon' => $icon,
  1368.                 'arraycomensales' => $arrayComensales,
  1369.                 'total_zona' => $totalPagarZona,
  1370.             ], 200);
  1371.         } else {
  1372.             // Hubo al menos una eliminación que no fue exitosa, devolver código de estado de error (por ejemplo, 400)
  1373.             return new JsonResponse(['mensaje' => 'Al menos una eliminación falló'], 400);
  1374.         }
  1375.     }
  1376.     /**
  1377.      * @Route("/enviococina", name="envio_cocina")
  1378.      */
  1379.     function envioCocina(Request $request)
  1380.     {
  1381.         $pedidosRepo =  $this->entityManager->getRepository(Pedidos::class);
  1382.         $mesa_id $request->request->get('mesa_id');
  1383.         $mesasRepo $this->entityManager->getRepository(Mesas::class);
  1384.         $mesa $mesasRepo->findOneBy(['numero' => $mesa_id]);
  1385.         $pedidos $pedidosRepo->findBy([
  1386.             'mesa' => $mesa->getId(),
  1387.             'marchando' => 0,
  1388.         ]);
  1389.         if (empty($pedidos)) {
  1390.             return new JsonResponse([
  1391.                 'todo_marchando' => 'En esta mesa no hay pedidos para marchar',
  1392.             ]);
  1393.         } else {
  1394.             $order_ticket = array();
  1395.             $order_ticket_barra = array();
  1396.             foreach ($pedidos as $pedido) {
  1397.                 if (($pedido->getComida() !== null && $pedido->getComida()->isIsComida() === true)) {
  1398.                     $arrayExtras = [];
  1399.                     if ($pedido->getExtras() !== null) {
  1400.                         foreach ($pedido->getExtras() as $extra) {
  1401.                             $comidaExtra $this->entityManager->getRepository(Comida::class)->findOneBy(['id' => $extra]);
  1402.                             $productoExtra = [
  1403.                                 "nombre" => $comidaExtra->getName(),
  1404.                             ];
  1405.                             array_push($arrayExtras$productoExtra);
  1406.                         }
  1407.                     }
  1408.                     $found false;
  1409.                     // Recorrer el array para buscar si el id ya existe
  1410.                     foreach ($order_ticket as &$item) {
  1411.                         if ($item['id'] == $pedido->getComida()->getId() && $item['numplato'] === $pedido->getNumPlato() && $item['comentario'] == $pedido->getComentarios()) {
  1412.                             $item['cantidad'] += 1;
  1413.                             $found true;
  1414.                             break;
  1415.                         }
  1416.                     }
  1417.                     if (!$found) {
  1418.                         $temp = array(
  1419.                             'id' => $pedido->getComida()->getId(),
  1420.                             'name' => $this->quitarAcentos($pedido->getComida()->getName()),
  1421.                             'comentario' => $pedido->getComentarios(),
  1422.                             'cantidad' => 1,
  1423.                             'numplato' => $pedido->getNumPlato(),
  1424.                             'extras' => $arrayExtras,
  1425.                         );
  1426.                         array_push($order_ticket$temp);
  1427.                     }
  1428.                 } else if (($pedido->getComida() !== null && $pedido->getComida()->isIsbebida() === true) || $pedido->getProducttienda()) {
  1429.                     $id $pedido->getComida() ? $pedido->getComida()->getId() : $pedido->getProducttienda()->getId();
  1430.                     $name $pedido->getComida() ? $pedido->getComida()->getName() : $pedido->getProducttienda()->getNombre();
  1431.                     $found false;
  1432.                     // Recorrer el array para buscar si el id ya existe
  1433.                     foreach ($order_ticket_barra as &$item) {
  1434.                         if ($item['id'] == $id) {
  1435.                             $item['cantidad'] += 1;
  1436.                             $found true;
  1437.                             break;
  1438.                         }
  1439.                     }
  1440.                     // Si no se encontró, agregar un nuevo elemento
  1441.                     if (!$found) {
  1442.                         $temp = array(
  1443.                             'id' => $id,
  1444.                             'name' => $name,
  1445.                             'cantidad' => 1,
  1446.                         );
  1447.                         array_push($order_ticket_barra$temp);
  1448.                     }
  1449.                 }
  1450.                 $pedido->setMarchando(1);
  1451.                 $this->entityManager->persist($pedido);
  1452.                 $this->entityManager->flush();
  1453.             }
  1454.             $ticketController = new TicketController($this->entityManager);
  1455.             $order = [
  1456.                 'items' => $order_ticket,
  1457.                 'nummesa' => $mesa_id
  1458.             ];
  1459.             $order_barra = [
  1460.                 'items' => $order_ticket_barra,
  1461.                 'nummesa' => $mesa_id
  1462.             ];
  1463.             $content $ticketController->generateTicketKitchen($order);
  1464.             $content_barra $ticketController->generateTicketBarra($order_barra);
  1465.             return new JsonResponse([
  1466.                 'cocina' => 'Oído cocina, marchando la mesa: ' $mesa_id,
  1467.                 'ticket_content' =>  $content,
  1468.                 'ticket_content_barra' =>  $content_barra,
  1469.                 'mesa' => $mesa->getNumero(),
  1470.             ]);
  1471.         }
  1472.     }
  1473.     /**
  1474.      * @Route("/eliminarproducto", name="eliminar_producto")
  1475.      */
  1476.     function añadirProducto(Request $request)
  1477.     {
  1478.         $pedido $request->request->get('pedido');
  1479.         $mesa $request->request->get('mesa');
  1480.         $idzona intval($request->request->get('idzona'));
  1481.         $repoPedidos $this->entityManager->getRepository(Pedidos::class);
  1482.         $repoMesas $this->entityManager->getRepository(Mesas::class);
  1483.         $pedido $repoPedidos->findOneBy(['id' => $pedido]);
  1484.         $mesa $repoMesas->findOneBy(['numero' => $mesa]);
  1485.         $restar $pedido->getComida() ? $pedido->getComida()->getPrecio() : $pedido->getProducttienda()->getPvp();
  1486.         $totalapagar $mesa->getPorPagar();
  1487.         $mesa->setPorPagar($totalapagar $restar);
  1488.         $this->entityManager->persist($mesa);
  1489.         $this->entityManager->remove($pedido);
  1490.         $this->entityManager->flush();
  1491.         if ($mesa->getPedidos()->isEmpty()) {
  1492.             $mesa->setComensales(0);
  1493.             $this->entityManager->persist($mesa);
  1494.             $this->entityManager->flush();
  1495.             $arrayComensales $this->mesasRepository->mesasConComensales();
  1496.             $imgurl $mesa->getIcon();
  1497.         }
  1498.         $totalPagarZona $this->mesasRepository->totalZonas($idzona);
  1499.         return new JsonResponse([
  1500.             'restar' => $restar,
  1501.             'arraycomensales' => isset($arrayComensales) ? $arrayComensales '',
  1502.             'icon' => isset($imgurl) ? $imgurl '',
  1503.             'total_zona' => $totalPagarZona,
  1504.         ]);
  1505.     }
  1506.     /**
  1507.      * @Route("/invitarproducto", name="invitar")
  1508.      */
  1509.     function invitacion(Request $request)
  1510.     {
  1511.         $pedido $request->request->get('pedido');
  1512.         $mesa2 $request->request->get('mesa');
  1513.         $ref $request->request->get('ref');
  1514.         $idzona $request->request->get('idzona');
  1515.         $repoPedidos $this->entityManager->getRepository(Pedidos::class);
  1516.         $repoMesas $this->entityManager->getRepository(Mesas::class);
  1517.         $pedido $repoPedidos->findOneBy(['id' => $pedido]);
  1518.         $mesa $repoMesas->findOneBy(['numero' => $mesa2]);
  1519.         $precioproducto null;
  1520.         if ($ref === '1') {
  1521.             $pedido->setInvitacion(true);
  1522.             $mesa->setPorPagar($mesa->getPorPagar() - ($pedido->getComida() ? $pedido->getComida()->getPrecio() : $pedido->getProducttienda()->getPvp()));
  1523.         } else {
  1524.             $pedido->setInvitacion(false);
  1525.             $mesa->setPorPagar($mesa->getPorPagar() + ($pedido->getComida() ? $pedido->getComida()->getPrecio() : $pedido->getProducttienda()->getPvp()));
  1526.             $precioproducto $pedido->getComida() ? $pedido->getComida()->getPrecio() : $pedido->getProducttienda()->getPvp();
  1527.         }
  1528.         $this->entityManager->persist($pedido);
  1529.         $this->entityManager->persist($mesa);
  1530.         $this->entityManager->flush();
  1531.         $datos_mesa $mesa->getPedidos();
  1532.         $control_mesa null;
  1533.         $totalMesa 0;
  1534.         $data_mesa = array();
  1535.         foreach ($datos_mesa as $p_mesa) {
  1536.             $precioExtra 0;
  1537.             $extrasString $p_mesa->getComida() ? $p_mesa->getComida()->getName() : $p_mesa->getProducttienda()->getNombre();
  1538.             if ($p_mesa->getExtras()) {
  1539.                 $extrasString .= ' ->Extras: ';
  1540.                 $arrayExtras $p_mesa->getExtras();
  1541.                 foreach ($arrayExtras as $extra) {
  1542.                     $repoComida $this->entityManager->getRepository(Comida::class);
  1543.                     $comidaExtra $repoComida->findOneBy(['id' => $extra]);
  1544.                     $precioExtra += floatval($comidaExtra->getPrecio());
  1545.                     $extrasString .= $comidaExtra->getName() . ', ';
  1546.                 }
  1547.                 $extrasString rtrim($extrasString', ');
  1548.             }
  1549.             $temp = array(
  1550.                 'comida' => $extrasString,
  1551.                 'id' => $p_mesa->getComida() ? $p_mesa->getComida()->getId() : $p_mesa->getProducttienda()->getId(),
  1552.                 'precio' => $p_mesa->isInvitacion() ? : ($p_mesa->getComida() ? ($p_mesa->getComida()->getPrecio() + $precioExtra) : ($p_mesa->getProducttienda()->getPvp() + $precioExtra)),
  1553.                 'marchando' => $p_mesa->isMarchando(),
  1554.                 'pedido_mesa' => $p_mesa->getId(),
  1555.                 'invitacion' => $p_mesa->isInvitacion() ? 0,
  1556.             );
  1557.             array_push($data_mesa$temp);
  1558.             if (!$p_mesa->isInvitacion()) {
  1559.                 $totalMesa +=  floatval($p_mesa->getComida() ? $p_mesa->getComida()->getPrecio() : $p_mesa->getProducttienda()->getPvp());
  1560.             }
  1561.         }
  1562.         $pedidosRepo =  $this->entityManager->getRepository(Pedidos::class);
  1563.         $mesa_id $request->request->get('mesa_id');
  1564.         if (!empty($data_mesa)) {
  1565.             $pedidos $pedidosRepo->findBy([
  1566.                 'mesa' => $mesa_id,
  1567.                 'marchando' => 0
  1568.             ]);
  1569.             $control_mesa = (empty($pedidos)) ? 0;
  1570.         }
  1571.         $totalPagarZona $this->mesasRepository->totalZonas($idzona);
  1572.         return new JsonResponse([
  1573.             'pedido_mesa' => $data_mesa,
  1574.             'total_mesa' => $mesa->getPorPagar(),
  1575.             'control_mesa' => $control_mesa,
  1576.             'precioproducto' => $precioproducto,
  1577.             'total_zona' => $totalPagarZona,
  1578.         ]);
  1579.     }
  1580.     /**
  1581.      * @Route("/descuento", name="descuento")
  1582.      */
  1583.     function descuento(Request $request)
  1584.     {
  1585.         $mesa_id $request->request->get('mesa');
  1586.         $idzona $request->request->get('idzona');
  1587.         $descuento number_format(floatval($request->request->get('descuento')), 2);
  1588.         $pedido_id $request->request->get('pedido');
  1589.         $tipo $request->request->get('tipo');
  1590.         $repoPedidos $this->entityManager->getRepository(Pedidos::class);
  1591.         $pedido $repoPedidos->findOneBy(["id" => $pedido_id]);
  1592.         $repoMesas $this->entityManager->getRepository(Mesas::class);
  1593.         $mesa $repoMesas->findOneBy(["numero" => $mesa_id]);
  1594.         $precioFinal 0;
  1595.         if ($tipo === "porcentaje") {
  1596.             $pedido->setDescuento(floatval($descuento));
  1597.             $descuentoPorcentaje floatval($descuento) / 100// Convertir el porcentaje a fracción
  1598.             $descuentoEuros $pedido->getComida() ? ($pedido->getComida()->getPrecio() * $descuentoPorcentaje) : ($pedido->getProducttienda()->getPvp() * $descuentoPorcentaje);
  1599.             $mesa->setPorPagar($mesa->getPorPagar() - $descuentoEuros);
  1600.             $precioFinal $pedido->getComida() ? ($pedido->getComida()->getPrecio() - $descuentoEuros) : ($pedido->getProducttienda()->getPvp() - $descuentoEuros);
  1601.         } else {
  1602.             $pedido->setDescuentoEur(floatval($descuento));
  1603.             $mesa->setPorPagar($mesa->getPorPagar() - $descuento);
  1604.             $precioFinal $pedido->getComida() ? ($pedido->getComida()->getPrecio() - $descuento) : ($pedido->getProducttienda()->getPvp() - $descuento);
  1605.         }
  1606.         // die;
  1607.         $this->entityManager->persist($pedido);
  1608.         $this->entityManager->persist($mesa);
  1609.         $this->entityManager->flush();
  1610.         $totalPagarZona $this->mesasRepository->totalZonas($idzona);
  1611.         return new JsonResponse([
  1612.             "total" => number_format($mesa->getPorPagar(), 2),
  1613.             "preciofinal" => number_format($precioFinal2),
  1614.             "total_zona" => $totalPagarZona,
  1615.         ]);
  1616.     }
  1617.     /**
  1618.      * @Route("/descuentomesa", name="descuento_mesa")
  1619.      */
  1620.     function descuentoMesa(Request $request)
  1621.     {
  1622.         $mesa_id $request->request->get('mesa');
  1623.         $descuento number_format(floatval($request->request->get('descuento')), 2);
  1624.         $tipo $request->request->get('tipo');
  1625.         $repoMesas $this->entityManager->getRepository(Mesas::class);
  1626.         $mesa $repoMesas->findOneBy(["numero" => $mesa_id]);
  1627.         $totalMesa 0;
  1628.         foreach ($mesa->getPedidos() as $pedido) {
  1629.             if ($pedido->getComida()) {
  1630.                 $totalMesa += $pedido->getComida()->getPrecio();
  1631.                 if ($tipo === "porcentaje") {
  1632.                     $pedido->setDescuento(floatval($descuento));
  1633.                 } else {
  1634.                     $pedido->setDescuentoEur(floatval($descuento));
  1635.                 }
  1636.             } else {
  1637.                 $totalMesa += $pedido->getProducttienda()->getPvp();
  1638.                 if ($tipo === "porcentaje") {
  1639.                     $pedido->setDescuento(floatval($descuento));
  1640.                 } else {
  1641.                     $pedido->setDescuentoEur(floatval($descuento));
  1642.                 }
  1643.             }
  1644.             $this->entityManager->persist($pedido);
  1645.             $this->entityManager->flush();
  1646.         }
  1647.         if ($tipo === "porcentaje") {
  1648.             $descuentoPorcentaje floatval($descuento) / 100// Convertir el porcentaje a fracción
  1649.             $descuentoEuros $totalMesa $descuentoPorcentaje;
  1650.             $mesa->setPorPagar($totalMesa $descuentoEuros);
  1651.         } else {
  1652.             $mesa->setPorPagar($totalMesa $descuento);
  1653.         }
  1654.         $this->entityManager->persist($mesa);
  1655.         $this->entityManager->flush();
  1656.         return new JsonResponse([
  1657.             "total" => $mesa->getPorPagar(),
  1658.         ]);
  1659.     }
  1660.     /**
  1661.      * @Route("/cambioefectivo", name="cambio_efectivo")
  1662.      */
  1663.     function cambioEfectivo(Request $request)
  1664.     {
  1665.         $fechaActual = new \DateTime();
  1666.         $fecha_sin_hora = new \DateTime($fechaActual->format('Y-m-d'));
  1667.         $objetoDiaActual $this->entityManager->getRepository(Cajaregistro::class)->findOneBy(['dia' => $fecha_sin_hora]);
  1668.         if ($request->request->has('total')) {
  1669.             $total $request->request->get('total');
  1670.             if ($objetoDiaActual === null) {
  1671.                 return new JsonResponse([
  1672.                     "message" => 'No has iniciado la caja del dia de hoy',
  1673.                 ]);
  1674.             }
  1675.             if ($objetoDiaActual->getTotalCaja() === null) {
  1676.                 $objetoDiaActual->setTotalCaja($objetoDiaActual->getInicioCaja() + floatval($total));
  1677.             } else {
  1678.                 $objetoDiaActual->setTotalCaja($objetoDiaActual->getTotalCaja() + floatval($total));
  1679.             }
  1680.             $this->entityManager->persist($objetoDiaActual);
  1681.             $this->entityManager->flush();
  1682.             return new JsonResponse([]);
  1683.         } else {
  1684.             $repoMesas $this->entityManager->getRepository(Mesas::class); //New version to get Doctrine in Symfony 5
  1685.             $mesa $repoMesas->findOneBy(['numero' => $request->request->get('num_mesa')]);
  1686.             if ($objetoDiaActual === null) {
  1687.                 return new JsonResponse([
  1688.                     "message" => 'No has iniciado la caja del dia de hoy',
  1689.                 ]);
  1690.             }
  1691.             if ($objetoDiaActual->getTotalCaja() === null) {
  1692.                 $objetoDiaActual->setTotalCaja($objetoDiaActual->getInicioCaja() + floatval($mesa->getPorPagar()));
  1693.             } else {
  1694.                 $objetoDiaActual->setTotalCaja($objetoDiaActual->getTotalCaja() + floatval($mesa->getPorPagar()));
  1695.             }
  1696.             $this->entityManager->persist($objetoDiaActual);
  1697.             $this->entityManager->flush();
  1698.             return new JsonResponse([
  1699.                 "total" => number_format($mesa->getPorPagar(), 2),
  1700.             ]);
  1701.         }
  1702.     }
  1703.     /**
  1704.      * @Route("/cambioefectivoparcial", name="cambio_efectivo_parcial")
  1705.      */
  1706.     function cambioEfectivoParcial(Request $request)
  1707.     {
  1708.         $em $this->getDoctrine()->getManager(); //DEPRECATED
  1709.         // $myRepository = $this->$entityManager->getRepository(Mesas::class); //New version to get Doctrine in Symfony 5
  1710.         $num_mesa $request->request->get('num_mesa');
  1711.         $mesa $em->getRepository(Mesas::class)->findOneBy(['numero' => $num_mesa]);
  1712.         $mesa_total floatval($mesa->getPorPagar());
  1713.         $pedidos $request->request->get('elementos');
  1714.         $a_pagar 0;
  1715.         $list_ticket = array();
  1716.         foreach ($pedidos as $pedido) {
  1717.             $comida $em->getRepository(Comida::class)->findOneBy(['id' => $pedido["itemId"]]);
  1718.             $p $this->entityManager->getRepository(Pedidos::class)->findOneBy(['id' => $pedido["pedidoDatos"]]);
  1719.             $precioExtra 0;
  1720.             $extrasString $p->getComida()->getName();
  1721.             if ($p->getExtras()) {
  1722.                 $extrasString .= ' ->Extras: ';
  1723.                 $arrayExtras $p->getExtras();
  1724.                 foreach ($arrayExtras as $extra) {
  1725.                     $repoComida $this->entityManager->getRepository(Comida::class);
  1726.                     $comidaExtra $repoComida->findOneBy(['id' => $extra]);
  1727.                     $precioExtra += floatval($comidaExtra->getPrecio());
  1728.                     $extrasString .= $comidaExtra->getName() . ', ';
  1729.                 }
  1730.                 $extrasString rtrim($extrasString', ');
  1731.             }
  1732.             $precio $precioExtra;
  1733.             if ($p->getDescuento()) {
  1734.                 $descuento floatval($p->getDescuento()) / 100;
  1735.                 $descuentoEur $comida->getPrecio() * $descuento;
  1736.                 $precio += $comida->getPrecio() - $descuentoEur;
  1737.             } else if ($p->getDescuentoEur()) {
  1738.                 $precio += $comida->getPrecio() - $p->getDescuentoEur();
  1739.             } else {
  1740.                 $precio += $comida->getPrecio();
  1741.             }
  1742.             $a_pagar += $precio;
  1743.         }
  1744.         return new JsonResponse([
  1745.             "total" => $a_pagar,
  1746.         ]);
  1747.     }
  1748.     /**
  1749.      * @Route("/imprimirticket", name="imprimir_ticket")
  1750.      */
  1751.     function imprimirTicket(Request $request)
  1752.     {
  1753.         $a_pagar floatval($request->request->get('apagar'));
  1754.         $content $request->request->get('content');
  1755.         $num_mesa $request->request->get('num_mesa');
  1756.         $comensales intval($request->request->get('comensales'));
  1757.         $currentDateTime date('Y-m-d H:i:s');
  1758.         $token $this->security->getToken();
  1759.         // Verificar si hay un token y si el usuario está autenticado
  1760.         if ($token && $token->isAuthenticated()) {
  1761.             // Obtener el objeto de usuario actual
  1762.             $user $token->getUser();
  1763.             // Verificar si el usuario es un objeto de usuario (puede ser una cadena en algunos casos)
  1764.             if ($user instanceof \Symfony\Component\Security\Core\User\UserInterface) {
  1765.                 // Obtener el nombre de usuario
  1766.                 $username $user->getUserIdentifier();
  1767.             }
  1768.         }
  1769.         $impresora $this->entityManager->getRepository(Impresoras::class)->findOneBy(['id' =>  1]);
  1770.         $info $this->entityManager->getRepository(Info::class)->findOneBy(['id' =>  1]);
  1771.         $printer = new SunmiCloudPrinter(384);
  1772.         // Encabezado del ticket
  1773.         $printer->lineFeed();
  1774.         if (!empty($info->getLogo())) {
  1775.             $img $this->getParameter('public') . $info->getLogo();
  1776.             $printer->setAlignment(SunmiCloudPrinter::ALIGN_CENTER);
  1777.             $maxWidth 500// Cambia este valor para hacer el logo más grande o más pequeño
  1778.             $printer->appendImage($imgSunmiCloudPrinter::DIFFUSE_DITHER$maxWidth);
  1779.             $printer->lineFeed();
  1780.         }
  1781.         $printer->setPrintModes(truetruefalse);
  1782.         $printer->setAlignment(SunmiCloudPrinter::ALIGN_CENTER);
  1783.         $printer->appendText($info->getName());
  1784.         $printer->setPrintModes(falsefalsefalse);
  1785.         $printer->lineFeed();
  1786.         $printer->appendText('Direccion: ' $info->getDir());
  1787.         $printer->lineFeed();
  1788.         $printer->appendText('Telefono: ' $info->getTelf());
  1789.         $printer->lineFeed();
  1790.         $printer->appendText('Email: ' $info->getEmail());
  1791.         $printer->lineFeed();
  1792.         $printer->appendText('CIF: ' $info->getCif());
  1793.         $printer->lineFeed();
  1794.         $printer->setAlignment(SunmiCloudPrinter::ALIGN_LEFT);
  1795.         $printer->appendText('---------------------------------------------');
  1796.         $printer->lineFeed();
  1797.         $printer->appendText('Fecha: ' $currentDateTime);
  1798.         $printer->lineFeed();
  1799.         $printer->appendText('Mesa: ' $num_mesa);
  1800.         $printer->lineFeed();
  1801.         $printer->appendText('Comensales: ' $comensales);
  1802.         $printer->lineFeed();
  1803.         $printer->appendText('Atendido por: ' $username);
  1804.         $printer->lineFeed();
  1805.         $printer->appendText('------------------------------------------------');
  1806.         $printer->lineFeed();
  1807.         $printer->appendText('Uds    Descripción                       Total');
  1808.         $printer->lineFeed();
  1809.         $printer->appendText('------------------------------------------------');
  1810.         $printer->lineFeed();
  1811.         // Cuerpo del ticket
  1812.         $printer->restoreDefaultLineSpacing();
  1813.         $printer->setPrintModes(falsefalsefalse);
  1814.         $printer->setAlignment(SunmiCloudPrinter::ALIGN_LEFT);
  1815.         $printer->setupColumns(
  1816.             [96SunmiCloudPrinter::ALIGN_LEFT0],
  1817.             [144SunmiCloudPrinter::ALIGN_CENTER0],
  1818.             [0SunmiCloudPrinter::ALIGN_RIGHTSunmiCloudPrinter::COLUMN_FLAG_BW_REVERSE]
  1819.         );
  1820.         $printer->appendText($content);
  1821.         $printer->lineFeed();
  1822.         $printer->setAlignment(SunmiCloudPrinter::ALIGN_RIGHT);
  1823.         $printer->appendText('------------------------');
  1824.         $printer->lineFeed();
  1825.         $printer->setPrintModes(truetruefalse);
  1826.         $printer->appendText('EUROS ' $a_pagar);
  1827.         $printer->lineFeed();
  1828.         $printer->setAlignment(SunmiCloudPrinter::ALIGN_LEFT);
  1829.         $printer->setPrintModes(falsefalsefalse);
  1830.         $printer->appendText('------------------------------------------------');
  1831.         $printer->lineFeed();
  1832.         $printer->setLineSpacing(40);
  1833.         $printer->appendText('I.V.A 10% Incluido');
  1834.         $printer->lineFeed();
  1835.         $totalporpersona $a_pagar $comensales;
  1836.         $printer->appendText('Precio por persona: ' number_format(floatval($totalporpersona), 2) . '€');
  1837.         $printer->lineFeed();
  1838.         $printer->lineFeed(4);
  1839.         $printer->cutPaper(true);
  1840.         //替换为你设备的SN号
  1841.         $sn $impresora->getSnBarra();
  1842.         $printer->pushContent($snsprintf("%s_%010d"$sntime()));
  1843.         return new JsonResponse([]);
  1844.     }
  1845.     /**
  1846.      * @Route("/imprimirticketcocina", name="imprimir_ticket_cocina")
  1847.      */
  1848.     function imprimirTicketCocina(Request $request): Response
  1849.     {
  1850.         $mesa $request->request->get('mesa');
  1851.         $content $request->request->get('content');
  1852.         $contentbarra $request->request->get('contentbarra');
  1853.         $impresoras $this->entityManager->getRepository(Impresoras::class)->findOneBy(['id' => 1]);
  1854.         if ($content !== '') {
  1855.             $printer = new SunmiCloudPrinter(384);
  1856.             // Encabezado del ticket Cocina
  1857.             $printer->lineFeed();
  1858.             $printer->lineFeed();
  1859.             $printer->lineFeed();
  1860.             $printer->lineFeed();
  1861.             $printer->lineFeed();
  1862.             $printer->lineFeed();
  1863.             // $printer->appendImage($img, 0);
  1864.             // $printer->setLineSpacing(80);
  1865.             $printer->setPrintModes(truetruetrue);
  1866.             $printer->setupColumns([0SunmiCloudPrinter::ALIGN_CENTERSunmiCloudPrinter::COLUMN_FLAG_BW_REVERSE]);
  1867.             $printer->printInColumns('Mesa: ' $mesa "\n");
  1868.             $printer->lineFeed();
  1869.             // Cuerpo del ticket
  1870.             $printer->restoreDefaultLineSpacing();
  1871.             $printer->setPrintModes(falsetruetrue);
  1872.             $printer->setAlignment(SunmiCloudPrinter::ALIGN_LEFT);
  1873.             // $printer->setPrintModes(false, false, true);
  1874.             $printer->appendText($content);
  1875.             $printer->lineFeed(4);
  1876.             $printer->lineFeed();
  1877.             $printer->lineFeed();
  1878.             $printer->lineFeed();
  1879.             $printer->cutPaper(true);
  1880.             $sn $impresoras->getSnCocina();
  1881.             $printer->pushContent($snsprintf("%s_%010d"$sntime()));
  1882.         }
  1883.         if ($contentbarra !== '') {
  1884.             // Encabezado del ticket Barra
  1885.             $printer = new SunmiCloudPrinter(384);
  1886.             // Encabezado del ticket
  1887.             $printer->lineFeed();
  1888.             // $printer->appendImage($img, 0);
  1889.             // $printer->setLineSpacing(80);
  1890.             $printer->setPrintModes(truetruetrue);
  1891.             $printer->setupColumns([0SunmiCloudPrinter::ALIGN_CENTERSunmiCloudPrinter::COLUMN_FLAG_BW_REVERSE]);
  1892.             $printer->printInColumns('Mesa: ' $mesa "\n");
  1893.             $printer->lineFeed();
  1894.             // Cuerpo del ticket
  1895.             $printer->restoreDefaultLineSpacing();
  1896.             $printer->setPrintModes(falsetruetrue);
  1897.             $printer->setAlignment(SunmiCloudPrinter::ALIGN_LEFT);
  1898.             // $printer->setPrintModes(false, false, true);
  1899.             $printer->appendText($contentbarra);
  1900.             $printer->lineFeed(4);
  1901.             $printer->cutPaper(true);
  1902.             $sn $impresoras->getSnBarra();
  1903.             $printer->pushContent($snsprintf("%s_%010d"$sntime()));
  1904.         }
  1905.         return new JsonResponse([]);
  1906.     }
  1907.     /**
  1908.      * @Route("/savecoordenadas", name="save_coordenadas")
  1909.      */
  1910.     function guardarCoordenadas(Request $request): Response
  1911.     {
  1912.         $mesa $request->request->get('mesaId');
  1913.         $x $request->request->get('x');
  1914.         $y $request->request->get('y');
  1915.         $mesa $this->entityManager->getRepository(Mesas::class)->findOneBy(['numero' => $mesa]);
  1916.         $mesa->setCoordX(floatval($x));
  1917.         $mesa->setCoordY(floatval($y));
  1918.         $this->entityManager->persist($mesa);
  1919.         $this->entityManager->flush();
  1920.         return new JsonResponse([]);
  1921.     }
  1922.     /**
  1923.      * @Route("/traspasarpedidos", name="traspasar_pedidos")
  1924.      */
  1925.     function traspasarPedidos(Request $request): Response
  1926.     {
  1927.         $mesa1 $request->request->get('mesa1');
  1928.         $mesa2 $request->request->get('mesa2');
  1929.         $mesaInicial $this->entityManager->getRepository(Mesas::class)->findOneBy(['numero' => $mesa1]);
  1930.         $mesaObjetivo $this->entityManager->getRepository(Mesas::class)->findOneBy(['id' => $mesa2]);
  1931.         $pedidos $this->entityManager->getRepository(Pedidos::class)->findBy(['mesa' => $mesaInicial->getId()]);
  1932.         if ($pedidos) {
  1933.             foreach ($pedidos as $pedido) {
  1934.                 $pedido->setMesa($mesaObjetivo);
  1935.                 $this->entityManager->persist($pedido);
  1936.             }
  1937.             $mesaObjetivo->setPagado($mesaInicial->getPagado());
  1938.             $mesaInicial->setPagado(0.00);
  1939.             $mesaObjetivo->setComensales($mesaInicial->getComensales());
  1940.             $mesaInicial->setComensales(0);
  1941.             $mesaObjetivo->setPorPagar($mesaInicial->getPorPagar());
  1942.             $mesaInicial->setPorPagar(0.00);
  1943.             $this->entityManager->persist($mesaInicial);
  1944.             $this->entityManager->persist($mesaObjetivo);
  1945.             $this->entityManager->flush();
  1946.         } else {
  1947.             return new JsonResponse([
  1948.                 'error' => "No hay pedidos para traspasar."
  1949.             ]);
  1950.         }
  1951.         $arrayComensales $this->mesasRepository->mesasConComensales();
  1952.         return new JsonResponse([
  1953.             'success' => "Traspasado correctamente.",
  1954.             'icon' => $mesaInicial->getIcon(),
  1955.             'mesainicio' => $mesaInicial->getNumero(),
  1956.             'mesaobjetivo' => $mesaObjetivo->getNumero(),
  1957.             'arraycomensales' => $arrayComensales
  1958.         ]);
  1959.     }
  1960.     /**
  1961.      * @Route("/buscar", name="buscar")
  1962.      */
  1963.     function buscar(Request $request): Response
  1964.     {
  1965.         $term $request->request->get('term');
  1966.         // Crear una consulta personalizada utilizando el QueryBuilder
  1967.         $query $this->entityManager->createQueryBuilder()
  1968.             ->select('c')
  1969.             ->from('App\Entity\Productostienda''c')
  1970.             ->where('c.nombre LIKE :term')
  1971.             ->setParameter('term''%' $term '%')
  1972.             ->getQuery();
  1973.         // Ejecutar la consulta y obtener los resultados
  1974.         $comidas $query->getResult();
  1975.         // Crear un array de resultados para devolver como JSON
  1976.         $results = [];
  1977.         foreach ($comidas as $comida) {
  1978.             $results[] = [
  1979.                 'id' => $comida->getId(),
  1980.                 'nombre' => $comida->getNombre(),
  1981.                 'precio' => number_format($comida->getPvp(), 2),
  1982.                 // Agrega más propiedades según sea necesario
  1983.             ];
  1984.         }
  1985.         return new JsonResponse([
  1986.             'busqueda' => $results
  1987.         ]);
  1988.     }
  1989.     /**
  1990.      * @Route("/ventatienda", name="generarVentaTienda")
  1991.      */
  1992.     function ventaTienda(Request $request): Response
  1993.     {
  1994.         $pago $request->request->get('metodopago');
  1995.         $iva $request->request->get('iva');
  1996.         $total $request->request->get('total');
  1997.         $datos json_decode($request->request->get('datos'), true);
  1998.         if (json_last_error() !== JSON_ERROR_NONE) {
  1999.             return new JsonResponse(['error' => 'Invalid JSON'], 400);
  2000.         }
  2001.         $currentDateTime date('Y-m-d H:i:s');
  2002.         // $fechaActual = new DateTime();
  2003.         $fechaActual = new \DateTime();
  2004.         $fecha_sin_hora = new \DateTime($fechaActual->format('Y-m-d'));
  2005.         $list_ticket = [];
  2006.         $array_pedidoref = [];
  2007.         // Recorrer el array de datos y obtener los IDs
  2008.         foreach ($datos as $item) {
  2009.             // Verificar si el item tiene la clave 'id'
  2010.             if (isset($item['id'])) {
  2011.                 $comida $this->entityManager->getRepository(Productostienda::class)->findOneBy(['id' => $item['id']]); // Agregar el ID al array de IDs
  2012.                 $temp = array(
  2013.                     'id' => $comida->getId(),
  2014.                     'name' => $comida->getNombre(),
  2015.                     'price' => $comida->getPvp() * $item["quantity"],
  2016.                     'cantidad' => $item["quantity"],
  2017.                 );
  2018.                 array_push($list_ticket$temp);
  2019.                 $stockComida $this->entityManager->getRepository(stock::class)->findOneBy(['producttienda' => $item['id']]);
  2020.                 $stockComida->setAmount($stockComida->getAmount() - $item['quantity']);
  2021.                 $this->entityManager->persist($stockComida);
  2022.                 $this->entityManager->flush();
  2023.             }
  2024.             $rand rand(19999);
  2025.             $dateRef date('ymdhms');
  2026.             $numRef 'T' '-' $dateRef $rand;
  2027.             array_push($array_pedidoref$numRef);
  2028.             $pedidoHistorial = array(
  2029.                 'mesa' => 'Tienda',
  2030.                 'comida' =>  $comida->getNombre(),
  2031.                 'precio' => $comida->getPvp() * $item["quantity"],
  2032.                 'precio_total' => $total,
  2033.                 'num_ref' => $numRef,
  2034.                 'fecha' => $fechaActual,
  2035.                 'user' => $this->getUser(),
  2036.                 'iva' => $iva,
  2037.             );
  2038.             $newPedidoHistorial = new HistorialPedidos();
  2039.             $newPedidoHistorial->setMesa($pedidoHistorial['mesa']);
  2040.             $newPedidoHistorial->setComida($pedidoHistorial['comida']);
  2041.             $newPedidoHistorial->setPrecio($pedidoHistorial['precio']);
  2042.             $newPedidoHistorial->setPrecioTotal($pedidoHistorial['precio_total']);
  2043.             $newPedidoHistorial->setFecha($pedidoHistorial['fecha']);
  2044.             $newPedidoHistorial->setUser($pedidoHistorial['user']);
  2045.             $newPedidoHistorial->setNumRef($pedidoHistorial['num_ref']);
  2046.             $newPedidoHistorial->setIva($pedidoHistorial['iva']);
  2047.             $this->entityManager->persist($newPedidoHistorial);
  2048.             $this->entityManager flush();
  2049.         }
  2050.         $pedido_ref json_encode($array_pedidoref);
  2051.         $cantidadImpuesto = ($total $iva) / 100;
  2052.         $valorRestado $total $cantidadImpuesto;
  2053.         if ($pago === 'efectivo') {
  2054.             $venta = new Ventas();
  2055.             $venta->setFecha($fechaActual);
  2056.             $venta->setPagado($valorRestado);
  2057.             $venta->setIva($iva);
  2058.             $venta->setImporteIva($cantidadImpuesto);
  2059.             $venta->setPedidosRef($pedido_ref);
  2060.             $venta->setPago('Efectivo');
  2061.             $this->entityManager->persist($venta);
  2062.             $this->entityManager->flush();
  2063.         } else {
  2064.             $venta = new Ventas();
  2065.             $venta->setFecha($fechaActual);
  2066.             $venta->setPagado($valorRestado);
  2067.             $venta->setIva($iva);
  2068.             $venta->setImporteIva($cantidadImpuesto);
  2069.             $venta->setPedidosRef($pedido_ref);
  2070.             $venta->setPago('Tarjeta');
  2071.             $this->entityManager->persist($venta);
  2072.             $this->entityManager->flush();
  2073.         }
  2074.         $ticketController = new TicketController($this->entityManager);
  2075.         $order = [
  2076.             'items' => $list_ticket,
  2077.             'totalAmount' => $total,
  2078.         ];
  2079.         $content $ticketController->generateTicketTienda($order);
  2080.         $token $this->security->getToken();
  2081.         // Verificar si hay un token y si el usuario está autenticado
  2082.         if ($token && $token->isAuthenticated()) {
  2083.             // Obtener el objeto de usuario actual
  2084.             $user $token->getUser();
  2085.             // Verificar si el usuario es un objeto de usuario (puede ser una cadena en algunos casos)
  2086.             if ($user instanceof \Symfony\Component\Security\Core\User\UserInterface) {
  2087.                 // Obtener el nombre de usuario
  2088.                 $username $user->getUserIdentifier();
  2089.             }
  2090.         }
  2091.         return new JsonResponse([['message' => 'Datos recibidos y procesados correctamente']]);
  2092.     }
  2093.     /**
  2094.      * @Route("/tickettienda", name="generarTicketTienda")
  2095.      */
  2096.     function ticketTienda(Request $request): Response
  2097.     {
  2098.         // $pago = $request->request->get('metodopago');
  2099.         $iva $request->request->get('iva');
  2100.         $total $request->request->get('total');
  2101.         $datos json_decode($request->request->get('datos'), true);
  2102.         if (json_last_error() !== JSON_ERROR_NONE) {
  2103.             return new JsonResponse(['error' => 'Invalid JSON'], 400);
  2104.         }
  2105.         $list_ticket = [];
  2106.         $array_pedidoref = [];
  2107.         // Recorrer el array de datos y obtener los IDs
  2108.         foreach ($datos as $item) {
  2109.             // Verificar si el item tiene la clave 'id'
  2110.             if (isset($item['id'])) {
  2111.                 $comida $this->entityManager->getRepository(Productostienda::class)->findOneBy(['id' => $item['id']]); // Agregar el ID al array de IDs
  2112.                 $temp = array(
  2113.                     'id' => $comida->getId(),
  2114.                     'name' => $comida->getNombre(),
  2115.                     'price' => $comida->getPvp() * $item["quantity"],
  2116.                     'cantidad' => $item["quantity"],
  2117.                 );
  2118.                 array_push($list_ticket$temp);
  2119.             }
  2120.         }
  2121.         $pedido_ref json_encode($array_pedidoref);
  2122.         $cantidadImpuesto = ($total $iva) / 100;
  2123.         $valorRestado $total $cantidadImpuesto;
  2124.         $ticketController = new TicketController($this->entityManager);
  2125.         $order = [
  2126.             'items' => $list_ticket,
  2127.             'totalAmount' => $total,
  2128.         ];
  2129.         $content $ticketController->generateTicketTienda($order);
  2130.         $currentDateTime date('Y-m-d H:i:s');
  2131.         $token $this->security->getToken();
  2132.         // Verificar si hay un token y si el usuario está autenticado
  2133.         if ($token && $token->isAuthenticated()) {
  2134.             // Obtener el objeto de usuario actual
  2135.             $user $token->getUser();
  2136.             // Verificar si el usuario es un objeto de usuario (puede ser una cadena en algunos casos)
  2137.             if ($user instanceof \Symfony\Component\Security\Core\User\UserInterface) {
  2138.                 // Obtener el nombre de usuario
  2139.                 $username $user->getUserIdentifier();
  2140.             }
  2141.         }
  2142.         $impresora $this->entityManager->getRepository(Impresoras::class)->findOneBy(['id' =>  1]);
  2143.         $info $this->entityManager->getRepository(Info::class)->findOneBy(['id' =>  1]);
  2144.         $printer = new SunmiCloudPrinter(384);
  2145.         // Encabezado del ticket
  2146.         $printer->lineFeed();
  2147.         $img 'public/' $info->getLogo();
  2148.         // $printer->appendImage($img, 0);
  2149.         // $printer->setLineSpacing(80);
  2150.         $printer->setPrintModes(truetruefalse);
  2151.         $printer->setAlignment(SunmiCloudPrinter::ALIGN_CENTER);
  2152.         $printer->appendText($info->getName());
  2153.         $printer->setPrintModes(falsefalsefalse);
  2154.         $printer->lineFeed();
  2155.         $printer->appendText('Direccion: ' $info->getDir());
  2156.         $printer->lineFeed();
  2157.         $printer->appendText('Telefono: ' $info->getTelf());
  2158.         $printer->lineFeed();
  2159.         $printer->appendText('Email: ' $info->getEmail());
  2160.         $printer->lineFeed();
  2161.         $printer->appendText('CIF: ' $info->getCif());
  2162.         $printer->lineFeed();
  2163.         $printer->setAlignment(SunmiCloudPrinter::ALIGN_LEFT);
  2164.         $printer->appendText('---------------------------------------------');
  2165.         $printer->lineFeed();
  2166.         $printer->appendText('Fecha: ' $currentDateTime);
  2167.         $printer->lineFeed();
  2168.         $printer->appendText('Atendido por: ' $username);
  2169.         $printer->lineFeed();
  2170.         $printer->appendText('------------------------------------------------');
  2171.         $printer->lineFeed();
  2172.         $printer->appendText('Uds    Descripción                       Total');
  2173.         $printer->lineFeed();
  2174.         $printer->appendText('------------------------------------------------');
  2175.         $printer->lineFeed();
  2176.         // Cuerpo del ticket
  2177.         $printer->restoreDefaultLineSpacing();
  2178.         $printer->setPrintModes(falsefalsefalse);
  2179.         $printer->setAlignment(SunmiCloudPrinter::ALIGN_LEFT);
  2180.         $printer->setupColumns(
  2181.             [96SunmiCloudPrinter::ALIGN_LEFT0],
  2182.             [144SunmiCloudPrinter::ALIGN_CENTER0],
  2183.             [0SunmiCloudPrinter::ALIGN_RIGHTSunmiCloudPrinter::COLUMN_FLAG_BW_REVERSE]
  2184.         );
  2185.         $printer->appendText($content);
  2186.         $printer->lineFeed();
  2187.         $printer->setAlignment(SunmiCloudPrinter::ALIGN_RIGHT);
  2188.         $printer->appendText('------------------------');
  2189.         $printer->lineFeed();
  2190.         $printer->setPrintModes(truetruefalse);
  2191.         $printer->appendText('Base imponible ' number_format($valorRestado2'.'',') . ' €');
  2192.         $printer->lineFeed();
  2193.         $printer->appendText('IVA ' $iva '% ' number_format($cantidadImpuesto2'.'','));
  2194.         $printer->lineFeed();
  2195.         $printer->appendText('TOTAL ' number_format($total2'.'',') . ' €');
  2196.         $printer->setAlignment(SunmiCloudPrinter::ALIGN_LEFT);
  2197.         $printer->setPrintModes(falsefalsefalse);
  2198.         $printer->appendText('------------------------------------------------');
  2199.         $printer->lineFeed();
  2200.         $printer->setLineSpacing(40);
  2201.         $printer->appendText('I.V.A Incluido del ' $iva '%');
  2202.         $printer->lineFeed();
  2203.         $printer->lineFeed(4);
  2204.         $printer->cutPaper(true);
  2205.         //替换为你设备的SN号
  2206.         $sn $impresora->getSnBarra();
  2207.         $printer->pushContent($snsprintf("%s_%010d"$sntime()));
  2208.         return new JsonResponse([['message' => 'Datos recibidos y procesados correctamente']]);
  2209.     }
  2210.     /**
  2211.      * @Route("/añadirmesatienda", name="añadir_mesa_tienda")
  2212.      */
  2213.     function añadirMesaTienda(Request $request): Response
  2214.     {
  2215.         $data json_decode($request->getContent(), true); // Decodificar los datos JSON
  2216.         $mesa $this->entityManager->getRepository(Mesas::class)->findOneBy(['numero' => $data['mesa']]); // Agregar el ID al array de IDs
  2217.         $totalañadir 0;
  2218.         $list_ticket = [];
  2219.         $data_mesa = array();
  2220.         // Recorrer el array de datos y obtener los IDs
  2221.         foreach ($data['datos'] as $item) {
  2222.             // Verificar si el item tiene la clave 'id'
  2223.             if (isset($item['id'])) {
  2224.                 $comida $this->entityManager->getRepository(Productostienda::class)->findOneBy(['id' => $item['id']]); // Agregar el ID al array de IDs
  2225.                 for ($i 0$i $item['quantity']; $i++) {
  2226.                     $pedido = new Pedidos();
  2227.                     $pedido->setMesa($mesa);
  2228.                     $pedido->setProducttienda($comida);
  2229.                     $pedido->setMarchando(0);
  2230.                     $rand rand(19999);
  2231.                     $dateRef date('ymdhms');
  2232.                     $mesaNum $mesa->getNumero();
  2233.                     $numRef $mesaNum '-' $dateRef $rand;
  2234.                     $pedido->setNumRef($numRef);
  2235.                     $this->entityManager->persist($pedido);
  2236.                     $this->entityManager->flush();
  2237.                     $temp = array(
  2238.                         'comida' => $comida->getNombre(),
  2239.                         'id' => $comida->getId(),
  2240.                         'precio' => $comida->getPvp(),
  2241.                         'pedido_mesa' => $pedido->getId()
  2242.                     );
  2243.                     array_push($data_mesa$temp);
  2244.                 }
  2245.                 $totalañadir += $item['quantity'] * $comida->getPvp();
  2246.             }
  2247.         }
  2248.         $mesa->setPorPagar($mesa->getPorPagar() + $totalañadir);
  2249.         $this->entityManager->persist($mesa);
  2250.         $this->entityManager->flush();
  2251.         return new JsonResponse([
  2252.             'pedido_mesa' => $data_mesa,
  2253.         ]);
  2254.     }
  2255.     /**
  2256.      * @Route("/imprimirplatolisto", name="imprimir_plato_listo")
  2257.      */
  2258.     function imprimirPlatoListo(Request $request): Response
  2259.     {
  2260.         $data json_decode($request->getContent(), true);
  2261.         $mesa $data['mesa'];
  2262.         $nombreplato $data['nombreplato'];
  2263.         $cantidad $data['cantidad'];
  2264.         $impresoras $this->entityManager->getRepository(Impresoras::class)->findOneBy(['id' => 1]);
  2265.         $printer = new SunmiCloudPrinter(384);
  2266.         // Encabezado del ticket Cocina
  2267.         $printer->lineFeed();
  2268.         // $printer->appendImage($img, 0);
  2269.         // $printer->setLineSpacing(80);
  2270.         $printer->setPrintModes(truetruetrue);
  2271.         $printer->setupColumns([0SunmiCloudPrinter::ALIGN_CENTERSunmiCloudPrinter::COLUMN_FLAG_BW_REVERSE]);
  2272.         $printer->printInColumns('Mesa: ' $mesa "\n");
  2273.         $printer->lineFeed();
  2274.         // Cuerpo del ticket
  2275.         $printer->restoreDefaultLineSpacing();
  2276.         $printer->setPrintModes(falsetruetrue);
  2277.         $printer->setAlignment(SunmiCloudPrinter::ALIGN_LEFT);
  2278.         // $printer->setPrintModes(false, false, true);
  2279.         $printer->appendText($nombreplato ' x' $cantidad);
  2280.         $printer->lineFeed(4);
  2281.         $printer->cutPaper(true);
  2282.         $sn $impresoras->getSnCocina();
  2283.         $printer->pushContent($snsprintf("%s_%010d"$sntime()));
  2284.         return new JsonResponse([]);
  2285.     }
  2286. }