src/Controller/DefaultController.php line 33

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\HttpFoundation\Response;
  5. use Symfony\Component\HttpFoundation\Request;
  6. use Symfony\Component\Routing\Annotation\Route;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  9. use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
  10. use Symfony\Component\Form\Extension\Core\Type\FileType;
  11. use Symfony\Component\Validator\Constraints\File;
  12. class DefaultController extends AbstractController {
  13.     private $em;
  14.     private $month = ['Enero' => 1'Febrero' => 2'Marzo' => 3'Abril' => 4'Mayo' => 5'Junio' => 6'Julio' => 7'Agosto' => 8,
  15.         'Septiembre' => 8'Octubre' => 10'Noviembre' => 11'Diciembre' => 12];
  16.     private $year = [];
  17.     public function __construct(EntityManagerInterface $entityManager) {
  18.         $this->em $entityManager;
  19.         $this->year[date('Y')] = date('Y');
  20.         for ($i 1$i 5$i++) {
  21.             $numberYear = (int) date('Y') - $i;
  22.             $this->year[$numberYear] = $numberYear;
  23.         }
  24.     }
  25.    
  26.     #[Route('/homepage'name'app_homepage')]
  27.     public function index(Request $request): Response {
  28.         $session $request->getSession();
  29.         $session->set('mainbreadcrumb'null);
  30.         return $this->render('default/homepage.html.twig', [
  31.                     'controller_name' => 'DefaultController',
  32.         ]);
  33.     }
  34. //    #[Route('/manage_breadcrumb', name: 'app_homepage_managebreadcrumb')]
  35. //    public function managebreadcrumb(Request $request): Response {
  36. //
  37. //        $session = $request->getSession();
  38. //        $crumb = $session->get('mainbreadcrumb') == null ? [['intranet' => $this->generateUrl('app_homepage')]] : json_decode($session->get('mainbreadcrumb'), true);
  39. //        if ($request->getMethod() == "POST") {
  40. //            $agregar = true;
  41. //
  42. //            foreach ($crumb as $key => &$value) {
  43. //                if ($agregar == false) {
  44. //                    unset($crumb[$key]);
  45. //                }
  46. //                if (isset($value[$request->request->get('key')])) {
  47. //                    $value[$request->request->get('key')] = $request->request->get('value');
  48. //                    $agregar = false;
  49. //                }
  50. //            }
  51. //
  52. //            $crumb = array_values($crumb);
  53. //
  54. //            if ($agregar) {
  55. //                $lenght = 5;
  56. //                if (count($crumb) > $lenght) {
  57. //                    unset($crumb[1]);
  58. //                    $crumb = array_values($crumb);
  59. //                }
  60. //                $crumb[] = [$request->request->get('key') => $request->request->get('value')];
  61. //            }
  62. //
  63. //
  64. //
  65. //            $session->set('mainbreadcrumb', json_encode($crumb));
  66. //        }
  67. //        return new Response(json_encode($crumb));
  68. //        //[{intranet: '{{ path('app_homepage') }}'}];
  69. //    }
  70.     #[Route('/pruebas2'name'app_homepage_test')]
  71.     public function homepagetest(\Doctrine\ORM\EntityManagerInterface $em\App\Services\MailerCore $mailerCore): Response {
  72.         $entity $this->em->getRepository(\App\Entity\GHContratacion::class)->find(10);
  73.         $usuario $this->em->getRepository(\App\Entity\SecUser::class)->findOneBy(['username' => '1234567890']);
  74.         if ($usuario) {
  75.             $mailerCore->notificarUsuario('updateInfo', [$usuario]);
  76.         }
  77.         //$mailerCore->notificarContratacion('notificar', [$entity]);
  78.         //$mailerCore->notificarUsuario('updateInfo', [$this->getUser()]);
  79.         return $this->render('default/formexample.html.twig', [
  80.                     'controller_name' => 'DefaultController',
  81.         ]);
  82.     }
  83.     #[Route('/jur/dashboard'name'jur_dashboard')]
  84.     public function dashboardJuridico(\Doctrine\ORM\EntityManagerInterface $em\App\Services\MailerCore $mailerCore): Response {
  85. //        $entity = $this->em->getRepository(\App\Entity\GHContratacion::class)->find(10);
  86. //        $usuario = $this->em->getRepository(\App\Entity\SecUser::class)->findOneBy(['username' => '1234567890']);
  87. //        if ($usuario) {
  88. //            $mailerCore->notificarUsuario('updateInfo', [$usuario]);
  89. //        }
  90.         //$mailerCore->notificarContratacion('notificar', [$entity]);
  91.         //$mailerCore->notificarUsuario('updateInfo', [$this->getUser()]);
  92.         $entities $em->getRepository(\App\Entity\JurNorma::class)->getDashboard(5);
  93.         $tipoNorma array_filter(array_unique(array_column($entities'tipo_norma''id_tipo_norma')));
  94.         $procesos $em->getRepository(\App\Entity\ParProceso::class)->getAll();
  95.         $campoAplicacion $em->getRepository(\App\Entity\ParCampo::class)->findAll();
  96.         return $this->render('default/dashboardJuridico.html.twig', [
  97.                     'controller_name' => 'DefaultController',
  98.                     'entities' => $entities,
  99.                     'tipoNorma' => $tipoNorma,
  100.                     'campoAplicacion' => $campoAplicacion,
  101.                     'procesos' => $procesos,
  102.         ]);
  103.     }
  104.     private function generateExcelAction($archivo$datos) {
  105.         // ask the service for a excel object
  106.         $phpExcelObject = new Spreadsheet();
  107.         $fecha = new \DateTime('now');
  108.         $modificado = isset($archivo['modificado']) ? $archivo['modificado'] : "LOOGIC";
  109.         $titulo = isset($archivo['titulo']) ? $archivo['titulo'] : "INFORME_POR_LOOGIC";
  110.         $asunto = isset($archivo['asunto']) ? $archivo['asunto'] : "INFORME_LOOGIC";
  111.         $descripcion = isset($archivo['descripcion']) ? $archivo['descripcion'] : "INFORME GENERADO POR LOOGIC";
  112.         $keyWords = isset($archivo['keyWords']) ? $archivo['keyWords'] : "INFORME LOOGIC";
  113.         $categoria = isset($archivo['categoria']) ? $archivo['categoria'] : "LOOGIC";
  114.         $nombreArchivo = isset($archivo['nombreArchivo']) ? $archivo['nombreArchivo'] . {$fecha->format('Y-m-d His')}"INFORME_LOOGIC {$fecha->format('Y-m-d His')}";
  115.         $phpExcelObject->getProperties()->setCreator("LOOGIC COLOMBIA")
  116.                 ->setLastModifiedBy($modificado)
  117.                 ->setTitle($titulo)
  118.                 ->setSubject($asunto)
  119.                 ->setDescription($descripcion)
  120.                 ->setKeywords($keyWords)
  121.                 ->setCategory($categoria);
  122.         $hoja 0;
  123.         $styleEncabezado = array(
  124.             'font' => array(
  125.                 'bold' => true,
  126.                 //'color' => array('rgb' => 'FF0000'),
  127.                 'size' => 10,
  128.                 'name' => 'Verdana'
  129.         ));
  130.         $buffer 0;
  131.         foreach ($datos as $sheetName => $array) {
  132.             $col 'A';
  133.             $iteracion 2;
  134.             $cambio false;
  135.             $phpExcelObject->createSheet($hoja);
  136.             if (isset($archivo['nombreArchivo']) && $archivo['nombreArchivo'] == 'Matriz de Requisitos Legales') {
  137.                 $phpExcelObject->setActiveSheetIndex($hoja)->setCellValue("A1"mb_strtoupper("Matriz General de Requisitos Legales y Otros Requisitos (GER-FR-077)"'utf-8'));
  138.             }
  139.             foreach ($array as $arr => $val) {
  140.                 foreach ($val as $key => $result) {
  141.                     if ($iteracion == 2) {
  142.                         $phpExcelObject->setActiveSheetIndex($hoja)->setCellValue($col $iteracionmb_strtoupper($key'utf-8'));
  143.                         $phpExcelObject->getActiveSheet()->getStyle($col $iteracion)->applyFromArray($styleEncabezado);
  144.                         $phpExcelObject->getActiveSheet()->getColumnDimension($col)->setAutoSize(true);
  145.                         $phpExcelObject->setActiveSheetIndex($hoja)->setCellValue($col . ($iteracion 1), $result);
  146.                     } else if ($buffer !== count($val)) {
  147.                         //$iteracion = $iteracion + 2;
  148.                         $phpExcelObject->setActiveSheetIndex($hoja)->setCellValue($col . ($iteracion 2), mb_strtoupper($key'utf-8'));
  149.                         $phpExcelObject->getActiveSheet()->getStyle($col . ($iteracion 2))->applyFromArray($styleEncabezado);
  150.                         $phpExcelObject->setActiveSheetIndex($hoja)->setCellValue($col . ($iteracion 3), $result);
  151.                         $cambio true;
  152.                     } else {
  153.                         $phpExcelObject->setActiveSheetIndex($hoja)->setCellValue($col . ($iteracion 1), $result);
  154.                     }
  155.                     $col++;
  156.                 }
  157.                 $buffer count($val);
  158.                 if ($cambio === true) {
  159.                     $iteracion $iteracion 3//aumento proporcional de acuerdo a el ultimo valor del encabezado.
  160.                     $cambio false;
  161.                 } else {
  162.                     $iteracion++;
  163.                 }
  164.                 $col 'A';
  165.             }
  166.             $phpExcelObject->getActiveSheet()->setTitle($sheetName);
  167.             $hoja++;
  168.         }
  169.         // Set active sheet index to the first sheet, so Excel opens this as the first sheet
  170.         $phpExcelObject->setActiveSheetIndex(0);
  171.         // create the writer
  172.         $writer = new Xlsx($phpExcelObject);
  173.         ob_start();
  174.         // create the response
  175.         $writer->save('php://output');
  176.         $excelOutput ob_get_clean();
  177.         return new Response(
  178.                 $excelOutput,
  179.                 200,
  180.                 [
  181.             'content-type' => 'text/x-csv; charset=windows-1251',
  182.             'Content-Disposition' => 'attachment; filename="' $nombreArchivo '.xlsx"'
  183.                 ]
  184.         );
  185.         //return $response;
  186.     }
  187.     #[Route('/jur/reportes/procesos_legales'name'jur_reporte_procesos_legales')]
  188.     public function reporteProcesoLegales(Request $request\Doctrine\ORM\EntityManagerInterface $em\App\Services\MailerCore $mailerCore): Response {
  189.         $defaultData = ['message' => 'Procesos Legales'];
  190.         $form $this->createFormBuilder($defaultData)
  191.                 ->add('empresa'\Symfony\Bridge\Doctrine\Form\Type\EntityType::class, ['required' => false'placeholder' => 'selecciones una opcion''class' => \App\Entity\TerEmpresa::class, 'query_builder' => function (\Doctrine\ORM\EntityRepository $er) {
  192.                         return $er->createQueryBuilder('e')
  193.                                 ->orderBy('e.nombre''ASC');
  194.                     }, 'label' => 'Empresa',
  195.                     'attr' => ['class' => 'form-control''placeholder' => 'Seleccione una Opción.']
  196.                 ])
  197.                 ->add('tipificacion'\Symfony\Bridge\Doctrine\Form\Type\EntityType::class, ['required' => false'placeholder' => 'selecciones una opcion''class' => \App\Entity\ParTipificacionJuridica::class, 'query_builder' => function (\Doctrine\ORM\EntityRepository $er) {
  198.                         return $er->createQueryBuilder('p')
  199.                                 ->orderBy('p.nombre''ASC');
  200.                     }, 'label' => 'Tipificación',
  201.                     'attr' => ['class' => 'form-control''placeholder' => 'Seleccione una Opción.']
  202.                 ])
  203.                 ->add('month'\Symfony\Component\Form\Extension\Core\Type\ChoiceType::class, ['label' => 'Mes''required' => false'choices' => $this->month'placeholder' => 'Seleccione una opción'])
  204.                 ->add('year'\Symfony\Component\Form\Extension\Core\Type\ChoiceType::class, ['label' => 'Año''required' => false'choices' => $this->year'placeholder' => 'Seleccione una opción'])
  205.                 ->add('consultar'\Symfony\Component\Form\Extension\Core\Type\SubmitType::class, ['attr' => ['class' => 'btn btn-primary-light btn-border-end'], 'label_html' => true'label' => '<i class="fa fa-search"></i> Consultar'])
  206.                 ->add('descargar'\Symfony\Component\Form\Extension\Core\Type\SubmitType::class, ['attr' => ['class' => 'btn btn-secondary-light btn-border-end'], 'label_html' => true'label' => '<i class="fas fa-cloud-download-alt"></i> Descargar'])
  207.                 ->getForm();
  208.         $form->handleRequest($request);
  209.         $estadistica = [];
  210.         if ($form->isSubmitted() && $form->isValid()) {
  211.             if ($form->get('descargar')->isClicked()) {
  212.                 $data $em->getRepository(\App\Entity\JurProceso::class)->getAllDescarga();
  213.                 foreach ($data as $key => $value) {
  214.                     foreach ($value as $key2 => $value2) {
  215.                         if ($key2 == 'respuesta' || $key2 == 'contraparte' || $key2 == 'motivo') {
  216.                             $data[$key][$key2] = strip_tags($value2);
  217.                         }
  218.                     }
  219.                 }
  220.                 $res $this->generateExcelAction(['nombreArchivo' => 'Procesos Juridicos'], ['Pro_legales' => $data]);
  221.                 return $res;
  222.             }
  223.             $empresa $form->get('empresa')->getData();
  224.             $tipificacion $form->get('tipificacion')->getData();
  225.             $fecha date('Y-m');
  226.             if ($form->get('year')->getData()) {
  227.                 $fecha $form->get('year')->getData();
  228.                 if ($form->get('month')->getData() == null) {
  229.                     $fecha .= "-12";
  230.                 }
  231.             }
  232.             if ($form->get('month')->getData()) {
  233.                 if ($form->get('year')->getData() == null) {
  234.                     $fecha date('Y') . "-{$form->get('month')->getData()}";
  235.                 } else {
  236.                     $fecha "{$form->get('year')->getData()}-{$form->get('month')->getData()}";
  237.                 }
  238.             }
  239.             $procesoAbierto $em->getRepository(\App\Entity\JurProceso::class)->findBy(['estado' => 27]);
  240.             $procesoCerrado $em->getRepository(\App\Entity\JurProceso::class)->findBy(['estado' => 28]);
  241.             $procesoPagado $em->getRepository(\App\Entity\JurProceso::class)->findAll();
  242.             $procesoTipo $em->getRepository(\App\Entity\JurProceso::class)->getConsolidoTipo($empresa$tipificacion);
  243.             $procesoVencer $em->getRepository(\App\Entity\JurProceso::class)->getVencimientos($fecha$empresa);
  244.             $procesosFecha $em->getRepository(\App\Entity\JurProceso::class)->getConsolidoFecha($empresa);
  245.             $procesosEmpresa $em->getRepository(\App\Entity\JurProceso::class)->getConsolidoEmpresa($empresa);
  246.             $estadistica['fecha']['label'] = "";
  247.             $estadistica['fecha']['data'] = "";
  248.             $estadistica['fecha']['data'] = implode(","array_column($procesosFecha'cantidad'));
  249.             $arr array_column($procesosFecha'ano');
  250.             array_walk($arr, function (&$value$key) {
  251.                 $value "'{$value}'";
  252.             });
  253.             $estadistica['fecha']['label'] = implode(","$arr);
  254.             //ajuste allanamientos
  255. //            $estadistica['allanamiento']['label'] = "";
  256. //            $estadistica['allanamiento']['data'] = "";
  257. //            $estadistica['allanamiento']['data'] = implode(",", array_column($allanamientoFecha, 'cantidad'));
  258. //            $arr = array_column($allanamientoFecha, 'mes');
  259. //            array_walk($arr, function (&$value, $key) {
  260. //                $value = "'{$value}'";
  261. //            });
  262. //            $estadistica['allanamiento']['label'] = implode(",", $arr);
  263.             //torta
  264.             $estadistica['empresa']['label'] = "";
  265.             $estadistica['empresa']['data'] = "";
  266.             $estadistica['empresa']['color'] = "";
  267.             $estadistica['empresa']['data'] = implode(","array_column($procesosEmpresa'cantidad'));
  268.             $arr array_column($procesosEmpresa'empFil');
  269.             $color = [];
  270.             array_walk($arr, function (&$value$key)use ($color) {
  271.                 $value "'{$value}'";
  272.                 $color[] = "#01" rand(199) . "e8";
  273.             });
  274.             $estadistica['empresa']['label'] = implode(","$arr);
  275.             $estadistica['empresa']['color'] = implode(","$color);
  276.             //agrupamiento por mes
  277.             $year date('Y');
  278.             $estadistica['agrupado']['label'] = "'ENE','FEB','MAR','ABR','MAY','JUN','JUL','AGO','SEP','OCT','NOV','DIC'";
  279.             $estadistica['agrupado']['data'][$year] = "";
  280.             $estadistica['agrupado']['color'] = "";
  281.             $color = [];
  282.             for ($i 0$i 2$i++) {
  283.                 $year -= $i;
  284.                 //$allanamientoFecha =
  285.                 $procesosAgrupado $em->getRepository(\App\Entity\JurRespuestaProceso::class)->getAllanamientoFecha($empresa$year); // $em->getRepository(\App\Entity\JurProceso::class)->getConsolidoFechaAno($year, $empresa);
  286.                 $data = [];
  287.                 //foreach ($procesosAgrupado as $pg) {
  288.                 foreach ($procesosAgrupado as $pg) {
  289.                     $mes $pg['mes'];
  290.                     $mesNum $mes[0] == $mes[1] : $pg['mes'];
  291.                     $data[$mesNum] = $pg['cantidad'];
  292.                 }
  293.                 for ($m 1$m 13$m++) {
  294.                     if (!isset($data[$m])) {
  295.                         $data[$m] = 0;
  296.                     }
  297.                 }
  298.                 ksort($data);
  299.                 //}
  300.                 $color[] = '"#0' rand(199999) . '"';
  301.                 $estadistica['agrupado']['data'][$year] = implode(","$data);
  302.             }
  303.             //$estadistica['agrupado']['label'] = implode(",", $arr);
  304.             $estadistica['agrupado']['color'] = implode(","$color);
  305.             $pagado 0;
  306.             $riesgo 10000000;
  307.             foreach ($procesoPagado as $pp) {
  308.                 if ($empresa) {
  309.                     if ($pp->getEmpresaFilial()->getId() == $empresa->getId()) {
  310.                         $pagado += $pp->getMonto();
  311.                     }
  312.                 } else {
  313.                     $pagado += $pp->getMonto();
  314.                 }
  315.             }
  316.             $estadistica['abierto'] = count($procesoAbierto);
  317.             $estadistica['cerrado'] = count($procesoCerrado);
  318.             $estadistica['riesgo'] = $riesgo;
  319.             $estadistica['pagado'] = $pagado;
  320.             $estadistica['tipo'] = $procesoTipo;
  321.             $estadistica['vencidos'] = $procesoVencer;
  322.             //  return $this->redirectToRoute($nextAction);
  323.         }
  324.         return $this->render('reportes/JurProcesosLegales.html.twig', [
  325.                     'estadistica' => $estadistica,
  326.                     'form' => $form->createView(),
  327.         ]);
  328.     }
  329.     #[Route('/jur/reportes/operaciones_sospechosas'name'jur_reporte_operaciones_sospechosas')]
  330.     public function reporteOperacionesSospechosas(Request $request\Doctrine\ORM\EntityManagerInterface $em\App\Services\MailerCore $mailerCore): Response {
  331.         $defaultData = ['message' => 'Procesos Legales'];
  332.         $form $this->createFormBuilder($defaultData)
  333.                 ->add('empresa'\Symfony\Bridge\Doctrine\Form\Type\EntityType::class, ['required' => false'placeholder' => 'selecciones una opcion''class' => \App\Entity\TerEmpresa::class, 'query_builder' => function (\Doctrine\ORM\EntityRepository $er) {
  334.                         return $er->createQueryBuilder('e')
  335.                                 ->orderBy('e.nombre''ASC');
  336.                     }, 'label' => 'Empresa',
  337.                     'attr' => ['class' => 'form-control''placeholder' => 'Seleccione una Opción.']
  338.                 ])
  339.                 ->add('proceso'\Symfony\Bridge\Doctrine\Form\Type\EntityType::class, ['required' => false'placeholder' => 'selecciones una opcion''class' => \App\Entity\ParProceso::class, 'query_builder' => function (\Doctrine\ORM\EntityRepository $er) {
  340.                         return $er->createQueryBuilder('p')
  341.                                 ->orderBy('p.nombre''ASC');
  342.                     }, 'label' => 'Proceso',
  343.                     'attr' => ['class' => 'form-control''placeholder' => 'Seleccione una Opción.']
  344.                 ])
  345.                 ->add('month'\Symfony\Component\Form\Extension\Core\Type\ChoiceType::class, ['label' => 'Mes''required' => false'choices' => $this->month'placeholder' => 'Seleccione una opción'])
  346.                 ->add('year'\Symfony\Component\Form\Extension\Core\Type\ChoiceType::class, ['label' => 'Año''required' => false'choices' => $this->year'placeholder' => 'Seleccione una opción'])
  347.                 ->add('consultar'\Symfony\Component\Form\Extension\Core\Type\SubmitType::class, ['attr' => ['class' => 'btn btn-primary-light btn-border-end'], 'label_html' => true'label' => '<i class="fa fa-search"></i> Consultar'])
  348.                 ->add('descargar'\Symfony\Component\Form\Extension\Core\Type\SubmitType::class, ['attr' => ['class' => 'btn btn-secondary-light btn-border-end'], 'label_html' => true'label' => '<i class="fas fa-cloud-download-alt"></i> Descargar'])
  349.                 ->getForm();
  350.         $form->handleRequest($request);
  351.         $estadistica = [];
  352.         if ($form->isSubmitted() && $form->isValid()) {
  353.             //$nextAction = $form->get('consultar')->isClicked() ? 'consultar' : 'descargar';
  354.             if ($form->get('descargar')->isClicked()) {
  355.                 $data $em->getRepository(\App\Entity\JurOperacionSospechosa::class)->getAllDescarga();
  356.                 $res $this->generateExcelAction(['nombreArchivo' => 'Operaciones_sospechosas'], ['Op_sospechosas' => $data]);
  357.                 return $res;
  358.             }
  359.             $empresa $form->get('empresa')->getData();
  360.             $proceso $form->get('proceso')->getData();
  361.             $fecha null;
  362.             if ($form->get('year')->getData()) {
  363.                 $fecha $form->get('year')->getData();
  364.             }
  365.             if ($form->get('month')->getData()) {
  366.                 if ($fecha == null) {
  367.                     $fecha date('Y') . "-{$form->get('month')->getData()}";
  368.                 } else {
  369.                     $fecha .= "-{$form->get('month')->getData()}";
  370.                 }
  371.             }
  372.             $porAno $em->getRepository(\App\Entity\JurOperacionSospechosa::class)->operacionFecha("A"$fecha$empresa);
  373.             $porCliente $em->getRepository(\App\Entity\JurOperacionSospechosa::class)->operacionCliente($empresa$fecha);
  374.             $porMotivo $em->getRepository(\App\Entity\JurOperacionSospechosa::class)->operacionMotivo($fecha$empresa);
  375.             $porAlertaCliente $em->getRepository(\App\Entity\JurOperacionSospechosa::class)->operacionMotivoJuridico($fecha$empresa);
  376.             //agrupamiento por mes
  377.             $year date('Y');
  378.             $estadistica['mes']['label'] = "'ENE','FEB','MAR','ABR','MAY','JUN','JUL','AGO','SEP','OCT','NOV','DIC'";
  379.             $estadistica['mes']['data'][$year] = "";
  380.             $estadistica['mes']['color'] = "";
  381.             $color = [];
  382.             for ($i 0$i 2$i++) {
  383.                 $year -= $i;
  384.                 //$allanamientoFecha =
  385.                 $procesosAgrupado $em->getRepository(\App\Entity\JurOperacionSospechosa::class)->operacionFecha("M"$year$empresa);
  386.                 //$procesosAgrupado = $em->getRepository(\App\Entity\JurRespuestaProceso::class)->getAllanamientoFecha($empresa, $year); // $em->getRepository(\App\Entity\JurProceso::class)->getConsolidoFechaAno($year, $empresa);
  387.                 $data = [];
  388.                 //foreach ($procesosAgrupado as $pg) {
  389.                 foreach ($procesosAgrupado as $pg) {
  390.                     $mes $pg['fecha'];
  391.                     $mesNum $mes[0] == $mes[1] : $pg['fecha'];
  392.                     $data[$mesNum] = $pg['cantidad'];
  393.                 }
  394.                 for ($m 1$m 13$m++) {
  395.                     if (!isset($data[$m])) {
  396.                         $data[$m] = 0;
  397.                     }
  398.                 }
  399.                 ksort($data);
  400.                 //}
  401.                 $color[] = '"#0' rand(199999) . '"';
  402.                 $estadistica['mes']['data'][$year] = implode(","$data);
  403.             }
  404.             //$estadistica['agrupado']['label'] = implode(",", $arr);
  405.             $estadistica['mes']['color'] = implode(","$color);
  406.             //     $estadistica['mes']['label'] = "";
  407.             //     $estadistica['mes']['data'] = "";
  408.             /*   $estadistica['mes']['data'] = implode(",", array_column($porMes, 'cantidad'));
  409.               $arr = array_column($porMes, 'fecha');
  410.               array_walk($arr, function (&$value, $key) {
  411.               $value = "'{$value}'";
  412.               });
  413.               $estadistica['mes']['label'] = implode(",", $arr); */
  414.             ///
  415.             $estadistica['ano']['label'] = "";
  416.             $estadistica['ano']['data'] = "";
  417.             $estadistica['ano']['data'] = implode(","array_column($porAno'cantidad'));
  418.             $arr array_column($porAno'fecha');
  419.             array_walk($arr, function (&$value$key) {
  420.                 $value "'{$value}'";
  421.             });
  422.             $estadistica['ano']['label'] = implode(","$arr);
  423.             $estadistica['motivo']['label'] = "";
  424.             $estadistica['motivo']['data'] = "";
  425.             $estadistica['motivo']['data'] = implode(","array_column($porMotivo'cantidad'));
  426.             $arr array_column($porMotivo'motivo');
  427.             array_walk($arr, function (&$value$key) {
  428.                 $value "'{$value}'";
  429.             });
  430.             $estadistica['motivo']['label'] = implode(","$arr);
  431.             $estadistica['cliente'] = $porCliente;
  432.             $estadistica['motivoList'] = $porMotivo;
  433.             $estadistica['alertaList'] = $porAlertaCliente;
  434.             // $estadistica['fecha'] = $porFecha;
  435.         }
  436.         return $this->render('reportes/JurOperacionesSospechosas.html.twig', [
  437.                     'estadistica' => $estadistica,
  438.                     'form' => $form->createView(),
  439.         ]);
  440.     }
  441.     #[Route('/jur/reportes/documentos_legales'name'jur_reporte_documentos_legales')]
  442.     public function reporteDocumentosLegales(Request $request\Doctrine\ORM\EntityManagerInterface $em\App\Services\MailerCore $mailerCore): Response {
  443.         $defaultData = ['message' => 'Procesos Legales'];
  444.         $form $this->createFormBuilder($defaultData)
  445.                 ->add('empresa'\Symfony\Bridge\Doctrine\Form\Type\EntityType::class, ['required' => false'placeholder' => 'selecciones una opcion''class' => \App\Entity\TerEmpresa::class, 'query_builder' => function (\Doctrine\ORM\EntityRepository $er) {
  446.                         return $er->createQueryBuilder('e')
  447.                                 ->orderBy('e.nombre''ASC');
  448.                     }, 'label' => 'Empresa',
  449.                     'attr' => ['class' => 'form-control''placeholder' => 'Seleccione una Opción.']
  450.                 ])
  451. //                ->add('proceso', \Symfony\Bridge\Doctrine\Form\Type\EntityType::class, ['required' => false, 'placeholder' => 'selecciones una opcion', 'class' => \App\Entity\ParProceso::class, 'query_builder' => function (\Doctrine\ORM\EntityRepository $er) {
  452. //                        return $er->createQueryBuilder('p')
  453. //                                ->orderBy('p.nombre', 'ASC');
  454. //                    }, 'label' => 'Proceso',
  455. //                    'attr' => ['class' => 'form-control', 'placeholder' => 'Seleccione una Opción.']
  456. //                ])
  457.                 ->add('month'\Symfony\Component\Form\Extension\Core\Type\ChoiceType::class, ['label' => 'Mes''required' => false'choices' => $this->month'placeholder' => 'Seleccione una opción'])
  458.                 ->add('year'\Symfony\Component\Form\Extension\Core\Type\ChoiceType::class, ['label' => 'Año''required' => false'choices' => $this->year'placeholder' => 'Seleccione una opción'])
  459.                 ->add('consultar'\Symfony\Component\Form\Extension\Core\Type\SubmitType::class, ['attr' => ['class' => 'btn btn-primary-light btn-border-end'], 'label_html' => true'label' => '<i class="fa fa-search"></i> Consultar'])
  460.                 ->add('descargar'\Symfony\Component\Form\Extension\Core\Type\SubmitType::class, ['attr' => ['class' => 'btn btn-secondary-light btn-border-end'], 'label_html' => true'label' => '<i class="fas fa-cloud-download-alt"></i> Descargar'])
  461.                 ->getForm();
  462.         $form->handleRequest($request);
  463.         $estadistica = [];
  464.         if ($form->isSubmitted() && $form->isValid()) {
  465.             //$nextAction = $form->get('consultar')->isClicked() ? 'consultar' : 'descargar';
  466.             if ($form->get('descargar')->isClicked()) {
  467.                 $data $em->getRepository(\App\Entity\JurDocumentoLegal::class)->getAllDescarga();
  468.                 foreach ($data as $key => $value) {
  469.                     foreach ($value as $key2 => $value2) {
  470.                         if ($key2 == 'descripcion') {
  471.                             $data[$key][$key2] = strip_tags($value2);
  472.                         }
  473.                     }
  474.                 }
  475.                 $res $this->generateExcelAction(['nombreArchivo' => 'Documentos Legales'], ['Doc_legal' => $data]);
  476.                 return $res;
  477.             }
  478.             $empresa $form->get('empresa')->getData();
  479.             //$proceso = $form->get('proceso')->getData();
  480.             $fecha null;
  481.             if ($form->get('year')->getData()) {
  482.                 $fecha $form->get('year')->getData();
  483.             }
  484.             if ($form->get('month')->getData()) {
  485.                 if ($fecha == null) {
  486.                     $fecha date('Y') . "-{$form->get('month')->getData()}";
  487.                 } else {
  488.                     $fecha .= "-{$form->get('month')->getData()}";
  489.                 }
  490.             }
  491.             $contrato $em->getRepository(\App\Entity\JurDocumentoLegal::class)->porMes($fecha, [1], $empresa);
  492.             $otro $em->getRepository(\App\Entity\JurDocumentoLegal::class)->porMes($fecha, [2], $empresa);
  493.             $now = new \DateTime('now');
  494.             $estadistica['contrato'] = null;
  495.             $estadistica['otros'] = null;
  496.             foreach ($contrato as $td) {
  497.                 if ($td['fecha_vencimiento']) {
  498.                     $diff $now->diff($td['fecha_vencimiento']);
  499.                     if ($diff->days <= || $now >= $td['fecha_vencimiento']) {
  500.                         $estadistica['contrato'][] = $td;
  501.                     }
  502.                 }
  503.             }
  504.             foreach ($otro as $td) {
  505.                 if ($td['fecha_vencimiento']) {
  506.                     $diff $now->diff($td['fecha_vencimiento']);
  507.                     if ($diff->days <= || $now >= $td['fecha_vencimiento']) {
  508.                         $estadistica['otros'][] = $td;
  509.                     }
  510.                 }
  511.             }
  512.         }
  513.         return $this->render('reportes/JurDocumentosLegales.html.twig', [
  514.                     'estadistica' => $estadistica,
  515.                     'form' => $form->createView(),
  516.         ]);
  517.     }
  518.     #[Route('/jur/reportes/matriz_requisitos_legales'name'jur_reporte_matriz_requisitos_legales')]
  519.     public function reporteMatrizRequisitosLegales(Request $request\Doctrine\ORM\EntityManagerInterface $em\App\Services\MailerCore $mailerCore): Response {
  520.         $defaultData = ['message' => 'Procesos Legales'];
  521.         $form $this->createFormBuilder($defaultData)
  522.                 ->add('empresa'\Symfony\Bridge\Doctrine\Form\Type\EntityType::class, ['required' => false'placeholder' => 'selecciones una opcion''class' => \App\Entity\TerEmpresa::class, 'query_builder' => function (\Doctrine\ORM\EntityRepository $er) {
  523.                         return $er->createQueryBuilder('e')
  524.                                 ->orderBy('e.nombre''ASC');
  525.                     }, 'label' => 'Empresa',
  526.                     'attr' => ['class' => 'form-control''placeholder' => 'Seleccione una Opción.']
  527.                 ])
  528.                 ->add('proceso'\Symfony\Bridge\Doctrine\Form\Type\EntityType::class, ['required' => false'placeholder' => 'selecciones una opcion''class' => \App\Entity\ParProceso::class, 'query_builder' => function (\Doctrine\ORM\EntityRepository $er) {
  529.                         return $er->createQueryBuilder('p')
  530.                                 ->orderBy('p.nombre''ASC');
  531.                     }, 'label' => 'Proceso',
  532.                     'attr' => ['class' => 'form-control''placeholder' => 'Seleccione una Opción.']
  533.                 ])
  534.                 ->add('month'\Symfony\Component\Form\Extension\Core\Type\ChoiceType::class, ['label' => 'Mes''required' => false'choices' => $this->month'placeholder' => 'Seleccione una opción'])
  535.                 ->add('year'\Symfony\Component\Form\Extension\Core\Type\ChoiceType::class, ['label' => 'Año''required' => false'choices' => $this->year'placeholder' => 'Seleccione una opción'])
  536.                 ->add('consultar'\Symfony\Component\Form\Extension\Core\Type\SubmitType::class, ['attr' => ['class' => 'btn btn-primary-light btn-border-end'], 'label_html' => true'label' => '<i class="fa fa-search"></i> Consultar'])
  537.                 ->add('descargar'\Symfony\Component\Form\Extension\Core\Type\SubmitType::class, ['attr' => ['class' => 'btn btn-secondary-light btn-border-end'], 'label_html' => true'label' => '<i class="fas fa-cloud-download-alt"></i> Descargar'])
  538.                 ->getForm();
  539.         $form->handleRequest($request);
  540.         $estadistica = [];
  541.         if ($form->isSubmitted() && $form->isValid()) {
  542.             //$nextAction = $form->get('consultar')->isClicked() ? 'consultar' : 'descargar';
  543.             if ($form->get('descargar')->isClicked()) {
  544.                 $data $em->getRepository(\App\Entity\JurNorma::class)->getDescargable();
  545.                 foreach ($data as $key => $value) {
  546.                     foreach ($value as $key2 => $value2) {
  547.                         if ($key2 == 'descripcion') {
  548.                             $data[$key][$key2] = strip_tags($value2);
  549.                         }
  550.                     }
  551.                 }
  552.                 $res $this->generateExcelAction(['nombreArchivo' => 'Matriz de Requisitos Legales'], ['normatividad' => $data]);
  553.                 return $res;
  554.             }
  555.             $empresa $form->get('empresa')->getData();
  556.             $proceso $form->get('proceso')->getData();
  557.             $fecha null;
  558.             if ($form->get('year')->getData()) {
  559.                 $fecha $form->get('year')->getData();
  560.             }
  561.             if ($form->get('month')->getData()) {
  562.                 if ($fecha == null) {
  563.                     $fecha date('Y') . "-{$form->get('month')->getData()}";
  564.                 } else {
  565.                     $fecha .= "-{$form->get('month')->getData()}";
  566.                 }
  567.             }
  568.             $procesoObj $em->getRepository(\App\Entity\JurNorma::class)->porProceso($proceso$fecha);
  569.             $estadistica['proceso']['label'] = "";
  570.             $estadistica['proceso']['data'] = "";
  571.             $estadistica['proceso']['data'] = implode(","array_column($procesoObj'cantidad'));
  572.             $arr array_column($procesoObj'procesos');
  573.             array_walk($arr, function (&$value$key) {
  574.                 $value "'{$value}'";
  575.             });
  576.             $estadistica['proceso']['label'] = implode(","$arr);
  577.             $sancion $em->getRepository(\App\Entity\JurNorma::class)->porProcesoSancion($proceso$fecha);
  578.             $estadistica['sancion']['label'] = "";
  579.             $estadistica['sancion']['data'] = "";
  580.             $estadistica['sancion']['data'] = implode(","array_column($sancion'sancion'));
  581.             $arr array_column($sancion'procesos');
  582.             array_walk($arr, function (&$value$key) {
  583.                 $value "'{$value}'";
  584.             });
  585.             $estadistica['sancion']['label'] = implode(","$arr);
  586.             $estadistica['procesoList'] = $em->getRepository(\App\Entity\JurNorma::class)->porProcesoList($proceso$fecha);
  587.             $estadistica['sancionList'] = $em->getRepository(\App\Entity\JurNorma::class)->porProcesoSancionList($proceso$fecha);
  588.             $dataTmp $em->getRepository(\App\Entity\JurNorma::class)->getDashboard(500);
  589.             $keyWords array_column($dataTmp'palabra_clave');
  590.             $defKeyWords array_unique(explode(","implode(","$keyWords)));
  591.             $estadistica['keywords'] = $defKeyWords;
  592.         }
  593.         return $this->render('reportes/JurMatrizRequisitosLegales.html.twig', [
  594.                     'estadistica' => $estadistica,
  595.                     'form' => $form->createView(),
  596.         ]);
  597.     }
  598.     /*
  599.       #[Route('/jur/reportes/trimestral_zf', name: 'jur_reporte_trimestral_zf')]
  600.       public function reporteTrimestralZF(Request $request, \Doctrine\ORM\EntityManagerInterface $em, \App\Services\MailerCore $mailerCore): Response {
  601.       $defaultData = ['message' => 'Procesos Legales'];
  602.       $form = $this->createFormBuilder($defaultData)
  603.       ->add('archivo', FileType::class, [
  604.       'label' => 'Archivo de Consulta',
  605.       'mapped' => false,
  606.       'required' => false,
  607.       'multiple' => true
  608.       ])
  609.       ->add('trimestre', \Symfony\Component\Form\Extension\Core\Type\ChoiceType::class, ['label' => 'Trimestre', 'choices' => ['1 Trimestre' => '1' , '2 Trimestre'  =>'2', '3 Trimestre'=> '3'  , '4 Trimestre' => '4']])
  610.       ->add('fecha', \Symfony\Component\Form\Extension\Core\Type\DateTimeType::class, ['required' => false, 'widget' => 'single_text', 'html5' => false, 'format' => 'yyyy-MM', 'attr' => ['class' => 'fc-datepicker-month']])
  611.       ->add('consultar', \Symfony\Component\Form\Extension\Core\Type\SubmitType::class, ['attr' => ['class' => 'btn btn-primary-light btn-border-end'], 'label_html' => true, 'label' => '<i class="fa fa-search"></i> Consultar'])
  612.       ->add('descargar', \Symfony\Component\Form\Extension\Core\Type\SubmitType::class, ['attr' => ['class' => 'btn btn-secondary-light btn-border-end'], 'label_html' => true, 'label' => '<i class="fas fa-cloud-download-alt"></i> Descargar'])
  613.       ->getForm();
  614.       $form->handleRequest($request);
  615.       $estadistica = [];
  616.       if ($form->isSubmitted() && $form->isValid()) {
  617.       $this->addFlash('warning', "Imposible cargar el registro, Data set unlink");
  618.       return $this->redirectToRoute('jur_reporte_trimestral_zf');
  619.       //$nextAction = $form->get('consultar')->isClicked() ? 'consultar' : 'descargar';
  620.       if ($form->get('descargar')->isClicked()) {
  621.       $data = $em->getRepository(\App\Entity\JurNorma::class)->getAll();
  622.       $res = $this->generateExcelAction([], ['normatividad' => $data]);
  623.       return $res;
  624.       }
  625.       $empresa = $form->get('empresa')->getData();
  626.       $proceso = $form->get('proceso')->getData();
  627.       $fecha = $form->get('fecha')->getData() != null ? $form->get('fecha')->getData() : new \DateTime('now');
  628.       $procesoObj = $em->getRepository(\App\Entity\JurNorma::class)->porProceso($proceso, $fecha);
  629.       $estadistica['proceso']['label'] = "";
  630.       $estadistica['proceso']['data'] = "";
  631.       $estadistica['proceso']['data'] = implode(",", array_column($procesoObj, 'cantidad'));
  632.       $arr = array_column($procesoObj, 'procesos');
  633.       array_walk($arr, function (&$value, $key) {
  634.       $value = "'{$value}'";
  635.       });
  636.       $estadistica['proceso']['label'] = implode(",", $arr);
  637.       $sancion = $em->getRepository(\App\Entity\JurNorma::class)->porProcesoSancion($proceso, $fecha);
  638.       $estadistica['sancion']['label'] = "";
  639.       $estadistica['sancion']['data'] = "";
  640.       $estadistica['sancion']['data'] = implode(",", array_column($sancion, 'sancion'));
  641.       $arr = array_column($sancion, 'procesos');
  642.       array_walk($arr, function (&$value, $key) {
  643.       $value = "'{$value}'";
  644.       });
  645.       $estadistica['sancion']['label'] = implode(",", $arr);
  646.       $estadistica['procesoList'] = $em->getRepository(\App\Entity\JurNorma::class)->porProcesoList($proceso, $fecha);
  647.       $estadistica['sancionList'] = $em->getRepository(\App\Entity\JurNorma::class)->porProcesoSancionList($proceso, $fecha);
  648.       $dataTmp = $em->getRepository(\App\Entity\JurNorma::class)->getDashboard(500);
  649.       $keyWords = array_column($dataTmp, 'palabra_clave');
  650.       $defKeyWords = array_unique(explode(",", implode(",", $keyWords)));
  651.       $estadistica['keywords'] = $defKeyWords;
  652.       }
  653.       return $this->render('reportes/JurTrimestralZF.html.twig', [
  654.       'estadistica' => $estadistica,
  655.       'form' => $form->createView(),
  656.       ]);
  657.       } */
  658. }