src/Controller/ModComercio/Ventas/CuentasController.php line 108

Open in your IDE?
  1. <?php
  2. namespace App\Controller\ModComercio\Ventas;
  3. use App\Controller\Administration\FacturacionController;
  4. use App\Entity\Caja\{ArqueoCajaMovimientoCajaArqueoDetalle};
  5. use App\Entity\Catalogos\{EntidadFinancieraMedioPagoEstadoCuenta};
  6. use App\Entity\Comercio\{CuentaDatosComercioMesasLocalMesasLocalCuentaMesaUnidaOrdenMenuReservaReservaOrdenMenu};
  7. use App\Entity\Contabilidad\{CajaCajaRegistroMovimientosDatosFacturaNoUsuarioSistemaDescuentosDetallePagosPagosPagoCuentaPagoFidelizacionPagoReserva};
  8. use App\Entity\Documentos\DocumentosDetallePagos;
  9. use App\Entity\Fidelizacion\{CategoriaClienteCategoriaClientePersonaParametrosFidelizacionFidelizacion};
  10. use App\Entity\Karaoke\CancionesCuenta;
  11. use App\Entity\Persona\Persona;
  12. use App\Entity\Producto\Menu;
  13. use App\Entity\Seguridades\Usuario;
  14. use App\Service\{CacheServiceDocumentsService};
  15. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  16. use Doctrine\ORM\EntityManagerInterface;
  17. use Exception;
  18. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  19. use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
  20. use Symfony\Component\HttpFoundation\{RequestResponseHeaderBag};
  21. use Symfony\Component\Security\Core\User\UserInterface;
  22. use Symfony\Component\Routing\Annotation\Route;
  23. class CuentasController extends AbstractController {
  24.   private $em;
  25.   private $msgCreate;
  26.   private $msgUpdate;
  27.   private $msgDelete;
  28.   private $cache;
  29.   public function __construct(EntityManagerInterface $emCacheService $cache) {
  30.     date_default_timezone_set('America/Guayaquil');
  31.     $this->em $em;
  32.     $this->msgCreate "Registro creado exitosamente.";
  33.     $this->msgUpdate "Registro actualizado exitosamente.";
  34.     $this->msgDelete "Registro eliminado exitosamente.";
  35.     $this->cache $cache;
  36.   }
  37.   // * READ FUNCTIONS *
  38.     /**
  39.      * @Route("/getCuentasMesaLocal", name="getCuentasMesaLocal")
  40.      */
  41.     public function getCuentasMesaLocal(Request $request) {
  42.       $list = [];
  43.       $idMesaLocal $request->request->get('idMesaLocal');
  44.       $mesasLocalCuenta $this->em->getRepository(MesasLocalCuenta::class)->findBy(['idMesasLocal' => $idMesaLocal]);
  45.       foreach ($mesasLocalCuenta as $mesaCuenta) {
  46.         $cuenta $mesaCuenta->getIdCuenta();
  47.         if ($cuenta->getIdEstadoCuenta()->getId() != && $cuenta->getIdEstadoCuenta()->getId() != && $cuenta->getIdEstadoCuenta()->getId() != 5) :
  48.           $persona $cuenta->getIdUsuario()->getIdPersona();
  49.           $list[] = [
  50.             'nombresApellidos' => $persona->getApellidos() . " " $persona->getNombres(),
  51.             'idCuenta' => $cuenta->getId()
  52.           ];
  53.         endif;
  54.       }
  55.       return $this->json(['data' => $list], 200);
  56.     }
  57.     /**
  58.      * @Route("/getCuentasMesaLocalVentaDirecta", name="getCuentasMesaLocalVentaDirecta")
  59.      */
  60.     public function getCuentasMesaLocalVentaDirecta() {
  61.       $list = [];
  62.       $cuentas $this->em->getRepository(Cuenta::class)->findBy(['idEstadoCuenta' => 8]);
  63.       if ($cuentas) :
  64.         foreach ($cuentas as $cuenta) {
  65.           $persona $cuenta->getIdUsuario()->getIdPersona();
  66.           $list[] = [
  67.             'nombresApellidos' => $persona->getApellidos() . " " $persona->getNombres(),
  68.             'idCuenta' => $cuenta->getId()
  69.           ];
  70.         }
  71.       endif;
  72.       return $this->json(['data' => $list], 200);
  73.     }
  74.     /**
  75.      * @Route("/getCuentasPedidoMesa", name="getCuentasPedidoMesa")
  76.      */
  77.     public function getCuentasPedidoMesa() {
  78.       $agrupadas = [];
  79.       $cuentas $this->em->getRepository(Cuenta::class)->findBy(['activa' => true]);
  80.       foreach ($cuentas as $cuenta) {
  81.           $mesa $cuenta->getNumeroMesa();
  82.           $persona $cuenta->getIdUsuario()->getIdPersona();
  83.           $agrupadas[$mesa][] = [
  84.             'nombresApellidos' => $persona->getApellidos()." ".$persona->getNombres(),
  85.             'totalCliente' => 1,
  86.             'codigoCuenta' => $cuenta->getCodigoCuenta()
  87.           ];
  88.       }
  89.       return $this->json(['data' => $agrupadas], 200);
  90.     }
  91.   /*1-Apertura 2-Pendiente pago
  92.     /*1-Apertura 2-Pendiente pago
  93.       3-Pagado 4-Reserva
  94.       5-Cancelado 6-Solicitud apertura cuenta
  95.     */
  96.     /**
  97.      * @Route("/getInitialCuentas", name="getInitialCuentas")
  98.      */
  99.     public function getInitialCuentas() {
  100.       $list = [];
  101.       $datosComercio $this->em->getRepository(DatosComercio::class)->find(1);
  102.       $cuentas $this->em->getRepository(Cuenta::class)->findBy(['idEstadoCuenta' => 7], ['id' => 'DESC']);
  103.       if ($cuentas) :
  104.         foreach ($cuentas as $indice => $cuenta) {
  105.           $persona $cuenta->getIdUsuario()->getIdPersona();
  106.           $nombresApellidos "{$persona->getNombres()} {$persona->getApellidos()}";
  107.           $valor $this->getPagosValorEnCuenta($cuenta->getId(), $datosComercio);
  108.           $isPagosParciales = (bool) $this->em->getRepository(PagoCuenta::class)->findOneBy(['idCuenta' => $cuenta->getId()]);
  109.           $list[] = [
  110.             'indice' => $indice 1,
  111.             'id' => $cuenta->getId(),
  112.             'idUsuario' => $cuenta->getIdUsuario()->getId(),
  113.             'codigoCuenta' => $cuenta->getCodigoCuenta(),
  114.             'nombresApellidos' => $nombresApellidos,
  115.             'numeroIdentificacion' => $persona->getNumeroIdentificacion(),
  116.             'mailPersonal' => $persona->getMailPersonal(),
  117.             'valor' => $valor,
  118.             'isPagosParciales' => $isPagosParciales,
  119.             'fechaApertura' => $cuenta->getFechaHoraAperturaString()
  120.           ];
  121.         }
  122.         return $this->json(['data' => $list], 200);
  123.       endif;
  124.       return $this->json(['data' => []], 200);
  125.     }
  126.     /**
  127.      * @Route("/getHistorialCuentas", name="getHistorialCuentas")
  128.      */
  129.     public function getHistorialCuentas(Request $request) {
  130.       $this->cache->delete('excelListCuentasHistorial');
  131.       $FI $request->request->get('FI''');
  132.       $FF $request->request->get('FF''');
  133.       $HI $request->request->get('HI''');
  134.       $HF $request->request->get('HF''');
  135.       if (empty($FI) && empty($FF) && empty($HI) && empty($HF)) :
  136.         $anio date('Y');  $mes date('m');
  137.         $dias date("d"mktime(000$mes 10$anio));
  138.         $fechaInicio "$anio-$mes-01";
  139.         $fechaFin "$anio-$mes-$dias";
  140.         $inicio = new \DateTime("$fechaInicio 00:00:00");
  141.         $fin = new \DateTime("$fechaFin 23:59:59");
  142.       else:
  143.         $fechaInicio $HI "$FI $HI:00" "$FI 00:00:00";
  144.         $fechaFin $HF "$FF $HF:00" "$FF 23:59:59";
  145.         $inicio = new \DateTime("$fechaInicio");
  146.         $fin = new \DateTime("$fechaFin");
  147.       endif;
  148.       $datosComercio $this->em->getRepository(DatosComercio::class)->find(1);
  149.       $cuentas $this->dqlQueryCuentas($inicio$fin$datosComercio);
  150.       $pagos $this->dqlQueryPagosCuentas($cuentas);
  151.       $descuentos $this->dqlQueryDescuentos($cuentas);
  152.       $pagoFidelizacion $this->dqlQueryPagoFidelizacion($cuentas);
  153.       $valCuentasPendientes $this->dqlQueryCuentasPendientes($inicio$fin$datosComercio->getIdPorcentajeIva()->getPorcentaje());
  154.       $this->cache->add('excelListCuentasHistorial'$cuentas);
  155.       return $this->json([
  156.         'data' => $cuentas,
  157.         'cuentas' => count($cuentas),
  158.         'valCuentasPendientes' => $valCuentasPendientes,
  159.         'efectivo' => $pagos['efectivo'],
  160.         'transferencia' => $pagos['transferencia'],
  161.         'descuentos' => $descuentos $pagoFidelizacion,
  162.         'total' => doubleval($pagos['efectivo'] + $pagos['transferencia'])
  163.       ], 200);
  164.     }
  165.     private function dqlQueryCuentas($fechaInicio$fechaFin$datosComercio)  {
  166.       $dql "SELECT cuenta FROM App\Entity\Comercio\Cuenta cuenta WHERE cuenta.fechaHoraApertura BETWEEN :fechaIn AND :fechaFi";
  167.       $params = ['fechaIn' => $fechaInicio->format('Y-m-d H:i:s')];
  168.       if ($fechaFin) :
  169.         $params['fechaFi'] = $fechaFin->format('Y-m-d H:i:s');
  170.       endif;
  171.       $dql .= " ORDER BY cuenta.fechaHoraApertura ASC";
  172.       $query $this->em->createQuery($dql)->setParameters($params);
  173.       $cuentas = [];
  174.       foreach ($query->getResult() as $cuenta) {
  175.         $cuentas $this->setArrayCuentas($cuentas$cuenta$datosComercio);
  176.       }
  177.       return $cuentas;
  178.     }
  179.     private function dqlQueryCuentasPendientes($fechaInicio$fechaFin$iva)  {
  180.       $dql "SELECT cuenta FROM App\Entity\Comercio\Cuenta cuenta WHERE cuenta.idEstadoCuenta = :idEstadoCuenta AND cuenta.fechaHoraApertura BETWEEN :fechaIn AND :fechaFi";
  181.       $params = ['fechaIn' => $fechaInicio->format('Y-m-d H:i:s'), 'idEstadoCuenta' => 2];
  182.       if ($fechaFin) :
  183.         $params['fechaFi'] = $fechaFin->format('Y-m-d H:i:s');
  184.       endif;
  185.       $dql .= " ORDER BY cuenta.fechaHoraApertura ASC";
  186.       $query $this->em->createQuery($dql)->setParameters($params);
  187.       $valCuenta 0;
  188.       foreach ($query->getResult() as $cuenta) {
  189.         $ordenesMenu $this->em->getRepository(OrdenMenu::class)->findBy(['idCuenta' => $cuenta->getId(), 'cortesia' => false]);
  190.         if ($ordenesMenu) :
  191.           foreach ($ordenesMenu as $pedido) {
  192.             $valIva doubleval(($pedido->getPrecioUnitarioMenu() * $iva) / 100);
  193.             $total doubleval($valIva $pedido->getPrecioUnitarioMenu()) * $pedido->getCantidad();
  194.             $valCuenta $valCuenta $total;
  195.           }
  196.         endif;
  197.       }
  198.       return $valCuenta;
  199.     }
  200.     private function dqlQueryPagosCuentas($cuentas) {
  201.       $list = []; $efectivo 0$transferencia 0;
  202.       foreach ($cuentas as $cuenta) {
  203.         $qb $this->em->createQueryBuilder();
  204.         $qb
  205.           ->from(PagoCuenta::class, 'pc')
  206.           ->select('DISTINCT p.id AS idPago, p.valor')
  207.           ->join('pc.idPagos''p')
  208.           ->where('pc.idCuenta = :idCuenta')
  209.         ;
  210.         $resultado $qb->setParameter('idCuenta'$cuenta['id'])->getQuery()->getResult();
  211.         if ($resultado) :
  212.           foreach ($resultado as $item) {
  213.             $list[] = ['idPago' => $item['idPago']];
  214.           }
  215.         endif;
  216.       }
  217.       foreach ($list as $pago) {
  218.         $detallePago $this->em->getRepository(DetallePagos::class)->findBy(['idPagos' => $pago['idPago']]);
  219.         foreach ($detallePago as $detalle) {
  220.           if ($detalle->getIdMedioPago()->getId() == 2) :
  221.             $efectivo $efectivo doubleval($detalle->getValor());
  222.           endif;
  223.           if ($detalle->getIdMedioPago()->getId() == 1) :
  224.             $transferencia $transferencia doubleval($detalle->getValor());
  225.           endif;
  226.         }
  227.       }
  228.       return ['efectivo' => $efectivo'transferencia' => $transferencia];
  229.     }
  230.     private function dqlQueryDescuentos($cuentas) {
  231.       $list = []; $valorDescuento 0$descuentos = [];
  232.       foreach ($cuentas as $cuenta) {
  233.         $qb $this->em->createQueryBuilder();
  234.         $qb
  235.           ->from(PagoCuenta::class, 'pc')
  236.           ->select('DISTINCT p.id AS idPago, p.valor')
  237.           ->join('pc.idPagos''p')
  238.           ->where('pc.idCuenta = :idCuenta')
  239.         ;
  240.         $resultado $qb->setParameter('idCuenta'$cuenta['id'])->getQuery()->getResult();
  241.         if ($resultado) :
  242.           foreach ($resultado as $item) {
  243.             $list[] = ['idPago' => $item['idPago']];
  244.           }
  245.         endif;
  246.       }
  247.       foreach ($list as $pago) {
  248.         $descuento $this->em->getRepository(Descuentos::class)->findOneBy(['idPagos' => $pago['idPago']]);
  249.         if ($descuento) :
  250.           $descuentos[] = ['valor' => doubleval($descuento->getValor())];
  251.         endif;
  252.       }
  253.       foreach ($descuentos as $item) {
  254.         $valorDescuento += $item['valor'];
  255.       }
  256.       return $valorDescuento;
  257.     }
  258.     private function dqlQueryPagoFidelizacion($cuentas) {
  259.       $list = []; $fidelizacion 0;
  260.       foreach ($cuentas as $cuenta) {
  261.         $qb $this->em->createQueryBuilder();
  262.         $qb
  263.           ->from(PagoCuenta::class, 'pc')
  264.           ->select('DISTINCT p.id AS idPago, p.valor')
  265.           ->join('pc.idPagos''p')
  266.           ->where('pc.idCuenta = :idCuenta')
  267.         ;
  268.         $resultado $qb->setParameter('idCuenta'$cuenta['id'])->getQuery()->getResult();
  269.         if ($resultado) :
  270.           foreach ($resultado as $item) {
  271.             $list[] = ['idPago' => $item['idPago']];
  272.           }
  273.         endif;
  274.       }
  275.       foreach ($list as $pago) {
  276.         $fidelizacionQ $this->em->getRepository(PagoFidelizacion::class)->findOneBy(['idPagos' => $pago['idPago']]);
  277.         if ($fidelizacionQ) :
  278.           $fidelizacion $fidelizacion doubleval($fidelizacionQ->getValor());
  279.         endif;
  280.       }
  281.       return $fidelizacion;
  282.     }
  283.     private function setArrayCuentas($listCuenta $cuenta$datosComercio) {
  284.       $persona $cuenta->getIdUsuario()->getIdPersona();
  285.       $nombres mb_convert_encoding($persona->getNombres(), 'UTF-8''auto');
  286.       $apellidos mb_convert_encoding($persona->getApellidos(), 'UTF-8''auto');
  287.       $nombresApellidos "{$nombres} {$apellidos}";
  288.       $str_substr substr($this->quitarTildes($nombresApellidos), 020);
  289.       $nombresApellidosFinales "{$str_substr}...";
  290.       $spanColor $this->getSpanColor($cuenta->getIdEstadoCuenta()->getNombre());
  291.       $valor $this->getPagosValorEnCuenta($cuenta->getId(), $datosComercio);
  292.       $isReserva = (bool) $this->em->getRepository(Reserva::class)->findOneBy(['idCuenta' => $cuenta->getId()]);
  293.       $descuentos $this->getDescuentosCuenta($cuenta->getId());
  294.       $list[] = [
  295.         'id' => $cuenta->getId(),
  296.         'idUsuario' => $cuenta->getIdUsuario()->getId(),
  297.         'codigoCuenta' => $cuenta->getCodigoCuenta(),
  298.         'nombresApellidos' => $nombresApellidos,
  299.         'str_substr' => $nombresApellidosFinales,
  300.         'numeroIdentificacion' => $persona->getNumeroIdentificacion(),
  301.         'mailPersonal' => $persona->getMailPersonal(),
  302.         'numeroMesa' => $cuenta->getNumeroMesa() ?? '',
  303.         'estadoCuenta' => $cuenta->getIdEstadoCuenta()->getNombre(),
  304.         'idEstadoCuenta' => $cuenta->getIdEstadoCuenta()->getId(),
  305.         'spanColor' => $spanColor,
  306.         'valor' => $valor,
  307.         'activa' => $cuenta->getActiva(),
  308.         'isReserva' => $isReserva,
  309.         'fechaApertura' => $cuenta->getFechaHoraAperturaString(),
  310.         'fechaCierre' => $cuenta->getFechaHoraCierreString(),
  311.         'descuentos' => $descuentos,
  312.         'total' => $valor $descuentos
  313.       ];
  314.       return $list;
  315.     }
  316.     private function quitarTildes($cadena) {
  317.       $acentos = array('á''é''í''ó''ú''Á''É''Í''Ó''Ú''ñ''Ñ');
  318.       $sinAcentos = array('a''e''i''o''u''A''E''I''O''U''n''N');
  319.       return str_replace($acentos$sinAcentos$cadena);
  320.     }
  321.     private function getSpanColor($estadoCuenta) {
  322.       $colors = [
  323.         'Solicitud cuenta' => 'bg-secondary',
  324.         'Apertura cuenta' => 'bg-primary',
  325.         'Pendiente pago' => 'bg-warning text-dark',
  326.         'Pagado' => 'bg-success',
  327.         'Reserva' => 'bg-info text-dark',
  328.       ];
  329.       return $colors[$estadoCuenta] ?? 'bg-light text-dark';
  330.     }
  331.     public function getPagosValorEnCuenta($idCuenta$datosComercio) {
  332.       $ordenesMenus $this->em->getRepository(OrdenMenu::class)->findBy(['idCuenta' => $idCuenta]);
  333.       if (!$ordenesMenus) : return 0; endif;
  334.       $iva $datosComercio->getIdPorcentajeIva()->getPorcentaje();
  335.       return array_reduce($ordenesMenus, function ($valor$orden) use ($iva) {
  336.         if (!$orden->getCortesia() && $orden->getEstado() === 'Entregado') :
  337.           $pvp $orden->getPrecioUnitarioMenu() * ($iva 100);
  338.           return $valor + ($orden->getCantidad() * $pvp);
  339.         endif;
  340.         return $valor;
  341.       }, 0);
  342.     }
  343.     private function getDescuentosCuenta($idCuenta) {
  344.       $list = [];
  345.       $qb $this->em->createQueryBuilder();
  346.       $qb
  347.         ->from(PagoCuenta::class, 'pc')
  348.         ->select('DISTINCT p.id AS idPago, p.valor')
  349.         ->join('pc.idPagos''p')
  350.         ->where('pc.idCuenta = :idCuenta')
  351.       ;
  352.       $resultado $qb->setParameter('idCuenta'$idCuenta)->getQuery()->getResult();
  353.       if ($resultado) :
  354.         foreach ($resultado as $item) {
  355.           $list[] = ['idPago' => $item['idPago']];
  356.         }
  357.       endif;
  358.       return $this->calcularValoresFidelizacion($list);
  359.     }
  360.     private function calcularValoresFidelizacion($list) {
  361.       $valorDescuento 0$descuentos = [];
  362.       $valorFidelizacion 0$fidelizacions = [];
  363.       foreach ($list as $pago) {
  364.         $descuento $this->em->getRepository(Descuentos::class)->findOneBy(['idPagos' => $pago['idPago']]);
  365.         if ($descuento) :
  366.           $descuentos[] = ['valor' => doubleval($descuento->getValor())];
  367.         endif;
  368.       }
  369.       foreach ($descuentos as $item) {
  370.         $valorDescuento += $item['valor'];
  371.       }
  372.       foreach ($list as $pago) {
  373.         $fidelizacion $this->em->getRepository(PagoFidelizacion::class)->findOneBy(['idPagos' => $pago['idPago']]);
  374.         if ($fidelizacion) :
  375.           $fidelizacions[] = ['valor' => doubleval($fidelizacion->getValor())];
  376.         endif;
  377.       }
  378.       foreach ($fidelizacions as $item) {
  379.         $valorFidelizacion += $item['valor'];
  380.       }
  381.       return $valorDescuento $valorFidelizacion;
  382.     }
  383.     /**
  384.          * @Route("/getInitialPagosCuentaaaa", name="getInitialPagosCuentaaaa")
  385.          */
  386.     public function getInitialPagosCuentaaaa(Request $request) {
  387.       $idCuenta $request->request->get('id');
  388.       $reserva $this->em->getRepository(Reserva::class)->findOneBy(['idCuenta' => $idCuenta]);
  389.       $isReserva $reserva true false;
  390.       $ordenesMenu $this->em->getRepository(OrdenMenu::class)->findBy(['idCuenta' => $idCuenta'cortesia' => false'estado' => "Entregado"]);
  391.       $ordenesMenu $this->agrupaOrdenesMenu($ordenesMenu);
  392.       $valoresOrden $this->getValoresEnOrden($idCuenta);
  393.       $list = []; $valorPendiente 0;
  394.       foreach ($ordenesMenu as $orden) {
  395.         $menu $orden->getIdMenu();
  396.         $pu doubleval($orden->getPrecioUnitarioMenu());
  397.         $pagosMenu $this->getPagosEnMenu($valoresOrden['pagosCuenta'], $menu->getId(), $orden->getCantidad());
  398.         $valorPendiente += doubleval($orden->getPrecioUnitarioMenu() * $pagosMenu['cantidadPendiente']);
  399.         if ($pagosMenu['cantidadPendiente'] > 0) {
  400.           $list[] = [
  401.             'id' => $orden->getId(),
  402.             'nombre' => $menu->getNombre(),
  403.             'idMenu' => $menu->getId(),
  404.             'cantidad' => $orden->getCantidad(),
  405.             'pagado' => $pagosMenu['cantidadPagada'],
  406.             'pendiente' => $pagosMenu['cantidadPendiente'],
  407.             'pu' => $pu
  408.           ];
  409.         }
  410.       }
  411.       $pagos $this->getPagosCuenta($idCuenta$isReserva);
  412.       $pagosReserva $this->getPagosReserva($reserva$isReserva);
  413.       return $this->json([
  414.         'list' => $list,
  415.         'porCobrar' => $valorPendiente,
  416.         'pagos' => $pagos,
  417.         'pagosReserva' => $pagosReserva,
  418.         'isReserva' => $isReserva
  419.       ]);
  420.     }
  421.     /**
  422.          * @Route("/getInitialPagosCuenta", name="getInitialPagosCuenta")
  423.          */
  424.     public function getInitialPagosCuenta(Request $request) {
  425.       $idCuenta $request->request->get('id');
  426.       $reserva $this->em->getRepository(Reserva::class)->findOneBy(['idCuenta' => $idCuenta]);
  427.       $isReserva $reserva true false;
  428.       $ordenesMenu $this->em->getRepository(OrdenMenu::class)->findBy(['idCuenta' => $idCuenta'cortesia' => false'estado' => "Entregado"]);
  429.       $ordenesMenu $this->agrupaOrdenesMenu($ordenesMenu);
  430.       $valoresOrden $this->getValoresEnOrden($idCuenta);
  431.       $list = []; $valorPendiente 0;
  432.       foreach ($ordenesMenu as $orden) {
  433.         $menu $orden->getIdMenu();
  434.         $pu doubleval($orden->getPrecioUnitarioMenu());
  435.         $pagosMenu $this->getPagosEnMenu($valoresOrden['pagosCuenta'], $menu->getId(), $orden->getCantidad());
  436.         $valorPendiente += doubleval($orden->getPrecioUnitarioMenu() * $pagosMenu['cantidadPendiente']);
  437.         if ($pagosMenu['cantidadPendiente'] > 0) {
  438.           $iva = ($pu $orden->getIdPorcentajeIva()->getPorcentaje()) / 100;
  439.           $list[] = [
  440.             'id' => $orden->getId(),
  441.             'nombre' => $menu->getNombre(),
  442.             'idMenu' => $menu->getId(),
  443.             'cantidad' => $orden->getCantidad(),
  444.             'pagado' => $pagosMenu['cantidadPagada'],
  445.             'pendiente' => $pagosMenu['cantidadPendiente'],
  446.             'pvp' => $pu $iva,
  447.             'pu' => $pu
  448.           ];
  449.         }
  450.       }
  451.       $pagos $this->getPagosCuenta($idCuenta$isReserva);
  452.       $pagosReserva $this->getPagosReserva($reserva$isReserva);
  453.       if ($valorPendiente == 0) : $this->cerrarCuenta($idCuenta); endif;
  454.       return $this->json([
  455.         'list' => $list,
  456.         'porCobrar' => $valorPendiente,
  457.         'pagos' => $pagos,
  458.         'pagosReserva' => $pagosReserva,
  459.         'isReserva' => $isReserva
  460.       ]);
  461.     }
  462.     private function agrupaOrdenesMenu($ordenesMenus) {
  463.       $ordenesAgrupadas = [];
  464.       foreach ($ordenesMenus as $orden) {
  465.         $menuId $orden->getIdMenu()->getId();
  466.         if (!isset($ordenesAgrupadas[$menuId])) :
  467.           $ordenesAgrupadas[$menuId] = clone $orden;
  468.         else:
  469.           $ordenesAgrupadas[$menuId]->setCantidad($ordenesAgrupadas[$menuId]->getCantidad() + $orden->getCantidad());
  470.         endif;
  471.       }
  472.       return array_values($ordenesAgrupadas);
  473.     }
  474.     private function getValoresEnOrden($idCuenta) {
  475.       $cantidadPagada 0;
  476.       $pagosCuenta $this->em->getRepository(PagoCuenta::class)->findBy(['idCuenta' => $idCuenta]);
  477.       foreach ($pagosCuenta as $pagos) {  $cantidadPagada += $pagos->getCantidadPagada(); }
  478.       return ['cantidadPagada' => $cantidadPagada'pagosCuenta' => $pagosCuenta];
  479.     }
  480.     private function getPagosEnMenu($pagosCuenta$idMenu$cantidad) {
  481.       $cantidadPagada array_reduce($pagosCuenta, function ($total$pagoCuenta) use ($idMenu) {
  482.         return $total + ($pagoCuenta->getIdMenu()->getId() === $idMenu $pagoCuenta->getCantidadPagada() : 0);
  483.       }, 0);
  484.       return [
  485.         'cantidadPagada' => $cantidadPagada,
  486.         'cantidadPendiente' => $cantidad $cantidadPagada
  487.       ];
  488.     }
  489.     private function getPagosCuenta($idCuenta$isReserva)  {
  490.       $pagos = [];
  491.       $pagoCuenta $this->em->getRepository(PagoCuenta::class)->findBy(['idCuenta' => $idCuenta]);
  492.       $resultado $this->unique_multidim_array($pagoCuenta);
  493.       foreach ($resultado as $pago) {
  494.         $persona $pago->getIdPagos()->getIdUsuario()->getIdPersona();
  495.         $nombresApellidos $persona->getNombres() . " " $persona->getApellidos();
  496.         $transferencia $this->getDetallePago($pago1);
  497.         $efectivo $this->getDetallePago($pago2);
  498.         $pagos[] = [
  499.           'idPagos' => $pago->getIdPagos()->getId(),
  500.           'idCuenta' => $pago->getIdCuenta()->getId(),
  501.           'idUsuario' => $pago->getIdPagos()->getIdUsuario()->getId(),
  502.           'codigoCuenta' => $pago->getIdCuenta()->getCodigoCuenta(),
  503.           'nombresApellidos' => $nombresApellidos,
  504.           'efectivo' => $efectivo,
  505.           'transferencia' => $transferencia,
  506.           'isReserva' => $isReserva,
  507.           'documentos' => ""
  508.         ];
  509.       }
  510.       return $pagos;
  511.     }
  512.     private function unique_multidim_array($array)  {
  513.       $uniqueObjects = [];  $seenIdPagos = [];
  514.       foreach ($array as $obj) {
  515.         $idPagos $obj->getIdPagos()->getId();
  516.         if (!in_array($idPagos$seenIdPagos)) :
  517.           $uniqueObjects[] = $obj;
  518.           $seenIdPagos[] = $idPagos;
  519.         endif;
  520.       }
  521.       return $uniqueObjects;
  522.     }
  523.     private function getDetallePago($pago$medioPagoId)  {
  524.       $detallePago $this->em->getRepository(DetallePagos::class)->findOneBy(['idPagos' => $pago->getIdPagos()->getId(), 'idMedioPago' => $medioPagoId]);
  525.       return $detallePago $detallePago->getValor() : 0;
  526.     }
  527.     private function getPagosReserva($reserva$isReserva)  {
  528.       $pagosReserva = [];
  529.       if ($reserva) :
  530.         $documentos = [];
  531.         $pagoReserva $this->em->getRepository(PagoReserva::class)->findBy(['idReserva' => $reserva->getId()]);
  532.         foreach ($pagoReserva as $pago) {
  533.           $transferencia $this->getDetallePago($pago1);
  534.           $efectivo $this->getDetallePago($pago2);
  535.           $detallePagoDocumento $this->em->getRepository(DetallePagos::class)->findOneBy(['idPagos' => $pago->getIdPagos()->getId(), 'idMedioPago' => 1]);
  536.           if ($detallePagoDocumento) :
  537.             $documentosDetallesPagos $this->em->getRepository(DocumentosDetallePagos::class)->findBy(['idDetallePagos' => $detallePagoDocumento->getId()]);
  538.             foreach ($documentosDetallesPagos as $documento) {
  539.               $documentos[] = [ 'url' => $documento->getIdCargaDocumento()->getUrl()  ];
  540.             }
  541.           endif;
  542.           $pagosReserva[] = [
  543.             'idPagos' => "",
  544.             'idCuenta' => "",
  545.             'idUsuario' => "",
  546.             'codigoCuenta' => "",
  547.             'nombresApellidos' => "Abono",
  548.             'efectivo' => $efectivo,
  549.             'transferencia' => $transferencia,
  550.             'isReserva' => $isReserva,
  551.             'documentos' => $documentos
  552.           ];
  553.         }
  554.       endif;
  555.       return $pagosReserva;
  556.     }
  557.     private function cerrarCuenta($idCuenta)  {
  558.       $cuenta $this->em->getRepository(Cuenta::class)->find($idCuenta);
  559.       $estadoCuenta $this->em->getRepository(EstadoCuenta::class)->find(3);
  560.       $cuenta->setActiva(false)
  561.         ->setIdEstadoCuenta($estadoCuenta)
  562.         ->setFechaHoraCierre(new \DateTime());
  563.       $this->em->persist($cuenta);
  564.       $mesasLocalCuenta $this->em->getRepository(MesasLocalCuenta::class)->findOneBy(['idCuenta' => $idCuenta]);
  565.       $mesasLocalCuenta
  566.         ->setFachaFinOcupacion(new \DateTime())
  567.         ->setOcupada(false)
  568.       ;
  569.       $this->em->persist($mesasLocalCuenta);
  570.       $this->em->flush();
  571.     }
  572.     /**
  573.      * @Route("/getFindUsuarioFacturacion", name="getFindUsuarioFacturacion")
  574.      */
  575.     public function getFindUsuarioFacturacion(Request $request) {
  576.       $list = [];
  577.       $personas $this->em->getRepository(Persona::class)->findBy([], ['apellidos' => 'ASC']);
  578.       foreach ($personas as $persona) {
  579.         $usuario $this->em->getRepository(Usuario::class)->findOneBy(['idPersona' => $persona->getId()]);
  580.         array_push($list, [
  581.           'apellidos' => $persona->getApellidos(),
  582.           'correoElectronico' => $persona->getMailPersonal(),
  583.           'id' => $persona->getId(),
  584.           'idUsuario' => $usuario->getId(),
  585.           'nombres' => $persona->getNombres(),
  586.           'nombresApellidos' => $persona->getNombres().' '.$persona->getApellidos(),
  587.           'numeroIdentificacion' => $persona->getNumeroIdentificacion(),
  588.           'sectorDireccion' => $persona->getDireccionSector(),
  589.           'telefono' => $persona->getTelCelular(),
  590.           'tipoIdentificacion' => $persona->getTipoIdentificacion(),
  591.           'tipoPersona' => 'NATURAL'
  592.         ]);
  593.       }
  594.       $personasOther $this->em->getRepository(DatosFacturaNoUsuarioSistema::class)->findBy([], ['apellidos' => 'ASC']);
  595.       foreach ($personasOther as $personaOther) {
  596.         array_push($list, [
  597.           'apellidos' => $personaOther->getApellidos(),
  598.           'correoElectronico' => $personaOther->getCorreoElectronico(),
  599.           'id' => $personaOther->getId(),
  600.           'idUsuario' => 0,
  601.           'nombres' => $personaOther->getNombre(),
  602.           'nombresApellidos' => $personaOther->getNombres().' '.$personaOther->getApellidos(),
  603.           'numeroIdentificacion' => $personaOther->getNumeroIdentificacion(),
  604.           'sectorDireccion' => $personaOther->getSectorDireccion(),
  605.           'telefono' => $personaOther->getTelefono(),
  606.           'tipoIdentificacion' => $personaOther->getTipoIdentificacion(),
  607.           'tipoPersona' => $personaOther->getTipoPersona()
  608.         ]);
  609.       }
  610.       return $this->json(['data' => $list], 200);
  611.     }
  612.     /**
  613.      * @Route("/getFindDetallePago", name="getFindDetallePago")
  614.      */
  615.     public function getFindDetallePago(Request $request) {
  616.       $list = [];
  617.       $idPagos $request->request->get('idPagos');
  618.       $datosComercio $this->em->getRepository(DatosComercio::class)->find(1);
  619.       $iva $datosComercio->getIdPorcentajeIva()->getPorcentaje();
  620.       $pagos $this->em->getRepository(Pagos::class)->find($idPagos);
  621.       $pagoCuenta $this->em->getRepository(PagoCuenta::class)->findBy(['idPagos' => $pagos->getId()]);
  622.       $count 1;
  623.       foreach ($pagoCuenta as $pago) {
  624.         $ordenMenu $this->em->getRepository(OrdenMenu::class)->findOneBy(['idCuenta' => $pago->getIdCuenta()->getId(), 'idMenu' => $pago->getIdMenu()->getId()]);
  625.         $vu $ordenMenu->getPrecioUnitarioMenu();
  626.         $ivaVal doubleval(($vu $iva) / 100);
  627.         $pvp doubleval($vu $ivaVal);
  628.         array_push($list, [
  629.           'nro' => $count,
  630.           'descripcion' => $ordenMenu->getIdMenu()->getNombre(),
  631.           'cantidad' => $pago->getCantidadPagada(),
  632.           'pvp' => round($pvp2)
  633.         ]);
  634.         $count++;
  635.       }
  636.       return $this->json($list200);
  637.     }
  638.     /**
  639.      * @Route("/getFindDetalleCuenta", name="getFindDetalleCuenta")
  640.      */
  641.     public function getFindDetalleCuenta(Request $request) {
  642.       $list = [];
  643.       $id $request->request->get('id');
  644.       $datosComercio $this->em->getRepository(DatosComercio::class)->find(1);
  645.       $iva $datosComercio->getIdPorcentajeIva()->getPorcentaje();
  646.       $ordenMenu $this->em->getRepository(OrdenMenu::class)->findBy(['idCuenta' => $id]);
  647.       foreach ($ordenMenu as $indice => $orden) {
  648.         $vu $orden->getPrecioUnitarioMenu();
  649.         $ivaVal doubleval(($vu $iva) / 100);
  650.         $pvp doubleval($vu $ivaVal);
  651.         array_push($list, [
  652.           'nro' => $indice 1,
  653.           'fechaPedido' => $orden->getFechaHoraPedidoString(),
  654.           'descripcion' => $orden->getIdMenu()->getNombre(),
  655.           'cantidad' => $orden->getCantidad(),
  656.           'pvp' => round($pvp2)
  657.         ]);
  658.       }
  659.       return $this->json($list200);
  660.     }
  661.     /**
  662.      * @Route("/getDisponibilidadMesa", name="getDisponibilidadMesa")
  663.      */
  664.     public function getDisponibilidadMesa(Request $request) {
  665.       $valor $request->request->get('valor');
  666.       $cuenta $this->em->getRepository(Cuenta::class)->findOneBy(['numeroMesa' => $valor'activa' => true]);
  667.       if ($cuenta) {
  668.         return $this->json(['response' => false'message' => 'La mesa ya se encuentra en uso']);
  669.       } else {
  670.         return $this->json(['response' => true]);
  671.       }
  672.     }
  673.     /**
  674.      * @Route("/getPagosCuentaHistorial", name="getPagosCuentaHistorial")
  675.      */
  676.     public function getPagosCuentaHistorial(Request $request) {
  677.       $idCuenta $request->request->get('id');
  678.       $qb $this->em->createQueryBuilder();
  679.       $qb->select('p')
  680.         ->from(PagoCuenta::class, 'p')
  681.         ->where('p.id IN (
  682.             SELECT MIN(p2.id)
  683.             FROM ' PagoCuenta::class . ' p2
  684.             INNER JOIN p2.idCuenta c2
  685.             WHERE c2.id = :idCuenta
  686.             GROUP BY p2.idPagos
  687.         )')
  688.         ->setParameter('idCuenta'$idCuenta);
  689.       $pagos $qb->getQuery()->getResult();
  690.       // Formatear resultados a JSON
  691.       $data = [];
  692.       foreach ($pagos as $pago) {
  693.         $efectivo 0$transferencia 0$documento "";
  694.         if ($pago->getIdPagos()) :
  695.           $detallePagos $this->em->getRepository(DetallePagos::class)->findBy(['idPagos' => $pago->getIdPagos()->getId()]);
  696.           foreach ($detallePagos as $detalle) {
  697.             if ($detalle->getIdMedioPago()->getId() == 1) :
  698.               $transferencia $detalle->getValor();
  699.               $documentosDetallePagos $this->em->getRepository(DocumentosDetallePagos::class)->findOneBy(['idDetallePagos' => $detalle->getId()]);
  700.               $documento $documentosDetallePagos->getIdCargaDocumento()->getUrl();
  701.             else:
  702.               $efectivo $detalle->getValor();
  703.             endif;
  704.             $data[] = [
  705.               'idPagoCuenta' => $pago->getId(),
  706.               'cantidadPagada' => $pago->getCantidadPagada(),
  707.               'idPagos' => $pago->getIdPagos() ? $pago->getIdPagos()->getId() : null,
  708.               'idMenu' => $pago->getIdMenu() ? $pago->getIdMenu()->getId() : null,
  709.               'idCuenta' => $pago->getIdCuenta() ? $pago->getIdCuenta()->getId() : null,
  710.               'efectivo' => $efectivo,
  711.               'transferencia' => $transferencia,
  712.               'documento' => $documento,
  713.               'medioPago' => $detalle->getIdMedioPago()->getId()
  714.             ];
  715.           }
  716.         endif;
  717.       }
  718.       $reserva $this->em->getRepository(Reserva::class)->findOneBy(['idCuenta' => $idCuenta]);
  719.       if ($reserva) :
  720.         $pagoReserva $this->em->getRepository(PagoReserva::class)->findOneBy(['idReserva' => $reserva->getId()]);
  721.         $detallePagos $this->em->getRepository(DetallePagos::class)->findBy(['idPagos' => $pagoReserva->getIdPagos()->getId()]);
  722.           foreach ($detallePagos as $detalle) {
  723.             if ($detalle->getIdMedioPago()->getId() == 1) :
  724.               $transferencia $detalle->getValor();
  725.               $documentosDetallePagos $this->em->getRepository(DocumentosDetallePagos::class)->findOneBy(['idDetallePagos' => $detalle->getId()]);
  726.               $documento $documentosDetallePagos->getIdCargaDocumento()->getUrl();
  727.             else:
  728.               $efectivo $detalle->getValor();
  729.             endif;
  730.             $data[] = [
  731.               'idPagoCuenta' => $pago->getId(),
  732.               'cantidadPagada' => $pago->getCantidadPagada(),
  733.               'idPagos' => $pago->getIdPagos() ? $pago->getIdPagos()->getId() : null,
  734.               'idMenu' => $pago->getIdMenu() ? $pago->getIdMenu()->getId() : null,
  735.               'idCuenta' => $pago->getIdCuenta() ? $pago->getIdCuenta()->getId() : null,
  736.               'efectivo' => $efectivo,
  737.               'transferencia' => $transferencia,
  738.               'documento' => $documento,
  739.               'medioPago' => $detalle->getIdMedioPago()->getId()
  740.             ];
  741.           }
  742.       endif;
  743.       return $this->json($data200);
  744.     }
  745.     /**
  746.      * @Route("/getDescuentoSocios", name="getDescuentoSocios")
  747.      */
  748.     public function getDescuentoSocios(Request $request) {
  749.       $idCuenta $request->request->get('id');
  750.       $ordenesMenu $this->em->getRepository(OrdenMenu::class)->findBy(['idCuenta' => $idCuenta'cortesia' => false'estado' => "Entregado"]);
  751.       $totalIva 0$totalCosto 0;
  752.       foreach ($ordenesMenu as $orden) {
  753.         $pu doubleval($orden->getPrecioUnitarioMenu());
  754.         $iva = ($pu $orden->getIdPorcentajeIva()->getPorcentaje()) / 100;
  755.         $pvp = ($pu $iva) * $orden->getCantidad();
  756.         $totalIva round($totalIva $pvp2);
  757.         $pc doubleval($orden->getPrecioCosto());
  758.         $costo $pc $orden->getCantidad();
  759.         $totalCosto round($totalCosto $costo2);
  760.       }
  761.       $calculo round(($totalCosto $totalIva) * 1002);
  762.       $aplicarPorcentaje round(100 $calculo2);
  763.       return $this->json(['totalIva' => $totalIva'totalCosto' => $totalCosto'calculo' => $calculo'aplicarPorcentaje' => floor($aplicarPorcentaje)], 200);
  764.     }
  765.   // * CREATE OR UPDATE FUNCTIONS *
  766.     /*1-Apertura 2-Pendiente pago
  767.       3-Pagado 4-Reserva
  768.       5-Cancelado 6-Solicitud apertura cuenta
  769.     */
  770.     /**
  771.      * @Route("/addPagosCuenta", name="addPagosCuenta")
  772.      */
  773.     public function addPagosCuenta(Request $requestUserInterface $userDocumentsService $documentsService) {
  774.       //try {
  775.         $data $request->request->get('pagos_cuenta');
  776.         $caja $this->em->getRepository(Caja::class)->findOneBy(['activo' => true]);
  777.         if (!$caja) :
  778.           return $this->json(['response' => false'message' => "Lo sentimos, no hay una caja activa para registrar el pago."]);
  779.         endif;
  780.         $efectivo doubleval($data['efectivo']); $transferencia doubleval($data['transferencia']);
  781.         if ($data['pagoTotal'] == "false") :
  782.           $ordersCuenta $this->getOrdersCuenta($data['idCuenta']);
  783.           $cuenta $this->em->getRepository(Cuenta::class)->find($data['idCuenta']);
  784.           if ($data['facturacionOtrosDatos'] == "true") :
  785.             $usuario $this->em->getRepository(Usuario::class)->find($data['idUsuario']);
  786.             $pagos $this->setDataPagos($efectivo$transferencia$usuario$usertrue);
  787.           else:
  788.             $pagos $this->setDataPagos($efectivo$transferencia$cuenta->getIdUsuario(), $usertrue);
  789.           endif;
  790.           $this->em->persist($pagos);
  791.           // * RESERVA SET CONDICION
  792.           $reserva $this->em->getRepository(Reserva::class)->findOneBy(['idCuenta' => $cuenta->getId()]);
  793.           if ($reserva) :
  794.             $pagoReserva = new PagoReserva();
  795.             $pagoReserva
  796.               ->setAbono(false)
  797.               ->setIdPagos($pagos)
  798.               ->setIdReserva($reserva);
  799.             $pagoReserva $this->setGenericData($user$pagoReserva);
  800.             $this->em->persist($pagoReserva);
  801.           endif;
  802.           foreach ($ordersCuenta as $orden) {
  803.             $pagoCuenta $this->setDataPagoCuenta($orden['idMenu'], $orden['cantidad'], $pagos$cuenta);
  804.             $this->em->persist($pagoCuenta);
  805.           }
  806.           if ($efectivo 0) :
  807.               $detallePagos $this->setDataDetallePagos(2$efectivo$pagos$user);
  808.               $this->em->persist($detallePagos);
  809.               if ($data['facturacionOtrosDatos'] == "true") :
  810.                 $usuario $this->em->getRepository(Usuario::class)->find($data['idUsuario']);
  811.                 $cajaRegistroMovimiento $this->setCajaRegistroMovimiento($efectivo$user$usuario);
  812.               else:
  813.                 $cajaRegistroMovimiento $this->setCajaRegistroMovimiento($efectivo$user$cuenta->getIdUsuario());
  814.               endif;
  815.               $this->em->persist($cajaRegistroMovimiento);
  816.           endif;
  817.           if ($transferencia 0) :
  818.             $detallePagos $this->setDataDetallePagos(1$transferencia$pagos$user$data['entidadFinanciera']);
  819.             $this->em->persist($detallePagos);
  820.             if ($_FILES['pagos_cuenta']['error']['comprobante'][0] != 4) :
  821.               $this->setComprobantesPago($detallePagos$user$documentsService);
  822.             endif;
  823.           endif;
  824.         else:
  825.           $cuenta $this->em->getRepository(Cuenta::class)->find($data['idCuenta']);
  826.           if ($data['idUsuario'] == "" || $data['idUsuario'] == null) : return $this->json(['response' => false'message' => "Lo sentimos, debe ingresar un numero de identificación para el pago parcial"]); endif;
  827.           $usuario $this->em->getRepository(Usuario::class)->find($data['idUsuario']);
  828.           $pagos $this->setDataPagos($efectivo$transferencia$usuario$userfalse);
  829.           $this->em->persist($pagos);
  830.           $pagosParciales json_decode($data['pagosParcialesList'], true);
  831.           foreach ($pagosParciales as $orden) {
  832.             $pagoCuenta $this->setDataPagoCuenta($orden['idMenu'], $orden['cantidad'], $pagos$cuenta);
  833.             $this->em->persist($pagoCuenta);
  834.           }
  835.           if ($efectivo 0) :
  836.             $detallePagos $this->setDataDetallePagos(2$efectivo$pagos$user);
  837.             $this->em->persist($detallePagos);
  838.             $cajaRegistroMovimientos $this->setCajaRegistroMovimiento($efectivo$user$usuario);
  839.             $this->em->persist($cajaRegistroMovimientos);
  840.           endif;
  841.           if ($transferencia 0) :
  842.             $detallePagos $this->setDataDetallePagos(1$transferencia$pagos$user$data['entidadFinanciera']);
  843.             $this->em->persist($detallePagos);
  844.             if ($_FILES['pagos_cuenta']['error']['comprobante'][0] != 4) :
  845.               $this->setComprobantesPago($detallePagos$user$documentsService);
  846.             endif;
  847.           endif;
  848.         endif;
  849.         if ($data['descuento'] != "0.00" || $data['descuento'] != 0) :
  850.           $this->setDescuentos($data$pagos$user);
  851.         else:
  852.           $this->setFidelizacionUser($efectivo$transferencia$data$user$pagos);
  853.         endif;
  854.         $this->em->flush();
  855.         return $this->json(['response' => true'message' => $this->msgCreate]);
  856.       //} catch (Exception $e) {
  857.         return $this->json(['response' => false'message' => "<b>{$e->getMessage()}</b> error al realizar el registro dentro de la petición <i>addPagosCuenta</i>"]);
  858.       //}
  859.     }
  860.     private function getOrdersCuenta($id) {
  861.       $list = [];
  862.       $ordenMenu $this->em->getRepository(OrdenMenu::class)->findBy(['idCuenta' => $id'cortesia' => false'estado' => "Entregado"]);
  863.       foreach ($ordenMenu as $orden) :
  864.         $idMenu $orden->getIdMenu()->getId();
  865.         $pagosCuenta $this->em->getRepository(PagoCuenta::class)->findOneBy(['idCuenta' => $id'idMenu' => $idMenu]);
  866.         if ($pagosCuenta) :
  867.           if ($pagosCuenta->getCantidadPagada() != $orden->getCantidad()) :
  868.             $cantidadPagar $orden->getCantidad() - $pagosCuenta->getCantidadPagada();
  869.             $list[] = [
  870.               'cantidad' => $cantidadPagar,
  871.               'id' => $orden->getId(),
  872.               'idCuenta' => $orden->getIdCuenta()->getId(),
  873.               'idMenu' => $orden->getIdMenu(),
  874.             ];
  875.           endif;
  876.         else:
  877.           $list[] = [
  878.             'cantidad' => $orden->getCantidad(),
  879.             'id' => $orden->getId(),
  880.             'idCuenta' => $orden->getIdCuenta()->getId(),
  881.             'idMenu' => $orden->getIdMenu(),
  882.           ];
  883.         endif;
  884.       endforeach;
  885.       return $list;
  886.     }
  887.     private function setDataPagos($efectivo$transferencia$usuarioUserInterface $user$total) {
  888.       $pagos = new Pagos;
  889.       $valor round(doubleval($efectivo $transferencia), 2);
  890.       $pagos
  891.         ->setValor($valor)
  892.         ->setFechaHoraPago(new \DateTime())
  893.         ->setPagoTotal($total)
  894.         ->setIdUsuario($usuario)
  895.       ;
  896.       $pagos $this->setGenericData($user$pagos);
  897.       return $pagos;
  898.     }
  899.     private function setCajaRegistroMovimiento($monto$user$usuario) {
  900.       $cajaRegistroMovimientos = new CajaRegistroMovimientos;
  901.       $persona $usuario->getIdPersona();
  902.       $observacion "PAGO / ".$persona->getNombres()." ".$persona->getApellidos();
  903.       $cajaRegistroMovimientos
  904.         ->setValor($monto)
  905.         ->setObservacion($observacion)
  906.         ->setIngreso(true)
  907.         ->setIdCaja($this->em->getRepository(Caja::class)->findOneBy(['activo' => true]))
  908.         ->setIdMedioPago($this->em->getRepository(MedioPago::class)->find(2))
  909.       ;
  910.       $cajaRegistroMovimientos $this->setGenericData($user$cajaRegistroMovimientos);
  911.       return $cajaRegistroMovimientos;
  912.     }
  913.     private function setDataPagoCuenta($id$cantidad$pagos$cuenta) {
  914.       $pagoCuenta = new PagoCuenta;
  915.       $idMenu $this->em->getRepository(Menu::class)->find($id);
  916.       $pagoCuenta
  917.         ->setCantidadPagada($cantidad)
  918.         ->setIdPagos($pagos)
  919.         ->setIdMenu($idMenu)
  920.         ->setIdCuenta($cuenta)
  921.       ;
  922.       return $pagoCuenta;
  923.     }
  924.     private function setDataDetallePagos($id$valor$pagosUserInterface $user$entidadFinanciera "") {
  925.       $idMedioPago $this->em->getRepository(MedioPago::class)->find($id);
  926.       $detallePagos = new DetallePagos;
  927.       $detallePagos
  928.         ->setValor($valor)
  929.         ->setIdMedioPago($idMedioPago)
  930.         ->setIdPagos($pagos)
  931.       ;
  932.       if ($entidadFinanciera != "") :
  933.         $idEntidadFinanciera $this->em->getRepository(EntidadFinanciera::class)->find($entidadFinanciera);
  934.         $detallePagos->setIdEntidadFinanciera($idEntidadFinanciera);
  935.       endif;
  936.       $efectivoDetallePagos $this->setGenericData($user$detallePagos);
  937.       return $efectivoDetallePagos;
  938.     }
  939.     private function setComprobantesPago($transferencia_detallePagos$user$documentsService) {
  940.       $type $_FILES['pagos_cuenta']['type'];
  941.       $size $_FILES['pagos_cuenta']['size'];
  942.       $tmp_name $_FILES['pagos_cuenta']['tmp_name'];
  943.       $name $_FILES['pagos_cuenta']['name'];
  944.       $countComprobantes count($_FILES['pagos_cuenta']['name']['comprobante']);
  945.       if ($countComprobantes 0) :
  946.         for ($i 0$i $countComprobantes$i++) {
  947.           $comprobante $documentsService->getEstructureDocument($name['comprobante'][$i], $size['comprobante'][$i], $tmp_name['comprobante'][$i], $type['comprobante'][$i]);
  948.           $documentName $documentsService->flushDocument($comprobante"COMP_PAGO"'docs_directory');
  949.           $addDocument $documentsService->addDocument($comprobante$documentName"images/documents/$documentName"true$usernull);
  950.           $documentosDetallePagos = new DocumentosDetallePagos;
  951.           $documentosDetallePagos
  952.             ->setIdCargaDocumento($addDocument)
  953.             ->setIdDetallePagos($transferencia_detallePagos)
  954.           ;
  955.           $documentosDetallePagos $this->setGenericData($user$documentosDetallePagos);
  956.           $this->em->persist($documentosDetallePagos);
  957.         }
  958.       endif;
  959.     }
  960.     private function setFidelizacionUser($efectivo$transferencia$data$user$pago) {
  961.       $valor intval(doubleval($efectivo) + doubleval($transferencia));
  962.       $userId = ($data['pagoTotal'] === "false")
  963.         ? $this->em->getRepository(Cuenta::class)->find($data['idCuenta'])->getIdUsuario()
  964.         : $this->em->getRepository(Usuario::class)->find($data['idUsuario']);
  965.       $dql "SELECT SUM(pagos.valor) FROM App\Entity\Contabilidad\Pagos pagos WHERE pagos.idUsuario = :userId";
  966.       $params = ['userId' => $userId->getId()];
  967.       $pagos $this->em->createQuery($dql)->setParameters($params);
  968.       $valAllPagos intval($pagos->getOneOrNullResult()[1]);
  969.       $newNivel null;
  970.       $persona $userId->getIdPersona();
  971.       $categoria_cliente_persona $this->em->getRepository(CategoriaClientePersona::class)->findOneBy(['activo' => true'idPersona' => $persona->getId()]);
  972.       $parametrosFidelizacion $categoria_cliente_persona->getIdCategoriaCliente()->getIdParametrosFidelizacion();
  973.       if ($categoria_cliente_persona->getIdCategoriaCliente()->getNivel() != 3) :
  974.         $baseSiguienteNivel $this->em->getRepository(CategoriaCliente::class)->findOneBy(['idParametrosFidelizacion' => $parametrosFidelizacion->getId(), 'nivel' => $categoria_cliente_persona->getIdCategoriaCliente()->getNivel() + 1]);
  975.         $baseCategoria intval($baseSiguienteNivel->getBase());
  976.         if ($valAllPagos $baseCategoria) :
  977.           $newNivel $categoria_cliente_persona->getIdCategoriaCliente()->getNivel() + 1;
  978.           $parametrosFidelizacionActivo $this->em->getRepository(ParametrosFidelizacion::class)->findOneBy(['activo' => true]);
  979.           $categoriaCliente $this->em->getRepository(CategoriaCliente::class)->findOneBy(['nivel' => $newNivel'idParametrosFidelizacion' => $parametrosFidelizacionActivo->getId()]);
  980.           $updateCategoria $this->em->getRepository(Persona::class)->find($persona->getId());
  981.           $updateCategoria->setIdCategoriaCliente($categoriaCliente);
  982.           $updateCategoria $this->setGenericData($user$updateCategoria);
  983.           $this->em->persist($updateCategoria);
  984.           $updateCategoriaClientePersona $this->em->getRepository(CategoriaClientePersona::class)->findOneBy(['idPersona' => $persona->getId()]);
  985.           $updateCategoriaClientePersona->setActivo(false);
  986.           $this->em->persist($updateCategoria);
  987.           $categoriaClientePersona = new CategoriaClientePersona;
  988.           $categoriaClientePersona $this->setCategoriaClientePersona($persona$categoriaClientePersona$user$newNivel);
  989.           $this->em->persist($categoriaClientePersona);
  990.         endif;
  991.       endif;
  992.       $categoria_cliente $categoria_cliente_persona->getIdCategoriaCliente();
  993.       $valor_fidelizacion floor($valor) * $parametrosFidelizacion->getValorDinero() * $categoria_cliente->getPuntosPorDolar();
  994.       $puntos_asignados $valor_fidelizacion $parametrosFidelizacion->getValorDinero();
  995.       if ($valor_fidelizacion != 0) :
  996.         $fidelizacion = new Fidelizacion;
  997.         $fidelizacion
  998.           ->setValor($valor_fidelizacion)
  999.           ->setPuntosAsignados($puntos_asignados)
  1000.           ->setFechaRegistro(new \DateTime())
  1001.           ->setIdPagos($pago)
  1002.           ->setIdCategoriaCliente($categoria_cliente)
  1003.         ;
  1004.         $fidelizacion $this->setGenericData($user$fidelizacion);
  1005.         $this->em->persist($fidelizacion);
  1006.       endif;
  1007.     }
  1008.     private function setCategoriaClientePersona($persona$categoriaClientePersona$user$newNivel) {
  1009.             $parametroFidelizacionActivo $this->em->getRepository(ParametrosFidelizacion::class)->findOneBy(['activo' => true]);
  1010.             $categoriaClientePersona
  1011.                 ->setFechaAsignacionCategoria(new \DateTime())
  1012.                 ->setActivo(true)
  1013.                 ->setIdCategoriaCliente($this->em->getRepository(CategoriaCliente::class)->findOneBy(['idParametrosFidelizacion' => $parametroFidelizacionActivo->getId(), 'nivel' => $newNivel]))
  1014.                 ->setIdPersona($persona)
  1015.                 ;
  1016.             $categoriaClientePersona $this->setGenericData($user$categoriaClientePersona);
  1017.             return $categoriaClientePersona;
  1018.         }
  1019.     private function setDescuentos($data$pago$user) {
  1020.       if ($data['tipo_descuento'] == "fidelizacion") :
  1021.         $pagoFidelizacion = new PagoFidelizacion;
  1022.         $pagoFidelizacion
  1023.           ->setValor($data['descuento'])
  1024.           ->setObservacion($data['observacion'])
  1025.           ->setIdPagos($pago)
  1026.         ;
  1027.         $pagoFidelizacion $this->setGenericData($user$pagoFidelizacion);
  1028.         $this->em->persist($pagoFidelizacion);
  1029.       else:
  1030.         $descuentos = new Descuentos;
  1031.         $descuentos
  1032.           ->setPorcentaje($data['textDescuento'])
  1033.           ->setValor($data['descuento'])
  1034.           ->setObservacion($data['observacion'])
  1035.           ->setIdPagos($pago)
  1036.         ;
  1037.         $descuentos $this->setGenericData($user$descuentos);
  1038.         $this->em->persist($descuentos);
  1039.       endif;
  1040.     }
  1041.     /**
  1042.      * @Route("/setActivateCuentaUsuario", name="setActivateCuentaUsuario")
  1043.      */
  1044.     public function setActivateCuentaUsuario(UserInterface $userRequest $request) {
  1045.       try {
  1046.         $data $request->request->get('data');
  1047.         //return $this->json($data, 200);
  1048.         $unirMesas json_decode($data['unirMesas'], true);
  1049.         $usuario $this->em->getRepository(Usuario::class)->findOneBy(['id' => $data['idUsuario']]);
  1050.         $cuenta = new Cuenta();
  1051.         /*1-Apertura 2-Pendiente pago
  1052.           3-Pagado 4-Reserva
  1053.           5-Cancelado 6-Solicitud apertura cuenta
  1054.         */
  1055.         $estadoCuenta $this->em->getRepository(EstadoCuenta::class)->find(1);
  1056.         $codigoCuenta $this->generateCodigoCuenta($usuario);
  1057.         $cuenta
  1058.           ->setActiva(true)
  1059.           ->setIdEstadoCuenta($estadoCuenta)
  1060.           ->setIdUsuario($usuario)
  1061.           ->setCodigoCuenta($codigoCuenta)
  1062.           ->setFechaHoraApertura(new \DateTime())
  1063.         ;
  1064.         $cuenta $this->setGenericData($user$cuenta);
  1065.         $this->em->persist($cuenta);
  1066.         $mesasLocalCuenta = new MesasLocalCuenta();
  1067.         $mesasLocalCuenta
  1068.           ->setFechaInicioOcupacion(new \DateTime())
  1069.           ->setOcupada(true)
  1070.           ->setIdCuenta($cuenta)
  1071.           ->setIdMesasLocal($this->em->getRepository(MesasLocal::class)->find($data['idMesasLocal']))
  1072.         ;
  1073.         $this->em->persist($mesasLocalCuenta);
  1074.         if (count($unirMesas) > 0) :
  1075.           foreach ($unirMesas as $mesa) {
  1076.             $mesaUnida = new MesaUnida;
  1077.             $mesaUnida
  1078.               ->setIdMesasLocalCuenta($mesasLocalCuenta)
  1079.               ->setIdMesasLocal($this->em->getRepository(MesasLocal::class)->find($mesa))
  1080.             ;
  1081.             $this->em->persist($mesaUnida);
  1082.           }
  1083.         endif;
  1084.         $this->em->flush();
  1085.         return $this->json(['response' => true'message' => $this->msgCreate'mesa' => $mesasLocalCuenta->getIdMesasLocal()]);
  1086.       } catch (Exception $e) {
  1087.         return $this->json(['response' => false'message' => "<b>{$e->getMessage()}</b> error al realizar el registro dentro de la petición <i>setActivateCuentaUsuario</i>"]);
  1088.       }
  1089.     }
  1090.     /**
  1091.      * @Route("/setActivateVentaDirecta", name="setActivateVentaDirecta")
  1092.      */
  1093.     public function setActivateVentaDirecta(UserInterface $userRequest $request) {
  1094.       try {
  1095.         $data $request->request->get('data');
  1096.         $usuario $this->em->getRepository(Usuario::class)->findOneBy(['id' => $data['idUsuario']]);
  1097.         $cuenta = new Cuenta();
  1098.         $estadoCuenta $this->em->getRepository(EstadoCuenta::class)->find(8);
  1099.         $codigoCuenta $this->generateCodigoCuenta($usuario);
  1100.         $cuenta
  1101.           ->setActiva(true)
  1102.           ->setIdEstadoCuenta($estadoCuenta)
  1103.           ->setIdUsuario($usuario)
  1104.           ->setCodigoCuenta($codigoCuenta)
  1105.           ->setFechaHoraApertura(new \DateTime())
  1106.         ;
  1107.         $cuenta $this->setGenericData($user$cuenta);
  1108.         $this->em->persist($cuenta);
  1109.         $this->em->flush();
  1110.         return $this->json(['response' => true'message' => $this->msgCreate'data' => $cuenta]);
  1111.       } catch (Exception $e) {
  1112.         return $this->json(['response' => false'message' => "<b>{$e->getMessage()}</b> error al realizar el registro dentro de la petición <i>setActivateVentaDirecta</i>"]);
  1113.       }
  1114.     }
  1115.     /**
  1116.      * @Route("/deleteCuentaVentaDirecta", name="deleteCuentaVentaDirecta")
  1117.      */
  1118.     public function deleteCuentaVentaDirecta(UserInterface $userRequest $request) {
  1119.       try {
  1120.         $idCuenta $request->request->get('idCuenta');
  1121.         if ($idCuenta != "") :
  1122.           $cuenta $this->em->getRepository(Cuenta::class)->find($idCuenta);
  1123.           if ($cuenta) :
  1124.             $ordenMenu $this->em->getRepository(OrdenMenu::class)->findBy(['idCuenta' => $idCuenta]);
  1125.             if ($ordenMenu) :
  1126.               return $this->json(['response' => false'message' => "Lo sentimos, la cuenta tiene registrado ordenes."]);
  1127.             endif;
  1128.             $this->em->remove($cuenta);
  1129.             $this->em->flush();
  1130.           endif;
  1131.           return $this->json(['response' => true'message' => $this->msgDelete]);
  1132.         endif;
  1133.         return $this->json(['response' => true'message' => '']);
  1134.       } catch (Exception $e) {
  1135.         return $this->json(['response' => false'message' => "<b>{$e->getMessage()}</b> error al realizar el registro dentro de la petición <i>deleteCuentaVentaDirecta</i>"]);
  1136.       }
  1137.     }
  1138.     /**
  1139.      * @Route("/setActivacionCuenta", name="setActivacionCuenta")
  1140.      */
  1141.     public function setActivacionCuenta(UserInterface $userRequest $request) {
  1142.       try {
  1143.         $data $request->request->get('data');
  1144.         $reserva $this->em->getRepository(Reserva::class)->findOneBy(['idCuenta' => $data['id']]);
  1145.         if ($reserva) :
  1146.           $reservaOrdenMenu $this->em->getRepository(ReservaOrdenMenu::class)->findOneBy(['idReserva' => $reserva->getId()]);
  1147.           if (!$reservaOrdenMenu) :
  1148.             return $this->json(['response' => false'message' => "Lo sentimos, no se puede activar por la reserva no cuenta con pedidos asignados."]);
  1149.           endif;
  1150.           $ordenMenu $this->em->getRepository(OrdenMenu::class)->findBy(['idCuenta' => $data['id']]);
  1151.           foreach ($ordenMenu as $orden) {
  1152.             $orden->setEstado("Confirmado");
  1153.             $orden $this->setGenericData($user$orden);
  1154.             $this->em->persist($orden);
  1155.           }
  1156.         endif;
  1157.         $cuenta $this->em->getRepository(Cuenta::class)->find($data['id']);
  1158.         $estadoCuenta $this->em->getRepository(EstadoCuenta::class)->find(1);
  1159.         $cuenta
  1160.           ->setActiva(true)
  1161.           ->setIdEstadoCuenta($estadoCuenta)
  1162.         ;
  1163.         $cuenta $this->setGenericData($user$cuenta);
  1164.         $this->em->persist($cuenta);
  1165.         $mesasLocalCuenta $this->em->getRepository(MesasLocalCuenta::class)->findOneBy(['idCuenta' => $data['id']]);
  1166.         $mesasLocalCuenta->setOcupada(true);
  1167.         $this->em->persist($mesasLocalCuenta);
  1168.         $this->em->flush();
  1169.         return $this->json(['response' => true'message' => $this->msgUpdate]);
  1170.       } catch (Exception $e) {
  1171.         return $this->json(['response' => false'message' => "<b>{$e->getMessage()}</b> error al realizar el registro dentro de la petición <i>setActivateCuentaUsuario</i>"]);
  1172.       }
  1173.     }
  1174.     public function generateCodigoCuenta($user) {
  1175.       $ci $user->getIdPersona()->getNumeroIdentificacion();
  1176.       $cuentasUser $this->em->getRepository(Cuenta::class)->findBy(['idUsuario' => $user->getId()]);
  1177.       $count $cuentasUser count($cuentasUser) : 0;
  1178.       $count++;
  1179.       $codigo "{$ci}_$count";
  1180.       return $codigo;
  1181.     }
  1182.     /**
  1183.      * @Route("/setCuentasPorCobrar", name="setCuentasPorCobrar")
  1184.      */
  1185.     public function setCuentasPorCobrar(Request $requestUserInterface $user) {
  1186.       try {
  1187.         $idMesaLocal $request->request->get('idMesaLocal');
  1188.         $mesasLocalCuenta $this->em->getRepository(MesasLocalCuenta::class)->findBy(['idMesasLocal' => $idMesaLocal'ocupada' => true]);
  1189.         if ($mesasLocalCuenta) :
  1190.           foreach ($mesasLocalCuenta as $mesaLocal) {
  1191.             $cuenta $this->em->getRepository(Cuenta::class)->find($mesaLocal->getIdCuenta()->getId());
  1192.             $ordenMenu_verify1 $this->em->getRepository(OrdenMenu::class)->findOneBy(['idCuenta' => $cuenta->getId()]);
  1193.             if (!$ordenMenu_verify1) :
  1194.               return $this->json(['response' => false'message' => "Lo sentimos, una cuenta o más cuentas, no tiene pedidos registrados y no se puede cambiar de estado."]);
  1195.             endif;
  1196.             $ordenMenu_verify2 $this->em->getRepository(OrdenMenu::class)->findOneBy(['estado' => ['Confirmado''Reservado'], 'idCuenta' => $cuenta->getId()]);
  1197.             if ($ordenMenu_verify2) :
  1198.               return $this->json(['response' => false'message' => "Lo sentimos, una cuenta o más cuentas, tiene pedidos no entregados."]);
  1199.             endif;
  1200.             $cuenta->setIdEstadoCuenta($this->em->getRepository(EstadoCuenta::class)->find(7))->setActiva(false);
  1201.             $this->em->persist($cuenta);
  1202.             $mesaLocal->setFachaFinOcupacion(new \DateTime())->setOcupada(false);
  1203.             $this->em->persist($mesaLocal);
  1204.           }
  1205.         endif;
  1206.         $this->em->flush();
  1207.         $cuentasPorCobrar $this->em->getRepository(Cuenta::class)->findBy(['idEstadoCuenta' => 7]);
  1208.         if ($cuentasPorCobrar) :
  1209.           foreach ($cuentasPorCobrar as $itemCuenta) {
  1210.             $ordenesMenu $this->em->getRepository(OrdenMenu::class)->findBy(['idCuenta' => $itemCuenta->getId(), 'cortesia' => false'estado' => "Entregado"]);
  1211.             $ordenesMenu $this->agrupaOrdenesMenu($ordenesMenu);
  1212.             $valoresOrden $this->getValoresEnOrden($itemCuenta->getId());
  1213.             $valorPendiente 0;
  1214.             foreach ($ordenesMenu as $orden) {
  1215.               $menu $orden->getIdMenu();
  1216.               $pagosMenu $this->getPagosEnMenu($valoresOrden['pagosCuenta'], $menu->getId(), $orden->getCantidad());
  1217.               $valorPendiente += doubleval($orden->getPrecioUnitarioMenu() * $pagosMenu['cantidadPendiente']);
  1218.             }
  1219.             if ($valorPendiente == 0) :
  1220.               $pagos = new Pagos;
  1221.               $pagos
  1222.                 ->setValor(0)
  1223.                 ->setFechaHoraPago(new \DateTime())
  1224.                 ->setPagoTotal(true)
  1225.                 ->setIdUsuario($itemCuenta->getIdUsuario())
  1226.                 ->setIdArqueoCaja($this->em->getRepository(ArqueoCaja::class)->findOneBy(['estado' => true]))
  1227.               ;
  1228.               $pagos $this->setGenericData($user$pagos);
  1229.               $this->em->persist($pagos);
  1230.               $movimientoCaja = new MovimientoCaja;
  1231.               $persona $itemCuenta->getIdUsuario()->getIdPersona();
  1232.               $observacion "CORTESIA / ".$persona->getNombres()." ".$persona->getApellidos();
  1233.               $movimientoCaja
  1234.                 ->setTipo("PAGO")
  1235.                 ->setObservacion($observacion)
  1236.                 ->setMonto(0)
  1237.                 ->setFechaHora(new \DateTime())
  1238.                 ->setIdArqueoCaja($this->em->getRepository(ArqueoCaja::class)->findOneBy(['estado' => true]))
  1239.               ;
  1240.               $movimientoCaja $this->setGenericData($user$movimientoCaja);
  1241.               $this->em->persist($movimientoCaja);
  1242.               foreach ($ordenesMenu as $orden) {
  1243.                 $pagoCuenta = new PagoCuenta;
  1244.                 $idMenu $this->em->getRepository(Menu::class)->find($orden->getIdMenu());
  1245.                 $pagoCuenta
  1246.                   ->setCantidadPagada($orden->getCantidad())
  1247.                   ->setIdPagos($pagos)
  1248.                   ->setIdMenu($idMenu)
  1249.                   ->setIdCuenta($itemCuenta->getId())
  1250.                 ;
  1251.                 $this->em->persist($pagoCuenta);
  1252.               }
  1253.               $idMedioPago $this->em->getRepository(MedioPago::class)->find(2);
  1254.               $arqueoDetalle = new ArqueoDetalle;
  1255.               $arqueoDetalle
  1256.                 ->setMonto(0)
  1257.                 ->setIdMedioPago($idMedioPago)
  1258.                 ->setIdArqueoCaja($this->em->getRepository(ArqueoCaja::class)->findOneBy(['estado' => true])->getId())
  1259.               ;
  1260.               $arqueoDetalle $this->setGenericData($user$arqueoDetalle);
  1261.               $this->em->persist($arqueoDetalle);
  1262.               $idMedioPago $this->em->getRepository(MedioPago::class)->find(2);
  1263.               $detallePagos = new DetallePagos;
  1264.               $detallePagos
  1265.                 ->setValor(0)
  1266.                 ->setIdMedioPago($idMedioPago)
  1267.                 ->setIdPagos($pagos)
  1268.               ;
  1269.               $detallePagos $this->setGenericData($user$detallePagos);
  1270.               $this->em->persist($detallePagos);
  1271.               $itemCuenta->setIdEstadoCuenta($this->em->getRepository(EstadoCuenta::class)->find(3))->setActiva(false);
  1272.               $this->em->persist($itemCuenta);
  1273.             endif;
  1274.           }
  1275.           $this->em->flush();
  1276.         endif;
  1277.         return $this->json(['response' => true'message' => $this->msgUpdate]);
  1278.       } catch (Exception $e) {
  1279.         return $this->json(['response' => false'message' => "<b>{$e->getMessage()}</b> error al realizar el registro dentro de la petición <i>setCuentasPorCobrar</i>"]);
  1280.       }
  1281.     }
  1282.     private function setGenericData($user null$entity) {
  1283.       $entity
  1284.         ->setIdUsuarioModificacion($user != null $user->getId() : '1')
  1285.         ->setFechaModificacion(new \DateTime())
  1286.         ->setIpModificacion($_SERVER['REMOTE_ADDR'])
  1287.       ;
  1288.       return $entity;
  1289.     }
  1290.   // * DELETE FUNCTIONS *
  1291.     /**
  1292.      * @Route("/deleteCuenta", name="deleteCuenta")
  1293.      */
  1294.     public function deleteCuenta(Request $request) {
  1295.       try {
  1296.         $id $request->request->get('id');
  1297.         $cuenta $this->em->getRepository(Cuenta::class)->find($id);
  1298.         // * VALIDACIONES
  1299.           $pagoCuenta $this->em->getRepository(PagoCuenta::class)->findOneBy(['idCuenta' => $id]);
  1300.           if ($pagoCuenta) : return $this->json(['response' => false'exception' => false], 200); endif;
  1301.           $reserva $this->em->getRepository(Reserva::class)->findOneBy(['idCuenta' => $id]);
  1302.           if ($reserva) : return $this->json(['response' => false'exception' => false], 200); endif;
  1303.           $ordenMenu $this->em->getRepository(OrdenMenu::class)->findOneBy(['idCuenta' => $id]);
  1304.           if ($ordenMenu) : return $this->json(['response' => false'exception' => false], 200); endif;
  1305.           $cancionesCuenta $this->em->getRepository(CancionesCuenta::class)->findOneBy(['idCuenta' => $id]);
  1306.           if ($cancionesCuenta) : return $this->json(['response' => false'exception' => false], 200); endif;
  1307.         $mesasLocalCuenta $this->em->getRepository(MesasLocalCuenta::class)->findOneBy(['idCuenta' => $id]);
  1308.         $this->em->remove($mesasLocalCuenta);
  1309.         $this->em->remove($cuenta);
  1310.         $this->em->flush();
  1311.         return $this->json(['response' => true'message' => $this->msgDelete'exception' => false], 200);
  1312.       } catch (Exception $e) {
  1313.         return $this->json(['response' => false'message' => "<b>{$e->getMessage()}</b> error al realizar el registro dentro de la petición <i>deleteCuenta</i>"'exception' => true]);
  1314.       }
  1315.     }
  1316.   // * EXPORTS *
  1317.     /**
  1318.      * @Route("/getExcelCuentas", name="getExcelCuentas")
  1319.      */
  1320.     public function getExcelCuentas(){
  1321.       $spreadsheet = new Spreadsheet();
  1322.       $sheet $spreadsheet->getActiveSheet();
  1323.       $sheet->setTitle("Cuentas");
  1324.       $headers = ['id''cod. cuenta''nombres apellidos''nro. identificacion''correo''mesa''estado''valor''activa''reserva'];
  1325.       $sheet->fromArray$headersNULL'A1' );
  1326.       $lista $this->cache->get('excelListCuentas');
  1327.       $lista = !$lista ? [] : $lista;
  1328.       if(count($lista) != 0):
  1329.         $data array_map(function ($cuenta) {
  1330.           return [
  1331.             $cuenta['id'],
  1332.             $cuenta['codigoCuenta'],
  1333.             $cuenta['nombresApellidos'],
  1334.             $cuenta['numeroIdentificacion'],
  1335.             $cuenta['mailPersonal'],
  1336.             $cuenta['numeroMesa'],
  1337.             $cuenta['estadoCuenta'],
  1338.             round($cuenta['valor'], 2),
  1339.             $cuenta['activa'] ? 'Sí' 'No',
  1340.             $cuenta['isReserva'] ? 'Sí' 'No'
  1341.           ];
  1342.         }, $lista);
  1343.       endif;
  1344.       $sheet->fromArray($datanull'A2');
  1345.       $writer = new Xlsx($spreadsheet);
  1346.       $fileName 'cuentas.xlsx';
  1347.       $temp_file tempnam(sys_get_temp_dir(), $fileName);
  1348.       $writer->save($temp_file);
  1349.       return $this->file($temp_file$fileNameResponseHeaderBag::DISPOSITION_INLINE);
  1350.     }
  1351.     /**
  1352.      * @Route("/getExcelCuentasHistorial", name="getExcelCuentasHistorial")
  1353.      */
  1354.     public function getExcelCuentasHistorial(){
  1355.       $spreadsheet = new Spreadsheet();
  1356.       $sheet $spreadsheet->getActiveSheet();
  1357.       $sheet->setTitle("Cuentas");
  1358.       $headers = [
  1359.         'id',
  1360.         'cod',
  1361.         'f. apertura',
  1362.         'f. cierre',
  1363.         'nombres apellidos',
  1364.         'nro. identificacion',
  1365.         'mesa',
  1366.         'estado',
  1367.         'vcta',
  1368.         'dscto',
  1369.         'total'
  1370.       ];
  1371.       $sheet->fromArray$headersNULL'A1' );
  1372.       $lista $this->cache->get('excelListCuentasHistorial');
  1373.       $lista = !$lista ? [] : $lista;
  1374.       if(count($lista) != 0):
  1375.         $data array_map(function ($cuenta) {
  1376.           return [
  1377.             $cuenta['id'],
  1378.             $cuenta['codigoCuenta'],
  1379.             $cuenta['fechaApertura'],
  1380.             $cuenta['fechaCierre'],
  1381.             $cuenta['nombresApellidos'],
  1382.             $cuenta['numeroIdentificacion'],
  1383.             $cuenta['numeroMesa'],
  1384.             $cuenta['estadoCuenta'],
  1385.             round($cuenta['valor'], 2),
  1386.             round($cuenta['descuentos'], 2),
  1387.             round($cuenta['total'], 2)
  1388.           ];
  1389.         }, $lista);
  1390.       endif;
  1391.       $sheet->fromArray($datanull'A2');
  1392.       $writer = new Xlsx($spreadsheet);
  1393.       $fileName 'cuentas.xlsx';
  1394.       $temp_file tempnam(sys_get_temp_dir(), $fileName);
  1395.       $writer->save($temp_file);
  1396.       return $this->file($temp_file$fileNameResponseHeaderBag::DISPOSITION_INLINE);
  1397.     }
  1398. }