<?php
namespace App\Controller\ModComercio\Carta;
use App\Controller\InformacionGeneralController;
use App\Entity\Catalogos\CategoriaProducto;
use App\Entity\Comercio\DatosComercio;
use App\Entity\Documentos\ImagenesProducto;
use App\Entity\Producto\{Menu, PromocionalSlide};
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
class CartaController extends AbstractController {
private $em;
public function __construct(EntityManagerInterface $em) {
date_default_timezone_set('America/Guayaquil');
$this->em = $em;
}
/**
* @Route("/carta", name="carta")
*/
public function carta() {
$informacionGeneral = new InformacionGeneralController($this->em);
$datosComercio = $this->em->getRepository(DatosComercio::class)->find(1);
$iva = $datosComercio->getIdPorcentajeIva()->getPorcentaje();
$promocionalSlide = $this->em->getRepository(PromocionalSlide::class)->findBy(['activo' => true, 'encabezado' => false, 'idCategoriaProducto' => 12], ['titulo' => 'ASC']);
$categoriaProducto = $this->em->getRepository(CategoriaProducto::class)->findBy(['activo' => true, 'publicar' => true], ['ordenPresentacion' => 'ASC']);
$list = [];
foreach ($categoriaProducto as $categoria) {
$slideLateral = $this->em->getRepository(PromocionalSlide::class)->findOneBy(['activo' => true, 'encabezado' => false, 'idCategoriaProducto' => $categoria->getId()]);
$heroSlide = $this->em->getRepository(PromocionalSlide::class)->findOneBy(['activo' => true, 'encabezado' => true, 'idCategoriaProducto' => $categoria->getId()]);
$listMenus = [];
$menus = $this->em->getRepository(Menu::class)->findBy(['idCategoriaProducto' => $categoria->getId(), 'activo' => true, 'publicar' => true]);
if ($menus) {
foreach ($menus as $menu) {
$listMenus = $this->setArrayMenu($listMenus, $menu, $iva);
}
}
array_push($list, [
'id' => $categoria->getId(),
'nombre' => $categoria->getNombre(),
'imagen' => $slideLateral ? $slideLateral->getImagen() : "",
'hero' => $heroSlide ? $heroSlide->getImagen() : "",
'column1' => rand(0, 2),
'column2' => rand(0, 2),
'menus' => $listMenus
]);
}
return $this->render('ModComercio/Carta/index.html.twig', [
'informacionGeneral' => $informacionGeneral->getData(),
'banner' => $promocionalSlide,
'productos' => $list
]);
}
/**
* @Route("/categoria_carta", name="categoria_carta")
*/
public function categoria_carta() {
$lista = [];
$categorias = $this->em->getRepository(CategoriaProducto::class)->findBy(['activo' => true, 'publicar' => true], ['ordenPresentacion' => 'ASC']);
foreach ($categorias as $categoria) {
array_push($lista, [
'id' => $categoria->getId(),
'nombre' => $categoria->getNombre()
]);
}
return $this->json($lista, 200);
}
/**
* @Route("/menu_carta", name="menu_carta")
*/
public function menu_carta(Request $request) {
$list = [];
$filter = $request->request->get('filter');
$datosComercio = $this->em->getRepository(DatosComercio::class)->find(1);
$iva = $datosComercio->getIdPorcentajeIva()->getPorcentaje();
if ($filter != "") :
$json = json_decode($filter, true);
foreach ($json as $categoria) {
$menus = $this->em->getRepository(Menu::class)->findBy(['idCategoriaProducto' => $categoria['id'], 'activo' => true, 'publicar' => true]);
foreach ($menus as $menu) {
$list = $this->setArrayMenu($list, $menu, $iva);
}
}
else :
$menus = $this->em->getRepository(Menu::class)->findBy(['activo' => true, 'publicar' => true], ['nombre' => 'ASC']);
foreach ($menus as $menu) {
$list = $this->setArrayMenu($list, $menu, $iva);
}
endif;
return $this->json($list, 200);
}
private function setArrayMenu($list, $item, $iva) {
$precio = floatval(($iva * $item->getPrecio()) / 100) + floatval($item->getPrecio());
array_push($list, [
'id' => $item->getId(),
'nombre' => $item->getNombre(),
'descripcion' => $item->getDescripcion(),
'precio' => $precio
]);
return $list;
}
/**
* @Route("/get_detail_menu", name="get_detail_menu")
*/
public function get_detail_menu(Request $request) {
$list = [];
$id = $request->request->get('id');
$datosComercio = $this->em->getRepository(DatosComercio::class)->find(1);
$iva = $datosComercio->getIdPorcentajeIva()->getPorcentaje();
$menu = $this->em->getRepository(Menu::class)->find($id);
$imagenPrincipal = $this->em->getRepository(ImagenesProducto::class)->findOneBy(['idMenu' => $menu->getId(), 'principal' => true]);
$galeriaImagenes = $this->em->getRepository(ImagenesProducto::class)->findBy(['idMenu' => $menu->getId(), 'principal' => false, 'portadaMenu' => false]);
array_push($list, [
'id' => $menu->getId(),
'nombre' => $menu->getNombre(),
'descripcion' => $menu->getDescripcion(),
'nombre_categoria' => $menu->getIdCategoriaProducto()->getNombre(),
'pu' => floatval($menu->getPrecio()),
'iva' => $iva,
'galeriaImagenes' => $galeriaImagenes,
'imagenPrincipal' => $imagenPrincipal->getIdCargaDocumento()->getUrl()
]);
return $this->json($list[0], 200);
}
}