<?php
namespace App\Controller\ModComercio\Ventas;
use App\Controller\ModComercio\GestionCarta\ComponentesController;
use App\Entity\Catalogos\EstadoCuenta;
use App\Entity\Comercio\{ConsumoInsumosOrdenMenu, ControlComponente, Cuenta, OrdenMenu, DatosComercio, OrdenMenuAcompanamiento, Reserva, ReservaOrdenMenu};
use App\Entity\Producto\{Acompanamiento, ComponenteInsumo, Insumos, Menu, MenuComponentes, MenuPreciosHistorial};
use App\Service\CacheService;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Doctrine\ORM\EntityManagerInterface;
use Exception;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
use Symfony\Component\Security\Core\User\UserInterface;
class PedidosController extends AbstractController {
private $em;
private $msgCreate;
private $msgUpdate;
private $msgDelete;
private $msgNotCreate;
private $datosComercio;
private $cache;
public function __construct(EntityManagerInterface $em, CacheService $cache) {
date_default_timezone_set('America/Guayaquil');
$this->em = $em;
$this->msgCreate = "Registro creado exitosamente.";
$this->msgUpdate = "Registro actualizado exitosamente.";
$this->msgDelete = "Registro eliminado exitosamente.";
$this->msgNotCreate = "La cuenta seleccionada está inactiva o ha alcanzado el límite de pedidos permitidos.";
$this->datosComercio = $em->getRepository(DatosComercio::class)->find(1);
$this->cache = $cache;
}
// * READ FUNCTIONS *
/**
* @Route("/getInitialPedidos", name="getInitialPedidos")
*/
public function getInitialPedidos(Request $request) {
$this->cache->delete('excelListPedidos');
$idCuenta = $request->request->get('idCuenta');
$qb = $this->em->createQueryBuilder();
$datosComercio = $this->em->getRepository(DatosComercio::class)->find(1);
$iva = $datosComercio->getIdPorcentajeIva()->getPorcentaje();
$qb->select('o')
->from(OrdenMenu::class, 'o')
->leftJoin('o.idMenu', 'm')
->addSelect('m')
->where('o.idCuenta = :idCuenta')
->setParameter('idCuenta', $idCuenta)
->orderBy('o.id', 'DESC');
$pedidos = $qb->getQuery()->getResult();
$list = $this->setArrayPedidos($pedidos, $iva);
$this->cache->add('excelListPedidos', $list);
return $this->json(['data' => $list], 200);
}
private function setArrayPedidos($pedidos, $iva) {
$list = [];
if ($pedidos) {
$actionEntregarCancelar = false;
$actionEliminar = false;
foreach ($pedidos as $indice => $pedido) {
$actionEntregarCancelar = $pedido->getEstado() == "Entregado" || $pedido->getEstado() == "Cancelado" || $pedido->getEstado() == "Reservado" ? false : true;
$actionEliminar = $pedido->getEstado() == "Entregado" || $pedido->getEstado() == "Cancelado" ? false : true;
$menu = $pedido->getIdMenu();
$valIva = doubleval(($pedido->getPrecioUnitarioMenu() * $iva) / 100);
$total = doubleval($valIva + $pedido->getPrecioUnitarioMenu()) * $pedido->getCantidad();
array_push($list, [
'indice' => $indice + 1,
'id' => $pedido->getId(),
'cantidad' => $pedido->getCantidad(),
'cortesia' => $pedido->getCortesia(),
'fechaHoraPedido' => $pedido->getFechaHoraPedidoString(),
'fechaHoraEntrega' => $pedido->getFechaHoraEntregaString(),
'estado' => $pedido->getEstado(),
'nombre' => $menu->getNombre(),
'pu' => doubleval($valIva + $pedido->getPrecioUnitarioMenu()),
'total' => $total,
'actionEntregarCancelar' => $actionEntregarCancelar,
'actionEliminar' => $actionEliminar
]);
}
}
return $list;
}
// * CREATE OR UPDATE FUNCTIONS *
/**
* @Route("/setOrdenCuenta", name="setOrdenCuenta")
*/
public function setOrdenCuenta(UserInterface $user, Request $request) {
try {
$data = $request->request->get('data');
$jsonAcompanamiento = json_decode($data['json'], true);
$cuenta = $this->getCuenta($data['idCuenta']);
$isReserva = $this->getReserva($data['idCuenta']);
if (!$cuenta || !$this->isCuentaActiva($cuenta, $isReserva)) :
return $this->json(['response' => false, 'message' => $this->msgNotCreate]);
endif;
if ($isReserva) :
$reserva = $this->handleReserva($data, $user, $cuenta, $isReserva, $this->datosComercio, $jsonAcompanamiento);
return $this->json($reserva, 200);
endif;
$menu = $this->em->getRepository(Menu::class)->find($data['idMenu']);
$menuComponentes = $this->getMenuComponentes($data['idMenu']);
if ($menu->getAcompanamiento()) :
$acompanamiento = $this->em->getRepository(Acompanamiento::class)->findBy(['idMenu' => $data['idMenu']]);
$resultado = $this->filtrarComponentesNoUsados($acompanamiento, $menuComponentes);
$ingredientesFaltantes = $this->checkInsumosDisponibles($resultado, $data['cantidad']);
if ($ingredientesFaltantes) :
return $this->json([
'response' => false,
'stock' => true,
'ingredientes' => $this->renderInsumosFaltantes($ingredientesFaltantes)
]);
endif;
$jsonComponentes = $this->jsonAcompanamientoFilter($jsonAcompanamiento);
$ingredientesFaltantesDos = $this->checkInsumosDisponiblesAcompanamiento($jsonComponentes, $data['cantidad'], count($jsonAcompanamiento));
if ($ingredientesFaltantesDos) :
return $this->json([
'response' => false,
'stock' => true,
'ingredientes' => $this->renderInsumosFaltantes($ingredientesFaltantes)
]);
endif;
return $this->handleOrdenMenu($data, $user, $cuenta, $this->datosComercio, $menu->getAcompanamiento(), $jsonAcompanamiento);
else:
$ingredientesFaltantes = $this->checkInsumosDisponibles($menuComponentes, $data['cantidad']);
if ($ingredientesFaltantes) :
return $this->json([
'response' => false,
'stock' => true,
'ingredientes' => $this->renderInsumosFaltantes($ingredientesFaltantes)
]);
endif;
return $this->handleOrdenMenu($data, $user, $cuenta, $this->datosComercio, $menu->getAcompanamiento());
endif;
} catch (Exception $e) {
return $this->json(['response' => false, 'message' => "<b>{$e->getMessage()}</b> error al realizar el registro dentro de la petición <i>setOrdenCuenta</i>", 'stock' => false]);
}
}
function filtrarComponentesNoUsados($primerArreglo, $segundoArreglo) {
$idsUsados = array_map(function ($item) {
return $item->getIdMenuComponentes()->getId();
}, $primerArreglo);
$resultado = array_filter($segundoArreglo, function ($componente) use ($idsUsados) {
return !in_array($componente->getId(), $idsUsados);
});
return array_values($resultado);
}
function filtrarComponentesNoUsadosDos($primerArreglo, $segundoArreglo, $ordenMenuACompanamiento) {
$idsUsados = array_map(function ($item) {
return $item->getIdMenuComponentes()->getId();
}, $primerArreglo);
$resultado = array_filter($segundoArreglo, function ($componente) use ($idsUsados) {
return !in_array($componente->getId(), $idsUsados);
});
return array_values($resultado);
}
function jsonAcompanamientoFilter($jsonAcompanamiento) {
$resultado = [];
foreach ($jsonAcompanamiento as $item) {
$acompanamiento = $this->em->getRepository(Acompanamiento::class)->find($item['id']);
$resultado[] = $acompanamiento->getIdMenuComponentes();
}
return array_values($resultado);
}
function jsonAcompanamientoFilterDos($ordenMenuACompanamiento) {
$resultado = [];
foreach ($ordenMenuACompanamiento as $item) {
$resultado[] = $item->getIdAcompanamiento()->getIdMenuComponentes();
}
return array_values($resultado);
}
private function getCuenta($idCuenta) {
return $this->em->getRepository(Cuenta::class)->find($idCuenta);
}
private function getReserva($idCuenta) {
return $this->em->getRepository(Reserva::class)->findOneBy(['idCuenta' => $idCuenta]);
}
private function isCuentaActiva($cuenta, $isReserva) {
return ($cuenta && $cuenta->getActiva() && !$isReserva) || ($isReserva && !$cuenta->getActiva());
}
private function handleReserva($data, $user, $cuenta, $isReserva, $datosComercio, $jsonAcompanamiento) {
$ordenMenu = new OrdenMenu;
$ordenMenu = $this->setOrdenMenu($ordenMenu, $data, 'Reservado', $cuenta, $user, $datosComercio);
$this->em->persist($ordenMenu);
$menu = $this->em->getRepository(Menu::class)->find($data['idMenu']);
if ($menu->getAcompanamiento()) :
foreach ($jsonAcompanamiento as $acompanamiento) {
$ordenMenuACompanamiento = new OrdenMenuAcompanamiento;
$ordenMenuACompanamiento
->setIdOrdenMenu($ordenMenu)
->setIdAcompanamiento($this->em->getRepository(Acompanamiento::class)->find($acompanamiento['id']))
;
$ordenMenuACompanamiento = $this->setGenericData($user, $ordenMenuACompanamiento);
$this->em->persist($ordenMenuACompanamiento);
}
endif;
$reservaOrdenMenu = new ReservaOrdenMenu;
$reservaOrdenMenu = $this->setReservaOrdenMenu($reservaOrdenMenu, $ordenMenu, $isReserva, $user);
$this->em->persist($reservaOrdenMenu);
$this->em->flush();
return ['response' => true, 'message' => $this->msgCreate, 'ordenMenuReserva' => $reservaOrdenMenu];
}
private function setOrdenMenu($ordenMenu, $data, $estadoReserva, $cuenta, $user, $datosComercio) {
$menu = $this->em->getRepository(Menu::class)->find($data['idMenu']);
$costo = $this->getCostoMenu($menu);
$ordenMenu
->setCantidad($data['cantidad'])
->setCortesia(false)
->setModificarStock(false)
->setFechaHoraPedido(new \DateTime())
->setEstado($estadoReserva)
->setIdMenu($menu)
->setIdCuenta($cuenta)
->setPrecioUnitarioMenu($menu->getPrecio())
->setPrecioCosto($costo)
->setIdPorcentajeIva($datosComercio->getIdPorcentajeIva())
;
$ordenMenu = $this->setGenericData($user, $ordenMenu);
return $ordenMenu;
}
private function setReservaOrdenMenu($reservaOrdenMenu, $ordenMenu, $isReserva, $user) {
$reservaOrdenMenu
->setIdOrdenMenu($ordenMenu)
->setIdReserva($isReserva)
;
$reservaOrdenMenu = $this->setGenericData($user, $reservaOrdenMenu);
return $reservaOrdenMenu;
}
private function getCostoMenu($menu) {
$menuComponentes = $this->em->getRepository(MenuComponentes::class)->findBy(['idMenu' => $menu->getId()]);
return array_reduce($menuComponentes, function ($costo, $menuComponente) {
return $costo + (new ComponentesController($this->em, $this->cache))->getCostoComponente($menuComponente);
}, 0.0);
}
private function getMenuComponentes($idMenu) {
return $this->em->getRepository(MenuComponentes::class)->findBy(['idMenu' => $idMenu]);
}
private function checkInsumosDisponiblesAcompanamiento($menuComponentes, $cantidad, $nro_acompanamiento) {
$ingredientesFaltantes = [];
foreach ($menuComponentes as $menuComponente) {
$menu_componente_cantidad = floatval($menuComponente->getCantidad());
$componenteInsumos = $this->em->getRepository(ComponenteInsumo::class)->findBy(['idComponentes' => $menuComponente->getIdComponentes()->getId()]);
foreach ($componenteInsumos as $componenteInsumo) {
$componente_insumo_cantidad = floatval($componenteInsumo->getCantidad());
$cantidad_requerida = (($componente_insumo_cantidad / intval($nro_acompanamiento)) * $menu_componente_cantidad) * intval($cantidad);
if (floatval($cantidad_requerida) > $componenteInsumo->getIdInsumos()->getStock()) :
$cantidadFaltante = floatval($cantidad_requerida) - floatval($componenteInsumo->getIdInsumos()->getStock());
$abreviaturaUnidad = $this->getAbreviaturaUnidad($componenteInsumo->getIdInsumos()->getIdUnidadesInsumos()->getNombre());
$ingredientesFaltantes[] = [
'insumo' => $componenteInsumo->getIdInsumos()->getNombre(),
'cantidadFaltante' => $cantidadFaltante,
'abreviaturaUnidad' => $abreviaturaUnidad
];
endif;
}
}
return $ingredientesFaltantes;
}
private function checkInsumosDisponibles($menuComponentes, $cantidad) {
$ingredientesFaltantes = [];
foreach ($menuComponentes as $menuComponente) {
$cantidadComponente = floatval($menuComponente->getCantidad());
$componenteInsumos = $this->em->getRepository(ComponenteInsumo::class)->findBy(['idComponentes' => $menuComponente->getIdComponentes()->getId()]);
foreach ($componenteInsumos as $componenteInsumo) {
$cantidadInsumoComponente = floatval($componenteInsumo->getCantidad());
$cantidadRequeridaOrden = $cantidadComponente * floatval($cantidadInsumoComponente * $cantidad);
if (floatval($cantidadRequeridaOrden) > $componenteInsumo->getIdInsumos()->getStock()) :
$cantidadFaltante = floatval($cantidadRequeridaOrden) - floatval($componenteInsumo->getIdInsumos()->getStock());
$abreviaturaUnidad = $this->getAbreviaturaUnidad($componenteInsumo->getIdInsumos()->getIdUnidadesInsumos()->getNombre());
$ingredientesFaltantes[] = [
'insumo' => $componenteInsumo->getIdInsumos()->getNombre(),
'cantidadFaltante' => $cantidadFaltante,
'abreviaturaUnidad' => $abreviaturaUnidad
];
endif;
}
}
return $ingredientesFaltantes;
}
private function getAbreviaturaUnidad($nombre) {
$abreviaturas = [
'LIBRAS' => 'lbs',
'UNIDADES' => 'uds',
'LITROS' => 'l',
'MILILITROS' => 'ml',
'FUNDAS' => 'f',
];
return $abreviaturas[$nombre] ?? 'gr';
}
private function renderInsumosFaltantes($ingredientesFaltantes) {
$html = '<ul class="list-group">';
foreach ($ingredientesFaltantes as $ingrediente) {
$html .= '<li class="list-group-item d-flex justify-content-between align-items-center" style="padding: .15rem 1.25rem;">';
$html .= $ingrediente['insumo'];
$html .= '<span class="badge bg-primary rounded-pill">';
$html .= $ingrediente['cantidadFaltante'] . $ingrediente['abreviaturaUnidad'];
$html .= '</span>';
$html .= '</li>';
}
$html .= '</ul>';
return $html;
}
private function handleOrdenMenu($data, $user, $cuenta, $datosComercio, $acompanamiento, $jsonAcompanamiento = []) {
$ordenMenu = new OrdenMenu();
$ordenMenu = $this->setOrdenMenu($ordenMenu, $data, 'Confirmado', $cuenta, $user, $datosComercio);
$this->em->persist($ordenMenu);
if ($acompanamiento) :
foreach ($jsonAcompanamiento as $item) {
$ordenMenuACompanamiento = new OrdenMenuAcompanamiento;
$ordenMenuACompanamiento
->setIdOrdenMenu($ordenMenu)
->setIdAcompanamiento($this->em->getRepository(Acompanamiento::class)->find($item['id']))
;
$ordenMenuACompanamiento = $this->setGenericData($user, $ordenMenuACompanamiento);
$this->em->persist($ordenMenuACompanamiento);
}
endif;
$veryMenuPrecio = $this->em->getRepository(MenuPreciosHistorial::class)->findOneBy(['idMenu' => $ordenMenu->getIdMenu()->getId()], ['fecha' => 'DESC']);
if (!$veryMenuPrecio || $this->isPrecioDiferente($ordenMenu, $veryMenuPrecio)) :
$menuPreciosHistorial = $this->setMenuPrecioHistorial(new MenuPreciosHistorial(), $ordenMenu, $user);
$this->em->persist($menuPreciosHistorial);
endif;
$this->em->flush();
return $this->json(['response' => true, 'message' => $this->msgCreate]);
}
private function isPrecioDiferente($ordenMenu, $veryMenuPrecio) {
return round($ordenMenu->getPrecioCosto(), 4) != round($veryMenuPrecio->getPrecioCosto(), 4);
}
private function setMenuPrecioHistorial($menuPreciosHistorial, $ordenMenu, $user) {
$iva = $ordenMenu->getIdPorcentajeIva()->getPorcentaje();
$precio = floatval(($iva * $ordenMenu->getIdMenu()->getPrecio()) / 100) + floatval($ordenMenu->getIdMenu()->getPrecio());
$menuPreciosHistorial
->setFecha(new \DateTime())
->setPrecioCosto($ordenMenu->getPrecioCosto())
->setPrecioPvp($precio)
->setIdMenu($ordenMenu->getIdMenu())
->setIdPorcentajeIva($ordenMenu->getIdPorcentajeIva())
;
$menuPreciosHistorial = $this->setGenericData($user, $menuPreciosHistorial);
return $menuPreciosHistorial;
}
/**
* @Route("/setPedidoEstado", name="setPedidoEstado")
*/
public function setPedidoEstado(UserInterface $user, Request $request) {
try {
$data = $request->request->get('data');
$ordenMenu = $this->em->getRepository(OrdenMenu::class)->find($data['id']);
$cuenta = $ordenMenu->getIdCuenta();
switch ($data['estado']) {
case 'entregado':
$this->setEstadoEntregado($ordenMenu, $user, $cuenta);
break;
case 'cancelado':
$this->setEstadoCancelado($ordenMenu, $user);
break;
default:
return $this->json(['response' => false, 'message' => "Estado desconocido"]);
}
$this->updateStock($ordenMenu, $user);
$this->em->flush();
return $this->json(['response' => true, 'message' => $this->msgUpdate]);
} catch (Exception $e) {
return $this->json(['response' => false, 'message' => "<b>{$e->getMessage()}</b> error al realizar el registro dentro de la petición <i>setPedidoEstado</i>"]);
}
}
private function setEstadoEntregado(OrdenMenu $ordenMenu, UserInterface $user, Cuenta $cuenta) {
$ordenMenu
->setEstado('Entregado')
->setModificarStock(true)
->setFechaHoraEntrega(new \DateTime());
$this->setGenericData($user, $ordenMenu);
$this->em->persist($ordenMenu);
if ($cuenta->getIdEstadoCuenta()->getId() == 1) :
$estadoCuenta = $this->em->getRepository(EstadoCuenta::class)->find(2);
$cuenta->setIdEstadoCuenta($estadoCuenta);
$this->em->persist($cuenta);
endif;
}
private function setEstadoCancelado(OrdenMenu $ordenMenu, UserInterface $user) {
$ordenMenu
->setEstado('Cancelado')
->setModificarStock(true);
$this->setGenericData($user, $ordenMenu);
$this->em->persist($ordenMenu);
}
private function updateStock($ordenMenu, $user) {
$list = [];
$cantidadOrden = $ordenMenu->getCantidad();
$menuComponentes = $this->em->getRepository(MenuComponentes::class)->findBy(['idMenu' => $ordenMenu->getIdMenu()->getId()]);
if ($ordenMenu->getIdMenu()->getAcompanamiento()) :
$acompanamiento = $this->em->getRepository(Acompanamiento::class)->findBy(['idMenu' => $ordenMenu->getIdMenu()->getId()]);
$resultado = $this->filtrarComponentesNoUsados($acompanamiento, $menuComponentes);
foreach ($resultado as $menuComponente) {
$cantidadComponente = (float)$menuComponente->getCantidad();
$componenteInsumo = $this->em->getRepository(ComponenteInsumo::class)->findBy(['idComponentes' => $menuComponente->getIdComponentes()->getId()]);
foreach ($componenteInsumo as $componente) {
$cantidadInsumo = (float)$componente->getCantidad();
$cantidadDescontar = $cantidadInsumo * $cantidadComponente;
$insumo = $componente->getIdInsumos();
$list[] = [
'id' => $insumo->getId(),
'cantidad' => $cantidadDescontar
];
}
}
$ordenMenuACompanamiento = $this->em->getRepository(OrdenMenuAcompanamiento::class)->findBy(['idOrdenMenu' => $ordenMenu->getId()]);
$jsonComponentes = $this->jsonAcompanamientoFilterDos($ordenMenuACompanamiento);
foreach ($jsonComponentes as $menuComponente) {
$menu_componente_cantidad = floatval($menuComponente->getCantidad());
$componenteInsumos = $this->em->getRepository(ComponenteInsumo::class)->findBy(['idComponentes' => $menuComponente->getIdComponentes()->getId()]);
foreach ($componenteInsumos as $componenteInsumo) {
$componente_insumo_cantidad = floatval($componenteInsumo->getCantidad());
$cantidad_requerida = (($componente_insumo_cantidad / count($ordenMenuACompanamiento)) * $menu_componente_cantidad);
$insumo = $componenteInsumo->getIdInsumos();
$list[] = [
'id' => $insumo->getId(),
'cantidad' => $cantidad_requerida
];
}
}
else:
foreach ($menuComponentes as $menuComponente) {
$cantidadComponente = (float)$menuComponente->getCantidad();
$componenteInsumo = $this->em->getRepository(ComponenteInsumo::class)->findBy(['idComponentes' => $menuComponente->getIdComponentes()->getId()]);
foreach ($componenteInsumo as $componente) {
$cantidadInsumo = (float)$componente->getCantidad();
$cantidadDescontar = $cantidadInsumo * $cantidadComponente;
$insumo = $componente->getIdInsumos();
$list[] = [
'id' => $insumo->getId(),
'cantidad' => $cantidadDescontar
];
}
}
endif;
foreach ($list as $item) {
$insumo = $this->em->getRepository(Insumos::class)->find($item['id']);
$consumoInsumosOrdenMenu = new ConsumoInsumosOrdenMenu;
$consumoInsumosOrdenMenu
->setConsumo(floor(($item['cantidad'] * $cantidadOrden)))
->setIdInsumos($insumo)
->setIdOrdenMenu($ordenMenu)
;
$this->em->persist($consumoInsumosOrdenMenu);
$stock = $insumo->getStock();
$nuevoStock = $stock - floor(($item['cantidad'] * $cantidadOrden));
$insumo->setStock($nuevoStock);
$insumo = $this->setGenericData($user, $insumo);
$this->em->persist($insumo);
}
}
/**
* @Route("/setCheckCortesia", name="setCheckCortesia")
*/
public function setCheckCortesia(Request $request, UserInterface $user){
try {
['id' => $id, 'val'=> $val, 'observacion' => $observacion] = $request->request->get('data');
$ordenMenu = $this->em->getRepository(OrdenMenu::class)->find($id);
$ordenMenu
->setCortesia($val == 'true' ? true : false)
->setObservacionCortesia($observacion)
;
$ordenMenu = $this->setGenericData($user, $ordenMenu);
$this->em->persist($ordenMenu);
$this->em->flush();
return $this->json(['response' => true, 'message' => $this->msgUpdate]);
} catch (Exception $e) {
return $this->json(['response' => false, 'message' => "<b>{$e->getMessage()}</b> error al realizar el registro dentro de la petición <i>setCheckCortesia</i>"]);
}
}
private function setGenericData($user = null, $entity) {
$entity
->setIdUsuarioModificacion($user != null ? $user->getId() : '1')
->setFechaModificacion(new \DateTime())
->setIpModificacion($_SERVER['REMOTE_ADDR'])
;
return $entity;
}
// * DELETE FUNCTIONS *
/**
* @Route("/deleteOrdenCuenta", name="deleteOrdenCuenta")
*/
public function deleteOrdenCuenta(Request $request) {
try {
$id = $request->request->get('id');
$ordenMenu = $this->em->getRepository(OrdenMenu::class)->find($id);
// * VALIDACIONES
$controlComponente = $this->em->getRepository(ControlComponente::class)->findOneBy(['idOrdenMenu' => $id]);
if ($controlComponente) : $this->em->remove($controlComponente); endif;
$reservaOrdenMenu = $this->em->getRepository(ReservaOrdenMenu::class)->findOneBy(['idOrdenMenu' => $id]);
if ($reservaOrdenMenu) : $this->em->remove($reservaOrdenMenu); endif;
$this->em->remove($ordenMenu);
$this->em->flush();
return $this->json(['response' => true, 'message' => $this->msgDelete, 'exception' => false], 200);
} catch (Exception $e) {
return $this->json(['response' => false, 'message' => "<b>{$e->getMessage()}</b> error al realizar el registro dentro de la petición <i>deleteOrdenCuenta</i>", 'exception' => true]);
}
}
// * EXPORTS *
/**
* @Route("/getExcelPedidos", name="getExcelPedidos")
*/
public function getExcelPedidos(){
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->setTitle("Pedidos");
$headers = ['id', 'producto', 'cantidad', 'vu', 'total', 'fecha solicitud', 'fecha entrega', 'estado', 'cortesia'];
$sheet->fromArray( $headers, NULL, 'A1' );
$lista = $this->cache->get('excelListPedidos');
$lista = !$lista ? [] : $lista;
if(count($lista) != 0):
$data = array_map(function ($menu) {
return [
$menu['id'],
$menu['nombre'],
$menu['cantidad'],
round($menu['pu'], 4),
round($menu['total'], 2),
$menu['fechaHoraPedido'],
$menu['fechaHoraEntrega'],
$menu['estado'],
$menu['cortesia'] ? 'Sí' : 'No',
];
}, $lista);
endif;
$sheet->fromArray($data, null, 'A2');
$writer = new Xlsx($spreadsheet);
$fileName = 'pedidos.xlsx';
$temp_file = tempnam(sys_get_temp_dir(), $fileName);
$writer->save($temp_file);
return $this->file($temp_file, $fileName, ResponseHeaderBag::DISPOSITION_INLINE);
}
}