<?php
namespace App\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
use Symfony\Component\Serializer\SerializerInterface;
use Doctrine\Common\Annotations\AnnotationReader;
use Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactory;
use Symfony\Component\Serializer\Mapping\Loader\AnnotationLoader;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Doctrine\DBAL\DriverManager;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Tools\Pagination\Paginator;
use App\Entity\ConfigGeoServer;
use App\Entity\ConfigGeoLayers;
use App\Entity\FilterRange;
use App\Entity\FilterOptions;
use App\Entity\Layers;
use App\Entity\Styles;
use App\Entity\Municipio;
use App\Repository\MunicipioRepository;
use App\Entity\Analytic;
use App\Repository\AnalyticRepository;
use App\Repository\OpenaiRepository;
use App\Entity\Project;
use App\Entity\CacheAi;
use Symfony\Component\Security\Core\Security;
//use OpenAI\OpenAI;
//use OpenAI;
class AnalyticController extends AbstractController
{
#[Route('/{_locale}/explora',
locale: "en",
format: "html",
requirements: ["_locale" => "en|es|ca", "_format" => "html|xml", ],
defaults: ["_locale" => "en"],
name: 'app_analytic_home')]
public function home(Request $request, SerializerInterface $serializer, Security $security): Response
{
$em = $this->getDoctrine()->getManager();
$data['mun'] = null;
$baseurl = $this->generateUrl('home', [], UrlGeneratorInterface::ABSOLUTE_URL);
$data['base_url'] = substr($baseurl, 0, -1);
$data['municipios'] = $em->getRepository(Municipio::class)->getMunicipios();
$data['kpismulti'] = $em->getRepository(Municipio::class)->getKpisMultiInfo();
$data['analytic_filters'] = $em->getRepository(Municipio::class)->getAnalyticFilters();
// if($userId){
// $data['user_projects'] = $em->getRepository(Project::class)->findBy(['id_user'=>$userId]);
// $data['mun'] = null;
// return $this->render('home/index.html.twig', $data);
// }else{
// return $this->render('Login/login.html.twig');
// }
return $this->render('analytic/index.html.twig', $data);
}
#[Route('/{_locale}/explora/{mun}',
locale: "en",
format: "html",
requirements: ["_locale" => "en|es|ca", "_format" => "html|xml", ],
defaults: ["_locale" => "en"],
name: 'app_analytic', methods: ['GET'])]
public function index(int $mun, Request $request, SerializerInterface $serializer, Security $security): Response
{
$em = $this->getDoctrine()->getManager();
$data['chatai'] = $em->getRepository(CacheAi::class)->findAll();
$baseurl = $this->generateUrl('home', [], UrlGeneratorInterface::ABSOLUTE_URL);
$data['base_url'] = substr($baseurl, 0, -1);
// Get Municipio data
$data['mun'] = $mun;
$data['municipioname'] = $em->getRepository(Municipio::class)->getMunicipioName($mun);
$data['mundatainfo'] = $em->getRepository(Municipio::class)->mun_data_info($mun);
// Get Analytic data
$data['analytic'] = $serializer->normalize($em->getRepository(Analytic::class)->analytic_data(), 'array');
$data['analytic_data'] = $em->getRepository(Analytic::class)->analytic_data_filter($mun,1);
// Get legend
$data['kpi_rank'] = $serializer->normalize($em->getRepository(Municipio::class)->indicators_rank_group(), 'array');
// $data['statData'] = json_encode($data['analytic_data']);
$data['statData'] = $em->getRepository(Analytic::class)->analytic_stat_data($mun);
return $this->render('analytic/home.html.twig', $data);
}
#[Route('/{_locale}/explora/{mun}/{slug}',
locale: "en",
format: "html",
requirements: ["_locale" => "en|es|ca", "_format" => "html|xml", ],
defaults: ["_locale" => "en"],
name: 'explore_analytic', methods: ['GET'])]
public function explore (int $mun, string $slug, Request $request, SerializerInterface $serializer, Security $security) : Response
{
$em = $this->getDoctrine()->getManager();
$baseurl = $this->generateUrl('home', [], UrlGeneratorInterface::ABSOLUTE_URL);
$data['base_url'] = substr($baseurl, 0, -1);
$data['mun'] = $mun;
$data['slug'] = $slug;
// Get Municipio data
$data['municipioname'] = $em->getRepository(Municipio::class)->getMunicipioName($mun);
$filterData = $em->getRepository(Analytic::class)->findBy(['slug'=>$slug]);
$filter = $filterData[0]->getId();
// Get Analytic data
$data['analytic'] = $em->getRepository(Analytic::class)->analytic_data();
$data['analytic_data'] = $em->getRepository(Analytic::class)->analytic_data_filter_one_multi($mun,1,$filter);
$data['filtered_data'] = json_encode($em->getRepository(Analytic::class)->get_filtered_data($mun,$filter));
$data['analytic_general_mun'] = $em->getRepository(Analytic::class)->analytic_general_mun($mun);
$data['analytic_data_relation'] = $em->getRepository(Analytic::class)->analytic_relation($mun,$filter,2);
// Get legend
$data['kpi_rank'] = $serializer->normalize($em->getRepository(Municipio::class)->indicators_rank_group(), 'array');
$data['useStatData'] = json_encode($data['analytic_data'][0]['use_stats']);
$data['yearStatData'] = json_encode($data['analytic_data'][0]['year_stats']);
$data['areaStatData'] = json_encode($data['analytic_data'][0]['area_stats']);
$data['occupationStatData'] = json_encode($data['analytic_data'][0]['occupation_stats']);
$data['layers'] = $serializer->serialize($em->getRepository(Layers::class)->getAll(), 'json');
$data['configLayers'] = $serializer->serialize($em->getRepository(ConfigGeoLayers::class)->getAll(), 'json');
// Get indicators list
$data['kpi_list'] = $serializer->serialize($em->getRepository(Municipio::class)->all_kpi(), 'json');
$data['mun_data'] = $serializer->normalize($em->getRepository(Municipio::class)->mun_data($mun), 'array');
// Get kpi colors
$data['kpi_colors'] = $serializer->serialize($em->getRepository(Municipio::class)->get_indicator_colors(3), 'json');
$session = $request->getSession();
$foo = $session->get('init_message');
if($foo != true){
$this->addFlash(
'notice',
"Se presentan los edificios identificados como vulnerables según diversos indicadores asociados a la vulnerabilidad.<br>Además, se ofrecen datos sobre los edificios en función de otros indicadores, que abarcan diferentes ámbitos y características particulares."
);
$session->set('init_message', true);
}
return $this->render('analytic/explore.html.twig', $data);
}
}