src/Controller/Karaoke/AdminController.php line 108

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Karaoke;
  3. use App\Controller\Documents\DocumentsController;
  4. use App\Controller\InformacionGeneralController;
  5. use App\Controller\Seguridades\PermisosPaginasController;
  6. use App\Entity\Karaoke\{CancionesCuentaParametrosKaraokeFavoritoCancionesListaCancionesMisCanciones};
  7. use App\Entity\Comercio\Cuenta;
  8. use App\Entity\Persona\CargoRolPersona;
  9. use App\Entity\Seguridades\GrupoCargo;
  10. use App\Form\Karaoke\{ParametersTypeSongBookType};
  11. use App\Repository\Seguridades\PermisosGrupoRepository;
  12. use App\Repository\Seguridades\PermisosUsuarioRepository;
  13. use App\Service\{AdminServiceCacheService};
  14. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  15. use Symfony\Component\Routing\Annotation\Route;
  16. use Symfony\Component\Security\Core\User\UserInterface;
  17. use Doctrine\ORM\EntityManagerInterface;
  18. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  19. use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
  20. use Symfony\Component\HttpFoundation\Request;
  21. use Symfony\Component\HttpFoundation\ResponseHeaderBag;
  22. class AdminController extends AbstractController {
  23.   private $em;
  24.   private $adminSer;
  25.   private $permisosGrupoRepository;
  26.   private $permisosUsuarioRepository;
  27.   public function __construct(EntityManagerInterface $emAdminService $adminSerPermisosGrupoRepository $permisosGrupoRepositoryPermisosUsuarioRepository $permisosUsuarioRepository) {
  28.     date_default_timezone_set('America/Guayaquil');
  29.     $this->em $em;
  30.     $this->adminSer $adminSer;
  31.     $this->permisosGrupoRepository $permisosGrupoRepository;
  32.     $this->permisosUsuarioRepository $permisosUsuarioRepository;
  33.   }
  34.   /**
  35.    * @Route("/karaokeAdministration", name="karaokeAdministration")
  36.    */
  37.   public function administration(AdminService $adminServiceUserInterface $user) {
  38.     $informacionGeneral = new InformacionGeneralController($this->em);
  39.     $sideBar $this->sidebarPaginas($user);
  40.     $permissions $this->getPermissionsKaraokeAdministration($sideBar);
  41.     $formParameters $this->createForm(ParametersType::class, new ParametrosKaraoke);
  42.     $formSongBook $this->createForm(SongBookType::class, new ListaCanciones);
  43.     if ($permissions == null) :
  44.       return $this->redirectToRoute('paginaRestringida');
  45.     endif;
  46.     return $this->render('Karaoke/administration/index.html.twig', [
  47.       'informacionGeneral' => $informacionGeneral->getData(),
  48.       'permisos' => $permissions,
  49.       'sidebarMenu' => $sideBar[0],
  50.       'topbarMenu' => null,
  51.       'parametersForm' => $formParameters->createView(),
  52.       'songBookForm' => $formSongBook->createView(),
  53.       'permisos' => $permissions,
  54.       'parameters' => $permissions[0]['see'],
  55.       'songBook' => $permissions[1]['see'],
  56.       'request' => $permissions[2]['see']
  57.     ]);
  58.   }
  59.   private function getPermissionsKaraokeAdministration($sidebar) {
  60.     $permissions $this->adminSer->getPermissionsSec('karaokeAdministration'$sidebar[3], $sidebar[4]);
  61.     if ($permissions) :
  62.       $sections = [
  63.         'Parámetros Gestión' => false,
  64.         'Cancionero' => false,
  65.         'Solicitudes' => false
  66.       ];
  67.       foreach ($permissions as $per) {
  68.         if (array_key_exists($per['section'], $sections)) :
  69.           $sections[$per['section']] = $per;
  70.         endif;
  71.       }
  72.       return array_values($sections);
  73.     endif;
  74.     return null;
  75.   }
  76.   private function sidebarPaginas ($user) {
  77.     $cargoRolPersona $this->em->getRepository(CargoRolPersona::class)->findOneBy(['idPersona' => $user->getIdPersona()->getId()]);
  78.     $grupoCg $this->em->getRepository(GrupoCargo::class)->findOneBy(['idCargosRol' => $cargoRolPersona->getIdCargosRol()->getId()]);
  79.     $idUsuario $user->getId();
  80.     $idGrupo $grupoCg->getIdGrupo()->getId();
  81.     $permisosGrupo $this->permisosGrupoRepository->findPermisosGrupo($idGrupo);
  82.     $permisosUsuario $this->permisosUsuarioRepository->findPermisosGrupo($idUsuario);
  83.     if ($cargoRolPersona->getIdCargosRol()->getId() == 3) :
  84.       $sideBar null;
  85.     else:
  86.       $listPermisos = new PermisosPaginasController();
  87.       $sideBar $listPermisos->getPermissionsPages($this->adminSer$this->em$idUsuario$idGrupo$permisosGrupo$permisosUsuario);
  88.     endif;
  89.     return [$sideBar$idUsuario$idGrupo$permisosGrupo$permisosUsuario ,$cargoRolPersona];
  90.   }
  91.   /**
  92.    * @Route("/cancionero", name="cancionero")
  93.    */
  94.   public function cancionero()
  95.   {
  96.     return $this->render('Karaoke/cliente/index.html.twig');
  97.   }
  98.   /**
  99.    * @Route("/cancionesCancionero", name="cancionesCancionero")
  100.    */
  101.   public function cancionesCancionero(Request $request)
  102.   {
  103.     $list = [];
  104.     $listaCanciones $this->em->getRepository(ListaCanciones::class)->findAll();
  105.     foreach ($listaCanciones as $cancion) {
  106.       array_push($list, [
  107.         'id' => $cancion->getId(),
  108.         'codigo' => $cancion->getCodigo(),
  109.         'nombreCancion' => $cancion->getNombreCancion(),
  110.         'genero' => $cancion->getIdGenero()->getNombre(),
  111.         'autor' => $cancion->getIdAutor()->getNombre()
  112.       ]);
  113.     }
  114.     return $this->json($list200);
  115.   }
  116.   
  117.   /**
  118.    * @Route("/karaoke", name="karaoke")
  119.    */
  120.   public function karaoke(AdminService $adminServiceUserInterface $userCacheService $cacheService)
  121.   {
  122.     //$cacheService->delete('karaokeListMiCuenta');
  123.     $cacheService->delete('karaokeListMiCuenta');
  124.     $cacheService->delete('karaokeListSolicitadas');
  125.     $cacheService->delete('karaokeListMisCanciones');
  126.     $cacheService->delete('karaokeListTop');
  127.     $informacionGeneralController = new InformacionGeneralController($this->em);
  128.     $permissions =  $adminService->getPermissionsSec($user$this->em'karaoke');
  129.     $permissions =  $this->getPermissionsKaraoke($user$adminService$this->em);
  130.     return $this->render('Karaoke/songList/index.html.twig', [
  131.       'informacionGeneral' => $informacionGeneralController->getData(),
  132.       'permisos' => $permissions,
  133.       'karaoke' => $permissions[0]['see'],
  134.     ]);
  135.   }
  136.   private function getPermissionsKaraoke(UserInterface $userAdminService $adminSerEntityManagerInterface $em)
  137.   {
  138.     $permissions =  $adminSer->getPermissionsSec($user$em'karaoke');
  139.     if (count($permissions) == 0): return $this->redirectToRoute('paginaRestringida');
  140.     endif;
  141.     $parameters = ['see' => false'read' => false'edit' => false];
  142.     foreach ($permissions as $per) {
  143.       switch ($per['section']) {
  144.         case 'Karaoke':
  145.           $parameters $per;
  146.           break;
  147.       }
  148.     }
  149.     return [$parameters];
  150.   }
  151.   /**
  152.    * @Route("/getKaraokeList", name="getKaraokeList")
  153.    */
  154.   public function getKaraokeList(CacheService $cache)
  155.   {
  156.     $karaokeList $cache->get('karaokeList');
  157.     if (!$karaokeList) {
  158.       $list $this->getListAll();
  159.       $list $this->setArrayListKaraoke($list);
  160.       $cache->add('karaokeList'$list);
  161.     }
  162.     return $this->json($list);
  163.   }
  164.   /**
  165.    * @Route("/getKaraokeListMiCuenta", name="generaGetKaraokeListMiCuenta")
  166.    */
  167.   public function generaGetKaraokeListMiCuenta(CacheService $cacheUserInterface $user)
  168.   {
  169.     $karaokeList $cache->get('karaokeListMiCuenta');
  170.     if (!$karaokeList) {
  171.       $cuenta $this->em->getRepository(Cuenta::class)->findOneBy(['idUsuario' => $user->getId(), 'activa' => true]);
  172.       $allList $this->getListAll();
  173.       $lista = [];
  174.       $cancionesCuenta false;
  175.       if ($cuenta) {
  176.         $cancionesCuenta $this->em->getRepository(CancionesCuenta::class)->findBy(['idCuenta' => $cuenta->getId()]);
  177.       }
  178.       foreach ($allList as $song) {
  179.         $solicitada false;
  180.         $favorito $this->em->getRepository(FavoritoCanciones::class)->findOneBy(['idListaCanciones' => $song->getId()]);
  181.         $existMisCanciones $this->em->getRepository(MisCanciones::class)->findOneBy(['idListaCanciones' => $song->getId()]);
  182.         if ($cancionesCuenta) {
  183.           foreach ($cancionesCuenta as $cancion) {
  184.             if ($cancion->getIdListaCanciones()->getId() == $song->getId()) {
  185.               $solicitada true;
  186.               break;
  187.             }
  188.           }
  189.         }
  190.         $lista $this->setArrayAllList($song$lista$solicitada$favorito->getCalificacion(), $existMisCanciones true false);
  191.       }
  192.       $cache->add('karaokeListMiCuenta'$lista);
  193.       $karaokeList $lista;
  194.     }
  195.     return $this->json($karaokeList);
  196.   }
  197.   /**
  198.    * @Route("/getKaraokeListSolicitadas", name="getKaraokeListSolicitadas")
  199.    */
  200.   public function getKaraokeListSolicitadas(CacheService $cacheUserInterface $user)
  201.   {
  202.     $karaokeList $cache->get('karaokeListSolicitadas');
  203.     if (!$karaokeList) {
  204.       $lista = [];
  205.       $cuenta $this->em->getRepository(Cuenta::class)->findOneBy(['idUsuario' => $user->getId(), 'activa' => true]);
  206.       if (!$cuenta) {
  207.         return $this->json([]);
  208.       }
  209.       $cancionesCuenta $this->em->getRepository(CancionesCuenta::class)->findBy(['idCuenta' => $cuenta->getId()]);
  210.       if (!$cancionesCuenta) {
  211.         return $this->json([]);
  212.       }
  213.       foreach ($cancionesCuenta as $cancion) {
  214.         $song $cancion->getIdListaCanciones();
  215.         $favorito $this->em->getRepository(FavoritoCanciones::class)->findOneBy(['idListaCanciones' => $song->getId()]);
  216.         $existMisCanciones $this->em->getRepository(MisCanciones::class)->findOneBy(['idListaCanciones' => $song->getId()]);
  217.         $lista $this->setArrayAllList($song$listatrue$favorito->getCalificacion(), $existMisCanciones true false);
  218.       }
  219.       $cache->add('karaokeListSolicitadas'$lista);
  220.       $karaokeList $lista;
  221.     }
  222.     return $this->json($karaokeList);
  223.   }
  224.   /**
  225.    * @Route("/getKaraokeListMisCanciones", name="getKaraokeListMisCanciones")
  226.    */
  227.   public function getKaraokeListMisCanciones(CacheService $cacheUserInterface $user)
  228.   {
  229.     $karaokeList $cache->get('karaokeListMisCanciones');
  230.     if (!$karaokeList) {
  231.       $cancionesCuenta false;
  232.       $cuenta $this->em->getRepository(Cuenta::class)->findOneBy(['idUsuario' => $user->getId(), 'activa' => true]);
  233.       if ($cuenta) {
  234.         $cancionesCuenta $this->em->getRepository(CancionesCuenta::class)->findBy(['idCuenta' => $cuenta->getId()]);
  235.       }
  236.       $lista = [];
  237.       $misCanciones $this->em->getRepository(MisCanciones::class)->findBy(['idUsuario' => $user->getId()]);
  238.       foreach ($misCanciones as $cancion) {
  239.         $solicitada false;
  240.         $song $cancion->getIdListaCanciones();
  241.         if ($cancionesCuenta) {
  242.           foreach ($cancionesCuenta as $cancion) {
  243.             if ($cancion->getIdListaCanciones()->getId() == $song->getId()) {
  244.               $solicitada true;
  245.               break;
  246.             }
  247.           }
  248.         }
  249.         $favorito $this->em->getRepository(FavoritoCanciones::class)->findOneBy(['idListaCanciones' => $song->getId()]);
  250.         $lista $this->setArrayAllList($song$lista$solicitada$favorito->getCalificacion(), true);
  251.       }
  252.       $cache->add('karaokeListMisCanciones'$lista);
  253.       $karaokeList $lista;
  254.     }
  255.     return $this->json($karaokeList);
  256.   }
  257.   /**
  258.    * @Route("/getKaraokeListTop", name="getKaraokeListTop")
  259.    */
  260.   public function getKaraokeListTop(CacheService $cacheUserInterface $user)
  261.   {
  262.     $karaokeList $cache->get('karaokeListTop');
  263.     if (!$karaokeList) {
  264.       $cancionesCuenta false;
  265.       $cuenta $this->em->getRepository(Cuenta::class)->findOneBy(['idUsuario' => $user->getId(), 'activa' => true]);
  266.       if ($cuenta) {
  267.         $cancionesCuenta $this->em->getRepository(CancionesCuenta::class)->findBy(['idCuenta' => $cuenta->getId()]);
  268.       }
  269.       $parametros $this->em->getRepository(ParametrosKaraoke::class)->findOneBy([], []);
  270.       $top $parametros->getTop();
  271.       $contador 0;
  272.       $lista = [];
  273.       $allList $this->getListAll();
  274.       foreach ($allList as $song) {
  275.         if ($contador == $top) {
  276.           break;
  277.         }
  278.         $solicitada false;
  279.         if ($cancionesCuenta) {
  280.           foreach ($cancionesCuenta as $cancion) {
  281.             if ($cancion->getIdListaCanciones()->getId() == $song->getId()) {
  282.               $solicitada true;
  283.               break;
  284.             }
  285.           }
  286.         }
  287.         $favorito $this->em->getRepository(FavoritoCanciones::class)->findOneBy(['idListaCanciones' => $song->getId()]);
  288.         if ($favorito->getCalificacion() == 5) {
  289.           $existMisCanciones $this->em->getRepository(MisCanciones::class)->findOneBy(['idListaCanciones' => $song->getId()]);
  290.           $lista $this->setArrayAllList($song$lista$solicitada5$existMisCanciones true false);
  291.           $contador++;
  292.         }
  293.       }
  294.       $cache->add('karaokeListTop'$lista);
  295.       $karaokeList $lista;
  296.     }
  297.     return $this->json($karaokeList);
  298.   }
  299.   private function setArrayListKaraoke($lista)
  300.   {
  301.     $listaFinal = [];
  302.     foreach ($lista as $song) {
  303.       $listaFinal[] = [
  304.         'id' => $song->getId(),
  305.         'codigo' => $song->getCodigo(),
  306.         'nombreCancion' => $song->getNombreCancion(),
  307.         'nombreAutor' => $song->getIdAutor()->getNombre(),
  308.         'nombreGenero' => $song->getIdGenero()->getNombre(),
  309.       ];
  310.     }
  311.     return $listaFinal;
  312.   }
  313.   private function setArrayAllList($song$list$solicitada$calificacion$favorito false)
  314.   {
  315.     $list[] = [
  316.       'id' => $song->getId(),
  317.       'codigo' => $song->getCodigo(),
  318.       'nombreCancion' => $song->getNombreCancion(),
  319.       'nombreAutor' => $song->getIdAutor()->getNombre(),
  320.       'nombreGenero' => $song->getIdGenero()->getNombre(),
  321.       'solicitada' => $solicitada,
  322.       'calificacion' => $calificacion,
  323.       'favorito' => $favorito,
  324.     ];
  325.     return $list;
  326.   }
  327.   /**
  328.    * @Route("/getExcelKaraoke", name="getExcelKaraoke")
  329.    */
  330.   public function getExcelKaraoke(EntityManagerInterface $em)
  331.   {
  332.     $spreadsheet = new Spreadsheet();
  333.     $sheet $spreadsheet->getActiveSheet();
  334.     $sheet->setTitle("Tabla de Banners");
  335.     $arrayTitle = ['Título''Descripción''Fecha Inicio''Fecha Fin''Activo'];
  336.     $spreadsheet->getActiveSheet()->fromArray($arrayTitleNULL'A2');
  337.     $lista $this->getListAll();
  338.     if (count($lista) != 0):
  339.       $a 3;
  340.       foreach ($lista as $item) {
  341.         $sheet->setCellValue("A$a"$item->getTitulo());
  342.         $sheet->setCellValue("B$a"$item->getDescripcion());
  343.         $sheet->setCellValue("C$a"$item->getFechaInicioString());
  344.         $sheet->setCellValue("D$a"$item->getFechaFinString());
  345.         $sheet->setCellValue("E$a", ($item->getActivo()) ? 'Activo' 'Inactivo');
  346.         $a++;
  347.       }
  348.     else:
  349.       $sheet->setCellValue("A3"'No hay datos para Mostrar');
  350.     endif;
  351.     $writer = new Xlsx($spreadsheet);
  352.     // In this case, we want to write the file in the public directory
  353.     $publicDirectory $this->getParameter('docs_directory');
  354.     $fileName 'bannersList.xlsx';
  355.     $temp_file tempnam(sys_get_temp_dir(), $fileName);
  356.     $writer->save($temp_file);
  357.     return $this->file($temp_file$fileNameResponseHeaderBag::DISPOSITION_INLINE);
  358.   }
  359.   /**
  360.    * @Route("/getPdfKaraoke", name="getPdfKaraoke")
  361.    */
  362.   public function getPdfKaraoke(UserInterface $user)
  363.   {
  364.     // $informacionGeneral = new InformacionGeneralController($this->em);
  365.     $documents = new DocumentsController();
  366.     $lista $this->getListAll();
  367.     date_default_timezone_set('America/Guayaquil');
  368.     $fecha date('Y-m-d');
  369.     $hora date('h:i:s');
  370.     /* $info = $informacionGeneral->getData($user); $info = $info[0];
  371.       $logo = $documents->getLogo($info['logoUrl']); */
  372.     $html $this->renderView('Administration/pdf/banners.html.twig', [
  373.       'title' => 'PDF',
  374.       'lista' => $lista,
  375.       'logo' => '',
  376.       'nombreInstitucion' => '',
  377.       'siglas' => '',
  378.       'codigoIes' => '',
  379.       /* 'logo' => $logo, 'nombreInstitucion'=> $info['nombreInstitucion'], 
  380.           'siglas' => $info['siglas'], 'codigoIes'=> $info['codigoIes'],  */
  381.       'fecha' => $fecha,
  382.       'hora' => $hora,
  383.       'enable_remote' => true
  384.     ]);
  385.     $documents->getPdfDocument($lista'Modulos'$html);
  386.   }
  387.   private function getListAll()
  388.   {
  389.     $listAll $this->em->getRepository(ListaCanciones::class)->findBy([], ['nombreCancion' => 'ASC']);
  390.     return $listAll;
  391.   }
  392. }