src/Controller/ModComercio/GestionCarta/BannerController.php line 38

Open in your IDE?
  1. <?php
  2. namespace App\Controller\ModComercio\GestionCarta;
  3. use App\Entity\Catalogos\CategoriaProducto;
  4. use App\Entity\Producto\{PromocionalSlide};
  5. use App\Service\{DocumentsServiceCacheService};
  6. use DateTime;
  7. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  8. use Symfony\Component\Routing\Annotation\Route;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. use Exception;
  11. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  12. use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Component\HttpFoundation\ResponseHeaderBag;
  15. use Symfony\Component\Security\Core\User\UserInterface;
  16. class BannerController extends AbstractController {
  17.   private $em;
  18.   private $msgCreate;
  19.   private $msgUpdate;
  20.   private $msgDelete;
  21.   private $cache;
  22.   public function __construct(EntityManagerInterface $emCacheService $cache) {
  23.     date_default_timezone_set('America/Guayaquil');
  24.     $this->em $em;
  25.     $this->msgCreate "Registro creado exitosamente.";
  26.     $this->msgUpdate "Registro actualizado exitosamente.";
  27.     $this->msgDelete "Registro eliminado exitosamente.";
  28.     $this->cache $cache;
  29.   }
  30.   // * READ FUNCTIONS *
  31.     /**
  32.      * @Route("/getInitialBanner", name="getInitialBanner")
  33.      */
  34.     public function getInitialBanner(Request $request) {
  35.       $this->cache->delete('excelListBanners');
  36.       $list = [];
  37.       $promocionalSlide $this->em->getRepository(PromocionalSlide::class)->findBy([], ['titulo' => 'ASC']);
  38.       if ($promocionalSlide) :
  39.         foreach ($promocionalSlide as $banner) {
  40.           $list $this->setArrayBanner($list$banner);
  41.         }
  42.       endif;
  43.       $this->cache->add('excelListBanners'$list);
  44.       return $this->json(['data' => $list], 200);
  45.     }
  46.     /**
  47.      * @Route("/getFindBanner", name="getFindBanner")
  48.      */
  49.     public function getFindBanner(Request $request) {
  50.       $list = [];
  51.       $id $request->request->get('id');
  52.       $promocionalSlide $this->em->getRepository(PromocionalSlide::class)->find($id);
  53.       $list $this->setArrayBanner($list$promocionalSlide);
  54.       return $this->json($list[0], 200);
  55.     }
  56.     public function setArrayBanner($list$item) {
  57.       array_push($list, [
  58.         'id' => $item->getId(),
  59.         'titulo' => $item->getTitulo(),
  60.         'descripcion' => $item->getDescripcion(),
  61.         'idCategoriaProducto' => $item->getIdCategoriaProducto(),
  62.         'activo' => $item->getActivo(),
  63.         'encabezado' => $item->getEncabezado(),
  64.         'imagen' => $item->getImagen(),
  65.         'fechaInicio' => $item->getFechaInicioString(),
  66.         'fechaFin' => $item->getFechaFinString()
  67.       ]);
  68.       return $list;
  69.     }
  70.   // * CREATE OR UPDATE FUNCTIONS *
  71.     /**
  72.      * @Route("/addBanner", name="addBanner")
  73.      */
  74.     public function addBanner(Request $requestUserInterface $userDocumentsService $documentsService) {
  75.       try {
  76.         $data $request->request->get('banner');
  77.         $id $data['id'] ?? null;
  78.         if (!$id && empty($_FILES['banner']['name']['foto'])) :
  79.           return $this->json(['response' => false'message' => "Lo sentimos, debe ingresar la imagen"]);
  80.         endif;
  81.         $imagen $this->processImage($data$documentsService);
  82.         $promocionalSlide $id $this->em->getRepository(PromocionalSlide::class)->find($id) : new PromocionalSlide();
  83.         $this->setData($data$promocionalSlide$user$imagen);
  84.         $this->em->persist($promocionalSlide);
  85.         $this->em->flush();
  86.         return $this->json(['response' => true'message' => $id $this->msgUpdate $this->msgCreate]);
  87.       } catch (Exception $e) {
  88.         return $this->json(['response' => false'message' => "<b>{$e->getMessage()}</b> error al realizar el registro dentro de la petición <i>addBanner</i>"]);
  89.       }
  90.     }
  91.     private function processImage($dataDocumentsService $documentsService)  {
  92.       $id $data['id'] ?? null;  $imagen '';
  93.       if ($id) :
  94.         $promocionalSlide $this->em->getRepository(PromocionalSlide::class)->find($id);
  95.         if ($promocionalSlide && $promocionalSlide->getImagen() && empty($_FILES['banner']['name']['foto'])) :
  96.           $imagen $promocionalSlide->getImagen();
  97.         endif;
  98.       endif;
  99.       if (empty($imagen)) :
  100.         $foto $documentsService->getEstructureDocument(
  101.           $_FILES['banner']['name']['foto'],
  102.           $_FILES['banner']['size']['foto'],
  103.           $_FILES['banner']['tmp_name']['foto'],
  104.           $_FILES['banner']['type']['foto']
  105.         );
  106.         $imagen $documentsService->setEncodeImg($foto);
  107.       endif;
  108.       return $imagen;
  109.     }
  110.     private function setData($dataPromocionalSlide $promocionalSlideUserInterface $user$imagen) {
  111.       $fechaInicio DateTime::createFromFormat('Y-m-d'$data['fechaInicio']);
  112.       $idCategoriaProducto $this->em->getRepository(CategoriaProducto::class)->find($data['idCategoriaProducto']);
  113.       if ($data['fechaFin'] != "") :
  114.         $fechaFin DateTime::createFromFormat('Y-m-d'$data['fechaFin']);
  115.         $promocionalSlide->setFechaFin($fechaFin);
  116.       endif;
  117.       $promocionalSlide
  118.         ->setTitulo($data['titulo'])
  119.         ->setDescripcion($data['descripcion'])
  120.         ->setActivo(false)
  121.         ->setEncabezado(false)
  122.         ->setImagen($imagen)
  123.         ->setIdCategoriaProducto($idCategoriaProducto)
  124.         ->setFechaInicio($fechaInicio)
  125.       ;
  126.       $this->setGenericData($user$promocionalSlide);
  127.     }
  128.     /**
  129.      * @Route("/setActivarBanner", name="setActivarBanner")
  130.      */
  131.     public function setActivarBanner(Request $requestUserInterface $user) {
  132.       try {
  133.         $idBanner $request->request->get('id');
  134.         $val $request->request->get('val');
  135.         $promocionalSlide $this->em->getRepository(PromocionalSlide::class)->find($idBanner);
  136.         $isActive $val === "true";
  137.         $promocionalSlide->setActivo($isActive);
  138.         $this->setGenericData($user$promocionalSlide);
  139.         $this->em->persist($promocionalSlide);
  140.         $this->em->flush();
  141.         return $this->json(['response' => true'message' => $this->msgUpdate]);
  142.       } catch (Exception $e) {
  143.         return $this->json(['response' => false'message' => "<b>{$e->getMessage()}</b> error al realizar el registro dentro de la petición <i>setActivarBanner</i>"]);
  144.       }
  145.     }
  146.     /**
  147.      * @Route("/setEncabezadoBanner", name="setEncabezadoBanner")
  148.      */
  149.     public function setEncabezadoBanner(Request $requestUserInterface $user) {
  150.       try {
  151.         $idBanner $request->request->get('id');
  152.         $val $request->request->get('val');
  153.         $promocionalSlide $this->em->getRepository(PromocionalSlide::class)->find($idBanner);
  154.         $categoriaProductoId $promocionalSlide->getIdCategoriaProducto()->getId();
  155.         $existingEncabezado $this->em->getRepository(PromocionalSlide::class)->findOneBy(['idCategoriaProducto' => $categoriaProductoId'encabezado' => true'activo' => true,]);
  156.         if ($existingEncabezado && $val === "true") :
  157.           return $this->json(['response' => false'message' => "Lo sentimos, ya existe un registro para el encabezado"]);
  158.         endif;
  159.         $isEncabezado $val === "true";
  160.         $promocionalSlide->setEncabezado($isEncabezado);
  161.         $this->setGenericData($user$promocionalSlide);
  162.         $this->em->persist($promocionalSlide);
  163.         $this->em->flush();
  164.         return $this->json(['response' => true'message' => $this->msgUpdate]);
  165.       } catch (Exception $e) {
  166.         return $this->json(['response' => false'message' => "<b>{$e->getMessage()}</b> error al realizar el registro dentro de la petición <i>setEncabezadoBanner</i>"]);
  167.       }
  168.     }
  169.     private function setGenericData($user null$entity) {
  170.       $entity
  171.         ->setIdUsuarioModificacion($user != null $user->getId() : '1')
  172.         ->setFechaModificacion(new \DateTime())
  173.         ->setIpModificacion($_SERVER['REMOTE_ADDR'])
  174.       ;
  175.       return $entity;
  176.     }
  177.   // * DELETE FUNCTIONS *
  178.     /**
  179.      * @Route("/deleteBanner", name="deleteBanner")
  180.      */
  181.     public function deleteBanner(Request $request) {
  182.       try {
  183.         $id $request->request->get('id');
  184.         $banner $this->em->getRepository(PromocionalSlide::class)->find($id);
  185.         $this->em->remove($banner);
  186.         $this->em->flush();
  187.         return $this->json(['response' => true'message' => $this->msgDelete'exception' => false], 200);
  188.       } catch (Exception $e) {
  189.         return $this->json(['response' => false'message' => "<b>{$e->getMessage()}</b> error al realizar el registro dentro de la petición <i>deleteBanner</i>"'exception' => true]);
  190.       }
  191.     }
  192.   // * EXPORTS *
  193.     /**
  194.      * @Route("/getExcelBanners", name="getExcelBanners")
  195.      */
  196.     public function getExcelBanners(){
  197.       $spreadsheet = new Spreadsheet();
  198.       $sheet $spreadsheet->getActiveSheet();
  199.       $sheet->setTitle("Banners");
  200.       $headers = ['id''titulo''categoria''fecha inicio''fecha fin''descripcion''activo''encabezado'];
  201.       $sheet->fromArray$headersNULL'A1' );
  202.       $lista $this->cache->get('excelListBanners');
  203.       $lista = !$lista ? [] : $lista;
  204.       if(count($lista) != 0):
  205.         $data array_map(function ($menu) {
  206.           return [
  207.             $menu['id'],
  208.             $menu['titulo'],
  209.             $menu['idCategoriaProducto']['nombre'],
  210.             $menu['fechaInicio'],
  211.             $menu['fechaFin'],
  212.             $menu['descripcion'],
  213.             $menu['activo'] ? 'Sí' 'No',
  214.             $menu['encabezado'] ? 'Sí' 'No'
  215.           ];
  216.         }, $lista);
  217.       endif;
  218.       $sheet->fromArray($datanull'A2');
  219.       $writer = new Xlsx($spreadsheet);
  220.       $fileName 'banners.xlsx';
  221.       $temp_file tempnam(sys_get_temp_dir(), $fileName);
  222.       $writer->save($temp_file);
  223.       return $this->file($temp_file$fileNameResponseHeaderBag::DISPOSITION_INLINE);
  224.     }
  225. }