<?php
namespace App\Controller;
use App\Entity\Cassonetti\Alarm;
use App\Entity\Cassonetti\AutomezziOggetti;
use App\Entity\Cassonetti\Cassonetto;
use App\Entity\Cassonetti\Comune;
use App\Entity\Cassonetti\OrdineServizio;
use App\Entity\Cassonetti\Rilevazione;
use App\Form\GpsAutomezziType;
use App\Form\GpsOggettiType;
use App\Form\MapsComuneType;
use App\Services\AppManager;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Contracts\HttpClient\HttpClientInterface;
use Twig\Environment;
class DefaultController extends AbstractController
{
private $params;
private $em;
private $client;
private $manager;
/**
* DropboxUploaderCommand constructor.
* @param $params
*/
public function __construct(ParameterBagInterface $params, EntityManagerInterface $em, HttpClientInterface $client, AppManager $manager)
{
$this->params=$params;
$this->em=$em;
$this->client=$client;
$this->manager = $manager;
}
#[Route(path: '/', name: 'home')]
public function index():Response{
$idComune = 0;
$user = $this->getUser();
if (in_array("ROLE_COMUNE", $user->getRoles()) ) {
$idComune = $user->getComune()->getId();
}
$aRilevazioni = [];
if ($idComune > 0){
$odss = $this->em->getRepository(OrdineServizio::class)->findOdsByComune($idComune);
$rilevazioni = $this->em->getRepository(Rilevazione::class)->findRilevazioniByComune($idComune);
$alarms = $this->em->getRepository(Alarm::class)->findAlarmByComune($idComune);
} else {
$odss = $this->em->getRepository(OrdineServizio::class)->findEnabled();
$rilevazioni = $this->em->getRepository(Rilevazione::class)->findEnabled();
$alarms = $this->em->getRepository(Alarm::class)->findAll();
}
foreach ($rilevazioni as $rilevazione) {
$des_comune = '';
if ($rilevazione->getComune()) {
$des_comune = $rilevazione->getComune()->getDescrizione();
}
foreach ($rilevazione->getJson() as $json){
$rilevazione = json_decode($json, true);
$rilevazione['comune'] = $des_comune;
$aRilevazioni[] = $rilevazione;
}
}
return $this->render('default/index.html.twig',['odss'=>$odss, 'rilevazioni'=>$aRilevazioni, 'alarms'=>$alarms]);
}
#[Route(path: '/gpscassonetti', name: 'gpsCassonetti')]
public function gpsCassonetti(Request $request): Response
{
$idComune = 0;
$user = $this->getUser();
if (in_array("ROLE_COMUNE", $user->getRoles()) ) {
$idComune = $user->getComune()->getId();
}
$form = $this->createForm(MapsComuneType::class, [$idComune]);
$form->handleRequest($request);
$locations=[];
if ($form->isSubmitted()) {
if ($form->get('comune')->getData() instanceof Comune){
$cassonetti = $this->em->getRepository(Cassonetto::class)->findCassonettiByComune($form->get('comune')->getData()->getId());
$locations=[];
foreach ($cassonetti as $cassonetto) {
$loc=[];
$loc['id']=$cassonetto->getId();
$loc['indirizzo']=str_replace("'","\u0027", $cassonetto->getIndirizzo());
$loc['localita']=str_replace("'","\u0027",$cassonetto->getLocalita());
$loc['descrizione']=str_replace("'","\u0027",$cassonetto->getDescrizione());
$loc['lat']=$cassonetto->getLatitudine();
$loc['long']=$cassonetto->getLongitudine();
$locations[]=$loc;
}
// dd($locations);
}
return $this->render('default/gpsCassonetti.html.twig', ['form'=>$form->createView(),'locations'=>$locations]);
}
return $this->render('default/gpsCassonetti.html.twig', ['form'=>$form->createView(),'locations'=>$locations]);
}
#[Route(path: '/gpsautomezzi', name: 'gpsAutomezzi')]
public function gpsAutomezzi(Request $request): Response
{
$idComune = 0;
$user = $this->getUser();
if (in_array("ROLE_COMUNE", $user->getRoles()) ) {
$idComune = $user->getComune()->getId();
}
$form = $this->createForm(GpsAutomezziType::class, [$idComune]);
$form->handleRequest($request);
$locations=[];
if ($form->isSubmitted()) {
try {
if ($form->get('automezzo')->getData() instanceof AutomezziOggetti && $form->get('data')->getData()){
$data = $form->get('data')->getData()->format('Ymd');
$response = $this->client->request('GET', $this->getParameter('api_endpoint').'trackbymezzo/'.$form->get('automezzo')->getData()->getIdTrackIdea().'/'.$data);
$punti = $response->toArray();
$locations=[];
foreach ($punti as $punto) {
$loc=[];
$loc['id']=$punto['IdGPSTrack'];
$loc['lat']=$punto['Lat'];
$loc['long']=$punto['Lon'];
$locations[]=$loc;
}
}
return $this->render('default/gpsAutomezzi.html.twig', ['form'=>$form->createView(),'locations'=>$locations]);
} catch (\Exception $ex){
$this->addFlash('error', 'Non è possibile reperire dati GPS dal mezzo selezionato.');
return $this->render('default/gpsAutomezzi.html.twig', ['form'=>$form->createView(),'locations'=>$locations]);
}
}
return $this->render('default/gpsAutomezzi.html.twig', ['form'=>$form->createView(),'locations'=>$locations]);
}
#[Route(path: '/gpsoggetti', name: 'gpsOggetti')]
public function gpsOggetti(Request $request): Response
{
$idComune = 0;
$user = $this->getUser();
if (in_array("ROLE_COMUNE", $user->getRoles()) ) {
$idComune = $user->getComune()->getId();
}
$form = $this->createForm(GpsOggettiType::class, [$idComune]);
$form->handleRequest($request);
$rilevazioni=[];
if ($form->isSubmitted()) {
try {
if ($form->get('oggetto')->getData() instanceof AutomezziOggetti && $form->get('data')->getData()){
$data = $form->get('data')->getData()->format('Ymd');
$response = $this->client->request('GET', $this->getParameter('api_endpoint').'livellosensori/'.$form->get('oggetto')->getData()->getCodiceSensore().'/'.$data);
$rilevazioni = $response->toArray();
$rilevazione = end($rilevazioni);
}
return $this->render('default/gpsOggetti.html.twig', ['form'=>$form->createView(),'rilevazionei'=>$rilevazioni, 'rilevazione' => $rilevazione]);
} catch (\Exception $ex){
$this->addFlash('error', 'Non è possibile reperire dati GPS dall\' oggetto selezionato.');
return $this->render('default/gpsOggetti.html.twig', ['form'=>$form->createView(),'rilevazioni'=>$rilevazioni, 'rilevazione' => []]);
}
}
return $this->render('default/gpsOggetti.html.twig', ['form'=>$form->createView(),'rilevazioni'=>$rilevazioni, 'rilevazione' => []]);
}
#[Route(path: '/reloadmarkers', name: 'reloadMarkers')]
public function reloadMarkers()
{
$cassonetti = [];
$locations=[];
foreach ($cassonetti as $cassonetto) {
$loc=[];
$loc['id']=$cassonetto->getId();
$loc['indirizzo']=$cassonetto->getIndirizzo();
$loc['localita']=$cassonetto->getLocalita();
$loc['descrizione']=$cassonetto->getDescrizione();
$loc['lat']=$cassonetto->getLongitudine();
$loc['long']=$cassonetto->getLatitudine();
$locations[]=$loc;
}
return new JsonResponse(json_encode($locations),200,[],true);
}
#[Route(path: '/reloadmarkersautomezzi', name: 'reloadMarkersAutomezzi')]
public function reloadMarkersAutomezzi()
{
$punti = [];
$locations=[];
foreach ($punti as $punto) {
$loc=[];
$loc['id']=$punto['IdGPSTrack'];
$loc['lat']=$punto['Lat'];
$loc['long']=$punto['Lon'];
$locations[]=$loc;
}
return new JsonResponse(json_encode($locations),200,[],true);
}
#[Route(path: '/reloadpostazioni', name: 'reloadPostazioni')]
public function reloadPostazioni(Environment $environment)
{
$cassonetti = [];
$locations=[];
foreach ($cassonetti as $cassonetto) {
$loc=[];
$loc['id']=$cassonetto->getId();
$loc['indirizzo']=$cassonetto->getIndirizzo();
$loc['localita']=$cassonetto->getLocalita();
$loc['descrizione']=$cassonetto->getDescrizione();
$loc['lat']=$cassonetto->getLongitudine();
$loc['long']=$cassonetto->getLatitudine();
$locations[]=$loc;
}
$template = $environment->load("default/gpsCassonetti.html.twig");
$newLocations = $template->renderBlock('locationBlock', array('locations' => $locations));
return new Response(
json_encode(array(
'result' => 'ok',
'newLocations' => $newLocations
)
));
}
#[Route(path: '/reloadpostazioniautmezzi', name: 'reloadPostazioniAutomezzi')]
public function reloadPostazioniAutomezzi(Environment $environment)
{
$punti = [];
$locations=[];
foreach ($punti as $punto) {
$loc=[];
$loc['id']=$punto['IdGPSTrack'];
$loc['lat']=$punto['Lat'];
$loc['long']=$punto['Lon'];
$locations[]=$loc;
}
$template = $environment->load("default/gpsAutomezzi.html.twig");
$newLocations = $template->renderBlock('locationBlock', array('locations' => $locations));
return new Response(
json_encode(array(
'result' => 'ok',
'newLocations' => $newLocations
)
));
}
}