<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Routing\Annotation\Route;
use Doctrine\DBAL\Schema\ForeignKeyConstraint;
use Doctrine\ORM\Query;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpClient\HttpClient;
use App\Controller\CommunController;
use App\Controller\ParametrageController;
use App\Entity\UserClient;
use App\Services\libMQTT\src\ClientMQTT;
class PilotageController extends AbstractController
{
protected $requestStack;
public function __construct(RequestStack $requestStack)
{
$this->requestStack = $requestStack;
}
public function PilotageListeTerminaux() {
$idclient=null;
$request = $this->requestStack->getCurrentRequest();
$clients = null;
$request = $this->requestStack->getCurrentRequest();
$idclient=$request->getSession()->get('idClient');
if($idclient!=null)
{
$token = $request->getSession()->get('token');
$commun= new CommunController($this->requestStack,$token);
$terminaux= $commun->ListeTerminaux();
// return new response(var_dump($terminaux));
return $this->render('PilotageBundle/listeterminaux.html.twig', array('terminaux' => $terminaux ,'idclient' => $idclient));
}
else
{
$error = 'Fin de session';
$lastUsername ='';
return $this->render('LoginBundle/login.html.twig',
array('last_login'=> $lastUsername,
'error'=>$error));
}
}
public function PilotageBorne($idTerminal) {
$idclient=null;
$request = $this->requestStack->getCurrentRequest();
$clients = null;
$request = $this->requestStack->getCurrentRequest();
$idclient=$request->getSession()->get('idClient');
if($idclient!=null)
{$token = $request->getSession()->get('token');
$commun= new CommunController($this->requestStack,$token);
$borne= $commun->TerminalById($idTerminal);
//return new response(var_dump($borne));
$services= $commun->ServicesTerminal($idTerminal);
$rep ='/var/www/public/update'; //linux
$repList = scandir($rep,1);
return $this->render('PilotageBundle/PilotageBorne.html.twig', array('terminal' => $borne ,'idclient' => $idclient , 'services'=>$services , 'repList'=> $repList));
}
else
{
$error = 'Fin de session';
$lastUsername ='';
return $this->render('LoginBundle/login.html.twig',
array('last_login'=> $lastUsername,
'error'=>$error));
}
}
public function ActionBorne($message = "") {
$idclient=null;
$request = $this->requestStack->getCurrentRequest();
$clients = null;
$request = $this->requestStack->getCurrentRequest();
$idclient=$request->getSession()->get('idClient');
$token = $request->getSession()->get('token');
$postData = $request->request->all();
//return new response(var_dump($postData));
$action=$postData['action'];
$idSite = $postData['idTerminal'];
//SH 2024.01.11 gestion borne virtuelle
$idParent = null;
$idParent = $this-> trouverIdTreminalParent($idSite);
if($idParent!=null) $idSite= $idParent ;
//fin sh
$param= $postData['param'];
if($action=="MAJ")
{
$sujet=$idSite.'/in/MAJ/'.$action;
$msg = "https://altekip.netbase.fr/update/".$param;
}
elseif($action=="REBOOT")
{
$sujet=$idSite.'/in/MNTReboot';
$msg = $param;
}
else
{
$sujet=$idSite.'/in/SetConfig/'.$action;
$msg = $param;
}
$commun= new CommunController($this->requestStack,$token);
// $result=$commun->MessageMQTT($sujet,$msg);
//return new response($result);
$server = '192.168.1.22';
$port=1883;
$clientId='api_isipay';
$client = new ClientMQTT($server,$port, $clientId);
$client->setAuthDetails("urbaflux", "BJdYM#t8ucvN?yZMu");
$client->setParamServer($server,$port, $clientId); //fonction SH 2021.03.24
//return new Response(var_dump($client));
$result = $client->connect();
$result = $client->publish($sujet ,$msg , 0);
$client->close();
return new response(true);
}
public function ActionDistributionService($message = "") {
$idclient=null;
$request = $this->requestStack->getCurrentRequest();
$clients = null;
$request = $this->requestStack->getCurrentRequest();
$idclient=$request->getSession()->get('idClient');
$token = $request->getSession()->get('token');
$postData = $request->request->all();
// return new response(var_dump($postData));
$idSite = $postData['idTerminal'];
$idServiceType=$postData['typeService'];
$ptDist = $postData['ptDist'];
$quantite=$postData['quantite'];
//SH 2024.01.11 gestion borne virtuelle
$idParent = null;
$idParent = $this-> trouverIdTreminalParent($idSite);
//return new response(var_dump($idParent));
if($idParent!=null) $idSite= $idParent ;
//return new response(var_dump($idSite));
//fin sh
//return new response(var_dump($quantite));
/* $commun= new CommunController($this->requestStack,$token);
$res=$commun->SetDistributionService($idSite, $idServiceType, $ptDist , $quantite) ;*/
$server = '192.168.1.22';
$port=1883;
$clientId='api_isipay';
$client = new ClientMQTT($server,$port, $clientId);
$client->setAuthDetails("urbaflux", "BJdYM#t8ucvN?yZMu");
$client->setParamServer($server,$port, $clientId); //fonction SH 2021.03.24
$result = $client->connect();
// $result = $client->publish("1023/in/Distri/1" , "300" , 0);
$result = $client->publish("{$idSite}/in/SetDistri/{$ptDist}" , "{$quantite}" , 0);
// return new response(var_dump($result));
$client->close();
//SH
$this->tracabiliteDistribution(intval($postData['idTerminal']) , $ptDist , $quantite); //SH 2022.11.08 tracabilite distribution
return new response($result);
}
//SH 2022.10.28 ajout generation code d'acces
public function actionGenererCodeAcces()
{
$idclient=null;
$request = $this->requestStack->getCurrentRequest();
$clients = null;
$request = $this->requestStack->getCurrentRequest();
$idclient=$request->getSession()->get('idClient');
$token = $request->getSession()->get('token');
$postData = $request->request->all();
// return new response(var_dump($postData));
// $idSite = $postData['idTerminal'];
// $idTypeService = $postData['typeService'];
//return new response(var_dump($postData['idService']));
//Ajouter un achat administrateur
$httpClient = HttpClient::create([
'auth_bearer' => $token
]);
$response = $httpClient->request('POST',
"http://apialtekip.netbase.fr/api/achats",
['headers' => [
'Content-Type' => 'application/json',
],
'json' => [
//'dateCreation' => new \DateTime(),
'idSite' => intval($postData['idTerminal']),
'immatriculation' => $postData['immat'],
'dateAchat' => date_create('now')->format('Y-m-d H:i:s'),
'montant' => 0,
'typePaiement' => 'admin',
'transactionIdPayzen'=> ' ',
'autorisationPayzen'=> ' ',
'numeroCarte'=> ' ',
'adresseMail'=> ' ',
'statusPayzen'=> '0',
'presenceUser'=> 0,
'detailAchats'=> [
[
// 'dateCreation' => new \DateTime(),
'idService'=> intval($postData['idService']),
'quantite'=> 1,
'notify' => 0
]
]
],
]);
//fin Ajout if (200 == $response->getStatusCode()) {
//return new response(var_dump($response->getStatusCode()));
$rep = json_decode($response->getContent( ), true);
// $repid = $rep['idAchat'];
sleep(3);
$codeAcces='000000';
$responseAchat = $httpClient->request('GET',
"http://apialtekip.netbase.fr/api/achats/".intval($rep['idAchat']),
['headers' => [
'Content-Type' => 'application/json',
]
]);
$achat=null;
//return new response(var_dump($responseAchat->getContent()));
if($responseAchat->getStatusCode()==200)
{
$achat=json_decode($responseAchat->getContent(),true);
$codeAcces = $achat['CodeAcces'];
}
$this->AjoutTracabiliteGenererCode(intval($postData['idTerminal']) , $codeAcces);
return new response($codeAcces);
}
//fin SH
public function PilotageServices($idTerminal) {
$idclient=null;
$request = $this->requestStack->getCurrentRequest();
$clients = null;
$request = $this->requestStack->getCurrentRequest();
$idclient=$request->getSession()->get('idClient');
if($idclient!=null)
{
$token = $request->getSession()->get('token');
return new response(var_dump('services'));
$commun= new CommunController($this->requestStack,$token);
$borne= $commun->TerminalById($idTerminal);
// return new response(var_dump($borne));
return $this->render('PilotageBundle/listeterminaux.html.twig', array('terminaux' => $terminaux ,'idclient' => $idclient));
}
else
{
$error = 'Fin de session';
$lastUsername ='';
return $this->render('LoginBundle/login.html.twig',
array('last_login'=> $lastUsername,
'error'=>$error));
}
}
public function PilotageTerminal($idTerminal) {
// return new response(var_dump($idTerminal));
$clients = null;
$idclient=null;
$request = $this->requestStack->getCurrentRequest();
//fin SH
$idclient=$request->getSession()->get('idClient');
if($idclient!=null)
{ $postString = '{
"username": "s.handi",
"password": "urbaflux18"
}';
$opts = array('http' =>
array(
'method' => 'POST',
'header' => 'Content-type: application/json',
'content' => $postString
)
);
# Create the context
$context = stream_context_create($opts);
# Get the response (you can use this for GET)
$result = json_decode(file_get_contents('http://apialtekip.netbase.fr/authentication_token', false, $context),true);
//$result = json_decode($result,true);
$token=$result['token'];
//return new response(var_dump($token));
$httpClient = HttpClient::create([
'auth_bearer' => $token
]);
$url='http://apialtekip.netbase.fr/api/achats?idSite='.$idTerminal.'.json';
//return new response(var_dump($url));
$response = $httpClient->request('GET', $url,
['headers' => [
'Content-Type' => 'application/json',
]
]);
/*
$em->createQueryBuilder()
->select('MAX(da.idDetailAchat)')
->from(DetailAchat::class, 'da')
->getQuery()
*/
//$response->getStatusCode()
$achats=json_decode($response->getContent(),true);
return new response(var_dump($achats));
return $this->render('TransactionBundle/listeterminaux.html.twig', array('terminaux' => $terminaux ,'idclient' => $idclient));
}
else
{
$error = 'Fin de session';
$lastUsername ='';
return $this->render('LoginBundle/login.html.twig',
array('last_login'=> $lastUsername,
'error'=>$error));
}
}
public function GestionTarifs($idTerminal) {
//return new response(var_dump($idTerminal));
$idclient=null;
$request = $this->requestStack->getCurrentRequest();
$idclient=$request->getSession()->get('idClient');
if($idclient!=null)
{
$token = $request->getSession()->get('token');
$commun= new CommunController($this->requestStack,$token);
//$services= $commun->ServicesTerminal($idTerminal);
$borne= $commun->TerminalById($idTerminal);
$tarifs=$commun->TarifsTerminal($idTerminal);
$unites=$commun->getListUniteType();
// return new response(var_dump($tarifs));
//SH 2024.06.04 hirtorique changement tarifs
$httpClient = HttpClient::create([
'auth_bearer' => $token
]);
$getRes = $httpClient->request('GET',
"http://apialtekip.netbase.fr/api/historique_tarifs?idSite={$idTerminal}",
['headers' => [
'Content-Type' => 'application/json',
]
]);
$histTarifs=null;
if($getRes->getStatusCode()==200)
{
$histTarifs=json_decode($getRes->getContent(),true);
$histTarifs=$histTarifs['hydra:member'];
}
//return new response(var_dump($histTarifs));
//FIN
return $this->render('PilotageBundle/GestionTarifs.html.twig', array('terminal' => $borne , 'tarifs'=>$tarifs , 'unites'=>$unites ,'idclient' => $idclient , 'historique'=>$histTarifs));
}
else
{
$error = 'Fin de session';
$lastUsername ='';
return $this->render('LoginBundle/login.html.twig',
array('last_login'=> $lastUsername,
'error'=>$error));
}
}
public function ActionChangementTarifs($message = "") {
$idclient=null;
$request = $this->requestStack->getCurrentRequest();
$clients = null;
$request = $this->requestStack->getCurrentRequest();
$idclient=$request->getSession()->get('idClient');
$token = $request->getSession()->get('token');
$postData = $request->request->all();
//return new response(var_dump($postData));
$idTarif = $postData['idTarif'];
$idServiceType=$postData['idServiceType'];
$idSite=$postData['idSite'];
$tarif=$postData['tarif'];
$idUnite=$postData['idUnite'];
$Service=$postData['service'];
$prix=$tarif;
// return new response(var_dump($idTarif));
$commun= new CommunController($this->requestStack,$token);
$res=$commun->SetTarifService($idTarif , $idServiceType , $idSite , $tarif , $idUnite) ;
///$res=$this->SetTarifService($idTarif , $idServiceType , $idSite , $tarif , $idUnite) ;
/*********************************** */
//SH 2024.05.30 gestion modification des tarifs historique modification
$httpClient = HttpClient::create([
'auth_bearer' => $token
]);
$param = new ParametrageController($this->requestStack,$token);
$getT = $httpClient->request('GET',
"http://apialtekip.netbase.fr/api/tarifs/".$idTarif,
['headers' => [
'Content-Type' => 'application/json',
]
]);
$tarif=null;
if($getT->getStatusCode()==200) $tarif=json_decode($getT->getContent(),true);
if($tarif!=null)
{
$param->updateHistTarif($tarif['idSite'] , $tarif['idServiceType'], $token);
}
$response = $httpClient->request('PATCH',
"http://apialtekip.netbase.fr/api/tarifs/".$idTarif,
['headers' => [
'Content-Type' => 'application/merge-patch+json',
],
'json' => [
'idUniteType' => intval($idUnite),
'prix'=> floatval($prix)
],
]);
//return new response(var_dump($response->getStatusCode()));
if($response->getStatusCode()==200) $message='Modification prise en compte ';
else $message='Erreur lors de la modification du service';
$param->addHistTarif(intval($idSite) , intval($idServiceType) , intval($idUnite) , 'EUR' , '€' , floatval($prix) , $token);
$this->tracabiliteTarif(intval($idSite) , $idServiceType , $idUnite , $prix);
//fin SH
/******************************** */
return new response(var_dump($res));
}
public function SetTarifService($idTarif , $idServiceType ,$idSite , $prix , $idUnite)
{
try
{
//return new Response(var_dump($idTarif));
// $tarif=$this->getTarif($idTarif);
// return new Response(var_dump($tarif));
$token = $request->getSession()->get('token');
$httpClient = HttpClient::create([
'auth_bearer' => $this->token
]);
$response = $httpClient->request('GET',
"http://apialtekip.netbase.fr/api/services.json",
['headers' => [
'Content-Type' => 'application/json',
]
]);
$services=null;
if($response->getStatusCode()==200) $services=json_decode($response->getContent(),true);
$response1 = $httpClient->request('GET',
"http://apialtekip.netbase.fr/api/unite_types/".$idUnite.".json",
['headers' => [
'Content-Type' => 'application/json',
]
]);
$unite=null;
if($response1->getStatusCode()==200) $unite=json_decode($response1->getContent(),true);
// return new Response(var_dump($unite));
$QteSecondes=$unite['secondes'];
$i=0;
$tarifServices=null;
foreach($services as $serv)
{
if(($serv['idServiceType']==$idServiceType) and ($serv['idSite']==$idSite))
{
$tarifServices[$i]=$serv;
$i++;
}
}
// return new Response(var_dump($tarifServices));
foreach($services as $serv)
{
$pointD=$serv['pointDistribution'];
$sujet=$idSite.'/in/SetConfig/Prix'.$pointD;
$sujet2=$idSite.'/in/SetConfig/Qte'.$pointD;
//return new Response(var_dump($pointD));
//$res=$this->MessageMQTT($sujet,$tarif);
//return new Response(var_dump($res));
$server = '192.168.1.22';
$port=1883;
$clientId='api_isipay';
$client = new ClientMQTT($server,$port, $clientId);
$client->setAuthDetails("urbaflux", "BJdYM#t8ucvN?yZMu");
$client->setParamServer($server,$port, $clientId); //fonction SH 2021.03.24
//return new Response(var_dump($client));
$result = $client->connect();
$result = $client->publish($sujet ,$prix , 0);
$result = $client->publish($sujet2 ,$QteSecondes , 0);
$client->close();
//return new Response(var_dump($sujet));
$response = $httpClient->request('PATCH',
"http://apialtekip.netbase.fr/api/tarifs/".$idTarif,
['headers' => [
'Content-Type' => 'application/merge-patch+json',
],
'json' => ['prix' => floatval($prix) , 'idUniteType' => intval($idUnite)],
]);
$tarif=null;
if($response->getStatusCode()==200) return true;
else return false; //$tarif=json_decode($response->getContent(),true);
// return new Response(var_dump($response));
}
}
catch (\Exception $e) {
}
}
/*****************SH 2022.11.04 gestion barrires ISIPAY++********************* */
public function PilotageBarrieres($idTerminal , $nomTerminal , $etatTerminal) {
$idclient=null;
$request = $this->requestStack->getCurrentRequest();
$clients = null;
$request = $this->requestStack->getCurrentRequest();
$idclient=$request->getSession()->get('idClient');
if($idclient!=null)
{
$token = $request->getSession()->get('token');
$httpClient = HttpClient::create([
'auth_bearer' => $token
]);
$url0='http://apialtekip.netbase.fr/api/terminals/'.$idTerminal;
$response0 = $httpClient->request('GET', $url0,
['headers' => [
'Content-Type' => 'application/json',
]
]);
if($response0->getStatusCode()==200) $etatTerminal=json_decode($response0->getContent(),true)['etatTerminal'];
$url='http://apialtekip.netbase.fr/api/etat_voies?idTerminal='.$idTerminal;
//return new response(var_dump($url));
//$url ='http://apialtekip.netbase.fr/api/etat_voies?idTerminal=1027';
$response = $httpClient->request('GET', $url,
['headers' => [
'Content-Type' => 'application/json',
]
]);
$barrieres=null;
if($response->getStatusCode()==200) $barrieres=json_decode($response->getContent(),true);
$barrieres=$barrieres['hydra:member'];
// return new response(var_dump($barrieres));
return $this->render('PilotageBundle/PilotageBarrieres.html.twig', array('barrieres' => $barrieres ,'idclient' => $idclient , 'nomTerminal' => $nomTerminal , 'idTerminal' => $idTerminal , 'etatTerminal'=>$etatTerminal));
}
else
{
$error = 'Fin de session';
$lastUsername ='';
return $this->render('LoginBundle/login.html.twig',
array('last_login'=> $lastUsername,
'error'=>$error));
}
}
public function ActionBarriere($message = "") {
$idclient=null;
$request = $this->requestStack->getCurrentRequest();
$clients = null;
$request = $this->requestStack->getCurrentRequest();
$idclient=$request->getSession()->get('idClient');
$token = $request->getSession()->get('token');
$postData = $request->request->all();
//return new response(var_dump($postData));
$idSite = $postData['idTerminal'];
$typeAction = $postData['typeAction'];
$valeur = $postData['idAction'];
$idBarriere = $postData['idBarriere'];
$typeVoie = $postData['typeVoie'];
$sujet=$idSite.'/in/'.$typeAction.'/'.$idBarriere.'/'.$typeVoie;
//return new response(var_dump($sujet));
$commun= new CommunController($this->requestStack,$token);
$result=$commun->MessageMQTT($sujet,$valeur);
$ajout=$this->AjoutTracabiliteBarriere(intval($idSite) , $typeAction , $valeur , $typeVoie);
// return new response(var_dump($ajout));
return new response($result);
}
/***************** FIN SH ********************/
/*********** SH 2022.11.08 tracabilite ************ */
private function AjoutTracabilite($idTerminal , $evenement )
{
$request = $this->requestStack->getCurrentRequest();
$utilisateur = $request->getSession()->get('login').': '.$request->getSession()->get('nom').' '.$request->getSession()->get('prenom');
$token = $request->getSession()->get('token');
$postData = $request->request->all();
$httpClient = HttpClient::create([
'auth_bearer' => $token
]);
$response = $httpClient->request('POST',
"http://apialtekip.netbase.fr/api/tracabilites",
['headers' => [
'Content-Type' => 'application/json',
],
'json' => [
'idTerminal'=> $idTerminal,
'origine'=> "Netbase",
'evenement'=> $evenement,
'utilisateur'=> $utilisateur
],
]);
$rep = json_decode($response->getContent( ), true);
return $rep;
}
public function AjoutTracabiliteBarriere($idTerminal , $typeAction , $valeur , $typeVoie)
{
$evenement = '';
if($typeAction =='ModeFct')
{
if($valeur=='0') $evenement='Activation mode manuel: '.$typeVoie;
elseif($valeur=='1') $evenement='Activation mode automatique: '.$typeVoie;
}
elseif($typeAction =='Piloter')
{
if($valeur=='0') $evenement='Fermeture manuelle: '.$typeVoie;
elseif($valeur=='1') $evenement='Ouverture manuelle '.$typeVoie;
}
$this->AjoutTracabilite($idTerminal , $evenement );
}
public function AjoutTracabiliteGenererCode($idTerminal , $code)
{
$evenement = '';
$evenement ='Generation code acces : '.$code;
$this->AjoutTracabilite($idTerminal , $evenement );
}
public function tracabiliteDistribution($idTerminal , $pointD , $quantite)
{
if($quantite=='-1') $evenement ='Forçage permanent distribution/ point de distribution:'.$pointD;
else $evenement ='Arret distribution/ point de distribution:'.$pointD;
$this->AjoutTracabilite($idTerminal , $evenement );
}
public function tracabiliteBorne($idTerminal , $action)
{
if($action=='ES') $evenement ='Mise en service';
if($action=='HS') $evenement ='Mise hors service';
$this->AjoutTracabilite($idTerminal , $evenement );
}
public function tracabiliteTarif($idTerminal , $typeService , $unite , $prix)
{
$request = $this->requestStack->getCurrentRequest();
$token = $request->getSession()->get('token');
$commun= new CommunController($this->requestStack,$token);
$libTypeService = $commun->getLibelleServiceType(intval($typeService));
$libUnite = $commun->getLibelleUniteType($unite);
$libUnite = $libUnite['libelleType'];
$evenement ='Changement tarif type service :'.$libTypeService.' prix: '.$prix.'EUR unite: '.$libUnite;
$this->AjoutTracabilite($idTerminal , $evenement );
}
/*********************************** */
//SH 2024.01.11 gestion borne virtuelle
public function VirtuelleBorne()
{
$request = $this->requestStack->getCurrentRequest();
$jsonData = json_decode($request->getContent(),true);
//return new Response (var_dump($jsonData));
$con = $this->getDoctrine()->getConnection('bddg');
$sql = $con->prepare("select id_terminal from terminal
where id_terminal_parent = ?");
$sql->bindValue(1, $jsonData['idTerminal']);
$sql->execute();
$bornesLiees = $sql->fetchAll(Query::HYDRATE_ARRAY);
//return new Response(var_dump($bornesLiees[0]['id_terminal']));
try
{
if(count($bornesLiees) > 0) {
for($i=0; $i<count($bornesLiees) ;$i++)
{
//return new Response(var_dump($bornesLiees[$i]));
$con = $this->getDoctrine()->getConnection('isipay');
$sql = $con->prepare("
update tb_service set disponible=:dispo where idSite=:idT and pointDistribution=:ptDist
");
$sql->bindValue('dispo', $jsonData['disponible']);
$sql->bindValue('idT', $bornesLiees[$i]['id_terminal']);
$sql->bindValue('ptDist', $jsonData['pointDistr']);
$sql->execute();
}
}
return new Response('update OK!', 201);
}
catch (\Exception $e) {
//return new Response(var_dump($e));
return new Response('update KO! '.$e->message(), 406);
}
}
public function trouverIdTreminalParent($idTerminal)
{
$con = $this->getDoctrine()->getConnection('bddg');
$sql = $con->prepare("select * from terminal where id_terminal= ?");
$sql->bindValue(1, $idTerminal);
$sql->execute();
$Term = $sql->fetch(Query::HYDRATE_ARRAY);
return $Term['ID_TERMINAL_PARENT'];
}
//fin SH
}