src/Controller/Comun/TareaController.php line 32

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Comun;
  3. use App\Entity\Comun\Tarea;
  4. use App\Form\Comun\TareaType;
  5. use App\Repository\Comun\TareaRepository;
  6. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use Symfony\Component\HttpFoundation\Response;
  9. use Symfony\Component\Routing\Annotation\Route;
  10. use App\Entity\Comun\Proyecto;
  11. use App\Service\AccesoService;
  12. use Symfony\Component\HttpFoundation\RequestStack;
  13. use Symfony\Contracts\Translation\TranslatorInterface;
  14. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  15. use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
  16. use Symfony\Component\HttpFoundation\StreamedResponse;
  17. use App\Service\ExcelTareaService;
  18. #[Route('/comun/tarea')]
  19. class TareaController extends AbstractController {
  20.     private $accesoService;
  21.     private $proyecto;
  22.     public function __construct(AccesoService $accesoService) {
  23.         $this->accesoService $accesoService;
  24.     }
  25.     #[Route('/index/{proyecto}/{id}'name'app_comun_tarea_index'methods: ['GET''POST'])]
  26. public function index(Proyecto $proyectoTareaRepository $tareaRepositoryTarea $id null): Response {
  27.         $tareas $tareaRepository->findBy(['proyecto' => $proyecto->getId(), 'padre' => $id], ['fechaInicio' => 'ASC']);
  28.                 $empleada $this->get('security.token_storage')->getToken()->getUser()->getEmpleada();
  29.         $datos = [];
  30.         foreach ($tareas as $tarea) {
  31.             $datos[$tarea->getId()]['tarea'] = false;
  32.             $datos[$tarea->getId()]['tareaEmpleada'] = false;
  33.             $datos[$tarea->getId()]['eliminar'] = false;
  34.             if (count($tarea->getTareas()) > || count($tarea->getTareaEmpleadas()) == 0) {
  35.                 $datos[$tarea->getId()]['tarea'] = true;
  36.             }
  37.             if (count($tarea->getTareas()) == 0) {
  38.                 $datos[$tarea->getId()]['tareaEmpleada'] = true;
  39.             }
  40.             if (count($tarea->getTareas()) == && count($tarea->getTareaEmpleadas()) == && count($tarea->getAdjuntoTareas()) == && count($tarea->getFichajes())==&& count($tarea->getLlamadas())==&& count($tarea->getEmails())==0) {
  41.                 $datos[$tarea->getId()]['eliminar'] = true;
  42.             }
  43.         }
  44.         return $this->render('comun/tarea/index.html.twig', [
  45.                     'tareas' => $tareas,
  46.                     'datos' => $datos,
  47.                     'acceso' => $this->accesoService->controlAccesosProyecto($proyecto),
  48.         ]);
  49.     }
  50.     #[Route('/nuevo/tarea/{proyecto}/{id}'name'app_comun_tarea_new'methods: ['POST''GET'])]
  51.     public function new(Request $requestProyecto $proyectoTareaRepository $tareaRepositoryTarea $id null): Response {
  52.         $tarea = new Tarea();
  53.         $tarea->setFechaInicio(date_create("now"));
  54.         $tarea->setFechaFin(date_create("now"));
  55.         $form $this->createForm(TareaType::class, $tarea);
  56.         $form->handleRequest($request);
  57.         if ($form->isSubmitted() && $form->isValid()) {
  58.             $tarea->setPadre($id);
  59.             $tarea->setEstado(0);
  60.             $tarea->setProyecto($proyecto);
  61.             $tareaRepository->add($tarea);
  62.             $this->cambiarFechas($tarea);
  63.         }
  64.         return $this->renderForm('comun/tarea/form.html.twig', [
  65.                     'tarea' => $tarea,
  66.                     'form' => $form,
  67.                     'visible' => true
  68.         ]);
  69.     }
  70.     #[Route('/editar/tarea/{id}'name'app_comun_tarea_edit'methods: ['GET''POST'])]
  71.     public function edit(Request $requestTarea $tareaTareaRepository $tareaRepository): Response {
  72.         $form $this->createForm(TareaType::class, $tarea);
  73.         $form->handleRequest($request);
  74.         if ($form->isSubmitted() && $form->isValid()) {
  75.             $tareaRepository->add($tarea);
  76.             $this->cambiarFechas($tarea);
  77.         }
  78.         $fechasvisibles false;
  79.         if (count($tarea->getTareas()) == 0) {
  80.             $fechasvisibles true;
  81.         }
  82.         return $this->renderForm('comun/tarea/form.html.twig', [
  83.                     'tarea' => $tarea,
  84.                     'form' => $form,
  85.                     'visible' => $fechasvisibles
  86.         ]);
  87.     }
  88.     #[Route('/delete/{id}'name'app_comun_tarea_delete'methods: ['GET''POST'])]
  89.     public function delete(Request $requestTarea $tareaTareaRepository $tareaRepository): Response {
  90.         $proyecto $tarea->getProyecto();
  91.         $tareaRepository->remove($tarea);
  92.         return $this->redirect($this->generateUrl('app_comun_proyecto_show', ['id' => $proyecto->getId()]));
  93.     }
  94.     public function cambiarEstado(Tarea $tarea$estado) {
  95.         $em $this->getDoctrine()->getManager();
  96.         $tarea->setEstado($estado);
  97.         $em->persist($tarea);
  98.         $em->flush();
  99.         if (!is_null($tarea->getPadre())) {
  100.             $estado 2;
  101.             foreach ($tarea->getPadre()->getTareas() as $tareaHijo) {
  102.                 if ($estado == 2) {
  103.                     $estado $tareaHijo->getEstado() == $tareaHijo->getEstado();
  104.                 }
  105.             }
  106.             $this->cambiarEstado($tarea->getPadre(), $estado);
  107.         }
  108.     }
  109.     private function cambiarEstadoProyecto(Proyecto $proyecto) {
  110.         $em $this->getDoctrine()->getManager();
  111.         $tareas $proyecto->getTareas();
  112.         $finalizado false;
  113.         foreach ($tareas as $tarea) {
  114.             echo $tarea->getNombre();
  115.             if ($tarea->getEstado() == 1) {
  116.                 $proyecto->setEstado(1);
  117.                 $finalizado false;
  118.                 // break;
  119.             }
  120.             if ($tarea->getEstado() == 2) {
  121.                 $finalizado true;
  122.             } else {
  123.                 $finalizado false;
  124.                 break;
  125.             }
  126.         }
  127.         if ($finalizado) {
  128.             $proyecto->setEstado(2);
  129.         }
  130.         $em->persist($proyecto);
  131.         $em->flush();
  132.     }
  133.     #[Route('/tareas/kanban'name'app_comun_tarea_kanban'methods: ['GET''POST'])]
  134.     public function tareasKanban(): Response {
  135.         return $this->render('comun/tarea/kanban/kanbanTareas.html.twig', [
  136.         ]);
  137.     }
  138.     #[Route('/cargar/tarea/{estado}'name'app_comun_tarea_cargar'methods: ['GET''POST'])]
  139.     public function cargarTareasKanban(RequestStack $rsTareaRepository $tareaRepository$estado): Response {
  140.         $empleada $this->get('security.token_storage')->getToken()->getUser()->getEmpleada();
  141.         $session $rs->getSession();
  142.         $filtro unserialize($session->get('filtro.tarea'));
  143.         if (!$filtro) {
  144.             $tareas $tareaRepository->tareaPorEmpleada($empleada$estado);
  145.         } else {
  146.             $tareas $tareaRepository->findByFiltro($filtro$estado);
  147.         }
  148.         return $this->render('comun/tarea/kanban/tarea.html.twig', [
  149.                     'tareas' => $tareas,
  150.         ]);
  151.     }
  152.     #[Route('/tareas/cambiarestado/{tarea}/{estado}'name'app_comun_tarea_cambiarestado'methods: ['GET''POST'])]
  153.     public function cambiarEstadoTarea(TranslatorInterface $translatorTareaRepository $tareaRepository$tarea null$estado null): Response {
  154.         $tareao $tareaRepository->find($tarea);
  155.         $this->cambiarEstado($tareao$estado);
  156.         $this->cambiarEstadoProyecto($tareao->getProyecto());
  157.         return new Response();
  158.     }
  159.     #[Route('/tareas/cambiar/estado/{tarea}'name'app_comun_tarea_cambiar_estado'methods: ['GET''POST'])]
  160.     public function cambiarEstadoForm(Request $requestTareaRepository $tareaRepositoryTarea $tarea): Response {
  161.         $form $this->createForm(\App\Form\Comun\TareaCambiarEstadoType::class, $tarea);
  162.         $form->handleRequest($request);
  163.         if ($form->isSubmitted() && $form->isValid()) {
  164.             $this->cambiarEstado($tarea$tarea->getEstado());
  165.             $this->cambiarEstadoProyecto($tarea->getProyecto());
  166.         }
  167.         return $this->renderForm('comun/tarea/cambiarEstado.html.twig', [
  168.                     'tarea' => $tarea,
  169.                     'form' => $form,
  170.         ]);
  171.     }
  172.     #[Route('/tareas/excel/{proyecto}'name'app_comun_tarea_exportar_excel'methods: ['GET''POST'])]
  173.     public function exportarExcel(ExcelTareaService $etsProyecto $proyecto): Response {
  174.         $spreadsheet = new Spreadsheet();
  175.         $ets->printExcel($proyecto$spreadsheet);
  176.         $writer = new Xlsx($spreadsheet);
  177.         $response = new StreamedResponse(
  178.                 function () use ($writer) {
  179.                     $writer->save('php://output');
  180.                 }
  181.         );
  182.         $response->headers->set('Content-Type''application/vnd.ms-excel');
  183.         $response->headers->set('Content-Disposition''attachment;filename="Tareas-' $proyecto->getNombre() . '.xlsx"');
  184.         $response->headers->set('Cache-Control''max-age=0');
  185.         return $response;
  186.     }
  187.     public function fechasHijas(Tarea $tarea) {
  188.         $em $this->getDoctrine()->getManager();
  189.         $tareaRepository $em->getRepository("App:Comun\Tarea");
  190.         $fechaInicio $tareaRepository->findOneBy(['padre' => $tarea->getId()], ['fechaInicio' => 'ASC']);
  191.         $fechaFin $tareaRepository->findOneBy(['padre' => $tarea->getId()], ['fechaFin' => 'DESC']);
  192.         $datos = [];
  193.         $datos['inicio'] = $fechaInicio->getFechaInicio();
  194.         $datos['fin'] = $fechaFin->getFechaFin();
  195.         return $datos;
  196.     }
  197.     public function cambiarFechas(Tarea $tarea) {
  198.         $em $this->getDoctrine()->getManager();
  199.         if (!is_null($tarea->getPadre())) {
  200.             $padre $tarea->getPadre();
  201.             $fechas $this->fechasHijas($padre);
  202.             $padre->setFechaInicio($fechas['inicio']);
  203.             $padre->setFechaFin($fechas['fin']);
  204.             $em->persist($padre);
  205.             $em->flush();
  206.             $this->cambiarFechas($padre);
  207.         }
  208.     }
  209. }