<?php
namespace App\Controller;
use DateTime;
use DatePeriod;
use DateInterval;
use Dompdf\Dompdf;
use App\Entity\Sms;
use Dompdf\Options;
use App\Entity\Page;
use App\Entity\Droit;
use App\Entity\Ligne;
use App\Entity\Centre;
use App\Entity\Gerant;
use App\Entity\Marque;
use App\Entity\Modele;
use IntlDateFormatter;
use App\Entity\Adresse;
use App\Entity\Energie;
use App\Entity\MarqueCl;
use App\Entity\ModeleCl;
use App\Entity\Promotion;
use App\Form\AdresseType;
use App\Entity\CentreType;
use App\Entity\Partenaire;
use App\Entity\Rendezvous;
use App\Entity\TypeVisite;
use App\Entity\ClientLibre;
use App\Entity\Utilisateur;
use App\Entity\CentreGroupe;
use App\Entity\ClientCompte;
use App\Entity\LigneBlocage;
use App\Entity\LigneHoraire;
use App\Entity\TypeVehicule;
use App\Form\CentreFormType;
use Psr\Log\LoggerInterface;
use App\Entity\CentreHoraire;
use App\Form\UtilisateurType;
use App\Entity\CentreFonction;
use App\Service\AccessService;
use App\Entity\ParametreCentre;
use App\Entity\RendezVousInfos;
use App\Entity\UtilisateurInfo;
use Doctrine\Persistence\Proxy;
use App\Entity\CentrePartenaire;
use App\Entity\CentrePrestation;
use App\Entity\PromotionCreneau;
use App\Form\ParametreCentreType;
use Symfony\Component\Mime\Email;
use App\Entity\RendezVousVehicule;
use App\Entity\PromotionRecurrence;
use App\Entity\ParametreCentreAdmin;
use App\Entity\RendezVousRecurrence;
use App\Repository\ModeleRepository;
use App\Controller\PaylineController;
use App\Entity\CentreCouponPromotion;
use App\Entity\ParametreCentreGroupe;
use App\Entity\RendezVousFacturation;
use App\Entity\LigneBlocageRecurrence;
use App\Form\ParametreCentreGroupeType;
use Doctrine\Persistence\ObjectManager;
use Doctrine\ORM\EntityManagerInterface;
use App\Entity\RendezVousPaiementMultiple;
use SebastianBergmann\Environment\Console;
use Symfony\Contracts\Cache\ItemInterface;
use Knp\Component\Pager\PaginatorInterface;
use Symfony\Contracts\Cache\CacheInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use App\Repository\RendezVousVehiculeRepository;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Security\Http\SecurityEvents;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\Form\Extension\Core\Type\TimeType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Doctrine\DBAL\Exception\ForeignKeyConstraintViolationException;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
use function PHPUnit\Framework\isEmpty;
// Nous avons besoin d'accéder à la requête pour obtenir le numéro de page
class AdminController extends AbstractController
{
public $id;
protected $em;
protected $cache;
protected $mois;
protected $jours;
private $passwordHasher;
private $apiController;
private $PaylineController;
private $accessService;
private $session;
private $logger;
private $mailer;
public function __construct(EntityManagerInterface $entityManager, CacheInterface $cache, UserPasswordHasherInterface $passwordHasher, ApiController $apiController, PaylineController $PaylineController, AccessService $accessService, SessionInterface $session, LoggerInterface $logger, MailerInterface $mailer)
{
$this->jours = array('Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi', 'Dimanche');
$this->mois = array(1 => "Janvier", 2 => "Février", 3 => "Mars", 4 => "Avril", 5 => "Mai", 6 => "Juin", 7 => "Juillet", 8 => "Août", 9 => "Septembre", 10 => "Octobre", 11 => "Novembre", 12 => "Décembre");
$this->em = $entityManager;
$this->cache = $cache;
$this->passwordHasher = $passwordHasher;
$this->apiController = $apiController;
$this->PaylineController = $PaylineController;
$this->accessService = $accessService;
$this->session = $session;
$this->logger = $logger;
$this->mailer = $mailer;
if (array_key_exists('SERVER_NAME', $_SERVER)) {
$ParametreCentreGroupe = $this->em->getRepository(ParametreCentreGroupe::class)->findOneByUrl($_SERVER['SERVER_NAME']);
} else {
$ParametreCentreGroupe = false;
}
if ($ParametreCentreGroupe) {
$this->id = $ParametreCentreGroupe->getCentreGroupe()->getId();
$this->session->set('centre_groupe', $ParametreCentreGroupe->getCentreGroupe()->getId());
} else {
$this->id = 1;
$this->session->set('centre_groupe', $this->id);
}
}
/**
* @Route("/admin/home", name="home")
*/
public function index(Request $request): Response
{
//1590708
// $this->getCouponCteasy('CT8002LWC');
// $conn_rdv = new mysqli('185.43.45.121', 'ct_rdv', 'MhwAJSB5vjFYHeyf', 'ct_rdv_shared', 3306);
// $conn_rdv->set_charset("utf8");
// // Check connection
// if ($conn_rdv->connect_error) {
// die("Connection failed base_datas_rdv: " . $conn_rdv->connect_error);
// }
// $ligne_rank = 0;
// $rdv = $this->em->getRepository(RendezVous::class)->find(720387);
// dd($rdv->getCentre()->getCentreGroupe()->getLignesByTypes(array('VL', 'Mixte')));
// foreach ($rdv->getCentre()->getCentreGroupe()->getLignesByTypes(array('VL', 'Mixte')) as $key => $ligne) {
// //je suis dedans
// $ligne_rank++;
// if ($rdv->getLigne()->getId() == $ligne->getId()) {
// break;
// }
// //$ligne_rank++;
// }
// $RendezVous = $this->em->getRepository(RendezVous::class)->find(1367310);
// $this->Attestation_Rendez_Vous($RendezVous);
$CentreGroupe = $this->apiController->MarqueByPopulaire();
return $this->render('public/construction.html.twig', [
'controller_name' => 'AdminController',
]);
}
/**
* @Route("/administration/calendrier", name="administration")
*/
public function administration(): Response
{
return $this->redirectToRoute('calendrier');
}
/**
* @Route("/admin", name="adminRedir")
*/
public function adminRedir(): Response
{
return $this->redirectToRoute('calendrier');
}
private function creneauxDispo($start, $end, $prestationId)
{
set_time_limit(1000);
$events = array();
/****************************************
Définition de l'intervalle de recherche
*****************************************/
$bornes_recherche = array();
list($anneeStart, $moisStart, $jourStart) = explode("-", $start);
$bornes_recherche['debut'] = new DateTime();
$jourStart = explode('T', $jourStart)[0];
$bornes_recherche['debut']->setDate($anneeStart, $moisStart, $jourStart);
if ($bornes_recherche['debut'] > new DateTime()) {
$bornes_recherche['debut']->setTime(0, 0);
}
if ($bornes_recherche['debut'] == new \DateTime()) {
$bornes_recherche['debut']->setTime(date('H'), date('i'));
}
if ($bornes_recherche['debut'] < new DateTime()) {
$bornes_recherche['debut'] = new DateTime();
}
list($anneeEnd, $moisEnd, $jourEnd) = explode("-", $end);
$bornes_recherche['fin'] = new DateTime();
$jourEnd = explode('T', $jourEnd)[0];
$bornes_recherche['fin']->setDate($anneeEnd, $moisEnd, $jourEnd);
$bornes_recherche['fin']->setTime(23, 59);
$centre = $this->em->getRepository(Centre::class)->findByPrestation($prestationId);
$centre_id = $centre[0]->getId();
$centre_type_id = $centre[0]->getCentreType()->getId();
/** @var Centre $data_centre */
$data_centre = $this->cache->get('Centre_' . $centre_id, function () use ($centre_id) {
$data_centre = $this->em->getRepository(Centre::class)->find($centre_id);
return $data_centre;
});
if ($prestationId !== 'null') {
$data_Prestation = $this->cache->get('Prestation' . $prestationId, function () use ($prestationId) {
$data_Prestation = $this->em->getRepository(CentrePrestation::class)->find($prestationId);
return $data_Prestation;
});
$duree = $data_Prestation->getPstDuree();
} else {
return null;
}
/****************************************
Récupération des horaires d'ouverture
****************************************/
$data_Horaire_centre = $this->cache->get('Horaire_' . $data_centre->getid(), function () use ($data_centre) {
$data_Horaire_centre = $this->em->getRepository(CentreHoraire::class)->getHoraires($data_centre->getid());
return $data_Horaire_centre;
});
/**************************************
Récupération des lignes
**************************************/
// $data_Ligne = $this->cache->get('Ligne_' . $this->id . '_' . $data_centre->getCentreType()->getId(), function () use ($data_centre) {
// $data_Ligne = $this->em->getRepository(Ligne::class)->findLigneAndHoraireByTypeCentre($this->id, $data_centre->getCentreType()->getId());
// return $data_Ligne;
// });
$data_Ligne = $this->em->getRepository(Ligne::class)->findLigneAndHoraireByCentreGroupe($this->id);
$holidaysCentre = $this->em->getrepository(ParametreCentre::class)->findHolidaysByCentreGroupeAndCentreType($this->id, $centre_type_id);
$holidaysCentreFlat = array_reduce($holidaysCentre, function ($carry, $item) {
return array_merge($carry, $item['holidays']);
}, []);
$year = date("Y");
$holidays = $this->apiController->getFormateHolidays($holidaysCentreFlat, $year);
/***************************************
Récupération des rendez-vous compris
dans la zone de requête
***************************************/
// $data_Rendezvous = $this->cache->get('Rendezvous_3', function () {
//$data_Rendezvous = $this->em->getRepository(Rendezvous::class)->findUpcomingRendezVousByCentre($centre_id, $bornes_recherche['debut'], $bornes_recherche['fin']);
$data_Rendezvous = $this->em->getRepository(Rendezvous::class)->findUpcomingRendezVousByCentreDate($this->id, $bornes_recherche['debut'], $bornes_recherche['fin']);
// return $data_Rendezvous;
// });
// dd($data_Rendezvous , $data_Rendezvous_all);
/****************************************
Récupération des blocages
****************************************/
// $data_LigneBlocage = $this->cache->get('LigneBlocage_3_1', function () {
//$data_LigneBlocage = $this->em->getRepository(LigneBlocage::class)->findByCentre($this->id, $data_centre->getCentreType()->getId(), $bornes_recherche['debut'], $bornes_recherche['fin']);
$data_LigneBlocage = $this->em->getrepository(LigneBlocage::class)->findUpcomingBlocageByCentreGroupeIdAndDates($this->id, $bornes_recherche['debut'], $bornes_recherche['fin']);
// return $data_LigneBlocage;
// });
$i = 0;
$evtFin = new \DateTime();
foreach ($data_Rendezvous as $key => $rdv) {
$Indice = array_search($rdv->getLigne()->getid(), array_column($data_Ligne, 'id'));
if($Indice || $Indice == 0){
$evtFin = clone $rdv->getRdvDateHeure();
$evtFin = $evtFin->modify('+' . $rdv->getRdvDuree() . ' minutes');
$data_Ligne[$rdv->getLigne()->getid()]['evts'][$i] = ['type' => 'rdv', 'debut' => $rdv->getRdvDateHeure(), 'fin' => $evtFin];
$i++;
}
}
foreach ($data_LigneBlocage as $key => $blocage) {
$Indice = array_search($blocage->getLigne()->getid(), array_column($data_Ligne, 'id'));
if($Indice || $Indice == 0){
$data_Ligne[$blocage->getLigne()->getid()]['evts'][$i] = ['type' => 'bl', 'debut' => $blocage->getBlcDebut(), 'fin' => $blocage->getBlcFin()];
$i++;
}
}
/****************************************
Récupération de la liste des demi-journées
*****************************************/
$demijournees = array();
$demijournee = clone $bornes_recherche['debut'];
while ($demijournee <= $bornes_recherche['fin']) {
$demijournees[] = array(
'date' => $demijournee->format('Y-m-d'),
'jour' => $this->jours[$demijournee->format('N') - 1],
'periode' => 'matin',
);
$demijournees[] = array(
'date' => $demijournee->format('Y-m-d'),
'jour' => $this->jours[$demijournee->format('N') - 1],
'periode' => 'apres_midi',
);
$demijournee->modify('+ 1 day');
}
//$holidays = $this->apiController->getFormateHolidays($data_centre->getCtrParametreCentre()->getHolidays(), $bornes_recherche['debut']->format('Y'));
/****************************************
Récupération des horaires d'ouverture
****************************************/
$centres = $this->em->getRepository(Centre::class)->findBy(['centre_groupe' => $this->id, 'centre_type' => 1]);
if (!$centres) {
$centres = $this->em->getRepository(Centre::class)->findBy(['centre_groupe' => $this->id, 'centre_type' => 2]);
}
if (!$centres) {
$centres = $this->em->getRepository(Centre::class)->findBy(['centre_groupe' => $this->id, 'centre_type' => 4]);
}
foreach ($centres as $key => $centre) {
$horaires = $this->em->getRepository(CentreHoraire::class)->getHoraires($centre->getid());
foreach ($demijournees as $key => $demijournee) {
$objet = $horaires[$demijournee['jour']][$demijournee['periode']];
$demijournees[$key]['ouverture'] = DateTime::createFromFormat('Y-m-d H:i', $demijournee['date'] . ' ' . $objet['ouverture']->format('H:i'));
$demijournees[$key]['fermeture'] = DateTime::createFromFormat('Y-m-d H:i', $demijournee['date'] . ' ' . $objet['fermeture']->format('H:i'));
$demijournees[$key]['ouvert'] = $objet['ouvert'];
// if (in_array($demijournee['date'], $holidays)) {
// $demijournees[$key]['ouvert'] = false;
// }
$demijournees[$key]['jourNumber'] = DateTime::createFromFormat('Y-m-d H:i', $demijournee['date'] . ' ' . $objet['ouverture']->format('H:i'))->format('N');
$demijournees[$key]['journeeContinue'] = $objet['journeeContinue'];
}
}
/**********************************
Liste des rendez-vous disponibles
***********************************/
$creneaux = array();
$hourEndBlockRdv = null;
$hourStartBlockRdv = null;
$hourBeforeBlock = null;
if ($data_centre->getCtrParametreCentre()->isIsBlockRdv()) {
//$nbHoursBlockRdv=$sous_centre->getConfiguration()->getNbHoursBlockRdv();
$hourEndBlockRdv = new \DateTime();
$hourEndBlockRdv->setTime($data_centre->getCtrParametreCentre()->getHourStartBlockRdv(), 00);
$hourEndBlockRdv->modify('+ ' . $data_centre->getCtrParametreCentre()->getNbHoursBlockRdv() . ' hours');
$hourStartBlockRdv = new \DateTime();
$hourStartBlockRdv->setTime($data_centre->getCtrParametreCentre()->getHourStartBlockRdv(), 00);
if ($data_centre->getCtrParametreCentre()->getNbHoursBeforeBlockRdv()) {
$hourBeforeBlock = new \DateTime();
$hourBeforeBlock->modify('+ ' . $data_centre->getCtrParametreCentre()->getNbHoursBeforeBlockRdv() . ' hours');
}
}
foreach ($demijournees as $demijournee) {
//on verifie si la journee est un journée chomée
if (in_array($demijournee['date'], $holidays)) {
continue;
}
$heure = clone $demijournee['ouverture'];
$dernier_creneau = clone $demijournee['fermeture'];
$dernier_creneau->modify('- ' . $duree . ' minutes');
foreach ($data_Ligne as $key => $ligne) {
$periode = $demijournee['periode'] == 'matin' ? 'am' : 'pm';
//on test si la ligne ouvre avant l'ouverture du centre au public
if ($demijournee['ouverture']->format('Hi') > $ligne["horaires"][$demijournee['jourNumber']][$periode]['ouverture']) {
$heure = clone $demijournee['ouverture'];
} else {
$heure = DateTime::createFromFormat('Y-m-d Hi', $demijournee['date'] . ' ' . $ligne["horaires"][$demijournee['jourNumber']][$periode]['ouverture']);
}
$dernier_creneau_ligne = DateTime::createFromFormat('Y-m-d Hi', $demijournee['date'] . ' ' . $ligne["horaires"][$demijournee['jourNumber']][$periode]['fermeture']);
if ($ligne["horaires"][$demijournee['jourNumber']][$periode]['fermeture'] == "") {
$dernier_creneau_ligne = DateTime::createFromFormat('Y-m-d Hi', $demijournee['date'] . ' 0000');
}
$dernier_creneau_ligne->modify('- ' . $duree . ' minutes');
$w = 0;
while (($demijournee['journeeContinue'] and $periode == 'pm' and $heure <= $dernier_creneau) or ($heure <= $dernier_creneau and $heure <= $dernier_creneau_ligne)) {
if (isset($creneau[$heure->getTimestamp()])) {
$heure = $heure->modify('+ ' . $duree . ' minutes');
} else {
$fin = clone $heure;
$fin->modify('+ ' . $duree . ' minutes');
/***********************************
Evenements existant (rdv et blc)
***********************************/
$creneau_disponible = true;
if ($demijournee['journeeContinue']) {
if ($heure < $bornes_recherche['debut'] or ($periode == 'pm' and $fin > $dernier_creneau)) {
$creneau_disponible = false;
break;
}
} else {
if ($heure < $bornes_recherche['debut']) {
$creneau_disponible = false;
}
}
usort($ligne['evts'], function ($a, $b) {
return $a['debut'] <=> $b['debut'];
});
foreach ($ligne['evts'] as $key_evt => $evt) {
if ($this->apiController->creneauIsInBetween($evt['debut'], $evt['fin'], $heure, $fin)) {
$creneau_disponible = false;
$fin = clone $evt['fin'];
break;
}
}
$now = new \DateTime();
if ($data_centre->getCtrParametreCentre()->isIsBlockRdv() and $now >= $hourStartBlockRdv and $heure >= $hourStartBlockRdv and $heure < $hourEndBlockRdv) {
$creneau_disponible = false;
}
if ($data_centre->getCtrParametreCentre()->isIsBlockRdv() and $hourBeforeBlock > $heure ) {
$creneau_disponible = false;
}
if (!$data_centre->getCtrParametreCentreAdmin()->isPcaCalendrierRemplirTrou()) {
$fin = clone $heure;
$fin->modify('+ ' . $duree . ' minutes');
}
if ($creneau_disponible && (($centre_type_id == 1 && $ligne['isVl']) || ($centre_type_id == 2 && $ligne['isPl']) || ($centre_type_id == 4 && $ligne['isCl']))) {
$Lignes = $this->em->getrepository(Ligne::class)->findByLigneDisponible($data_centre->getCentreGroupe()->getid(), $heure, $fin, $centre_type_id);
if ($Lignes) {
$creneaux[$heure->getTimestamp()] = clone $heure;
}
$end = clone $heure;
$end->modify('+ ' . $duree . ' minutes');
$events[] = [
'resourceId' => $ligne['id'],
'title' => '',
'start' => $heure->format('Y-m-d H:i:s'),
'end' => $end->format('Y-m-d H:i:s'),
'backgroundColor' => '#ffffff',
'extendedProps' => [
'rdvDispo' => true,
'ligneId' => $ligne['id'],
'isVl' => $ligne['isVl'],
'isPl' => $ligne['isPl'],
'isCl' => $ligne['isCl'],
],
];
// }
}
$heure = clone $fin;
}
$w++;
}
}
}
return $events;
}
/**
* @Route("/administration/login", name="administrationlogin")
*/
public function administrationlogin(): Response
{
return $this->redirectToRoute('calendrier');
}
// Gestion des Fonctions Admin -------------------------------------------------------
private function getCleanEnergies($energiesCentre)
{
$cleanEnergies = [];
$denominations = [];
foreach ($energiesCentre as $entry) {
foreach ($entry['energies'] as $energy) {
$denominations[] = $energy;
}
}
$denominations = array_unique($denominations);
$data_energies = $this->em->getRepository(Energie::class)->findBy(['denomination' => $denominations]);
foreach ($data_energies as $data_energie) {
$cleanEnergies[] = $data_energie;
}
return $cleanEnergies;
}
/**
* @return string
*/
private function decrypt_encrypt($action, $string)
{
$output = false;
$encrypt_method = "AES-256-CBC";
$secret_key = 'This is my secret key';
$secret_iv = 'This is my secret iv';
// hash
$key = hash('sha256', $secret_key);
// iv - encrypt method AES-256-CBC expects 16 bytes - else you will get a warning
$iv = substr(hash('sha256', $secret_iv), 0, 16);
if ($action == 'encrypt') {
$output = openssl_encrypt($string, $encrypt_method, $key, 0, $iv);
$output = base64_encode($output);
} else if ($action == 'decrypt') {
$output = openssl_decrypt(base64_decode($string), $encrypt_method, $key, 0, $iv);
}
return $output;
}
private function checkUserAccessToCentre($id_centre)
{
$user = $this->getUser();
$centreGlobalArray = [];
/** @var UtilisateurInfo $info */
foreach ($user->getUtilisateurInfos() as $info) {
$centreGlobalArray[] = $info->getUtlInfFonction()->getCentreGroupe()->getId();
}
if (!$user) {
$this->addFlash('error', 'Vous devez être connecté pour accéder à cette ressource!');
return $this->redirectToRoute('admin_login');
}
$userCentreGroupe = $user->getCentreGroupe();
if ($user->getUtlUsername() == 'AbsSuperAdmin') {
} else if (!$userCentreGroupe) {
$this->addFlash('error', 'Votre utilisateur n\'est associé à aucun groupe de centres!');
return $this->redirectToRoute('admin_erreur');
}
$centre = $this->em->getRepository(Centre::class)->find($id_centre);
if (!$centre) {
$this->addFlash('error', 'Centre introuvable!');
return $this->redirectToRoute('admin_erreur');
}
if ($user->getUtlUsername() == 'AbsSuperAdmin') {
} else if (!in_array($centre->getCentreGroupe()->getId(), $centreGlobalArray)) {
$this->addFlash('error', 'Impossible, vous n\'avez pas accès à ce centre!');
return $this->redirectToRoute('admin_erreur');
}
return true;
}
private function checkPermissionAdmin($typeDroit, $route)
{
$user = $this->getUser();
$centreGlobalArray = [];
/** @var UtilisateurInfo $info */
foreach ($user->getUtilisateurInfos() as $info) {
$centreGlobalArray[] = $info->getUtlInfFonction()->getCentreGroupe()->getId();
}
if ($user->getUtlUsername() == 'AbsSuperAdmin') {
} else if (!in_array($this->id, $centreGlobalArray)) {
$this->addFlash('error', 'Impossible, vous n\'avez pas accés à ce centre!');
return $this->redirectToRoute('admin_erreur');
}
$droits = $this->session->get('droits' . $user->getId());
foreach ($droits as $droit) {
$page = $droit->getDrtPage();
if ($page && $page->getPgeRoute() == $route) {
switch ($typeDroit) {
case 'lire':
$drtDroitLire = $droit->isDrtLire();
if (!$drtDroitLire) {
$this->addFlash('error', 'Impossible, vous n\'avez pas accés à cette page');
return $this->redirectToRoute('admin_erreur');
}
break;
case 'ecrire':
$drtDroitEcrire = $droit->isDrtEcrire();
if (!$drtDroitEcrire) {
$this->addFlash('error', 'Impossible, vous n\'avez pas accés à l\'écriture sur cette page');
return $this->redirectToRoute('admin_erreur');
}
break;
case 'supp':
$drtDroitSupp = $droit->isDrtSuppression();
if (!$drtDroitSupp) {
$this->addFlash('error', 'Impossible, vous n\'avez pas accés à la suppression sur cette page');
return $this->redirectToRoute('admin_erreur');
}
break;
}
break;
}
}
return true;
}
private function checkAllPermissionAdmin($route)
{
$user = $this->getUser();
$centreGlobalArray = [];
/** @var UtilisateurInfo $info */
foreach ($user->getUtilisateurInfos() as $info) {
$centreGlobalArray[] = $info->getUtlInfFonction()->getCentreGroupe()->getId();
}
if ($user->getUtlUsername() == 'AbsSuperAdmin') {
} else if (!in_array($this->id, $centreGlobalArray)) {
$this->addFlash('error', 'Impossible, vous n\'avez pas accés à ce centre!');
return $this->redirectToRoute('admin_erreur');
}
$droits = $this->session->get('droits' . $user->getId());
$drtDroit = array();
foreach ($droits as $droit) {
$page = $droit->getDrtPage();
if ($page && $page->getPgeRoute() == $route) {
$drtDroit = [
'lire' => $droit->isDrtLire(),
'ecrire' => $droit->isDrtEcrire(),
'supp' => $droit->isDrtSuppression(),
];
break;
}
}
if (!$drtDroit) {
$drtDroit = [
'lire' => false,
'ecrire' => false,
'supp' => false,
];
}
return $drtDroit;
}
/**
* @Route("/admin/attestation_rendez_vous/{id}", name="attestation_rendez_vous")
*/
public function attestation_rendez_vous(RendezVous $RendezVous)
{
// $RendezVous = $this->em->getRepository(RendezVous::class)->find(1367310);
// Configure Dompdf according to your needs
$pdfOptions = new Options();
$pdfOptions->set('defaultFont', 'Arial');
$pdfOptions->set('isRemoteEnabled', true);
// $pdfOptions->set('chroot', [$this->getParameter('Directory')]);
// Instantiate Dompdf with our options
$dompdf = new Dompdf($pdfOptions);
// return $this->render('admin/template/confirmation_rdv.html.twig', [
$html = $this->renderView('admin/template/confirmation_rdv.html.twig', [
'rdv' => $RendezVous,
]);
$dompdf->loadHtml($html);
// (Optional) Setup the paper size and orientation 'portrait' or 'portrait'
$dompdf->setPaper('A4', 'portrait');
// Render the HTML as PDF
$dompdf->render();
$dompdf->stream('confirmation_rdv.pdf', array('Attachment' => 0));
// $output = $dompdf->output();
// $path = 'uploads/'.$RendezVous->getCentre()->getId();
// if (!file_exists($path)) {
// mkdir($path, 0777, true);
// }
// file_put_contents($path.'/confirmation_rdv.pdf', $output);
// return new JsonResponse($path.'/confirmation_rdv.pdf');
return new JsonResponse('ok');
}
// Gestion du tableau de bord -----------------------------------------------------
/**
* @Route("/admin/dashboard", name="dashboard")
*/
public function dashboard(SessionInterface $session)
{
$thisCentreGroupe = $this->em->getrepository(CentreGroupe::class)->find($this->id);
$permissionResult = $this->checkPermissionAdmin("lire", "dashboard");
$allpermission = $this->checkAllPermissionAdmin("dashboard");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
$nbr_client_compte = $this->em->getrepository(ClientCompte::class)->countClientCompteByCentreGroupe($this->id);
$centreTypesId = $this->em->getrepository(CentreType::class)->findTypesIdByCentreGroupeId($this->id);
return $this->render('admin/dashboard.html.twig', [
'centre_groupe_name' => $thisCentreGroupe->getCgNom(),
'nbr_client_compte' => $nbr_client_compte,
'centreTypesId' => $centreTypesId,
]);
}
/**
* @Route("/admin/chartData", name="chartData")
*/
public function chartData(Request $request)
{
$periodStart = [
"3year" => "-3 year",
"year" => "-1 year",
"month" => "-1 month",
"week" => "-1 week",
"day" => "-1 day",
];
$periodMaChartStart = [
"3year" => "-3 year",
"year" => "-1 year",
"month" => "-1 month",
"week" => "-1 week",
"day" => "-2 day",
];
$periodMaChartEnd = [
"3year" => "0 year",
"year" => "0 year",
"month" => "0 month",
"week" => "0 week",
"day" => "+1 day",
];
$period = $request->get('period');
$affichage = $request->get('affichage');
$endTime = new \DateTime();
$endTime->setTime(23, 59, 59);
$startTimeChart = clone $endTime;
$startTime = clone $endTime;
$endTimeChart = clone $endTime;
if (array_key_exists($period, $periodMaChartStart)) {
$startTime->modify($periodStart[$period]);
$startTimeChart->modify($periodMaChartStart[$period]);
$endTimeChart->modify($periodMaChartEnd[$period]);
} else {
$dateRange = explode('/', $period);
if (count($dateRange) == 2) {
$startTime = new \DateTime($dateRange[0]);
$endTime = new \DateTime($dateRange[1]);
$endTime->setTime(23, 59, 59);
$startTimeChart = clone $startTime;
$endTimeChart = clone $endTime;
} else {
throw new \Exception("Format de période non valide");
}
}
$rendezvousPeriod = [];
$rendezvousPeriodMercureRdv = [];
$formatter = new IntlDateFormatter('fr_FR', IntlDateFormatter::FULL, IntlDateFormatter::FULL);
if ($period == 'year') {
$formatter->setPattern('MMMM yyyy');
} else if ($period == 'month') {
$formatter->setPattern('dd MMMM yyyy');
} else if ($period == 'week') {
$formatter->setPattern('dd MMMM yyyy');
} else if ($period == 'day') {
$formatter->setPattern('dd MMMM yyyy');
} else if ($period == '3year') {
$formatter->setPattern('yyyy');
} else {
if ($affichage == 'day') {
$formatter->setPattern('dd MMMM yyyy');
} else if ($affichage == 'month') {
$formatter->setPattern('MMMM yyyy');
} else if ($affichage == 'year') {
$formatter->setPattern('yyyy');
}
}
$rendezvousDates = $this->em->getrepository(Rendezvous::class)->getAllRendezvousByCentreGroupeAndTime($this->id, $startTimeChart, $endTimeChart);
$rendezvousDatesMercureRdv = $this->em->getrepository(Rendezvous::class)->getAllRendezvousByPartenaireAndTime($this->id, 2, $startTimeChart, $endTimeChart);
$rendezvousPeriod = [];
foreach ($rendezvousDates as $dateArray) {
$date = $dateArray['rdv_date_heure'];
$datePeriod = $formatter->format($date);
if (!isset($rendezvousPeriod[$datePeriod])) {
$rendezvousPeriod[$datePeriod] = 0;
}
$rendezvousPeriod[$datePeriod]++;
}
$labels = array_keys($rendezvousPeriod);
$dataRdvByPeriod = array_values($rendezvousPeriod);
$rendezvousPeriodMercureRdv = [];
foreach ($rendezvousDatesMercureRdv as $dateArray) {
$date = $dateArray['rdv_date_heure'];
$datePeriod = $formatter->format($date);
if (!isset($rendezvousPeriodMercureRdv[$datePeriod])) {
$rendezvousPeriodMercureRdv[$datePeriod] = 0;
}
$rendezvousPeriodMercureRdv[$datePeriod]++;
}
$dataRdvByMonthByPeriod = [];
foreach ($labels as $label) {
if (isset($rendezvousPeriodMercureRdv[$label])) {
$dataRdvByMonthByPeriod[] = $rendezvousPeriodMercureRdv[$label];
} else {
$dataRdvByMonthByPeriod[] = 0;
}
}
$nbr_rendezvous_total = $this->em->getrepository(Rendezvous::class)->findRendezvousByCentreGroupeAndTime($this->id, $startTime, $endTime);
$nbr_rendezvous_total_by_centre_type = $this->em->getrepository(Rendezvous::class)->findRendezvousCountByCentreTypeAndTime($this->id, $startTime, $endTime);
$nbr_rendezvous_partenaire = $this->em->getrepository(RendezVous::class)->countRendezvousByCentrePartenaireAndDateRange($this->id, 2, $startTime, $endTime);
$nbr_rendezvous_paiement_ligne = $this->em->getrepository(RendezVous::class)->countRendezvousByPaiementLigneAndDateRange($this->id, $startTime, $endTime);
$somme_rendezvous_paiement_ligne = $this->em->getrepository(RendezVous::class)->getSommeRendezvousByPaiementLigneAndDateRange($this->id, $startTime, $endTime);
$nbr_sms_envoye = $this->em->getrepository(Sms::class)->countSmsByCentreGroupAndDateRangeAndNbEnvoi($this->id, $startTime, $endTime);
$nbr_sms_relance = $this->em->getrepository(Sms::class)->countSmsByCentreGroupAndDateRangeAndRelance($this->id, $startTime, $endTime);
if ($somme_rendezvous_paiement_ligne == null) {
$somme_rendezvous_paiement_ligne = 0;
}
$response = new JsonResponse([
'labels' => $labels,
'dataRdvByPeriod' => $dataRdvByPeriod,
'dataRdvByMonthByPeriod' => $dataRdvByMonthByPeriod,
'nbr_rendezvous_total' => $nbr_rendezvous_total,
'nbr_rendezvous_total_by_centre_type' => $nbr_rendezvous_total_by_centre_type,
'nbr_rendezvous_partenaire' => $nbr_rendezvous_partenaire,
'nbr_rendezvous_paiement_ligne' => $nbr_rendezvous_paiement_ligne,
'somme_rendezvous_paiement_ligne' => number_format($somme_rendezvous_paiement_ligne, 0, '', ' '),
'nbr_sms_envoye' => $nbr_sms_envoye,
'nbr_sms_relance' => $nbr_sms_relance,
]);
return $response;
}
// Gestion Prestation -------------------------------------------------------------
/**
* @Route("/admin/prestation", name="prestation")
*/
public function prestation(): Response
{
$allpermission = $this->checkAllPermissionAdmin("prestation");
if (!$allpermission || !$allpermission['lire']) {
$this->addFlash('error', 'Impossible, vous n\'avez pas accés à cette page');
return $this->redirectToRoute('admin_erreur');
}
$data_prestations = $this->cache->get('prestation' . $this->id, function () {
$data_prestations = $this->em->getrepository(CentrePrestation::class)->findByCentreGroupe($this->id);
return $data_prestations;
});
$data_type_visites = $this->cache->get('type_visite' . $this->id, function () {
$data_type_visite = $this->em->getrepository(TypeVisite::class)->findByCentreGroupe($this->id);
return $data_type_visite;
});
$data_type_vehicules = $this->cache->get('type_vehicule' . $this->id, function () {
$data_type_vehicule = $this->em->getrepository(TypeVehicule::class)->findByCentreGroupe($this->id);
return $data_type_vehicule;
});
$data_centre_types = $this->cache->get("centre_type" . $this->id, function () {
$data_centre_types = $this->em->getrepository(CentreType::class)->findTypesByCentreGroupeId($this->id);
return $data_centre_types;
});
$data_payment_webs = $this->em->getrepository(ParametreCentre::class)->findPaiementLigneByCentreGroupe($this->id);
$allPaymentsOffline = true;
foreach ($data_payment_webs as $data_payment_web) {
if ($data_payment_web['paiement_en_ligne'] === true) {
$allPaymentsOffline = false;
break;
}
}
// $prestations = $paginator->paginate(
// $data_prestations, // Requête contenant les données à paginer (ici nos prestations)
// $request->query->getInt('page', 1), // Numéro de la page en cours, passé dans l'URL, 1 si aucune page
// 10 // Nombre de résultats par page
// );
return $this->render('admin/prestation_view.html.twig', [
'prestations' => $data_prestations,
'type_visites' => $data_type_visites,
'type_vehicules' => $data_type_vehicules,
'centre_types' => $data_centre_types,
'allpermission' => $allpermission,
'paymentWebs' => $data_payment_webs,
'allPaymentsOffline' => $allPaymentsOffline,
]);
}
/**
* @Route("/admin/prestation_add", name="prestation_add")
*/
public function prestation_add(Request $request, ObjectManager $manager)
{
$permissionResult = $this->checkPermissionAdmin("ecrire", "prestation");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
if (!$request->get('type_visite')) {
$this->addFlash('error', 'Vous n\'avez pas rempli le type de visite.');
return $this->redirectToRoute('prestation');
}
if (!$request->get('type_vehicule')) {
$this->addFlash('error', 'Vous n\'avez pas rempli le type de vehicule.');
return $this->redirectToRoute('prestation');
}
if (!$request->get('tarif')) {
$this->addFlash('error', 'Vous n\'avez pas rempli le tarif.');
return $this->redirectToRoute('prestation');
}
if (!$request->get('duree')) {
$this->addFlash('error', 'Vous n\'avez pas rempli la duree.');
return $this->redirectToRoute('prestation');
}
if (!$request->get('energies')) {
$this->addFlash('error', 'Vous n\'avez pas sélectionné d\'energie.');
return $this->redirectToRoute('prestation');
}
$prestation = new CentrePrestation;
$type_visite = $this->em->getrepository(TypeVisite::class)->find($request->get('type_visite'));
$prestation->setPstTypeVisite($type_visite);
$type_vehicule = $this->em->getrepository(TypeVehicule::class)->find($request->get('type_vehicule'));
$prestation->setPstTypeVehicule($type_vehicule);
$centre_groupe = $this->em->getrepository(CentreGroupe::class)->find($this->id);
$prestation->setCentreGroupe($centre_groupe);
$prestation->setPstTarif($request->get('tarif'));
$prestation->setPstDuree($request->get('duree'));
$prestation->setPstActif($request->get('actif') ? 1 : 0);
$prestation->setPstAfficher($request->get('presta') ? 1 : 0);
$prestation->setPaiementEnLigne($request->get('paiement') ? 1 : 0);
$prestation->setMessageAppelCentre($request->get('appel_centre') ? 1 : 0);
$prestation->setPstCouleur(substr($request->get('couleur'), 1) ? substr($request->get('couleur'), 1) : null);
$prestation->setPstOrdre($request->get('ordre') ? $request->get('ordre') : null);
foreach ($request->get('energies') as $energie) {
$data_energie = $this->em->getRepository(Energie::class)->findOneBy(['denomination' => $energie]);
$prestation->addEnergie($data_energie);
}
$manager->persist($prestation);
$manager->flush();
$this->cache->delete('prestation' . $this->id, 'promotion_prestation' . $this->id, 'coupon_promotion_prestation' . $this->id, 'prestation_actif' . $this->id);
$this->vide_cache_centre_groupe($this->id);
return $this->redirectToRoute('prestation');
}
/**
* @Route("/admin/prestation_delete/{id}", name="prestation_delete")
*/
public function prestation_delete(centrePrestation $centrePrestation, ObjectManager $manager)
{
$permissionResult = $this->checkPermissionAdmin("supp", "prestation");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
if ($centrePrestation->getCentreGroupe()->getId() !== $this->id) {
return new Response('cannot_delete_prestation_another_center');
}
if (count($centrePrestation->getRendezVousInfos())) {
return new Response('cannot_delete_due_to_existing_appointments');
} else {
// Supprimer l'entité
foreach ($centrePrestation->getEnergie() as $energie) {
$centrePrestation->removeEnergie($energie);
}
$manager->remove($centrePrestation);
$manager->flush();
$this->cache->delete('prestation' . $this->id, 'promotion_prestation' . $this->id, 'coupon_promotion_prestation' . $this->id, 'prestation_actif' . $this->id);
$this->vide_cache_centre_groupe($this->id);
// Rediriger l'utilisateur vers la liste des produits
return new Response('ok');
}
}
/**
* @Route("/admin/prestation_update/{id}", name="prestation_update")
*/
public function prestation_update(centrePrestation $centrePrestation, Request $request, ObjectManager $manager)
{
$permissionResult = $this->checkPermissionAdmin("ecrire", "prestation");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
if ($centrePrestation->getCentreGroupe()->getId() !== $this->id) {
$this->addFlash('error', "Impossible de mettre à jour la prestation car elle n'est pas liée à votre centre.");
return $this->redirectToRoute('prestation');
}
if (!$request->get('type_visite')) {
$this->addFlash('error', 'Vous n\'avez pas rempli le type de visite.');
return $this->redirectToRoute('prestation');
}
if (!$request->get('type_vehicule')) {
$this->addFlash('error', 'Vous n\'avez pas rempli le type de vehicule.');
return $this->redirectToRoute('prestation');
}
if (!$request->get('tarif')) {
$this->addFlash('error', 'Vous n\'avez pas rempli le tarif.');
return $this->redirectToRoute('prestation');
}
if (!$request->get('duree')) {
$this->addFlash('error', 'Vous n\'avez pas rempli la duree.');
return $this->redirectToRoute('prestation');
}
if (!$request->get('energies')) {
$this->addFlash('error', 'Vous n\'avez pas sélectionné d\'energie.');
return $this->redirectToRoute('prestation');
}
$type_visite = $this->em->getrepository(TypeVisite::class)->find($request->get('type_visite'));
$centrePrestation->setPstTypeVisite($type_visite);
$type_vehicule = $this->em->getrepository(TypeVehicule::class)->find($request->get('type_vehicule'));
$centrePrestation->setPstTypeVehicule($type_vehicule);
$centre_groupe = $this->em->getrepository(CentreGroupe::class)->find($this->id);
$centrePrestation->setCentreGroupe($centre_groupe);
$centrePrestation->setPstTarif($request->get('tarif'));
$centrePrestation->setPstDuree($request->get('duree'));
$centrePrestation->setPstActif($request->get('actif') ? 1 : 0);
$centrePrestation->setPstAfficher($request->get('presta') ? 1 : 0);
$centrePrestation->setPaiementEnLigne($request->get('paiement') ? 1 : 0);
$centrePrestation->setMessageAppelCentre($request->get('appel_centre') ? 1 : 0);
$centrePrestation->setPstCouleur(substr($request->get('couleur'), 1));
$centrePrestation->setPstOrdre($request->get('ordre') ? $request->get('ordre') : null);
foreach ($centrePrestation->getEnergie() as $energie) {
$centrePrestation->removeEnergie($energie);
}
foreach ($request->get('energies') as $energie) {
$data_energie = $this->em->getRepository(Energie::class)->findOneBy(['denomination' => $energie]);
if ($data_energie) {
$centrePrestation->addEnergie($data_energie);
}
}
$manager->persist($centrePrestation);
$manager->flush();
$this->cache->delete('prestation' . $this->id, 'promotion_prestation' . $this->id, 'coupon_promotion_prestation' . $this->id, 'prestation_actif' . $this->id);
$this->vide_cache_centre_groupe($this->id);
return $this->redirectToRoute('prestation');
}
/**
* @Route("/admin/get-energie-prestation/{typeVehicule}", name="get-energie-prestation")
*/
public function getEnergieByPrestation(TypeVehicule $typeVehicule)
{
$allpermission = $this->checkAllPermissionAdmin("prestation");
if (!$allpermission || !$allpermission['ecrire']) {
$this->addFlash('error', 'Impossible, vous n\'avez pas accés à cette route');
return $this->redirectToRoute('admin_erreur');
}
if ($typeVehicule->getCentreGroupe()->getId() != $this->id) {
$this->addFlash('error', 'Impossible, vous n\'avez pas accés à cette route');
return $this->redirectToRoute('prestation');
}
$energies = $this->em->getRepository(ParametreCentre::class)->findEnergiesByTypeVehicule($typeVehicule->getId());
$cleanEnergies = [];
foreach ($energies as $entry) {
foreach ($entry['energies'] as $energy) {
$cleanEnergies[] = $energy;
}
}
return new JsonResponse($cleanEnergies);
}
// Gestion Lignes -----------------------------------------------------------------
/**
* @Route("/admin/ligne", name="ligne")
*/
public function ligne(Request $request, PaginatorInterface $paginator): Response
{
$allpermission = $this->checkAllPermissionAdmin("ligne");
if (!$allpermission || !$allpermission['lire']) {
$this->addFlash('error', 'Impossible, vous n\'avez pas accés à cette page');
return $this->redirectToRoute('admin_erreur');
}
$data_lignes = $this->cache->get("ligne" . $this->id, function () {
$data_lignes = $this->em->getrepository(Ligne::class)->findByCentreGroupe($this->id);
return $data_lignes;
});
$data_centre_types = $this->cache->get("centre_type" . $this->id, function () {
$data_centre_types = $this->em->getrepository(CentreType::class)->findTypesByCentreGroupeId($this->id);
return $data_centre_types;
});
return $this->render('admin/ligne_view.html.twig', [
'lignes' => $data_lignes,
'centre_types' => $data_centre_types,
'allpermission' => $allpermission,
]);
}
/**
* @Route("/admin/ligne_add", name="ligne_add")
*/
public function AddLigne(Request $request, ObjectManager $manager)
{
$permissionResult = $this->checkPermissionAdmin("ecrire", "ligne");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
if (!$request->get('nom')) {
$this->addFlash('error', 'Vous n\'avez pas rempli le nom de la ligne.');
return $this->redirectToRoute('ligne');
}
if (!$request->get('type_prestation')) {
$this->addFlash('error', 'Vous n\'avez pas rempli le type de prestation.');
return $this->redirectToRoute('ligne');
}
$ligne = new Ligne();
$centre_groupe = $this->em->getrepository(CentreGroupe::class)->find($this->id);
$ligne->setCentreGroupe($centre_groupe);
$ligne->setLgnNom($request->get('nom'));
$ligne->setLgnVl(false);
$ligne->setLgnPl(false);
$ligne->setLgnCl(false);
$ligne->setColor(substr($request->get('couleur'), 1) ? substr($request->get('couleur'), 1) : null);
foreach ($request->get('type_prestation') as $type_prestation) {
if ($type_prestation == 'VL') {
$ligne->setLgnVl(true);
$centre_type = $this->em->getrepository(CentreType::class)->find(1);
$ligne->setCentreType($centre_type);
}
if ($type_prestation == 'PL') {
$ligne->setLgnPl(true);
$centre_type = $this->em->getrepository(CentreType::class)->find(2);
$ligne->setCentreType($centre_type);
}
if ($type_prestation == 'CL') {
$ligne->setLgnCl(true);
$centre_type = $this->em->getrepository(CentreType::class)->find(4);
$ligne->setCentreType($centre_type);
}
}
if (count($request->get('type_prestation')) > 1) {
$centre_type = $this->em->getrepository(CentreType::class)->find(3);
$ligne->setCentreType($centre_type);
}
$ligne->setLgnActif($request->get('actif') ? 1 : 0);
$manager->persist($ligne);
$manager->flush();
for ($i = 1; $i <= 7; $i++) {
$ligne_horaire_matin = new LigneHoraire;
$ligne_horaire_matin->setLigne($ligne);
$heure_debut = new Datetime('08:00');
$heure_fin = new Datetime('12:00');
$ligne_horaire_matin->setLgnHorDebut($heure_debut);
$ligne_horaire_matin->setLgnHorFin($heure_fin);
$ligne_horaire_matin->setLgnHorOuvert(true);
$ligne_horaire_matin->setLgnHorListeJours($i);
$manager->persist($ligne_horaire_matin);
$ligne_horaire_apresmidi = new LigneHoraire;
$ligne_horaire_apresmidi->setLigne($ligne);
$heure_debut = new Datetime('14:00');
$heure_fin = new Datetime('18:00');
$ligne_horaire_apresmidi->setLgnHorDebut($heure_debut);
$ligne_horaire_apresmidi->setLgnHorFin($heure_fin);
$ligne_horaire_apresmidi->setLgnHorOuvert(true);
$ligne_horaire_apresmidi->setLgnHorListeJours($i);
$manager->persist($ligne_horaire_apresmidi);
$manager->flush();
}
$this->cache->delete('ligne' . $this->id);
$this->cache->delete('nbr_ligne' . $this->id);
$this->vide_cache_centre_groupe($this->id);
return $this->redirectToRoute('ligne');
}
/**
* @Route("/admin/ligne_delete/{id}", name="ligne_delete")
*/
public function deleteLigne(Ligne $ligne, ObjectManager $manager)
{
$permissionResult = $this->checkPermissionAdmin("supp", "ligne");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
if ($ligne->getCentreGroupe()->getId() !== $this->id) {
return new Response('Vous ne pouvez pas supprimer, cette ligne appartient à un autre centre');
}
$dependantEntries = $this->em->getrepository(Rendezvous::class)->findBy(['ligne' => $ligne]);
if (count($dependantEntries) > 0) {
return new Response('Impossible de supprimer la ligne car elle est liée à des rendez-vous');
}
$CentrePartenaires = $this->em->getrepository(CentrePartenaire::class)->findBy(['ligne' => $ligne]);
foreach ($CentrePartenaires as $CentrePartenaire) {
$manager->remove($CentrePartenaire);
}
// Supprimer l'entité
$manager->remove($ligne);
$manager->flush();
$this->cache->delete('ligne' . $this->id);
$this->cache->delete('nbr_ligne' . $this->id);
$this->vide_cache_centre_groupe($this->id);
// Rediriger l'utilisateur vers le type ligne
return new Response('ok');
}
/**
* @Route("/admin/ligne_update/{id}", name="ligne_update")
*/
public function updateLigne(Ligne $ligne, Request $request, ObjectManager $manager)
{
$permissionResult = $this->checkPermissionAdmin("ecrire", "ligne");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
if ($ligne->getCentreGroupe()->getId() !== $this->id) {
$this->addFlash('error', "Impossible de mettre à jour la ligne car elle n'est pas liée à votre centre.");
return $this->redirectToRoute('ligne');
}
if (!$request->get('nom')) {
$this->addFlash('error', 'Vous n\'avez pas rempli le nom de la ligne.');
return $this->redirectToRoute('ligne');
}
if (!$request->get('type_prestation')) {
$this->addFlash('error', 'Vous n\'avez pas rempli le type de prestation.');
return $this->redirectToRoute('ligne');
}
//$centre_type = $this->em->getrepository(CentreType::class)->find(3);
// TODO pour linstant nous avons besoin la ligne est un type pour les partenaires
// $ligne->setCentreType(null);
$centre_groupe = $this->em->getrepository(CentreGroupe::class)->find($this->id);
$ligne->setCentreGroupe($centre_groupe);
$ligne->setLgnNom($request->get('nom'));
$ligne->setLgnActif($request->get('actif') ? 1 : 0);
$ligne->setLgnVl(false);
$ligne->setLgnPl(false);
$ligne->setLgnCl(false);
$ligne->setColor(substr($request->get('couleur'), 1) ? substr($request->get('couleur'), 1) : null);
foreach ($request->get('type_prestation') as $type_prestation) {
if ($type_prestation == 'VL') {
$ligne->setLgnVl(true);
}
if ($type_prestation == 'PL') {
$ligne->setLgnPl(true);
}
if ($type_prestation == 'CL') {
$ligne->setLgnCl(true);
}
}
$manager->persist($ligne);
$manager->flush();
$this->cache->delete('ligne' . $this->id);
$this->cache->delete('nbr_ligne' . $this->id);
$this->vide_cache_centre_groupe($this->id);
return $this->redirectToRoute('ligne');
}
/**
* @Route("/admin/ligne_horaire/{id}", name="ligne_horaire")
*/
public function ligneHoraire(int $id, Request $request)
{
$permissionResult = $this->checkPermissionAdmin("lire", "ligne");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
// Récupération des données de la base de données pour la ligne horaire spécifiée afin de crée un tableau d'objets pour pouvoir le recuperer en ajax
$data_ligne_horaires = $this->em->getrepository(LigneHoraire::class)->findByLigne($id);
$array_ligne_horaire = array();
foreach ($data_ligne_horaires as $key => $ligne_horaire) {
$array_ligne_horaire[] = array(
'id' => $ligne_horaire->getId(),
'ouvert' => $ligne_horaire->isLgnHorOuvert(),
'jour' => $ligne_horaire->getLgnHorListeJours(),
'debut' => $ligne_horaire->getLgnHorDebut()->format('H:i'),
'fin' => $ligne_horaire->getLgnHorFin()->format('H:i'),
);
}
return new JsonResponse($array_ligne_horaire);
}
/**
* @Route("/admin/ligne_horaire_update", name="ligne_horaire_update")
*/
public function ligneHoraireUpdate(Request $request, ObjectManager $manager)
{
$permissionResult = $this->checkPermissionAdmin("ecrire", "ligne");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
foreach ($request->get('table_horaire') as $key => $ligne_horaire) {
$LigneHoraire = $this->em->getrepository(LigneHoraire::class)->find($ligne_horaire[3]);
$ouverture = false;
if ($ligne_horaire[0] == 'true') {
$ouverture = true;
}
$LigneHoraire->setLgnHorOuvert($ouverture);
$LigneHoraire->setLgnHorDebut(new Datetime($ligne_horaire[1]));
$LigneHoraire->setLgnHorFin(new Datetime($ligne_horaire[2]));
$manager->persist($LigneHoraire);
}
$manager->flush();
$this->cache->delete('ligne' . $this->id);
$this->cache->delete('nbr_ligne' . $this->id);
$this->vide_cache_centre_groupe($this->id);
return $this->redirectToRoute('ligne');
}
// Gestion Type Visite ------------------------------------------------------------
/**
* @Route("/admin/type_visite", name="type_visite")
*/
public function TypeVisite()
{
$allpermission = $this->checkAllPermissionAdmin("type_visite");
if (!$allpermission || !$allpermission['lire']) {
$this->addFlash('error', 'Impossible, vous n\'avez pas accés à cette page');
return $this->redirectToRoute('admin_erreur');
}
$data_type_visites = $this->cache->get('type_visite' . $this->id, function () {
$data_type_visite = $this->em->getrepository(TypeVisite::class)->findByCentreGroupe($this->id);
return $data_type_visite;
});
return $this->render('admin/type_visite_view.html.twig', [
'type_visites' => $data_type_visites,
'allpermission' => $allpermission,
]);
}
/**
* @Route("/admin/type_visite_add", name="type_visite_add")
*/
public function AddTypeVisite(Request $request, ObjectManager $manager)
{
$permissionResult = $this->checkPermissionAdmin("ecrire", "type_visite");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
$type_visite = new TypeVisite;
$centre_groupe = $this->em->getrepository(CentreGroupe::class)->find($this->id);
$type_visite->setCentreGroupe($centre_groupe);
$type_visite->setTypVstLibele($request->get('libelle'));
$type_visite->setTypVstLibeleLong($request->get('libellelong'));
$type_visite->setTypVstLibeleCourt($request->get('libellecourt'));
$manager->persist($type_visite);
$manager->flush();
$this->cache->delete('type_visite' . $this->id);
$this->vide_cache_centre_groupe($this->id);
return $this->redirect($request->headers->get('referer'));
}
/**
* @Route("/admin/type_visite_delete/{id}", name="type_visite_delete")
*/
public function deleteTypeVisite(TypeVisite $type_visite, ObjectManager $manager)
{
$permissionResult = $this->checkPermissionAdmin("supp", "type_visite");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
if ($type_visite->getCentreGroupe()->getId() !== $this->id) {
return new Response('cannot_delete_type_visite_another_center');
}
try {
// Supprimer l'entité
$manager->remove($type_visite);
$manager->flush();
$this->cache->delete('type_visite' . $this->id);
$this->vide_cache_centre_groupe($this->id);
} catch (ForeignKeyConstraintViolationException $e) {
return new Response('cannot_delete_type_visite_associate');
}
// Rediriger l'utilisateur vers le type visite
return new Response('ok');
}
/**
* @Route("/admin/type_visite_update/{id}", name="type_visite_update")
*/
public function updateTypeVisite(TypeVisite $type_visite, Request $request, ObjectManager $manager)
{
$permissionResult = $this->checkPermissionAdmin("ecrire", "type_visite");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
if ($type_visite->getCentreGroupe()->getId() !== $this->id) {
$this->addFlash('error', "Impossible de mettre à jour le type de visite car il n'est pas liée à votre centre.");
return $this->redirectToRoute('type_visite');
}
$centre_groupe = $this->em->getrepository(CentreGroupe::class)->find($this->id);
$type_visite->setCentreGroupe($centre_groupe);
$type_visite->setTypVstLibele($request->get('libelle'));
$type_visite->setTypVstLibeleLong($request->get('libellelong'));
$type_visite->setTypVstLibeleCourt($request->get('libellecourt'));
$manager->persist($type_visite);
$manager->flush();
$this->cache->delete('type_visite' . $this->id);
$this->vide_cache_centre_groupe($this->id);
return $this->redirectToRoute('type_visite');
}
// Gestion Type Vehicule ----------------------------------------------------------
/**
* @Route("/admin/type_vehicule", name="type_vehicule")
*/
public function TypeVehicule(Request $request, PaginatorInterface $paginator): Response
{
$allpermission = $this->checkAllPermissionAdmin("type_vehicule");
if (!$allpermission || !$allpermission['lire']) {
$this->addFlash('error', 'Impossible, vous n\'avez pas accés à cette page');
return $this->redirectToRoute('admin_erreur');
}
$data_type_vehicules = $this->cache->get('type_vehicule' . $this->id, function () {
$data_type_vehicule = $this->em->getrepository(TypeVehicule::class)->findByCentreGroupe($this->id);
return $data_type_vehicule;
});
$data_centre_types = $this->cache->get("centre_type" . $this->id, function () {
$data_centre_type = $this->em->getrepository(CentreType::class)->findTypesByCentreGroupeId($this->id);
return $data_centre_type;
});
return $this->render('admin/type_vehicule_view.html.twig', [
'type_vehicules' => $data_type_vehicules,
'centre_types' => $data_centre_types,
'allpermission' => $allpermission,
]);
}
/**
* @Route("/admin/type_vehicule_add", name="type_vehicule_add")
*/
public function AddTypeVehicule(Request $request, ObjectManager $manager)
{
$permissionResult = $this->checkPermissionAdmin("ecrire", "type_vehicule");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
$type_vehicule = new TypeVehicule;
$centre_groupe = $this->em->getrepository(CentreGroupe::class)->find($this->id);
$type_vehicule->setCentreGroupe($centre_groupe);
$centre_type = $this->em->getrepository(CentreType::class)->find($request->get('type'));
$type_vehicule->setTvCentreType($centre_type);
$type_vehicule->setTvLibelle($request->get('libelle'));
$type_vehicule->setTvMoteur($request->get('moteur') ? 1 : 0);
$type_vehicule->setTvMd($request->get('tdm') ? 1 : 0);
$type_vehicule->setTvEnsemble($request->get('ens') ? 1 : 0);
$type_vehicule->setTvValide($request->get('actif') ? 1 : 0);
$manager->persist($type_vehicule);
$manager->flush();
$this->cache->delete('type_vehicule' . $this->id);
$this->vide_cache_centre_groupe($this->id);
return $this->redirect($request->headers->get('referer'));
}
/**
* @Route("/admin/type_vehicule_delete/{id}", name="type_vehicule_delete")
*/
public function deleteTypeVehicule(TypeVehicule $type_vehicule, ObjectManager $manager)
{
$permissionResult = $this->checkPermissionAdmin("supp", "type_vehicule");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
if ($type_vehicule->getCentreGroupe()->getId() !== $this->id) {
return new Response('cannot_delete_type_vehicule_another_center');
}
try {
// Supprimer l'entité
$manager->remove($type_vehicule);
$manager->flush();
$this->cache->delete('type_vehicule' . $this->id);
$this->vide_cache_centre_groupe($this->id);
} catch (ForeignKeyConstraintViolationException $e) {
return new Response('cannot_delete_type_vehicule_associate');
}
// Rediriger l'utilisateur vers le type vehicule
return new Response('ok');
}
/**
* @Route("/admin/type_vehicule_update/{id}", name="type_vehicule_update")
*/
public function updateTypeVehicule(TypeVehicule $type_vehicule, Request $request, ObjectManager $manager)
{
$permissionResult = $this->checkPermissionAdmin("ecrire", "type_vehicule");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
if ($type_vehicule->getCentreGroupe()->getId() !== $this->id) {
$this->addFlash('error', "Impossible de mettre à jour le type de véhicule car il n'est pas lié à votre centre.");
return $this->redirectToRoute('type_vehicule');
}
$centre_groupe = $this->em->getrepository(CentreGroupe::class)->find($this->id);
$type_vehicule->setCentreGroupe($centre_groupe);
$centre_type = $this->em->getrepository(CentreType::class)->find($request->get('type'));
$type_vehicule->setTvCentreType($centre_type);
$type_vehicule->setTvLibelle($request->get('libelle'));
$type_vehicule->setTvMoteur($request->get('moteur') ? 1 : 0);
$type_vehicule->setTvMd($request->get('tdm') ? 1 : 0);
$type_vehicule->setTvEnsemble($request->get('ens') ? 1 : 0);
$type_vehicule->setTvValide($request->get('actif') ? 1 : 0);
$manager->persist($type_vehicule);
$manager->flush();
$this->cache->delete('type_vehicule' . $this->id);
$this->vide_cache_centre_groupe($this->id);
return $this->redirectToRoute('type_vehicule');
}
// Gestion Promotions -------------------------------------------------------------
/**
* @Route("/admin/promotion", name="promotion")
*/
public function promotion(Request $request, PaginatorInterface $paginator): Response
{
$allpermission = $this->checkAllPermissionAdmin("promotion");
if (!$allpermission || !$allpermission['lire']) {
$this->addFlash('error', 'Impossible, vous n\'avez pas accés à cette page');
return $this->redirectToRoute('admin_erreur');
}
$data_promotions = $this->cache->get('promotion' . $this->id, function () {
$data_promotions = $this->em->getrepository(Promotion::class)->findByCentreGroupe($this->id);
return $data_promotions;
});
// dd($data_promotions);
$data_prestations = $this->em->getrepository(CentrePrestation::class)->findByCentreGroupe($this->id);
$data_type_visites = $this->cache->get('type_visite' . $this->id, function () {
$data_type_visite = $this->em->getrepository(TypeVisite::class)->findByCentreGroupe($this->id);
return $data_type_visite;
});
return $this->render('admin/promotion_view.html.twig', [
'promotions' => $data_promotions,
'prestations' => $data_prestations,
'type_visites' => $data_type_visites,
'allpermission' => $allpermission,
]);
}
/**
* @Route("/admin/promotion_add", name="promotion_add")
*/
public function AddPromotion(Request $request, ObjectManager $manager)
{
$permissionResult = $this->checkPermissionAdmin("ecrire", "promotion");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
if (!$request->get('nom')) {
$this->addFlash('error', 'Vous n\'avez pas rempli le nom de la promotion.');
return $this->redirectToRoute('promotion');
}
if (!$request->get('reduction')) {
$this->addFlash('error', 'Vous n\'avez pas rempli le montant.');
return $this->redirectToRoute('promotion');
}
$promotion = new Promotion;
$centre_groupe = $this->em->getrepository(CentreGroupe::class)->find($this->id);
$promotion->setCentreGroupe($centre_groupe);
$promotion->setPrmNom($request->get('nom'));
$promotion->setPrmReduction($request->get('reduction'));
$manager->persist($promotion);
$manager->flush();
$this->cache->delete('promotion' . $this->id, 'promotion_prestation' . $this->id);
return $this->redirectToRoute('promotion');
$this->vide_cache_centre_groupe($this->id);
}
/**
* @Route("/admin/promotion_delete/{id}", name="promotion_delete")
*/
public function deletePromotion(Promotion $promotion, ObjectManager $manager)
{
$permissionResult = $this->checkPermissionAdmin("supp", "promotion");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
if ($promotion->getCentreGroupe()->getId() !== $this->id) {
return new Response('cannot_delete_promotion_another_center');
}
try {
// Supprimer l'entité
$manager->remove($promotion);
$manager->flush();
$this->cache->delete('promotion' . $this->id);
$this->vide_cache_centre_groupe($this->id);
} catch (ForeignKeyConstraintViolationException $e) {
return new Response('cannot_delete_promotion_associate');
}
// Rediriger l'utilisateur vers la promotion
return new Response('ok');
}
/**
* @Route("/admin/promotion_update/{id}", name="promotion_update")
*/
public function updatePromotion(Promotion $promotion, Request $request, ObjectManager $manager)
{
$permissionResult = $this->checkPermissionAdmin("ecrire", "promotion");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
if ($promotion->getCentreGroupe()->getId() !== $this->id) {
$this->addFlash('error', "Impossible de mettre à jour ma promotion car elle n'est pas liée à votre centre.");
return $this->redirectToRoute('promotion');
}
if (!$request->get('nom')) {
$this->addFlash('error', 'Vous n\'avez pas rempli le nom de la promotion.');
return $this->redirectToRoute('promotion');
}
if (!$request->get('reduction')) {
$this->addFlash('error', 'Vous n\'avez pas rempli le montant.');
return $this->redirectToRoute('promotion');
}
$centre_groupe = $this->em->getrepository(CentreGroupe::class)->find($this->id);
$promotion->setCentreGroupe($centre_groupe);
$promotion->setPrmNom($request->get('nom'));
$promotion->setPrmReduction($request->get('reduction'));
$manager->persist($promotion);
$manager->flush();
$this->cache->delete('promotion' . $this->id, 'promotion_prestation' . $this->id);
return $this->redirectToRoute('promotion');
$this->vide_cache_centre_groupe($this->id);
}
/**
* @Route("/admin/promotion_type_visite/{id}", name="promotion_type_visite")
*/
public function promotionTypeVisite(Promotion $promotion)
{
$permissionResult = $this->checkPermissionAdmin("lire", "promotion");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
if ($promotion->getCentreGroupe()->getId() !== $this->id) {
$this->addFlash('error', "Impossible de mettre à jour ma promotion car elle n'est pas liée à votre centre.");
return $this->redirectToRoute('promotion');
}
$array_type_visite = [];
foreach ($promotion->getCentrePrestations() as $centrePrestation) {
$array_type_visite[] = array(
'centre_prestation_id' => $centrePrestation->getId(),
'type_visite_id' => $centrePrestation->getPstTypeVisite()->getId(),
'type_visite_libelle' => $centrePrestation->getPstTypeVisite()->getTypVstLibele(),
'type_visite_libelle_long' => $centrePrestation->getPstTypeVisite()->getTypVstLibeleLong(),
);
}
return new JsonResponse($array_type_visite);
}
/**
* @Route("/admin/promotion_prestation_update/{id}", name="promotion_prestation_update")
*/
public function updatePromotionPrestation(Promotion $promotion, Request $request, ObjectManager $manager)
{
$permissionResult = $this->checkPermissionAdmin("ecrire", "promotion");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
if ($promotion->getCentreGroupe()->getId() !== $this->id) {
$this->addFlash('error', "Impossible de mettre à jour l'association de la promotion à la prestation car elle n'est pas liée à votre centre.");
return $this->redirectToRoute('promotion');
}
// On supprime toute liaisons entre promotion et prestation
// Pour chaque centrePrestation associé à la promotion, on récupère son id
foreach ($promotion->getCentrePrestations() as $centrePrestation) {
$centrePrestationId = $centrePrestation->getId();
// On récupère le centrePrestation correspondant à l'id
$centre_prestation = $this->em->getrepository(CentrePrestation::class)->find($centrePrestationId);
// On retire le centrePrestation de la liste des centrePrestations associés à la promotion
$promotion->removeCentrePrestation($centre_prestation);
// On persiste les modifications sur la promotion
$manager->persist($promotion);
}
// On sauvegarde les modifications en base de données
$manager->flush();
// Récupération des valeurs de la variable 'type_visite' dans un tableau envoyées en POST depuis le formulaire
$array_prestation = $request->request->get('type_visite');
// Vérification que la variable est un tableau ou un objet itérable
if (is_array($array_prestation) || $array_prestation instanceof \Traversable) {
// Boucle sur chaque élément du tableau 'type_visite'
foreach ($array_prestation as $idprestation) {
// Récupération de l'entité 'CentrePrestation' correspondante à l'idprestation courant
$centre_prestation = $this->em->getRepository(CentrePrestation::class)->find($idprestation);
// Fait la liaison entre l'entité 'CentrePrestation' et l'entité 'Promotion'
$promotion->addCentrePrestation($centre_prestation);
// Enregistrement de la promotion en base de données
$manager->persist($promotion);
}
// Exécution des requêtes SQL en attente
$manager->flush();
}
$this->cache->delete('promotion' . $this->id, 'promotion_prestation' . $this->id);
return $this->redirectToRoute('promotion');
$this->vide_cache_centre_groupe($this->id);
}
// Gestion des Coupons Promotions -------------------------------------------------
/**
* @Route("/admin/coupon_promotion", name="coupon_promotion")
*/
public function couponPromotion(Request $request, PaginatorInterface $paginator): Response
{
$allpermission = $this->checkAllPermissionAdmin("coupon_promotion");
if (!$allpermission || !$allpermission['lire']) {
$this->addFlash('error', 'Impossible, vous n\'avez pas accés à cette page');
return $this->redirectToRoute('admin_erreur');
}
$data_coupon_promotions = $this->cache->get('coupon_promotion' . $this->id, function () {
$data_coupon_promotions = $this->em->getrepository(CentreCouponPromotion::class)->findByCentreGroupe($this->id);
return $data_coupon_promotions;
});
$data_prestations = $this->cache->get('coupon_promotion_prestation' . $this->id, function () {
$data_prestations = $this->em->getrepository(CentrePrestation::class)->findByCentreGroupe($this->id);
return $data_prestations;
});
$data_type_visites = $this->cache->get('type_visite' . $this->id, function () {
$data_type_visite = $this->em->getrepository(TypeVisite::class)->findByCentreGroupe($this->id);
return $data_type_visite;
});
return $this->render('admin/coupon_promotion_view.html.twig', [
'coupon_promotions' => $data_coupon_promotions,
'prestations' => $data_prestations,
'type_visites' => $data_type_visites,
'allpermission' => $allpermission,
]);
}
/**
* @Route("/admin/coupon_promotion_add", name="coupon_promotion_add")
*/
public function AddCouponPromotion(Request $request, ObjectManager $manager)
{
$permissionResult = $this->checkPermissionAdmin("ecrire", "coupon_promotion");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
if (!$request->get('libelle')) {
$this->addFlash('error', 'Vous n\'avez pas rempli le nom du code promotion.');
return $this->redirectToRoute('coupon_promotion');
}
if (!$request->get('reduction')) {
$this->addFlash('error', 'Vous n\'avez pas rempli le tarif de reduction.');
return $this->redirectToRoute('coupon_promotion');
}
if (!$request->get('utilisation') and !$request->get('illimite')) {
$this->addFlash('error', 'Vous n\'avez pas rempli le nombre d\'utilisation.');
return $this->redirectToRoute('coupon_promotion');
}
$coupon_promotion = new CentreCouponPromotion;
$centre_groupe = $this->em->getrepository(CentreGroupe::class)->find($this->id);
$coupon_promotion->setCentreGroupe($centre_groupe);
$coupon_promotion->setCpnPrmLibelle($request->get('libelle'));
$coupon_promotion->setCpnPrmMontantRemise($request->get('reduction'));
$coupon_promotion->setCpnPrmNbrUtilisation($request->get('utilisation') ? $request->get('utilisation') : 0);
$coupon_promotion->setCpnPrmDateLimite($request->get('date') ? new DateTime($request->get('date')) : null);
$coupon_promotion->setCpnPrmIllimite($request->get('illimite') ? 1 : 0);
$coupon_promotion->setCpnTypeReduction($request->get('type_reduction') ? 1 : 0);
$manager->persist($coupon_promotion);
$manager->flush();
$this->cache->delete('coupon_promotion' . $this->id, 'coupon_promotion_prestation' . $this->id);
return $this->redirectToRoute('coupon_promotion');
$this->vide_cache_centre_groupe($this->id);
}
/**
* @Route("/admin/coupon_promotion_delete/{id}", name="coupon_promotion_delete")
*/
public function deleteCouponPromotion(CentreCouponPromotion $coupon_promotion, ObjectManager $manager)
{
$permissionResult = $this->checkPermissionAdmin("supp", "coupon_promotion");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
if ($coupon_promotion->getCentreGroupe()->getId() !== $this->id) {
return new Response('cannot_delete_promotion_coupon_another_center');
}
// Supprimer l'entité
$manager->remove($coupon_promotion);
$manager->flush();
$this->cache->delete('coupon_promotion' . $this->id);
$this->vide_cache_centre_groupe($this->id);
// Rediriger l'utilisateur vers la promotion
return new Response('ok');
}
/**
* @Route("/admin/coupon_promotion_update/{id}", name="coupon_promotion_update")
*/
public function updateCouponPromotion(CentreCouponPromotion $coupon_promotion, Request $request, ObjectManager $manager)
{
$permissionResult = $this->checkPermissionAdmin("ecrire", "coupon_promotion");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
if ($coupon_promotion->getCentreGroupe()->getId() !== $this->id) {
$this->addFlash('error', "Impossible de mettre à jour le coupon promotion car il n'est pas liée à votre centre.");
return $this->redirectToRoute('coupon_promotion');
}
if (!$request->get('libelle')) {
$this->addFlash('error', 'Vous n\'avez pas rempli le nom du code promotion.');
return $this->redirectToRoute('coupon_promotion');
}
if (!$request->get('reduction')) {
$this->addFlash('error', 'Vous n\'avez pas rempli le tarif de reduction.');
return $this->redirectToRoute('coupon_promotion');
}
if (!$request->get('utilisation') or $request->get('illimite')) {
$this->addFlash('error', 'Vous n\'avez pas rempli le nombre d\'utilisation.');
return $this->redirectToRoute('coupon_promotion');
}
$centre_groupe = $this->em->getrepository(CentreGroupe::class)->find($this->id);
$coupon_promotion->setCentreGroupe($centre_groupe);
$coupon_promotion->setCpnPrmLibelle($request->get('libelle'));
$coupon_promotion->setCpnPrmMontantRemise($request->get('reduction'));
$coupon_promotion->setCpnPrmNbrUtilisation($request->get('utilisation') ? $request->get('utilisation') : null);
$coupon_promotion->setCpnPrmDateLimite($request->get('date') ? new DateTime($request->get('date')) : null);
$coupon_promotion->setCpnPrmIllimite($request->get('illimite') ? 1 : 0);
$coupon_promotion->setCpnTypeReduction($request->get('type_reduction') ? 1 : 0);
$manager->persist($coupon_promotion);
$manager->flush();
$this->cache->delete('coupon_promotion' . $this->id, 'coupon_promotion_prestation' . $this->id);
$this->vide_cache_centre_groupe($this->id);
return $this->redirectToRoute('coupon_promotion');
}
/**
* @Route("/admin/coupon_promotion_type_visite/{id}", name="coupon_promotion_type_visite")
*/
public function couponPromotionTypeVisite(CentreCouponPromotion $couponPromotion)
{
$permissionResult = $this->checkPermissionAdmin("lire", "coupon_promotion");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
if ($couponPromotion->getCentreGroupe()->getId() !== $this->id) {
$this->addFlash('error', "Impossible de lire ce coupon promotion car il n'est pas liée à votre centre.");
return $this->redirectToRoute('coupon_promotion');
}
$array_type_visite = [];
foreach ($couponPromotion->getCentreCouponPromotionPrestation() as $centrePrestation) {
$array_type_visite[] = array(
'centre_prestation_id' => $centrePrestation->getId(),
'type_visite_id' => $centrePrestation->getPstTypeVisite()->getId(),
'type_visite_libelle' => $centrePrestation->getPstTypeVisite()->getTypVstLibele(),
'type_visite_libelle_long' => $centrePrestation->getPstTypeVisite()->getTypVstLibeleLong(),
);
}
return new JsonResponse($array_type_visite);
}
/**
* @Route("/admin/coupon_promotion_prestation_update/{id}", name="coupon_promotion_prestation_update")
*/
public function updateCouponPromotionPrestation(CentreCouponPromotion $couponPromotion, Request $request, ObjectManager $manager)
{
$permissionResult = $this->checkPermissionAdmin("ecrire", "coupon_promotion");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
if ($couponPromotion->getCentreGroupe()->getId() !== $this->id) {
$this->addFlash('error', "Impossible de mettre à jour le choix de la prestation car il n'est pas liée à votre centre.");
return $this->redirectToRoute('coupon_promotion');
}
// On supprime toute liaisons entre promotion et prestation
// Pour chaque centrePrestation associé à la promotion, on récupère son id
foreach ($couponPromotion->getCentreCouponPromotionPrestation() as $centrePrestation) {
$centrePrestationId = $centrePrestation->getId();
// On récupère le centrePrestation correspondant à l'id
$centre_prestation = $this->em->getrepository(CentrePrestation::class)->find($centrePrestationId);
// On retire le centrePrestation de la liste des centrePrestations associés à la promotion
$couponPromotion->removeCentreCouponPromotionPrestation($centre_prestation);
// On persiste les modifications sur la promotion
$manager->persist($couponPromotion);
}
// On sauvegarde les modifications en base de données
$manager->flush();
// Récupération des valeurs de la variable 'type_visite' dans un tableau envoyées en POST depuis le formulaire
$array_prestation = $request->request->get('type_visite');
// Vérification que la variable est un tableau ou un objet itérable
if (is_array($array_prestation) || $array_prestation instanceof \Traversable) {
// Boucle sur chaque élément du tableau 'type_visite'
foreach ($array_prestation as $idprestation) {
// Récupération de l'entité 'CentrePrestation' correspondante à l'idprestation courant
$centre_prestation = $this->em->getRepository(CentrePrestation::class)->find($idprestation);
// Fait la liaison entre l'entité 'CentrePrestation' et l'entité 'Promotion'
$couponPromotion->addCentreCouponPromotionPrestation($centre_prestation);
// Enregistrement de la promotion en base de données
$manager->persist($couponPromotion);
}
// Exécution des requêtes SQL en attente
$manager->flush();
}
$this->cache->delete('coupon_promotion' . $this->id, 'coupon_promotion_prestation' . $this->id);
$this->vide_cache_centre_groupe($this->id);
return $this->redirectToRoute('coupon_promotion');
}
// Gestion des Clients en Compte --------------------------------------------------
/**
* @Route("/autoLoginClientCompte/{id}", name="autoLoginClientCompte")
*/
public function autoLoginClientCompte($id, Request $request, EventDispatcherInterface $dispatcher): Response
{
$user = $this->em->getrepository(ClientCompte::class)->find($id);
if ($user->getCentreGroupe()->getId() != $this->id) {
return $this->redirectToRoute('index');
}
$token = new UsernamePasswordToken($user, null, 'pro', $user->getRoles());
$this->get("security.token_storage")->setToken($token);
$event = new SecurityEvents($request);
$dispatcher->dispatch($event, SecurityEvents::INTERACTIVE_LOGIN);
// dd( $token,$user,$event,$dispatcher);
return $this->redirectToRoute('app_pro');
}
/**
* @Route("/admin/client_compte", name="client_compte")
*/
public function clientCompte(): Response
{
$allpermission = $this->checkAllPermissionAdmin("client_compte");
if (!$allpermission || !$allpermission['lire']) {
$this->addFlash('error', 'Impossible, vous n\'avez pas accés à cette page');
return $this->redirectToRoute('admin_erreur');
}
$data_client_comptes = $this->cache->get('client_compte' . $this->id, function () {
$data_client_comptes = $this->em->getrepository(ClientCompte::class)->findByCentreGroupe($this->id);
return $data_client_comptes;
});
$data_centre_types = $this->cache->get("centre_type" . $this->id, function () {
$data_centre_types = $this->em->getrepository(CentreType::class)->findTypesByCentreGroupeId($this->id);
return $data_centre_types;
});
$data_sms = $this->em->getrepository(ParametreCentre::class)->findSmsByCentreGroupe($this->id);
return $this->render('admin/client_compte_view.html.twig', [
'client_comptes' => $data_client_comptes,
'centre_types' => $data_centre_types,
'allpermission' => $allpermission,
'data_sms' => $data_sms,
]);
}
/**
* @Route("/admin/client_compte_add", name="client_compte_add")
*/
public function AddClientCompte(Request $request, ObjectManager $manager)
{
$permissionResult = $this->checkPermissionAdmin("ecrire", "client_compte");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
$referer = $request->headers->get('referer');
if (!$request->get('type')) {
$this->addFlash('error', 'Vous n\'avez pas rempli le type de prestation.');
if ($referer) {
return $this->redirect($referer);
} else {
return $this->redirectToRoute('client_compte');
}
}
if (!$request->get('username')) {
$this->addFlash('error', 'Vous n\'avez pas rempli l\'identifiant.');
if ($referer) {
return $this->redirect($referer);
} else {
return $this->redirectToRoute('client_compte');
}
}
if (!$request->get('email_cc')) {
$this->addFlash('error', 'Vous n\'avez pas rempli l\'email.');
if ($referer) {
return $this->redirect($referer);
} else {
return $this->redirectToRoute('client_compte');
}
}
if (!$request->get('telephone1')) {
$this->addFlash('error', 'Vous n\'avez pas rempli le numero de téléphone.');
if ($referer) {
return $this->redirect($referer);
} else {
return $this->redirectToRoute('client_compte');
}
}
if (!$request->get('rue')) {
$this->addFlash('error', 'Vous n\'avez pas rempli la rue.');
if ($referer) {
return $this->redirect($referer);
} else {
return $this->redirectToRoute('client_compte');
}
}
if (!$request->get('postal')) {
$this->addFlash('error', 'Vous n\'avez pas rempli le code postal.');
if ($referer) {
return $this->redirect($referer);
} else {
return $this->redirectToRoute('client_compte');
}
}
if (!$request->get('ville')) {
$this->addFlash('error', 'Vous n\'avez pas rempli la ville.');
if ($referer) {
return $this->redirect($referer);
} else {
return $this->redirectToRoute('client_compte');
}
}
$client_compte = new ClientCompte;
$centre_groupe = $this->em->getrepository(CentreGroupe::class)->find($this->id);
$client_compte->setCentreGroupe($centre_groupe);
$client_compte->setCentreType(null);
$randomPassword = bin2hex(random_bytes(10));
$hashedPassword = password_hash($randomPassword, PASSWORD_DEFAULT);
$client_compte->setCliPassword($hashedPassword);
$client_compte->setCliNomSociete($request->get('societe'));
$client_compte->setCliUsername($request->get('username'));
if ($request->get('mdp') != "") {
$hashedPassword = $this->passwordHasher->hashPassword(
$client_compte,
$request->get('mdp')
);
$client_compte->setCliPassword($hashedPassword);
}
$client_compte->setCliNom($request->get('nom_cc'));
$client_compte->setCliPrenom($request->get('prenom_cc'));
$client_compte->setCliEmail($request->get('email_cc'));
$client_compte->setCliTelephone($request->get('telephone1'));
$client_compte->setCliTelephone2($request->get('telephone2'));
$client_compte->setCliFax($request->get('fax'));
$client_compte->setCliTva($request->get('tva') ? $request->get('tva') : null);
$client_compte->setCliSiren($request->get('siren') ? $request->get('siren') : null);
$client_compte->setCliCpl($request->get('cpl') ? $request->get('cpl') : null);
$client_compte->setCliContact1Nom($request->get('nom_responsable') ? $request->get('nom_responsable') : null);
$client_compte->setCliContact1Prenom($request->get('prenom_responsable') ? $request->get('prenom_responsable') : null);
$client_compte->setCliContact1Email($request->get('email_responsable') ? $request->get('email_responsable') : null);
$client_compte->setCliContact1Telephone($request->get('telephone_responsable') ? $request->get('telephone_responsable') : null);
$client_compte->setCliContact2Nom($request->get('nom_compta') ? $request->get('nom_compta') : null);
$client_compte->setCliContact2Prenom($request->get('prenom_compta') ? $request->get('prenom_compta') : null);
$client_compte->setCliContact2Email($request->get('email_compta') ? $request->get('email_compta') : null);
$client_compte->setCliContact2Telephone($request->get('telephone_compta') ? $request->get('telephone_compta') : null);
$client_compte->setCliIsActive($request->get('actif') ? 1 : 0);
$client_compte->setCliHasProAccess($request->get('pro_access') ? 1 : 0);
$client_compte->setCliNbJourAlerteEcheance1($request->get('alerte1') ? $request->get('alerte1') : null);
$client_compte->setCliNbJourAlerteEcheance2($request->get('alerte2') ? $request->get('alerte2') : null);
$client_compte->setCliNbJourAlerteEcheance3($request->get('alerte3') ? $request->get('alerte3') : null);
$client_compte->setCliNbJourAlerteEcheanceSms1($request->get('alerteSms1') ? $request->get('alerteSms1') : null);
$client_compte->setCliNbJourAlerteEcheanceSms2($request->get('alerteSms2') ? $request->get('alerteSms2') : null);
$client_compte->setCliNbJourAlerteEcheanceSms3($request->get('alerteSms3') ? $request->get('alerteSms3') : null);
$client_compte->setCliVl(false);
$client_compte->setCliPl(false);
$client_compte->setCliCl(false);
foreach ($request->get('type') as $type) {
if ($type == 'VL') {
$client_compte->setCliVl(true);
}
if ($type == 'PL') {
$client_compte->setCliPl(true);
}
if ($type == 'CL') {
$client_compte->setCliCl(true);
}
}
$adresse = new Adresse;
// $adresse->setAdrCoordonnees($request->get(''));
$adresse->setAdrRue($request->get('rue'));
$adresse->setAdrComplement($request->get('complement'));
$adresse->setAdrCodePostal($request->get('postal'));
$adresse->setAdrVille($request->get('ville'));
$manager->persist($adresse);
$client_compte->setAdresse($adresse);
if ($request->get('rue_fact') == null && $request->get('postal_fact') == null && $request->get('ville_fact') == null) {
$client_compte->setAdresseFacturation($adresse);
} else {
$adresseFact = new Adresse;
// $adresse->setAdrCoordonnees($request->get(''));
$adresseFact->setAdrRue($request->get('rue_fact'));
$adresseFact->setAdrComplement($request->get('complement_fact'));
$adresseFact->setAdrCodePostal($request->get('postal_fact'));
$adresseFact->setAdrVille($request->get('ville_fact'));
$manager->persist($adresseFact);
$client_compte->setAdresseFacturation($adresseFact);
}
$manager->persist($client_compte);
$manager->flush();
$this->cache->delete('client_compte' . $this->id);
$this->cache->delete('client_compte_actif' . $this->id);
$this->addFlash('success', 'Nouveau client enregistré.');
if ($referer) {
return $this->redirect($referer);
} else {
return $this->redirectToRoute('dashboard');
}
}
/**
* @Route("/admin/client_compte_delete/{id}", name="client_compte_delete")
*/
public function deleteClientCompte(ClientCompte $client_compte, ObjectManager $manager)
{
$permissionResult = $this->checkPermissionAdmin("supp", "client_compte");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
if ($client_compte->getCentreGroupe()->getId() !== $this->id) {
return new Response('cannot_delete_client_compte_another_center');
}
try {
// Supprimer l'entité
$manager->remove($client_compte);
$manager->flush();
$this->cache->delete('client_compte' . $this->id);
$this->cache->delete('client_compte_actif' . $this->id);
$this->vide_cache_centre_groupe($this->id);
} catch (ForeignKeyConstraintViolationException $e) {
return new Response('cannot_delete_client_compte_associate');
}
return new Response('ok');
}
/**
* @Route("/admin/client_compte_update/{id}", name="client_compte_update")
*/
public function updateClientCompte(ClientCompte $client_compte, Request $request, ObjectManager $manager)
{
$currentState = $client_compte->isCliIsActive();
$permissionResult = $this->checkPermissionAdmin("ecrire", "client_compte");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
$referer = $request->headers->get('referer');
if ($client_compte->getCentreGroupe()->getId() !== $this->id) {
$this->addFlash('error', "Impossible de mettre à jour le client compte car il n'est pas liée à votre centre.");
if ($referer) {
return $this->redirect($referer);
} else {
return $this->redirectToRoute('client_compte');
}
}
if (!$request->get('type')) {
$this->addFlash('error', 'Vous n\'avez pas rempli le type de prestation.');
if ($referer) {
return $this->redirect($referer);
} else {
return $this->redirectToRoute('client_compte');
}
}
if (!$request->get('username')) {
$this->addFlash('error', 'Vous n\'avez pas rempli l\'identifiant.');
if ($referer) {
return $this->redirect($referer);
} else {
return $this->redirectToRoute('client_compte');
}
}
if (!$request->get('email_cc')) {
$this->addFlash('error', 'Vous n\'avez pas rempli l\email.');
if ($referer) {
return $this->redirect($referer);
} else {
return $this->redirectToRoute('client_compte');
}
}
if (!$request->get('telephone1')) {
$this->addFlash('error', 'Vous n\'avez pas rempli le numero de téléphone.');
if ($referer) {
return $this->redirect($referer);
} else {
return $this->redirectToRoute('client_compte');
}
}
if (!$request->get('rue')) {
$this->addFlash('error', 'Vous n\'avez pas rempli la rue.');
if ($referer) {
return $this->redirect($referer);
} else {
return $this->redirectToRoute('client_compte');
}
}
if (!$request->get('postal')) {
$this->addFlash('error', 'Vous n\'avez pas rempli le code postal.');
if ($referer) {
return $this->redirect($referer);
} else {
return $this->redirectToRoute('client_compte');
}
}
if (!$request->get('ville')) {
$this->addFlash('error', 'Vous n\'avez pas rempli la ville.');
if ($referer) {
return $this->redirect($referer);
} else {
return $this->redirectToRoute('client_compte');
}
}
$centre_groupe = $this->em->getrepository(CentreGroupe::class)->find($this->id);
$client_compte->setCentreGroupe($centre_groupe);
//$centre_type = $this->em->getrepository(CentreType::class)->find('');
$client_compte->setCentreType(null);
$client_compte->setCliNomSociete($request->get('societe'));
$client_compte->setCliNom($request->get('nom_cc'));
$client_compte->setCliPrenom($request->get('prenom_cc'));
$client_compte->setCliTelephone($request->get('telephone1'));
$client_compte->setCliUsername($request->get('username'));
if ($request->get('mdp') != "") {
$hashedPassword = $this->passwordHasher->hashPassword(
$client_compte,
$request->get('mdp')
);
$client_compte->setCliPassword($hashedPassword);
}
$client_compte->setCliEmail($request->get('email_cc') ? $request->get('email_cc') : '');
$client_compte->setCliTelephone2($request->get('telephone2'));
$client_compte->setCliFax($request->get('fax'));
$client_compte->setCliTva($request->get('tva') ? $request->get('tva') : null);
$client_compte->setCliSiren($request->get('siren') ? $request->get('siren') : null);
$client_compte->setCliCpl($request->get('cpl') ? $request->get('cpl') : null);
$client_compte->setCliContact1Nom($request->get('nom_responsable') ? $request->get('nom_responsable') : null);
$client_compte->setCliContact1Prenom($request->get('prenom_responsable') ? $request->get('prenom_responsable') : null);
$client_compte->setCliContact1Email($request->get('email_responsable') ? $request->get('email_responsable') : null);
$client_compte->setCliContact1Telephone($request->get('telephone_responsable') ? $request->get('telephone_responsable') : null);
$client_compte->setCliContact2Nom($request->get('nom_compta') ? $request->get('nom_compta') : null);
$client_compte->setCliContact2Prenom($request->get('prenom_compta') ? $request->get('prenom_compta') : null);
$client_compte->setCliContact2Email($request->get('email_compta') ? $request->get('email_compta') : null);
$client_compte->setCliContact2Telephone($request->get('telephone_compta') ? $request->get('telephone_compta') : null);
$client_compte->setCliIsActive($request->get('actif') ? 1 : 0);
$client_compte->setCliHasProAccess($request->get('pro_access') ? 1 : 0);
$client_compte->setCliNbJourAlerteEcheance1($request->get('alerte1') ? $request->get('alerte1') : null);
$client_compte->setCliNbJourAlerteEcheance2($request->get('alerte2') ? $request->get('alerte2') : null);
$client_compte->setCliNbJourAlerteEcheance3($request->get('alerte3') ? $request->get('alerte3') : null);
$client_compte->setCliNbJourAlerteEcheanceSms1($request->get('alerteSms1') ? $request->get('alerteSms1') : null);
$client_compte->setCliNbJourAlerteEcheanceSms2($request->get('alerteSms2') ? $request->get('alerteSms2') : null);
$client_compte->setCliNbJourAlerteEcheanceSms3($request->get('alerteSms3') ? $request->get('alerteSms3') : null);
$client_compte->setCliVl(false);
$client_compte->setCliPl(false);
$client_compte->setCliCl(false);
foreach ($request->get('type') as $type) {
if ($type == 'VL') {
$client_compte->setCliVl(true);
}
if ($type == 'PL') {
$client_compte->setCliPl(true);
}
if ($type == 'CL') {
$client_compte->setCliCl(true);
}
}
$adresse = $this->em->getrepository(Adresse::class)->find($request->get('adresseId'));
// $adresse->setAdrCoordonnees($request->get(''));
$adresse->setAdrRue($request->get('rue'));
$adresse->setAdrComplement($request->get('complement'));
$adresse->setAdrCodePostal($request->get('postal'));
$adresse->setAdrVille($request->get('ville'));
$manager->persist($adresse);
$client_compte->setAdresse($adresse);
if ($request->get('rue_fact') == null && $request->get('postal_fact') == null && $request->get('ville_fact') == null) {
$client_compte->setAdresseFacturation($adresse);
} else {
$adresseFact = $this->em->getrepository(Adresse::class)->find($request->get('adresseFactId'));
$adresseFact->setAdrRue($request->get('rue_fact'));
$adresseFact->setAdrComplement($request->get('complement_fact'));
$adresseFact->setAdrCodePostal($request->get('postal_fact'));
$adresseFact->setAdrVille($request->get('ville_fact'));
$manager->persist($adresseFact);
$client_compte->setAdresseFacturation($adresseFact);
}
$manager->persist($client_compte);
$manager->flush();
$this->cache->delete('client_compte' . $this->id);
$this->cache->delete('client_compte_actif' . $this->id);
if ($client_compte->isCliIsActive() && $client_compte->isCliIsActive() != $currentState && $_SERVER['APP_ENV'] != 'dev') {
// demande de cédric et aurélien le 28/05 pour ne pas activer par défaut les compte client pro
// mantis num : 0000928
$email = (new Email())
->from('noreply@notification-abs.com')
->to($client_compte->getCliEmail())
->subject('Activation de votre Espace Pro sur ' .$request->getSchemeAndHttpHost())
->html($this->renderView('email/activation_client_compte.html.twig', ['client' => $client_compte, 'objet' => 'Activation de votre Espace Pro sur ' .$request->getSchemeAndHttpHost()]));
$this->mailer->send($email);
}
$this->addFlash('success', 'Modification du client enregistré.');
if ($referer) {
return $this->redirect($referer);
} else {
return $this->redirectToRoute('client_compte');
}
}
// Gestion des Parametres de Centre groupe ----------------------------------------
/**
* @Route("/admin/parametre_centre_groupe", name="parametre_centre_groupe")
*/
public function paramCentreGroupe(Request $request, ObjectManager $manager): Response
{
$allpermission = $this->checkAllPermissionAdmin("parametre_centre_groupe");
if (!$allpermission || !$allpermission['lire']) {
$this->addFlash('error', 'Impossible, vous n\'avez pas accés à cette page');
return $this->redirectToRoute('admin_erreur');
}
$data_param_centre_groupes = $this->em->getrepository(ParametreCentreGroupe::class)->findOneByCentreGroupe($this->id);
$form = $this->createForm(ParametreCentreGroupeType::class, $data_param_centre_groupes);
$fileLogoCentre = $data_param_centre_groupes->getPcgCheminLogo();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$permissionResult = $this->checkPermissionAdmin("ecrire", "parametre_centre_groupe");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
$newFileLogoCentre = $form->get('pcg_chemin_logo')->getData();
// if (is_string($fileLogoCentre)) {
// $fileLogoCentre = new UploadedFile($fileLogoCentre, basename($fileLogoCentre));
// }
if ($newFileLogoCentre) {
$fileLogoName = md5(uniqid()) . '.' . $newFileLogoCentre->guessExtension();
$newFileLogoCentre->move(
$this->getParameter('data_directory') . '/' . $this->id,
$fileLogoName
);
// Update the entity with the new file name
$data_param_centre_groupes->setPcgCheminLogo($fileLogoName);
if ($fileLogoCentre) {
unlink($this->getParameter('data_directory') . '/' . $this->id . '/' . $fileLogoCentre);
}
} else {
$data_param_centre_groupes->setPcgCheminLogo($fileLogoCentre);
}
$this->cache->delete('param_centre_groupe' . $this->id);
$manager->persist($data_param_centre_groupes);
$manager->flush();
$this->vide_cache_centre_groupe($this->id);
// Redirection vers la page d'affichage des paramètres du centre enregistrés
return $this->redirectToRoute('parametre_centre_groupe');
}
// Affichage du formulaire
return $this->render('admin/parametre_centre_groupe_view.html.twig', [
'formParametreCentreGroupe' => $form->createView(),
'allpermission' => $allpermission,
]);
}
// Gestion des Parametres de Centre -----------------------------------------------
/**
* @Route("/admin/parametre_centre/{id_centre}", name="parametre_centre")
*/
public function parametrecentre($id_centre, Request $request, ObjectManager $manager): Response
{
$allpermission = $this->checkAllPermissionAdmin("parametre_centre");
if (!$allpermission || !$allpermission['lire']) {
$this->addFlash('error', 'Impossible, vous n\'avez pas accés à cette page');
return $this->redirectToRoute('admin_erreur');
}
$access = $this->checkUserAccessToCentre($id_centre);
if ($access !== true) {
return $access;
}
$data_centres = $this->em->getRepository(Centre::class)->findBy(['centre_groupe' => $this->id]);
$this_centre ='';
$other_centres = [];
foreach ($data_centres as $key => $centre) {
if ($centre->getId() == $id_centre) {
$this_centre = $centre;
} else {
$other_centres[] = $centre;
}
}
$data_param_centres = $this_centre->getCtrParametreCentre();
$data_param_centres_admin = $this_centre->getCtrParametreCentreAdmin();
$data_holidays = $data_param_centres->getHolidays();
// Création du formulaire à partir des données des paramètres du centre
$formParamCentre = $this->createForm(ParametreCentreType::class, $data_param_centres);
$fileImgCentre = $data_param_centres->getPcCheminImgCentre();
$fileCGV = $data_param_centres->getPcConditionsChemin();
// Gestion de la soumission du formulaire
$formParamCentre->handleRequest($request);
// Si le formulaire est soumis et valide
if ($formParamCentre->isSubmitted() && $formParamCentre->isValid()) {
// Gestion de securité verifie si l'utilisateur a les droit de modification sinon renvoie vers la pas d'erreur.
$permissionResult = $this->checkPermissionAdmin("ecrire", "parametre_centre");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
$newFileImgCentre = $formParamCentre->get('pc_chemin_img_centre')->getData();
// if (is_string($newFileImgCentre)) {
// $newFileImgCentre = new UploadedFile($newFileImgCentre, basename($newFileImgCentre));
// }
if ($newFileImgCentre) {
$fileNameImgCentre = md5(uniqid()) . '.' . $newFileImgCentre->guessExtension();
$newFileImgCentre->move(
$this->getParameter('data_directory') . '/' . $this->id . '/' . $id_centre,
$fileNameImgCentre
);
// Update the entity with the new file name
$data_param_centres->setPcCheminImgCentre($fileNameImgCentre);
if ($fileImgCentre) {
unlink($this->getParameter('data_directory') . '/' . $this->id . '/' . $id_centre . '/' . $fileImgCentre);
}
} else {
$data_param_centres->setPcCheminImgCentre($fileImgCentre);
}
$newFileCGV = $formParamCentre->get('pc_conditions_chemin')->getData();
// if (is_string($fileCGV)) {
// $fileCGV = new UploadedFile($fileCGV, basename($fileCGV));
// }
if ($newFileCGV) {
$fileNameCGV = 'Condition_general' . $id_centre . '.pdf';
$newFileCGV->move(
$this->getParameter('data_directory') . '/' . $this->id . '/' . $id_centre,
$fileNameCGV
);
// Update the entity with the new file name
$data_param_centres->setPcConditionsChemin($fileNameCGV);
// if($fileCGV) {
// unlink( $this->getParameter('data_directory').'/'.$this->id.'/'.$fileCGV);
// }
} else {
$data_param_centres->setPcConditionsChemin($fileCGV);
}
// Initialisation d'un tableau des congés fixes
$table_holidays = ['jour_an', 'lundi_paques', '1er_mai', '8mai', 'ascension', 'pentecote', '14_juillet', 'assomption', 'toussaint', 'armistice', 'noel'];
// Récupération des congés ajoutés different de la liste des congés fix (jours chomés ajouter)
$j_conges = array_diff($data_holidays, $table_holidays);
// Récupération de la liste des congés du centre renvoyer par le formulaire
$holidays = $data_param_centres->getHolidays();
// Vérification si plusieurs jours de congés ont été ajoutés dans le formulaire
if (is_array($j_conges)) {
// Parcours de tous les jours de congés ajoutés
foreach ($j_conges as $j_conge) {
// Vérification si le jour de congé n'existe pas déjà dans la liste des jours de congés
if (!in_array($j_conge, $holidays)) {
// Ajout du jour de congé dans la liste des jours de congés
$holidays[] = $j_conge;
}
}
// Si $j_conges n'est pas un tableau
} else {
// Vérification si le jour de congé n'existe pas déjà dans la liste des jours de congés
if (!in_array($j_conges, $holidays)) {
// Ajout du jour de congé dans la liste des jours de congés
$holidays[] = $j_conges;
}
}
// Mise à jour de la liste des jours fériés dans les paramètres du centre
$data_param_centres->setHolidays($holidays);
$trou = false;
if ($request->get("remplir_trou") === '1') {
$trou = true;
}
$data_param_centres_admin->setPcaCalendrierRemplirTrou($trou);
if($data_param_centres->isIsBlockRdv()) {
if($data_param_centres->getNbHoursBlockRdv() === null) {
$this->addFlash('error', 'Veuillez ajouter le nombre d\'heure pour le blocage');
return $this->redirectToRoute('parametre_centre', ['id_centre' => $id_centre]);
}
}
$manager->persist($data_param_centres);
$manager->persist($data_param_centres_admin);
$manager->flush();
$this->vide_cache_centre_groupe($this->id);
$this->cache->delete('param_centre');
// Redirection vers la page d'affichage des paramètres du centre enregistrés
return $this->redirectToRoute('parametre_centre', ['id_centre' => $id_centre]);
}
// Affichage du formulaire
return $this->render('admin/parametre_centre_view.html.twig', [
'centreName' => $this_centre->getCtrNom(),
'idCentreType' => $this_centre->getCentreType()->getId(),
'other_centres' => $other_centres,
'formParametreCentre' => $formParamCentre->createView(),
'holidays' => $data_holidays,
'idCentre' => $id_centre,
'idCentreGroupe' => $this->id,
'allpermission' => $allpermission,
'paramAdmin' => $data_param_centres_admin,
'envoiSms' => $data_param_centres->isPcEnvoiSms(),
'rappelSms' => $data_param_centres->isPcRappelSms(),
'envoiSmsAvis' => $data_param_centres->isPcEnvoiSmsAvis(),
'envoiEmailAvis' => $data_param_centres->isPcEnvoiEmailAvis(),
]);
}
/**
* @Route("/admin/add_holiday/{id_centre}", name="add_holiday", methods={"POST"})
*/
public function addHoliday($id_centre, Request $request, ObjectManager $manager)
{
$permissionResult = $this->checkPermissionAdmin("ecrire", "parametre_centre");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
$access = $this->checkUserAccessToCentre($id_centre);
if ($access !== true) {
return $access;
}
/** @var Centre $centre */
$centre = $this->em->getrepository(Centre::class)->find($id_centre);
$data_param_centres = $this->em->getrepository(ParametreCentre::class)->find($centre->getCtrParametreCentre()->getId());
// Récupération des jours de congés ajoutés dans le formulaire
$j_conges = $request->request->get('j_conges');
// Récupération des jours de congés existants
$holidays = $data_param_centres->getHolidays();
// Vérification si plusieurs jours de congés ont été ajoutés dans le formulaire
if (is_array($j_conges)) {
// Parcours de tous les jours de congés ajoutés
foreach ($j_conges as $j_conge) {
// Conversion de la date au format Y-m-d vers le format d/m/Y
$date = DateTime::createFromFormat('Y-m-d', $j_conge);
$j_conge = $date->format('d/m/Y');
// Vérification si le jour de congé n'existe pas déjà dans la liste des jours de congés
if (!in_array($j_conge, $holidays)) {
// Ajout du jour de congé dans la liste des jours de congés
$holidays[] = $j_conge;
}
}
// Si un seul jour de congé a été ajouté dans le formulaire
} else {
// Conversion de la date au format Y-m-d vers le format d/m/Y
$date = DateTime::createFromFormat('Y-m-d', $j_conges);
$j_conges = $date->format('d/m/Y');
// Vérification si le jour de congé n'existe pas déjà dans la liste des jours de congés
if (!in_array($j_conges, $holidays)) {
// Ajout du jour de congé dans la liste des jours de congés
$holidays[] = $j_conges;
}
}
// Mise à jour de la liste des jours fériés dans les paramètres du centre
$data_param_centres->setHolidays($holidays);
$manager->persist($data_param_centres);
$manager->flush();
return new Response('ok');
}
/**
* @Route("/admin/supp_holiday/{id_centre}", name="supp_holiday", methods={"POST"})
*/
public function suppHoliday($id_centre, Request $request, ObjectManager $manager)
{
$permissionResult = $this->checkPermissionAdmin("ecrire", "parametre_centre");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
$access = $this->checkUserAccessToCentre($id_centre);
if ($access !== true) {
return $access;
}
/** @var Centre $centre */
$centre = $this->em->getrepository(Centre::class)->find($id_centre);
$data_param_centres = $this->em->getrepository(ParametreCentre::class)->find($centre->getCtrParametreCentre()->getId());
// Récupération de la liste des congés retourné
$j_conge = $request->request->get('j_conges');
// Récupération de la liste des jours fériés en BDD
$holidays = $data_param_centres->getHolidays();
$key = array_search($j_conge, $holidays);
unset($holidays[$key]);
// Mise à jour de la liste des jours fériés dans les paramètres du centre
$data_param_centres->setHolidays($holidays);
$manager->persist($data_param_centres);
$manager->flush();
return new Response('ok');
}
/**
* @Route("/admin/copie_parametres/{type}", name="copie_parametres", methods={"POST"})
*/
public function copieParametres(Request $request, $type)
{
$permissionResult = $this->checkPermissionAdmin("ecrire", "parametre_centre");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
$access = $this->checkUserAccessToCentre($request->get('thisCentreId'));
if ($access !== true) {
return $access;
}
if (!$request->get('thisCentreId') || !$request->get('otherCentreId')) {
return new JsonResponse(['error' => 'Identifiants de centre non spécifiés ou invalides.'], 400);
}
$data_centre = $this->em->getrepository(Centre::class)->find($request->get('thisCentreId'));
$data_other_centre = $this->em->getrepository(Centre::class)->find($request->get('otherCentreId'));
if (empty($data_centre) || empty($data_other_centre)) {
return new JsonResponse(['error' => 'Aucun centres n’ont été trouvés.'], 404);
}
$data_other_param_centre = $data_other_centre->getCtrParametreCentre();
switch ($type) {
case 'jours_feries':
$data_other_param_centre->setHolidays($data_centre->getCtrParametreCentre()->getHolidays());
break;
case 'energies':
$data_other_param_centre->setEnergies($data_centre->getCtrParametreCentre()->getEnergies());
break;
case 'messages':
$data_other_param_centre->setPcMessageConfSms($data_centre->getCtrParametreCentre()->getPcMessageConfSms());
$data_other_param_centre->setPcMessageRappelSms($data_centre->getCtrParametreCentre()->getPcMessageRappelSms());
$data_other_param_centre->setPcMessageAnnulSms($data_centre->getCtrParametreCentre()->getPcMessageAnnulSms());
$data_other_param_centre->setPcMessageAvisGoogleSms($data_centre->getCtrParametreCentre()->getPcMessageAvisGoogleSms());
break;
case 'email':
$data_other_param_centre->setPcEmailConfCustom($data_centre->getCtrParametreCentre()->getPcEmailConfCustom());
break;
default:
return new JsonResponse(['error' => 'Type de paramètre non supporté.'], 400);
}
$this->em->persist($data_other_param_centre);
$this->em->flush();
return new JsonResponse(['success' => "Les paramètres de type '{$type}' ont été copiés avec succès."]);
}
// Prévisualisation email avis Google -------------------------------------------------------
/**
* @Route("/admin/preview-email-avis", name="preview_email_avis")
*/
public function previewEmailAvis(Request $request): Response
{
$nomCentre = strip_tags($request->query->get('nom_centre', 'Centre Auto'));
$lienAvis = strip_tags($request->query->get('lien_avis', 'https://search.google.com/local/writereview?placeid=EXEMPLE'));
return $this->render('email/avis_google.html.twig', [
'prenom' => 'Jean',
'nom' => 'Dupont',
'nom_centre' => $nomCentre,
'lien_avis' => $lienAvis,
]);
}
// Prévisualisation email confirmation RDV centre -----------------------------------
/**
* @Route("/admin/preview-email-confirmation-rdv/{id_centre}", name="preview_email_confirmation_rdv_centre")
*/
public function previewEmailConfirmationRdvCentre($id_centre): Response
{
$centre = $this->em->getRepository(Centre::class)->find($id_centre);
if (!$centre) {
throw $this->createNotFoundException('Centre introuvable.');
}
$rdv = $this->em->getRepository(Rendezvous::class)->findOneBy(
['centre' => $centre],
['id' => 'DESC']
);
if (!$rdv) {
return new Response('<p style="font-family:sans-serif;padding:20px;">Aucun rendez-vous trouvé pour ce centre. Un aperçu sera disponible après le premier rendez-vous.</p>');
}
$rdvFact = $this->em->getRepository(RendezVousFacturation::class)->findOneBy(['rendezvous' => $rdv->getId()]);
return $this->render('email/confirmation_rdv_email_centre.html.twig', [
'rdv' => $rdv,
'rdv_fact' => $rdvFact,
'objet' => 'Notification nouveau rendez-vous depuis MercureWeb',
]);
}
// Gestion des Infos centre -------------------------------------------------------
/**
* @Route("/admin/info_centre/{id_centre}", name="info_centre")
*/
public function infoCentre($id_centre, Request $request, ObjectManager $manager): Response
{
$allpermission = $this->checkAllPermissionAdmin("info_centre");
if (!$allpermission || !$allpermission['lire']) {
$this->addFlash('error', 'Impossible, vous n\'avez pas accés à cette page');
return $this->redirectToRoute('admin_erreur');
}
$access = $this->checkUserAccessToCentre($id_centre);
if ($access !== true) {
return $access;
}
$data_centres = $this->em->getrepository(Centre::class)->find($id_centre);
$data_adresse = $this->em->getrepository(Adresse::class)->find($data_centres->getctradresse());
$formCentre = $this->createForm(CentreFormType::class, $data_centres);
$formCentreAdresse = $this->createForm(AdresseType::class, $data_adresse);
// Gestion de la soumission du formulaire
$formCentre->handleRequest($request);
$formCentreAdresse->handleRequest($request);
$originalCtrAgrement = $data_centres->getCtrAgrement();
$originalCentreType = $data_centres->getCentreType();
// Si le formulaire est soumis et valide
if ($formCentre->isSubmitted() && $formCentre->isValid()) {
$permissionResult = $this->checkPermissionAdmin("ecrire", "info_centre");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
$data_centres->setCtrAgrement($originalCtrAgrement);
$data_centres->setCentreType($originalCentreType);
$manager->persist($data_centres);
$manager->flush();
// $this->cache->delete('info_centre'. $this->id);
$this->vide_cache_centre_groupe($this->id);
// Redirection vers la page d'affichage des paramètres du centre enregistrés
return $this->redirectToRoute('info_centre', ['id_centre' => $data_centres->getId()]);
}
if ($formCentreAdresse->isSubmitted() && $formCentreAdresse->isValid()) {
$permissionResult = $this->checkPermissionAdmin("ecrire", "info_centre");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
$manager->persist($data_adresse);
$manager->flush();
$this->vide_cache_centre_groupe($this->id);
// $this->cache->delete('info_centre'. $this->id);
// Redirection vers la page d'affichage des paramètres du centre enregistrés
return $this->redirectToRoute('info_centre', ['id_centre' => $data_centres->getId()]);
}
// , ['id'=> $data_param_centre_groupes->getId()]
// Affichage du formulaire
return $this->render('admin/info_centre_view.html.twig', [
'centreName' => $data_centres->getCtrNom(),
'formCentre' => $formCentre->createView(),
'formCentreAdresse' => $formCentreAdresse->createView(),
'allpermission' => $allpermission,
]);
}
// Gestion des Horaire d'ouverture ------------------------------------------------
/**
* @Route("/admin/centre_horaire/{id_centre}", name="centre_horaire")
*/
public function centreHoraire($id_centre, Request $request, ObjectManager $manager): Response
{
$allpermission = $this->checkAllPermissionAdmin("centre_horaire");
if (!$allpermission || !$allpermission['lire']) {
$this->addFlash('error', 'Impossible, vous n\'avez pas accés à cette page');
return $this->redirectToRoute('admin_erreur');
}
$access = $this->checkUserAccessToCentre($id_centre);
if ($access !== true) {
return $access;
}
$data_centre_horaires = $this->cache->get('centre_horaire' . $id_centre, function () use ($id_centre) {
$data_centre_horaires = $this->em->getrepository(CentreHoraire::class)->findByCentre($id_centre);
return $data_centre_horaires;
});
$data_centres = $this->em->getRepository(Centre::class)->findBy(['centre_groupe' => $this->id]);
$this_centre ='';
$other_centres = [];
foreach ($data_centres as $key => $centre) {
if ($centre->getId() == $id_centre) {
$this_centre = $centre;
} else {
$other_centres[] = $centre;
}
}
$this->cache->delete('centre_horaire' . $id_centre);
// Affichage du formulaire
return $this->render('admin/centre_horaire_view.html.twig', [
'centre_horaires' => $data_centre_horaires,
'centre' => $this_centre,
'other_centres' => $other_centres,
'allpermission' => $allpermission,
]);
}
/**
* @Route("/admin/copie_horaire_centre", name="copie_horaire_centre", methods={"POST"})
*/
public function copieHoraireCentre(Request $request)
{
$permissionResult = $this->checkPermissionAdmin("ecrire", "centre_horaire");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
$access = $this->checkUserAccessToCentre($request->get('thisCentreId'));
if ($access !== true) {
return $access;
}
if (!$request->get('thisCentreId') || !$request->get('centreId')) {
return new JsonResponse([
'error' => 'Identifiants de centre non spécifiés ou invalides.'
], 400);
}
$thisCentreHoraires = $this->em->getrepository(CentreHoraire::class)->findBy(['centre' => $request->get('thisCentreId')]);
$otherCentreHoraires = $this->em->getrepository(CentreHoraire::class)->findBy(['centre' => $request->get('centreId')]);
if (empty($thisCentreHoraires) || empty($otherCentreHoraires)) {
return new JsonResponse([
'error' => 'Aucun horaire trouvé pour les centres spécifiés.'
], 404);
}
$thisDay = null;
$otherDay = null;
$matin = true;
$matinOther = true;
foreach ($thisCentreHoraires as $thisHoraire) {
if ($thisDay == $thisHoraire->getCtrHorJoursSemaine()) {
$matin = false;
} else {
$matin = true;
}
$thisDay = $thisHoraire->getCtrHorJoursSemaine();
foreach ($otherCentreHoraires as $otherHoraire) {
if ($otherDay == $otherHoraire->getCtrHorJoursSemaine()) {
$matinOther = false;
} else {
$matinOther = true;
}
$otherDay = $otherHoraire->getCtrHorJoursSemaine();
if (($thisHoraire->getCtrHorJoursSemaine() === $otherHoraire->getCtrHorJoursSemaine()) && $matin && $matinOther) {
$this->applyChanges($thisHoraire, $otherHoraire);
} else if (($thisHoraire->getCtrHorJoursSemaine() === $otherHoraire->getCtrHorJoursSemaine()) && !$matin && !$matinOther) {
$this->applyChanges($thisHoraire, $otherHoraire);
}
}
}
$this->em->flush();
return new JsonResponse([
'success' => 'Les horaires ont été copiés avec succès.'
]);;
}
private function applyChanges($sourceHoraire, $targetHoraire) {
$targetHoraire->setCtrHorDebut($sourceHoraire->getCtrHorDebut());
$targetHoraire->setCtrHorFin($sourceHoraire->getCtrHorFin());
$targetHoraire->setCtrHorOuvert($sourceHoraire->isCtrHorOuvert());
$targetHoraire->setCtrHorJourContinue($sourceHoraire->isCtrHorJourContinue());
$this->em->persist($targetHoraire);
}
/**
* @Route("/admin/centre_horaires_update/{id_centre}/{id_centre_horaire}", name="centre_horaires_update")
*/
public function updateCentreHoraire($id_centre, $id_centre_horaire, Request $request, ObjectManager $manager)
{
$permissionResult = $this->checkPermissionAdmin("ecrire", "centre_horaire");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
$access = $this->checkUserAccessToCentre($id_centre);
if ($access !== true) {
return $access;
}
// $centre = $this->em->getrepository(Centre::class)->find($id_centre);
$centre_horaire = $this->em->getrepository(CentreHoraire::class)->find($id_centre_horaire);
// $centre_horaire->setCentre($centre);
$centre_horaire->setCtrHorDebut(new Datetime($request->get('heure_debut')));
$centre_horaire->setCtrHorFin(new Datetime($request->get('heure_fin')));
$centre_horaire->setCtrHorOuvert($request->get('ouvert') ? 1 : 0);
$centre_horaire->setCtrHorJourContinue($request->get('continue') ? 1 : 0);
$manager->persist($centre_horaire);
$manager->flush();
$this->cache->delete('centre_horaire' . $id_centre);
return $this->redirectToRoute('centre_horaire', ['id_centre' => $id_centre]);
}
// Gestion des Utilisateurs -------------------------------------------------------
/**
* @Route("/admin/profil", name="profil")
*/
public function profil(Request $request, ObjectManager $manager): Response
{
$utilisateur = $this->em->getRepository(Utilisateur::class)->find($this->getUser());
$formUtilisateur = $this->createForm(UtilisateurType::class, $utilisateur);
$formUtilisateur->handleRequest($request);
if ($formUtilisateur->isSubmitted() && $formUtilisateur->isValid()) {
$plainPassword = $formUtilisateur->get('utl_password')->getData();
if ($plainPassword) {
$hashedPassword = $this->passwordHasher->hashPassword(
$utilisateur,
$plainPassword
);
$utilisateur->setUtlPassword($hashedPassword);
}
$manager->persist($utilisateur);
$manager->flush();
$this->cache->delete('utilisateur' . $this->id);
$this->addFlash('success', 'Votre profil a été mis à jour avec succès.');
return $this->redirectToRoute('profil');
}
return $this->render('admin/profil_view.html.twig', [
'utilisateur' => $utilisateur,
'profilName' => $utilisateur->getUtlUsername(),
'formUtilisateur' => $formUtilisateur->createView(),
]);
}
/**
* @Route("/admin/utilisateur", name="utilisateur")
*/
public function utilisateur()
{
$allpermission = $this->checkAllPermissionAdmin("utilisateur");
if (!$allpermission || !$allpermission['lire']) {
$this->addFlash('error', 'Impossible, vous n\'avez pas accés à cette page');
return $this->redirectToRoute('admin_erreur');
}
$centreFonctions = $this->em->getRepository(CentreFonction::class)->findBy(['CentreGroupe' => $this->id]);
$utilisateurInfoRepository = $this->em->getRepository(UtilisateurInfo::class);
$utilisateurs = [];
foreach ($centreFonctions as $fonction) {
/** @var UtilisateurInfo $utilisateurInf */
$utilisateurInf = $utilisateurInfoRepository->findBy(['utl_inf_fonction' => $fonction->getId()]);
if (!is_null($utilisateurInf)) {
foreach ($utilisateurInf as $util) {
$utilisateurs[] = $util->getUtlInfUtilisateur();
}
}
}
$final = [];
foreach ($utilisateurs as $utilisateur) {
if (!in_array($utilisateur, $final)) {
$final[] = $utilisateur;
}
}
$user = $this->getUser();
$centreGroupe = $this->em->getRepository(CentreGroupe::class)->find($this->id);
$centres = [];
if ($centreGroupe->getCgGerant()) {
$centreGroupeByGerants = $this->em->getRepository(CentreGroupe::class)->findBy(['cg_gerant' => $centreGroupe->getCgGerant()->getId()]);
foreach ($centreGroupeByGerants as $centreGroupeByGerant) {
$allFonction = $this->em->getRepository(CentreFonction::class)->findBy(['CentreGroupe' => $centreGroupeByGerant->getId()]);
$centres[] = ['centreGroupe' => $centreGroupeByGerant, 'fonctions' => $allFonction];
}
}
if ($centres === []) {
$centres[] = ['centreGroupe' => $centreGroupe, 'fonctions' => $centreFonctions];
}
return $this->render('admin/utilisateur_view.html.twig', [
'utilisateurs' => $final,
'currentUser' => $user,
'fonctions' => $centreFonctions,
'allpermission' => $allpermission,
'centres' => $centres
]);
}
/**
* @Route("/admin/utilisateur/get/{id}", name="utilisateurGet")
*/
public function utilisateurGet(int $id)
{
$allpermission = $this->checkAllPermissionAdmin("utilisateur");
if (!$allpermission || !$allpermission['lire']) {
return new JsonResponse('ko');
}
$utilisateur = $this->em->getRepository(Utilisateur::class)->find($id);
$fonctions = [];
$fonctionName = '';
foreach ($utilisateur->getUtilisateurInfos() as $info) {
$fonctions[] = $info->getUtlInfFonction()->getId();
$fonctionName = $info->getUtlInfFonction()->getFctNom();
}
$utilisateurArr = [
'username' => $utilisateur->getUsername(),
'nom' => $utilisateur->getUtlNom(),
'prenom' => $utilisateur->getUtlPrenom(),
'mail' => $utilisateur->getUtlEmail(),
'agrement' => $utilisateur->getUtlAgrement(),
'masque' => $utilisateur->isUtlIsMasked(),
'fonctions' => $fonctions,
'fonctionName' => $fonctionName
];
return new JsonResponse($utilisateurArr);
}
/**
* @Route("/admin/utilisateur_add", name="utilisateur_add")
*/
public function AddUtilisateur(Request $request, ObjectManager $manager)
{
$permissionResult = $this->checkPermissionAdmin("ecrire", "utilisateur");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
$centre_groupe = $this->em->getRepository(CentreGroupe::class)->find($this->id);
$username = $request->get('user');
$nom = $request->get('nom');
$prenom = $request->get('prenom');
$email = $request->get('email');
$mdp = $request->get('mdp');
$mdp_conf = $request->get('mdp_conf');
$data = $request->request->all();
$idCentreArr = [];
foreach ($data as $key => $input) {
if ($input) {
$keyCentre = substr($key, 0, 7);
if ($keyCentre === 'centre_') {
$centreArr = explode('_', $key);
$idCentreArr[intval($centreArr[1])] = $input;
}
}
}
// Vérifier si tous les champs sont remplis
if (!$username || !$nom || !$prenom || !$mdp || !$mdp_conf) {
// Rediriger vers la même page avec un message d'erreur
return $this->redirectToRoute('utilisateur', ['error' => 'Veuillez remplir tous les champs.']);
}
// Vérifier si les mots de passe correspondent
if ($mdp != $mdp_conf) {
// Rediriger vers la même page avec un message d'erreur
return $this->redirectToRoute('utilisateur', ['error' => 'Les mots de passe ne correspondent pas.']);
}
if (strlen($mdp) < 5 || !preg_match('/[A-Z]/', $mdp) || !preg_match('/\d/', $mdp)) {
// Retourner une erreur si le mot de passe ne répond pas aux exigences
// Ceci est juste un exemple, vous devrez peut-être ajuster ceci pour qu'il fonctionne avec votre code existant
throw new \Exception("Le mot de passe doit comprendre au moins 5 caractères, dont une majuscule et un chiffre.");
}
$checkUser = $this->em->getRepository(Utilisateur::class)->findBy(['utl_username' => $username]);
if ($checkUser) {
return $this->redirectToRoute('utilisateur', ['error' => "Ce nom d'utilisateur est déjà utilisé."]);
}
$utilisateur = new Utilisateur;
$utilisateur->setCentreGroupe($centre_groupe);
$utilisateur->setUtlUsername($username);
$utilisateur->setUtlAgrement(null);
$utilisateur->setUtlNom($nom);
$utilisateur->setUtlPrenom($prenom);
$utilisateur->setUtlEmail($email);
$utilisateur->setUtlIsMasked($request->get('masque') ? 1 : 0);
$hashedPassword = $this->passwordHasher->hashPassword(
$utilisateur,
$mdp
);
$utilisateur->setUtlPassword($hashedPassword);
//!!!!!!!!!!!!!!!!!!!!!!!! A verifier !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
$utilisateur->setUtlPrestataire($request->get('utl_prestataire') ? 1 : 0);
$manager->persist($utilisateur);
$manager->flush();
if ($idCentreArr != []) {
foreach ($idCentreArr as $fonction) {
if ($fonction != 'none') {
$fonctionRepository = $this->em->getRepository(CentreFonction::class);
$currentFonction = $fonctionRepository->find(intval($fonction));
$utilisateurInfo = new UtilisateurInfo();
$utilisateurInfo->setUtlInfUtilisateur($utilisateur);
$utilisateurInfo->setUtlInfFonction($currentFonction);
$manager->persist($utilisateurInfo);
}
}
}
$manager->flush();
$this->cache->delete('utilisateur' . $this->id);
return $this->redirectToRoute('utilisateur', ['success' => 'L\'utilisateur a bien été enregistré.']);
}
/**
* @Route("/admin/utilisateur_delete/{id}", name="utilisateur_delete")
*/
public function deleteUtilisateur(Utilisateur $utilisateur, ObjectManager $manager)
{
$permissionResult = $this->checkPermissionAdmin("supp", "utilisateur");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
if ($utilisateur->getCentreGroupe()->getId() !== $this->id) {
return new Response('cannot_delete_user_another_center');
}
// Supprimer l'entité
foreach ($utilisateur->getUtilisateurInfos() as $utilisateurInfo) {
$manager->remove($utilisateurInfo);
}
$manager->remove($utilisateur);
$manager->flush();
$this->cache->delete('utilisateur' . $this->id);
$this->vide_cache_centre_groupe($this->id);
// Rediriger l'utilisateur vers la liste des produits
return new Response('ok');
}
/**
* @Route("/admin/utilisateur_update/{id}", name="utilisateur_update")
*/
public function updateUtilisateur(Utilisateur $utilisateur, Request $request, ObjectManager $manager, SessionInterface $session)
{
$permissionResult = $this->checkPermissionAdmin("ecrire", "utilisateur");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
$centre_groupe = $this->em->getRepository(CentreGroupe::class)->find($this->id);
$username = $request->get('user');
$nom = $request->get('nom');
$prenom = $request->get('prenom');
$email = $request->get('email');
$mdp = $request->get('mdp');
$mdp_conf = $request->get('mdp_conf');
$data = $request->request->all();
$idCentreArr = [];
foreach ($data as $key => $input) {
if ($input) {
$keyCentre = substr($key, 0, 7);
if ($keyCentre === 'centre_') {
$centreArr = explode('_', $key);
$idCentreArr[intval($centreArr[1])] = $input;
}
}
}
// Vérifier si tous les champs sont remplis
if (!$username || !$nom || !$prenom) {
// Rediriger vers la même page avec un message d'erreur
return $this->redirectToRoute('utilisateur', ['error' => 'Veuillez remplir tous les champs.']);
}
$utilisateur->setCentreGroupe($centre_groupe);
$utilisateur->setUtlAgrement(null);
$utilisateur->setUtlNom($nom);
$utilisateur->setUtlPrenom($prenom);
$utilisateur->setUtlEmail($email);
$utilisateur->setUtlIsMasked($request->get('masque') ? 1 : 0);
if ($mdp || $mdp_conf) {
// Vérifier si les mots de passe correspondent
if ($mdp != $mdp_conf) {
// Rediriger vers la même page avec un message d'erreur
return $this->redirectToRoute('utilisateur', ['error' => 'Les mots de passe ne correspondent pas.']);
}
if (strlen($mdp) < 5 || !preg_match('/[A-Z]/', $mdp) || !preg_match('/\d/', $mdp)) {
// Retourner une erreur si le mot de passe ne répond pas aux exigences
// Ceci est juste un exemple, vous devrez peut-être ajuster ceci pour qu'il fonctionne avec votre code existant
throw new \Exception("Le mot de passe doit comprendre au moins 5 caractères, dont une majuscule et un chiffre.");
}
$hashedPassword = $this->passwordHasher->hashPassword(
$utilisateur,
$mdp
);
$utilisateur->setUtlPassword($hashedPassword);
}
$utilisateur->setUtlPrestataire($request->get('utl_prestataire') ? 1 : 0);
$manager->persist($utilisateur);
if ($idCentreArr != []) {
foreach ($utilisateur->getUtilisateurInfos() as $ui) {
$manager->remove($ui);
}
foreach ($idCentreArr as $fonction) {
if ($fonction != 'none') {
$fonctionRepository = $this->em->getRepository(CentreFonction::class);
$currentFonction = $fonctionRepository->find(intval($fonction));
$utilisateurInfo = new UtilisateurInfo();
$utilisateurInfo->setUtlInfUtilisateur($utilisateur);
$utilisateurInfo->setUtlInfFonction($currentFonction);
$manager->persist($utilisateurInfo);
}
}
}
$user = $this->getUser();
$droits = $this->accessService->getRightsForUserOnPage($user, $this->id);
$session->set('droits' . $user->getId(), $droits);
$manager->flush();
$this->cache->delete('utilisateur' . $this->id);
return $this->redirectToRoute('utilisateur');
}
/**
* @Route("/admin/get_fonctions_by_user/{userId}", name="get_fonctions_by_user")
*/
public function getFonctionsByUser($userId)
{
$permissionResult = $this->checkPermissionAdmin("ecrire", "utilisateur");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
$user = $this->em->getRepository(Utilisateur::class)->find($userId);
if (!$user) {
return new JsonResponse(['error' => 'Utilisateur non trouvé'], 404);
}
$fonctions = [];
foreach ($user->getUtilisateurInfos() as $utilisateurInfo) {
$fonction = $utilisateurInfo->getUtlInfFonction();
$fonctions[] = [
'id' => $fonction->getId(),
'name' => $fonction->getFctnom(),
];
}
return new JsonResponse($fonctions);
}
// Gestion des Rendez-vous --------------------------------------------------------
/**
* @Route("/admin/calendrier", name="calendrier")
*/
public function Calendrier(): Response
{
$allpermission = $this->checkAllPermissionAdmin("calendrier");
$allpermissionBlocage = $this->checkAllPermissionAdmin("blocage");
$allpermissionRemboursement = $this->checkAllPermissionAdmin("remboursement");
$ParametreCentreGroupe = $this->em->getRepository(ParametreCentreGroupe::class)->findOneByUrl($_SERVER['SERVER_NAME']);
if (!$ParametreCentreGroupe && $_SERVER['APP_ENV'] == 'prod') {
return $this->render('public/construction.html.twig', [
'controller_name' => 'AdminController',
'serverName' => $_SERVER['SERVER_NAME']
]);
}
if (!$allpermission || !$allpermission['lire']) {
$this->addFlash('error', 'Impossible, vous n\'avez pas accés à cette page');
return $this->redirectToRoute('admin_erreur');
}
$data_prestations = $this->cache->get('prestation_actif' . $this->id, function () {
$data_prestations = $this->em->getrepository(CentrePrestation::class)->findActifByCentreGroupe($this->id);
return $data_prestations;
});
$data_type_visites = $this->cache->get('type_visite' . $this->id, function () {
$data_type_visites = $this->em->getrepository(TypeVisite::class)->findByCentreGroupe($this->id);
return $data_type_visites;
});
$data_type_vehicules = $this->cache->get('type_vehicule' . $this->id, function () {
$data_type_vehicules = $this->em->getrepository(TypeVehicule::class)->findByCentreGroupe($this->id);
return $data_type_vehicules;
});
$data_marques = $this->cache->get('marque', function () {
$data_marques = $this->em->getRepository(Marque::class)->findBy([], ['ordre' => 'asc', 'marque_libele' => 'asc']);
return $data_marques;
});
$data_marques_cl = $this->cache->get('marque_cl', function () {
$data_marques_cl = $this->em->getRepository(MarqueCl::class)->findBy([], ['ordre' => 'asc', 'marque_libele' => 'asc']);
return $data_marques_cl;
});
$data_energies = $this->cache->get('energie', function () {
$data_energies = $this->em->getrepository(Energie::class)->findAll();
return $data_energies;
});
$data_client_comptes = $this->cache->get('client_compte_actif' . $this->id, function () {
$data_client_comptes = $this->em->getrepository(ClientCompte::class)->findByCentreGroupeActif($this->id);
return $data_client_comptes;
});
$data_utilisateurs = $this->cache->get('utilisateur' . $this->id, function () {
$centreFonctions = $this->em->getRepository(CentreFonction::class)->findBy(['CentreGroupe' => $this->id]);
$utilisateurInfoRepository = $this->em->getRepository(UtilisateurInfo::class);
$utilisateurs = [];
foreach ($centreFonctions as $fonction) {
/** @var UtilisateurInfo $utilisateurInf */
$utilisateurInf = $utilisateurInfoRepository->findBy(['utl_inf_fonction' => $fonction->getId()]);
if (!is_null($utilisateurInf)) {
foreach ($utilisateurInf as $util) {
$utilisateurs[] = $util->getUtlInfUtilisateur();
}
}
}
$data_utilisateurs = [];
foreach ($utilisateurs as $utilisateur) {
if (!in_array($utilisateur, $data_utilisateurs) && $utilisateur->getUsername() != 'AbsSuperAdmin') {
$data_utilisateurs[] = $utilisateur;
}
}
return $data_utilisateurs;
});
$data_centre_types = $this->cache->get('centre_type' . $this->id, function () {
$data_centre_types = $this->em->getRepository(CentreType::class)->findTypesByCentreGroupeId($this->id);
return $data_centre_types;
});
$data_nbr_ligne = $this->cache->get('nbr_ligne' . $this->id, function () {
$data_nbr_ligne = $this->em->getRepository(Ligne::class)->findByCentreGroupeActif($this->id);
return $data_nbr_ligne;
});
// $data_partenaires = $this->cache->get('data_partenaires' . $this->id, function () {
$data_partenaires = $this->em->getRepository(Partenaire::class)->findByCentreGroupeId($this->id);
// return $data_partenaires;
// });
// $data_centre_groupes = $this->cache->get('centre_groupe' . $this->id, function () {
$data_centre_groupes = $this->em->getrepository(CentreGroupe::class)->find($this->id);
// return $data_centre_groupes;
// });
$data_sms = $this->em->getrepository(ParametreCentre::class)->findSmsByCentreGroupe($this->id);
$data_param_centre_groupe = $this->em->getRepository(ParametreCentreGroupe::class)->findOneBy(['centre_groupe' => $data_centre_groupes->getId()]);
$paramCentreVl = $this->em->getRepository(ParametreCentre::class)->findSmsAndUserEditByCentreGroupeAndCentreType($this->id, 1);
$paramCentrePl = $this->em->getRepository(ParametreCentre::class)->findSmsAndUserEditByCentreGroupeAndCentreType($this->id, 2);
$paramCentreCl = $this->em->getRepository(ParametreCentre::class)->findSmsAndUserEditByCentreGroupeAndCentreType($this->id, 4);
$holidaysCentreVl = $this->em->getrepository(ParametreCentre::class)->findHolidaysByCentreGroupeAndCentreType($this->id, 1);
$holidaysCentrePl = $this->em->getrepository(ParametreCentre::class)->findHolidaysByCentreGroupeAndCentreType($this->id, 2);
$holidaysCentreCl = $this->em->getrepository(ParametreCentre::class)->findHolidaysByCentreGroupeAndCentreType($this->id, 4);
$holidaysCentreVlFlat = array_reduce($holidaysCentreVl, function ($carry, $item) {
return array_merge($carry, $item['holidays']);
}, []);
$holidaysCentrePlFlat = array_reduce($holidaysCentrePl, function ($carry, $item) {
return array_merge($carry, $item['holidays']);
}, []);
$holidaysCentreClFlat = array_reduce($holidaysCentreCl, function ($carry, $item) {
return array_merge($carry, $item['holidays']);
}, []);
$year = date("Y");
$holidaysVl = $this->apiController->getFormateHolidays($holidaysCentreVlFlat, $year);
$holidaysPl = $this->apiController->getFormateHolidays($holidaysCentrePlFlat, $year);
$holidaysCl = $this->apiController->getFormateHolidays($holidaysCentreClFlat, $year);
$energiesCentreVl = $this->em->getrepository(ParametreCentre::class)->findEnergiesByCentreGroupeAndCentreType($this->id, 1);
$energiesCentrePl = $this->em->getrepository(ParametreCentre::class)->findEnergiesByCentreGroupeAndCentreType($this->id, 2);
$energiesCentreCl = $this->em->getrepository(ParametreCentre::class)->findEnergiesByCentreGroupeAndCentreType($this->id, 4);
$cleanEnergiesVl = $this->apiController->getCleanEnergies($energiesCentreVl);
$cleanEnergiesPl = $this->apiController->getCleanEnergies($energiesCentrePl);
$cleanEnergiesCl = $this->apiController->getCleanEnergies($energiesCentreCl);
$horaireMin = null;
$horaireMax = null;
if ($data_param_centre_groupe->getPcgHeureDebutCalendar()) {
$horaireMin = $data_param_centre_groupe->getPcgHeureDebutCalendar()->format('H:i:s');
}
if ($data_param_centre_groupe->getPcgHeureFinCalendar()) {
$horaireMax = $data_param_centre_groupe->getPcgHeureFinCalendar()->format('H:i:s');
}
$ligneHoraireMinMax = $this->em->getrepository(LigneHoraire::class)->findMinMaxHorairesByLigne($this->id);
if ($horaireMin === null && $ligneHoraireMinMax['horaireMin']) {
$horaireMin = $ligneHoraireMinMax['horaireMin'];
}
if ($horaireMax === null && $ligneHoraireMinMax['horaireMax']) {
$horaireMax = $ligneHoraireMinMax['horaireMax'];
}
$ligneHoraireMinMax = $this->em->getrepository(LigneHoraire::class)->findMinMaxHorairesByLigne($this->id);
if ($horaireMin === null && $ligneHoraireMinMax['horaireMin']) {
$horaireMin = $ligneHoraireMinMax['horaireMin'];
}
if ($horaireMax === null && $ligneHoraireMinMax['horaireMax']) {
$horaireMax = $ligneHoraireMinMax['horaireMax'];
}
$joursOuvertsGlobaux = [];
$ligneHoraireData = [];
foreach ($data_centre_groupes->getLignes() as $ligne) {
$data_jours_ouverts = $this->em->getRepository(LigneHoraire::class)->getJoursOuvert($ligne->getId());
$joursOuvertsGlobaux = array_merge($joursOuvertsGlobaux, $data_jours_ouverts);
$ligneHoraire = $this->em->getrepository(LigneHoraire::class)->findByLigne($ligne->getId());
/** @var LigneHoraire $horaire */
foreach ($ligneHoraire as $horaire) {
$isMorning = true;
if ($horaire->getLgnHorDebut()->format('H:i') >= '12:00') {
$isMorning = false;
} else {
}
$ligneHoraireData[] = [
'idLigne' => $horaire->getLigne()->getId(),
'isOpen' => $horaire->isLgnHorOuvert(),
'dayNumber' => $horaire->getLgnHorListeJours(),
'isMorning' => $isMorning,
'horaireStart' => $horaire->getLgnHorDebut(),
'horaireEnd' => $horaire->getLgnHorFin(),
];
}
}
// Gestion des jours ouvrables du calendrier en fonction des lignes ouvrables
$joursOuvresUniques = array_unique($joursOuvertsGlobaux);
$tousLesJours = range(1, 7);
$joursFermesDansTousLesCentres = array_diff($tousLesJours, $joursOuvresUniques);
$joursFermesDansTousLesCentres = array_map(function ($jour) {
return $jour === 7 ? 0 : $jour;
}, $joursFermesDansTousLesCentres);
$joursFermesDansTousLesCentres = array_values($joursFermesDansTousLesCentres);
$data_ligne_centre_types = $this->em->getrepository(Ligne::class)->findActiveCentreTypesByCentreGroupe($this->id);
$prestations = array();
$client_comptes = array();
foreach ($data_prestations as $data_prestation) {
$prestations[] = [
'id' => $data_prestation->getId(),
'duree' => $data_prestation->getPstDuree(),
'couleur' => $data_prestation->getPstCouleur(),
'centre_type_id' => $data_prestation->getPstTypeVehicule()->getTvCentreType()->getId(),
'centre_type_denomination' => $data_prestation->getPstTypeVehicule()->getTvCentreType()->getCtDenomination(),
'type_vehicule_libele' => $data_prestation->getPstTypeVehicule()->getTvLibelle(),
'type_visite_libele' => $data_prestation->getPstTypeVisite()->getTypVstLibele(),
'type_visite_libele_long' => $data_prestation->getPstTypeVisite()->getTypVstLibeleLong(),
];
}
foreach ($data_client_comptes as $data_client_compte) {
$client_comptes[] = [
'id' => $data_client_compte->getId(),
'nom' => $data_client_compte->getCliNom(),
'prenom' => $data_client_compte->getCliPrenom(),
'societe' => $data_client_compte->getCliNomSociete(),
'isVL' => $data_client_compte->isCliVl(),
'isPL' => $data_client_compte->isCliPl(),
'isCL' => $data_client_compte->isCliCl(),
];
}
$users_id = $this->getUser()->getId();
$CentrePartenaire_cteasy = $this->em->getRepository(CentrePartenaire::class)->findOneBy(['partenaire' => '1', 'centre_groupe' => $this->id]);
return $this->render('admin/calendrier_view.html.twig', [
'slot_duration' => $data_centre_groupes->getCgPasHoraires(),
'centre_groupe_name' => $data_centre_groupes->getCgNom(),
'horaire_max' => $horaireMax,
'horaire_min' => $horaireMin,
'nbr_ligne' => count($data_nbr_ligne),
'jours_fermes' => json_encode($joursFermesDansTousLesCentres),
'nbr_jour_ferme' => count($joursFermesDansTousLesCentres),
'prestations' => $prestations,
'type_visites' => $data_type_visites,
'type_vehicules' => $data_type_vehicules,
'marques' => $data_marques,
'marquesCl' => $data_marques_cl,
'energiesVl' => $cleanEnergiesVl,
'energiesPl' => $cleanEnergiesPl,
'energiesCl' => $cleanEnergiesCl,
'energies' => $data_energies,
'client_comptes' => $client_comptes,
'utilisateurs' => $data_utilisateurs,
'centre_types' => $data_centre_types,
'paramCentreVl' => $paramCentreVl,
'paramCentrePl' => $paramCentrePl,
'paramCentreCl' => $paramCentreCl,
'holidaysVl' => $holidaysVl,
'holidaysPl' => $holidaysPl,
'holidaysCl' => $holidaysCl,
'affichage_heure_fin' => $data_param_centre_groupe->isPcgPylBoCartoucheCalClientFirst(),
'affichage_client_honore_rdv' => $data_param_centre_groupe->isPcgRdvClientNotHonored(),
'bg_color_recurrence' => $data_param_centre_groupe->getPcgRdvRecurrenceBgColor() ? $data_param_centre_groupe->getPcgRdvRecurrenceBgColor() : '#FFCD1C',
'bg_color_blocage' => $data_param_centre_groupe->getPcgBlocageBgColor() ? $data_param_centre_groupe->getPcgBlocageBgColor() : '#FF0000',
'partenaires' => $data_partenaires,
'allpermission' => $allpermission,
'allpermissionBlocage' => $allpermissionBlocage,
'allpermissionRemboursement' => $allpermissionRemboursement,
'ligne_centre_types' => $data_ligne_centre_types,
'users_id' => $users_id,
'horaireData' => $ligneHoraireData,
'creneau_dispo' => $data_param_centre_groupe->isPcgDisplayCreneauDispoBo(),
'is_cteasy' => $CentrePartenaire_cteasy ? true : false,
'data_sms' => $data_sms,
]);
}
/**
* @Route("/admin/pas-horaires", name="pas-horaires", methods={"POST"})
*/
public function updatePasHoraires(Request $request, ObjectManager $manager): Response
{
$permissionResult = $this->checkPermissionAdmin("ecrire", "calendrier");
if (!$permissionResult) {
return new Response('cannot_update_pas_horaire');
}
$newPasHoraires = $request->request->get('cg_pas_horaires');
$centreGroupe = $this->em->getrepository(CentreGroupe::class)->find($this->id);
if (!$centreGroupe) {
throw $this->createNotFoundException('Aucun CentreGroupe trouvé avec l\'id ' . $this->id);
}
$centreGroupe->setCgPasHoraires($newPasHoraires);
$manager->persist($centreGroupe);
$manager->flush();
$this->cache->delete('centre_groupe' . $this->id);
return new JsonResponse($newPasHoraires);
}
/**
* @Route("admin/rendez-vous/json", name="rendez_vous_json")
*/
public function getRendezVousJson(Request $request)
{
$permissionResult = $this->checkPermissionAdmin("lire", "calendrier");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
// Cache du groupe
$data_centre_groupes = $this->em->getRepository(CentreGroupe::class)->find($this->id);
// On pourrait aussi cacher celui-ci ou le joindre, mais c'est une seule requête rapide
$parametreCentreGroupe = $this->em->getRepository(ParametreCentreGroupe::class)->findOneBy(['centre_groupe' => $data_centre_groupes->getId()]);
$start = $request->query->get('start');
$end = $request->query->get('end');
$prestationId = $request->query->get('prestation');
// Requêtes principales (Celles-ci sont bien optimisées avec les joins)
$upcomingBlocageByCentreGroupe = $this->em->getRepository(LigneBlocage::class)->findUpcomingBlocageByCentreGroupeIdAndDates($this->id, $start, $end);
$upcomingRendezVousByCentreGroupe = $this->em->getRepository(Rendezvous::class)->findUpcomingRendezVousByCentreDate($this->id, $start, $end);
// --- DEBUT OPTIMISATION BATCH LOADING ---
// 1. Collecte des IDs et Emails pour faire les requêtes en groupe
$rdvIds = [];
$clientEmails = [];
foreach ($upcomingRendezVousByCentreGroupe as $rdv) {
$rdvIds[] = $rdv->getId();
// Récupération email pour vérification "Client non honoré"
$mail = null;
if ($rdv->getClientLibre()) {
$mail = $rdv->getClientLibre()->getClEmail();
} elseif ($rdv->getClientCompte()) {
$mail = $rdv->getClientCompte()->getCliEmail();
}
if ($mail) {
$clientEmails[] = $mail;
}
}
$clientEmails = array_unique($clientEmails);
// 2. Chargement de TOUTES les facturations en UNE SEULE requête
$facturationsMap = [];
if (!empty($rdvIds)) {
$facturations = $this->em->getRepository(RendezVousFacturation::class)
->createQueryBuilder('f')
->where('f.rendezvous IN (:ids)')
->setParameter('ids', $rdvIds)
->getQuery()
->getResult();
// On indexe par ID de RDV pour retrouver instantanément dans la boucle
foreach ($facturations as $factu) {
$facturationsMap[$factu->getRendezvous()->getId()] = $factu;
}
}
// 3. Chargement des "Mauvais payeurs" en UNE SEULE requête
$badPayerMap = [];
if (!empty($clientEmails) && $parametreCentreGroupe->isPcgRdvClientNotHonored()) {
$badPayersList = $this->em->getRepository(Rendezvous::class)->findBadPayersByEmails($this->id, $clientEmails);
// On transforme en map [email => true] pour vérification rapide
$badPayerMap = array_flip($badPayersList);
}
// --- FIN OPTIMISATION BATCH LOADING ---
$events = [];
// Gestion des créneaux dispos (inchangée)
$testPrestation = $this->em->getRepository(CentrePrestation::class)->findPrestationExistsByCentreGroupe($prestationId, $this->id);
if (!empty($prestationId) && $prestationId !== 'null' && $parametreCentreGroupe->isPcgDisplayCreneauDispoBo() && $testPrestation) {
$startString = str_replace(' ', '+', $start);
$endString = str_replace(' ', '+', $end);
$contents = $this->creneauxDispo($startString, $endString, $prestationId);
$events = array_merge($events, array_filter($contents));
}
// BOUCLE PRINCIPALE (Désormais purement PHP, sans SQL interne)
foreach ($upcomingRendezVousByCentreGroupe as $rendezVous) {
$rendezVousId = $rendezVous->getId();
$ligneId = $rendezVous->getLigne()->getId(); // Grâce au join dans le repository, ceci ne déclenche pas de requête
$clientHonorePasRdv = false;
// Initialisation vars
$nom = ''; $telephone = ''; $email = '';
$clientLibreId = ''; $clientCompteId = '';
if ($rendezVous->getClientLibre()) {
$cl = $rendezVous->getClientLibre();
$nom = $cl->getClNom();
$telephone = $cl->getClTelephone();
$email = $cl->getClEmail();
$clientLibreId = $cl->getId();
// OPTIMISATION : Vérification dans la Map au lieu de faire une requête SQL
if ($email && isset($badPayerMap[$email])) {
$clientHonorePasRdv = true;
}
} else if ($rendezVous->getClientCompte()) {
$cc = $rendezVous->getClientCompte();
$nom = $cc->getCliNomSociete();
$telephone = $cc->getCliTelephone();
$email = $cc->getCliEmail();
$clientCompteId = $cc->getId();
// Si la logique s'applique aussi aux clients compte
if ($email && isset($badPayerMap[$email])) {
$clientHonorePasRdv = true;
}
}
$partenaireColor = $rendezVous->getPartenaire() ? $rendezVous->getPartenaire()->getPaCouleur() : '';
$commentaire = $rendezVous->getRdvcommentaire() ?? '';
$tarifTotal = $rendezVous->getRdvTarif();
// Logique d'affichage (VTP / Multi)
$rdvInfos = $rendezVous->getRendezVousInfos();
// Initialisation des tableaux
$title = [];
$prestationIdArr = []; $centreTypeArr = []; $vehiculeIdArr = [];
$vehiculeNomArr = []; $vehiculeClientIdArr = []; $typeVehiculeIdArr = [];
$energieIdArr = []; $immatriculationPlArr = []; $rendezVousInfosResultColorArr = [];
$recurrenceIdArr = []; $tarifPrestaArr = [];
$backgroundColor = '';
$heureDebut = ''; $heureFin = '';
$depot = false; $convoyage = false; $pret = false;
if (count($rdvInfos) > 0 && $rdvInfos[0] !== null) {
// Initialisation de la chaine de titre pour l'index 0
$title[0] = $nom . ' / ';
foreach ($rdvInfos as $rendezVousInfo) {
// Grâce aux joins dans le repo, tout ceci est déjà en mémoire
$rendesVousVehicule = $rendezVousInfo->getVehicule();
$currentImmat = $rendesVousVehicule->getRdvVhcImmatriculation() ? $rendesVousVehicule->getRdvVhcImmatriculation() : '';
$marqueLib = ($rendesVousVehicule->getMarque() ? $rendesVousVehicule->getMarque()->getMarquelibele() : '') . ($rendesVousVehicule->getMarqueCl() ? $rendesVousVehicule->getMarqueCl()->getMarquelibele() : '');
$modeleLib = ($rendesVousVehicule->getModele() ? $rendesVousVehicule->getModele()->getMdllibele() : '') . ($rendesVousVehicule->getModeleCl() ? $rendesVousVehicule->getModeleCl()->getMdllibele() : '');
$currentPresta = $rendezVousInfo->getCentrePrestation()->getPstTypeVisite()->getTypvstlibele();
if ($currentImmat !== '') {
$currentImmat = $currentImmat . ' / ';
}
// Concaténation du titre
$title[0] .= $currentImmat . $marqueLib . ' - ' . $modeleLib . ' / ' . $currentPresta . ' / ' . $tarifTotal . '€';
$prestationIdArr[] = $rendezVousInfo->getCentrePrestation()->getId();
if (!$backgroundColor) {
$backgroundColor = '#' . $rendezVousInfo->getCentrePrestation()->getPstCouleur();
}
$centreTypeArr[] = $rendezVousInfo->getCentrePrestation()->getPstTypeVisite()->getTypVstLibele();
$vehiculeIdArr[] = $rendesVousVehicule->getId();
$vehiculeClientIdArr[] = $rendesVousVehicule->getClientCompte() ? $rendesVousVehicule->getClientCompte()->getId() : '';
$vehiculeNomArr[] =
($rendesVousVehicule->getRdvVhcImmatriculation() ? $rendesVousVehicule->getRdvVhcImmatriculation() . ' - ' : '') .
$marqueLib . ' - ' . $modeleLib;
$typeVehiculeIdArr[] = $rendesVousVehicule->getTypeVehicule() ? $rendesVousVehicule->getTypeVehicule()->getId() : '';
$energieIdArr[] = $rendesVousVehicule->getEnergie() ? $rendesVousVehicule->getEnergie()->getId() : '';
$immatriculationPlArr[] = $rendesVousVehicule->getRdvVhcImmatriculation() ? $rendesVousVehicule->getRdvVhcImmatriculation() : '';
$rendezVousInfosResultColorArr[] = $rendezVousInfo->getRdvInfResultat() ? $rendezVousInfo->getRdvInfResultat() : '';
$recurrenceIdArr[] = '';
$tarifPrestaArr[] = $rendezVousInfo->getCentrePrestation()->getPsttarif();
// Écrase les valeurs précédentes (logique conservée)
$heureDebut = $rendezVousInfo->getRdvInfHdebutCt();
$heureFin = $rendezVousInfo->getRdvInfHfinCt();
$depot = $rendezVousInfo->isRdvInfDepot();
$convoyage = $rendezVousInfo->isRdvInfConvoyage();
$pret = $rendezVousInfo->isRdvInfPret();
}
} else {
$title = $nom;
$prestationIdArr = '';
$backgroundColor = $rendezVous->getRdvColor() ?? $parametreCentreGroupe->getPcgRdvRecurrenceBgColor() ?? '#FFCD1C';
$centreTypeArr = '';
$vehiculeIdArr = '';
$vehiculeClientIdArr = '';
$vehiculeNomArr = '';
$typeVehiculeIdArr = '';
$energieIdArr = '';
$immatriculationPlArr = '';
$rendezVousInfosResultColorArr = '';
$recurrenceIdArr = $rendezVous->getRecurrence()?$rendezVous->getRecurrence()->getId():'';
$tarifPrestaArr = '';
$tarifTotal = '';
}
// Override couleur
if ($rendezVous->isRdvTermine() == 1) $backgroundColor = '#8b8b8b';
if ($rendezVous->getRdvDatetimeTimeout() != null) $backgroundColor = '#7a7a7a';
// --- OPTIMISATION : RECUPERATION FACTURATION DEPUIS LA MAP ---
// On remplace la requête findOneBy par un accès tableau immédiat
$rendezVousFacturationData = [];
if (isset($facturationsMap[$rendezVousId])) {
$f = $facturationsMap[$rendezVousId];
$rendezVousFacturationData[] = [
'optModeReglement' => $f->getFpModeReglement(),
'montantPresta' => $f->getFpMontantPrestation(),
'montantFraisService' => $f->getFpMontantFraisService(),
'optCv' => $f->isFpOptionCv(),
'optCvMontant' => $f->getFpOptionCvMontant(),
'optModif' => $f->isFpOptionModifiable(),
'optModifMontant' => $f->getFpOptionModifiableMontant(),
'optPaiementMulti' => $f->isFpOptionPaiementMultiple(),
'optPaiementMultiMontant' => $f->getFpOptionPaiementMultipleMontant(),
'secondVersementDate' => $f->getFpDateSecondVersement(),
'secondVersementMontant' => $f->getFpMontantSecondVersement(),
'optCoupon' => $f->isFpOptionCouponReduction(),
'optCouponMontant' => $f->getFpOptionCouponReductionMontant(),
];
}
$events[] = [
'id' => $rendezVous->getId(),
'resourceId' => $ligneId,
'title' => $title,
'start' => $rendezVous->getRdvDateHeure()->format('Y-m-d H:i:s'),
'end' => (clone $rendezVous->getRdvDateHeure())->modify(sprintf('+%d minutes', $rendezVous->getRdvDuree()))->format('Y-m-d H:i:s'),
'backgroundColor' => $backgroundColor,
'extendedProps' => [
'nom' => $nom,
'telephone' => $telephone,
'email' => $email,
'duree' => $rendezVous->getRdvDuree(),
'commentaire' => $commentaire,
'depot' => $depot,
'convoyage' => $convoyage,
'pret' => $pret,
'rappelSms' => $rendezVous->isRdvDemandeRappelSms(),
'rappelConfirm' => $rendezVous->isRdvDemandeRappelSms(),
'centreType' => $centreTypeArr,
'centreTypeId' => $rendezVous->getCentreType()->getId(),
'prestationId' => $prestationIdArr,
'clientLibreId' => $clientLibreId,
'clientCompteId' => $clientCompteId,
'typeVehiculeId' => $typeVehiculeIdArr,
'energie' => $energieIdArr,
'utilisateurId' => $rendezVous->getUtilisateur() ? $rendezVous->getUtilisateur()->getId() : '',
'vehiculeId' => $vehiculeIdArr,
'vehiculeClientId' => $vehiculeClientIdArr,
'vehiculeNom' => $vehiculeNomArr,
'rendezVousId' => $rendezVousId,
'blocageId' => '',
'recurrenceId' => $recurrenceIdArr,
'ligneId' => $ligneId,
'immatriculationPl' => $immatriculationPlArr,
'partenaireColor' => $partenaireColor,
'rendezVousInfosResultColor' => $rendezVousInfosResultColorArr,
'tarifPresta' => $tarifPrestaArr,
'tarifTotal' => $tarifTotal,
'heureDebut' => ($heureDebut instanceof \DateTimeInterface) ? $heureDebut->format('H:i') : $heureDebut,
'heureFin' => ($heureFin instanceof \DateTimeInterface) ? $heureFin->format('H:i') : $heureFin,
'vehiculePresent' => $rendezVous->isRdvVehiculePresent(),
'tokenPayline' => $rendezVous->getTokenPayline(),
'rendezVousFacturation' => $rendezVousFacturationData,
'dateCreation' => $rendezVous->getRdvDateCreation()->format('d/m/Y H:i'),
'CouponCteasy' => $rendezVous->getRdvCouponCteasy(),
'BonCommande' => $rendezVous->getRdvBonCommande(),
'isInfoBulle' => $parametreCentreGroupe->isPcgInfoBulle(),
'clientHonorePasRdv' => $clientHonorePasRdv,
],
];
}
// Traitement des blocages (Déjà OK)
foreach ($upcomingBlocageByCentreGroupe as $blocage) {
$events[] = array(
'resourceId' => $blocage->getLigne()->getId(),
'title' => 'Blocage',
'start' => $blocage->getBlcDebut()->format('Y-m-d H:i:s'),
'end' => $blocage->getBlcFin()->format('Y-m-d H:i:s'),
'backgroundColor' => $blocage->getBlcBgColor() ?? $parametreCentreGroupe->getPcgBlocageBgColor() ?? '#FF0000',
'extendedProps' => [
'commentaire' => $blocage->getBlcCommentaire(),
'blocageId' => $blocage->getId(),
'recurrenceId' => $blocage->getRecurrence() ? $blocage->getRecurrence()->getId() : '',
'ligneId' => $blocage->getLigne()->getId(),
'isInfoBulle' => $parametreCentreGroupe->isPcgInfoBulle()
],
);
}
return new JsonResponse($events);
}
/**
* @Route("admin/promotion/json", name="promotion_json")
*/
public function getPromotionsJson(Request $request)
{
$permissionResult = $this->checkPermissionAdmin("lire", "calendrier");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
$start = $request->query->get('start');
$end = $request->query->get('end');
$promotionCreneaux = $this->em->getrepository(PromotionCreneau::class)->findByCentreGroupeAndDates($this->id, $start, $end);
// $upcomingRendezVous = $this->em->getrepository(Rendezvous::class)->findUpcomingRendezVousByCentre($this->id);
$events = [];
foreach ($promotionCreneaux as $promotionCreneau) {
$events[] = [
'id' => $promotionCreneau->getId(),
'title' => $promotionCreneau->getPromotion()->getPrmNom(),
'start' => $promotionCreneau->getPrmCreDebut()->format('Y-m-d H:i:s'),
'end' => $promotionCreneau->getPrmCreFin()->format('Y-m-d H:i:s'),
'extendedProps' => [
'promotionId' => $promotionCreneau->getPromotion()->getId(),
'creneauId' => $promotionCreneau->getId(),
'recurrenceId' => $promotionCreneau->getRecurrence() ? $promotionCreneau->getRecurrence()->getId() : '',
'prm_cre_dyn1' => $promotionCreneau->getPrmCreDyn1(),
'prm_cre_dyn2' => $promotionCreneau->getPrmCreDyn2(),
'prm_cre_dyn3' => $promotionCreneau->getPrmCreDyn3(),
'prm_cre_prix_dyn1' => $promotionCreneau->getPrmCrePrixDyn1(),
'prm_cre_prix_dyn2' => $promotionCreneau->getPrmCrePrixDyn2(),
'prm_cre_prix_dyn3' => $promotionCreneau->getPrmCrePrixDyn3(),
],
];
}
return new JsonResponse($events);
}
/**
* @Route("admin/rdv_termine_update", name="rdv_termine_update")
*/
public function UpdateRdvTermine(Request $request, ObjectManager $manager)
{
$permissionResult = $this->checkPermissionAdmin("ecrire", "calendrier");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
$rendezvous = $this->em->getrepository(Rendezvous::class)->find($request->get('rendezvous_id'));
if ($rendezvous->isRdvTermine() == 1) {
$rendezvous->setRdvTermine(0);
} else {
$rendezvous->setRdvTermine(1);
}
$manager->persist($rendezvous);
$manager->flush();
return new Response('ok');
}
/**
* @Route("admin/rdv_vhc_present_update", name="rdv_vhc_present_update")
*/
public function UpdateRdvVhcPresent(Request $request, ObjectManager $manager)
{
$permissionResult = $this->checkPermissionAdmin("ecrire", "calendrier");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
$rendezvous = $this->em->getrepository(Rendezvous::class)->find($request->get('rendezvous_id'));
if ($rendezvous->isRdvVehiculePresent() == 1) {
$rendezvous->setRdvVehiculePresent(0);
} else {
$rendezvous->setRdvVehiculePresent(1);
}
$manager->persist($rendezvous);
$manager->flush();
return new Response('ok');
}
/**
* @Route("admin/ligne_centre/json", name="admin_ligne_centre_json")
*/
public function getLigneCentreJson()
{
$permissionResult = $this->checkPermissionAdmin("lire", "calendrier");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
$data_ligne_centre = $this->em->getrepository(Ligne::class)->findByCentreGroupeActif($this->id);
$events = [];
foreach ($data_ligne_centre as $ligne) {
$data_ligne_horaire = $this->em->getrepository(LigneHoraire::class)->findBy(['ligne' => $ligne->getId()]);
$businessHours = array();
foreach ($data_ligne_horaire as $ligne_horaire) {
if ($ligne_horaire->getLgnHorListeJours() == 7) {
$jours = 0;
} else {
$jours = $ligne_horaire->getLgnHorListeJours();
}
$startTime = $ligne_horaire->getLgnHorDebut()->format('H:i');
$endTime = $ligne_horaire->getLgnHorFin()->format('H:i');
$businessHours[] = [
'daysOfWeek' => '[' . $jours . ']',
//'startTime' => $ligne_horaire->isLgnHorOuvert() ? $ligne_horaire->getLgnHorDebut()->format('H:i') : '00:00',
//'endTime' => $ligne_horaire->isLgnHorOuvert() ? $ligne_horaire->getLgnHorFin()->format('H:i'): '00:00',
'startTime' => $startTime,
'endTime' => $endTime,
];
};
$events[] = [
'id' => $ligne->getId(),
'title' => $ligne->getlgnnom(),
//'type' => $ligne->getCentreType()->getId(),
'businessHours' => $businessHours,
'extendedProps' => [
'typeVl' => $ligne->isLgnVl(),
'typePl' => $ligne->isLgnPl(),
'typeCl' => $ligne->isLgnCl(),
'color' => $ligne->getColor(),
],
];
}
return new JsonResponse($events);
}
/**
* @Route("admin/modeles/{id_centre_type}/{id_marque}", name="modeles_by_marque", methods={"GET"})
*/
public function getModelesByMarque(int $id_centre_type, int $id_marque): JsonResponse
{
if ($id_centre_type == 1) {
$modeles = $this->em->getrepository(Modele::class)->findBy(['code_marque' => $id_marque], ['mdl_ordre' => 'asc', 'mdl_libele' => 'asc']);
} elseif ($id_centre_type == 4) {
$modeles = $this->em->getrepository(ModeleCl::class)->findBy(['code_marque_cl' => $id_marque], ['mdl_ordre' => 'asc', 'mdl_libele' => 'asc']);
}
$modelesArray = [];
foreach ($modeles as $modele) {
$modelesArray[] = [
'id' => $modele->getId(),
'libele' => $modele->getMdlLibele(),
];
}
return new JsonResponse($modelesArray);
}
/**
* @Route("admin/prestation/{id_centre_type}", name="prestation_by_centre_type", methods={"GET"})
*/
public function getPrestationByCentreType(int $id_centre_type)
{
$permissionResult = $this->checkPermissionAdmin("lire", "calendrier");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
$data_prestations = $this->em->getRepository(CentrePrestation::class)->findActifByCentreGroupeAndCentreType($this->id, $id_centre_type);
$prestationsArray = $this->formatPrestations($data_prestations);
return new JsonResponse($prestationsArray);
}
/**
* @Route("admin/prestation_by_type_vehicule/{id_type_vehicule}", name="prestation_by_type_vehicule", methods={"GET"})
*/
public function prestationByTypeVehicule(int $id_type_vehicule)
{
$permissionResult = $this->checkPermissionAdmin("lire", "calendrier");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
$data_prestations = $this->em->getRepository(CentrePrestation::class)->findAllByCentreGroupeAndTypeVehicule($this->id, $id_type_vehicule);
$prestationsArray = $this->formatPrestations($data_prestations);
return new JsonResponse($prestationsArray);
}
private function formatPrestations(array $prestations)
{
$prestationsArray = [];
foreach ($prestations as $prestation) {
$prestationsArray[] = [
'id' => $prestation->getId(),
'pst_tarif' => $prestation->getPstTarif(),
'pst_duree' => $prestation->getPstDuree(),
'type_visite' => $prestation->getPstTypeVisite()->getId(),
'type_visite_libele' => $prestation->getPstTypeVisite()->getTypVstLibele(),
'type_visite_libele_court' => $prestation->getPstTypeVisite()->getTypVstLibeleCourt(),
'type_visite_libele_long' => $prestation->getPstTypeVisite()->getTypVstLibeleLong(),
'type_vehicule_libele' => $prestation->getPstTypeVehicule()->getTvLibelle(),
];
}
return $prestationsArray;
}
/**
* @Route("admin/get-client-compte/{id}", name="get_client_compte")
*/
public function getClientCompteInfo(ClientCompte $clientCompte)
{
$permissionResult = $this->checkPermissionAdmin("lire", "calendrier");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
if (!$clientCompte) {
$this->addFlash('error', "Client compte non trouvé.");
return $this->redirectToRoute('calendrier');
}
if ($clientCompte->getCentreGroupe()->getId() !== $this->id) {
$this->addFlash('error', "Impossible de récuperer ce client compte car il n'est pas liée à votre centre.");
return $this->redirectToRoute('calendrier');
}
$clientCompteArray = [
'nom' => $clientCompte->getCliNom(),
'prenom' => $clientCompte->getCliPrenom(),
'telephone' => $clientCompte->getCliTelephone(),
'email' => $clientCompte->getCliEmail(),
];
return new JsonResponse($clientCompteArray);
}
/**
* @Route("admin/get-client-libre/{id}", name="get_client_libre")
*/
public function getClientLibreInfo(ClientLibre $clientLibre)
{
$permissionResult = $this->checkPermissionAdmin("lire", "calendrier");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
if (!$clientLibre) {
$this->addFlash('error', "Client libre non trouvé.");
return $this->redirectToRoute('calendrier');
}
$isLinked = $this->em->getRepository(ClientLibre::class)->isClientLibreLinkedToCentreGroupe($clientLibre, $this->id);
if (!$isLinked) {
$this->addFlash('error', "Client libre n'est pas associé à ce centre groupe.");
return $this->redirectToRoute('calendrier');
}
$clientLibreArray = [
'nom' => $clientLibre->getClNom(),
'prenom' => $clientLibre->getClPrenom(),
'telephone' => $clientLibre->getClTelephone(),
'email' => $clientLibre->getClEmail(),
'civilite' => $clientLibre->getClCivilite(),
];
return new JsonResponse($clientLibreArray);
}
/**
* @Route("admin/get-vehicules/{clientCompteId}/{centreType}", name="get_vehicules_by_client", methods={"GET"})
*/
public function getVehiculesByClient(int $clientCompteId, int $centreType, RendezVousVehiculeRepository $rdvVehiculeRepo)
{
$permissionResult = $this->checkPermissionAdmin("lire", "calendrier");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
if (!$clientCompteId) {
$this->addFlash('error', "Client id non communiqué.");
return $this->redirectToRoute('calendrier');
}
if (!$centreType) {
$this->addFlash('error', "Centre type non communiqué.");
return $this->redirectToRoute('calendrier');
}
$clientCompte = $this->em->getRepository(ClientCompte::class)->find($clientCompteId);
if ($clientCompte->getCentreGroupe()->getId() !== $this->id) {
$this->addFlash('error', "Impossible de récuperer ce client compte car il n'est pas liée à votre centre.");
return $this->redirectToRoute('calendrier');
}
$vehicules = $rdvVehiculeRepo->findByClientAndTypeCentre($clientCompte, $centreType);
$vehiculeArray = [];
$marque = '';
$modele = '';
foreach ($vehicules as $vehicule) {
if ($centreType == 1 || $centreType == 2) {
$marque = $vehicule->getMarque() ? $vehicule->getMarque()->getMarqueLibele() : '';
$modele = $vehicule->getModele() ? $vehicule->getModele()->getMdlLibele() : '';
} else if ($centreType == 4) {
$marque = $vehicule->getMarqueCl() ? $vehicule->getMarqueCl()->getMarqueLibele() : '';
$modele = $vehicule->getModeleCl() ? $vehicule->getModeleCl()->getMdlLibele() : '';
}
$vehiculeArray[] = [
'id' => $vehicule->getId(),
'marque' => $marque,
'modele' => $modele,
'immatriculation' => $vehicule->getRdvVhcImmatriculation(),
'libelle_pl' => $vehicule->getTypeVehicule()->getTvLibelle(),
'id_type_vehicule' => $vehicule->getTypeVehicule()->getId(),
];
}
return new JsonResponse($vehiculeArray);
}
/**
* @Route("/admin/get-vehicule/{vehiculeId}", name="get_vehicule", methods={"GET"})
*/
public function getVehiculeAction($vehiculeId)
{
$permissionResult = $this->checkPermissionAdmin("lire", "calendrier");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
$vehicule = $this->em->getRepository(RendezVousVehicule::class)->find($vehiculeId);
$isLinked = $this->em->getRepository(RendezVousInfos::class)->findCentreGroupeByRendezVousVehicule($vehicule, $this->id);
if (!$isLinked) {
$this->addFlash('error', "Rendez vous véhicule n'est pas associé à ce centre groupe.");
return $this->redirectToRoute('calendrier');
}
$response = new JsonResponse([
'vehicule_id' => $vehicule->getId(),
'nom_proprietaire' => $vehicule->getRdvVhcNomClientProprietaire(),
'prenom_proprietaire' => $vehicule->getRdvVhcPrenomClientProprietaire(),
'marque_id' => $vehicule->getMarque() ? $vehicule->getMarque()->getId() : ($vehicule->getMarqueCl() ? $vehicule->getMarqueCl()->getId() : 1),
'modele_id' => $vehicule->getModele() ? $vehicule->getModele()->getId() : ($vehicule->getModeleCl() ? $vehicule->getModeleCl()->getId() : 1),
'energie_id' => $vehicule->getEnergie() ? $vehicule->getEnergie()->getId() : '',
'immatriculation' => $vehicule->getRdvVhcImmatriculation(),
'type_vehicule' => $vehicule->getTypeVehicule() ? $vehicule->getTypeVehicule()->getId() : null,
'nom' => $vehicule->getRdvVhcNomClientProprietaire(),
'prenom' => $vehicule->getRdvVhcPrenomClientProprietaire(),
'reference_parc' => $vehicule->getRdvVhcRefParc(),
'numero_de_serie' => $vehicule->getRdvVhcNumSerie(),
'description' => $vehicule->getRdvVhcDescription(),
'date_echeance' => $vehicule->getRdvVhcDateEcheance() ? $vehicule->getRdvVhcDateEcheance()->format('Y-m-d') : null,
'date_chrono' => $vehicule->getRdvVhcDateChronotachygraphe() ? $vehicule->getRdvVhcDateChronotachygraphe()->format('Y-m-d') : null,
'date_limiteur' => $vehicule->getRdvVhcDateLimiteurVitesse() ? $vehicule->getRdvVhcDateLimiteurVitesse()->format('Y-m-d') : null,
'type_proprietaire' => $vehicule->getRdvVhcTypeProprietaire(),
'zone_de_saisie_1' => $vehicule->getRdvVhcZoneSaisie1(),
'date_de_saisie_1' => $vehicule->getRdvVhcDateSaisie1() ? $vehicule->getRdvVhcDateSaisie1()->format('Y-m-d') : null,
'zone_de_saisie_2' => $vehicule->getRdvVhcZoneSaisie2(),
'date_de_saisie_2' => $vehicule->getRdvVhcDateSaisie2() ? $vehicule->getRdvVhcDateSaisie2()->format('Y-m-d') : null,
'zone_de_saisie_3' => $vehicule->getRdvVhcZoneSaisie3(),
'date_de_saisie_3' => $vehicule->getRdvVhcDateSaisie3() ? $vehicule->getRdvVhcDateSaisie3()->format('Y-m-d') : null,
]);
return $response;
}
/**
* @Route("admin/rendez_vous_vehicule_add", name="rendez_vous_vehicule_add")
*/
public function AddRendezVousVehicule(Request $request, ObjectManager $manager)
{
$permissionResult = $this->checkPermissionAdmin("ecrire", "calendrier");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
if ($request->get('id_vehicule_add')) {
$rendez_vous_vehicules = $this->em->getrepository(RendezVousVehicule::class)->find($request->get('id_vehicule_add'));
} else {
$rendez_vous_vehicules = new RendezVousVehicule();
}
// differencie si le vehicule est un VL ou un CL
if ($request->get('marque_add')) {
if ($request->get('centre_type') == 1) {
$test_marque = $this->em->getrepository(Marque::class)->find($request->get('marque_add'));
$rendez_vous_vehicules->setMarque($test_marque);
if ($request->get('modele_add')) {
$test_modele = $this->em->getrepository(Modele::class)->find($request->get('modele_add'));
$rendez_vous_vehicules->setModele($test_modele);
}
} else if ($request->get('centre_type') == 4) {
$test_marque = $this->em->getrepository(MarqueCl::class)->find($request->get('marque_add'));
$rendez_vous_vehicules->setMarqueCl($test_marque);
if ($request->get('modele_add')) {
$test_modele = $this->em->getrepository(ModeleCl::class)->find($request->get('modele_add'));
$rendez_vous_vehicules->setModeleCl($test_modele);
}
}
}
if ($request->get('type_vehicule_add')) {
$test_type_vehicule = $this->em->getrepository(TypeVehicule::class)->find($request->get('type_vehicule_add'));
$rendez_vous_vehicules->setTypeVehicule($test_type_vehicule);
}
if ($request->get('client_compte_id')) {
$test_client_compte = $this->em->getrepository(ClientCompte::class)->find($request->get('client_compte_id'));
if ($test_client_compte) {
$rendez_vous_vehicules->setClientCompte($test_client_compte);
}
}
if ($request->get('energie_add')) {
$test_energie = $this->em->getrepository(Energie::class)->find($request->get('energie_add'));
$rendez_vous_vehicules->setEnergie($test_energie);
}
$rendez_vous_vehicules->setRdvVhcImmatriculation($request->get('immatriculation_add'));
$rendez_vous_vehicules->setRdvVhcDateEcheance($request->get('date_echeance_ct_add') ? new datetime($request->get('date_echeance_ct_add')) : null);
$rendez_vous_vehicules->setRdvVhcTypeProprietaire($request->get('type_proprietaire'));
$rendez_vous_vehicules->setRdvVhcNomClientProprietaire($request->get('nom_add') ? $request->get('nom_add') : '');
$rendez_vous_vehicules->setRdvVhcPrenomClientProprietaire($request->get('prenom_add') ? $request->get('prenom_add') : '');
$manager->persist($rendez_vous_vehicules);
$manager->flush();
return new JsonResponse($rendez_vous_vehicules->getId());
}
/**
* @Route("admin/rendez_vous_vehicule_pl_add", name="rendez_vous_vehicule_pl_add")
*/
public function AddRendezVousVehiculePl(Request $request, ObjectManager $manager)
{
$permissionResult = $this->checkPermissionAdmin("ecrire", "calendrier");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
if ($request->get('id_vehicule')) {
$rendez_vous_vehicules = $this->em->getrepository(RendezVousVehicule::class)->find($request->get('id_vehicule'));
} else {
$rendez_vous_vehicules = new RendezVousVehicule();
}
if ($request->get('type_vehicule_pl_add')) {
$test_type_vehicule = $this->em->getrepository(TypeVehicule::class)->find($request->get('type_vehicule_pl_add'));
$rendez_vous_vehicules->setTypeVehicule($test_type_vehicule);
}
if ($request->get('client_compte_pl_id')) {
$test_client_compte = $this->em->getrepository(ClientCompte::class)->find($request->get('client_compte_pl_id'));
if ($test_client_compte) {
$rendez_vous_vehicules->setClientCompte($test_client_compte);
}
}
if ($request->get('energie_pl_add')) {
$test_energie = $this->em->getrepository(Energie::class)->find($request->get('energie_pl_add'));
$rendez_vous_vehicules->setEnergie($test_energie);
}
if ($request->get('type_proprietaire_pl') == 'Client') {
$rendez_vous_vehicules->setRdvVhcNomClientProprietaire($request->get('nom_proprietaire') ? $request->get('nom_proprietaire') : '');
$rendez_vous_vehicules->setRdvVhcPrenomClientProprietaire($request->get('prenom_proprietaire') ? $request->get('prenom_proprietaire') : '');
} else {
$rendez_vous_vehicules->setRdvVhcNomClientProprietaire('');
$rendez_vous_vehicules->setRdvVhcPrenomClientProprietaire('');
}
$rendez_vous_vehicules->setRdvVhcImmatriculation($request->get('immatriculation_pl_add'));
$rendez_vous_vehicules->setRdvVhcDateEcheance($request->get('date_echeance_ct_pl_add') ? new datetime($request->get('date_echeance_ct_pl_add')) : null);
$rendez_vous_vehicules->setRdvVhcTypeProprietaire($request->get('type_proprietaire_pl'));
$rendez_vous_vehicules->setRdvVhcRefParc($request->get('reference_parc_pl_add'));
$rendez_vous_vehicules->setRdvVhcNumSerie($request->get('numero_de_serie_pl_add'));
$rendez_vous_vehicules->setRdvVhcDescription($request->get('description_pl_add'));
$rendez_vous_vehicules->setRdvVhcDateChronotachygraphe($request->get('date_chrono_ct_pl_add') ? new datetime($request->get('date_chrono_ct_pl_add')) : null);
$rendez_vous_vehicules->setRdvVhcDateLimiteurVitesse($request->get('date_limiteur_pl_add') ? new datetime($request->get('date_limiteur_pl_add')) : null);
$rendez_vous_vehicules->setRdvVhcZoneSaisie1($request->get('zone_de_saisie_1_pl_add'));
$rendez_vous_vehicules->setRdvVhcZoneSaisie2($request->get('zone_de_saisie_2_pl_add'));
$rendez_vous_vehicules->setRdvVhcZoneSaisie3($request->get('zone_de_saisie_3_pl_add'));
$rendez_vous_vehicules->setRdvVhcDateSaisie1($request->get('date_de_saisie_1_pl_add') ? new datetime($request->get('date_de_saisie_1_pl_add')) : null);
$rendez_vous_vehicules->setRdvVhcDateSaisie2($request->get('date_de_saisie_2_pl_add') ? new datetime($request->get('date_de_saisie_2_pl_add')) : null);
$rendez_vous_vehicules->setRdvVhcDateSaisie3($request->get('date_de_saisie_3_pl_add') ? new datetime($request->get('date_de_saisie_3_pl_add')) : null);
$manager->persist($rendez_vous_vehicules);
$manager->flush();
return new JsonResponse($rendez_vous_vehicules->getId());
}
/**
* @Route("admin/rendez_vous_add", name="rendez_vous_add")
*/
public function AddRendezVous(Request $request, ObjectManager $manager)
{
$permissionResult = $this->checkPermissionAdmin("ecrire", "calendrier");
$tarifTotal = '';
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
$centre_type = $this->em->getrepository(CentreType::class)->find($request->get('centre_type'));
$centre = $this->em->getrepository(Centre::class)->findOneBy(['centre_type' => $centre_type->getId(), 'centre_groupe' => $this->id]);
$ligne = $this->em->getrepository(Ligne::class)->find($request->get('ligne_id'));
// Récupération de la date de début et de la durée du rendez-vous
$dateDebut = new Datetime($request->get('date'));
// Récupération de la durée en fonction du type de centre
if ($request->get('centre_type') == 1) {
$duree = $request->get('duree');
} elseif ($request->get('centre_type') == 2) {
$duree = $request->get('duree_pl');
} elseif ($request->get('centre_type') == 4) {
$duree = $request->get('duree');
} else {
return new JsonResponse(['message' => 'Aucun centre type n\'est sélectionné.'], Response::HTTP_BAD_REQUEST);
}
if ($request->get('tcheckDispo') !== 'false') {
// Calcul de la date de fin à partir de la date de début et de la durée
$dateFin = clone $dateDebut;
$dateFin->add(new DateInterval('PT' . $duree . 'M'));
// Récupération des rendez-vous ou blocage existants pour cette ligne et ce créneau
$rendezVousLigneExistants = $this->em->getRepository(Rendezvous::class)->rendezVousExistByLigne($ligne, $dateDebut, $dateFin, $request->get('rendezvous_id'));
$blocageLigneExistants = $this->em->getRepository(LigneBlocage::class)->blocageExistByLigne($ligne, $dateDebut, $dateFin, '');
// Si des rendez-vous ou blocage existent, rechercher un créneau disponible sur une autre ligne
if (count($rendezVousLigneExistants) > 0 || count($blocageLigneExistants) > 0) {
$ligne = null;
$rendezVousExistantsAutreLigne = $this->em->getRepository(Rendezvous::class)->rendezVousExistByCentreGroupe($this->id, $dateDebut, $dateFin);
$blocageExistantsAutreLigne = $this->em->getRepository(LigneBlocage::class)->blocageExistByCentreGroupe($this->id, $dateDebut, $dateFin);
// Si aucun rendez-vous ou blocage n'existe sur une autre ligne
if (count($rendezVousExistantsAutreLigne) !== 0 || count($blocageExistantsAutreLigne) !== 0) {
// Si des rendez-vous ou blocage existent sur d'autres lignes, choisir le premier créneau disponible
$lignesOccupees = [];
foreach ($rendezVousExistantsAutreLigne as $rendezVousAutreLigne) {
$lignesOccupees[] = $rendezVousAutreLigne->getLigne()->getId();
}
foreach ($blocageExistantsAutreLigne as $blocageAutreLigne) {
$lignesOccupees[] = $blocageAutreLigne->getLigne()->getId();
}
// Récupération des lignes disponibles pour ce type de centre et ce groupe
$lignesByCentreTypeAndCentre = $this->em->getRepository(Ligne::class)->findByCentreGroupeActifAndCentreType($this->id, $centre_type->getId());
foreach ($lignesByCentreTypeAndCentre as $ligneLibre) {
if (!in_array($ligneLibre->getId(), $lignesOccupees)) {
// si l'id de la ligne est différent de l'id de la ligne occupée
$ligne = $ligneLibre; // on stocke la ligne libre dans la variable $ligne
break; // on sort de la boucle car on a trouvé la ligne recherchée
}
}
if ($ligne === null) {
// Si toutes les lignes sont occupées, renvoyer une erreur
return new JsonResponse(['message' => 'Toutes les lignes sont occupées pour ce créneau.'], Response::HTTP_BAD_REQUEST);
}
}
}
}
if ($request->get('rendezvous_id')) {
$rendezvous = $this->em->getrepository(Rendezvous::class)->find($request->get('rendezvous_id'));
$rendezvous->setRdvDateModification(new Datetime());
if(!$rendezvous->getTokenRendezVous()){
$rendezvous->setTokenRendezVous(md5(uniqid()));
}
} else {
$rendezvous = new Rendezvous();
$rendezvous->setTokenRendezVous(md5(uniqid()));
$rendezvous->setRdvDateCreation(new Datetime());
}
if ($request->get('centre_type') == 1 || $request->get('centre_type') == 4) {
$centre_prestation = $this->em->getrepository(CentrePrestation::class)->find($request->get('prestation'));
if ($request->get('rendezvous_id')) {
$rendezvous = $this->em->getrepository(Rendezvous::class)->find($request->get('rendezvous_id'));
} else {
$rendezvous->setRdvTarif(number_format($centre_prestation->getPstTarif(), 2, '.', ''));
}
$utilisateur = $this->em->getrepository(Utilisateur::class)->find($request->get('utilisateur'));
if ($request->get('client_compte')) {
if ($rendezvous->getClientLibre()) {
$rendezvous->setClientLibre(null);
}
$client_compte = $this->em->getrepository(ClientCompte::class)->find($request->get('client_compte'));
$rendezvous->setClientCompte($client_compte);
} else {
if ($rendezvous->getClientCompte()) {
$rendezvous->setClientCompte(null);
}
if ($rendezvous->getClientLibre()) {
$client_libre = $rendezvous->getClientLibre();
} else {
$client_libre = new ClientLibre;
}
$client_libre->setClNom($request->get('nom'));
if ($request->get('prenom')) {
$client_libre->setClPrenom($request->get('prenom'));
} else {
$client_libre->setClPrenom(null);
}
if ($request->get('email')) {
$client_libre->setClEmail($request->get('email'));
} else {
$client_libre->setClEmail(null);
}
if ($request->get('telephone')) {
$client_libre->setClTelephone($request->get('telephone'));
} else {
$client_libre->setClTelephone(null);
}
if ($request->get('civilite')) {
$client_libre->setClCivilite($request->get('civilite'));
} else {
$client_libre->setClCivilite(null);
}
$manager->persist($client_libre);
$rendezvous->setClientLibre($client_libre);
}
$rendezvous->setCentre($centre);
$rendezvous->setUtilisateur($utilisateur);
$rendezvous->setCentreType($centre_type);
$rendezvous->setLigne($ligne);
$rendezvous->setRdvDateHeure(new Datetime($request->get('date')));
$rendezvous->setRdvDuree($request->get('duree'));
$rendezvous->setRdvCommentaire($request->get('commentaire') ? $request->get('commentaire') : null);
$rendezvous->setRdvBonCommande($request->get('bon_commande') ? $request->get('bon_commande') : null);
$rendezvous->setRdvDemandeRappelSms($request->get('rappel_sms_vl') !== 'false');
$manager->persist($rendezvous);
if ($request->get('vehicule_client') == '') {
$rendez_vous_vehicules = new RendezVousVehicule();
if ($request->get('client_compte')) {
$rendez_vous_vehicules->setClientCompte($client_compte);
}
} else {
$rendez_vous_vehicules = $this->em->getrepository(RendezVousVehicule::class)->find($request->get('vehicule_client'));
if ($request->get('client_compte')) {
$rendez_vous_vehicules->setClientCompte($client_compte);
}
}
if ($request->get('marque') && $request->get('centre_type') == 1) {
$marque = $this->em->getrepository(Marque::class)->find($request->get('marque'));
$rendez_vous_vehicules->setMarque($marque);
if ($request->get('modele')) {
$modele = $this->em->getrepository(Modele::class)->find($request->get('modele'));
$rendez_vous_vehicules->setModele($modele);
}
if($rendez_vous_vehicules->getMarque()->getId() > 1 and $rendez_vous_vehicules->getModele()->getId() === 1) {
$modele = $this->em->getrepository(Modele::class)->findOneBy(['code_marque' => $rendez_vous_vehicules->getMarque()->getId(), 'mdl_libele' => 'AUTRES MODELES']);
$rendez_vous_vehicules->setModele($modele);
}
}
if ($request->get('marque_cl') && $request->get('centre_type') == 4) {
$marqueCl = $this->em->getrepository(MarqueCl::class)->find($request->get('marque_cl'));
$rendez_vous_vehicules->setMarqueCl($marqueCl);
if ($request->get('modele_cl')) {
$modeleCl = $this->em->getrepository(ModeleCl::class)->find($request->get('modele_cl'));
$rendez_vous_vehicules->setModeleCl($modeleCl);
}
if($rendez_vous_vehicules->getMarqueCl()->getId() > 1 and $rendez_vous_vehicules->getModeleCl()->getId() === 1) {
$modele = $this->em->getrepository(ModeleCl::class)->findOneBy(['code_marque_cl' => $rendez_vous_vehicules->getMarqueCl()->getId(), 'mdl_libele' => 'AUTRES MODELES']);
$rendez_vous_vehicules->setModeleCl($modele);
}
}
if ($request->get('energie')) {
$test_energie = $this->em->getrepository(Energie::class)->find($request->get('energie'));
$rendez_vous_vehicules->setEnergie($test_energie);
}
$rendez_vous_vehicules->setRdvVhcTypeProprietaire('Autre');
$rendez_vous_vehicules->setRdvVhcImmatriculation($request->get('immatriculation') !== '' ? $request->get('immatriculation') : null);
$manager->persist($rendez_vous_vehicules);
if ($rendezvous->getRendezVousInfos()[0]) {
$rendezvous_infos = $rendezvous->getRendezVousInfos()[0];
} else {
$rendezvous_infos = new RendezVousInfos();
}
$rendezvous_infos->setCentrePrestation($centre_prestation);
$rendezvous_infos->setVehicule($rendez_vous_vehicules);
$rendezvous_infos->setRendezvous($rendezvous);
$rendezvous_infos->setRdvInfConvoyage($request->get('convoyage') !== 'false');
$rendezvous_infos->setRdvInfPret($request->get('pret') !== 'false');
$rendezvous_infos->setRdvInfDepot($request->get('depot') !== 'false');
$manager->persist($rendezvous_infos);
$manager->flush();
$tarifTotal = $centre_prestation->getPstTarif();
//envoi rdv a autoplanning
if (!$request->get('rendezvous_id')) {
$this->apiController->sendAddRdvToAutoPlanning($rendezvous);
$this->apiController->sendAddRdvToCtMalin($rendezvous);
}
if ($request->get('coupon_ct_easy')) {
$this->setInfoFromCteasy($rendezvous, $request);
}
if ($request->get('email_confirmation_vl') == 'true') {
$this->apiController->envoi_email_confirmation_client($rendezvous);
}
if ($request->get('envoi_sms_vl') == 'true' && $request->get('telephone') != '') {
$this->apiController->EnvoiSmsRdvConfirm($rendezvous, $request->get('telephone'));
}
} elseif ($request->get('centre_type') == 2) {
$utilisateur = $this->em->getrepository(Utilisateur::class)->find($request->get('utilisateur_pl'));
if ($request->get('client_compte_pl')) {
$client_comptes_pl = $this->em->getrepository(ClientCompte::class)->find($request->get('client_compte_pl'));
$tarif = 0;
for ($i = 0; $i < count($request->get('prestation_pl')); $i++) {
$centre_prestation = $this->em->getrepository(CentrePrestation::class)->find($request->get('prestation_pl')[$i]);
if ($request->get('vehicule_client_pl')[$i] !== 'vehiculeGenerique') {
$rendez_vous_vehicules = $this->em->getrepository(RendezVousVehicule::class)->find($request->get('vehicule_client_pl')[$i]);
} else {
$rendez_vous_vehicules = new RendezVousVehicule();
$marque = $this->em->getrepository(Marque::class)->find(1);
$modele = $this->em->getrepository(Modele::class)->find(1);
$rendez_vous_vehicules->setMarque($marque);
$rendez_vous_vehicules->setModele($modele);
$rendez_vous_vehicules->setRdvVhcTypeProprietaire('Autre');
$manager->persist($rendez_vous_vehicules);
}
$tarifTotal = $centre_prestation->getPstTarif() + $tarif;
$tarif = $centre_prestation->getPstTarif();
if ($rendezvous->getRendezVousInfos()[$i] == '') {
$rendezvous_infos = new RendezVousInfos();
} else {
$rendezvous_infos = $rendezvous->getRendezVousInfos()[$i];
}
$rendezvous_infos->setCentrePrestation($centre_prestation);
$rendezvous_infos->setVehicule($rendez_vous_vehicules);
$rendezvous_infos->setRendezvous($rendezvous);
$rendezvous_infos->setRdvInfConvoyage($request->get('convoyage_pl') !== 'false');
$rendezvous_infos->setRdvInfPret($request->get('pret_pl') !== 'false');
$rendezvous_infos->setRdvInfDepot($request->get('depot_pl') !== 'false');
$manager->persist($rendezvous_infos);
}
$rendezvous->setClientCompte($client_comptes_pl);
$rendezvous->setCentre($centre);
$rendezvous->setUtilisateur($utilisateur);
$rendezvous->setCentreType($centre_type);
$rendezvous->setLigne($ligne);
$rendezvous->setRdvDateHeure(new Datetime($request->get('date')));
$rendezvous->setRdvDuree($request->get('duree_pl'));
$rendezvous->setRdvCommentaire($request->get('commentaire_pl') ? $request->get('commentaire_pl') : null);
$rendezvous->setRdvBonCommande($request->get('bon_commande_pl') ? $request->get('bon_commande_pl') : null);
$rendezvous->setRdvDemandeRappelSms($request->get('rappel_sms_pl') !== 'false');
$rendezvous->setRdvTarif($tarifTotal);
$manager->persist($rendezvous);
$manager->flush();
if ($request->get('envoi_sms_pl') == 'true' && $client_comptes_pl->getCliTelephone() != '') {
$this->apiController->EnvoiSmsRdvConfirm($rendezvous, $client_comptes_pl->getCliTelephone());
}
} else {
if ($rendezvous->getClientLibre()) {
$client_libre = $rendezvous->getClientLibre();
} else {
$client_libre = new ClientLibre;
}
$client_libre->setClNom($request->get('nom_pl'));
if ($request->get('email_pl')) {
$client_libre->setClEmail($request->get('email_pl'));
}
if ($request->get('telephone_pl')) {
$client_libre->setClTelephone($request->get('telephone_pl'));
}
if ($request->get('civilite_pl')) {
$client_libre->setClCivilite($request->get('civilite_pl'));
}
$manager->persist($client_libre);
$tarif = 0;
for ($i = 0; $i < count($request->get('prestation_pl')); $i++) {
$centre_prestation = $this->em->getrepository(CentrePrestation::class)->find($request->get('prestation_pl')[$i]);
$type_vehicules = $this->em->getrepository(TypeVehicule::class)->find($request->get('type_vehicule')[$i]);
if ($request->get('energie_pl')[$i]) {
$energie = $this->em->getrepository(Energie::class)->find($request->get('energie_pl')[$i]);
} else {
$energie = null;
}
$tarifTotal = $centre_prestation->getPstTarif() + $tarif;
$tarif = $centre_prestation->getPstTarif();
if ($rendezvous->getRendezVousInfos()[$i] == '') {
$rendezvous_infos = new RendezVousInfos();
$rendez_vous_vehicules = new RendezVousVehicule();
$marque = $this->em->getrepository(Marque::class)->find(1);
$modele = $this->em->getrepository(Modele::class)->find(1);
$rendez_vous_vehicules->setMarque($marque);
$rendez_vous_vehicules->setModele($modele);
} else {
$rendezvous_infos = $rendezvous->getRendezVousInfos()[$i];
$rendez_vous_vehicules = $rendezvous_infos->getVehicule();
}
$rendezvous_infos->setCentrePrestation($centre_prestation);
$rendezvous_infos->setVehicule($rendez_vous_vehicules);
$rendezvous_infos->setRendezvous($rendezvous);
$rendezvous_infos->setRdvInfConvoyage($request->get('convoyage_pl') !== 'false');
$rendezvous_infos->setRdvInfPret($request->get('pret_pl') !== 'false');
$rendezvous_infos->setRdvInfDepot($request->get('depot_pl') !== 'false');
$rendez_vous_vehicules->setTypeVehicule($type_vehicules);
$rendez_vous_vehicules->setEnergie($energie);
$rendez_vous_vehicules->setRdvVhcImmatriculation($request->get('immatriculation_pl')[$i] ? $request->get('immatriculation_pl')[$i] : null);
$rendez_vous_vehicules->setRdvVhcTypeProprietaire('Autre');
$manager->persist($rendezvous_infos);
$manager->persist($rendez_vous_vehicules);
}
$rendezvous->setClientLibre($client_libre);
$rendezvous->setCentre($centre);
$rendezvous->setUtilisateur($utilisateur);
$rendezvous->setCentreType($centre_type);
$rendezvous->setLigne($ligne);
$rendezvous->setRdvDateHeure(new Datetime($request->get('date')));
$rendezvous->setRdvDuree($request->get('duree_pl'));
$rendezvous->setRdvCommentaire($request->get('commentaire_pl') ? $request->get('commentaire_pl') : null);
$rendezvous->setRdvBonCommande($request->get('bon_commande_pl') ? $request->get('bon_commande_pl') : null);
$rendezvous->setRdvDemandeRappelSms($request->get('rappel_sms_pl') !== 'false');
$rendezvous->setRdvVehiculePresent(false);
$rendezvous->setRdvTermine(false);
$rendezvous->setRdvNotifPayline(false);
$rendezvous->setNombreModification(false);
$rendezvous->setRdvTarif($tarifTotal);
$manager->persist($rendezvous);
$manager->flush();
if ($request->get('envoi_sms_pl') == 'true' && $request->get('telephone_pl') != '') {
$this->apiController->EnvoiSmsRdvConfirm($rendezvous, $request->get('telephone_pl'));
}
}
if ($request->get('email_confirmation_pl') == 'true') {
$this->apiController->envoi_email_confirmation_client($rendezvous);
}
}
$this->cache->delete('utilisateur' . $this->id);
// =========================================================================
// CONSTRUCTION DE L'OBJET EVENT POUR FULLCALENDAR
// =========================================================================
// 1. Récupération des données Client
$nom = ''; $telephone = ''; $email = ''; $clientCompteId = null; $clientLibreId = null;
$clientHonorePasRdv = false; // Valeur par défaut
if ($rendezvous->getClientCompte()) {
$client = $rendezvous->getClientCompte();
$nom = $client->getCliNom(); // Adapter selon votre entité (ex: getNom())
$telephone = $client->getCliTelephone();
$email = $client->getCliEmail();
$clientCompteId = $client->getId();
// $clientHonorePasRdv = $client->isHonorePasRdv(); // Décommentez si cette méthode existe
} elseif ($rendezvous->getClientLibre()) {
$client = $rendezvous->getClientLibre();
$nom = $client->getClNom() . ' ' . $client->getClPrenom();
$telephone = $client->getClTelephone();
$email = $client->getClEmail();
$clientLibreId = $client->getId();
}
// 2. Récupération des données Véhicules / Prestations
$vehiculeNom = [];
$immatriculationPl = [];
$prestationId = null;
$typeVehiculeId = null;
$energieId = null;
$vehiculeId = null;
$vehiculeClientId = null;
$backgroundColor = '#3788d8'; // Couleur par défaut
$partenaireColor = $rendezvous->getPartenaire() ? $rendezvous->getPartenaire()->getPaCouleur() : '';
$rendezVousInfosResultColor[] = $rendezvous_infos->getRdvInfResultat() ? $rendezvous_infos->getRdvInfResultat() : '';
// Récupération Paramètre (pour InfoBulle)
$parametreCentreGroupe = $this->em->getRepository(ParametreCentreGroupe::class)->findOneBy(['centre_groupe' => $this->id]);
$isInfoBulle = $parametreCentreGroupe ? $parametreCentreGroupe->isPcgInfoBulle() : false;
// Calcul date de fin
$dateFin = (clone $rendezvous->getRdvDateHeure())->modify(sprintf('+%d minutes', $rendezvous->getRdvDuree()));
$rendesVousVehicule = $rendezvous_infos->getVehicule();
$immatriculationPl[] = $rendesVousVehicule->getRdvVhcImmatriculation() ? $rendesVousVehicule->getRdvVhcImmatriculation() : '';
$typeVehiculeId[] = $rendesVousVehicule->getTypeVehicule() ? $rendesVousVehicule->getTypeVehicule()->getId() : '';
$tarifPresta[] = $rendezvous_infos->getCentrePrestation()->getPsttarif();
$prestationId = $rendezvous_infos->getCentrePrestation()->getId();
$backgroundColor = '#'.$rendezvous_infos->getCentrePrestation()->getPstCouleur();
$vehiculeClientId = $rendesVousVehicule->getId();
$vehiculeNom[] =
($rendesVousVehicule->getRdvVhcImmatriculation() ? $rendesVousVehicule->getRdvVhcImmatriculation() . ' - ' : '') .
($rendesVousVehicule->getMarque() ? $rendesVousVehicule->getMarque()->getMarquelibele() : '') . ($rendesVousVehicule->getMarqueCl() ? $rendesVousVehicule->getMarqueCl()->getMarquelibele() : '') . ' - ' .
($rendesVousVehicule->getModele() ? $rendesVousVehicule->getModele()->getMdllibele() : '') . ($rendesVousVehicule->getModeleCl() ? $rendesVousVehicule->getModeleCl()->getMdllibele() : '');
$energieId[] = $rendesVousVehicule->getEnergie() ? $rendesVousVehicule->getEnergie()->getId() : '';
$currentImmat = $rendesVousVehicule->getRdvVhcImmatriculation() ? $rendesVousVehicule->getRdvVhcImmatriculation() : '';
$currentMarque = ($rendesVousVehicule->getMarque() ? $rendesVousVehicule->getMarque()->getMarquelibele() : '') . ($rendesVousVehicule->getMarqueCl() ? $rendesVousVehicule->getMarqueCl()->getMarquelibele() : '');
$currentModele = ($rendesVousVehicule->getModele() ? $rendesVousVehicule->getModele()->getMdllibele() : '') . ($rendesVousVehicule->getModeleCl() ? $rendesVousVehicule->getModeleCl()->getMdllibele() : '');
$currentPresta = $rendezvous_infos->getCentrePrestation()->getPsttypevisite()->getTypvstlibele();
if ($currentImmat !== '') {
$currentImmat = $currentImmat . ' / ';
}
if ($nom !== '') {
$nom = $nom . ' / ';
}
$title[] = $nom . $currentImmat . $currentMarque . ' - ' . $currentModele . ' / ' . $currentPresta . ' / ' . $tarifTotal . '€';
// Construction du tableau
$eventData = [
'id' => (string) $rendezvous->getId(),
'resourceId' => (string) $rendezvous->getLigne()->getId(),
'title' => $title,
'start' => $rendezvous->getRdvDateHeure()->format('Y-m-d H:i:s'),
'end' => $dateFin->format('Y-m-d H:i:s'),
'backgroundColor' => $backgroundColor,
'extendedProps' => [
'nom' => $nom,
'telephone' => $telephone,
'email' => $email,
'duree' => (int)$rendezvous->getRdvDuree(),
'commentaire' => $rendezvous->getRdvCommentaire() ?? "",
// Booléens
'depot' => $rendezvous_infos->isRdvInfDepot() ,
'convoyage' => $rendezvous_infos->isRdvInfConvoyage() ,
'pret' => $rendezvous_infos->isRdvInfPret() ,
'rappelSms' => $rendezvous->isRdvDemandeRappelSms(),
'rappelConfirm' => $rendezvous->getRdvDemandeConfirmationSms(),
// IDs importants (aussi en string pour sécurité)
'rendezVousId' => (string)$rendezvous->getId(),
'ligneId' => (string)$rendezvous->getLigne()->getId(),
'utilisateurId' => $rendezvous->getUtilisateur() ? $rendezvous->getUtilisateur()->getId() : null,
// Champs tableaux (pour coller à votre structure existante)
'centreType' => [$rendezvous_infos->getCentrePrestation()->getPstTypeVisite()->getTypVstLibele()],
'centreTypeId' => $rendezvous->getCentreType()->getId(),
'prestationId' => $prestationId ? [$prestationId] : [],
'clientLibreId' => $clientLibreId,
'clientCompteId' => $clientCompteId ? $clientCompteId : "",
'vehiculeNom' => $vehiculeNom, // Tableau
'vehiculeId' => $vehiculeClientId ? [$vehiculeClientId] : [],
'immatriculationPl' => $immatriculationPl,
'typeVehiculeId' => $typeVehiculeId,
'tarifPresta' => $tarifPresta,
'energie' => $energieId,
'partenaireColor' => $partenaireColor,
'rendezVousInfosResultColor' => $rendezVousInfosResultColor,
// Autres champs simples
'tarifTotal' => number_format($rendezvous->getRdvTarif(), 2, '.', ''),
'heureDebut' => $rendezvous->getRdvDateHeure()->format('H:i'),
'heureFin' => $dateFin->format('H:i'),
'dateCreation' => $rendezvous->getRdvDateCreation()->format('d/m/Y H:i'),
'isInfoBulle' => $isInfoBulle,
'clientHonorePasRdv' => $clientHonorePasRdv,
'blocageId' => '',
'recurrenceId' => ''
],
];
return new JsonResponse(['event' => $eventData, 'id' =>$rendezvous->getId()]);
}
//interroge le webservice de cteasy pour récuperre les infos d'un clientet de son véhicule en fonction d'un n° de coupon
/**
* @Route("admin/getCouponCteasy", name="getCouponCteasy")
*/
public function getCouponCteasy(Request $request)
{
$url = 'http://www.cteasy.com/httpHandlers/Bon/GetBon.ashx?key=7641d666-bab7-4e60-81bf-03d959b363a2&NumBon=' . $request->get('coupon_ct_easy');
// Envoi de la requête GET
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$response = curl_exec($ch);
curl_close($ch);
return new JsonResponse(json_decode($response, true));
}
public function setInfoFromCteasy($rdv, $request)
{
$cteasy = $this->getCouponCteasy($request);
$reponse_cteasy = json_decode($cteasy->getContent());
if ($reponse_cteasy->Valid) {
$facturationRdv = $this->em->getrepository(RendezvousFacturation::class)->findOneBy(['rendezvous' => $rdv->getId()]);
if (!$facturationRdv) {
$facturationRdv = new RendezvousFacturation();
$facturationRdv->setRendezVous($rdv);
}
$facturationRdv->setFpMontantPrestation($reponse_cteasy->Info->MontantPrestation);
$facturationRdv->setFpMontantFraisService($reponse_cteasy->Info->MontantFraisService);
$facturationRdv->isFpOptionCv($reponse_cteasy->Info->OptionCV);
$facturationRdv->setFpOptionCvMontant($reponse_cteasy->Info->MontantOptionCV);
$facturationRdv->isFpOptionModifiable($reponse_cteasy->Info->OptionReservationModifiable);
$facturationRdv->setFpOptionModifiableMontant($reponse_cteasy->Info->MontantOptionReservationModifiable);
$facturationRdv->isFpOptionPaiementMultiple($reponse_cteasy->Info->OptionPaiementPlusieursFois);
$facturationRdv->setFpOptionPaiementMultipleMontant($reponse_cteasy->Info->MontantOptionPaiementPlusieursFois);
$facturationRdv->setFpModeReglement($reponse_cteasy->Info->TypePaiementEcheance);
$this->em->persist($facturationRdv);
$rdv->setRdvTarif($reponse_cteasy->Info->MontantPrestation);
$cteasy = $this->em->getrepository(Partenaire::class)->find(1);
$rdv->setPartenaire($cteasy);
$rdv->setRdvCouponCteasy($request->get('coupon_ct_easy'));
$this->em->persist($rdv);
$this->em->flush();
}
}
/**
* @Route("admin/rendez_vous_remove", name="rendez_vous_remove")
*/
public function RemoveRendezVous(Request $request, ObjectManager $manager)
{
$permissionResult = $this->checkPermissionAdmin("supp", "calendrier");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
if (!$request->get('rendezvous_id')) {
return new Response('cannot_delete_rdv_not_specified');
}
$rendezvous = $this->em->getrepository(Rendezvous::class)->find($request->get('rendezvous_id'));
$access = $this->checkUserAccessToCentre($rendezvous->getCentre()->getid());
if ($access !== true) {
return $access;
}
$rendezVousInfos = $this->em->getrepository(RendezVousInfos::class)->findBy(array('rendezvous' => $rendezvous));
$RendezVousFacturation = $this->em->getrepository(RendezVousFacturation::class)->findOneBy(array('rendezvous' => $rendezvous));
if ($RendezVousFacturation) {
$RendezVousPaiementMultiples = $this->em->getrepository(RendezVousPaiementMultiple::class)->findBy(array('rendezvous_facturation' => $RendezVousFacturation->getId()));
if ($RendezVousPaiementMultiples) {
foreach ($RendezVousPaiementMultiples as $RendezVousPaiementMultiple) {
$this->em->remove($RendezVousPaiementMultiple);
}
}
$this->em->remove($RendezVousFacturation);
}
foreach ($rendezVousInfos as $rendezVousInfo) {
if ($rendezvous->getClientLibre()) {
$this->em->remove($rendezVousInfo->getVehicule());
}
$this->em->remove($rendezVousInfo);
}
if ($rendezvous->getClientLibre()) {
$this->em->remove($rendezvous->getClientLibre());
}
// $cheminFichier = '../supp_rdv_admin.txt';
// $fichier = fopen($cheminFichier, "a");
$now = new \DateTime();
$message = $now->format('Y-m-d H:i:s') . ' n°= ' . $rendezvous->getId() . ' User:' . $this->getUser()->getUtlUsername();
$this->logger->critical('---------------------- suppression manuel -------------------');
$this->logger->critical($message);
// fwrite($fichier, $message . PHP_EOL);
// fclose($fichier);
// Supprimer les entités
$manager->remove($rendezvous);
$manager->flush();
$this->apiController->sendDeleteRdvToAutoPlanning($rendezvous->getCentre()->getCtrParametreCentre()->getPcAutoPlanningApiKey(), $rendezvous->getRdvIdAutoPlanning());
$this->apiController->sendRemoveRdvToCtMalin($rendezvous);
return new Response('ok');
}
/**
* @Route("admin/rendez_vous_remboursement", name="rendez_vous_remboursement")
*/
public function rendez_vous_remboursement(Request $request, ObjectManager $manager)
{
$rendezvous = $this->em->getrepository(Rendezvous::class)->findOneBy(['TokenPayline' => $request->get('token')]);
$montant = $request->get('montant') !== null ? (float) $request->get('montant') : null;
if ($montant !== null) {
$montant = max(0.01, min($montant, $rendezvous->getRdvTarif()));
}
$return = $this->PaylineController->envoiRefund($rendezvous, $request, $montant);
if ($return['result'] == 'OK') {
$this->apiController->envoi_email_remboursement_client($rendezvous, $montant);
}
return new JsonResponse($return);
}
/**
* @Route("admin/rendez_vous_remove_sms", name="rendez_vous_remove_sms")
*/
public function RemoveRendezVousConfSms(Request $request, ObjectManager $manager)
{
$permissionResult = $this->checkPermissionAdmin("supp", "calendrier");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
$rendezvousId = $request->get('rendezvous_id');
if (!$rendezvousId) {
return new Response('cannot_delete_rdv_not_specified');
}
$rendezvous = $this->em->getrepository(Rendezvous::class)->find($rendezvousId);
if (!$rendezvous->getClientLibre()->getClTelephone() && !$rendezvous->getClientCompte()->getCliTelephone()) {
return new Response('cannot_delete_telephone_not_specified');
}
$access = $this->checkUserAccessToCentre($rendezvous->getCentre()->getid());
if ($access !== true) {
return $access;
}
$rendezVousInfos = $this->em->getrepository(RendezVousInfos::class)->findBy(array('rendezvous' => $rendezvous));
$RendezVousFacturation = $this->em->getrepository(RendezVousFacturation::class)->findOneBy(array('rendezvous' => $rendezvous));
if ($RendezVousFacturation) {
$RendezVousPaiementMultiples = $this->em->getrepository(RendezVousPaiementMultiple::class)->findBy(array('rendezvous_facturation' => $RendezVousFacturation->getId()));
if ($RendezVousPaiementMultiples) {
foreach ($RendezVousPaiementMultiples as $RendezVousPaiementMultiple) {
$this->em->remove($RendezVousPaiementMultiple);
}
}
$this->em->remove($RendezVousFacturation);
}
foreach ($rendezVousInfos as $rendezVousInfo) {
if ($rendezvous->getClientLibre()) {
$this->em->remove($rendezVousInfo->getVehicule());
}
$this->em->remove($rendezVousInfo);
}
if ($rendezvous->getClientLibre()) {
$this->em->remove($rendezvous->getClientLibre());
}
if ($rendezvous->getClientCompte()) {
$telephone = $rendezvous->getClientCompte()->getCliTelephone();
} else {
$telephone = $rendezvous->getClientLibre()->getClTelephone();
}
$this->apiController->EnvoiSmsRdvDelete($rendezvous, $telephone);
// $cheminFichier = '../supp_rdv_admin.txt';
// $fichier = fopen($cheminFichier, "a");
$now = new \DateTime();
$message = $now->format('Y-m-d H:i:s') . ' n°= ' . $rendezvous->getId() . ' User:' . $this->getUser()->getUtlUsername();
$this->logger->critical('---------------------- suppression manuel -------------------');
$this->logger->critical($message);
// fwrite($fichier, $message . PHP_EOL);
// fclose($fichier);
// Supprimer les entités
$manager->remove($rendezvous);
$manager->flush();
$this->apiController->sendDeleteRdvToAutoPlanning($rendezvous->getCentre()->getCtrParametreCentre()->getPcAutoPlanningApiKey(), $rendezvous->getRdvIdAutoPlanning());
$this->apiController->sendRemoveRdvToCtMalin($rendezvous);
return new Response('ok');
}
/**
* @Route("admin/rendez_vous_remove_email", name="rendez_vous_remove_email")
*/
public function RemoveRendezVousConfEmail(Request $request, ObjectManager $manager)
{
$permissionResult = $this->checkPermissionAdmin("supp", "calendrier");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
$rendezvousId = $request->get('rendezvous_id');
if (!$rendezvousId) {
return new Response('cannot_delete_rdv_not_specified');
}
$rendezvous = $this->em->getrepository(Rendezvous::class)->find($rendezvousId);
$rendezVousInfos = $this->em->getrepository(RendezVousInfos::class)->findBy(array('rendezvous' => $rendezvous));
$RendezVousFacturation = $this->em->getrepository(RendezVousFacturation::class)->findOneBy(array('rendezvous' => $rendezvous));
if ($RendezVousFacturation) {
$RendezVousPaiementMultiples = $this->em->getrepository(RendezVousPaiementMultiple::class)->findBy(array('rendezvous_facturation' => $RendezVousFacturation->getId()));
if ($RendezVousPaiementMultiples) {
foreach ($RendezVousPaiementMultiples as $RendezVousPaiementMultiple) {
$this->em->remove($RendezVousPaiementMultiple);
}
}
$this->em->remove($RendezVousFacturation);
}
foreach ($rendezVousInfos as $rendezVousInfo) {
if ($rendezvous->getClientLibre()) {
$this->em->remove($rendezVousInfo->getVehicule());
}
$this->em->remove($rendezVousInfo);
}
if ($rendezvous->getClientLibre()) {
$this->em->remove($rendezvous->getClientLibre());
}
$return = $this->apiController->envoi_email_suppression_rdv($rendezvous);
// Vérification de l'erreur
$responseArray = json_decode($return->getContent(), true);
if (!isset($responseArray['error'])) {
foreach ($rendezVousInfos as $rendezVousInfo) {
$manager->remove($rendezVousInfo);
}
// $cheminFichier = '../supp_rdv_admin.txt';
// $fichier = fopen($cheminFichier, "a");
$now = new \DateTime();
$message = $now->format('Y-m-d H:i:s') . ' n°= ' . $rendezvous->getId() . ' User:' . $this->getUser()->getUtlUsername();
$this->logger->critical('---------------------- suppression manuel -------------------');
$this->logger->critical($message);
// fwrite($fichier, $message . PHP_EOL);
// fclose($fichier);
// Supprimer les entités
$manager->remove($rendezvous);
$manager->flush();
$this->apiController->sendDeleteRdvToAutoPlanning($rendezvous->getCentre()->getCtrParametreCentre()->getPcAutoPlanningApiKey(), $rendezvous->getRdvIdAutoPlanning());
$this->apiController->sendRemoveRdvToCtMalin($rendezvous);
}
return new Response('ok');
}
/**
* @Route("admin/rendez_vous_remove_email_sms", name="rendez_vous_remove_email_sms")
*/
public function removeRendezVousEmailAndSms(Request $request, ObjectManager $manager)
{
$permissionResult = $this->checkPermissionAdmin("supp", "calendrier");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
$rendezvousId = $request->get('rendezvous_id');
$rendezvous = $this->em->getRepository(Rendezvous::class)->find($rendezvousId);
if (!$rendezvousId || !$rendezvous) {
return new Response('cannot_delete_rdv_not_specified');
}
$access = $this->checkUserAccessToCentre($rendezvous->getCentre()->getId());
if ($access !== true) {
return $access;
}
$rendezVousInfos = $this->em->getRepository(RendezVousInfos::class)->findBy(['rendezvous' => $rendezvous]);
$RendezVousFacturation = $this->em->getRepository(RendezVousFacturation::class)->findOneBy(['rendezvous' => $rendezvous]);
if ($RendezVousFacturation) {
$RendezVousPaiementMultiples = $this->em->getRepository(RendezVousPaiementMultiple::class)->findBy(['rendezvous_facturation' => $RendezVousFacturation->getId()]);
if ($RendezVousPaiementMultiples) {
foreach ($RendezVousPaiementMultiples as $RendezVousPaiementMultiple) {
$this->em->remove($RendezVousPaiementMultiple);
}
}
$this->em->remove($RendezVousFacturation);
}
foreach ($rendezVousInfos as $rendezVousInfo) {
if ($rendezvous->getClientLibre()) {
$this->em->remove($rendezVousInfo->getVehicule());
}
$this->em->remove($rendezVousInfo);
}
if ($rendezvous->getClientLibre()) {
$this->em->remove($rendezvous->getClientLibre());
}
if (!$rendezvous->getClientLibre()->getClTelephone() && !$rendezvous->getClientCompte()->getCliTelephone()) {
return new Response('cannot_delete_telephone_not_specified');
}
if ($rendezvous->getClientCompte()) {
$telephone = $rendezvous->getClientCompte()->getCliTelephone();
} else {
$telephone = $rendezvous->getClientLibre()->getClTelephone();
}
$this->apiController->EnvoiSmsRdvDelete($rendezvous, $telephone);
$return = $this->apiController->envoi_email_suppression_rdv($rendezvous);
// Vérification de l'erreur pour l'email
$responseArray = json_decode($return->getContent(), true);
if (!isset($responseArray['error'])) {
foreach ($rendezVousInfos as $rendezVousInfo) {
$manager->remove($rendezVousInfo);
}
} else {
return $return;
}
// $cheminFichier = '../supp_rdv_admin.txt';
// $fichier = fopen($cheminFichier, "a");
$now = new \DateTime();
$message = $now->format('Y-m-d H:i:s') . ' n°= ' . $rendezvous->getId() . ' User:' . $this->getUser()->getUtlUsername();
$this->logger->critical('---------------------- suppression manuel -------------------');
$this->logger->critical($message);
// fwrite($fichier, $message . PHP_EOL);
// fclose($fichier);
// Supprimer les entités
$manager->remove($rendezvous);
$manager->flush();
$this->apiController->sendDeleteRdvToAutoPlanning($rendezvous->getCentre()->getCtrParametreCentre()->getPcAutoPlanningApiKey(), $rendezvous->getRdvIdAutoPlanning());
$this->apiController->sendRemoveRdvToCtMalin($rendezvous);
return new Response('ok');
}
/**
* @Route("admin/rendez_vous_copier_coller", name="rendez_vous_copier_coller")
*/
public function CopierCollerRendezVous(Request $request, ObjectManager $manager)
{
$permissionResult = $this->checkPermissionAdmin("ecrire", "calendrier");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
$rendezvousId = $request->get('rendezvous_id');
if (!$rendezvousId) {
return new Response('cannot_delete_rdv_not_specified');
}
$source = $this->em->getrepository(Rendezvous::class)->find($rendezvousId);
$ligne = $this->em->getrepository(Ligne::class)->find($request->get('ligneId'));
$typeRdv = $source->getCentreType()->getId();
$typeArray = [];
if ($ligne->isLgnVl()) $typeArray[] = 1;
if ($ligne->isLgnCl()) $typeArray[] = 4;
if ($ligne->isLgnPl()) $typeArray[] = 2;
if (!in_array($typeRdv, $typeArray)) {
return new Response('ko');
}
$copy = new Rendezvous();
$copy->setTokenRendezVous(md5(uniqid()));
$copy->setRdvDateCreation(new Datetime());
$copy->setCentre($source->getCentre());
$copy->setCentreType($source->getCentreType());
$copy->setLigne($ligne);
$copy->setRdvDateHeure(new Datetime($request->get('start')));
$copy->setRdvDuree($source->getRdvDuree());
$copy->setRdvTarif($source->getRdvTarif());
$copy->setRdvCommentaire($source->getRdvCommentaire());
$copy->setRdvColor($source->getRdvColor());
$copy->setUtilisateur($source->getUtilisateur());
if ($source->getClientCompte()) {
$copy->setClientCompte($source->getClientCompte());
}
if ($source->getClientLibre()) {
$srcCl = $source->getClientLibre();
$clCopy = new ClientLibre();
$clCopy->setClNom($srcCl->getClNom());
$clCopy->setClPrenom($srcCl->getClPrenom());
$clCopy->setClEmail($srcCl->getClEmail());
$clCopy->setClTelephone($srcCl->getClTelephone());
$clCopy->setClCivilite($srcCl->getClCivilite());
$manager->persist($clCopy);
$copy->setClientLibre($clCopy);
}
if ($source->getPartenaire()) {
$copy->setPartenaire($source->getPartenaire());
}
$manager->persist($copy);
foreach ($source->getRendezVousInfos() as $sourceInfo) {
$copyInfo = new RendezVousInfos();
$copyInfo->setRendezvous($copy);
$copyInfo->setCentrePrestation($sourceInfo->getCentrePrestation());
$copyInfo->setRdvInfDepot($sourceInfo->isRdvInfDepot());
$copyInfo->setRdvInfConvoyage($sourceInfo->isRdvInfConvoyage());
$copyInfo->setRdvInfPret($sourceInfo->isRdvInfPret());
if ($source->getClientLibre()) {
$srcVhc = $sourceInfo->getVehicule();
$vhcCopy = new RendezVousVehicule();
$vhcCopy->setRdvVhcImmatriculation($srcVhc->getRdvVhcImmatriculation());
$vhcCopy->setRdvVhcTypeProprietaire($srcVhc->getRdvVhcTypeProprietaire() ?? '');
$vhcCopy->setRdvVhcNomClientProprietaire($srcVhc->getRdvVhcNomClientProprietaire() ?? '');
$vhcCopy->setRdvVhcPrenomClientProprietaire($srcVhc->getRdvVhcPrenomClientProprietaire());
$vhcCopy->setRdvVhcNumSerie($srcVhc->getRdvVhcNumSerie());
$vhcCopy->setRdvVhcDescription($srcVhc->getRdvVhcDescription());
if ($srcVhc->getMarque()) $vhcCopy->setMarque($srcVhc->getMarque());
if ($srcVhc->getModele()) $vhcCopy->setModele($srcVhc->getModele());
if ($srcVhc->getTypeVehicule()) $vhcCopy->setTypeVehicule($srcVhc->getTypeVehicule());
if ($srcVhc->getEnergie()) $vhcCopy->setEnergie($srcVhc->getEnergie());
$manager->persist($vhcCopy);
$copyInfo->setVehicule($vhcCopy);
} else {
$copyInfo->setVehicule($sourceInfo->getVehicule());
}
$manager->persist($copyInfo);
}
$manager->flush();
return new JsonResponse(['status' => 'ok', 'id' => $copy->getId()]);
}
/**
* @Route("admin/rendez_vous_drag_and_drop", name="rendez_vous_drag_and_drop")
*/
public function DragAndDropRendezVous(Request $request, ObjectManager $manager)
{
$permissionResult = $this->checkPermissionAdmin("ecrire", "calendrier");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
$rendezvousId = $request->get('rendezvous_id');
if (!$rendezvousId) {
return new Response('cannot_delete_rdv_not_specified');
}
$rendezvous = $this->em->getrepository(Rendezvous::class)->find($rendezvousId);
$ligne = $this->em->getrepository(Ligne::class)->find($request->get('ligneId'));
$typeRdv = $rendezvous->getCentreType()->getId();
$typeArray = [];
$isVl = $ligne->isLgnVl();
$isCl = $ligne->isLgnCl();
$isPl = $ligne->isLgnPl();
if ($isVl) {
$typeArray[] = 1;
}
if ($isCl) {
$typeArray[] = 4;
}
if ($isPl) {
$typeArray[] = 2;
}
if (in_array($typeRdv, $typeArray)) {
$rendezvous->setRdvDateHeure(new Datetime($request->get('start')));
$rendezvous->setLigne($ligne);
$rendezvous->setRdvDateModification(new Datetime());
$manager->persist($rendezvous);
$manager->flush();
return new Response('ok');
}
return new Response('ko');
}
/**
* @Route("admin/blocage_drag_and_drop", name="blocage_drag_and_drop")
*/
public function DragAndDropBlocage(Request $request, ObjectManager $manager)
{
$allpermission = $this->checkAllPermissionAdmin("blocage");
if (!$allpermission || !$allpermission['ecrire']) {
return new Response('cannot_move_blocage_not_right');
}
$blocageId = $request->get('blocage_id');
if (!$blocageId) {
return new Response('cannot_move_blocage_not_specified');
}
$ligneBlocage = $this->em->getrepository(LigneBlocage::class)->find($request->get('blocage_id'));
$ligne = $this->em->getrepository(Ligne::class)->find($request->get('ligneId'));
$ligneBlocage->setBlcDebut(new Datetime($request->get('start')));
$ligneBlocage->setBlcFin(new Datetime($request->get('end')));
$ligneBlocage->setLigne($ligne);
$manager->persist($ligneBlocage);
$manager->flush();
return new Response('ok');
}
/**
* @Route("/admin/blocage_add", name="blocage_add")
*/
public function AddBlocage(Request $request, ObjectManager $manager)
{
$allpermission = $this->checkAllPermissionAdmin("blocage");
if (!$allpermission || !$allpermission['ecrire']) {
return new Response('cannot_add_blocage_not_right');
}
$ligne = $this->em->getrepository(Ligne::class)->find($request->get('ligne_id'));
$ligneBlocageRecurrence = new LigneBlocageRecurrence;
$from = new DateTime($request->get('dateDebutBlocage'));
$to = new DateTime($request->get('dateFinBlocage'));
$to = $to->modify("+ 1 day");
$interval = DateInterval::createFromDateString('1 day');
$days = new DatePeriod($from, $interval, $to);
$creneauOccupe = array();
$joursBlocage = $request->get("joursBlocages");
$joursBlocage[6] = "7";
foreach ($days as $day) {
if (in_array($day->format('N'), $joursBlocage)) {
$dateDebut = $day->format('Y-m-d') . ' ' . $request->get('hDebutBlocage');
$dateFin = $day->format('Y-m-d') . ' ' . $request->get('hFinBlocage');
// Récupération des rendez-vous ou blocage existants pour cette ligne et ce créneau
$rendezVousLigneExistants = $this->em->getRepository(Rendezvous::class)->rendezVousExistByLigne($ligne, $dateDebut, $dateFin, '');
$blocageLigneExistants = $this->em->getRepository(LigneBlocage::class)->blocageExistByLigne($ligne, $dateDebut, $dateFin, $request->get('blocage_id'));
// Si des rendez-vous ou blocage existent, renvoie un message d'erreur
if (count($rendezVousLigneExistants) > 0 || count($blocageLigneExistants) > 0) {
$creneauOccupe[] = $dateDebut . '->' . $dateFin;
} else {
if ($request->get('blocage_id') !== '') {
$ligneBlocage = $this->em->getrepository(LigneBlocage::class)->find($request->get('blocage_id'));
$ligneBlocageRecurrence = $ligneBlocage->getRecurrence();
} else {
$ligneBlocage = new LigneBlocage;
$manager->persist($ligneBlocageRecurrence);
}
$ligneBlocage->setBlcDebut(new DateTime($dateDebut));
$ligneBlocage->setBlcFin(new DateTime($dateFin));
$ligneBlocage->setBlcCommentaire($request->get('commentaireBlocage'));
$ligneBlocage->setBlcBgColor($request->get('couleurBlocage'));
$ligneBlocage->setLigne($ligne);
$ligneBlocage->setRecurrence($ligneBlocageRecurrence);
$manager->persist($ligneBlocage);
$manager->flush();
if ($request->get('blocage_id') !== '') {
$this->apiController->sendAddBlcToAutoPlanning($ligneBlocage,false);
}else{
$this->apiController->sendAddBlcToAutoPlanning($ligneBlocage);
}
$creneauOccupe[] = 'ok';
}
}
}
$manager->flush();
return new JsonResponse($creneauOccupe);
}
/**
* @Route("admin/blocage_remove", name="blocage_remove")
*/
public function RemoveBlocage(Request $request, ObjectManager $manager)
{
$allpermission = $this->checkAllPermissionAdmin("blocage");
if (!$allpermission || !$allpermission['supp']) {
return new Response('cannot_supp_blocage_not_right');
}
if ($request->get('blocage_id')) {
$ligneBlocage = $this->em->getrepository(LigneBlocage::class)->find($request->get('blocage_id'));
$manager->remove($ligneBlocage);
if($ligneBlocage->getBlcAutoPlanning()){
$this->apiController->sendDeleteBlcToAutoPlanning($ligneBlocage);
}
$manager->flush();
} else if ($request->get('recurrence_id')) {
$lignesBlocage = $this->em->getrepository(LigneBlocage::class)->findBy(['recurrence' => $request->get('recurrence_id')]);
$ligneBlocageRecurrence = $this->em->getrepository(LigneBlocageRecurrence::class)->find($request->get('recurrence_id'));
foreach ($lignesBlocage as $ligneBlocage) {
$manager->remove($ligneBlocage);
if ($ligneBlocage->getBlcAutoPlanning()) {
$this->apiController->sendDeleteBlcToAutoPlanning($ligneBlocage);
}
}
$manager->remove($ligneBlocageRecurrence);
$manager->flush();
}
// $manager->flush();
return new Response('ok');
}
/**
* @Route("/admin/rdv_recurrence_add", name="rdv_recurrence_add")
*/
public function AddRdvRecurrence(Request $request, ObjectManager $manager)
{
$permissionResult = $this->checkPermissionAdmin("ecrire", "calendrier");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
$ligne = $this->em->getrepository(Ligne::class)->find($request->get('ligne_id'));
$utilisateur = $this->em->getrepository(Utilisateur::class)->find($request->get('utilisateurRecurrence'));
$clientCompte = $this->em->getrepository(ClientCompte::class)->find($request->get('clientCompteRecurrenceId'));
if ($request->get('centre_type')) {
$centreType = $request->get('centre_type');
$centre = $this->em->getrepository(Centre::class)->findOneBy(['centre_type' => $centreType, 'centre_groupe' => $this->id]);
} else {
$centreType = '';
if ($clientCompte->isCliVl()) {
$centreType = 1;
} else if ($clientCompte->isCliPl()) {
$centreType = 2;
} else if ($clientCompte->isCliCl()) {
$centreType = 4;
} else {
return new JsonResponse(['error' => 'Une erreur est surveneue lors de l\'enregistrement.'], 400);
}
$centre = $this->em->getrepository(Centre::class)->findOneBy(['centre_type' => $centreType, 'centre_groupe' => $this->id]);
}
$rendezVousRecurrence = new RendezVousRecurrence;
$from = new DateTime($request->get('dateDebutRecurrence'));
$to = new DateTime($request->get('dateFinRecurrence'));
$to = $to->modify("+ 1 day");
$interval = DateInterval::createFromDateString('1 day');
$days = new DatePeriod($from, $interval, $to);
$creneauOccupe = array();
foreach ($days as $day) {
if (in_array($day->format('N'), $request->get("joursRecurrences"))) {
$dateDebut = $day->format('Y-m-d') . ' ' . $request->get('hDebutRecurrence');
$dateFin = $day->format('Y-m-d') . ' ' . $request->get('hFinRecurrence');
$dateDebutInterval = new DateTime($day->format('Y-m-d') . ' ' . $request->get('hDebutRecurrence'));
$dateFinInterval = new DateTime($day->format('Y-m-d') . ' ' . $request->get('hFinRecurrence'));
$intervalInSeconds = $dateFinInterval->getTimestamp() - $dateDebutInterval->getTimestamp();
$intervalInMinutes = $intervalInSeconds / 60;
// Récupération des rendez-vous ou blocage existants pour cette ligne et ce créneau
$rendezVousLigneExistants = $this->em->getRepository(Rendezvous::class)->rendezVousExistByLigne($ligne, $dateDebut, $dateFin, $request->get('rendezvous_id'));
$blocageLigneExistants = $this->em->getRepository(LigneBlocage::class)->blocageExistByLigne($ligne, $dateDebut, $dateFin, '');
// Si des rendez-vous ou blocage existent, renvoie un message d'erreur
if (count($rendezVousLigneExistants) > 0 || count($blocageLigneExistants) > 0) {
$creneauOccupe[] = $dateDebut . '->' . $dateFin;
} else {
if ($request->get('rendezvous_id') !== '') {
$rendezVous = $this->em->getrepository(Rendezvous::class)->find($request->get('rendezvous_id'));
$rendezVousRecurrence = $rendezVous->getRecurrence();
} else {
$rendezVous = new Rendezvous;
$rendezVous->setTokenRendezVous(md5(uniqid()));
$rendezVous->setRdvDateCreation(new Datetime());
}
$rendezVous->setCentre($centre);
$rendezVous->setUtilisateur($utilisateur);
$rendezVous->setCentreType($centre->getCentreType());
$rendezVous->setLigne($ligne);
$rendezVous->setClientCompte($clientCompte);
$rendezVous->setRdvTarif(0, 00);
$rendezVous->setRdvDateHeure(new DateTime($dateDebut));
$rendezVous->setRdvDuree($intervalInMinutes);
$rendezVous->setRdvCommentaire($request->get('commentaireRecurrence') ? $request->get('commentaireRecurrence') : null);
$rendezVous->setRdvColor($request->get('couleurRecurrence'));
$rendezVous->setRecurrence($rendezVousRecurrence ? $rendezVousRecurrence : '');
$manager->persist($rendezVous);
}
}
}
$manager->persist($rendezVousRecurrence);
$manager->flush();
return new JsonResponse($creneauOccupe);
}
/**
* @Route("admin/rdv_recurrence_remove", name="rdv_recurrence_remove")
*/
public function RemoveRdvRecurrence(Request $request, ObjectManager $manager)
{
$permissionResult = $this->checkPermissionAdmin("supp", "calendrier");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
if ($request->get('rendezvous_id')) {
$rendezvous = $this->em->getrepository(Rendezvous::class)->find($request->get('rendezvous_id'));
$rendezvous->getRecurrence();
$manager->remove($rendezvous);
} else if ($request->get('recurrence_id')) {
$rendezvouses = $this->em->getrepository(Rendezvous::class)->findBy(['recurrence' => $request->get('recurrence_id')]);
$rendezvousRecurrence = $this->em->getrepository(RendezVousRecurrence::class)->find($request->get('recurrence_id'));
foreach ($rendezvouses as $rendezvous) {
$manager->remove($rendezvous);
}
$manager->remove($rendezvousRecurrence);
}
$manager->flush();
return new Response('ok');
}
/**
* @Route("admin/rdv_recurrence_remove_sms", name="rdv_recurrence_remove_sms")
*/
public function RemoveRdvRecurrenceSms(Request $request, ObjectManager $manager)
{
$permissionResult = $this->checkPermissionAdmin("supp", "calendrier");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
if ($request->get('rendezvous_id')) {
$rendezvous = $this->em->getrepository(Rendezvous::class)->find($request->get('rendezvous_id'));
$rendezvous->getRecurrence();
$manager->remove($rendezvous);
} else if ($request->get('recurrence_id')) {
$rendezvouses = $this->em->getrepository(Rendezvous::class)->findBy(['recurrence' => $request->get('recurrence_id')]);
$rendezvousRecurrence = $this->em->getrepository(RendezVousRecurrence::class)->find($request->get('recurrence_id'));
foreach ($rendezvouses as $rendezvous) {
$manager->remove($rendezvous);
}
$manager->remove($rendezvousRecurrence);
}
$this->apiController->EnvoiSmsRdvDelete($rendezvous, $request->get('telephone'));
$manager->flush();
return new Response('ok');
}
/**
* @Route("admin/rdv_recurrence_remove_email", name="rdv_recurrence_remove_email")
*/
public function RemoveRdvRecurrenceConfEmail(Request $request, ObjectManager $manager)
{
$permissionResult = $this->checkPermissionAdmin("supp", "calendrier");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
if ($request->get('rendezvous_id')) {
$rendezvous = $this->em->getrepository(Rendezvous::class)->find($request->get('rendezvous_id'));
$rendezvous->getRecurrence();
$manager->remove($rendezvous);
} else if ($request->get('recurrence_id')) {
$rendezvouses = $this->em->getrepository(Rendezvous::class)->findBy(['recurrence' => $request->get('recurrence_id')]);
$rendezvousRecurrence = $this->em->getrepository(RendezVousRecurrence::class)->find($request->get('recurrence_id'));
foreach ($rendezvouses as $rendezvous) {
$manager->remove($rendezvous);
}
$manager->remove($rendezvousRecurrence);
}
$return = $this->apiController->envoi_email_confirmation_client($rendezvous);
$manager->flush();
return $return;
}
/**
* @Route("admin/rdv_by_client", name="rdv_by_client")
*/
public function findRdvByClientName(Request $request)
{
$permissionResult = $this->checkPermissionAdmin("lire", "calendrier");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
if ($request->get('startDate') || $request->get('endDate')) {
$rendezvousClient = $this->em->getrepository(Rendezvous::class)->findRendezvousByClientNameAndDate($this->id, $request->get('name'), $request->get('startDate'), $request->get('endDate'));
} else {
$rendezvousClient = $this->em->getrepository(Rendezvous::class)->findRendezvousByClientName($this->id, $request->get('name'));
}
$data = [];
foreach ($rendezvousClient as $rendezvous) {
if ($rendezvous->getClientLibre() !== null) {
$name = $rendezvous->getClientLibre()->getClNom();
$telephone = $rendezvous->getClientLibre()->getClTelephone();
} else {
if ($rendezvous->getClientCompte()->getCliNomSociete()) {
$name = $rendezvous->getClientCompte()->getCliNom() . '(' . $rendezvous->getClientCompte()->getCliNomSociete() . ')';
} else {
$name = $rendezvous->getClientCompte()->getCliNom();
}
$telephone = $rendezvous->getClientCompte()->getCliTelephone();
}
$rendezvousfacturation = $this->em->getrepository(RendezVousFacturation::class)->findOneBy(['rendezvous' => $rendezvous->getId()]);
if ($rendezvousfacturation) {
$etat_paiement = 'payé';
$option_cv = $rendezvousfacturation->isFpOptionCv();
$option_rdv_modifiable = $rendezvousfacturation->isFpOptionModifiable();
$option_paiement_2x = $rendezvousfacturation->isFpOptionPaiementMultiple();
} else {
$etat_paiement = 'non payé';
$option_cv = 0;
$option_rdv_modifiable = 0;
$option_paiement_2x = 0;
}
/** @var RendezVousInfos $rendezVousInfo */
foreach ($rendezvous->getRendezVousInfos() as $rendezVousInfo) {
$data[] = [
'date_rdv_pris' => $rendezvous->getRdvDateCreation()->format('d/m/Y H:i'),
'centre' => $rendezvous->getCentre()->getCtrNom(),
'name' => $name,
'telephone' => $telephone,
'vehicule' => $rendezVousInfo->getVehicule()->getMarque() ? $rendezVousInfo->getVehicule()->getMarque()->getMarqueLibele() : '' . ' ' . ($rendezVousInfo->getVehicule()->getModele() ? $rendezVousInfo->getVehicule()->getModele()->getMdlLibele() : '') . ' (' . $rendezVousInfo->getVehicule()->getRdvVhcImmatriculation() . ')',
'immat' => $rendezVousInfo->getVehicule()->getRdvVhcImmatriculation(),
'date_rdv' => $rendezvous->getRdvDateHeure()->format('d/m/Y H:i'),
'prix_tcc' => $rendezvous->getRdvTarif(),
'id' => $rendezvous->getId(),
'option_cv' => $option_cv,
'option_rdv_modifiable' => $option_rdv_modifiable,
'option_paiement_2x' => $option_paiement_2x,
'etat_paiement' => $etat_paiement,
'partenaire' => $rendezvous->getPartenaire() ? $rendezvous->getPartenaire()->getPaNom() : '',
'ligne' => $rendezvous->getLigne()->getlgnnom(),
'prestation' => $rendezVousInfo->getCentrePrestation()->getPstTypeVisite()->getTypVstLibele(),
'client_compte_id' => $rendezvous->getClientCompte() ? $rendezvous->getClientCompte()->getId() : '',
];
}
}
return $this->json($data);
// foreach ($rendezvousClient as $rendezvous) {
// if ($rendezvous->getClientLibre() !== null ) {
// $name = $rendezvous->getClientLibre()->getClNom();
// $telephone = $rendezvous->getClientLibre()->getClTelephone();
// } else {
// if ($rendezvous->getClientCompte()->getCliNomSociete()) {
// $name = $rendezvous->getClientCompte()->getCliNom() . '(' . $rendezvous->getClientCompte()->getCliNomSociete() .')' ;
// } else {
// $name = $rendezvous->getClientCompte()->getCliNom();
// }
// $telephone = $rendezvous->getClientCompte()->getCliTelephone();
// }
// foreach ($rendezvous->getRendezVousInfos() as $rendezVousInfo) {
// $data[] = [
// 'name' => $name,
// 'telephone' => $telephone,
// 'immat' => $rendezVousInfo->getVehicule()->getRdvVhcImmatriculation(),
// 'date_rdv' => $rendezvous->getRdvDateHeure()->format('d/m/Y H:i'),
// 'ligne' => $rendezvous->getLigne()->getlgnnom(),
// 'prestation' => $rendezVousInfo->getCentrePrestation()->getPstTypeVisite()->getTypVstLibele(),
// 'client_compte_id' => $rendezvous->getClientCompte() ? $rendezvous->getClientCompte()->getId() : ''
// ];
// }
// }
// return $this->json($data);
}
/**
* @Route("admin/get_promotion", name="get_promotion")
*/
public function getPromotion()
{
$permissionResult = $this->checkPermissionAdmin("lire", "calendrier");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
$promotions = $this->em->getRepository(Promotion::class)->findby(['centre_groupe' => $this->id]);
$arrayPromotion = array();
foreach ($promotions as $promotion) {
$arrayPromotion[] = [
'promotion_id' => $promotion->getId(),
'promotion_name' => $promotion->getPrmNom(),
];
}
return new JsonResponse($arrayPromotion);
}
/**
* @Route("admin/get_promotion_recurrence_info", name="get_promotion_recurrence_info")
*/
public function getPromotionRecurrenceInfo(Request $request)
{
$permissionResult = $this->checkPermissionAdmin("lire", "calendrier");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
$creneaux = $this->em->getrepository(PromotionCreneau::class)->findBy(['recurrence' => $request->get('recurrence_id')]);
if (empty($creneaux)) {
return new JsonResponse(null, 404);
}
$dates = array_map(fn($c) => $c->getPrmCreDebut(), $creneaux);
$dateDebut = min($dates)->format('Y-m-d');
$dateFin = max($dates)->format('Y-m-d');
$jours = array_values(array_unique(array_map(function ($c) {
$n = (int) $c->getPrmCreDebut()->format('N');
return $n === 7 ? 0 : $n;
}, $creneaux)));
$first = $creneaux[0];
return new JsonResponse([
'date_debut' => $dateDebut,
'date_fin' => $dateFin,
'heure_debut' => $first->getPrmCreDebut()->format('H:i'),
'heure_fin' => $first->getPrmCreFin()->format('H:i'),
'jours' => $jours,
]);
}
/**
* @Route("/admin/promotion_creneau_add", name="promotion_creneau_add")
*/
public function AddPromotioncCreneau(Request $request, ObjectManager $manager)
{
$permissionResult = $this->checkPermissionAdmin("ecrire", "calendrier");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
$promotion = $this->em->getrepository(Promotion::class)->find($request->get('promotion_id'));
$promotionCreneauId = $request->get('promotion_creneau_id');
if ($promotionCreneauId !== '' && $promotionCreneauId !== null) {
// Modification : ne touche pas les créneaux passés, met à jour/recrée uniquement les futurs
$promotionCreneau = $this->em->getrepository(PromotionCreneau::class)->find($promotionCreneauId);
$promotionRecurrence = $promotionCreneau->getRecurrence();
$today = new DateTime('today');
$allCreneaux = $promotionRecurrence
? $this->em->getrepository(PromotionCreneau::class)->findBy(['recurrence' => $promotionRecurrence])
: [$promotionCreneau];
$from = max(new DateTime($request->get('dateDebutPromotion')), $today);
$to = (new DateTime($request->get('dateFinPromotion')))->modify('+ 1 day');
$newDates = [];
foreach (new DatePeriod($from, DateInterval::createFromDateString('1 day'), $to) as $day) {
if (in_array($day->format('N'), $request->get('joursRecurrences'))) {
$newDates[$day->format('Y-m-d')] = true;
}
}
$existingFutureByDate = [];
foreach ($allCreneaux as $creneau) {
if ($creneau->getPrmCreDebut() >= $today) {
$existingFutureByDate[$creneau->getPrmCreDebut()->format('Y-m-d')] = $creneau;
}
}
foreach ($existingFutureByDate as $date => $creneau) {
if (isset($newDates[$date])) {
$creneau->setPromotion($promotion);
$creneau->setPrmCreDebut(new DateTime($date . ' ' . $request->get('hDebutPromotion')));
$creneau->setPrmCreFin(new DateTime($date . ' ' . $request->get('hFinPromotion')));
$creneau->setPrmCreDyn1($request->get('addPromoDynHeu1') ?: null);
$creneau->setPrmCreDyn2($request->get('addPromoDynHeu2') ?: null);
$creneau->setPrmCreDyn3($request->get('addPromoDynHeu3') ?: null);
$creneau->setPrmCrePrixDyn1($request->get('addPromoDynPrix1') ?: null);
$creneau->setPrmCrePrixDyn2($request->get('addPromoDynPrix2') ?: null);
$creneau->setPrmCrePrixDyn3($request->get('addPromoDynPrix3') ?: null);
$manager->persist($creneau);
} else {
$manager->remove($creneau);
}
}
foreach ($newDates as $date => $_) {
if (!isset($existingFutureByDate[$date])) {
$newCreneau = new PromotionCreneau;
$newCreneau->setPromotion($promotion);
$newCreneau->setRecurrence($promotionRecurrence);
$newCreneau->setPrmCreDebut(new DateTime($date . ' ' . $request->get('hDebutPromotion')));
$newCreneau->setPrmCreFin(new DateTime($date . ' ' . $request->get('hFinPromotion')));
$newCreneau->setPrmCreDyn1($request->get('addPromoDynHeu1') ?: null);
$newCreneau->setPrmCreDyn2($request->get('addPromoDynHeu2') ?: null);
$newCreneau->setPrmCreDyn3($request->get('addPromoDynHeu3') ?: null);
$newCreneau->setPrmCrePrixDyn1($request->get('addPromoDynPrix1') ?: null);
$newCreneau->setPrmCrePrixDyn2($request->get('addPromoDynPrix2') ?: null);
$newCreneau->setPrmCrePrixDyn3($request->get('addPromoDynPrix3') ?: null);
$manager->persist($newCreneau);
}
}
if ($promotionRecurrence) {
$manager->persist($promotionRecurrence);
}
} else {
// Création : génère un créneau par jour correspondant dans la plage
$promotionRecurrence = new PromotionRecurrence;
$from = new DateTime($request->get('dateDebutPromotion'));
$to = (new DateTime($request->get('dateFinPromotion')))->modify('+ 1 day');
$days = new DatePeriod($from, DateInterval::createFromDateString('1 day'), $to);
foreach ($days as $day) {
if (in_array($day->format('N'), $request->get('joursRecurrences'))) {
$dateDebut = $day->format('Y-m-d') . ' ' . $request->get('hDebutPromotion');
$dateFin = $day->format('Y-m-d') . ' ' . $request->get('hFinPromotion');
$promotionCreneau = new PromotionCreneau;
$promotionCreneau->setPromotion($promotion);
$promotionCreneau->setRecurrence($promotionRecurrence);
$promotionCreneau->setPrmCreDebut(new DateTime($dateDebut));
$promotionCreneau->setPrmCreFin(new DateTime($dateFin));
$promotionCreneau->setPrmCreDyn1($request->get('addPromoDynHeu1') ?: null);
$promotionCreneau->setPrmCreDyn2($request->get('addPromoDynHeu2') ?: null);
$promotionCreneau->setPrmCreDyn3($request->get('addPromoDynHeu3') ?: null);
$promotionCreneau->setPrmCrePrixDyn1($request->get('addPromoDynPrix1') ?: null);
$promotionCreneau->setPrmCrePrixDyn2($request->get('addPromoDynPrix2') ?: null);
$promotionCreneau->setPrmCrePrixDyn3($request->get('addPromoDynPrix3') ?: null);
$manager->persist($promotionCreneau);
}
}
$manager->persist($promotionRecurrence);
}
$manager->flush();
return new JsonResponse($promotionRecurrence);
}
/**
* @Route("admin/promotion_creneau_remove", name="promotion_creneau_remove")
*/
public function RemovePromotionCreneau(Request $request, ObjectManager $manager)
{
$permissionResult = $this->checkPermissionAdmin("supp", "calendrier");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
if ($request->get('promotion_creneau_id')) {
$promotionCreneau = $this->em->getrepository(PromotionCreneau::class)->find($request->get('promotion_creneau_id'));
$manager->remove($promotionCreneau);
} else if ($request->get('promotion_recurrence_id')) {
$promotionCreneaus = $this->em->getrepository(PromotionCreneau::class)->findBy(['recurrence' => $request->get('promotion_recurrence_id')]);
$promotionRecurrence = $this->em->getrepository(PromotionRecurrence::class)->find($request->get('promotion_recurrence_id'));
foreach ($promotionCreneaus as $promotionCreneau) {
$manager->remove($promotionCreneau);
}
$manager->remove($promotionRecurrence);
}
$manager->flush();
return new Response('ok');
}
/**
* @Route("admin/promotion_creneau_drag_and_drop", name="promotion_creneau_drag_and_drop")
*/
public function DragAndDropPromotionCreneau(Request $request, ObjectManager $manager)
{
$permissionResult = $this->checkPermissionAdmin("ecrire", "calendrier");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
$promotionCreneau = $this->em->getrepository(PromotionCreneau::class)->find($request->get('promotion_creneau_id'));
$promotionCreneau->setPrmCreDebut(new Datetime($request->get('start')));
$promotionCreneau->setPrmCreFin(new Datetime($request->get('end')));
$manager->persist($promotionCreneau);
$manager->flush();
return new Response('ok');
}
/**
* @Route("admin/rdv_rappel_sms", name="rdv_rappel_sms")
*/
public function RdvRappelSms(Request $request)
{
$permissionResult = $this->checkPermissionAdmin("ecrire", "calendrier");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
$rendezvous = $this->em->getrepository(Rendezvous::class)->find($request->get('rendezvous_id'));
if (empty($request->get('telephone'))) {
return new JsonResponse(['error' => 'Aucun numéro de téléphone est affilié à ce rdv.'], 400);
}
$this->apiController->EnvoiSmsRdvRappel($rendezvous, $request->get('telephone'));
return new Response('ok');
}
/**
* @Route("admin/rdv_rappel_email", name="rdv_rappel_email")
*/
public function RdvRappelEmail(Request $request)
{
$permissionResult = $this->checkPermissionAdmin("ecrire", "calendrier");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
$rendezvous = $this->em->getrepository(Rendezvous::class)->find($request->get('rendezvous_id'));
$return = $this->apiController->envoi_email_confirmation_client($rendezvous);
return $return;
}
/**
* @Route("admin/rdv_rappel_email_sms", name="rdv_rappel_email_sms")
*/
public function RdvRappelEmailSms(Request $request)
{
$permissionResult = $this->checkPermissionAdmin("ecrire", "calendrier");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
$rendezvous = $this->em->getrepository(Rendezvous::class)->find($request->get('rendezvous_id'));
$return = $this->apiController->envoi_email_confirmation_client($rendezvous);
if ($return->getStatusCode() != 200) {
$errorData = json_decode($return->getContent(), true);
if (empty($request->get('telephone'))) {
return new JsonResponse(['error' => 'Aucun numéro de téléphone et email est affilié à ce rdv.'], 400);
} else {
$this->apiController->EnvoiSmsRdvRappel($rendezvous, $request->get('telephone'));
return new JsonResponse(['error' => 'SMS envoyé mais aucun email est affilié à ce rdv.'], 400);
}
return new JsonResponse(['error' => $errorData['error']], $return->getStatusCode());
}
if (empty($request->get('telephone'))) {
return new JsonResponse(['error' => 'Email envoyé mais aucun numéro de téléphone est affilié à ce rdv.'], 400);
}
$this->apiController->EnvoiSmsRdvRappel($rendezvous, $request->get('telephone'));
return new Response('ok');
}
/**
* @Route("admin/rdv_avis_google_sms", name="rdv_avis_google_sms")
*/
public function RdvAvisGoogleSms(Request $request)
{
$permissionResult = $this->checkPermissionAdmin("ecrire", "calendrier");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
$rendezvous = $this->em->getRepository(Rendezvous::class)->find($request->get('rendezvous_id'));
if (!$rendezvous) {
return new JsonResponse(['error' => 'Rendez-vous introuvable.'], 404);
}
$telephone = $request->get('telephone');
if (empty($telephone)) {
return new JsonResponse(['error' => 'Aucun numéro de téléphone affilié à ce rdv.'], 400);
}
try {
$this->apiController->EnvoiSmsAvisGoogleCommand($rendezvous, $telephone);
} catch (\Throwable $e) {
return new JsonResponse(['error' => $e->getMessage()], 400);
}
return new Response('ok');
}
/**
* @Route("admin/rdv_avis_google_email", name="rdv_avis_google_email")
*/
public function RdvAvisGoogleEmail(Request $request)
{
$permissionResult = $this->checkPermissionAdmin("ecrire", "calendrier");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
$rendezvous = $this->em->getRepository(Rendezvous::class)->find($request->get('rendezvous_id'));
if (!$rendezvous) {
return new JsonResponse(['error' => 'Rendez-vous introuvable.'], 404);
}
try {
$result = $this->apiController->EnvoiEmailAvisGoogle($rendezvous);
if (!$result) {
return new JsonResponse(['error' => 'Aucune addresse mail affilié à ce rdv.'], 400);
}
} catch (\Throwable $e) {
return new JsonResponse(['error' => $e->getMessage()], 400);
}
return new Response('ok');
}
/**
* @Route("admin/client_search_name", name="client_search_name", methods={"GET"})
*/
public function searchClientName(Request $request)
{
$permissionResult = $this->checkPermissionAdmin("lire", "calendrier");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
$name = $request->get('query');
$centreType = $request->get('centreType');
if (!$centreType) {
return new JsonResponse([]);
}
if (strlen($name) < 3) {
return new JsonResponse([]);
}
$clientsRdv = $this->em->getrepository(Rendezvous::class)->findByCentregoupeidAndNameLike($this->id, $name, $centreType);
return new JsonResponse($clientsRdv);
}
/**
* @Route("admin/client_search_phone", name="client_search_phone", methods={"GET"})
*/
public function searchClientPhone(Request $request)
{
$permissionResult = $this->checkPermissionAdmin("lire", "calendrier");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
$telephone = $request->query->get('query');
$centreType = $request->get('centreType');
if (!$centreType) {
return new JsonResponse([]);
}
if (strlen($telephone) < 4) {
return new JsonResponse([]);
}
$clientsRdv = $this->em->getrepository(Rendezvous::class)->findByCentregoupeidAndPhoneLike($this->id, $telephone, $centreType);
return new JsonResponse($clientsRdv);
}
/**
* @Route("admin/client_search_immat", name="client_search_immat", methods={"GET"})
*/
public function searchClientImmat(Request $request)
{
$permissionResult = $this->checkPermissionAdmin("lire", "calendrier");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
$immat = $request->query->get('query');
if (strlen($immat) < 2) {
return new JsonResponse([]);
}
$clientsRdv = $this->em->getrepository(Rendezvous::class)->findByCentregoupeidAndImmatLike($this->id, $immat);
return new JsonResponse($clientsRdv);
}
// Gestion des Fonctions ----------------------------------------------------------
/**
* @Route("/admin/fonction", name="fonction")
*/
public function Fonction(Request $request, PaginatorInterface $paginator): Response
{
$allpermission = $this->checkAllPermissionAdmin("fonction");
if (!$allpermission || !$allpermission['lire']) {
$this->addFlash('error', 'Impossible, vous n\'avez pas accés à cette page');
return $this->redirectToRoute('admin_erreur');
}
$data_fonction = $this->cache->get('fonction' . $this->id, function () {
$data_fonction = $this->em->getrepository(CentreFonction::class)->findBy(['CentreGroupe' => $this->id]);
return $data_fonction;
});
$data_page = $this->cache->get('page' . $this->id, function () {
$data_page = $this->em->getrepository(Page::class)->findAll();
return $data_page;
});
$fonctions = $paginator->paginate(
$data_fonction, // Requête contenant les données à paginer (ici nos fonctions)
$request->query->getInt('page', 1), // Numéro de la page en cours, passé dans l'URL, 1 si aucune page
10 // Nombre de résultats par page
);
return $this->render('admin/fonction_view.html.twig', [
'fonctions' => $fonctions,
'pages' => $data_page,
'allpermission' => $allpermission,
]);
}
/**
* @Route("/admin/fonction_add", name="fonction_add")
*/
public function AddFonction(Request $request, ObjectManager $manager)
{
$permissionResult = $this->checkPermissionAdmin("ecrire", "fonction");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
$centre_groupe = $this->em->getrepository(CentreGroupe::class)->find($this->id);
$centre_fonction = new CentreFonction();
$centre_fonction->setCentreGroupe($centre_groupe);
$centre_fonction->setFctNom($request->get('nom'));
$manager->persist($centre_fonction);
// Récupérez toutes les pages
$data_page = $this->em->getRepository(Page::class)->findAll();
foreach ($data_page as $page) {
$lire = $request->get('Lire(' . $page->getPgeRoute() . ')') ? true : false;
$ecrire = $request->get('ecrire(' . $page->getPgeRoute() . ')') ? true : false;
$suppression = $request->get('supp(' . $page->getPgeRoute() . ')') ? true : false;
if ($lire || $ecrire || $suppression) { // Si l'un des droits est cochée pour cette page
$droit = new Droit();
// $droit->setDrtDroit();
$droit->setDrtLire($lire);
$droit->setDrtEcrire($ecrire);
$droit->setDrtSuppression($suppression);
$droit->setDrtPage($page);
$droit->setDrtFonction($centre_fonction);
$manager->persist($droit);
}
}
$manager->flush();
$this->cache->delete('fonction' . $this->id);
return $this->redirect($request->headers->get('referer'));
}
/**
* @Route("/admin/fonction_delete/{id}", name="fonction_delete")
*/
public function deleteFonction(CentreFonction $centreFonction, ObjectManager $manager)
{
$permissionResult = $this->checkPermissionAdmin("supp", "fonction");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
if ($centreFonction->getCentreGroupe()->getId() !== $this->id) {
return new Response('cannot_delete_fonction_another_center');
}
// Supprimer l'entité
$manager->remove($centreFonction);
$manager->flush();
$this->cache->delete('fonction' . $this->id);
// Rediriger l'utilisateur vers le type vehicule
return new Response('ok');
}
/**
* @Route("/admin/fonction_update/{id}", name="fonction_update")
*/
public function updateFonction(CentreFonction $centre_fonction, Request $request, ObjectManager $manager, SessionInterface $session)
{
$permissionResult = $this->checkPermissionAdmin("ecrire", "fonction");
if ($permissionResult instanceof RedirectResponse) {
return $permissionResult;
}
if ($centre_fonction->getCentreGroupe()->getId() !== $this->id) {
$this->addFlash('error', "Impossible de mettre à jour le type de visite car il n'est pas liée à votre centre.");
return $this->redirectToRoute('fonction');
}
$centre_fonction->setFctNom($request->get('nom'));
// permet de verifier si il y a une nouvelle page et si oui alors creer un nouveau droit
$data_page = $this->em->getRepository(Page::class)->findAll();
$existingDroits = $centre_fonction->getDroits();
$pagesWithDroitsIds = [];
foreach ($existingDroits as $droit) {
$pagesWithDroitsIds[] = $droit->getDrtPage()->getId();
}
$allPageIds = [];
foreach ($data_page as $page) {
$allPageIds[] = $page->getId();
}
$pagesWithoutDroitsIds = array_diff($allPageIds, $pagesWithDroitsIds);
// Convertir les IDs des pages sans droits en objets Page
$pagesWithoutDroits = [];
foreach ($data_page as $page) {
if (in_array($page->getId(), $pagesWithoutDroitsIds)) {
$pagesWithoutDroits[] = $page;
}
}
foreach ($existingDroits as $droit) {
$page = $droit->getDrtPage();
$droit->setDrtLire($request->get('Lire(' . $page->getPgeRoute() . ')') ? true : false);
$droit->setDrtEcrire($request->get('ecrire(' . $page->getPgeRoute() . ')') ? true : false);
$droit->setDrtSuppression($request->get('supp(' . $page->getPgeRoute() . ')') ? true : false);
$manager->persist($droit);
}
foreach ($pagesWithoutDroits as $page) {
$newDroit = new Droit();
$newDroit->setDrtPage($page);
$newDroit->setDrtLire($request->get('Lire(' . $page->getPgeRoute() . ')') ? true : false);
$newDroit->setDrtEcrire($request->get('ecrire(' . $page->getPgeRoute() . ')') ? true : false);
$newDroit->setDrtSuppression($request->get('supp(' . $page->getPgeRoute() . ')') ? true : false);
$centre_fonction->addDroit($newDroit);
$manager->persist($newDroit);
}
$manager->persist($centre_fonction);
$manager->flush();
$user = $this->getUser();
$droits = $this->accessService->getRightsForUserOnPage($user, $this->id);
$session->set('droits' . $user->getId(), $droits);
$this->cache->delete('fonction' . $this->id);
return $this->redirectToRoute('fonction');
}
/**
* @Route("/admin/fonction_droits/{id}", name="get_fonction_droits")
*/
public function getFonctionDroits(CentreFonction $centre_fonction)
{
$droits = [];
foreach ($centre_fonction->getDroits() as $droit) {
$droits[] = [
'page' => $droit->getDrtPage()->getPgeRoute(),
'lire' => $droit->isDrtLire(),
'ecrire' => $droit->isDrtEcrire(),
'supp' => $droit->isDrtSuppression(),
];
}
return new JsonResponse($droits);
}
/**
* @Route("/vide_cache_centre_groupe/{id}", name="vide_cache_centre_groupe")
*/
public function vide_cache_centre_groupe($id = '')
{
//$CentreGroupe = $request->get('id');
if ($id == '') {
$id = $this->id;
}
$this->cache->delete('Centre_groupe_' . $id);
$CentreGroupe = $this->cache->get('Centre_groupe_' . $id, function (ItemInterface $item) use ($id) {
$item->expiresAfter(DateInterval::createFromDateString('12 hour'));
$query = $this->em->createQueryBuilder()
->select('cg')
->from(CentreGroupe::class, 'cg')
->where('cg.id = :id')
->setParameter('id', $id)
->getQuery();
$CentreGroupe = $query->getSingleResult();
if ($CentreGroupe instanceof Proxy && !$CentreGroupe->__isInitialized()) {
$this->em->initializeObject($CentreGroupe);
}
return $CentreGroupe;
});
$this->cache->delete('ParametreCentre_groupe_' . $id);
$ParametreCentreGroupe = $this->cache->get('ParametreCentre_groupe_' . $id, function (ItemInterface $item) use ($id) {
$item->expiresAfter(DateInterval::createFromDateString('12 hour'));
$ParametreCentreGroupe = $this->em->getrepository(ParametreCentreGroupe::class)->findOneBy(['centre_groupe' => $id]);
return $ParametreCentreGroupe;
});
$this->cache->delete('CentrePrestation_centre_groupe_' . $id);
$Prestations = $this->cache->get('CentrePrestation_centre_groupe_'.$id, function (ItemInterface $item) use ($id) {
$item->expiresAfter(DateInterval::createFromDateString('12 hour'));
$Prestations = $this->em->getrepository(CentrePrestation::class)->findBy(
array('centre_groupe' => $id, 'pst_actif' => true, 'pst_afficher' => true),
array('pst_ordre' => 'asc')
);
return $Prestations;
});
$this->cache->delete('centre_groupe' . $id);
$data_centre_groupes = $this->cache->get('centre_groupe' . $id, function () use ($id) {
return $this->em->getrepository(CentreGroupe::class)->find($id);
});
if ($data_centre_groupes->getCgGerant()) {
$this->cache->delete('info_sommaire_' . $data_centre_groupes->getCgGerant()->getId());
}
// $this->cache->delete('CentrePrestation_centre_groupe_' . $id);
foreach ($this->em->getRepository(Centre::class)->findBy(['centre_groupe' => $id]) as $key => $centre) {
$centre_id = $centre->getId();
$this->cache->delete('Centre_' . $centre_id);
$data_centre = $this->cache->get('Centre_' . $centre->getId(), function () use ($centre_id) {
return $this->em->getRepository(Centre::class)->find($centre_id);
});
$this->cache->delete('Horaire_' . $centre_id);
$data_Horaire_centre = $this->cache->get('Horaire_' . $centre_id, function () use ($centre_id) {
return $this->em->getRepository(CentreHoraire::class)->getHoraires($centre_id);
});
$this->cache->delete('Ligne_' . $id . '_' . $centre->getCentreType()->getId());
$data_Ligne = $this->cache->get('Ligne_' . $id . '_' . $centre->getCentreType()->getId(), function () use ($id, $centre) {
return $this->em->getRepository(Ligne::class)->findLigneAndHoraireByTypeCentre($id, $centre->getCentreType()->getId());
});
}
$this->cache->delete('prestation' . $id);
$data_prestations = $this->cache->get('prestation' . $id, function () use ($id) {
return $this->em->getrepository(CentrePrestation::class)->findByCentreGroupe($id);
});
$this->cache->delete('prestation_actif' . $id);
$data_prestations = $this->cache->get('prestation_actif' . $id, function () use ($id) {
return $this->em->getrepository(CentrePrestation::class)->findActifByCentreGroupe($id);
});
$data_prestations = $this->em->getrepository(CentrePrestation::class)->findByCentreGroupe($id);
/** @var CentrePrestation $prestation */
foreach ($data_prestations as $prestation) {
$this->cache->delete('Prestation' . $prestation->getId());
$data_prestations = $this->cache->get('Prestation' . $prestation->getId(), function () use ($prestation) {
return $this->em->getrepository(CentrePrestation::class)->find($prestation->getId());
});
}
$this->cache->delete('data_partenaires' . $id);
$data_partenaires = $this->cache->get('data_partenaires' . $id, function () use ($id) {
return $this->em->getRepository(Partenaire::class)->findByCentreGroupeId($id);
});
// Récupération de l'url
if (empty($_SERVER['HTTP_HOST'])) {
return new response('pas de server http host trouvé');
}
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https' : 'http';
$host = $_SERVER['HTTP_HOST'];
$currentUrl = $protocol . '://' . $host;
// Verifie si l'url est different du site de test (serv 150)
if ($currentUrl !== 'https://mercureweb2.autobilan-systems.com') {
// Si oui alors supprime le cache sur le site de test (serv 150)
$response = file_get_contents('https://mercureweb2.autobilan-systems.com/vide_cache_centre_groupe/' . $id) ;
}
return new response('ok');
}
// Gestion de la page erreur ------------------------------------------------------
/**
* @Route("/admin/admin_erreur", name="admin_erreur")
*/
public function admin_erreur()
{
return $this->render('admin/admin_erreur.html.twig', []);
}
// Gestion des mots de passe
/**
* @Route("/mot_de_passe_oublie_admin", name="mot_de_passe_oublie_admin")
*/
public function mot_de_passe_oublie_admin(Request $request, MailerInterface $mailer)
{
$useEmailCentre = false;
if (filter_var($request->get('email_oublie'), FILTER_VALIDATE_EMAIL)) {
$utillisateur = $this->em->getRepository(Utilisateur::class)->findOneBy(['utl_email' => $request->get('email_oublie')]);
$emailUser = $utillisateur->getUtlEmail();
} else {
$utillisateur = $this->em->getRepository(Utilisateur::class)->findOneBy(['utl_username' => $request->get('email_oublie')]);
if ($utillisateur->getUtlEmail()) {
$emailUser = $utillisateur->getUtlEmail();
} else {
$emailsCentres = $this->em->getRepository(Centre::class)->findEmailsByCentreGroupe($utillisateur->getCentreGroupe());
if ($emailsCentres) {
foreach ($emailsCentres as $emailCentre) {
if ($emailCentre['ctr_email']) {
$emailUser = $emailCentre['ctr_email'];
$useEmailCentre = true;
break;
}
}
} else {
$this->addFlash("error", "L'adresse email associé a l'identifiant est introuvable, veuillez réessayer ou appeler le service client si le problème persiste.");
return $this->redirectToRoute('app_login_admin');
}
}
}
if ($utillisateur) {
$name = $utillisateur->getUtlNom() . ' ' . $utillisateur->getUtlPrenom();
$email = $this->decrypt_encrypt("encrypt", $emailUser);
$id = $this->decrypt_encrypt("encrypt", $utillisateur->getid());
// return $this->render('email/mot_de_passe_oublie.html.twig', array('name' => $name, 'email' => $email, 'id' => $id));
$email = (new Email())
->from('noreply@notification-abs.com')
->to($emailUser)
// ->to('h.madi@autobilan-systems.com')
//->ReplyTo($rdv->getCentre()->getCtrEmail())
->subject('Confirmation de votre réservation')
->html($this->renderView('email/mot_de_passe_oublie_admin.html.twig', ['name' => $name, 'email' => $email, 'id' => $id]));
$mailer->send($email);
if ($useEmailCentre) {
$this->addFlash('success', "Un courrier a été envoyé sur la boite email du centre.");
} else {
$this->addFlash('success', "Un courrier a été envoyé sur votre boite email.");
}
return $this->redirectToRoute('app_login_admin');
} else {
$this->addFlash("error", "L'adresse email est introuvable, appeler le service client si le problème persiste.");
return $this->redirectToRoute('app_login_admin');
}
$this->addFlash("error", "L'adresse email ou l'identifiant est introuvable, veuillez réessayer ou appeler le service client si le problème persiste.");
return $this->redirectToRoute('app_login_admin');
}
/**
* @Route("/retour_motdepasse_admin", name="retour_motdepasse_admin")
*/
public function retour_motdepasse_admin(Request $request, ObjectManager $manager)
{
if ($request->request->get('mdp1') and $request->request->get('id')) {
if ($request->request->get('mdp1') !== $request->request->get('mdp2')) {
$this->addFlash("error", "Une erreur s'est produit la confirmation de mot de passe n'est pas correcte.");
return new JsonResponse(['redirectUrl' => $this->generateUrl('app_login_admin')]);
}
$utilisateur = $this->em->getRepository(Utilisateur::class)->find($request->request->get('id'));
$hashedPassword = $this->passwordHasher->hashPassword(
$utilisateur,
$request->get('mdp1')
);
$utilisateur->setUtlPassword($hashedPassword);
$manager->persist($utilisateur);
$manager->flush();
$this->addFlash("success", "Le mail à bien étaient réinitialisé.");
return new JsonResponse(['redirectUrl' => $this->generateUrl('app_login_admin')]);
}
$email = $this->decrypt_encrypt("decrypt", $request->query->get('email'));
$id = $this->decrypt_encrypt("decrypt", $request->query->get('id'));
return $this->render('security/update_password.html.twig', [
'id' => $id,
'email' => $email,
]);
}
/**
* @Route("/admin/findSmsDoublon/{id}", name="findSmsDoublon")
*/
public function findSmsDoublon(int $id, Request $request, ObjectManager $manager)
{
if (!$this->getUser()) {
return new JsonResponse('Acces Non authorise');
}
$user = $this->getUser();
$centres = [];
$listSms = [];
if ($user->getUtlUsername() == 'AbsSuperAdmin') {
$repositoryCentreGroupe = $this->em->getRepository(CentreGroupe::class);
$centreGroupe = $repositoryCentreGroupe->find($id);
$repositoryCentre = $this->em->getRepository(Centre::class);
$repositorySms = $this->em->getRepository(Sms::class);
$centres = $repositoryCentre->findBy(['centre_groupe' => $centreGroupe]);
$date = new DateTime('2024-02-01');
foreach ($centres as $centre) {
$listSmsTemp = $repositorySms->findSmsByDate($centre, $date);
$listSms = array_merge($listSmsTemp, $listSms);
}
$numbers = array_reduce(
$listSms,
function($carry,Sms $value) {
if( !isset($carry[$value->getSmsTelephone()])){
$carry[$value->getSmsTelephone()] = 0;
}
$carry[$value->getSmsTelephone()]++;
return $carry;
},
[]
);
$uniques = array_filter($numbers,function($n) {return $n == 1;});
$result = array_filter(
$listSms,
function(Sms $item) use ($uniques) {
return !isset($uniques[$item->getSmsTelephone()]);
});
$sortSms = [];
/** @var Sms $sms */
foreach ($result as $sms) {
$date = $sms->getSmsDate()->format('Y-m-d H:i');
$sbstr = substr($date, 0, 16);
$sortSms[$sms->getSmsTelephone().$sbstr][] = $sms;
}
$newSortSms = [];
foreach ($sortSms as $key => $smss) {
$numbers = array_reduce(
$smss,
function($carry,Sms $value) {
$date = $value->getSmsDate()->format('Y-m-d H:i');
$sbstr = substr($date, 0, 16);
if( !isset($carry[$sbstr])){
$carry[$sbstr] = 0;
}
$carry[$sbstr]++;
return $carry;
},
[]
);
$uniques = array_filter($numbers,function($n) {return $n == 1;});
$result2 = array_filter(
$smss,
function(Sms $item) use ($uniques) {
$date = $item->getSmsDate()->format('Y-m-d H:i');
$sbstr = substr($date, 0, 16);
return !isset($uniques[$sbstr]);
});
$newSortSms[$key] = $result2;
}
$finalArr = [];
foreach ($newSortSms as $key => $sms) {
if ($sms != []) {
$finalArr[$key] = $sms;
}
}
foreach ($finalArr as $key => $arr) {
unset($finalArr[$key][0]);
}
return $this->render('admin/doublonSms.html.twig', [
'smss' => $finalArr,
]);
}
return new JsonResponse('ko');
}
}