<?php
namespace App\Controller;
use App\Entity\AccessCentre;
use App\Entity\Audio;
use App\Entity\Audiometrie\Setting;
use App\Entity\Factures;
use App\Entity\AudioCentre;
use App\Entity\AudioDiplome;
use App\Entity\AudioMotif;
use App\Entity\AudioSpecialite;
use App\Entity\CenterImported;
use App\Entity\Centre;
use App\Entity\CentreMutuelle;
use App\Entity\SpecificSubscription;
use App\Entity\CentrePrestation;
use App\Entity\CentreTier;
use App\Entity\CenterImage;
use App\Entity\Client;
use App\Entity\Diplome;
use App\Entity\ContractCategory;
use App\Entity\ExperiencePro;
use App\Entity\Lieu;
use App\Entity\Ville;
use App\Entity\LieuPrestation;
use App\Service\Billing\BillingCdaService;
use App\Entity\Motif;
use App\Entity\Station;
use App\Entity\Partner\PartnerSubscription;
use App\Entity\Mutuelle;
use App\Service\Payment\SubscriptionService;
use App\Service\Subscription\StripeService;
use App\Service\Order\OrderPatient;
use App\Entity\Plan;
use App\Entity\Prestation;
use App\Entity\Specialite;
use App\Entity\Tier;
use App\Entity\Payment\Subscription;
use App\Entity\ClientTemp;
use App\Entity\Token;
use App\Entity\Rdv;
use App\Service\FileUploader;
use App\Service\PublicFunction;
use DateInterval;
use DateTimeZone;
use App\Entity\Audio\Role;
use Psr\Log\LoggerInterface;
use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use DateTime;
use Symfony\Contracts\HttpClient\HttpClientInterface;
use Symfony\Component\String\Slugger\SluggerInterface;
use App\Service\Notification\EmailNotificationDemoService;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
class CentreController extends AbstractController
{
private $logger;
private $slugger;
private $orderPatient;
private $emailNotificationDemoService;
public function __construct(LoggerInterface $logger, OrderPatient $orderPatient, EmailNotificationDemoService $emailNotificationDemoService, HttpClientInterface $client, SluggerInterface $slugger)
{
$this->logger = $logger;
$this->client = $client;
$this->slugger = $slugger;
$this->orderPatient = $orderPatient;
$this->emailNotificationDemoService = $emailNotificationDemoService;
}
/**
* @Route("/centre/{id}", name="deleteCentreByID", methods={"DELETE"})
*/
public function deleteCentreByID(Request $request, Centre $centre)
{
if (!$request->query->get('token'))
return new Response(json_encode([
"message" => "Pas de token n'a été spécifié",
"status" => 401,
]), 401);
$entityManager = $this->getDoctrine()->getManager();
/** @var Token */
$token = $this->getDoctrine()
->getRepository(Token::class)
->findOneBy(['token' => $request->query->get('token'), 'id_audio' => $centre->getIdGerant()]);
if (!$token)
return new Response(json_encode([
"message" => "Pas de token trouvé dans la base de données. Veuillez vous reconnecter.",
"status" => 404,
]), 404);
// get token age
$dateDiff = $token->getCreationDate()->diff(new DateTime());
// if the token if older than 7 days
if ($dateDiff->d > 7) {
$entityManager->remove($token);
$entityManager->flush();
return $this->json([
'message' => 'Ce token est obselète. Veuillez vous reconnecter.',
'path' => 'src/Controller/ClientController.php',
"status" => 401
], 401);
}
$accessCentre = $this->getDoctrine()->getRepository(AccessCentre::class)
->findBy(array('id_centre' => $centre->getId()));
$centerParent = $this->getDoctrine()
->getRepository(Centre::class)
->findOneBy(['id_gerant' => $centre->getIdGerant()]);
$meetings = $this->getDoctrine()
->getRepository(Rdv::class)
->findBy(['id_centre' => $centre->getId()]);
$clients = $this->getDoctrine()
->getRepository(ClientTemp::class)
->findBy(['id_centre' => $centre->getId()]);
$mutuels = $this->getDoctrine()
->getRepository(CentreMutuelle::class)
->findBy(['id_centre' => $centre->getId()]);
/* $tiers = $this->getDoctrine()
->getRepository(CentreTier::class)
->findBy(['id_centre' => $centre->getId()]);*/
$prestations = $this->getDoctrine()
->getRepository(CentrePrestation::class)
->findBy(['id_centre' => $centre->getId()]);
$entityManager = $this->getDoctrine()->getManager();
// return $this->json(["id" => $tiers]);
/* foreach ($tiers as $tier) {
$entityManager->remove($tier);
}*/
foreach ($meetings as $meeting) {
$entityManager->remove($meeting);
}
foreach ($mutuels as $mutuel) {
$entityManager->remove($mutuel);
}
foreach ($prestations as $prestation) {
$entityManager->remove($prestation);
}
foreach ($accessCentre as $access) {
$entityManager->remove($access);
}
foreach ($clients as $client) {
$entityManager->remove($client);
}
foreach ($meetings as $meeting) {
$meeting->setIdCentre($centerParent);
$entityManager->persist($meeting);
}
foreach ($clients as $client) {
$client->setIdCentre($centerParent);
$entityManager->persist($client);
}
$entityManager = $this->getDoctrine()->getManager();
$audioCentres = $entityManager->getRepository(AudioCentre::class)->findOneBy(['id_centre' => $centre->getId()]);
$entityManager->remove($audioCentres);
$entityManager->remove($centre);
$entityManager->flush();
return $this->json(["id" => $centerParent->getId(), "name" => $centerParent->getName()]);
// return new Response($centre->getId() . " has been successfully deleted");
}
/**
* @Route("/centres/query", name="getCentresSearchQuery", methods={"GET","HEAD"})
*/
public function getCentresSearchQuery(Request $request): Response
{
/** @var ActivityRepository */
$activityRepo = $this->getDoctrine();
if (strlen($request->query->get('query')) == 5 && is_numeric($request->query->get('query'))) {
/** @var Centre[] */
$centres = $this->getDoctrine()->getRepository(Centre::class)
->findBy(["postale" => (int)$request->query->get('query')]);
} else {
/** @var Centre[] */
$centres = $this->getDoctrine()->getRepository(Centre::class)
->findByQuery($request->query->get('query'));
}
$result = new ArrayCollection();
foreach ($centres as $centre) {
$result->add([
"id" => $centre->getId(),
"name" => $centre->getName() . ", " . $centre->getAddress() . ", " . $centre->getPostale() . " " . $centre->getCity(),
]);
}
return new Response(json_encode([
"content" => $result->toArray(),
"status" => 200,
]));
}
/**
* @Route("/centres", name="getCentresSearch", methods={"GET","HEAD"})
*/
public function getCentresSearch(Request $request, PublicFunction $publicFunction): Response
{
// Récupérer les paramètres de la requête
// $queryParams = $request->query->all();
// // Ajouter les paramètres dans la réponse pour les afficher
// return new Response(
// json_encode([
// 'data' => $queryParams, // Afficher les paramètres de la requête
// ]),
// 200
// );
/*
/** @var ActivityRepository */
$activityRepo = $this->getDoctrine();
$date = new DateTime();
$centres = [];
$lieux = [];
$centreCoord = [];
$lieuxCoord = [];
$centreName = [];
$lieuxName = [];
setlocale(LC_TIME, 'fr_FR');
$city = $request->query->get('ville');
$name = $request->query->get('name');
$address = $request->query->get('address');
$page = $request->query->getInt('page', 1);
$limit = $request->query->get('limit'); // Number of results per page
$longitude = $request->query->get('longitude');
$latitude = $request->query->get('latitude');
/* $formattedAddress = "21,avenue du Maine,70015 Paris";
$response = $this->client->request('GET','https://maps.googleapis.com/maps/api/geocode/json', [
'query' => [
'address' => $formattedAddress,
'key' => 'AIzaSyB-w9vBKJ9IYNPevzRu4sxhfZ2O4FAPOZc'
]
]);
$data = $response->toArray();
dd($data);*/
// $request->query->get('longitude') && $request->query->get('latitude');
// dd($request->query->get('longitude'));
$repository = $this->getDoctrine()->getRepository(CenterImported::class);
$resultsImportded = $repository->findByCoordinates($name, $longitude, $latitude, $page, $limit);
// $resultsImportded = $repository->findByCityOrPostalCodeAndName($city, $name, $address, $page, $limit ,$longitude,$latitude);
$totalResults = $repository->getTotalCountByCityOrPostalCodeAndName($name, $longitude, $latitude, $page, $limit);
/* $repository = $this->getDoctrine()->getRepository(CenterImported::class);
$resultsImportded = $repository->findByCityOrPostalCodeAndName($city, $name, $address, $page, $limit);
$totalResults = $repository->getTotalCountByCityOrPostalCodeAndName($city, $name, $address);*/
if (is_numeric($totalResults) && is_numeric($limit) && $limit !== 0 && $totalResults !== 0) {
$totalPages = ceil($totalResults / $limit);
} elseif ($totalResults === 0) {
$totalPages = 0;
} else {
$totalPages = 1;
}
// dd( ceil($totalResults / $limit));
$centerImportedArray = array_map(function ($session) {
return [
"id" => $session->getId(),
"nom" => $session->getNom(),
"slug" => $session->getSlug(),
"adresse" => $session->getAdresse(),
"latitude" => $session->getLatitude(),
"longitude" => $session->getLongitude(),
"codePostal" => $session->getcodePostal(),
"ville" => $session->getVille(),
];
}, $resultsImportded);
//dd($centerImportedArray);
//if the user searched by coordinates
if ($request->query->get('address')) {
/** @var Centre[] */
$centreCoord = $this->getDoctrine()->getRepository(Centre::class)
->findByAdress($request->query->get('address'));
}
if ($request->query->get('longitude') && $request->query->get('latitude')) {
/** @var Centre[] */
$centreCoord = $this->getDoctrine()->getRepository(Centre::class)
->findByCoordonates($request->query->get('longitude'), $request->query->get('latitude'), $page, $limit);
/** @var Lieu[] */
$lieuxCoord = $this->getDoctrine()->getRepository(Lieu::class)
->findByCoordonates($request->query->get('longitude'), $request->query->get('latitude'), $page, $limit);
}
if ($request->query->get('name')) {
$centresID = $this->getDoctrine()->getRepository(Centre::class)
->findByName($request->query->get('name'));
/** @var Centre[] */
foreach ($centresID as $centreID) {
$centre = $this->getDoctrine()->getRepository(Centre::class)
->find($centreID);
if ($centre)
array_push($centreName, $centre);
}
/** @var int[] */
$lieuxID = $this->getDoctrine()->getRepository(Lieu::class)
->findByName($request->query->get('name'));
/** @var Lieux[] */
foreach ($lieuxID as $lieuID) {
$lieu = $this->getDoctrine()->getRepository(Lieu::class)
->find($lieuID);
if ($lieu)
array_push($lieuxName, $lieu);
}
}
if ($request->query->get('longitude') && $request->query->get('name') && !$request->query->get('address')) {
//$centres = array_intersect($centreCoord, $centreName);
$centres = array_uintersect($centreName, $centreCoord, function ($centreName, $centreCoord) {
return spl_object_hash($centreName) <=> spl_object_hash($centreCoord);
});
$lieux = array_uintersect($lieuxName, $lieuxCoord, function ($lieuxName, $lieuxCoord) {
return spl_object_hash($lieuxName) <=> spl_object_hash($lieuxCoord);
});
} else {
if ($request->query->get('name')) {
$centres = $centreName;
$lieux = $lieuxName;
} else {
$centres = $centreCoord;
$lieux = $lieuxCoord;
}
}
if (!$request->query->get('longitude') && !$request->query->get('name') && !$request->query->get('address')) {
// basic search of paris coordinates
/** @var Centre[] */
$centres = $this->getDoctrine()->getRepository(Centre::class)
->findByCoordonates(2.34, 48.85, $page, $limit);
/** @var Lieu[] */
$lieux = $this->getDoctrine()->getRepository(Lieu::class)
->findByCoordonates(2.34, 48.85, $page, $limit);
}
if (count($centres) < 1 && count($lieux) < 1) {
// dd('dd');
return new Response(json_encode([
"content" => [],
"centerImported" => $centerImportedArray,
"totalPages" => $totalPages,
"message" => "Aucun centre/lieu n'a été trouvé avec le nom fournit.",
"status" => 404,
]), 200);
}
// secondly filters all of the other filters
// checks if there is any result with the search
if (count($centres) != 0 || count($lieux) != 0) {
$result = new ArrayCollection();
$resultAudioMulti = array();
//gets through all centres given by the function
foreach ($centres as $centre) {
if ($centre->getIsValid() != true)
continue;
if ($centre->getIsBlocked() == true)
continue;
//isDomicile filter
if (($request->query->get('isDomicile')) && ($request->query->get('isDomicile') == "true")) {
if ($centre->getIsRdvDomicile() != true)
continue;
}
// Prestation
/** @var CentrePrestation[] */
$prestations = $this->getDoctrine()->getRepository(CentrePrestation::class)
->findBy(array('id_centre' => $centre->getId()));
/** @var Rdv[] */
$centreRdvs = $this->getDoctrine()->getRepository(Rdv::class)
->findAllReviewsCentre($centre->getId());
//prestation filter
if ($request->query->get('prestations') && $request->query->get('prestations') != '') {
/** @var int[] */
$prestationsToCheck = json_decode($request->query->get('prestations'));
//test all prestations
$allPrestation = true;
foreach ($prestationsToCheck as $prestationToCheck) {
$isContained = false;
//test if the prestation given is part of the skillset of the centre
foreach ($prestations as $prestation) {
if ($prestation->getIdPrestation()->getId() == $prestationToCheck) {
$isContained = true;
continue;
}
}
// if the prestation isn't contained then stop the loop and toggle the value to false
if ($isContained == false) {
$allPrestation = false;
continue;
}
}
// if the user doesn't have all the prestations then skip the work
if ($allPrestation == false) continue;
}
$resultPrestation = new ArrayCollection();
foreach ($prestations as $prestation) {
$resultPrestation->add([
"id" => $prestation->getIdPrestation()->getId(),
"titre" => $prestation->getIdPrestation()->getLibelle(),
]);
}
/** @var AudioCentre[] */
$liaisons = $this->getDoctrine()->getRepository(AudioCentre::class)
->findBy(array('id_centre' => $centre, 'isConfirmed' => true));
$resultAudio = new ArrayCollection();
// goes though the each audio of the center
foreach ($liaisons as $liaison) {
/** @var Audio */
$audio = $this->getDoctrine()->getRepository(Audio::class)
->findOneBy(array('id' => $liaison->getIdAudio()));
if ($audio->getIsIndieValid() != true && $audio->getIsIndie() != false)
continue;
/** @var Rdv[] */
$audioRdvs = $this->getDoctrine()->getRepository(Rdv::class)
->findAllReviewsAudio($audio->getId());
// Name filter
/*if ($request->query->get('name')) {
// if it's the name **isn't** contained in any way, skip the worker
$fullname = $publicFunction->normalize($audio->getName() . " " . $audio->getLastname());
$namefull = $publicFunction->normalize($audio->getName() . " " . $audio->getLastname());
$nameToCheck = $publicFunction->normalize($request->query->get('name'));
if (!(str_contains($fullname, $nameToCheck) || str_contains($namefull, $nameToCheck)))
continue;
}*/
// Motif filter
/** @var AudioMotif[] */
$motifs = $this->getDoctrine()->getRepository(AudioMotif::class)
->findBy(array('id_audio' => $liaison->getIdAudio()));
// will test whether or not the audio has the necessery motif to be added
if ($request->query->get('motif')) {
$motifID = (int) $request->query->get('motif');
$hasMotif = false;
foreach ($motifs as $motif) {
if ($motif->getIdMotif()->getId() == $motifID) $hasMotif = true;
}
if ($hasMotif == false) continue;
}
$resultMotif = new ArrayCollection();
foreach ($motifs as $motif) {
$resultMotif->add([
"id" => $motif->getIdMotif()->getId(),
"titre" => $motif->getIdMotif()->getTitre(),
"consigne" => $motif->getConsigne(),
"duration" => $motif->getDuration(),
"isRdvonline" => $motif->getIsRdvonline(),
]);
}
// Specialities
/** @var AudioSpecialite[] */
$specialities = $this->getDoctrine()->getRepository(AudioSpecialite::class)
->findBy(array('id_audio' => $liaison->getIdAudio()));
//speciality filter
if ($request->query->get('specialities') && $request->query->get('specialities') != '') {
/** @var int[] */
$specialitiesToCheck = json_decode($request->query->get('specialities'));
//test all specialities
$allSpecialities = true;
foreach ($specialitiesToCheck as $specialityToCheck) {
$isContained = false;
//test if the speciality given is part of the skillset of the audio
foreach ($specialities as $speciality) {
if ($speciality->getIdSpecialite()->getId() == $specialityToCheck) {
$isContained = true;
continue;
}
}
// if the speciality isn't contained then stop the loop and toggle the value to false
if ($isContained == false) {
$allSpecialities = false;
continue;
}
}
// if the user doesn't have all the specialities then skip the work
if ($allSpecialities == false) continue;
}
$resultSpeciality = new ArrayCollection();
foreach ($specialities as $speciality) {
if ($speciality->getIdSpecialite() !== null) {
$resultSpeciality->add([
"id" => $speciality->getIdSpecialite()->getId(),
"titre" => $speciality->getIdSpecialite()->getLibelle(),
]);
}
}
//Filter Day
if ($request->query->get('day') && $request->query->get('day') != '0') {
$day = $request->query->get('day');
setlocale(LC_TIME, 'fr_FR.utf8');
if ($day == "1") {
$dayDispo = $publicFunction->calculSchedule($audio, new \DateTime(), $centre);
if (count($dayDispo[strftime('%A')]) == 0) {
continue;
}
}
if ($day == "3") {
if ((strftime('%A') == "samedi") || (strftime('%A') == "dimanche")) {
$dateAfterWeek = new DateTime();
$dayDispo = $publicFunction->calculSchedule($audio, new \DateTime(), $centre);
$day2Dispo = $publicFunction->calculSchedule($audio, $dateAfterWeek->add(new DateInterval('P7D')), $centre);
if (strftime('%A') == "samedi") {
$nb = count($dayDispo[strftime('%A')]) + count($dayDispo[strftime("%A", strtotime("+1 day"))]);
$nb = $nb + count($day2Dispo['lundi']);
if ($nb == 0) {
continue;
}
}
if (strftime('%A') == "dimanche") {
$nb = count($dayDispo[strftime('%A')]);
$nb = $nb + count($day2Dispo['lundi']) + count($day2Dispo['mardi']);
if ($nb == 0) {
continue;
}
}
} else {
$dayDispo = $publicFunction->calculSchedule($audio, new \DateTime(), $centre);
//dd($dayDispo);
$nb = count($dayDispo[strftime('%A')]) + count($dayDispo[strftime("%A", strtotime("+1 day"))]) + count($dayDispo[strftime("%A", strtotime("+2 day"))]);
if ($nb == 0) {
continue;
}
}
}
}
if ($audio->getIsIndie()) {
$isNewWorker = true;
foreach ($resultAudioMulti as $key => $audioMulti) {
if ($audioMulti["id"] == $audio->getId()) {
$isNewWorker = false;
break;
}
}
$date1 = new DateTime();
$date2 = new DateTime();
if ($isNewWorker) array_push($resultAudioMulti, [
"id" => $audio->getId(),
"civilite" => $audio->getCivilite(),
"name" => $audio->getName(),
"lastname" => $audio->getLastname(),
"birthdate" => $audio->getBirthdate(),
"mail" => $audio->getMail(),
"phone" => $audio->getPhone(),
"adeli" => $audio->getAdeli(),
"pin" => $audio->getPin(),
"description" => $audio->getDescription(),
"imgUrl" => $audio->getImgUrl(),
"isRdvDomicileIndie" => $audio->getIsRdvDomicileIndie(),
"averageRating" => $publicFunction->calculateRating($audioRdvs),
"nbrReview" => count($audioRdvs),
"motifs" => $resultMotif->toArray(),
"specialities" => $resultSpeciality->toArray(),
"centres" => array([
"id" => $centre->getId(),
"address" => $centre->getAddress(),
"postale" => $centre->getPostale(),
"city" => $centre->getCity(),
"finess" => $centre->getFiness(),
"siret" => $centre->getSiret(),
"website" => $centre->getWebsite(),
"phone" => $centre->getPhone(),
"latitude" => $centre->getLatitude(),
"longitude" => $centre->getLongitude(),
"schedule" => [
$publicFunction->calculSchedule($audio, new \DateTime(), $centre),
$publicFunction->calculSchedule($audio, $date1->add(new DateInterval('P7D')), $centre),
$publicFunction->calculSchedule($audio, $date2->add(new DateInterval('P14D')), $centre)
],
"isLieu" => false
])
]);
else array_push(
$resultAudioMulti[$key]["centres"],
[
"id" => $centre->getId(),
"address" => $centre->getAddress(),
"postale" => $centre->getPostale(),
"city" => $centre->getCity(),
"finess" => $centre->getFiness(),
"siret" => $centre->getSiret(),
"website" => $centre->getWebsite(),
"phone" => $centre->getPhone(),
"latitude" => $centre->getLatitude(),
"longitude" => $centre->getLongitude(),
"schedule" => [
$publicFunction->calculSchedule($audio, new \DateTime(), $centre),
$publicFunction->calculSchedule($audio, $date->add(new DateInterval('P7D')), $centre),
$publicFunction->calculSchedule($audio, $date->add(new DateInterval('P14D')), $centre)
],
"isLieu" => false
]
);
continue;
}
//add audio in the result
$date1 = new DateTime();
$date2 = new DateTime();
if ($centre->getHoraire() == null || $centre->getHoraire() == []) continue;
$resultAudio->add([
"id" => $audio->getId(),
"civilite" => $audio->getCivilite(),
"name" => $audio->getName(),
"lastname" => $audio->getLastname(),
"birthdate" => $audio->getBirthdate(),
"mail" => $audio->getMail(),
"phone" => $audio->getPhone(),
"adeli" => $audio->getAdeli(),
"pin" => $audio->getPin(),
"description" => $audio->getDescription(),
"imgUrl" => $audio->getImgUrl(),
"averageRating" => $publicFunction->calculateRating($audioRdvs),
"nbrReview" => count($audioRdvs),
"motifs" => $resultMotif->toArray(),
"specialities" => $resultSpeciality->toArray(),
"schedule" => [
$publicFunction->calculSchedule($audio, new \DateTime(), $centre),
$publicFunction->calculSchedule($audio, $date1->add(new DateInterval('P7D')), $centre),
$publicFunction->calculSchedule($audio, $date2->add(new DateInterval('P14D')), $centre)
],
]);
}
if (count($resultAudio) > 0)
$result->add([
"id" => $centre->getId(),
"audio_id" => $centre->getIdGerant()->getId(),
"name" => $centre->getName(),
"slug" => $centre->getSlug(),
"imgUrl" => $centre->getImgUrl(),
"isRdvDomicile" => $centre->getIsRdvDomicile(),
"address" => $centre->getAddress(),
"postale" => $centre->getPostale(),
"city" => $centre->getCity(),
"finess" => $centre->getFiness(),
"siret" => $centre->getSiret(),
"website" => $centre->getWebsite(),
"phone" => $centre->getPhone(),
"isHandicap" => $centre->getIsHandicap(),
"latitude" => $centre->getLatitude(),
"longitude" => $centre->getLongitude(),
"averageRating" => $publicFunction->calculateRating($centreRdvs),
"nbrReview" => count($centreRdvs),
"prestations" => $resultPrestation->toArray(),
"audio" => $resultAudio->toArray(),
]);
}
if (count($result) > 0 || count($resultAudioMulti) > 0)
return new Response(json_encode([
"content" => array_merge($result->toArray(), $resultAudioMulti),
"centerImported" => $centerImportedArray,
"totalPages" => $totalPages,
"day" => strftime("%A"),
"status" => 200,
]));
else
return new Response(json_encode([
"content" => [],
"message" => "Aucun centre n'a été trouvé avec ces critères.",
"centerImported" => $centerImportedArray,
"totalPages" => $totalPages,
"status" => 404,
]), 200);
} else {
return new Response(json_encode([
"content" => [],
"message" => "Aucun centre n'a été trouvé à cette adresse.",
"status" => 404,
]), 200);
}
}
/**
* @Route("/centres/client/{id}", name="getCentresByClient", methods={"GET","HEAD"})
*/
public function getCentresByClient(Request $request, Client $client, PublicFunction $publicFunction): Response
{
/** @var ActivityRepository */
$activityRepo = $this->getDoctrine();
if (!$request->query->get('token'))
return new Response(json_encode([
"message" => "Pas de token n'a été spécifié",
"status" => 401,
]), 401);
$entityManager = $this->getDoctrine()->getManager();
/** @var Token */
$token = $this->getDoctrine()
->getRepository(Token::class)
->findOneBy(['token' => $request->query->get('token'), "id_client" => $client]);
if (!$token)
return new Response(json_encode([
"message" => "Pas de token trouvé dans la base de données. Veuillez vous reconnecter.",
"status" => 404,
]), 404);
// get token age
$dateDiff = $token->getCreationDate()->diff(new DateTime());
// if the token if older than 7 days
if ($dateDiff->d > 7) {
$entityManager->remove($token);
$entityManager->flush();
return $this->json([
'message' => 'Ce token est obselète. Veuillez vous reconnecter.',
'path' => 'src/Controller/ClientController.php',
"status" => 401
], 401);
}
$resultRdv = new ArrayCollection();
$resultNear = new ArrayCollection();
/** @var int[] */
$centresID = $this->getDoctrine()->getRepository(Centre::class)
->findByRdvTaken($client);
foreach ($centresID as $centreID) {
/** @var Centre[] */
$centres = $this->getDoctrine()->getRepository(Centre::class)
->find($centreID);
}
foreach ($centres as $centre) {
/** @var Rdv[] */
$centreRdvs = $this->getDoctrine()->getRepository(Rdv::class)
->findAllReviewsCentre($centre->getId());
$resultRdv->add([
"id" => $centre->getId(),
"audio_id" => $centre->getIdGerant()->getId(),
"name" => $centre->getName(),
"imgUrl" => $centre->getImgUrl(),
"isRdvDomicile" => $centre->getIsRdvDomicile(),
"address" => $centre->getAddress(),
"postale" => $centre->getPostale(),
"city" => $centre->getCity(),
"finess" => $centre->getFiness(),
"siret" => $centre->getSiret(),
"website" => $centre->getWebsite(),
"phone" => $centre->getPhone(),
"isHandicap" => $centre->getIsHandicap(),
"longitude" => $centre->getLongitude(),
"latitude" => $centre->getLatitude(),
"averageRating" => $publicFunction->calculateRating($centreRdvs),
"nbrReview" => count($centreRdvs),
]);
}
//if the user searched by coordinates
if ($request->query->get('longitude') && $request->query->get('latitude')) {
/** @var Centre[] */
$centresNear = $this->getDoctrine()->getRepository(Centre::class)
->findByCoordonates($request->query->get('longitude'), $request->query->get('latitude'), $page, $limit);
// checks if there is any result with the search
//gets through all centres given by the function
foreach ($centresNear as $centre) {
/** @var Rdv[] */
$centreRdvs = $this->getDoctrine()->getRepository(Rdv::class)
->findAllReviewsCentre($centre->getId());
$resultNear->add([
"id" => $centre->getId(),
"audio_id" => $centre->getIdGerant()->getId(),
"name" => $centre->getName(),
"imgUrl" => $centre->getImgUrl(),
"isRdvDomicile" => $centre->getIsRdvDomicile(),
"address" => $centre->getAddress(),
"postale" => $centre->getPostale(),
"city" => $centre->getCity(),
"finess" => $centre->getFiness(),
"siret" => $centre->getSiret(),
"website" => $centre->getWebsite(),
"phone" => $centre->getPhone(),
"isHandicap" => $centre->getIsHandicap(),
"longitude" => $centre->getLongitude(),
"latitude" => $centre->getLatitude(),
"averageRating" => $publicFunction->calculateRating($centreRdvs),
"nbrReview" => count($centreRdvs),
]);
}
}
if ((count($resultNear) > 0) || (count($resultRdv) > 0)) {
return new Response(json_encode([
"resultNear" => $resultNear->toArray(),
"resultRdv" => $resultRdv->toArray(),
"status" => 200,
]));
} else {
return new Response(json_encode([
"message" => "Aucun centre n'a été trouvé.",
"status" => 404,
]), 404);
}
}
/**
* @Route("/centre/image/{id}", name="getCentreImage", methods={"GET"})
*/
public function getCentreImage(Centre $centre, PublicFunction $publicFunction): Response
{
if (!$centre->getImgUrl()) {
return $publicFunction->replyWithFile('images/centre/', "imgOreille.png");
}
return $publicFunction->replyWithFile('images/centre/', $centre->getImgUrl());
}
/**
* @Route("/centre/document/finess/{id}", name="getCentreFinessDocument", methods={"GET"})
*/
public function getCentreFinessDocument(Centre $centre, PublicFunction $publicFunction): Response
{
if (!$centre->getFinessUrl()) {
return $publicFunction->replyWithFile('images/centre/', "imgOreille.png");
}
return $publicFunction->replyWithFile('document/centre/finess/', $centre->getFinessUrl());
}
/**
* @Route("/centre/{id}/audios/", name="getAudiosByCentreId", methods={"GET"})
*/
public function getAudiosByCentreId(Centre $centre): Response
{
$audios = $this->getDoctrine()
->getRepository(AudioCentre::class)
->findBy(array('id_centre' => $centre));
$resultatAudios = new ArrayCollection();
foreach ($audios as $audio) {
$resultatAudios->add([
"id" => $audio->getIdAudio()->getId(),
"nom" => $audio->getIdAudio()->getLastName(),
"prenom" => $audio->getIdAudio()->getName()
]);
}
return $this->json([
"audios" => $resultatAudios->toArray(),
]);
}
/**
* @Route("/centre/horaire/{id}", name="getCentreHoraire", methods={"GET"})
*/
public function getCentreHoraire(Centre $centre, PublicFunction $publicFunction): Response
{
return new Response(json_encode($centre->getHoraire()));
}
/**
* @Route("/centre/holiday-horaire/{id}", name="getCentreHolidayHoraire", methods={"GET"})
*/
public function getCentreHolidayHoraire(Centre $centre, PublicFunction $publicFunction): Response
{
return new Response(json_encode($centre->getHorairesHoliday()));
}
/**
* @Route("/centre/horaire/{id}", name="setCentreHoraire", methods={"PUT"})
*/
public function setCentreHoraire(Centre $centre, PublicFunction $publicFunction, Request $request)
{
if (!$request->query->get('token')) {
return new Response(json_encode([
"message" => "Pas de token n'a été spécifié",
"status" => 401,
]), 401);
}
$entityManager = $this->getDoctrine()->getManager();
/** @var Token */
$token = $this->getDoctrine()
->getRepository(Token::class)
->findOneBy(['token' => $request->query->get('token'), 'id_audio' => $request->query->get('audio')]);
if (!$token) {
return new Response(json_encode([
"message" => "Pas de token trouvé dans la base de données. Veuillez vous reconnecter.",
"status" => 404,
]), 404);
}
// get token age
$dateDiff = $token->getCreationDate()->diff(new DateTime());
// if the token if older than 7 days
if ($dateDiff->d > 7) {
$entityManager->remove($token);
$entityManager->flush();
return $this->json([
'message' => 'Ce token est obselète. Veuillez vous reconnecter.',
'path' => 'src/Controller/AudioController.php',
"status" => 401,
], 401);
}
$entityManager = $this->getDoctrine()->getManager();
$data = json_decode($request->getContent(), true);
$days = ["lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi", "dimanche"];
// Extract center IDs from the "fixed" section
if (isset($data['horaires']['fixed'])) {
foreach ($data['horaires']['fixed'] as $dayData) {
foreach ($dayData as $timeData) {
$centerIds[] = $timeData['centerId'];
}
}
}
// Extract color from the "fixed" section
if (isset($data['horaires']['fixed'])) {
foreach ($data['horaires']['fixed'] as $dayData) {
foreach ($dayData as $timeData) {
$centerColors[] = $timeData['centerColor'];
}
}
}
//dd($centerIds);
if (isset($centerIds)) {
// Remove duplicate center IDs and convert to array
$centerIds = array_values(array_unique($centerIds));
// Remove duplicate center IDs and convert to array
$centerColors = array_values(array_unique($centerColors));
// dd( $centerColors);
// Use $centerIds for further processing
// Step 1: Clear empty days
$myCenters = $this->getDoctrine()
->getRepository(Centre::class)->findBy(['id_gerant' => $request->query->get('audio')]);
// dd( $audioCentre);
$centerIds = array_values(array_unique($centerIds));
//dd($centerIds);
// Fetch the centers based on id_gerant
$myCenters = $this->getDoctrine()
->getRepository(Centre::class)
->findBy(['id' => $centre]);
//dd($myCenters);
// Create an array of center IDs from $myCenters
$myCenterIds = [];
foreach ($myCenters as $myCenter) {
$myCenterIds[] = $myCenter->getId();
}
//dd($myCenterIds);
// Check for unexisting centers between $centerIds and $myCenterIds
$unexistingCenters = array_diff($myCenterIds, $centerIds);
//dd($unexistingCenters);
foreach ($unexistingCenters as $centerId) {
// Create a new instance of Centre and set its properties
$center = $this->getDoctrine()
->getRepository(Centre::class)
->find($centerId);
$centerAudio = $this->getDoctrine()
->getRepository(AudioCentre::class)
->findOneBy(['id_centre' => $centerId]);
$horaireArray = [
'fixed' => [
'lundi' => [],
'mardi' => [],
'mercredi' => [],
'jeudi' => [],
'vendredi' => [],
'samedi' => [],
'dimanche' => [],
],
'exceptionalOpened' => [],
'exceptionalClosed' => [],
];
if ($center) {
$center->setHoraire($horaireArray);
$entityManager->persist($center);
}
if ($centerAudio) {
$centerAudio->setHoraire($horaireArray);
$entityManager->persist($centerAudio);
}
$entityManager->flush();
}
$results = [];
foreach ($centerIds as $key => $centerId) {
// Step 1: Clear empty days
$clearedData = ["fixed" => [], "exceptionalOpened" => [], "exceptionalClosed" => []];
foreach ($days as $day) {
if (isset($data['horaires']['fixed'][$day])) {
$clearedData['fixed'][$day] = $data['horaires']['fixed'][$day];
} else {
$clearedData['fixed'][$day] = [];
}
}
$clearedData['exceptionalOpened'] = $data['horaires']['exceptionalOpened'];
$clearedData['exceptionalClosed'] = $data['horaires']['exceptionalClosed'];
// Step 2: Find the center by centerId
$centerData = [];
$centreExist = false;
foreach ($days as $day) {
$centerData[$day] = [];
if (isset($clearedData['fixed'][$day])) {
foreach ($clearedData['fixed'][$day] as $timeData) {
if ($timeData['centerId'] == $centerId) {
$centerData[$day][] = [
'open' => $timeData['open'],
'close' => $timeData['close']
];
$centreExist = true;
}
}
}
}
$center = $this->getDoctrine()
->getRepository(Centre::class)
->find($centerId);
$centerAudio = $this->getDoctrine()
->getRepository(AudioCentre::class)
->findOneBy(['id_centre' => $centerId]);
$result = [
'fixed' => $centerData,
'exceptionalOpened' => $clearedData['exceptionalOpened'],
'exceptionalClosed' => $clearedData['exceptionalClosed']
];
$center->setHoraire($result); // Use $result instead of $results
$centerAudio->setHoraire($result); // Use $result instead of $results
$center->setCalendarColor($centerColors[$key]); // Use $result instead of $results
$entityManager->persist($center);
$entityManager->persist($centerAudio);
$entityManager->flush();
$results[$centerId] = $result;
}
$resultsJson = json_encode($results);
} else {
$myCenters = $this->getDoctrine()
->getRepository(Centre::class)
->findBy(['id_gerant' => $request->query->get('audio')]);
foreach ($myCenters as $centerId) {
// Create a new instance of Centre and set its properties
$center = $this->getDoctrine()
->getRepository(Centre::class)
->find($centerId);
$centerAudio = $this->getDoctrine()
->getRepository(AudioCentre::class)
->findOneBy(['id_centre' => $centerId]);
$horaireArray = [
'fixed' => [
'lundi' => [],
'mardi' => [],
'mercredi' => [],
'jeudi' => [],
'vendredi' => [],
'samedi' => [],
'dimanche' => [],
],
'exceptionalOpened' => [],
'exceptionalClosed' => [],
];
$center->setHoraire($horaireArray);
$centerAudio->setHoraire($horaireArray);
// Persist the center
$entityManager->persist($center);
$entityManager->persist($centerAudio);
$entityManager->flush();
}
}
// dd($results);
// $centre->setHoraire($data["horaires"]);
// $entityManager->flush();
return $this->json([
"id" => $centre->getId(),
"horaires" => $data["horaires"]
]);
}
/**
* @Route("/centre/horaire-holiday/{id}", name="setCentreHoraireHoliday", methods={"PUT"})
*/
public function setCentreHoraireHoliday(Centre $centre, PublicFunction $publicFunction, Request $request)
{
if (!$request->query->get('token')) {
return new Response(json_encode([
"message" => "Pas de token n'a été spécifié",
"status" => 401,
]), 401);
}
$entityManager = $this->getDoctrine()->getManager();
/** @var Token */
$token = $this->getDoctrine()
->getRepository(Token::class)
->findOneBy(['token' => $request->query->get('token'), 'id_audio' => $request->query->get('audio')]);
if (!$token) {
return new Response(json_encode([
"message" => "Pas de token trouvé dans la base de données. Veuillez vous reconnecter.",
"status" => 404,
]), 404);
}
// get token age
$dateDiff = $token->getCreationDate()->diff(new DateTime());
// if the token if older than 7 days
if ($dateDiff->d > 7) {
$entityManager->remove($token);
$entityManager->flush();
return $this->json([
'message' => 'Ce token est obselète. Veuillez vous reconnecter.',
'path' => 'src/Controller/AudioController.php',
"status" => 401,
], 401);
}
$entityManager = $this->getDoctrine()->getManager();
$data = json_decode($request->getContent(), true);
//dd($data);
//$days = ["lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi", "dimanche"];
$days = ["JourdelAn", "LundidePâques", "FêteduTravail", "Victoire1945", "Ascension", "LundidePentecôte", "FêteNationale", "Assomption", "Toussaint", "Armistice1918", "Noël"];
//dd($data);
// Extract center IDs from the "fixed" section
if (isset($data['horaires']['fixed'])) {
foreach ($data['horaires']['fixed'] as $dayData) {
foreach ($dayData as $timeData) {
$centerIds[] = $timeData['centerId'];
}
}
}
// Extract color from the "fixed" section
if (isset($data['horaires']['fixed'])) {
foreach ($data['horaires']['fixed'] as $dayData) {
foreach ($dayData as $timeData) {
$centerColors[] = $timeData['centerColor'];
}
}
}
//dd($centerIds);
if (isset($centerIds)) {
// Remove duplicate center IDs and convert to array
$centerIds = array_values(array_unique($centerIds));
// Remove duplicate center IDs and convert to array
$centerColors = array_values(array_unique($centerColors));
// dd( $centerColors);
// Use $centerIds for further processing
// Step 1: Clear empty days
$myCenters = $this->getDoctrine()
->getRepository(Centre::class)->findBy(['id_gerant' => $request->query->get('audio')]);
// dd( $audioCentre);
$centerIds = array_values(array_unique($centerIds));
//dd($centerIds);
// Fetch the centers based on id_gerant
$myCenters = $this->getDoctrine()
->getRepository(Centre::class)
->findBy(['id_gerant' => $request->query->get('audio')]);
//dd($myCenters);
// Create an array of center IDs from $myCenters
$myCenterIds = [];
foreach ($myCenters as $myCenter) {
$myCenterIds[] = $myCenter->getId();
}
//dd($myCenterIds);
// Check for unexisting centers between $centerIds and $myCenterIds
$unexistingCenters = array_diff($myCenterIds, $centerIds);
//dd($unexistingCenters);
foreach ($unexistingCenters as $centerId) {
// Create a new instance of Centre and set its properties
$center = $this->getDoctrine()
->getRepository(Centre::class)
->find($centerId);
$centerAudio = $this->getDoctrine()
->getRepository(AudioCentre::class)
->findOneBy(['id_centre' => $centerId]);
$horaireArray = [
'fixed' => [
'JourdelAn' => [],
'LundidePâques' => [],
'FêteduTravail' => [],
'Victoire1945' => [],
'Ascension' => [],
'LundidePentecôte' => [],
'FêteNationale' => [],
'Assomption' => [],
'Toussaint' => [],
'Armistice1918' => [],
'Noël' => [],
],
'exceptionalOpened' => [],
'exceptionalClosed' => [],
];
if ($center) {
$center->setHorairesHoliday($horaireArray);
$entityManager->persist($center);
}
if ($centerAudio) {
$centerAudio->setHorairesHoliday($horaireArray);
$entityManager->persist($centerAudio);
}
}
$results = [];
foreach ($centerIds as $key => $centerId) {
// Step 1: Clear empty days
$clearedData = ["fixed" => [], "exceptionalOpened" => [], "exceptionalClosed" => []];
foreach ($days as $day) {
if (isset($data['horaires']['fixed'][$day])) {
$clearedData['fixed'][$day] = $data['horaires']['fixed'][$day];
} else {
$clearedData['fixed'][$day] = [];
}
}
$clearedData['exceptionalOpened'] = $data['horaires']['exceptionalOpened'];
$clearedData['exceptionalClosed'] = $data['horaires']['exceptionalClosed'];
// Step 2: Find the center by centerId
$centerData = [];
$centreExist = false;
foreach ($days as $day) {
$centerData[$day] = [];
if (isset($clearedData['fixed'][$day])) {
foreach ($clearedData['fixed'][$day] as $timeData) {
if ($timeData['centerId'] == $centerId) {
$centerData[$day][] = [
'open' => $timeData['open'],
'close' => $timeData['close']
];
$centreExist = true;
}
}
}
}
$center = $this->getDoctrine()
->getRepository(Centre::class)
->find($centerId);
$centerAudio = $this->getDoctrine()
->getRepository(AudioCentre::class)
->findOneBy(['id_centre' => $centerId]);
$result = [
'fixed' => $centerData,
'exceptionalOpened' => $clearedData['exceptionalOpened'],
'exceptionalClosed' => $clearedData['exceptionalClosed']
];
//dd($result);
$center->setHorairesHoliday($result); // Use $result instead of $results
$centerAudio->setHorairesHoliday($result); // Use $result instead of $results
$center->setCalendarColor($centerColors[$key]); // Use $result instead of $results
$entityManager->persist($center);
$entityManager->persist($centerAudio);
$entityManager->flush();
$results[$centerId] = $result;
}
$resultsJson = json_encode($results);
} else {
$myCenters = $this->getDoctrine()
->getRepository(Centre::class)
->findBy(['id_gerant' => $request->query->get('audio')]);
foreach ($myCenters as $centerId) {
// Create a new instance of Centre and set its properties
$center = $this->getDoctrine()
->getRepository(Centre::class)
->find($centerId);
$centerAudio = $this->getDoctrine()
->getRepository(AudioCentre::class)
->findOneBy(['id_centre' => $centerId]);
$horaireArray = [
'fixed' => [
'JourdelAn' => [],
'LundidePâques' => [],
'FêteduTravail' => [],
'Victoire1945' => [],
'Ascension' => [],
'LundidePentecôte' => [],
'FêteNationale' => [],
'Assomption' => [],
'Toussaint' => [],
'Armistice1918' => [],
'Noël' => [],
],
'exceptionalOpened' => [],
'exceptionalClosed' => [],
];
$center->setHorairesHoliday($horaireArray);
$centerAudio->setHorairesHoliday($horaireArray);
// Persist the center
$entityManager->persist($center);
$entityManager->persist($centerAudio);
$entityManager->flush();
}
}
// dd($results);
// $centre->setHoraire($data["horaires"]);
// $entityManager->flush();
return $this->json([
"id" => $centre->getId(),
"horaires" => $data["horaires"]
]);
}
/**
* @Route("/centre/image", name="getNewCentreImage", methods={"GET"})
*/
public function getNewCentreImage(PublicFunction $publicFunction, Request $request): Response
{
return $publicFunction->replyWithFile('images/centre/', $request->query->get('imgUrl'));
}
/**
* @Route("/centre/{id}", name="getCentre", methods={"GET","HEAD"})
*/
public function getCentre(Centre $centre, PublicFunction $publicFunction): Response
{
/** @var CentrePrestation[]*/
$prestations = $this->getDoctrine()->getRepository(CentrePrestation::class)
->findBy(array('id_centre' => $centre->getId()));
$resultPrestation = new ArrayCollection();
foreach ($prestations as $prestation) {
$resultPrestation->add([
"id" => $prestation->getIdPrestation()->getId(),
"titre" => $prestation->getIdPrestation()->getLibelle(),
]);
}
/** @var CentreMutuelle[]*/
$mutuelles = $this->getDoctrine()->getRepository(CentreMutuelle::class)
->findBy(array('id_centre' => $centre->getId()));
$resultMutuelle = new ArrayCollection();
foreach ($mutuelles as $mutuelle) {
$resultMutuelle->add([
"id" => $mutuelle->getIdMutuelle()->getId(),
"titre" => $mutuelle->getIdMutuelle()->getLibelle(),
]);
}
/** @var CentreTier[]*/
$tiers = $this->getDoctrine()->getRepository(CentreTier::class)
->findBy(array('id_centre' => $centre->getId()));
$resultTier = new ArrayCollection();
foreach ($tiers as $tier) {
$resultTier->add([
"id" => $tier->getIdTier()->getId(),
"titre" => $tier->getIdTier()->getLibelle(),
]);
}
/** @var AudioCentre[] */
$liaisons = $this->getDoctrine()->getRepository(AudioCentre::class)
->findBy(array('id_centre' => $centre, 'isConfirmed' => true));
$resultAudio = new ArrayCollection();
foreach ($liaisons as $liaison) {
/** @var Audio */
$audio = $this->getDoctrine()->getRepository(Audio::class)
->findOneBy(array('id' => $liaison->getIdAudio()));
// Motifs
/** @var AudioMotif[] */
$motifs = $this->getDoctrine()->getRepository(AudioMotif::class)
->findBy(array('id_audio' => $liaison->getIdAudio()));
// will test whether or not the audio has the necessery motif to be added
$resultMotif = new ArrayCollection();
foreach ($motifs as $motif) {
// ignore deleted motif
if (!$motif->getIsDeleted() && $motif->getType() !== 2)
$resultMotif->add([
"id" => $motif->getIdMotif()->getId(),
"titre" => $motif->getIdMotif()->getTitre(),
"consigne" => $motif->getConsigne(),
"duration" => $motif->getDuration(),
]);
}
// Specialities
/** @var AudioSpecialite[] */
$specialities = $this->getDoctrine()->getRepository(AudioSpecialite::class)
->findBy(array('id_audio' => $liaison->getIdAudio()));
//speciality filter
$resultSpeciality = new ArrayCollection();
foreach ($specialities as $speciality) {
if ($speciality->getIdSpecialite() !== null) {
$resultSpeciality->add([
"id" => $speciality->getIdSpecialite()->getId(),
"titre" => $speciality->getIdSpecialite()->getLibelle(),
]);
}
}
//schedule
$date = new DateTime();
//add audio in the result
if ($centre->getHoraire() == null || $centre->getHoraire() == []) continue;
/** @var Rdv[] */
$audioRdvs = $this->getDoctrine()->getRepository(Rdv::class)
->findAllReviewsAudio($audio->getId());
$resultAudio->add([
"id" => $audio->getId(),
"civilite" => $audio->getCivilite(),
"name" => $audio->getName(),
"lastname" => $audio->getLastname(),
"birthdate" => $audio->getBirthdate(),
"mail" => $audio->getMail(),
"phone" => $audio->getPhone(),
"adeli" => $audio->getAdeli(),
"pin" => $audio->getPin(),
"description" => $audio->getDescription(),
"imgUrl" => $audio->getImgUrl(),
"averageRating" => $publicFunction->calculateRating($audioRdvs),
"nbrReview" => count($audioRdvs),
"motifs" => $resultMotif->toArray(),
"specialities" => $resultSpeciality->toArray(),
"schedule" => [
$publicFunction->calculSchedule($audio, new \DateTime(), $centre),
$publicFunction->calculSchedule($audio, $date->add(new DateInterval('P7D')), $centre),
$publicFunction->calculSchedule($audio, $date->add(new DateInterval('P14D')), $centre)
],
]);
}
/** @var AccessCentre*/
$accessCentre = $this->getDoctrine()->getRepository(AccessCentre::class)
->findOneBy(array('id_centre' => $centre->getId()));
if (!$accessCentre)
return new Response(json_encode([
'message' => 'Error, no accessCentre found at this id',
'path' => 'src/Controller/CentreController.php',
]), 404);
$metroIDs = json_decode($accessCentre->getMetro(), true);
$metroNames = array();
if ($metroIDs) {
foreach ($metroIDs as $key => $stationID) {
$station = $this->getDoctrine()->getRepository(Station::class)->find($stationID);
if ($station) {
$metroNames[$key] = $station->getName();
} else {
$metroNames[$key] = "Station Not Found";
}
}
}
/** @var Rdv[] */
$centreRdvs = $this->getDoctrine()->getRepository(Rdv::class)
->findAllReviewsCentre($centre->getId());
// Comment
/** @var Rdv[] */
$rdvs = $this->getDoctrine()->getRepository(Rdv::class)
->findBy(array('id_centre' => $centre));
$comments = [];
foreach ($rdvs as $rdv)
if ($rdv->getComment() && $rdv->getReview() && $rdv->getIdClient())
array_push($comments, [
"id" => $rdv->getIdClient()->getId(),
"name" => $rdv->getIdClient()->getName() . " " . $rdv->getIdClient()->getLastname()[0] . ".",
"comment" => $rdv->getComment(),
"isMale" => $rdv->getIdClient()->getCivilite() == "Monsieur",
"review" => $rdv->getReview(),
]);
return new Response(json_encode([
"id" => $centre->getId(),
"audio_id" => $centre->getIdGerant()->getId(),
"name" => $centre->getName(),
"imgUrl" => $centre->getImgUrl(),
"isRdvDomicile" => $centre->getIsRdvDomicile(),
"address" => $centre->getAddress(),
"numero" => $centre->getNumero(),
"voie" => $centre->getVoie(),
"rue" => $centre->getRue(),
"description" => $centre->getDescription(),
"postale" => $centre->getPostale(),
"city" => $centre->getCity(),
"finess" => $centre->getFiness(),
"siret" => $centre->getSiret(),
"website" => $centre->getWebsite(),
"phone" => $centre->getPhone(),
"isHandicap" => $centre->getIsHandicap(),
"longitude" => $centre->getLongitude(),
"latitude" => $centre->getLatitude(),
"averageRating" => $publicFunction->calculateRating($centreRdvs),
"nbrReview" => count($centreRdvs),
"tram" => $accessCentre->getTram(),
"rer" => $accessCentre->getRer(),
"metro" => $metroNames,
"bus" => $accessCentre->getBus(),
"parking" => $accessCentre->getParkingPublic(),
"parkingPrivate" => $accessCentre->getParkingPrivate(),
"other" => $accessCentre->getOther(),
"comments" => $comments,
"mutuelles" => $resultMutuelle->toArray(),
"prestations" => $resultPrestation->toArray(),
"tiers" => $resultTier->toArray(),
"audio" => $resultAudio->toArray(),
"schedule" => $centre->getHoraire(),
"status" => 200,
]));
}
/**
* @Route("/centre-slug/{slug}", name="getCentreBySlug", methods={"GET","HEAD"})
*/
public function getCentreBySlug(string $slug, PublicFunction $publicFunction, Request $request): Response
{
$centre = $this->getDoctrine()->getRepository(Centre::class)
->findOneBy(array('slug' => $slug));
if (!$centre) {
$postale = $request->query->get('postale');
$centre = $this->getDoctrine()->getRepository(CenterImported::class)
->findOneBy(['slug' => $slug, 'codePostal' => $postale]);
/*$repository = $this->getDoctrine()->getRepository(CenterImported::class);
$slugify = $this->slugger->slug($slug)->lower();
//dd($)
$centre = $repository->findOneBySlug(str_replace('-', ' ', $slugify));*/
// dd($centre);
return new Response(json_encode([
"id" => $centre->getId(),
//"audio_id" => $centre->getIdGerant()->getId(),
"name" => $centre->getNom(),
//"imgUrl" => $centre->getImgUrl(),
//"isRdvDomicile" => $centre->getIsRdvDomicile(),
"address" => $centre->getAdresse(),
//"numero" => $centre->getNumero(),
//"voie" => $centre->getVoie(),
//"rue" => $centre->getRue(),
//"description" => $centre->getDescription(),
"postale" => $centre->getCodePostal(),
"city" => $centre->getVille(),
"siret" => $centre->getSiret(),
"phone" => $centre->getTelephone(),
//"isHandicap" => $centre->getIsHandicap(),
"longitude" => $centre->getLongitude(),
"latitude" => $centre->getLatitude(),
//"averageRating" => $publicFunction->calculateRating($centreRdvs),
//"nbrReview" => count($centreRdvs),
//"tram" => $accessCentre->getTram(),
//"rer" => $accessCentre->getRer(),
//"metro" => $metroNames,
//"bus" => $accessCentre->getBus(),
//"parking" => $accessCentre->getParkingPublic(),
//"parkingPrivate" => $accessCentre->getParkingPrivate(),
//"other" => $accessCentre->getOther(),
//"comments" => $comments,
//"mutuelles" => $resultMutuelle->toArray(),
//"prestations" => $resultPrestation->toArray(),
//"tiers" => $resultTier->toArray(),
//"audio" => $resultAudio->toArray(),
//"schedule" => $centre->getHoraire(),
"status" => 200,
]));
}
/** @var CentrePrestation[]*/
$prestations = $this->getDoctrine()->getRepository(CentrePrestation::class)
->findBy(array('id_centre' => $centre->getId()));
$resultPrestation = new ArrayCollection();
foreach ($prestations as $prestation) {
$resultPrestation->add([
"id" => $prestation->getIdPrestation()->getId(),
"titre" => $prestation->getIdPrestation()->getLibelle(),
]);
}
/** @var CentreMutuelle[]*/
$mutuelles = $this->getDoctrine()->getRepository(CentreMutuelle::class)
->findBy(array('id_centre' => $centre->getId()));
$resultMutuelle = new ArrayCollection();
foreach ($mutuelles as $mutuelle) {
$resultMutuelle->add([
"id" => $mutuelle->getIdMutuelle()->getId(),
"titre" => $mutuelle->getIdMutuelle()->getLibelle(),
]);
}
/** @var CentreTier[]*/
$tiers = $this->getDoctrine()->getRepository(CentreTier::class)
->findBy(array('id_centre' => $centre->getId()));
$resultTier = new ArrayCollection();
foreach ($tiers as $tier) {
$resultTier->add([
"id" => $tier->getIdTier()->getId(),
"titre" => $tier->getIdTier()->getLibelle(),
]);
}
$resultDiplome = new ArrayCollection();
$resultExperience = new ArrayCollection();
/** @var AudioCentre[] */
$liaisons = $this->getDoctrine()->getRepository(AudioCentre::class)
->findBy(array('id_centre' => $centre, 'isConfirmed' => true));
$resultAudio = new ArrayCollection();
foreach ($liaisons as $liaison) {
/** @var Audio */
$audio = $this->getDoctrine()->getRepository(Audio::class)
->findOneBy(array('id' => $liaison->getIdAudio()));
// Motifs
/** @var AudioMotif[] */
$motifs = $this->getDoctrine()->getRepository(AudioMotif::class)
->findBy(array('id_audio' => $liaison->getIdAudio()));
// will test whether or not the audio has the necessery motif to be added
$resultMotif = new ArrayCollection();
foreach ($motifs as $motif) {
// ignore deleted motif
if (!$motif->getIsDeleted() && $motif->getType() !== 2)
$resultMotif->add([
"id" => $motif->getIdMotif()->getId(),
"titre" => $motif->getIdMotif()->getTitre(),
"consigne" => $motif->getConsigne(),
"duration" => $motif->getDuration(),
"isRdvonline" => $motif->getIsRdvonline(),
]);
}
// Specialities
/** @var AudioSpecialite[] */
$specialities = $this->getDoctrine()->getRepository(AudioSpecialite::class)
->findBy(array('id_audio' => $liaison->getIdAudio()));
//speciality filter
$resultSpeciality = new ArrayCollection();
foreach ($specialities as $speciality) {
if ($speciality->getIdSpecialite() !== null) {
$resultSpeciality->add([
"id" => $speciality->getIdSpecialite()->getId(),
"titre" => $speciality->getIdSpecialite()->getLibelle(),
]);
}
}
// Experience
/** @var AudioExperience[] */
$experiences = $this->getDoctrine()->getRepository(ExperiencePro::class)
->findBy(array('id_audio' => $liaison->getIdAudio()));
//speciality filter
foreach ($experiences as $experience) {
// if ($speciality->getIdSpecialite() !== null) {
$resultExperience->add([
"audioId" => $experience->getIdAudio()->getId(),
"id" => $experience->getId(),
"date" => $experience->getDate(),
"post" => $experience->getPoste(),
"company" => $experience->getCompany()
]);
//}
}
//dd($resultExperience);
// Diplome
/** @var AudioDiplomes[] */
$diplomes = $this->getDoctrine()->getRepository(AudioDiplome::class)
->findBy(array('id_audio' => $liaison->getIdAudio()));
//speciality filter
foreach ($diplomes as $diplome) {
$audioId = $liaison->getIdAudio();
// if ($speciality->getIdSpecialite() !== null) {
$resultDiplome->add([
"audioId" => $diplome->getIdAudio()->getId(),
"id" => $diplome->getIdDiplome()->getId(),
"date" => $diplome->getYear(),
"title" => $diplome->getIdDiplome()->getLibelle(),
]);
//}
}
/** @var CentreImages[]*/
$centerImages = $this->getDoctrine()->getRepository(CenterImage::class)
->findBy(array('center' => $centre->getId()));
$resultCenterImage = new ArrayCollection();
foreach ($centerImages as $centerImage) {
$resultCenterImage->add([
"id" => $centerImage->getId(),
"url" => $centerImage->getUrl(),
"type" => $centerImage->getType(),
]);
}
//schedule
$date = new DateTime();
//add audio in the result
if ($centre->getHoraire() == null || $centre->getHoraire() == []) continue;
/** @var Rdv[] */
$audioRdvs = $this->getDoctrine()->getRepository(Rdv::class)
->findAllReviewsAudio($audio->getId());
$resultAudio->add([
"id" => $audio->getId(),
"civilite" => $audio->getCivilite(),
"name" => $audio->getName(),
"lastname" => $audio->getLastname(),
"birthdate" => $audio->getBirthdate(),
"mail" => $audio->getMail(),
"phone" => $audio->getPhone(),
"adeli" => $audio->getAdeli(),
"pin" => $audio->getPin(),
"description" => $audio->getDescription(),
"imgUrl" => $audio->getImgUrl(),
"averageRating" => $publicFunction->calculateRating($audioRdvs),
"nbrReview" => count($audioRdvs),
"motifs" => $resultMotif->toArray(),
"specialities" => $resultSpeciality->toArray(),
"experiences" => $resultExperience->toArray(),
"centerImages" => $resultCenterImage->toArray(),
"diplomes" => $resultDiplome->toArray(),
"schedule" => [
$publicFunction->calculSchedule($audio, new \DateTime(), $centre),
$publicFunction->calculSchedule($audio, $date->add(new DateInterval('P7D')), $centre),
$publicFunction->calculSchedule($audio, $date->add(new DateInterval('P14D')), $centre)
],
]);
//dd($resultDiplome);
}
/** @var AccessCentre*/
$accessCentre = $this->getDoctrine()->getRepository(AccessCentre::class)
->findOneBy(array('id_centre' => $centre->getId()));
if (!empty($accessCentre)) {
/*return new Response(json_encode([
'message' => 'Error, no accessCentre found at this id',
'path' => 'src/Controller/CentreController.php',
]), 404);*/
$metroIDs = json_decode($accessCentre->getMetro(), true);
$metroNames = array();
if ($metroIDs) {
foreach ($metroIDs as $key => $stationID) {
$station = $this->getDoctrine()->getRepository(Station::class)->find($stationID);
if ($station) {
$metroNames[$key] = $station->getName();
} else {
$metroNames[$key] = "Station Not Found";
}
}
}
}
/** @var Rdv[] */
$centreRdvs = $this->getDoctrine()->getRepository(Rdv::class)
->findAllReviewsCentre($centre->getId());
// Comment
/** @var Rdv[] */
$rdvs = $this->getDoctrine()->getRepository(Rdv::class)
->findBy(array('id_centre' => $centre));
$comments = [];
foreach ($rdvs as $rdv)
if ($rdv->getComment() && $rdv->getReview() && $rdv->getIdClient())
array_push($comments, [
"id" => $rdv->getIdClient()->getId(),
"name" => $rdv->getIdClient()->getName() . " " . $rdv->getIdClient()->getLastname()[0] . ".",
"comment" => $rdv->getComment(),
"isMale" => $rdv->getIdClient()->getCivilite() == "Monsieur",
"review" => $rdv->getReview(),
]);
// dd($resultDiplome->toArray());
return new Response(json_encode([
"id" => $centre->getId(),
"audio_id" => $centre->getIdGerant()->getId(),
"name" => $centre->getName(),
"imgUrl" => $centre->getImgUrl(),
"isRdvDomicile" => $centre->getIsRdvDomicile(),
"address" => $centre->getAddress(),
"numero" => $centre->getNumero(),
"voie" => $centre->getVoie(),
"rue" => $centre->getRue(),
"description" => $centre->getDescription(),
"postale" => $centre->getPostale(),
"city" => $centre->getCity(),
"finess" => $centre->getFiness(),
"siret" => $centre->getSiret(),
"website" => $centre->getWebsite(),
"phone" => $centre->getPhone(),
"isHandicap" => $centre->getIsHandicap(),
"longitude" => $centre->getLongitude(),
"latitude" => $centre->getLatitude(),
"averageRating" => $publicFunction->calculateRating($centreRdvs),
"nbrReview" => count($centreRdvs),
"tram" => !empty($accessCentre) ? $accessCentre->getTram() : null,
"rer" => !empty($accessCentre) ? $accessCentre->getRer() : null,
"experiences" => $resultExperience->toArray(),
"diplomes" => $resultDiplome->toArray(),
"centerImages" => $resultCenterImage->toArray(),
"metro" => !empty($accessCentre) ? $metroNames : null,
"bus" => !empty($accessCentre) ? $accessCentre->getBus() : null,
"parking" => !empty($accessCentre) ? $accessCentre->getParkingPublic() : null,
"parkingPrivate" => !empty($accessCentre) ? $accessCentre->getParkingPrivate() : null,
"other" => !empty($accessCentre) ? $accessCentre->getOther() : null,
"comments" => $comments,
"mutuelles" => $resultMutuelle->toArray(),
"prestations" => $resultPrestation->toArray(),
"tiers" => $resultTier->toArray(),
"audio" => $resultAudio->toArray(),
"schedule" => $centre->getHoraire(),
"aditionnelInfo" => $centre->getAditionnelInfo(),
"status" => 200,
]));
}
/**
* @Route("/centreImported/{id}", name="getCentreimported", methods={"GET","HEAD"})
*/
public function getCentreImorted(CenterImported $centre, PublicFunction $publicFunction): Response
{
if (!$centre) {
return $this->json([
'error' => 'Center not found'
], 404);
}
return $this->json([
"center" => $centre,
"status" => 200
]);
}
/**
* @Route("/centre/{id}/withoutSchedule", name="getCentreWithoutSchedule", methods={"GET","HEAD"})
*/
public function getCentreWithoutSchedule(Centre $centre, PublicFunction $publicFunction): Response
{
/** @var CentrePrestation[]*/
$prestations = $this->getDoctrine()->getRepository(CentrePrestation::class)
->findBy(array('id_centre' => $centre->getId()));
$resultPrestation = new ArrayCollection();
foreach ($prestations as $prestation) {
$resultPrestation->add([
"id" => $prestation->getIdPrestation()->getId(),
"titre" => $prestation->getIdPrestation()->getLibelle(),
]);
}
/** @var CentreMutuelle[]*/
$mutuelles = $this->getDoctrine()->getRepository(CentreMutuelle::class)
->findBy(array('id_centre' => $centre->getId()));
$resultMutuelle = new ArrayCollection();
foreach ($mutuelles as $mutuelle) {
$resultMutuelle->add([
"id" => $mutuelle->getIdMutuelle()->getId(),
"titre" => $mutuelle->getIdMutuelle()->getLibelle(),
]);
}
/** @var CentreTier[]*/
$tiers = $this->getDoctrine()->getRepository(CentreTier::class)
->findBy(array('id_centre' => $centre->getId()));
$resultTier = new ArrayCollection();
foreach ($tiers as $tier) {
$resultTier->add([
"id" => $tier->getIdTier()->getId(),
"titre" => $tier->getIdTier()->getLibelle(),
]);
}
/** @var AudioCentre[] */
$liaisons = $this->getDoctrine()->getRepository(AudioCentre::class)
->findBy(array('id_centre' => $centre, 'isConfirmed' => true));
$resultAudio = new ArrayCollection();
foreach ($liaisons as $liaison) {
/** @var Audio */
$audio = $this->getDoctrine()->getRepository(Audio::class)
->findOneBy(array('id' => $liaison->getIdAudio()));
// Motifs
/** @var AudioMotif[] */
$motifs = $this->getDoctrine()->getRepository(AudioMotif::class)
->findBy(array('id_audio' => $liaison->getIdAudio()));
// will test whether or not the audio has the necessery motif to be added
$resultMotif = new ArrayCollection();
foreach ($motifs as $motif) {
$resultMotif->add([
"id" => $motif->getIdMotif()->getId(),
"titre" => $motif->getIdMotif()->getTitre(),
"consigne" => $motif->getConsigne(),
"duration" => $motif->getDuration(),
]);
}
// Specialities
/** @var AudioSpecialite[] */
$specialities = $this->getDoctrine()->getRepository(AudioSpecialite::class)
->findBy(array('id_audio' => $liaison->getIdAudio()));
//speciality filter
$resultSpeciality = new ArrayCollection();
foreach ($specialities as $speciality) {
if ($speciality->getIdSpecialite() !== null) {
$resultSpeciality->add([
"id" => $speciality->getIdSpecialite()->getId(),
"titre" => $speciality->getIdSpecialite()->getLibelle(),
]);
}
}
//schedule
$date = new DateTime();
//add audio in the result
if ($centre->getHoraire() == null || $centre->getHoraire() == []) continue;
/** @var Rdv[] */
$audioRdvs = $this->getDoctrine()->getRepository(Rdv::class)
->findAllReviewsAudio($audio->getId());
$resultAudio->add([
"id" => $audio->getId(),
"civilite" => $audio->getCivilite(),
"name" => $audio->getName(),
"lastname" => $audio->getLastname(),
"birthdate" => $audio->getBirthdate(),
"mail" => $audio->getMail(),
"phone" => $audio->getPhone(),
"adeli" => $audio->getAdeli(),
"pin" => $audio->getPin(),
"description" => $audio->getDescription(),
"imgUrl" => $audio->getImgUrl(),
"averageRating" => $publicFunction->calculateRating($audioRdvs),
"nbrReview" => count($audioRdvs),
"motifs" => $resultMotif->toArray(),
"specialities" => $resultSpeciality->toArray(),
]);
}
/** @var AccessCentre*/
$accessCentre = $this->getDoctrine()->getRepository(AccessCentre::class)
->findOneBy(array('id_centre' => $centre->getId()));
if (!$accessCentre)
return new Response(json_encode([
'message' => 'Error, no accessCentre found at this id',
'path' => 'src/Controller/CentreController.php',
]), 404);
/** @var Rdv[] */
$centreRdvs = $this->getDoctrine()->getRepository(Rdv::class)
->findAllReviewsCentre($centre->getId());
// Comment
/** @var Rdv[] */
$rdvs = $this->getDoctrine()->getRepository(Rdv::class)
->findBy(array('id_centre' => $centre));
$comments = [];
foreach ($rdvs as $rdv)
if ($rdv->getComment() && $rdv->getReview() && $rdv->getIdClient())
array_push($comments, [
"id" => $rdv->getIdClient()->getId(),
"name" => $rdv->getIdClient()->getName() . " " . $rdv->getIdClient()->getLastname()[0] . ".",
"comment" => $rdv->getComment(),
"isMale" => $rdv->getIdClient()->getCivilite() == "Monsieur",
"review" => $rdv->getReview(),
]);
$metroIDs = json_decode($accessCentre->getMetro(), true);
$metroNames = array();
if ($metroIDs) {
foreach ($metroIDs as $key => $stationID) {
$station = $this->getDoctrine()->getRepository(Station::class)->find($stationID);
if ($station) {
$metroNames[$key]["name"] = $station->getName();
$metroNames[$key]["value"] = $station->getId();
}
}
}
return new Response(json_encode([
"id" => $centre->getId(),
"audio_id" => $centre->getIdGerant()->getId(),
"name" => $centre->getName(),
"imgUrl" => $centre->getImgUrl(),
"isRdvDomicile" => $centre->getIsRdvDomicile(),
"address" => $centre->getAddress(),
"numero" => $centre->getNumero(),
"voie" => $centre->getVoie(),
"rue" => $centre->getRue(),
"description" => $centre->getDescription(),
"postale" => $centre->getPostale(),
"city" => $centre->getCity(),
"finess" => $centre->getFiness(),
"siret" => $centre->getSiret(),
"website" => $centre->getWebsite(),
"phone" => $centre->getPhone(),
"isHandicap" => $centre->getIsHandicap(),
"longitude" => $centre->getLongitude(),
"latitude" => $centre->getLatitude(),
"averageRating" => $publicFunction->calculateRating($centreRdvs),
"nbrReview" => count($centreRdvs),
"tram" => $accessCentre->getTram(),
"rer" => $accessCentre->getRer(),
"metro" => $metroNames,
"bus" => $accessCentre->getBus(),
"parking" => $accessCentre->getParkingPublic(),
"parkingPrivate" => $accessCentre->getParkingPrivate(),
"other" => $accessCentre->getOther(),
"comments" => $comments,
"mutuelles" => $resultMutuelle->toArray(),
"prestations" => $resultPrestation->toArray(),
"tiers" => $resultTier->toArray(),
"audio" => $resultAudio->toArray(),
"schedule" => $centre->getHoraire(),
"status" => 200,
]));
}
/**
* @Route("/centre/{id}/prestations", name="deleteAllCentrePrestations", methods={"DELETE"})
*/
public function deleteAllCentrePrestations(Request $request, Centre $centre): Response
{
$centrePrestations = $this->getDoctrine()
->getRepository(CentrePrestation::class)
->findBy(array('id_centre' => $centre->getId()));
if (!$request->query->get('token')) {
return new Response(json_encode([
"message" => "Pas de token n'a été spécifié",
"status" => 401,
]), 401);
}
$entityManager = $this->getDoctrine()->getManager();
/** @var Token */
$token = $this->getDoctrine()
->getRepository(Token::class)
->findOneBy(['token' => $request->query->get('token'), 'id_audio' => $centre->getIdGerant()]);
if (!$token) {
return new Response(json_encode([
"message" => "Pas de token trouvé dans la base de données. Veuillez vous reconnecter.",
"status" => 404,
]), 404);
}
// get token age
$dateDiff = $token->getCreationDate()->diff(new DateTime());
// if the token if older than 7 days
if ($dateDiff->d > 7) {
$entityManager->remove($token);
$entityManager->flush();
return $this->json([
'message' => 'Ce token est obselète. Veuillez vous reconnecter.',
'path' => 'src/Controller/ClientController.php',
"status" => 401,
], 401);
}
$entityManager = $this->getDoctrine()->getManager();
foreach ($centrePrestations as $centrePrestation) {
$entityManager->remove($centrePrestation);
}
$entityManager->flush();
return new Response("Prestations from centre " . $centre->getId() . " correctly deleted.");
}
/**
* @Route("/centre/prestations", name="postMultipleCentrePrestations", methods={"POST"})
*/
public function postMultipleCentrePrestations(Request $request): Response
{
$data = json_decode($request->getContent(), true);
$centre = $this->getDoctrine()
->getRepository(Centre::class)
->findOneBy(['id' => $data["id_centre"]]);
if (!$centre) {
return $this->json([
'message' => 'Error, no Centre found at this id',
'path' => 'src/Controller/CentreController.php',
]);
}
/** @var Token */
$token = $this->getDoctrine()
->getRepository(Token::class)
->findOneBy(['token' => $data["token"], 'id_audio' => $centre->getIdGerant()]);
if (!$token) {
return new Response(json_encode([
"message" => "Pas de token trouvé dans la base de données. Veuillez vous reconnecter.",
"status" => 404,
]), 404);
}
// get token age
$dateDiff = $token->getCreationDate()->diff(new DateTime());
// if the token if older than 7 days
if ($dateDiff->d > 7) {
$entityManager = $this->getDoctrine()->getManager();
$entityManager->remove($token);
$entityManager->flush();
return $this->json([
'message' => 'Ce token est obselète. Veuillez vous reconnecter.',
'path' => 'src/Controller/AudioController.php',
"status" => 401,
], 401);
}
foreach ($data["prestationList"] as $prestation) {
$centrePrestation = new centrePrestation();
$prestation = $this->getDoctrine()
->getRepository(Prestation::class)
->findOneBy(['id' => $prestation]);
if (!$prestation) {
return $this->json([
'message' => 'Error, no prestation found at this id',
'path' => 'src/Controller/CentreController.php',
]);
}
$centrePrestation->setIdPrestation($prestation);
$centrePrestation->setIdCentre($centre);
$checkIfNull = $this->getDoctrine()->getRepository(CentrePrestation::class)
->findOneBy(['id_prestation' => $prestation, 'id_centre' => $data["id_centre"]]);
if ($checkIfNull) {
return $this->json([
'message' => 'Error, prestation already found at this id',
'path' => 'src/Controller/CentreController.php',
]);
}
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($centrePrestation);
}
$entityManager->flush();
return $this->json([
"centre" => $centre->getId(),
"prestations" => $data["prestationList"],
]);
}
/**
* @Route("/centre/{id}/mutuelles", name="deleteAllCentreMutuelles", methods={"DELETE"})
*/
public function deleteAllCentreMutuelles(Request $request, Centre $centre): Response
{
$centreMutuelles = $this->getDoctrine()
->getRepository(CentreMutuelle::class)
->findBy(array('id_centre' => $centre->getId()));
if (!$request->query->get('token')) {
return new Response(json_encode([
"message" => "Pas de token n'a été spécifié",
"status" => 401,
]), 401);
}
$entityManager = $this->getDoctrine()->getManager();
/** @var Token */
$token = $this->getDoctrine()
->getRepository(Token::class)
->findOneBy(['token' => $request->query->get('token'), 'id_audio' => $centre->getIdGerant()]);
if (!$token) {
return new Response(json_encode([
"message" => "Pas de token trouvé dans la base de données. Veuillez vous reconnecter.",
"status" => 404,
]), 404);
}
// get token age
$dateDiff = $token->getCreationDate()->diff(new DateTime());
// if the token if older than 7 days
if ($dateDiff->d > 7) {
$entityManager->remove($token);
$entityManager->flush();
return $this->json([
'message' => 'Ce token est obselète. Veuillez vous reconnecter.',
'path' => 'src/Controller/ClientController.php',
"status" => 401,
], 401);
}
$entityManager = $this->getDoctrine()->getManager();
foreach ($centreMutuelles as $centreMutuelle) {
$entityManager->remove($centreMutuelle);
}
$entityManager->flush();
return new Response("Mutuelles from centre " . $centre->getId() . " correctly deleted.");
}
/**
* @Route("/centre/mutuelles", name="postMultipleCentreMutuelles", methods={"POST"})
*/
public function postMultipleCentreMutuelles(Request $request): Response
{
$data = json_decode($request->getContent(), true);
$centre = $this->getDoctrine()
->getRepository(Centre::class)
->findOneBy(['id' => $data["id_centre"]]);
if (!$centre) {
return $this->json([
'message' => 'Error, no Centre found at this id',
'path' => 'src/Controller/CentreController.php',
]);
}
/** @var Token */
$token = $this->getDoctrine()
->getRepository(Token::class)
->findOneBy(['token' => $data["token"], 'id_audio' => $centre->getIdGerant()]);
if (!$token) {
return new Response(json_encode([
"message" => "Pas de token trouvé dans la base de données. Veuillez vous reconnecter.",
"status" => 404,
]), 404);
}
// get token age
$dateDiff = $token->getCreationDate()->diff(new DateTime());
// if the token if older than 7 days
if ($dateDiff->d > 7) {
$entityManager = $this->getDoctrine()->getManager();
$entityManager->remove($token);
$entityManager->flush();
return $this->json([
'message' => 'Ce token est obselète. Veuillez vous reconnecter.',
'path' => 'src/Controller/AudioController.php',
"status" => 401,
], 401);
}
foreach ($data["mutuelleList"] as $mutuelle) {
$centreMutuelle = new centreMutuelle();
$mutuelle = $this->getDoctrine()
->getRepository(Mutuelle::class)
->findOneBy(['id' => $mutuelle]);
if (!$mutuelle) {
return $this->json([
'message' => 'Error, no mutuelle found at this id',
'path' => 'src/Controller/CentreController.php',
]);
}
$centreMutuelle->setIdMutuelle($mutuelle);
$centreMutuelle->setIdCentre($centre);
$checkIfNull = $this->getDoctrine()->getRepository(CentreMutuelle::class)
->findOneBy(['id_mutuelle' => $mutuelle, 'id_centre' => $data["id_centre"]]);
if ($checkIfNull) {
return $this->json([
'message' => 'Error, mutuelle already found at this id',
'path' => 'src/Controller/CentreController.php',
]);
}
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($centreMutuelle);
}
$entityManager->flush();
return $this->json([
"centre" => $centre->getId(),
"mutuelles" => $data["mutuelleList"],
]);
}
/**
* @Route("/update/audio-center", name="updateAudioCentre", methods={"POST"})
*/
public function updateAudioCentre(Request $request, PublicFunction $publicFunction, StripeService $stripeService): Response
{
/*return $this->json([
'message' => '',
"status" => 200
], 200);
*/
$data = json_decode($request->getContent(), true);
$entityManager = $this->getDoctrine()->getManager();
/* "adeli": ""!empty,
"civilite": "",
"lastname": "",
"name": "",
"imgUrl": "",
*/
$audio = $this->getDoctrine()
->getRepository(Audio::class)
->find($data['audioId']);
$centre = $this->getDoctrine()
->getRepository(Centre::class)
->find($data['centerId']);
$audio->setDescription($data['descriptionAudio']);
// diplomes
if (isset($data["audio"]["0"]["diplome"]) && !empty($data["audio"]["0"]["diplome"])) {
foreach ($data["audio"]["0"]["diplome"] as $diplomeObject) {
$diplome = $this->getDoctrine()
->getRepository(Diplome::class)
->findOneBy(['id' => $diplomeObject["id"]]);
if ($diplome == null) {
/*$audioDiplome = new AudioDiplome();
if(isset($diplomeObject["year"]))
{
if(!empty($diplomeObject["year"]))
{
$audioDiplome->setYear($diplomeObject["year"]);
}
}
$audioDiplome->setUrl($diplomeObject["url"]);
$audioDiplome->setOther($data['otherdDiplom'][$key]);
$audioDiplome->setIdAudio($audio);
$entityManager->persist($audioDiplome);*/
return $this->json([
'message' => 'Error, no diplome found at this id ' . $diplomeObject["id"],
'path' => 'src/Controller/AudioController.php',
"status" => 401
], 401);
} else {
$audioDiplome = new AudioDiplome();
if (isset($diplomeObject["year"])) {
if (!empty($diplomeObject["year"])) {
$audioDiplome->setYear($diplomeObject["year"]);
}
}
//$audioDiplome->setUrl($diplomeObject["url"]);
$audioDiplome->setIdDiplome($diplome);
$audioDiplome->setIdAudio($audio);
$entityManager->persist($audioDiplome);
}
}
}
// experiences
if (isset($data["audio"]["0"]["experiences"]) && !empty($data["audio"]["0"]["experiences"])) {
foreach ($data["audio"]["0"]["experiences"] as $experience) {
$audioSpecialite = new ExperiencePro();
$audioSpecialite->setDate(\DateTime::createFromFormat("d/m/Y", $experience["date"]));
$audioSpecialite->setPoste($experience["poste"]);
$audioSpecialite->setCompany($experience["company"]);
$audioSpecialite->setIdAudio($audio);
$entityManager->persist($audioSpecialite);
}
}
// prestation
if (isset($data["prestation"]) && !empty($data["prestation"])) {
foreach ($data["prestation"] as $prestationId) {
$prestation = $this->getDoctrine()
->getRepository(Prestation::class)
->findOneBy(['id' => $prestationId]);
$centrePrestation = new CentrePrestation();
$centrePrestation->setIdPrestation($prestation);
$centrePrestation->setIdCentre($centre);
$entityManager->persist($centrePrestation);
}
}
// spetialites
foreach ($data["audio"]["0"]["specialite"] as $specialiteId) {
$specialite = $this->getDoctrine()
->getRepository(Specialite::class)
->findOneBy(['id' => $specialiteId]);
if (isset($data["autre_special_text"]) && !empty($data["autre_special_text"])) {
$audioSpecialite = new AudioSpecialite();
// $audioSpecialite->setIdSpecialite($specialite);
$audioSpecialite->setIdAudio($audio);
$audioSpecialite->setIdAudio($audio);
$entityManager->persist($audioSpecialite);
}
if ($specialite == null) {
return $this->json([
'message' => 'Error, no specialite found at this id ' . $specialiteId,
'path' => 'src/Controller/AudioController.php',
"status" => 401
], 401);
} else {
$audioSpecialite = new AudioSpecialite();
$audioSpecialite->setIdSpecialite($specialite);
$audioSpecialite->setIdAudio($audio);
$entityManager->persist($audioSpecialite);
}
}
if (isset($data["mutuelle"]))
foreach ($data["mutuelle"] as $mutuelleObject) {
$mutuelle = $this->getDoctrine()
->getRepository(Mutuelle::class)
->findOneBy(['id' => $mutuelleObject]);
if ($mutuelle == null) {
return new Response(json_encode([
'message' => 'Error, no mutuelle found at this id ' . $mutuelleObject,
'path' => 'src/Controller/CentreController.php',
]));
} else {
$centreMutuelle = new CentreMutuelle();
$centreMutuelle->setIdMutuelle($mutuelle);
$centreMutuelle->setIdCentre($centre);
if (isset($data["otherMutuelle"]) && $mutuelle->getLibelle() == "Autres")
$centreMutuelle->setOther(json_encode($data["otherMutuelle"], JSON_FORCE_OBJECT));
$entityManager->persist($centreMutuelle);
}
}
//other spetiality
if (isset($data["otherSpetiality"]) && !empty($data["otherSpetiality"])) {
$audioSpecialite = new AudioSpecialite();
// $audioSpecialite->setIdSpecialite($specialite);
$audioSpecialite->setIdAudio($audio);
$audioSpecialite->setOther(json_encode($data["otherSpetiality"], JSON_FORCE_OBJECT));
$entityManager->persist($audioSpecialite);
}
if (isset($data["tier"]))
foreach ($data["tier"] as $tierObject) {
$tier = $this->getDoctrine()
->getRepository(Tier::class)
->findOneBy(['id' => $tierObject]);
if ($tier == null) {
return new Response(json_encode([
'message' => 'Error, no tier found at this id ' . $tierObject,
'path' => 'src/Controller/CentreController.php',
]));
} else {
$centreTier = new CentreTier();
$centreTier->setIdTier($tier);
$centreTier->setIdCentre($centre);
$entityManager->persist($centreTier);
}
}
if (isset($data["access"]) && !empty($data["access"])) {
$accessCentre = $this->getDoctrine()
->getRepository(AccessCentre::class)
->findOneBy(['id_centre' => $centre]);
if (!$accessCentre) {
$accessCentre = new AccessCentre();
} // add the acces to center
foreach ($data["access"] as $accessData) {
if (isset($accessData["metro"]))
$accessCentre->setMetro(json_encode($accessData["metro"], JSON_FORCE_OBJECT));
if (isset($accessData["bus"]))
$accessCentre->setBus(json_encode($accessData["bus"], JSON_FORCE_OBJECT));
if (isset($accessData["tram"]))
$accessCentre->setTram(json_encode($accessData["tram"], JSON_FORCE_OBJECT));
if (isset($accessData["rer"]))
$accessCentre->setRer(json_encode($accessData["rer"], JSON_FORCE_OBJECT));
if (isset($accessData["parkingPublic"]))
$accessCentre->setParkingPublic(json_encode($accessData["parkingPublic"], JSON_FORCE_OBJECT));
if (isset($accessData["parkingPrive"]))
$accessCentre->setParkingPrivate(json_encode($accessData["parkingPrive"], JSON_FORCE_OBJECT));
if (isset($accessData["other"]))
$accessCentre->setOther(json_encode($accessData["other"], JSON_FORCE_OBJECT));
}
$accessCentre->setIdCentre($centre);
$entityManager->persist($accessCentre);
}
$centre->setDescription($data['descriptionCentre']);
$entityManager->persist($audio);
$entityManager->flush();
return $this->json([
'message' => '',
"status" => 200
], 200);
}
/**
* @Route("/centre", name="postCentre", methods={"POST"})
*/
public function postCentre(Request $request, PublicFunction $publicFunction, StripeService $stripeService): Response
{
$data = json_decode($request->getContent(), true);
$requestData = [
"name" => $data["audio"][0]["name"],
"email" => $data["audio"][0]["mail"],
"address" => $data["address"],
"quantity" => $data["quantity"],
"price" => $data["price"]["finalPrice"] ?? $data["price"],
"recurring" => ($data["price"]["recurring"] === "monthly") ? "month" : (($data["price"]["recurring"] === "yearly") ? "year" : $data["price"]["recurring"]),
"paymentMethodId" => $data["paymentMethodId"],
"offerName" => $data["plan"]["planName"]
];
$createSubscription = $stripeService->createSubscriptionStripe($requestData);
$centre = new Centre();
$resultAudio = new ArrayCollection();
$gerant = null;
if ($data['gerant'] !== "") {
$gerant = $this->getDoctrine()
->getRepository(Audio::class)
->find($data['gerant']);
}
if (isset($data["audio"])) {
$entityManager = $this->getDoctrine()->getManager();
foreach ($data["audio"] as $key => $audioMap) {
// check if audio exist to collect on new center
if ($audioMap['registredAudio'] !== "") {
$audio = $this->getDoctrine()
->getRepository(Audio::class)
->find($audioMap['registredAudio']);
$audioCentre = new AudioCentre();
$audioCentre->setIdAudio($audio);
$audioCentre->setIdCentre($centre);
$audioCentre->setIsConfirmed(true);
$audioCentre->setHoraire($publicFunction->centreHoraire2);
$entityManager->persist($audioCentre);
} else {
$role = $this->getDoctrine()
->getRepository(Role::class)
->find($audioMap["role"]);
$audio = new Audio();
$audio->setCivilite($audioMap["civilite"]);
$audio->setName($audioMap["lastname"]);
$audio->setLastname($audioMap["name"]);
$audio->setBirthdate(\DateTime::createFromFormat("d/m/Y", $audioMap["birthdate"]));
$audio->setRole($role);
$audio->setSignupDate(new \DateTime());
// set notification by default selected
$audio->setConfirmRdvMail(true);
$audio->setConfirmRdvSms(true);
$audio->setModifRdvMail(true);
$audio->setModifRdvSms(true);
$audio->setModifNote(true);
$audioMailTest = $this->getDoctrine()
->getRepository(Audio::class)
->findOneBy(['mail' => $audioMap["mail"]]);
if ($audioMailTest)
return $this->json([
'message' => 'Audio mail',
'mail' => $audioMap["mail"],
'path' => 'src/Controller/AudioController.php',
"status" => 402
], 401);
$audio->setMail($audioMap["mail"]);
$audioPhoneTest = $this->getDoctrine()
->getRepository(Audio::class)
->findOneBy(['phone' => $audioMap["phone"]]);
if ($audioPhoneTest)
return $this->json([
'message' => 'Audio phone',
'phone' => $audioMap["phone"],
'path' => 'src/Controller/AudioController.php',
"status" => 403
], 401);
$audio->setPhone($audioMap["phone"]);
//$audio->setAdeli($audioMap["adeli"]);
if ($data["isImported"] !== '')
$audio->setCodeParrainage($data["isImported"]);
$audio->setIsIndie(false);
// set default pass for audio inserted
$audioMap["password"] !== "" ? $audio->setPassword(password_hash($audioMap["password"], PASSWORD_DEFAULT)) : $audio->setPassword(password_hash("myaudio2023", PASSWORD_DEFAULT));
$audio->setPin($audioMap["pin"]);
// $audio->setDescription($audioMap["description"]);
if (isset($audioMap["imgUrl"]))
$audio->setImgUrl($audioMap["imgUrl"]);
$entityManager = $this->getDoctrine()->getManager();
foreach ($audioMap["diplome"] as $diplomeObject) {
$diplome = $this->getDoctrine()
->getRepository(Diplome::class)
->findOneBy(['id' => $diplomeObject["id"]]);
if ($diplome == null) {
/*$audioDiplome = new AudioDiplome();
if(isset($diplomeObject["year"]))
{
if(!empty($diplomeObject["year"]))
{
$audioDiplome->setYear($diplomeObject["year"]);
}
}
$audioDiplome->setUrl($diplomeObject["url"]);
$audioDiplome->setOther($data['otherdDiplom'][$key]);
$audioDiplome->setIdAudio($audio);
$entityManager->persist($audioDiplome);*/
return $this->json([
'message' => 'Error, no diplome found at this id ' . $diplomeObject["id"],
'path' => 'src/Controller/AudioController.php',
"status" => 401
], 401);
} else {
$audioDiplome = new AudioDiplome();
if (isset($diplomeObject["year"])) {
if (!empty($diplomeObject["year"])) {
$audioDiplome->setYear($diplomeObject["year"]);
}
}
$audioDiplome->setUrl($diplomeObject["url"]);
$audioDiplome->setIdDiplome($diplome);
$audioDiplome->setIdAudio($audio);
$entityManager->persist($audioDiplome);
}
}
foreach ($audioMap["experiences"] as $experience) {
$audioSpecialite = new ExperiencePro();
$audioSpecialite->setDate(\DateTime::createFromFormat("d/m/Y", $experience["date"]));
$audioSpecialite->setPoste($experience["poste"]);
$audioSpecialite->setCompany($experience["company"]);
$audioSpecialite->setIdAudio($audio);
$entityManager->persist($audioSpecialite);
}
foreach ($audioMap["specialite"] as $specialiteId) {
$specialite = $this->getDoctrine()
->getRepository(Specialite::class)
->findOneBy(['id' => $specialiteId]);
if (isset($audioMap["autre_special_text"])) {
$audioSpecialite = new AudioSpecialite();
// $audioSpecialite->setIdSpecialite($specialite);
$audioSpecialite->setIdAudio($audio);
$audioSpecialite->setIdAudio($audio);
$entityManager->persist($audioSpecialite);
}
if ($specialite == null) {
return $this->json([
'message' => 'Error, no specialite found at this id ' . $specialiteId,
'path' => 'src/Controller/AudioController.php',
"status" => 401
], 401);
} else {
$audioSpecialite = new AudioSpecialite();
$audioSpecialite->setIdSpecialite($specialite);
$audioSpecialite->setIdAudio($audio);
$entityManager->persist($audioSpecialite);
}
}
// $entityManager->persist($audio);
$entityManager->persist($this->createPermanantMotif(60, "#FF00FF", $audio, 1, 1));
$entityManager->persist($this->createPermanantMotif(90, "#00FFFF", $audio, 2, 1));
$entityManager->persist($this->createPermanantMotif(30, "#FFFF00", $audio, 3, 1));
$entityManager->persist($this->createPermanantMotif(60, "#FF0000", $audio, 4, 1));
$entityManager->persist($this->createPermanantMotif(60, "#FFCC59", $audio, 69, 2));
$entityManager->persist($this->createPermanantMotif(30, "#33B679", $audio, 106, 1));
$entityManager->persist($this->createPermanantMotif(30, "#F6BF25", $audio, 107, 1));
$entityManager->persist($this->createPermanantMotif(30, "#E67C73", $audio, 108, 1));
$entityManager->persist($this->createPermanantMotif(30, "#7886CB", $audio, 109, 1));
// $entityManager->persist($this->createPermanantMotif(60, "#FF0000", $audio, 5));
$entityManager->persist($audio);
if ($gerant == null) $gerant = $audio;
$audioCentre = new AudioCentre();
$audioCentre->setIdAudio($audio);
$audioCentre->setIdCentre($centre);
$audioCentre->setIsConfirmed(true);
$audioCentre->setHoraire($publicFunction->centreHoraire2);
$centerHoliday = json_decode($publicFunction->centreHoraire4, true);
$audioCentre->setHorairesHoliday($centerHoliday);
$entityManager->persist($audioCentre);
// SEN MAIL NOTIF JUST FOR AUDIOS ADDED NOT FOR GERANT
if ($key !== 0) {
// GENERATE TOKEN & AUDIO ADDED MAIL CONFIRM
$tokenString = $publicFunction->generateRandomString(30);
$params = array(
"lien" => "{$_ENV['BASE_client']}confirmation_email/{$audio->getMail()}?token={$tokenString}",
"nom" => "{$audio->getLastName()}",
"texte" => "Veuillez cliquer sur le bouton ci-dessous pour confirmer votre adresse mail",
"titre" => "Confirmer mon email",
"bouton" => "Confirmer mon Email",
);
$publicFunction->sendEmail($params, $audio->getMail(), $audio->getName() . ' ' . $audio->getLastName(), "Confirmation d'inscription sur My Audio Pro", 122);
$token = new Token();
$token->setCreationDate(new DateTime());
$token->setToken($tokenString);
$token->setMail($audio->getMail());
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($token);
// $entityManager->flush();
}
}
$resultAudio->add([
"id" => $audio->getId(),
"civilite" => $audio->getCivilite(),
"name" => $audio->getName(),
"lastname" => $audio->getLastname(),
"birthdate" => $audio->getBirthdate(),
"mail" => $audio->getMail(),
"phone" => $audio->getPhone(),
"adeli" => $audio->getAdeli(),
"pin" => $audio->getPin(),
"description" => $audio->getDescription(),
"imgUrl" => $audio->getImgUrl(),
]);
}
} else {
return new Response(json_encode([
'message' => 'Error, no audio found',
'path' => 'src/Controller/CentreController.php',
]), 404);
}
// generate color code
$colors = array(
"#FFC0CB", // Pink
"#FFD700", // Gold
"#90EE90", // Light Green
"#87CEFA", // Light Sky Blue
"#FFA07A", // Light Salmon
"#F0E68C", // Khaki
"#B0C4DE", // Light Steel Blue
"#98FB98", // Pale Green
"#FFB6C1", // Light Pink
"#ADD8E6", // Light Blue
"#FF69B4", // Hot Pink
"#FFA500", // Orange
"#00FF7F", // Spring Green
"#AFEEEE", // Pale Turquoise
"#FF8C00", // Dark Orange
"#FFE4B5", // Moccasin
"#00CED1", // Dark Turquoise
"#7FFFD4", // Aquamarine
"#FF4500", // Orange Red
"#00FA9A", // Medium Spring Green
"#FFF0F5", // Lavender Blush
"#00BFFF", // Deep Sky Blue
"#FF6347", // Tomato
"#20B2AA", // Light Sea Green
"#FFFF00", // Yellow
"#32CD32", // Lime Green
"#FFF5EE", // Seashell
"#1E90FF", // Dodger Blue
"#CD5C5C", // Indian Red
"#8FBC8F", // Dark Sea Green
"#F0FFFF", // Azure
"#4169E1", // Royal Blue
"#FF8B00", // Dark Orange
"#66CDAA", // Medium Aquamarine
"#FFFACD", // Lemon Chiffon
"#6495ED", // Cornflower Blue
"#FF7F50", // Coral
"#00FF00", // Lime
"#FAFAD2", // Light Goldenrod Yellow
"#87CEEB", // Sky Blue
"#DC143C", // Crimson
"#2E8B57", // Sea Green
"#F5DEB3", // Wheat
"#4682B4", // Steel Blue
"#CD853F", // Peru
"#8A2BE2", // Blue Violet
"#D2691E", // Chocolate
"#6A5ACD", // Slate Blue
"#F5F5DC", // Beige
"#7B68EE", // Medium Slate Blue
);
// short initial
$name = $data['name'];
$words = explode(' ', $name);
$initials = '';
foreach ($words as $word) {
$initials .= strtoupper(substr($word, 0, 1));
}
$initials = strtoupper($initials);
$shortName = substr($initials, 0, 2);
$randomColor = $colors[array_rand($colors)];
// generate slug url
$slug = $this->slugger->slug($data["name"])->lower();
$centre->setName($data["name"]);
$slugify = $this->getDoctrine()
->getRepository(Centre::class)
->findOneBy(array('slug' => $slug));
if ($slugify) {
$centre->setSlug($slug . "-1");
} else {
$centre->setSlug($slug);
}
if (isset($data["imgUrl"]))
$centre->setImgUrl($data["imgUrl"]);
if (isset($data["finessURL"]))
$centre->setFinessUrl($data["finessURL"]);
$centre->setIsRdvDomicile($data["isRdvDomicile"]);
$centre->setIdGerant($gerant);
$centre->setAddress($data["address"]);
$centre->setPostale($data["postal"]);
$centre->setCity($data["city"]);
$centre->setFiness($data["finess"]);
$centre->setSiret($data["siret"]);
$centre->setInitial($shortName);
$centre->setWebsite($data["website"]);
$centre->setSignupDate(new \DateTime());
$centre->setCalendarColor($randomColor);
// set the galeries for images by default
// Define an array of default image URLs
$defaultImages = ["by-default-1.jpeg", "by-default-2.jpeg", "by-default-3.jpeg"];
// Iterate through each default image
foreach ($defaultImages as $imageUrl) {
$centerImage = new CenterImage();
$centerImage->setType("image");
$centerImage->setUrl($imageUrl);
// Associate the center image with the current center
$centerImage->setCenter($centre);
$entityManager->persist($centerImage);
}
/*$centrePhoneTest = $this->getDoctrine()
->getRepository(Centre::class)
->findOneBy(['phone' => $data["phone"]]);
if ($centrePhoneTest)
return $this->json([
'message' => 'Centre phone',
'path' => 'src/Controller/CentreController.php',
"status" => 401
], 401);*/
$centre->setPhone($data["phone"]);
$centre->setIsHandicap($data["isHandicap"]);
$centre->setLongitude($data["longitude"]);
$centre->setLatitude($data["latitude"]);
$centre->setHoraire($publicFunction->centreHoraire2);
$centerHoliday = json_decode($publicFunction->centreHoraire4, true);
$centre->setHorairesHoliday($centerHoliday);
$entityManager = $this->getDoctrine()->getManager();
//add the centre access
if (isset($data["mutuelle"]))
foreach ($data["mutuelle"] as $mutuelleObject) {
$mutuelle = $this->getDoctrine()
->getRepository(Mutuelle::class)
->findOneBy(['id' => $mutuelleObject]);
if ($mutuelle == null) {
return new Response(json_encode([
'message' => 'Error, no mutuelle found at this id ' . $mutuelleObject,
'path' => 'src/Controller/CentreController.php',
]));
} else {
$centreMutuelle = new CentreMutuelle();
$centreMutuelle->setIdMutuelle($mutuelle);
$centreMutuelle->setIdCentre($centre);
if (isset($data["otherMutuelle"]) && $mutuelle->getLibelle() == "Autres")
$centreMutuelle->setOther(json_encode($data["otherMutuelle"], JSON_FORCE_OBJECT));
$entityManager->persist($centreMutuelle);
}
}
//other spetiality
if (isset($data["otherSpetiality"])) {
$audioSpecialite = new AudioSpecialite();
// $audioSpecialite->setIdSpecialite($specialite);
$audioSpecialite->setIdAudio($audio);
$audioSpecialite->setOther(json_encode($data["otherSpetiality"], JSON_FORCE_OBJECT));
$entityManager->persist($audioSpecialite);
}
if (isset($data["tier"]))
foreach ($data["tier"] as $tierObject) {
$tier = $this->getDoctrine()
->getRepository(Tier::class)
->findOneBy(['id' => $tierObject]);
if ($tier == null) {
return new Response(json_encode([
'message' => 'Error, no tier found at this id ' . $tierObject,
'path' => 'src/Controller/CentreController.php',
]));
} else {
$centreTier = new CentreTier();
$centreTier->setIdTier($tier);
$centreTier->setIdCentre($centre);
$entityManager->persist($centreTier);
}
}
/* if (isset($data["prestation"]))
foreach ($data["prestation"] as $prestationId) {
$prestation = $this->getDoctrine()
->getRepository(Prestation::class)
->findOneBy(['id' => $prestationId]);
if ($prestation == null) {
return new Response(json_encode([
'message' => 'Error, no prestation found at this id ' . $prestationId,
'path' => 'src/Controller/CentreController.php',
]));
} else {
$centrePrestation = new CentrePrestation();
$centrePrestation->setIdPrestation($prestation);
$centrePrestation->setIdCentre($centre);
$entityManager->persist($centrePrestation);
}
}*/
$entityManager->persist($centre);
// for audio on multi centre creation
$accessCentre = new AccessCentre();
// $accessData = $data["access"];
// add the acces to center
foreach ($data["access"] as $accessData) {
if (isset($accessData["metro"]))
$accessCentre->setMetro(json_encode($accessData["metro"], JSON_FORCE_OBJECT));
if (isset($accessData["bus"]))
$accessCentre->setBus(json_encode($accessData["bus"], JSON_FORCE_OBJECT));
if (isset($accessData["tram"]))
$accessCentre->setTram(json_encode($accessData["tram"], JSON_FORCE_OBJECT));
if (isset($accessData["rer"]))
$accessCentre->setRer(json_encode($accessData["rer"], JSON_FORCE_OBJECT));
if (isset($accessData["parkingPublic"]))
$accessCentre->setParkingPublic(json_encode($accessData["parkingPublic"], JSON_FORCE_OBJECT));
if (isset($accessData["parkingPrivate"]))
$accessCentre->setParkingPrivate(json_encode($accessData["parkingPrivate"], JSON_FORCE_OBJECT));
if (isset($accessData["other"]))
$accessCentre->setOther(json_encode($accessData["other"], JSON_FORCE_OBJECT));
}
$accessCentre->setIdCentre($centre);
$entityManager->persist($accessCentre);
$entityManager->flush();
// save print setting
$setting = new Setting();
$setting->setName($data["name"]);
$setting->setAddress($data["address"]);
$setting->setPhone($data["phone"]);
$setting->setLogoUrl($centre->getImgUrl());
$setting->setWebsite($data["website"]);
$setting->setFirstname($audio->getName());
$setting->setLastname($audio->getLastname());
$setting->setEmail($gerant->getMail());
$setting->setSeuilCaDroite(true);
$setting->setSeuilCaGauche(true);
$setting->setSeuilConfortDroite(true);
$setting->setSeuilConfortGauche(true);
$setting->setSeuilinconfortDroite(true);
$setting->setSeuilInConfortGauche(true);
$setting->setSeuilCoDroite(true);
$setting->setSeuilCoGauche(true);
$setting->setSeuilCaMaskingDroite(true);
$setting->setSeuilCaMaskingGauche(true);
$setting->setSeuilCoMaskingDroite(true);
$setting->setSeuilCoMaskingGauche(true);
/* $setting->setCasqueDroite(false);
$setting->setCasqueGauche(false);
$setting->setCasqueBinaural(false);
$setting->setChampsLibreDroite(false);
$setting->setChampsLibreGauche(false);
$setting->setChampsLibreBinaural(false);
$setting->setChampsLibreAppDroite(false);
$setting->setChampsLibreAppGauche(false);
$setting->setChampsLibreAppBinaural(false);*/
$setting->setCasqueDroite(true);
$setting->setCasqueGauche(true);
$setting->setCasqueBinaural(true);
$setting->setChampsLibreDroite(true);
$setting->setChampsLibreGauche(true);
$setting->setChampsLibreBinaural(true);
$setting->setChampsLibreAppDroite(true);
$setting->setChampsLibreAppGauche(true);
$setting->setChampsLibreAppBinaural(true);
$setting->setCentre($centre);
$entityManager->persist($setting);
$entityManager->flush();
//envoi mail de confirmation d'email au gérant.
$tokenString = $publicFunction->generateRandomString(30);
$params = array(
"lien" => "{$_ENV['BASE_client']}confirmation_email/{$gerant->getMail()}?token={$tokenString}",
"nom" => "{$gerant->getLastName()}",
"texte" => "Veuillez cliquer sur le bouton ci-dessous pour confirmer votre adresse mail",
"titre" => "Confirmer mon email",
"bouton" => "Confirmer mon Email",
);
$publicFunction->sendEmail($params, $gerant->getMail(), $gerant->getName() . ' ' . $gerant->getLastName(), "Confirmation d'inscription sur My Audio Pro", 122);
$token = new Token();
$token->setCreationDate(new DateTime());
$token->setToken($tokenString);
$token->setMail($gerant->getMail());
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($token);
$entityManager->flush();
$user = [
"prenomAudioprothesiste" => $gerant->getName(),
"urlDemo" => "https://calendar.google.com/calendar/u/0/appointments/schedules/AcZssZ0Ry72UDE9m8d2IylSycOMQVerlY0jHt1DLWFD6Pso4hg79sQ9nUAlxtZYOPH6wSubDX4vqVQWh",
];
// we send parametre for the trait methid
$params = $this->emailNotificationDemoService->prepareEmailParams($user);
// send email notifcation
$this->emailNotificationDemoService->sendEmail($params, $gerant->getMail(), 'Organisez votre Démo personnalisée de My Audio Pro', 143);
// set order datable patient
$this->orderPatient->createOrderPatient($audio);
return new Response(json_encode([
"id" => $centre->getId(),
"name" => $centre->getName(),
"imgUrl" => $centre->getImgUrl(),
"isRdvDomicile" => $centre->getIsRdvDomicile(),
"audio_id" => $centre->getIdGerant()->getId(),
"address" => $centre->getAddress(),
"postale" => $centre->getPostale(),
"city" => $centre->getCity(),
"finess" => $centre->getFiness(),
"siret" => $centre->getSiret(),
"website" => $centre->getWebsite(),
"phone" => $centre->getPhone(),
"isHandicap" => $centre->getIsHandicap(),
"audio" => $resultAudio->toArray(),
"centerId" => $centre->getId(),
"audioId" => $audio->getId(),
"status" => 200,
]));
}
/**
* @Route("/centre/new-inscription", name="postCentreNewInscription", methods={"POST"})
*/
public function postCentreNewInscription(Request $request, PublicFunction $publicFunction, StripeService $stripeService, SubscriptionService $subscrition): Response
{
$data = json_decode($request->getContent(), true);
$requestData = [
"name" => $data["audio"][0]["name"],
"email" => $data["audio"][0]["mail"],
"address" => $data["address"],
"quantity" => $data["quantity"],
"price" => $data["price"]["finalPrice"] ?? $data["price"],
"recurring" => ($data["price"]["recurring"] === "monthly") ? "month" : (($data["price"]["recurring"] === "yearly") ? "year" : $data["price"]["recurring"]),
"paymentMethodId" => $data["paymentMethodId"],
"offerName" => $data["plan"]["planName"],
];
$createSubscription = $stripeService->createSubscriptionStripe($requestData);
// dd($createSubscription);
$centre = new Centre();
$resultAudio = new ArrayCollection();
$gerant = null;
if ($data['gerant'] !== "") {
$gerant = $this->getDoctrine()
->getRepository(Audio::class)
->find($data['gerant']);
}
if (isset($data["audio"])) {
$entityManager = $this->getDoctrine()->getManager();
foreach ($data["audio"] as $key => $audioMap) {
// check if audio exist to collect on new center
if ($audioMap['registredAudio'] !== "") {
$audio = $this->getDoctrine()
->getRepository(Audio::class)
->find($audioMap['registredAudio']);
$audioCentre = new AudioCentre();
$audioCentre->setIdAudio($audio);
$audioCentre->setIdCentre($centre);
$audioCentre->setIsConfirmed(true);
$audioCentre->setHoraire($publicFunction->centreHoraire2);
$entityManager->persist($audioCentre);
} else {
$role = $this->getDoctrine()
->getRepository(Role::class)
->find($audioMap["role"]);
$audio = new Audio();
$audio->setBirthdate(\DateTime::createFromFormat("d/m/Y", $audioMap["birthdate"]));
$audio->setRole($role);
$audio->setSignupDate(new \DateTime());
$audio->setAdeli($data["audio"]["0"]["adeli"]);
$audio->setCivilite($data["audio"]["0"]["civilite"]);
$audio->setLastName($data["audio"]["0"]["lastname"]);
$audio->setName($data["audio"]["0"]["name"]);
// set notification by default selected
$audio->setConfirmRdvMail(true);
$audio->setConfirmRdvSms(true);
$audio->setModifRdvMail(true);
$audio->setModifRdvSms(true);
$audio->setModifNote(true);
$audioMailTest = $this->getDoctrine()
->getRepository(Audio::class)
->findOneBy(['mail' => $audioMap["mail"]]);
/*if ($audioMailTest)
return $this->json([
'message' => "L'adresse e-mail est déjà enregistrée.",
'mail' => $audioMap["mail"],
'code' => "mail_exist",
'status' => 409
], 500); */
$audio->setMail($audioMap["mail"]);
$audioPhoneTest = $this->getDoctrine()
->getRepository(Audio::class)
->findOneBy(['phone' => $audioMap["phone"]]);
/*if ($audioPhoneTest)
return $this->json([
'message' => 'Le numéro de téléphone est déjà enregistré.',
'phone' => $audioMap["phone"],
'code' => "phone_exist",
'status' => 409
], 500); */
$audio->setPhone($audioMap["phone"]);
//$audio->setAdeli($audioMap["adeli"]);
if ($data["isImported"] !== '')
$audio->setCodeParrainage($data["isImported"]);
$audio->setIsIndie(false);
// set default pass for audio inserted
$audioMap["password"] !== "" ? $audio->setPassword(password_hash($audioMap["password"], PASSWORD_DEFAULT)) : $audio->setPassword(password_hash("myaudio2023", PASSWORD_DEFAULT));
$audio->setPin($audioMap["pin"]);
// $audio->setDescription($audioMap["description"]);
if (isset($audioMap["imgUrl"]))
$audio->setImgUrl($audioMap["imgUrl"]);
$entityManager = $this->getDoctrine()->getManager();
foreach ($audioMap["diplome"] as $diplomeObject) {
$diplome = $this->getDoctrine()
->getRepository(Diplome::class)
->findOneBy(['id' => $diplomeObject["id"]]);
if ($diplome == null) {
/*$audioDiplome = new AudioDiplome();
if(isset($diplomeObject["year"]))
{
if(!empty($diplomeObject["year"]))
{
$audioDiplome->setYear($diplomeObject["year"]);
}
}
$audioDiplome->setUrl($diplomeObject["url"]);
$audioDiplome->setOther($data['otherdDiplom'][$key]);
$audioDiplome->setIdAudio($audio);
$entityManager->persist($audioDiplome);*/
return $this->json([
'message' => 'Error, no diplome found at this id ' . $diplomeObject["id"],
'path' => 'src/Controller/AudioController.php',
"status" => 401
], 401);
} else {
$audioDiplome = new AudioDiplome();
if (isset($diplomeObject["year"])) {
if (!empty($diplomeObject["year"])) {
$audioDiplome->setYear($diplomeObject["year"]);
}
}
$audioDiplome->setUrl($diplomeObject["url"]);
$audioDiplome->setIdDiplome($diplome);
$audioDiplome->setIdAudio($audio);
$entityManager->persist($audioDiplome);
}
}
// $entityManager->persist($audio);
$entityManager->persist($this->createPermanantMotif(60, "#FF00FF", $audio, 1, 1));
$entityManager->persist($this->createPermanantMotif(90, "#00FFFF", $audio, 2, 1));
$entityManager->persist($this->createPermanantMotif(30, "#FFFF00", $audio, 3, 1));
$entityManager->persist($this->createPermanantMotif(60, "#FF0000", $audio, 4, 1));
$entityManager->persist($this->createPermanantMotif(60, "#FFCC59", $audio, 69, 2));
$entityManager->persist($this->createPermanantMotif(30, "#33B679", $audio, 106, 1));
$entityManager->persist($this->createPermanantMotif(30, "#F6BF25", $audio, 107, 1));
$entityManager->persist($this->createPermanantMotif(30, "#E67C73", $audio, 108, 1));
$entityManager->persist($this->createPermanantMotif(30, "#7886CB", $audio, 109, 1));
// $entityManager->persist($this->createPermanantMotif(60, "#FF0000", $audio, 5));
$entityManager->persist($audio);
if ($gerant == null) $gerant = $audio;
$audioCentre = new AudioCentre();
$audioCentre->setIdAudio($audio);
$audioCentre->setIdCentre($centre);
$audioCentre->setIsConfirmed(true);
$audioCentre->setHoraire($publicFunction->centreHoraire2);
$centerHoliday = json_decode($publicFunction->centreHoraire4, true);
$audioCentre->setHorairesHoliday($centerHoliday);
$entityManager->persist($audioCentre);
// SEN MAIL NOTIF JUST FOR AUDIOS ADDED NOT FOR GERANT
// $entityManager->flush();
}
$resultAudio->add([
"id" => $audio->getId(),
"civilite" => $audio->getCivilite(),
"name" => $audio->getName(),
"lastname" => $audio->getLastname(),
"birthdate" => $audio->getBirthdate(),
"mail" => $audio->getMail(),
"phone" => $audio->getPhone(),
"adeli" => $audio->getAdeli(),
"pin" => $audio->getPin(),
"description" => $audio->getDescription(),
"imgUrl" => $audio->getImgUrl(),
]);
}
} else {
return new Response(json_encode([
'message' => 'Error, no audio found',
'path' => 'src/Controller/CentreController.php',
]), 404);
}
// generate color code
$colors = array(
"#FFC0CB", // Pink
"#FFD700", // Gold
"#90EE90", // Light Green
"#87CEFA", // Light Sky Blue
"#FFA07A", // Light Salmon
"#F0E68C", // Khaki
"#B0C4DE", // Light Steel Blue
"#98FB98", // Pale Green
"#FFB6C1", // Light Pink
"#ADD8E6", // Light Blue
"#FF69B4", // Hot Pink
"#FFA500", // Orange
"#00FF7F", // Spring Green
"#AFEEEE", // Pale Turquoise
"#FF8C00", // Dark Orange
"#FFE4B5", // Moccasin
"#00CED1", // Dark Turquoise
"#7FFFD4", // Aquamarine
"#FF4500", // Orange Red
"#00FA9A", // Medium Spring Green
"#FFF0F5", // Lavender Blush
"#00BFFF", // Deep Sky Blue
"#FF6347", // Tomato
"#20B2AA", // Light Sea Green
"#FFFF00", // Yellow
"#32CD32", // Lime Green
"#FFF5EE", // Seashell
"#1E90FF", // Dodger Blue
"#CD5C5C", // Indian Red
"#8FBC8F", // Dark Sea Green
"#F0FFFF", // Azure
"#4169E1", // Royal Blue
"#FF8B00", // Dark Orange
"#66CDAA", // Medium Aquamarine
"#FFFACD", // Lemon Chiffon
"#6495ED", // Cornflower Blue
"#FF7F50", // Coral
"#00FF00", // Lime
"#FAFAD2", // Light Goldenrod Yellow
"#87CEEB", // Sky Blue
"#DC143C", // Crimson
"#2E8B57", // Sea Green
"#F5DEB3", // Wheat
"#4682B4", // Steel Blue
"#CD853F", // Peru
"#8A2BE2", // Blue Violet
"#D2691E", // Chocolate
"#6A5ACD", // Slate Blue
"#F5F5DC", // Beige
"#7B68EE", // Medium Slate Blue
);
// short initial
$name = $data['name'];
$words = explode(' ', $name);
$initials = '';
foreach ($words as $word) {
$initials .= strtoupper(substr($word, 0, 1));
}
$initials = strtoupper($initials);
$shortName = substr($initials, 0, 2);
$randomColor = $colors[array_rand($colors)];
// generate slug url
$slug = $this->slugger->slug($data["name"])->lower();
$centre->setName(strtoupper($data["name"]));
$slugify = $this->getDoctrine()
->getRepository(Centre::class)
->findOneBy(array('slug' => $slug));
if ($slugify) {
$centre->setSlug($slug . "-1");
} else {
$centre->setSlug($slug);
}
if (isset($data["imgUrl"]))
$centre->setImgUrl($data["imgUrl"]);
if (isset($data["finessURL"]))
$centre->setFinessUrl($data["finessURL"]);
$centre->setIsRdvDomicile($data["isRdvDomicile"]);
$centre->setIdGerant($gerant);
$centre->setAddress($data["address"]);
$centre->setPostale($data["postal"]);
$centre->setCity(strtoupper($data["city"]));
$centre->setFiness($data["finess"]);
$centre->setSocialName($data["companyName"]);
$centre->setSiret($data["siret"]);
$centre->setInitial($shortName);
$centre->setWebsite($data["website"]);
$centre->setSignupDate(new \DateTime());
$centre->setCalendarColor($randomColor);
// set the galeries for images by default
// Define an array of default image URLs
$defaultImages = ["by-default-1.jpeg", "by-default-2.jpeg", "by-default-3.jpeg"];
// Iterate through each default image
foreach ($defaultImages as $imageUrl) {
$centerImage = new CenterImage();
$centerImage->setType("image");
$centerImage->setUrl($imageUrl);
// Associate the center image with the current center
$centerImage->setCenter($centre);
$entityManager->persist($centerImage);
}
/*$centrePhoneTest = $this->getDoctrine()
->getRepository(Centre::class)
->findOneBy(['phone' => $data["phone"]]);
if ($centrePhoneTest)
return $this->json([
'message' => 'Centre phone',
'path' => 'src/Controller/CentreController.php',
"status" => 401
], 401);*/
$centre->setPhone($data["phone"]);
$centre->setIsHandicap($data["isHandicap"]);
$centre->setLongitude($data["longitude"]);
$centre->setLatitude($data["latitude"]);
$centre->setHoraire($publicFunction->centreHoraire2);
$centerHoliday = json_decode($publicFunction->centreHoraire4, true);
$centre->setHorairesHoliday($centerHoliday);
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($centre);
// for audio on multi centre creation
$accessCentre = new AccessCentre();
// $accessData = $data["access"];
$entityManager->flush();
// save print setting
$setting = new Setting();
$setting->setName($data["name"]);
$setting->setAddress($data["address"]);
$setting->setPhone($data["phone"]);
$setting->setLogoUrl($centre->getImgUrl());
$setting->setWebsite($data["website"]);
$setting->setFirstname($audio->getName());
$setting->setLastname($audio->getLastname());
$setting->setEmail($gerant->getMail());
$setting->setSeuilCaDroite(true);
$setting->setSeuilCaGauche(true);
$setting->setSeuilConfortDroite(true);
$setting->setSeuilConfortGauche(true);
$setting->setSeuilinconfortDroite(true);
$setting->setSeuilInConfortGauche(true);
$setting->setSeuilCoDroite(true);
$setting->setSeuilCoGauche(true);
$setting->setSeuilCaMaskingDroite(true);
$setting->setSeuilCaMaskingGauche(true);
$setting->setSeuilCoMaskingDroite(true);
$setting->setSeuilCoMaskingGauche(true);
/* $setting->setCasqueDroite(false);
$setting->setCasqueGauche(false);
$setting->setCasqueBinaural(false);
$setting->setChampsLibreDroite(false);
$setting->setChampsLibreGauche(false);
$setting->setChampsLibreBinaural(false);
$setting->setChampsLibreAppDroite(false);
$setting->setChampsLibreAppGauche(false);
$setting->setChampsLibreAppBinaural(false);*/
$setting->setCasqueDroite(true);
$setting->setCasqueGauche(true);
$setting->setCasqueBinaural(true);
$setting->setChampsLibreDroite(true);
$setting->setChampsLibreGauche(true);
$setting->setChampsLibreBinaural(true);
$setting->setChampsLibreAppDroite(true);
$setting->setChampsLibreAppGauche(true);
$setting->setChampsLibreAppBinaural(true);
$setting->setCentre($centre);
$entityManager->persist($setting);
$entityManager->flush();
$tokenString = $publicFunction->generateRandomString(30);
$params = array(
"lien" => "{$_ENV['BASE_client']}confirmation_email/{$data["audio"][0]["mail"]}?token={$tokenString}",
"nom" => "",
"texte" => "Veuillez cliquer sur le bouton ci-dessous pour confirmer votre adresse mail",
"titre" => "Confirmer mon email",
"bouton" => "Confirmer mon Email",
);
$publicFunction->sendEmail($params, $data["audio"][0]["mail"], "myaudio", "Confirmation d'inscription sur My Audio Pro", 122);
$token = new Token();
$token->setCreationDate(new DateTime());
$token->setToken($tokenString);
$token->setMail($audio->getMail());
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($token);
$entityManager->flush();
/* $user = [
"prenomAudioprothesiste" => $gerant->getName(),
"urlDemo" => "https://calendar.google.com/calendar/u/0/appointments/schedules/AcZssZ0Ry72UDE9m8d2IylSycOMQVerlY0jHt1DLWFD6Pso4hg79sQ9nUAlxtZYOPH6wSubDX4vqVQWh",
];
// we send parametre for the trait methid
$params = $this->emailNotificationDemoService->prepareEmailParams($user);
// send email notifcation
$this->emailNotificationDemoService->sendEmail($params, $gerant->getMail(), 'Organisez votre Démo personnalisée de My Audio Pro', 143);
*/
// set order datable patient
$this->orderPatient->createOrderPatient($audio);
$plan = $this->getDoctrine()->getRepository(Plan::class)
->findOneBy(["slug" => $data['plan']["planName"]]);
$dataSubsc = [];
$dataSubsc['created'] = $createSubscription['created'];
$dataSubsc['currentPeriodStart'] = $createSubscription['current_period_start'];
$dataSubsc['currentPeriodEnd'] = $createSubscription['current_period_end'];
$dataSubsc['centerId'] = $centre->getId();
$dataSubsc['audioId'] = $audio->getId();
$dataSubsc['id'] = $createSubscription['id'];
$dataSubsc['invoiceId'] = $createSubscription['latest_invoice']['id'];
$dataSubsc['customer'] = $createSubscription['customer'];
$dataSubsc['payment_method'] = $createSubscription['default_payment_method'];
$dataSubsc['amount'] = $data["price"]["finalPrice"] ?? $data["price"];
$dataSubsc['quantity'] = $data["quantity"];
$dataSubsc['recurring'] = ($data["price"]["recurring"] === "monthly") ? "month" : (($data["price"]["recurring"] === "yearly") ? "year" : $data["price"]["recurring"]);
$dataSubsc['planId'] = $plan->getId();
$dataSubsc['status'] = "succeeded";
//$this->logger->info("stripe end date",["endDate" => $currentPeriodEnd->format('Y-m-d H:i:s')]);
$subscrition->createSubscription($dataSubsc);
//$this->logger->info("databse end date",["endDate" => $sub]);
// generate rdvurl
$name = $centre->getName();
$city = $centre->getCity();
$postal = $centre->getPostale();
$nameSlug = strtolower(preg_replace('/[^a-zA-Z0-9]+/', '-', trim($name)));
$citySlug = strtolower(preg_replace('/[^a-zA-Z0-9]+/', '-', trim($city)));
$baseClient = $_ENV['BASE_client'] ?? 'https://default-client-url.com';
$urlRdv = "{$baseClient}audioprothesiste/{$citySlug}/{$postal}/{$nameSlug}/prise-de-rdvaudioprothesiste-rapide/{$centre->getId()}";
if (!$centre->getUrlRdv() || $centre->getUrlRdv() !== $urlRdv) {
$centre->setUrlRdv($urlRdv);
$entityManager->persist($centre);
$entityManager->flush();
}
// post categorie de contrat cda
$quantity = $data["quantity"];
$contractCategory = $entityManager->getRepository(ContractCategory::class)->find(5);
$plan = $entityManager->getRepository(Plan::class)->find($plan->getId());
if ($contractCategory && $plan && $quantity > 0) {
$specificSubscription = new SpecificSubscription();
$specificSubscription->setContractCategory($contractCategory);
$specificSubscription->setPlan($plan);
$specificSubscription->setQuantity($quantity);
$specificSubscription->setCenter($centre);
$specificSubscription->setStatus(false);
$specificSubscription->setAudio($audio);
$entityManager->persist($specificSubscription);
$entityManager->flush();
}
return $this->json([
"audioId" => $audio->getId(),
"centerId" => $centre->getId(),
"name" => $centre->getName(),
"imgUrl" => $centre->getImgUrl(),
"isRdvDomicile" => $centre->getIsRdvDomicile(),
"audio_id" => $centre->getIdGerant()->getId(),
"address" => $centre->getAddress(),
"postale" => $centre->getPostale(),
"city" => $centre->getCity(),
"finess" => $centre->getFiness(),
"siret" => $centre->getSiret(),
"website" => $centre->getWebsite(),
"phone" => $centre->getPhone(),
"isHandicap" => $centre->getIsHandicap(),
//"audio" => $resultAudio->toArray(),
"centerId" => $centre->getId(),
"audioId" => $audio->getId(),
"status" => 200,
]);
}
/**
* @Route("/centre/new-inscription-atol", name="postCentreNewInscriptionAtol", methods={"POST"})
*/
public function postCentreNewInscriptionAtol(Request $request, PublicFunction $publicFunction, StripeService $stripeService, SubscriptionService $subscrition): Response
{
$data = json_decode($request->getContent(), true);
$requestData = [
"name" => $data["audio"][0]["name"],
"email" => $data["audio"][0]["mail"],
"address" => $data["address"],
"quantity" => $data["quantity"],
"price" => $data["price"]["finalPrice"] ?? $data["price"],
"recurring" => "atol",
"paymentMethodId" => $data["paymentMethodId"],
"offerName" => $data["plan"]["planName"],
];
$createSubscription = $stripeService->createSubscriptionStripe($requestData);
// dd($createSubscription);
$centre = new Centre();
$resultAudio = new ArrayCollection();
$gerant = null;
if($data['gerant'] !== "")
{
$gerant = $this->getDoctrine()
->getRepository(Audio::class)
->find($data['gerant']);
}
if (isset($data["audio"])) {
$entityManager = $this->getDoctrine()->getManager();
foreach ($data["audio"] as $key=>$audioMap) {
// check if audio exist to collect on new center
if($audioMap['registredAudio'] !== "")
{
$audio = $this->getDoctrine()
->getRepository(Audio::class)
->find($audioMap['registredAudio']);
$audioCentre = new AudioCentre();
$audioCentre->setIdAudio($audio);
$audioCentre->setIdCentre($centre);
$audioCentre->setIsConfirmed(true);
$audioCentre->setHoraire($publicFunction->centreHoraire2);
$entityManager->persist($audioCentre);
}
else {
$role = $this->getDoctrine()
->getRepository(Role::class)
->find($audioMap["role"]);
$audio = new Audio();
$audio->setBirthdate(\DateTime::createFromFormat("d/m/Y", $audioMap["birthdate"]));
$audio->setRole($role);
$audio->setSignupDate(new \DateTime());
$audio->setAdeli($data["audio"]["0"]["adeli"]);
$audio->setCivilite($data["audio"]["0"]["civilite"]);
$audio->setLastName($data["audio"]["0"]["lastname"]);
$audio->setName($data["audio"]["0"]["name"]);
// set notification by default selected
$audio->setConfirmRdvMail(true);
$audio->setConfirmRdvSms(true);
$audio->setModifRdvMail(true);
$audio->setModifRdvSms(true);
$audio->setModifNote(true);
$audioMailTest = $this->getDoctrine()
->getRepository(Audio::class)
->findOneBy(['mail' => $audioMap["mail"]]);
/*if ($audioMailTest)
return $this->json([
'message' => "L'adresse e-mail est déjà enregistrée.",
'mail' => $audioMap["mail"],
'code' => "mail_exist",
'status' => 409
], 500); */
$audio->setMail($audioMap["mail"]);
$audioPhoneTest = $this->getDoctrine()
->getRepository(Audio::class)
->findOneBy(['phone' => $audioMap["phone"]]);
/*if ($audioPhoneTest)
return $this->json([
'message' => 'Le numéro de téléphone est déjà enregistré.',
'phone' => $audioMap["phone"],
'code' => "phone_exist",
'status' => 409
], 500); */
$audio->setPhone($audioMap["phone"]);
//$audio->setAdeli($audioMap["adeli"]);
if($data["isImported"] !== '')
$audio->setCodeParrainage($data["isImported"]);
$audio->setIsIndie(false);
// set default pass for audio inserted
$audioMap["password"] !== "" ? $audio->setPassword(password_hash($audioMap["password"], PASSWORD_DEFAULT)) : $audio->setPassword(password_hash("myaudio2023", PASSWORD_DEFAULT));
$audio->setPin($audioMap["pin"]);
// $audio->setDescription($audioMap["description"]);
if (isset($audioMap["imgUrl"]))
$audio->setImgUrl($audioMap["imgUrl"]);
$entityManager = $this->getDoctrine()->getManager();
foreach ($audioMap["diplome"] as $diplomeObject) {
$diplome = $this->getDoctrine()
->getRepository(Diplome::class)
->findOneBy(['id' => $diplomeObject["id"]]);
if ($diplome == null) {
/*$audioDiplome = new AudioDiplome();
if(isset($diplomeObject["year"]))
{
if(!empty($diplomeObject["year"]))
{
$audioDiplome->setYear($diplomeObject["year"]);
}
}
$audioDiplome->setUrl($diplomeObject["url"]);
$audioDiplome->setOther($data['otherdDiplom'][$key]);
$audioDiplome->setIdAudio($audio);
$entityManager->persist($audioDiplome);*/
return $this->json([
'message' => 'Error, no diplome found at this id ' . $diplomeObject["id"],
'path' => 'src/Controller/AudioController.php',
"status" => 401
], 401);
} else {
$audioDiplome = new AudioDiplome();
if(isset($diplomeObject["year"]))
{
if(!empty($diplomeObject["year"]))
{
$audioDiplome->setYear($diplomeObject["year"]);
}
}
$audioDiplome->setUrl($diplomeObject["url"]);
$audioDiplome->setIdDiplome($diplome);
$audioDiplome->setIdAudio($audio);
$entityManager->persist($audioDiplome);
}
}
// $entityManager->persist($audio);
$entityManager->persist($this->createPermanantMotif(60, "#FF00FF", $audio, 1, 1));
$entityManager->persist($this->createPermanantMotif(90, "#00FFFF", $audio, 2, 1));
$entityManager->persist($this->createPermanantMotif(30, "#FFFF00", $audio, 3, 1));
$entityManager->persist($this->createPermanantMotif(60, "#FF0000", $audio, 4, 1));
$entityManager->persist($this->createPermanantMotif(60, "#FFCC59", $audio, 69, 2));
$entityManager->persist($this->createPermanantMotif(30, "#33B679", $audio, 106, 1));
$entityManager->persist($this->createPermanantMotif(30, "#F6BF25", $audio, 107, 1));
$entityManager->persist($this->createPermanantMotif(30, "#E67C73", $audio, 108, 1));
$entityManager->persist($this->createPermanantMotif(30, "#7886CB", $audio, 109, 1));
// $entityManager->persist($this->createPermanantMotif(60, "#FF0000", $audio, 5));
$entityManager->persist($audio);
if ($gerant == null) $gerant = $audio;
$audioCentre = new AudioCentre();
$audioCentre->setIdAudio($audio);
$audioCentre->setIdCentre($centre);
$audioCentre->setIsConfirmed(true);
$audioCentre->setHoraire($publicFunction->centreHoraire2);
$centerHoliday = json_decode($publicFunction->centreHoraire4, true);
$audioCentre->setHorairesHoliday($centerHoliday);
$entityManager->persist($audioCentre);
// SEN MAIL NOTIF JUST FOR AUDIOS ADDED NOT FOR GERANT
// $entityManager->flush();
}
$resultAudio->add([
"id" => $audio->getId(),
"civilite" => $audio->getCivilite(),
"name" => $audio->getName(),
"lastname" => $audio->getLastname(),
"birthdate" => $audio->getBirthdate(),
"mail" => $audio->getMail(),
"phone" => $audio->getPhone(),
"adeli" => $audio->getAdeli(),
"pin" => $audio->getPin(),
"description" => $audio->getDescription(),
"imgUrl" => $audio->getImgUrl(),
]);
}
} else {
return new Response(json_encode([
'message' => 'Error, no audio found',
'path' => 'src/Controller/CentreController.php',
]), 404);
}
// generate color code
$colors = array(
"#FFC0CB", // Pink
"#FFD700", // Gold
"#90EE90", // Light Green
"#87CEFA", // Light Sky Blue
"#FFA07A", // Light Salmon
"#F0E68C", // Khaki
"#B0C4DE", // Light Steel Blue
"#98FB98", // Pale Green
"#FFB6C1", // Light Pink
"#ADD8E6", // Light Blue
"#FF69B4", // Hot Pink
"#FFA500", // Orange
"#00FF7F", // Spring Green
"#AFEEEE", // Pale Turquoise
"#FF8C00", // Dark Orange
"#FFE4B5", // Moccasin
"#00CED1", // Dark Turquoise
"#7FFFD4", // Aquamarine
"#FF4500", // Orange Red
"#00FA9A", // Medium Spring Green
"#FFF0F5", // Lavender Blush
"#00BFFF", // Deep Sky Blue
"#FF6347", // Tomato
"#20B2AA", // Light Sea Green
"#FFFF00", // Yellow
"#32CD32", // Lime Green
"#FFF5EE", // Seashell
"#1E90FF", // Dodger Blue
"#CD5C5C", // Indian Red
"#8FBC8F", // Dark Sea Green
"#F0FFFF", // Azure
"#4169E1", // Royal Blue
"#FF8B00", // Dark Orange
"#66CDAA", // Medium Aquamarine
"#FFFACD", // Lemon Chiffon
"#6495ED", // Cornflower Blue
"#FF7F50", // Coral
"#00FF00", // Lime
"#FAFAD2", // Light Goldenrod Yellow
"#87CEEB", // Sky Blue
"#DC143C", // Crimson
"#2E8B57", // Sea Green
"#F5DEB3", // Wheat
"#4682B4", // Steel Blue
"#CD853F", // Peru
"#8A2BE2", // Blue Violet
"#D2691E", // Chocolate
"#6A5ACD", // Slate Blue
"#F5F5DC", // Beige
"#7B68EE", // Medium Slate Blue
);
// short initial
$name = $data['name'];
$words = explode(' ', $name);
$initials = '';
foreach ($words as $word) {
$initials .= strtoupper(substr($word, 0, 1));
}
$initials = strtoupper($initials);
$shortName = substr($initials, 0, 2);
$randomColor = $colors[array_rand($colors)];
// generate slug url
$slug = $this->slugger->slug($data["name"])->lower();
$centre->setName(strtoupper($data["name"]));
$slugify = $this->getDoctrine()
->getRepository(Centre::class)
->findOneBy(array('slug' => $slug));
if($slugify)
{
$centre->setSlug($slug."-1");
}
else
{
$centre->setSlug($slug);
}
if (isset($data["imgUrl"]))
$centre->setImgUrl($data["imgUrl"]);
if (isset($data["finessURL"]))
$centre->setFinessUrl($data["finessURL"]);
$centre->setIsRdvDomicile($data["isRdvDomicile"]);
$centre->setIdGerant($gerant);
$centre->setAddress($data["address"]);
$centre->setPostale($data["postal"]);
$centre->setCity(strtoupper($data["city"]));
$centre->setFiness($data["finess"]);
$centre->setSocialName($data["companyName"]);
$centre->setSiret($data["siret"]);
$centre->setInitial($shortName);
$centre->setWebsite($data["website"]);
$centre->setSignupDate(new \DateTime());
$centre->setCalendarColor($randomColor);
// set the galeries for images by default
// Define an array of default image URLs
$defaultImages = ["by-default-1.jpeg", "by-default-2.jpeg", "by-default-3.jpeg"];
// Iterate through each default image
foreach ($defaultImages as $imageUrl) {
$centerImage = new CenterImage();
$centerImage->setType("image");
$centerImage->setUrl($imageUrl);
// Associate the center image with the current center
$centerImage->setCenter($centre);
$entityManager->persist($centerImage);
}
/*$centrePhoneTest = $this->getDoctrine()
->getRepository(Centre::class)
->findOneBy(['phone' => $data["phone"]]);
if ($centrePhoneTest)
return $this->json([
'message' => 'Centre phone',
'path' => 'src/Controller/CentreController.php',
"status" => 401
], 401);*/
$centre->setPhone($data["phone"]);
$centre->setIsHandicap($data["isHandicap"]);
$centre->setLongitude($data["longitude"]);
$centre->setLatitude($data["latitude"]);
$centre->setHoraire($publicFunction->centreHoraire2);
$centerHoliday = json_decode($publicFunction->centreHoraire4, true);
$centre->setHorairesHoliday($centerHoliday);
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($centre);
// for audio on multi centre creation
$accessCentre = new AccessCentre();
// $accessData = $data["access"];
$entityManager->flush();
// save print setting
$setting = new Setting();
$setting->setName($data["name"]);
$setting->setAddress($data["address"]);
$setting->setPhone($data["phone"]);
$setting->setLogoUrl($centre->getImgUrl());
$setting->setWebsite($data["website"]);
$setting->setFirstname($audio->getName());
$setting->setLastname($audio->getLastname());
$setting->setEmail($gerant->getMail());
$setting->setSeuilCaDroite(true);
$setting->setSeuilCaGauche(true);
$setting->setSeuilConfortDroite(true);
$setting->setSeuilConfortGauche(true);
$setting->setSeuilinconfortDroite(true);
$setting->setSeuilInConfortGauche(true);
$setting->setSeuilCoDroite(true);
$setting->setSeuilCoGauche(true);
$setting->setSeuilCaMaskingDroite(true);
$setting->setSeuilCaMaskingGauche(true);
$setting->setSeuilCoMaskingDroite(true);
$setting->setSeuilCoMaskingGauche(true);
/* $setting->setCasqueDroite(false);
$setting->setCasqueGauche(false);
$setting->setCasqueBinaural(false);
$setting->setChampsLibreDroite(false);
$setting->setChampsLibreGauche(false);
$setting->setChampsLibreBinaural(false);
$setting->setChampsLibreAppDroite(false);
$setting->setChampsLibreAppGauche(false);
$setting->setChampsLibreAppBinaural(false);*/
$setting->setCasqueDroite(true);
$setting->setCasqueGauche(true);
$setting->setCasqueBinaural(true);
$setting->setChampsLibreDroite(true);
$setting->setChampsLibreGauche(true);
$setting->setChampsLibreBinaural(true);
$setting->setChampsLibreAppDroite(true);
$setting->setChampsLibreAppGauche(true);
$setting->setChampsLibreAppBinaural(true);
$setting->setCentre($centre);
$entityManager->persist($setting);
$entityManager->flush();
$tokenString = $publicFunction->generateRandomString(30);
$params = array(
"lien" =>"{$_ENV['BASE_client']}confirmation_email/{$data["audio"][0]["mail"]}?token={$tokenString}",
"nom" =>"",
"texte" =>"Veuillez cliquer sur le bouton ci-dessous pour confirmer votre adresse mail",
"titre"=> "Confirmer mon email",
"bouton"=> "Confirmer mon Email",
);
$publicFunction->sendEmail($params, $data["audio"][0]["mail"],"myaudio", "Confirmation d'inscription sur My Audio Pro", 122 );
$token = new Token();
$token->setCreationDate(new DateTime());
$token->setToken($tokenString);
$token->setMail($audio->getMail());
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($token);
$entityManager->flush();
/* $user = [
"prenomAudioprothesiste" => $gerant->getName(),
"urlDemo" => "https://calendar.google.com/calendar/u/0/appointments/schedules/AcZssZ0Ry72UDE9m8d2IylSycOMQVerlY0jHt1DLWFD6Pso4hg79sQ9nUAlxtZYOPH6wSubDX4vqVQWh",
];
// we send parametre for the trait methid
$params = $this->emailNotificationDemoService->prepareEmailParams($user);
// send email notifcation
$this->emailNotificationDemoService->sendEmail($params, $gerant->getMail(), 'Organisez votre Démo personnalisée de My Audio Pro', 143);
*/
// set order datable patient
$this->orderPatient->createOrderPatient($audio);
$plan = $this->getDoctrine()->getRepository(Plan::class)
->findOneBy(["slug" => $data['plan']["planName"]] );
$dataSubsc = [];
$dataSubsc['created'] = $createSubscription['created'];
$dataSubsc['currentPeriodStart'] = $createSubscription['current_period_start'];
$dataSubsc['currentPeriodEnd'] = $createSubscription['current_period_end'];
$dataSubsc['centerId'] = $centre->getId();
$dataSubsc['audioId'] = $audio->getId();
$dataSubsc['id'] = $createSubscription['id'];
$dataSubsc['invoiceId'] = $createSubscription['latest_invoice']['id'];
$dataSubsc['customer'] = $createSubscription['customer'];
$dataSubsc['payment_method'] = $createSubscription['default_payment_method'];
$dataSubsc['amount'] = $data["price"]["finalPrice"] ?? $data["price"];
$dataSubsc['quantity'] = $data["quantity"];
$dataSubsc['recurring'] = ($data["price"]["recurring"] === "monthly") ? "month" :
(($data["price"]["recurring"] === "yearly") ? "year" : $data["price"]["recurring"]);
$dataSubsc['planId'] = $plan->getId();
$dataSubsc['status'] = "succeeded";
//$this->logger->info("stripe end date",["endDate" => $currentPeriodEnd->format('Y-m-d H:i:s')]);
$subscrition->createSubscription($dataSubsc);
//$this->logger->info("databse end date",["endDate" => $sub]);
// generate rdvurl
$name = $centre->getName();
$city = $centre->getCity();
$postal = $centre->getPostale();
$nameSlug = strtolower(preg_replace('/[^a-zA-Z0-9]+/', '-', trim($name)));
$citySlug = strtolower(preg_replace('/[^a-zA-Z0-9]+/', '-', trim($city)));
$baseClient = $_ENV['BASE_client'] ?? 'https://default-client-url.com';
$urlRdv = "{$baseClient}audioprothesiste/{$citySlug}/{$postal}/{$nameSlug}/prise-de-rdvaudioprothesiste-rapide/{$centre->getId()}";
if (!$centre->getUrlRdv() || $centre->getUrlRdv() !== $urlRdv) {
$centre->setUrlRdv($urlRdv);
$entityManager->persist($centre);
$entityManager->flush();
}
// post categorie de contrat cda
$quantity = $data["quantity"];
$contractCategory = $entityManager->getRepository(ContractCategory::class)->find(7);
$plan = $entityManager->getRepository(Plan::class)->find($plan->getId());
if ($contractCategory && $plan && $quantity > 0) {
$specificSubscription = new SpecificSubscription();
$specificSubscription->setContractCategory($contractCategory);
$specificSubscription->setPlan($plan);
$specificSubscription->setQuantity($quantity);
$specificSubscription->setCenter($centre);
$specificSubscription->setStatus(false);
$specificSubscription->setAudio($audio);
$entityManager->persist($specificSubscription);
$entityManager->flush();
}
return $this->json([
"audioId" => $audio->getId(),
"centerId" => $centre->getId(),
"name" => $centre->getName(),
"imgUrl" => $centre->getImgUrl(),
"isRdvDomicile" => $centre->getIsRdvDomicile(),
"audio_id" => $centre->getIdGerant()->getId(),
"address" => $centre->getAddress(),
"postale" => $centre->getPostale(),
"city" => $centre->getCity(),
"finess" => $centre->getFiness(),
"siret" => $centre->getSiret(),
"website" => $centre->getWebsite(),
"phone" => $centre->getPhone(),
"isHandicap" => $centre->getIsHandicap(),
//"audio" => $resultAudio->toArray(),
"centerId" => $centre->getId(),
"audioId" => $audio->getId(),
"status" => 200,
]);
}
/**
* @Route("/relance/valide/mail/token", name="relancerValidationMail", methods={"POST"})
*/
public function relancerValidationMail(Request $request, PublicFunction $publicFunction)
{
$entityManager = $this->getDoctrine()->getManager();
$data = json_decode($request->getContent(), true);
$tokenString = $publicFunction->generateRandomString(30);
$params = array(
"lien" => "{$_ENV['BASE_client']}confirmation_email/{$data['mail']}?token={$tokenString}",
"nom" => "",
"texte" => "Veuillez cliquer sur le bouton ci-dessous pour confirmer votre adresse mail",
"titre" => "Confirmer mon email",
"bouton" => "Confirmer mon Email",
);
$publicFunction->sendEmail($params, $data['mail'], $data['mail'], "Confirmation d'inscription sur My Audio Pro", 122);
$token = new Token();
$token->setCreationDate(new DateTime());
$token->setToken($tokenString);
$token->setMail($data['mail']);
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($token);
$entityManager->flush();
return new Response(json_encode([
"message" => "Un mail viens de vous etre envoyé",
"status" => 200,
]));
}
/**
* @Route("/valider/mail/token", name="validerMailGerant", methods={"POST"})
*/
public function validerMailGerant(Request $request)
{
// get all data including the client that matches the mail stored in the token
$entityManager = $this->getDoctrine()->getManager();
$data = json_decode($request->getContent(), true);
if (isset($data["token"])) {
$token = $this->getDoctrine()
->getRepository(Token::class)
->findOneBy(['token' => $data["token"]]);
if (!$token) {
return new Response(json_encode([
'message' => 'Erreur',
'path' => 'src/Controller/CentreController.php',
]), 200);
}
} else {
return new Response(json_encode([
"message" => "Erreur",
"status" => 401,
]), 200);
}
$audio = $this->getDoctrine()
->getRepository(Audio::class)
->findOneBy(['mail' => $token->getMail()]);
if (!$audio) {
return new Response(json_encode([
'message' => 'Erreur',
'path' => 'src/Controller/CentreController.php',
]), 200);
}
$start_date = $token->getCreationDate();
$since_start = $start_date->diff(new DateTime());
if ($since_start->i < 10) {
//success
$audio->setMailValid(1);
$audio->getAudioCentre()[0]->getIdCentre()->setIsValid(1);
$entityManager->remove($token);
$entityManager->flush();
//TODO envoyer un mail avec lien pro
return new Response(json_encode([
"message" => "ok",
"status" => 200,
]));
// if it's more than 01 minutes
} else {
$entityManager->remove($token);
$entityManager->flush();
return new Response(json_encode([
"message" => "nok",
"status" => 401,
]), 200);
}
}
/**
* @Route("/centre/image", name="postCentreImage", methods={"POST"})
*/
public function postCentreImage(Request $request, FileUploader $fileUploader): Response
{
$image = $request->files->get('image');
$fileUploader->upload($image, "images/setting/");
return new Response(json_encode([
"imgUrl" => $fileUploader->upload($image, "images/centre/"),
"status" => 200,
]));
}
/**
* @Route("/centre/image/fData-newinscription", name="postCentreImageByFormDataNewInscription", methods={"POST"})
*/
public function postCentreImageByFormDataNewInscription(Request $request, FileUploader $fileUploader): Response
{
$newfilename = "";
$audioFile = "";
$diplomeFile = "";
$finessfilename = "";
$audioId = $request->request->get('audioId');
$centreId = $request->request->get('centreId');
$facadeFile = $request->files->get('image_facade');
$fitnessFile = $request->files->get('image_interieur');
$profilFile = $request->files->get('image_profil');
$diplomeFile = $request->files->get('image_diplome');
$audio = $this->getDoctrine()
->getRepository(Audio::class)
->find($audioId);
$center = $this->getDoctrine()
->getRepository(Centre::class)
->find($centreId);
$entityManager = $this->getDoctrine()->getManager();
// add image galerie
// delete the default image united
if ($facadeFile || $fitnessFile || $diplomeFile) {
$oldImages = $this->getDoctrine()
->getRepository(CenterImage::class)
->findBy(["center" => $center]);
if ($oldImages) {
foreach ($oldImages as $image) {
$entityManager->remove($image);
}
$entityManager->flush();
}
}
// Post image centre
$facadeFile = $request->files->get('image_facade');
if ($facadeFile) {
$fileArray = [
'name' => $facadeFile->getClientOriginalName(),
'type' => $facadeFile->getMimeType(),
'tmp_name' => $facadeFile->getPathname(),
'error' => $facadeFile->getError(),
'size' => $facadeFile->getSize(),
];
$newfilename = $fileUploader->uploadFormData($fileArray, "images/centre/", "images/centres/");
$center->setImgUrl($newfilename);
$entityManager->persist($center);
$image = new CenterImage();
$image->setCenter($center);
$image->setType('image');
if ($newfilename) {
$image->setUrl($newfilename);
$entityManager->persist($image);
}
$entityManager->flush();
$publicImagePath = $this->getParameter('kernel.project_dir') . '/public/assets/images/centre/' . $newfilename;
$assetsImagePath = $this->getParameter('kernel.project_dir') . '/assets/images/centre/' . $newfilename;
if (file_exists($assetsImagePath)) {
copy($assetsImagePath, $publicImagePath);
}
$publicImagePathCtrs = $this->getParameter('kernel.project_dir') . '/public/assets/images/centres/' . $newfilename;
$assetsImagePathCtrs = $this->getParameter('kernel.project_dir') . '/assets/images/centres/' . $newfilename;
if (file_exists($assetsImagePathCtrs)) {
copy($assetsImagePathCtrs, $publicImagePathCtrs);
}
}
// Post FINESS centre
$fitnessFile = $request->files->get('image_interieur');
if ($fitnessFile) {
$fileArray = [
'name' => $fitnessFile->getClientOriginalName(),
'type' => $fitnessFile->getMimeType(),
'tmp_name' => $fitnessFile->getPathname(),
'error' => $fitnessFile->getError(),
'size' => $fitnessFile->getSize(),
];
$finessfilename = $fileUploader->uploadFormData($fileArray, "images/centres/");
$image = new CenterImage();
$image->setCenter($center);
$image->setType('image');
if ($finessfilename) {
$image->setUrl($finessfilename);
$entityManager->persist($image);
}
$entityManager->flush();
$publicImagePath = $this->getParameter('kernel.project_dir') . '/public/assets/images/centres/' . $finessfilename;
$assetsImagePath = $this->getParameter('kernel.project_dir') . '/assets/images/centres/' . $finessfilename;
if (file_exists($assetsImagePath)) {
copy($assetsImagePath, $publicImagePath);
}
}
// Post audio profile
$profilFile = $request->files->get('image_profil');
if ($profilFile) {
$fileArray = [
'name' => $profilFile->getClientOriginalName(),
'type' => $profilFile->getMimeType(),
'tmp_name' => $profilFile->getPathname(),
'error' => $profilFile->getError(),
'size' => $profilFile->getSize(),
];
$audioFilename = $fileUploader->uploadFormData($fileArray, "images/audio/");
$audio->setImgUrl($audioFilename);
$entityManager->persist($audio);
$publicImagePath = $this->getParameter('kernel.project_dir') . '/public/assets/images/audio/' . $audioFilename;
$assetsImagePath = $this->getParameter('kernel.project_dir') . '/assets/images/audio/' . $audioFilename;
if (file_exists($assetsImagePath)) {
copy($assetsImagePath, $publicImagePath);
}
}
// Post audio diplome
$diplomeFile = $request->files->get('image_diplome');
if ($diplomeFile) {
$fileArray = [
'name' => $diplomeFile->getClientOriginalName(),
'type' => $diplomeFile->getMimeType(),
'tmp_name' => $diplomeFile->getPathname(),
'error' => $diplomeFile->getError(),
'size' => $diplomeFile->getSize(),
];
$d = $fileUploader->uploadFormData($fileArray, "document/audio/", "images/centres/");
$audioDiplome = new AudioDiplome();
$image = new CenterImage();
$image->setCenter($center);
$image->setType('image');
$newfilename = $d;
if ($newfilename) {
$image->setUrl($newfilename);
$entityManager->persist($image);
}
$entityManager->flush();
}
$entityManager->flush();
return new Response(json_encode([
"message" => "updated succesfully"
]));
}
/**
* @Route("/centre/image/fData", name="postCentreImageByFormDataInscription", methods={"POST"})
*/
public function postCentreImageByFormDataInscription(Request $request, FileUploader $fileUploader): Response
{
$newfilename = "";
$audioFile = "";
$diplomeFile = "";
$finessfilename = "";
$entityManager = $this->getDoctrine()->getManager();
//post image centre
if (isset($_FILES["picCentre"]) && $_FILES["picCentre"]["size"] != 0) {
$newfilename = $fileUploader->uploadFormData($_FILES["picCentre"], "images/setting/", "images/centre/");
$publicImagePath = $this->getParameter('kernel.project_dir') . '/public/assets/images/centre/' . $newfilename;
$assetsImagePath = $this->getParameter('kernel.project_dir') . '/assets/images/centre/' . $newfilename;
if (file_exists($assetsImagePath)) {
copy($assetsImagePath, $publicImagePath);
}
} else {
$publicImagePath = $this->getParameter('kernel.project_dir') . '/public/assets/images/centre/imgOreille.png';
$assetsImagePath = $this->getParameter('kernel.project_dir') . '/assets/images/centre/imgOreille.png';
if (file_exists($assetsImagePath)) {
copy($assetsImagePath, $publicImagePath);
}
$newfilename = 'imgOreille.png';
}
//post FINESS centre
if (isset($_FILES["fileFiness"]) && $_FILES["fileFiness"]["size"] != 0) {
$finessfilename = $fileUploader->uploadFormData($_FILES["fileFiness"], "document/centre/finess");
}
$audioFile = array();
$diplomeFile = array();
//post image audio
if (isset($_POST['nombreAudio'])) {
for ($i = 1; $i <= $_POST['nombreAudio']; $i++) {
if (isset($_FILES["picAudio" . $i]) && $_FILES["picAudio" . $i]["size"] != 0) {
$audioFilename = $fileUploader->uploadFormData($_FILES["picAudio" . $i], "images/audio/");
array_push($audioFile, $audioFilename);
}
// post audio diplome
$dip = array();
for ($j = 1; $j <= 5; $j++) {
if (isset($_FILES["fileDilpomeA" . $i . $j]) && $_FILES["fileDilpomeA" . $i . $j]["size"] != 0) {
$d = $fileUploader->uploadFormData($_FILES["fileDilpomeA" . $i . $j], "document/audio/");
array_push($dip, $d);
}
}
array_push($diplomeFile, $dip);
}
}
$entityManager->flush();
return new Response(json_encode([
"fileName" => $newfilename,
"audioFile" => $audioFile,
"diplomeFile" => $diplomeFile,
"finessfilename" => $finessfilename
]));
}
/**
* @Route("/centre/fData/{id}", name="postCentreImageByFormData", methods={"POST"})
*/
public function postCentreImageByFormData(Centre $centre, Request $request, FileUploader $fileUploader): Response
{
if (!$request->query->get('token')) {
return new Response(json_encode([
"message" => "Pas de token n'a été spécifié",
"status" => 401,
]), 401);
}
$entityManager = $this->getDoctrine()->getManager();
/** @var Token */
$token = $this->getDoctrine()
->getRepository(Token::class)
->findOneBy(['token' => $request->query->get('token'), 'id_audio' => $centre->getIdGerant()]);
if (!$token) {
return new Response(json_encode([
"message" => "Pas de token trouvé dans la base de données. Veuillez vous reconnecter.",
"status" => 404,
]), 404);
}
// get token age
$dateDiff = $token->getCreationDate()->diff(new DateTime());
// if the token if older than 7 days
if ($dateDiff->d > 7) {
$entityManager = $this->getDoctrine()->getManager();
$entityManager->remove($token);
$entityManager->flush();
return $this->json([
'message' => 'Ce token est obselète. Veuillez vous reconnecter.',
'path' => 'src/Controller/AudioController.php',
"status" => 401,
], 401);
}
if (isset($_FILES["pic"]) && $_FILES["pic"]["size"] != 0) {
$newfilename = $fileUploader->uploadFormData($_FILES["pic"], "images/centre/");
$centre->setImgUrl($newfilename);
}
$entityManager->flush();
return $this->json([
"imgUrl" => $centre->getImgUrl(),
]);
}
/**
* @Route("/centre/{id}/access", name="editAccessByCentreByID", methods={"PUT"})
*/
public function editAccessCentreByCentreID(Centre $centre, Request $request)
{
$entityManager = $this->getDoctrine()->getManager();
$data = json_decode($request->getContent(), true);
if (!isset($data['token']))
return new Response(json_encode([
"message" => "Pas de token n'a été spécifié",
"status" => 401,
]), 401);
$entityManager = $this->getDoctrine()->getManager();
/** @var Token */
$token = $this->getDoctrine()
->getRepository(Token::class)
->findOneBy(['token' => $data['token'], 'id_audio' => $centre->getIdGerant()]);
if (!$token)
return new Response(json_encode([
"message" => "Pas de token trouvé dans la base de données. Veuillez vous reconnecter.",
"status" => 404,
]), 404);
// get token age
$dateDiff = $token->getCreationDate()->diff(new DateTime());
// if the token if older than 7 days
if ($dateDiff->d > 7) {
$entityManager->remove($token);
$entityManager->flush();
return $this->json([
'message' => 'Ce token est obselète. Veuillez vous reconnecter.',
'path' => 'src/Controller/ClientController.php',
"status" => 401
], 401);
}
$centre = $this->getDoctrine()
->getRepository(Centre::class)
->findOneBy(['id' => $centre->getId()]);
if (!$centre) {
return new Response(json_encode([
'message' => 'Error, no Centre found at this id',
'path' => 'src/Controller/CentreController.php',
]));
} else {
$accessCentre = $this->getDoctrine()
->getRepository(AccessCentre::class)
->findOneBy(['id_centre' => $centre->getId()]);
if (isset($data["Métro"]))
$accessCentre->setMetro($data["Métro"]);
if (isset($data["Bus"]))
$accessCentre->setBus($data["Bus"]);
if (isset($data["Tram"]))
$accessCentre->setTram($data["Tram"]);
if (isset($data["RER"]))
$accessCentre->setRer($data["RER"]);
if (isset($data["Parking Public"]))
$accessCentre->setParkingPublic($data["Parking Public"]);
if (isset($data["Parking Privé"]))
$accessCentre->setParkingPrivate($data["Parking Privé"]);
if (isset($data["Autre"]))
$accessCentre->setOther($data["Autre"]);
$entityManager->persist($accessCentre);
$entityManager->flush();
return new Response(json_encode([
"idCentre" => $centre->getId(),
"metro" => $accessCentre->getMetro(),
"tram" => $accessCentre->getTram(),
"bus" => $accessCentre->getBus(),
"rer" => $accessCentre->getRer(),
"Parking Public" => $accessCentre->getParkingPublic(),
"Parking Privé" => $accessCentre->getParkingPrivate(),
"autre" => $accessCentre->getOther(),
]));
}
}
/**
* @Route("/centre/{id}", name="editCentreByID", methods={"PUT"})
*/
public function editCentreByID(Centre $centre, Request $request)
{
$entityManager = $this->getDoctrine()->getManager();
$data = json_decode($request->getContent(), true);
if (!isset($data['token']))
return new Response(json_encode([
"message" => "Pas de token n'a été spécifié",
"status" => 401,
]), 401);
$entityManager = $this->getDoctrine()->getManager();
/** @var Token */
$token = $this->getDoctrine()
->getRepository(Token::class)
->findOneBy(['token' => $data['token'], 'id_audio' => $centre->getIdGerant()]);
if (!$token)
return new Response(json_encode([
"message" => "Pas de token trouvé dans la base de données. Veuillez vous reconnecter.",
"status" => 404,
]), 404);
// get token age
$dateDiff = $token->getCreationDate()->diff(new DateTime());
// if the token if older than 7 days
if ($dateDiff->d > 7) {
$entityManager->remove($token);
$entityManager->flush();
return $this->json([
'message' => 'Ce token est obselète. Veuillez vous reconnecter.',
'path' => 'src/Controller/ClientController.php',
"status" => 401
], 401);
}
if (isset($data["audio_id"])) {
$audio = $this->getDoctrine()
->getRepository(Audio::class)
->findOneBy(['id' => $data["audio_id"]]);
if (!$audio)
return new Response(json_encode([
'message' => 'Error, no Audio found at this id',
'path' => 'src/Controller/AudioController.php',
]));
$centre->setIdGerant($audio);
}
if (isset($data["name"]))
$centre->setName($data["name"]);
if (isset($data["imgUrl"]))
$centre->setImgUrl($data["imgUrl"]);
if (isset($data["isRdvDomicile"]))
$centre->setIsRdvDomicile($data["isRdvDomicile"]);
if (isset($data["address"]))
$centre->setAddress($data["address"]);
if (isset($data["numero"]))
$centre->setNumero($data["numero"]);
if (isset($data["voie"]))
$centre->setVoie($data["voie"]);
if (isset($data["rue"]))
$centre->setRue($data["rue"]);
if (isset($data["description"]))
$centre->setDescription($data["description"]);
if (isset($data["longitude"]))
$centre->setLongitude($data["longitude"]);
if (isset($data["latitude"]))
$centre->setLatitude($data["latitude"]);
if (isset($data["postale"]))
$centre->setPostale($data["postale"]);
if (isset($data["city"]))
$centre->setCity($data["city"]);
if (isset($data["finess"]))
$centre->setFiness($data["finess"]);
if (isset($data["siret"]))
$centre->setSiret($data["siret"]);
if (isset($data["website"]))
$centre->setWebsite($data["website"]);
if (isset($data["phone"])) {
$centrePhoneTest = $this->getDoctrine()
->getRepository(Centre::class)
->findOneBy(['phone' => $data["phone"]]);
if ($centrePhoneTest)
return $this->json([
'message' => 'Ce numéro de téléphone est déjà attribué.',
'path' => 'src/Controller/CentreController.php',
"status" => 401
], 401);
$centre->setPhone($data["phone"]);
}
if (isset($data["isHandicap"]))
$centre->setIsHandicap($data["isHandicap"]);
$entityManager->flush();
return new Response(json_encode([
"id" => $centre->getId(),
"audio_id" => $centre->getIdGerant()->getId(),
"name" => $centre->getName(),
"imgUrl" => $centre->getImgUrl(),
"isRdvDomicile" => $centre->getIsRdvDomicile(),
"address" => $centre->getAddress(),
"numero" => $centre->getNumero(),
"voie" => $centre->getVoie(),
"rue" => $centre->getRue(),
"postale" => $centre->getPostale(),
"city" => $centre->getCity(),
"finess" => $centre->getFiness(),
"siret" => $centre->getSiret(),
"website" => $centre->getWebsite(),
"phone" => $centre->getPhone(),
"isHandicap" => $centre->getIsHandicap(),
]));
}
public function createPermanantMotif(int $duration, String $color, Audio $audio, int $id_motif, int $type): AudioMotif
{
$audioMotif = new AudioMotif();
$audioMotif->setDuration($duration);
$audioMotif->setColor($color);
$audioMotif->setIsRDVonline(true);
$audioMotif->setIsDeleted(false);
$audioMotif->setType($type);
// change when that feature will be implemented.
$audioMotif->setIdAudio($audio);
$motif = $this->getDoctrine()
->getRepository(Motif::class)
->findOneBy(['id' => $id_motif]);
$audioMotif->setIdMotif($motif);
return $audioMotif;
}
/**
* @Route("centre/{id}/dockage/", name="callDocages", methods={"GET"})
*/
public function callDocage(Centre $centre)
{
$entityManager = $this->getDoctrine()->getManager();
/** @var Token */
$centre = $this->getDoctrine()
->getRepository(Centre::class)
->findOneBy(['id' => $centre->getId()]);
if ($centre->getIdDockage() != null) {
$transaction = $this->lancementSignatureDocument($centre, $centre->getIdDockage());
} else {
$idDocage = $this->createContactDockage($centre);
$transaction = $this->lancementSignatureDocument($centre, $idDocage);
}
return new Response(json_encode([
"response" => $transaction,
"transactionId" => $centre->getTransactionId(),
"documentId" => $centre->getDocumentId(),
"isSign" => $centre->getIsSign(),
"gerant" => $centre->getIdGerant()->getMail()
]));
}
/**
* @Route("centre/{id}/dockage-ATOL/", name="callAtolDocages", methods={"GET"})
*/
public function callAtolDocage(Centre $centre)
{
$entityManager = $this->getDoctrine()->getManager();
/** @var Token */
$centre = $this->getDoctrine()
->getRepository(Centre::class)
->findOneBy(['id' => $centre->getId()]);
if($centre->getIdDockage() != null)
{
$transaction = $this->lancementSignatureAtolDocument($centre, $centre->getIdDockage());
} else {
$idDocage = $this->createContactDockage($centre);
$transaction = $this->lancementSignatureAtolDocument($centre, $idDocage);
}
return new Response(json_encode([
"response" => $transaction,
"transactionId" => $centre->getTransactionId(),
"documentId" => $centre->getDocumentId(),
"isSign" => $centre->getIsSign(),
"gerant" => $centre->getIdGerant()->getMail()
]));
}
public function createContactDockage($centre){
$entityManager = $this->getDoctrine()->getManager();
$emailGerant = $centre->getIdGerant()->getMail();
$firstName = $centre->getIdGerant()->getName();
$lastName = $centre->getIdGerant()->getLastName();
$address = $centre->getAddress();
$phone = $centre->getIdGerant()->getPhone();
$city = $centre->getCity();
$imgUrl = $centre->getImgUrl();
$centreName = $centre->getName();
$postal = $centre->getPostale();
$civilite = $centre->getIdGerant()->getCivilite();
if ($civilite == "Monsieur") {
$genre = 1;
} elseif ($civilite = "Madame") {
$genre = 2;
} else {
$genre = 3;
}
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.docage.com/Contacts',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_USERPWD => 'contact@myaudio.fr' . ":" . 'f32c08a2-7f91-4aa4-a88d-1acc5bdd97f3',
CURLOPT_POSTFIELDS => '{
"Email": "' . $emailGerant . '",
"FirstName": "' . $firstName . '",
"LastName": "' . $lastName . '",
"Address1": "' . $address . '",
"Address2": "",
"City": "' . $city . '",
"State": "",
"ZipCode": "' . $postal . '",
"Country": "France",
"Notes": "",
"Phone": "' . $phone . '",
"Mobile": "",
"Company": "' . $centreName . '",
"Gender": "' . $genre . '",
"Civility": "",
"ProfilePictureSmall": "' . $imgUrl . '",
"ProfilePictureMedium": "JVBERi0xLjQNCiXi48 [...] VPRgo=",
"ProfilePictureLarge": "JVBERi0xLjQNCiXi48 [...] VPRgo="
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json'
),
));
$response1 = curl_exec($curl);
curl_close($curl);
$idDocage = json_decode($response1);
$centre->setIdDockage($idDocage);
$entityManager->flush();
return $idDocage;
}
public function lancementSignatureDocument($centre, $idDockage)
{
$entityManager = $this->getDoctrine()->getManager();
// $idDockage = $centre->getIdDockage();
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.docage.com/Transactions/CreateFullTransaction',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_USERPWD => 'contact@myaudio.fr' . ":" . 'f32c08a2-7f91-4aa4-a88d-1acc5bdd97f3',
CURLOPT_POSTFIELDS => array('TemplateId' => 'd6fa147a-2bda-437f-8e1f-ce470b59aa06', 'Client' => $idDockage),
));
$response1 = curl_exec($curl);
$transaction = json_decode($response1);
$centre->setDocumentId($transaction->TransactionFiles[0]->Id);
$centre->setTransactionId($transaction->TransactionFiles[0]->TransactionId);
$centre->setIsSign(0);
$entityManager->flush();
curl_close($curl);
return json_decode($response1);
}
public function lancementSignatureAtolDocument($centre, $idDockage)
{
$entityManager = $this->getDoctrine()->getManager();
// $idDockage = $centre->getIdDockage();
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.docage.com/Transactions/CreateFullTransaction',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_USERPWD => 'contact@myaudio.fr' . ":" . 'f32c08a2-7f91-4aa4-a88d-1acc5bdd97f3',
CURLOPT_POSTFIELDS => array('TemplateId' => 'aac5b1ca-fa3d-438d-9e1d-e45d7032281f', 'Client' => $idDockage),
));
$response1 = curl_exec($curl);
$transaction = json_decode($response1);
$centre->setDocumentId($transaction->TransactionFiles[0]->Id);
$centre->setTransactionId($transaction->TransactionFiles[0]->TransactionId);
$centre->setIsSign(0);
$entityManager->flush();
curl_close($curl);
return json_decode($response1);
}
/**
* @Route("centre/{id}/relance/dockage", name="relanceDocage", methods={"GET"})
*/
public function relanceDocage(Centre $centre)
{
$output = null;
$retval = null;
//exec("curl --location --request GET 'https://api.docage.com/SendReminders/".$centre->getTransactionId()."'", $output, $retval);
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.docage.com/SendReminders/' . $centre->getTransactionId(),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_USERPWD => 'contact@myaudio.fr' . ":" . 'f32c08a2-7f91-4aa4-a88d-1acc5bdd97f3',
));
$response1 = curl_exec($curl);
curl_close($curl);
return new Response(json_encode([
"response" => $response1,
"transactionId" => $centre->getTransactionId(),
"documentId" => $centre->getDocumentId(),
"isSign" => $centre->getIsSign(),
]));
}
/**
* @Route("centre/{id}/get/document", name="getDocumentDocage", methods={"GET"})
*/
public function getDocumentDocage(Centre $centre)
{
$output = null;
$retval = null;
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.docage.com/TransactionFiles/Download/' . $centre->getDocumentId(),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_USERPWD => 'contact@myaudio.fr' . ":" . 'f32c08a2-7f91-4aa4-a88d-1acc5bdd97f3',
));
$response1 = curl_exec($curl);
curl_close($curl);
$r = str_replace('"', '', $response1);
$pdf_decoded = base64_decode($r);
//Write data back to pdf file
$projectDir = $this->getParameter('kernel.project_dir');
//$pdfFilePath = $projectDir . '/assets/partner/facture' . $invoice->getToken() . '.pdf';
$pdf = fopen($projectDir . '/assets/pdf/cga_' . $centre->getId() . '.pdf', 'w');
fwrite($pdf, $pdf_decoded);
//close output file
fclose($pdf);
return new Response($response1);
}
/**
* @Route("centre/{id}/checkisSign", name="checkValid", methods={"GET"})
*/
public function checkisSign(Centre $centre)
{
$entityManager = $this->getDoctrine()->getManager();
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.docage.com/Transactions/Status/' . $centre->getTransactionId(),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_USERPWD => 'contact@myaudio.fr' . ":" . 'f32c08a2-7f91-4aa4-a88d-1acc5bdd97f3',
));
$response1 = curl_exec($curl);
curl_close($curl);
if ($response1 == "Done") {
$centre->setIsSign(1);
$entityManager->flush();
}
return new Response($centre->getIsSign());
}
/**
* @Route("/mandat/create", name="mandatCreate", methods={"GET"})
*/
public function sendToCreateMandat(Request $request)
{
//live : live_jk-8FCTbZ0ydYSvXNeT4P8MCGO__VM9Vb2c1-teG
$token = $request->query->get('token');
$centreId = $request->query->get('centre');
$access_token = "{$_ENV['goCardless_api']}";
$client = new \GoCardlessPro\Client([
'access_token' => $access_token,
'environment' => \GoCardlessPro\Environment::LIVE,
]);
$centre = $this->getDoctrine()
->getRepository(Centre::class)
->findOneBy(['id' => $centreId]);
$gerant = $centre->getIdGerant();
$redirectFlow = $client->redirectFlows()->create([
"params" => [
// This will be shown on the payment pages
"description" => "Abonnement My Audio",
// Not the access token
"session_token" => $token,
"success_redirect_url" => "{$_ENV['BASE_logiciel']}mandat/loading",
// Optionally, prefill customer details on the payment page
"prefilled_customer" => [
"given_name" => $gerant->getName(),
"family_name" => $gerant->getLastname(),
"email" => $gerant->getMail(),
"address_line1" => $centre->getAddress(),
"city" => $centre->getCity(),
"postal_code" => strval($centre->getPostale()),
],
]
]);
return $this->json([
'idflow' => $redirectFlow->id,
'url' => $redirectFlow->redirect_url,
'redirect' => $redirectFlow
]);
}
/**
* @Route("/mandat/validate", name="mandatValidate", methods={"GET"})
*/
public function validateMandat(Request $request)
{
$entityManager = $this->getDoctrine()->getManager();
$token = $request->query->get('token');
$url = $request->query->get('url');
$centreId = $request->query->get('centre');
$access_token = "{$_ENV['goCardless_api']}";
$client = new \GoCardlessPro\Client([
'access_token' => $access_token,
'environment' => \GoCardlessPro\Environment::LIVE,
]);
$redirectFlow = $client->redirectFlows()->complete(
$url, //The redirect flow ID from above.
["params" => ["session_token" => $token]]
);
$customers = $client->customers()->list()->records;
$mandats = $client->mandates()->list();
$confirmation = $redirectFlow->confirmation_url;
$client = $this->getDoctrine()
->getRepository(Centre::class)
->findOneBy(['id' => $centreId]);
$client->setMandat($redirectFlow->links->mandate);
$entityManager->flush();
return $this->json([
'confirmation' => $confirmation,
'clients' => $customers,
'mandats' => $mandats,
'mandatId' => $redirectFlow->links->mandate
]);
}
/**
* @Route("/centre/{id}/mandat/", name="getCentreMandatById", methods={"GET"})
*/
public function getCentreMandatGyId(Centre $centre, Request $request)
{
$mandat = $centre->getMandat();
if ($mandat != null) {
$client = new \GoCardlessPro\Client(array(
'access_token' => "{$_ENV['goCardless_api']}",
'environment' => \GoCardlessPro\Environment::LIVE,
));
$infoMandat = $client->mandates()->get($mandat);
} else {
$infoMandat = "";
}
return $this->json([
'mandat' => $infoMandat,
]);
}
/**
* @Route("/checkFacturation/centres", name="checkFacturation", methods={"GET"})
*/
public function checkFacturation()
{
$centres = $this->getDoctrine()
->getRepository(Centre::class)
->findAll();
foreach ($centres as $centre) {
$inscription = $centre->getSignupDate();
$origin = new DateTime(date_format($inscription, 'Y-m-d'));
$target = new DateTime('now');
$interval = $origin->diff($target);
$month = $interval->format('%m');
if ($month > 0) {
$dayNow = $target->format("d");
$day = $origin->format("d");
if ($day == $dayNow) {
$this->getFacturationByCentre($centre);
}
}
}
return $this->json([
'mandat' => $month,
]);
}
/**
* @Route("/facturation/centre/{id}", name="getFacturationByCentre", methods={"GET"})
*/
public function getFacturationByCentre(Centre $centre)
{
$entityManager = $this->getDoctrine()->getManager();
/**** ABONNEMENT ****/
$dateInscription = $centre->getSignupDate();
$origin = new DateTime(date_format($dateInscription, 'Y-m-d'));
$target = new DateTime('now');
$interval = $origin->diff($target);
$month = $interval->format('%m');
if (intval($month) > 12) {
$abonnement = 49.90;
$reduction = 0.00;
} elseif (intval($month) == 1) {
$abonnement = 49.90;
$reduction = 59.88;
} else {
$abonnement = 39.90;
$reduction = 12.00;
}
/**** NOMBRE D'AUDIOS ****/
$audios = $this->getDoctrine()
->getRepository(AudioCentre::class)
->findBy(['id_centre' => $centre]);
$audioSupplementaire = count($audios) - 1;
$audioAbonnement = 19.90 * $audioSupplementaire;
$jour = date("Y-m-d");
$dateFin = new DateTime($jour);
$dateDebut = strtotime($jour . "- 1 months");
$dateDebut = date("Y-m-d", $dateDebut);
$dateDebut = new DateTime($dateDebut);
/**** MY RDV ****/
$myrdv = 0;
$rdvs = $this->getDoctrine()
->getRepository(Rdv::class)
->findRDVCentreBetweenDateWithoutTest($dateDebut, $dateFin, $centre->getID());
$myrdv = $myrdv + (50 * count($rdvs));
/**** MY RDV ADVANCED ****/
$myRdvAdvanced = 0;
$rdvsA = $this->getDoctrine()
->getRepository(Rdv::class)
->findRDVCentreBetweenDateWithTestId($dateDebut, $dateFin, $centre->getID());
$myRdvAdvanced = $myRdvAdvanced + (100 * count($rdvsA));
/**** MY LEAD ****/
$mylead = 0;
$nbMyLead = 0;
$rdvsCanceled = $this->getDoctrine()
->getRepository(Rdv::class)
->findCanceledRdvCentreBetweenDateWithoutTest($dateDebut, $dateFin, $centre->getID());
foreach ($rdvsCanceled as $rdvc) {
if (!is_null($rdvc->getIdClient())) {
$rdvClient = $this->getDoctrine()
->getRepository(Rdv::class)
->findRDVLeadByClient($dateDebut, $centre->getID(), $rdvc->getIdClient()->getID());
if (count($rdvClient) == 0) {
$mylead = $mylead + 35;
$nbMyLead = $nbMyLead + 1;
}
}
}
/**** MY LEAD ADVANCED****/
$myleadAdvanced = 0;
$nbMyLeadAdvanced = 0;
$rdvsCanceledA = $this->getDoctrine()
->getRepository(Rdv::class)
->findCanceledRdvCentreBetweenDateWithTest($dateDebut, $dateFin, $centre->getID());
foreach ($rdvsCanceledA as $rdvc) {
if (!is_null($rdvc->getIdClient())) {
$rdvClient = $this->getDoctrine()
->getRepository(Rdv::class)
->findRDVLeadByClient($dateDebut, $centre->getID(), $rdvc->getIdClient()->getID());
if (count($rdvClient) == 0) {
$myleadAdvanced = $myleadAdvanced + 35;
$nbMyLeadAdvanced = $nbMyLeadAdvanced + 1;
}
}
}
// Recuperation de l'ID vos facture ou creation
if (!is_null($centre->getFactureId())) {
$factureId = $centre->getFactureId();
} else {
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://myaudio.vosfactures.fr/clients.json',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => '{
"api_token": "pRHakmigmSJuVSYbcBS",
"client": {
"name":"' . $centre->getName() . '",
"city": "' . $centre->getCity() . '",
"country": "France",
"email": "' . $centre->getIdGerant()->getMail() . '",
"post_code": "' . $centre->getPostale() . '",
"street":"' . $centre->getAddress() . '",
"phone": "' . $centre->getPhone() . '"
}
}',
CURLOPT_HTTPHEADER => array(
'Accept: application/json',
'Content-Type: application/json'
),
));
$response1 = curl_exec($curl);
$rep = json_decode($response1);
$factureId = $rep->{'id'};
$centre->setFactureId($rep->{'id'});
$entityManager->flush();
}
// Création de la nouvelle facture
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://myaudio.vosfactures.fr/invoices.json',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => '{
"api_token": "pRHakmigmSJuVSYbcBS",
"invoice": {
"department_id": 937362,
"client_id": ' . intval($centre->getFactureId()) . ',
"test": true,
"discount_kind":"amount",
"show_discount":true,
"positions":[
{"product_id": 102520343, "quantity":1, "discount": "' . $reduction . '"},
{"product_id": 103129798, "quantity": ' . $audioSupplementaire . '},
{"product_id": 102520426, "quantity": ' . $nbMyLead . '},
{"product_id": 102520439, "quantity": ' . $nbMyLeadAdvanced . '},
{"product_id": 102520392, "quantity": ' . count($rdvs) . '},
{"product_id": 102520413, "quantity": ' . count($rdvsA) . '}
]
}
}',
CURLOPT_HTTPHEADER => array(
'Accept: application/json',
'Content-Type: application/json'
),
));
$fact = curl_exec($curl);
$fact = json_decode($fact);
$factId = $fact->{'id'};
$tokenId = $fact->{'token'};
$numeroFact = $fact->{'number'};
$montantHT = $fact->{'price_net'};
$montantTTC = $fact->{'price_gross'};
$dateFact = $target;
//POST FACTURE
$facture = new Factures();
$facture->setId(intval($factId));
$facture->setToken($tokenId);
$facture->setDate($dateFact);
$facture->setCentre($centre);
$facture->setNumero($numeroFact);
$facture->setPrixHT($montantHT);
$facture->setPrixTTC($montantTTC);
$entityManager->persist($facture);
$entityManager->flush();
$centimes = floatval($montantTTC) * 100;
//Envoi a Gocardless
if (!is_null($centre->getMandat())) {
$access_token = "{$_ENV['goCardless_api']}";
$client = new \GoCardlessPro\Client([
'access_token' => $access_token,
'environment' => \GoCardlessPro\Environment::LIVE,
]);
$redirectFlow = $client->payments()->create([
"params" => [
"amount" => $centimes,
"currency" => "EUR",
"metadata" => [
"order_dispatch_date" => date("Y-m-d")
],
"links" => [
"mandate" => $centre->getMandat()
]
]
]);
$paiementId = $redirectFlow->{'api_response'}->{'body'}->{'payments'}->{'id'};
$facture->setPaiement($paiementId);
$entityManager->persist($facture);
$entityManager->flush();
} else {
$paiementId = 0;
$redirectFlow = "";
}
return $this->json([
'centre' => $centre->getID(),
'reduction' => $reduction,
'mandat' => $interval->format('%m mois'),
'audio' => count($audios),
'date_debut' => $dateDebut,
'date_fin' => $dateFin,
'MyRDV' => $myrdv,
'MyRDVAdvanced' => $myRdvAdvanced,
'MyLead' => $mylead,
'MyLeadAdvanced' => $myleadAdvanced,
'idFact' => $factureId,
'factureId' => $factId,
'tokenFact' => $tokenId,
'dateFacture' => $dateFact,
'numeroFact' => $numeroFact,
'paiementId' => $paiementId,
'redirect' => $redirectFlow
]);
}
/**
* @Route("/getPaiement/", name="getPaiement", methods={"GET"})
*/
public function getPaiement()
{
//Envoi a Gocardless
$access_token = "{$_ENV['goCardless_api']}";
$client = new \GoCardlessPro\Client([
'access_token' => $access_token,
'environment' => \GoCardlessPro\Environment::LIVE,
]);
$redirectFlow = $client->payments()->get("PM004RNN4TTSXJ");
return $this->json([
'redirect' => $redirectFlow
]);
}
/**
* @Route("/gerantCenter/{id}/", name="getGerantCentre", methods={"GET","HEAD"})
*/
public function getGerantCentres(Request $request, Audio $audio)
{
if (!$request->query->get('token')) {
return new Response(json_encode([
"message" => "Pas de token n'a été spécifié",
"status" => 401,
]), 401);
}
$entityManager = $this->getDoctrine()->getManager();
$audioCentre = $this->getDoctrine()
->getRepository(Centre::class)->findBy(['id_gerant' => $audio->getId()]);
//dd($audioCentre);
/** @var Token */
$token = $this->getDoctrine()
->getRepository(Token::class)
->findOneBy(['token' => $request->query->get('token'), 'id_audio' => $audio]);
if (!$token) {
return new Response(json_encode([
"message" => "Pas de token trouvé dans la base de données. Veuillez vous reconnecter.",
"status" => 404,
]), 404);
}
// get token age
$dateDiff = $token->getCreationDate()->diff(new DateTime());
// if the token if older than 7 days
if ($dateDiff->d > 7) {
$entityManager->remove($token);
$entityManager->flush();
return $this->json([
'message' => 'Ce token est obselète. Veuillez vous reconnecter.',
'path' => 'src/Controller/ClientController.php',
"status" => 401,
], 401);
}
// get plan
$planAudio = $this->getDoctrine()
->getRepository(Subscription::class)
->findOneBy(['audio' => $audio->getId()]);
if ($planAudio) {
$planQuanity = $planAudio->getPlan()->getId();
} else {
$planAudio = $this->getDoctrine()
->getRepository(SpecificSubscription::class)
->findOneBy(['audio' => $audio->getId()]);
if ($planAudio) {
$planQuanity = $planAudio->getPlan()->getId();
} else {
$planAudio = $this->getDoctrine()
->getRepository(PartnerSubscription::class)
->findOneBy(['audio' => $audio->getId()]);
$planQuanity = $planAudio->getPlan()->getId();
}
}
if ($audio->getIsPartner()) {
// get plan
$planAudio = $this->getDoctrine()
->getRepository(PartnerSubscription::class)
->findOneBy(['audio' => $audio->getId()]);
} else {
// get plan
$planAudio = $this->getDoctrine()
->getRepository(Subscription::class)
->findOneBy(['audio' => $audio->getId()]);
if (!$planAudio) {
$planAudio = $this->getDoctrine()
->getRepository(SpecificSubscription::class)
->findOneBy(['audio' => $audio->getId()]);
}
}
if (!$planAudio)
return $this->json([
"message" => "Plan nexiste pas",
"status" => 404,
]);
if ($planAudio) {
$planQuanity = $planAudio->getQuantity();
$planAmount = $planAudio->getPaidAmount();
$planName = $planAudio->getPlan()->getName();
$planInterval = $planAudio->getPlanInterval();
$planId = $planAudio->getPlan()->getId();
}
$centers = array_map(function ($centre) {
return [
"id" => $centre->getId(),
"address" => $centre->getAddress(),
"city" => $centre->getCity(),
"name" => $centre->getName(),
"website" => $centre->getWebsite(),
"isSign" => $centre->getIsSign(),
'urlRdv' => $centre->getUrlRdv()
];
}, $audioCentre);
return $this->json([
"centers" => $centers,
"planId" => $planId,
"planQuantity" => $planQuanity,
"planAmount" => $planAmount,
"planName" => $planName,
"planInterval" => $planInterval,
"status" => 200
]);
}
/**
* @Route("/center/add", name="postCenterAudio", methods={"POST"})
*/
public function postCenterPro(Request $request, PublicFunction $publicFunction, StripeService $stripeService): Response
{
$data = json_decode($request->getContent(), true);
$audioCheckTel = $this->getDoctrine()
->getRepository(Centre::class)
->findOneBy(["phone" => $data['phone']]);
if ($audioCheckTel && !$data['isSamePhone']) {
return $this->json([
"message" => "Le numéro de téléphone existe déjà",
"status" => 404,
]);
}
if (!isset($data["token"])) {
return new Response(json_encode([
"message" => "Pas de token n'a été spécifié",
"status" => 401,
]), 401);
}
$entityManager = $this->getDoctrine()->getManager();
/** @var Token */
$token = $this->getDoctrine()
->getRepository(Token::class)
->findOneBy(['token' => $data["token"], 'id_audio' => $data["gerant"]]);
if (!$token) {
return new Response(json_encode([
"message" => "Pas de token trouvé dans la base de données. Veuillez vous reconnecter.",
"status" => 404,
]), 404);
}
// get token age
$dateDiff = $token->getCreationDate()->diff(new DateTime());
// if the token if older than 7 days
if ($dateDiff->d > 7) {
$entityManager->remove($token);
$entityManager->flush();
return $this->json([
'message' => 'Ce token est obselète. Veuillez vous reconnecter.',
'path' => 'src/Controller/ClientController.php',
"status" => 401,
], 401);
}
$entityManager = $this->getDoctrine()->getManager();
// update subscription
if (isset($data["subscriptionId"])) {
$planAudio = $this->getDoctrine()
->getRepository(Subscription::class)
->find($data["subscriptionId"]);
$quantity = $planAudio->getQuantity() + 1;
if ($planAudio->getPlanInterval() == "year") {
$discountPercentage = 15.8;
$pricePerMonth = $planAudio->getPlan()->getPrice();
$discountAnnual = ($pricePerMonth * 12) * (1 - ($discountPercentage / 100));
$amount = $planAudio->getPaidAmount() + number_format($discountAnnual, 1);
} else {
$amount = $planAudio->getPaidAmount() + $planAudio->getPlan()->getPrice();
}
$planAudio->setQuantity($quantity);
$planAudio->setPaidAmount($amount);
$entityManager->persist($planAudio);
if ($_ENV['APP_ENV'] === 'dev') {
$privateKey = $_ENV['STRIPE_SECRET_KEY_TEST'];
} else {
$privateKey = $_ENV['STRIPE_SECRET_KEY_LIVE'];
}
$stripeProduct = $stripeService->getPriceIdMap();
\Stripe\Stripe::setApiKey($privateKey);
$cusId = $planAudio->getStripeCustomerId();
// Retrieve the existing subscription
$subscriptions = \Stripe\Subscription::all(['customer' => $cusId]);
$subscription = $subscriptions->data[0];
// Determine the price ID for the new product
$newPriceId = ($planAudio->getPlanInterval() == "year") ? $stripeProduct['additionnalCenterYearly'] : $stripeProduct['additionnalCenter'];
// Find if the price ID already exists in the subscription items
$existingItem = null;
foreach ($subscription->items->data as $item) {
if ($item->price->id == $newPriceId) {
$existingItem = $item;
break;
}
}
// Update quantity if the item exists, otherwise create a new item
if ($planAudio->getQuantity() > 2) {
// Update the quantity of the existing item
$newQuantity = $existingItem->quantity + 1;
\Stripe\SubscriptionItem::update($existingItem->id, [
'quantity' => $newQuantity,
]);
} else {
// Create a new subscription item
\Stripe\SubscriptionItem::create([
'subscription' => $subscription->id,
'price' => $newPriceId,
'quantity' => 1,
]);
}
}
// generate color code
$colors = array(
"#FFC0CB", // Pink
"#FFD700", // Gold
"#90EE90", // Light Green
"#87CEFA", // Light Sky Blue
"#FFA07A", // Light Salmon
"#F0E68C", // Khaki
"#B0C4DE", // Light Steel Blue
"#98FB98", // Pale Green
"#FFB6C1", // Light Pink
"#ADD8E6", // Light Blue
"#FF69B4", // Hot Pink
"#FFA500", // Orange
"#00FF7F", // Spring Green
"#AFEEEE", // Pale Turquoise
"#FF8C00", // Dark Orange
"#FFE4B5", // Moccasin
"#00CED1", // Dark Turquoise
"#7FFFD4", // Aquamarine
"#FF4500", // Orange Red
"#00FA9A", // Medium Spring Green
"#FFF0F5", // Lavender Blush
"#00BFFF", // Deep Sky Blue
"#FF6347", // Tomato
"#20B2AA", // Light Sea Green
"#FFFF00", // Yellow
"#32CD32", // Lime Green
"#FFF5EE", // Seashell
"#1E90FF", // Dodger Blue
"#CD5C5C", // Indian Red
"#8FBC8F", // Dark Sea Green
"#F0FFFF", // Azure
"#4169E1", // Royal Blue
"#FF8B00", // Dark Orange
"#66CDAA", // Medium Aquamarine
"#FFFACD", // Lemon Chiffon
"#6495ED", // Cornflower Blue
"#FF7F50", // Coral
"#00FF00", // Lime
"#FAFAD2", // Light Goldenrod Yellow
"#87CEEB", // Sky Blue
"#DC143C", // Crimson
"#2E8B57", // Sea Green
"#F5DEB3", // Wheat
"#4682B4", // Steel Blue
"#CD853F", // Peru
"#8A2BE2", // Blue Violet
"#D2691E", // Chocolate
"#6A5ACD", // Slate Blue
"#F5F5DC", // Beige
"#7B68EE", // Medium Slate Blue
);
// short initial
$name = $data['name'];
$words = explode(' ', $name);
$initials = '';
foreach ($words as $word) {
$initials .= strtoupper(substr($word, 0, 1));
}
$initials = strtoupper($initials);
$shortName = substr($initials, 0, 2);
$randomColor = $colors[array_rand($colors)];
// get gerant
$gerant = $this->getDoctrine()
->getRepository(Audio::class)
->find($data['gerant']);
// set center
$centre = new Centre();
// generate slug url
$slug = $this->slugger->slug($data["name"])->lower();
$slugify = $this->getDoctrine()
->getRepository(Centre::class)
->findOneBy(array('slug' => $slug));
if ($slugify) {
$centre->setSlug($slug . "-1");
} else {
$centre->setSlug($slug);
}
$centre->setName($data["name"]);
if (isset($data["imgUrl"]))
$centre->setImgUrl($data["imgUrl"]);
if (isset($data["finessURL"]))
$centre->setFinessUrl($data["finessURL"]);
$centre->setIsRdvDomicile($data["isRdvDomicile"]);
$centre->setIdGerant($gerant);
$centre->setAddress($data["address"]);
$centre->setPostale($data["postal"]);
$centre->setCity($data["city"]);
$centre->setFiness($data["finess"]);
$centre->setIsValid(true);
$centre->setSiret($data["siret"]);
$centre->setWebsite($data["website"]);
$centre->setSignupDate(new \DateTime());
if ($data['isSamePhone']) {
$principalCenter = $this->getDoctrine()
->getRepository(AudioCentre::class)
->findOneBy(['id_audio' => $gerant]);
$phone = $principalCenter ? $principalCenter->getIdCentre()->getPhone() : "";
$centre->setPhone($phone);
} else {
$centre->setPhone($data['phone']);
}
$centre->setIsHandicap($data["isHandicap"]);
$centre->setInitial($shortName);
$centre->setLongitude($data["longitude"]);
$centre->setLatitude($data["latitude"]);
$centre->setCalendarColor($randomColor);
$centre->setHoraire($publicFunction->centreHoraire2);
$centerHoliday = json_decode($publicFunction->centreHoraire4, true);
$centre->setHorairesHoliday($centerHoliday);
$entityManager->persist($centre);
// set audio center
$audioCentre = new AudioCentre();
$audioCentre->setIdAudio($gerant);
$audioCentre->setIdCentre($centre);
$audioCentre->setIsConfirmed(true);
$audioCentre->setHoraire($publicFunction->centreHoraire2);
$centerHoliday = json_decode($publicFunction->centreHoraire4, true);
$audioCentre->setHorairesHoliday($centerHoliday);
$entityManager->persist($audioCentre);
// set access to center
$accessCentre = new AccessCentre();
foreach ($data["access"] as $accessData) {
if (isset($accessData["metro"]))
$accessCentre->setMetro(json_encode($accessData["metro"], JSON_FORCE_OBJECT));
if (isset($accessData["bus"]))
$accessCentre->setBus(json_encode($accessData["bus"], JSON_FORCE_OBJECT));
if (isset($accessData["tram"]))
$accessCentre->setTram(json_encode($accessData["tram"], JSON_FORCE_OBJECT));
if (isset($accessData["rer"]))
$accessCentre->setRer(json_encode($accessData["rer"], JSON_FORCE_OBJECT));
if (isset($accessData["parkingPublic"]))
$accessCentre->setParkingPublic(json_encode($accessData["parkingPublic"], JSON_FORCE_OBJECT));
if (isset($accessData["parkingPrivate"]))
$accessCentre->setParkingPrivate(json_encode($accessData["parkingPrivate"], JSON_FORCE_OBJECT));
if (isset($accessData["other"]))
$accessCentre->setOther(json_encode($accessData["other"], JSON_FORCE_OBJECT));
}
$accessCentre->setIdCentre($centre);
$entityManager->persist($accessCentre);
// save print setting
$setting = new Setting();
$setting->setName($data["name"]);
$setting->setAddress($data["address"]);
$setting->setPhone($data["phone"]);
$setting->setLogoUrl($centre->getImgUrl());
$setting->setWebsite($data["website"]);
$setting->setFirstname($gerant->getName());
$setting->setLastname($gerant->getLastname());
$setting->setEmail($gerant->getMail());
$setting->setSeuilCaDroite(true);
$setting->setSeuilCaGauche(true);
$setting->setSeuilConfortDroite(true);
$setting->setSeuilinconfortDroite(true);
$setting->setSeuilInConfortGauche(true);
$setting->setSeuilConfortGauche(true);
$setting->setSeuilCoDroite(true);
$setting->setSeuilCoGauche(true);
$setting->setSeuilCaMaskingDroite(true);
$setting->setSeuilCaMaskingGauche(true);
$setting->setSeuilCoMaskingDroite(true);
$setting->setSeuilCoMaskingGauche(true);
/*
$setting->setCasqueDroite(false);
$setting->setCasqueGauche(false);
$setting->setCasqueBinaural(false);
$setting->setChampsLibreDroite(false);
$setting->setChampsLibreGauche(false);
$setting->setChampsLibreBinaural(false);
$setting->setChampsLibreAppDroite(false);
$setting->setChampsLibreAppGauche(false);
$setting->setChampsLibreAppBinaural(false);*/
$setting->setCasqueDroite(true);
$setting->setCasqueGauche(true);
$setting->setCasqueBinaural(true);
$setting->setChampsLibreDroite(true);
$setting->setChampsLibreGauche(true);
$setting->setChampsLibreBinaural(true);
$setting->setChampsLibreAppDroite(true);
$setting->setChampsLibreAppGauche(true);
$setting->setChampsLibreAppBinaural(true);
$setting->setCentre($centre);
$entityManager->persist($setting);
//add the centre access
if (isset($data["mutuelle"]))
foreach ($data["mutuelle"] as $mutuelleObject) {
$mutuelle = $this->getDoctrine()
->getRepository(Mutuelle::class)
->findOneBy(['id' => $mutuelleObject]);
if ($mutuelle == null) {
return new Response(json_encode([
'message' => 'Error, no mutuelle found at this id ' . $mutuelleObject,
'path' => 'src/Controller/CentreController.php',
]));
} else {
$centreMutuelle = new CentreMutuelle();
$centreMutuelle->setIdMutuelle($mutuelle);
$centreMutuelle->setIdCentre($centre);
if (isset($data["otherMutuelle"]) && $mutuelle->getLibelle() == "Autres")
$centreMutuelle->setOther(json_encode($data["otherMutuelle"], JSON_FORCE_OBJECT));
$entityManager->persist($centreMutuelle);
}
}
//other spetiality
if (isset($data["otherSpetiality"])) {
$audioSpecialite = new AudioSpecialite();
// $audioSpecialite->setIdSpecialite($specialite);
$audioSpecialite->setIdAudio($audio);
$audioSpecialite->setOther(json_encode($data["otherSpetiality"], JSON_FORCE_OBJECT));
$entityManager->persist($audioSpecialite);
}
if (isset($data["prestation"]))
foreach ($data["prestation"] as $prestationId) {
$prestation = $this->getDoctrine()
->getRepository(Prestation::class)
->findOneBy(['id' => $prestationId]);
if ($prestation == null) {
return new Response(json_encode([
'message' => 'Error, no prestation found at this id ' . $prestationId,
'path' => 'src/Controller/CentreController.php',
]));
} else {
$centrePrestation = new CentrePrestation();
$centrePrestation->setIdPrestation($prestation);
$centrePrestation->setIdCentre($centre);
$entityManager->persist($centrePrestation);
}
}
// set the galeries for images by default
// Define an array of default image URLs
$defaultImages = ["by-default-1.jpeg", "by-default-2.jpeg", "by-default-3.jpeg"];
// Iterate through each default image
foreach ($defaultImages as $imageUrl) {
$centerImage = new CenterImage();
$centerImage->setType("image");
$centerImage->setUrl($imageUrl);
// Associate the center image with the current center
$centerImage->setCenter($centre);
$entityManager->persist($centerImage);
}
/* if (isset($data["tier"]))
foreach ($data["tier"] as $tierObject) {
$tier = $this->getDoctrine()
->getRepository(Tier::class)
->findOneBy(['id' => $tierObject]);
if ($tier == null) {
return new Response(json_encode([
'message' => 'Error, no tier found at this id ' . $tierObject,
'path' => 'src/Controller/CentreController.php',
]));
} else {
$centreTier = new CentreTier();
$centreTier->setIdTier($tier);
$centreTier->setIdCentre($centre);
$entityManager->persist($centreTier);
}
}*/
$entityManager->flush();
$name = $centre->getName();
$city = $centre->getCity();
$postal = $centre->getPostale();
$nameSlug = strtolower(preg_replace('/[^a-zA-Z0-9]+/', '-', trim($name)));
$citySlug = strtolower(preg_replace('/[^a-zA-Z0-9]+/', '-', trim($city)));
$baseClient = $_ENV['BASE_client'] ?? 'https://default-client-url.com';
$urlRdv = "{$baseClient}audioprothesiste/{$citySlug}/{$postal}/{$nameSlug}/prise-de-rdvaudioprothesiste-rapide/{$centre->getId()}";
if (!$centre->getUrlRdv() || $centre->getUrlRdv() !== $urlRdv) {
$centre->setUrlRdv($urlRdv);
$entityManager->persist($centre);
$entityManager->flush();
}
return $this->json([
'message' => 'centre a été ajouté',
"status" => 200
]);
}
/**
* @Route("/getcentre/{id}", name="getCentreId", methods={"GET","HEAD"})
*/
public function getCentreId(Centre $centre, PublicFunction $publicFunction): Response
{
$accessCentre = $this->getDoctrine()->getRepository(AccessCentre::class)
->findOneBy(array('id_centre' => $centre->getId()));
/*if (!$accessCentre)
return new Response(json_encode([
'message' => 'Error, no accessCentre found at this id',
'path' => 'src/Controller/CentreController.php',
]), 404);
*/
/** @var CentrePrestation[]*/
$prestations = $this->getDoctrine()->getRepository(CentrePrestation::class)
->findBy(array('id_centre' => $centre->getId()));
$resultPrestation = new ArrayCollection();
foreach ($prestations as $prestation) {
$resultPrestation->add([
"id" => $prestation->getIdPrestation()->getId(),
"titre" => $prestation->getIdPrestation()->getLibelle(),
]);
}
/** @var CentreMutuelle[]*/
$mutuelles = $this->getDoctrine()->getRepository(CentreMutuelle::class)
->findBy(array('id_centre' => $centre->getId()));
$resultMutuelle = new ArrayCollection();
foreach ($mutuelles as $mutuelle) {
$resultMutuelle->add([
"id" => $mutuelle->getIdMutuelle()->getId(),
"titre" => $mutuelle->getIdMutuelle()->getLibelle(),
]);
}
if ($accessCentre) {
$metroIDs = json_decode($accessCentre->getMetro(), true);
$metroNames = [];
if (is_array($metroIDs)) {
$stations = $this->getDoctrine()->getRepository(Station::class)->findBy(['id' => $metroIDs]);
foreach ($stations as $station) {
$metroNames[] = [
"name" => $station->getName(),
"value" => $station->getId(),
];
}
}
return $this->json([
"tram" => json_decode($accessCentre->getTram(), true),
"rer" => json_decode($accessCentre->getRer(), true),
"metro" => $metroNames,
"bus" => json_decode($accessCentre->getBus(), true),
"parking" => json_decode($accessCentre->getParkingPublic(), true),
"parkingPrivate" => json_decode($accessCentre->getParkingPrivate(), true),
"other" => json_decode($accessCentre->getOther(), true),
"id" => $centre->getId(),
"audio_id" => $centre->getIdGerant()->getId(),
"name" => $centre->getName(),
"imgUrl" => $centre->getImgUrl(),
"isRdvDomicile" => $centre->getIsRdvDomicile(),
"address" => $centre->getAddress(),
"numero" => $centre->getNumero(),
"voie" => $centre->getVoie(),
"rue" => $centre->getRue(),
"description" => $centre->getDescription(),
"postale" => $centre->getPostale(),
"city" => $centre->getCity(),
"finess" => $centre->getFiness(),
"siret" => $centre->getSiret(),
"website" => $centre->getWebsite(),
"phone" => $centre->getPhone(),
"imgUrl" => $centre->getImgUrl(),
"aditionnelInfo" => $centre->getAditionnelInfo(),
"initial" => $centre->getInitial(),
"calendarColor" => $centre->getCalendarColor(),
"isHandicap" => $centre->getIsHandicap(),
"longitude" => $centre->getLongitude(),
"latitude" => $centre->getLatitude(),
"isSign" => $centre->getIsSign(),
//"comments" => $comments,
"mutuelles" => $resultMutuelle->toArray(),
"prestations" => $resultPrestation->toArray(),
//"tiers" => $resultTier->toArray(),
//"audio" => $resultAudio->toArray(),
"schedule" => $centre->getHoraire(),
"status" => 200,
]);
} else {
return $this->json([
"id" => $centre->getId(),
"audio_id" => $centre->getIdGerant()->getId(),
"name" => $centre->getName(),
"imgUrl" => $centre->getImgUrl(),
"isRdvDomicile" => $centre->getIsRdvDomicile(),
"address" => $centre->getAddress(),
"numero" => $centre->getNumero(),
"voie" => $centre->getVoie(),
"rue" => $centre->getRue(),
"description" => $centre->getDescription(),
"postale" => $centre->getPostale(),
"city" => $centre->getCity(),
"finess" => $centre->getFiness(),
"siret" => $centre->getSiret(),
"website" => $centre->getWebsite(),
"phone" => $centre->getPhone(),
"imgUrl" => $centre->getImgUrl(),
"aditionnelInfo" => $centre->getAditionnelInfo(),
"initial" => $centre->getInitial(),
"calendarColor" => $centre->getCalendarColor(),
"isHandicap" => $centre->getIsHandicap(),
"longitude" => $centre->getLongitude(),
"latitude" => $centre->getLatitude(),
// "averageRating" => $publicFunction->calculateRating($centreRdvs),
//"nbrReview" => count($centreRdvs),
"tram" => null,
"rer" => null,
"metro" => null,
"bus" => null,
"parking" => null,
"parkingPrivate" => null,
"other" => null,
"isSign" => $centre->getIsSign(),
//"comments" => $comments,
"mutuelles" => $resultMutuelle->toArray(),
"prestations" => $resultPrestation->toArray(),
//"tiers" => $resultTier->toArray(),
//"audio" => $resultAudio->toArray(),
"schedule" => $centre->getHoraire(),
"status" => 200,
]);
}
}
/**
* @Route("/center/update/{id}", name="updateCenterAudio", methods={"POST"})
*/
public function EditCentreBy(Request $request, Centre $centre, PublicFunction $publicFunction): Response
{
$data = json_decode($request->getContent(), true);
if (!isset($data["token"])) {
return new Response(json_encode([
"message" => "Pas de token n'a été spécifié",
"status" => 401,
]), 401);
}
$audioCheckTel = $this->getDoctrine()
->getRepository(Centre::class)
->findOneBy(["phone" => $data['phone']]);
/* if ($audioCheckTel)
return $this->json([
"message" => "Le numéro de téléphone existe déjà",
"status" => 404,
]);
*/
$entityManager = $this->getDoctrine()->getManager();
/** @var Token */
$token = $this->getDoctrine()
->getRepository(Token::class)
->findOneBy(['token' => $data["token"], 'id_audio' => $data["gerant"]]);
if (!$token) {
return new Response(json_encode([
"message" => "Pas de token trouvé dans la base de données. Veuillez vous reconnecter.",
"status" => 404,
]), 404);
}
// get token age
$dateDiff = $token->getCreationDate()->diff(new DateTime());
// if the token if older than 7 days
if ($dateDiff->d > 7) {
$entityManager->remove($token);
$entityManager->flush();
return $this->json([
'message' => 'Ce token est obselète. Veuillez vous reconnecter.',
'path' => 'src/Controller/ClientController.php',
"status" => 401,
], 401);
}
$entityManager = $this->getDoctrine()->getManager();
if (isset($data["name"]))
$centre->setName($data["name"]);
if (isset($data["imgUrl"]))
$centre->setImgUrl($data["imgUrl"]);
if (isset($data["finessURL"]))
$centre->setFinessUrl($data["finessURL"]);
if (isset($data["isRdvDomicile"]))
$centre->setIsRdvDomicile($data["isRdvDomicile"]);
if (isset($data["address"]))
$centre->setAddress($data["address"]);
if (isset($data["postal"]))
$centre->setPostale($data["postal"]);
if (isset($data["city"]))
$centre->setCity($data["city"]);
if (isset($data["finess"]))
$centre->setFiness($data["finess"]);
if (isset($data["siret"]))
$centre->setSiret($data["siret"]);
if (isset($data["description"]))
$centre->setDescription($data["description"]);
if (isset($data["initial"]))
$centre->setInitial($data["initial"]);
if (isset($data["calendarColor"]))
$centre->setCalendarColor($data["calendarColor"]);
if (isset($data["website"]))
$centre->setWebsite($data["website"]);
if (isset($data["aditionnelInfo"]))
$centre->setAditionnelInfo($data["aditionnelInfo"]);
// Toujours défini à la date actuelle
$centre->setSignupDate(new \DateTime());
if (isset($data["phone"]))
$centre->setPhone($data["phone"]);
if (isset($data["isHandicap"]))
$centre->setIsHandicap($data["isHandicap"]);
if (isset($data["longitude"]))
$centre->setLongitude($data["longitude"]);
if (isset($data["latitude"]))
$centre->setLatitude($data["latitude"]);
// $centre->setHoraire($publicFunction->centreHoraire2);
$entityManager->persist($centre);
// Fetch access centre data
// Fetch access centre data
$accessCentre = $entityManager->getRepository(AccessCentre::class)->findOneBy(['id_centre' => $centre->getId()]);
if ($accessCentre) {
// Set the values from the form inputs
foreach ($data["access"] as $accessData) {
if (isset($accessData["metro"]))
$accessCentre->setMetro(json_encode($accessData["metro"], JSON_FORCE_OBJECT));
if (isset($accessData["bus"]))
$accessCentre->setBus(json_encode($accessData["bus"], JSON_FORCE_OBJECT));
if (isset($accessData["tram"]))
$accessCentre->setTram(json_encode($accessData["tram"], JSON_FORCE_OBJECT));
if (isset($accessData["rer"]))
$accessCentre->setRer(json_encode($accessData["rer"], JSON_FORCE_OBJECT));
if (isset($accessData["parkingPublic"]))
$accessCentre->setParkingPublic(json_encode($accessData["parkingPublic"], JSON_FORCE_OBJECT));
if (isset($accessData["parkingPrivate"]))
$accessCentre->setParkingPrivate(json_encode($accessData["parkingPrivate"], JSON_FORCE_OBJECT));
if (isset($accessData["other"]))
$accessCentre->setOther(json_encode($accessData["other"], JSON_FORCE_OBJECT));
}
//$accessCentre->setIdCentre($centre);
/*if (isset($data['metro'])) {
$metroValues = explode(',', $data['metro']);
$accessCentre->setMetro(json_encode($metroValues, JSON_FORCE_OBJECT));
}
if (isset($data['bus'])) {
$busValues = explode(',', $data['bus']);
$accessCentre->setBus(json_encode($busValues, JSON_FORCE_OBJECT));
}
if (isset($data['tram'])) {
$tramValues = explode(',', $data['tram']);
$accessCentre->setTram(json_encode($tramValues, JSON_FORCE_OBJECT));
}
if (isset($data['rer'])) {
$rerValues = explode(',', $data['rer']);
$accessCentre->setRer(json_encode($rerValues, JSON_FORCE_OBJECT));
}
if (isset($data['parking'])) {
$parkingValues = explode(',', $data['parking']);
$accessCentre->setParkingPublic(json_encode($parkingValues, JSON_FORCE_OBJECT));
}
if (isset($data['parkingPrivate'])) {
$parkingPrivateValues = explode(',', $data['parkingPrivate']);
$accessCentre->setParkingPrivate(json_encode($parkingPrivateValues, JSON_FORCE_OBJECT));
}
if (isset($data['other'])) {
$otherValues = explode(',', $data['other']);
$accessCentre->setOther(json_encode($otherValues, JSON_FORCE_OBJECT));
}*/
} else {
// Create an instance of AccessCentre
$accessCentre = new AccessCentre();
// Set the values from the form inputs
if (isset($accessData["metro"]))
$accessCentre->setMetro(json_encode($accessData["metro"], JSON_FORCE_OBJECT));
if (isset($accessData["bus"]))
$accessCentre->setBus(json_encode($accessData["bus"], JSON_FORCE_OBJECT));
if (isset($accessData["tram"]))
$accessCentre->setTram(json_encode($accessData["tram"], JSON_FORCE_OBJECT));
if (isset($accessData["rer"]))
$accessCentre->setRer(json_encode($accessData["rer"], JSON_FORCE_OBJECT));
if (isset($accessData["parkingPublic"]))
$accessCentre->setParkingPublic(json_encode($accessData["parkingPublic"], JSON_FORCE_OBJECT));
if (isset($accessData["parkingPrivate"]))
$accessCentre->setParkingPrivate(json_encode($accessData["parkingPrivate"], JSON_FORCE_OBJECT));
if (isset($accessData["other"]))
$accessCentre->setOther(json_encode($accessData["other"], JSON_FORCE_OBJECT));
if (isset($data['other'])) {
$otherValues = explode(',', $data['other']);
$accessCentre->setOther(json_encode($otherValues, JSON_FORCE_OBJECT));
}
}
$mutuels = $this->getDoctrine()
->getRepository(CentreMutuelle::class)
->findBy(['id_centre' => $centre->getId()]);
$prestations = $this->getDoctrine()
->getRepository(CentrePrestation::class)
->findBy(['id_centre' => $centre->getId()]);
$entityManager = $this->getDoctrine()->getManager();
foreach ($mutuels as $mutuel) {
$entityManager->remove($mutuel);
}
foreach ($prestations as $prestation) {
$entityManager->remove($prestation);
}
if (isset($data["mutuelle"]))
foreach ($data["mutuelle"] as $mutuelleObject) {
$mutuelle = $this->getDoctrine()
->getRepository(Mutuelle::class)
->findOneBy(['id' => $mutuelleObject]);
if ($mutuelle == null) {
return new Response(json_encode([
'message' => 'Error, no mutuelle found at this id ' . $mutuelleObject,
'path' => 'src/Controller/CentreController.php',
]));
} else {
$centreMutuelle = new CentreMutuelle();
$centreMutuelle->setIdMutuelle($mutuelle);
$centreMutuelle->setIdCentre($centre);
if (isset($data["otherMutuelle"]) && $mutuelle->getLibelle() == "Autres")
$centreMutuelle->setOther(json_encode($data["otherMutuelle"], JSON_FORCE_OBJECT));
$entityManager->persist($centreMutuelle);
}
}
//other spetiality
if (isset($data["otherSpetiality"])) {
$audioSpecialite = new AudioSpecialite();
// $audioSpecialite->setIdSpecialite($specialite);
$audioSpecialite->setIdAudio($audio);
$audioSpecialite->setOther(json_encode($data["otherSpetiality"], JSON_FORCE_OBJECT));
$entityManager->persist($audioSpecialite);
}
if (isset($data["prestation"]))
foreach ($data["prestation"] as $prestationId) {
$prestation = $this->getDoctrine()
->getRepository(Prestation::class)
->findOneBy(['id' => $prestationId]);
if ($prestation == null) {
return new Response(json_encode([
'message' => 'Error, no prestation found at this id ' . $prestationId,
'path' => 'src/Controller/CentreController.php',
]));
} else {
$centrePrestation = new CentrePrestation();
$centrePrestation->setIdPrestation($prestation);
$centrePrestation->setIdCentre($centre);
$entityManager->persist($centrePrestation);
}
}
// Set the centre ID
$accessCentre->setIdCentre($centre);
// Persist the access centre entity
$entityManager->persist($accessCentre);
$entityManager->flush();
return $this->json([
'message' => 'centre a été modifié avec succée',
"status" => 200
]);
}
/**
* @Route("/centresingle/horaire/{id}", name="setCentreHoraireSingle", methods={"PUT"})
*/
public function setCentreSingleHoraire(Centre $centre, PublicFunction $publicFunction, Request $request)
{
if (!$request->query->get('token')) {
return new Response(json_encode([
"message" => "Pas de token n'a été spécifié",
"status" => 401,
]), 401);
}
$entityManager = $this->getDoctrine()->getManager();
/** @var Token */
$token = $this->getDoctrine()
->getRepository(Token::class)
->findOneBy(['token' => $request->query->get('token'), 'id_audio' => $request->query->get('audio')]);
if (!$token) {
return new Response(json_encode([
"message" => "Pas de token trouvé dans la base de données. Veuillez vous reconnecter.",
"status" => 404,
]), 404);
}
// get token age
$dateDiff = $token->getCreationDate()->diff(new DateTime());
// if the token if older than 7 days
if ($dateDiff->d > 7) {
$entityManager->remove($token);
$entityManager->flush();
return $this->json([
'message' => 'Ce token est obselète. Veuillez vous reconnecter.',
'path' => 'src/Controller/AudioController.php',
"status" => 401,
], 401);
}
$entityManager = $this->getDoctrine()->getManager();
$data = json_decode($request->getContent(), true);
$centre->setHoraire($data["horaires"]);
$entityManager->flush();
return $this->json([
"id" => $centre->getId(),
"horaires" => $data["horaires"]
]);
}
/**
* @Route("/centresingle/horaire-holiday/{id}", name="setCentreHoraireHolidaySingle", methods={"PUT"})
*/
public function setCentreHoraireHolidaySingle(Centre $centre, PublicFunction $publicFunction, Request $request)
{
if (!$request->query->get('token')) {
return new Response(json_encode([
"message" => "Pas de token n'a été spécifié",
"status" => 401,
]), 401);
}
$entityManager = $this->getDoctrine()->getManager();
/** @var Token */
$token = $this->getDoctrine()
->getRepository(Token::class)
->findOneBy(['token' => $request->query->get('token'), 'id_audio' => $request->query->get('audio')]);
if (!$token) {
return new Response(json_encode([
"message" => "Pas de token trouvé dans la base de données. Veuillez vous reconnecter.",
"status" => 404,
]), 404);
}
// get token age
$dateDiff = $token->getCreationDate()->diff(new DateTime());
// if the token if older than 7 days
if ($dateDiff->d > 7) {
$entityManager->remove($token);
$entityManager->flush();
return $this->json([
'message' => 'Ce token est obselète. Veuillez vous reconnecter.',
'path' => 'src/Controller/AudioController.php',
"status" => 401,
], 401);
}
$entityManager = $this->getDoctrine()->getManager();
$data = json_decode($request->getContent(), true);
$centre->setHorairesHoliday($data["horaires"]);
$entityManager->flush();
return $this->json([
"id" => $centre->getId(),
"horaires" => $data["horaires"]
]);
}
/**
* @Route("/centres/fData/{id}", name="postCentresImageByFormData", methods={"POST"})
*/
public function postCentresImageByFormData(Centre $centre, Request $request, FileUploader $fileUploader): Response
{
if (!$request->query->get('token')) {
return new Response(json_encode([
"message" => "Pas de token n'a été spécifié",
"status" => 401,
]), 401);
}
$entityManager = $this->getDoctrine()->getManager();
/** @var Token */
$token = $this->getDoctrine()
->getRepository(Token::class)
->findOneBy(['token' => $request->query->get('token'), 'id_audio' => $centre->getIdGerant()]);
if (!$token) {
return new Response(json_encode([
"message" => "Pas de token trouvé dans la base de données. Veuillez vous reconnecter.",
"status" => 404,
]), 404);
}
// get token age
$dateDiff = $token->getCreationDate()->diff(new DateTime());
// if the token if older than 7 days
if ($dateDiff->d > 7) {
$entityManager = $this->getDoctrine()->getManager();
$entityManager->remove($token);
$entityManager->flush();
return $this->json([
'message' => 'Ce token est obselète. Veuillez vous reconnecter.',
'path' => 'src/Controller/AudioController.php',
"status" => 401,
], 401);
}
// Handle updates to existing images
if (isset($_FILES["file"])) {
foreach ($_FILES["file"]["error"] as $key => $error) {
if ($error == UPLOAD_ERR_OK) {
$file = [
"name" => $_FILES["file"]["name"][$key],
"type" => $_FILES["file"]["type"][$key],
"tmp_name" => $_FILES["file"]["tmp_name"][$key],
"error" => $_FILES["file"]["error"][$key],
"size" => $_FILES["file"]["size"][$key],
];
// Extract the image ID from the key
$imageId = $key; // Ensure this matches how you're identifying images
$image = $entityManager->getRepository(CenterImage::class)->find($imageId);
if ($image) {
// Delete old file from the filesystem
$oldFilePath = "images/centres/" . $image->getUrl();
if (file_exists($oldFilePath)) {
unlink($oldFilePath);
}
} else {
// If no existing image, create a new entity
$image = new CenterImage();
$image->setCenter($centre);
}
// Determine file type (image or video) based on MIME type
$fileType = mime_content_type($file['tmp_name']);
if (strpos($fileType, 'image') !== false) {
// File is an image
$image->setType('image');
} elseif (strpos($fileType, 'video') !== false) {
// File is a video
$image->setType('video');
}
$newfilename = $fileUploader->uploadFormData($file, "images/centres/");
if ($newfilename) {
$image->setUrl($newfilename);
$entityManager->persist($image);
}
}
}
}
// Handle new image uploads
if (isset($_FILES['newFile'])) {
foreach ($_FILES['newFile']['error'] as $key => $error) {
if ($error == UPLOAD_ERR_OK) {
$file = [
'name' => $_FILES['newFile']['name'][$key],
'type' => $_FILES['newFile']['type'][$key],
'tmp_name' => $_FILES['newFile']['tmp_name'][$key],
'error' => $_FILES['newFile']['error'][$key],
'size' => $_FILES['newFile']['size'][$key],
];
$image = new CenterImage();
$image->setCenter($centre);
$fileType = mime_content_type($file['tmp_name']);
if (strpos($fileType, 'image') !== false) {
$image->setType('image');
} elseif (strpos($fileType, 'video') !== false) {
$image->setType('video');
}
$newfilename = $fileUploader->uploadFormData($file, "images/centres/");
if ($newfilename) {
$image->setUrl($newfilename);
$entityManager->persist($image);
}
}
}
}
$entityManager->flush(); // Apply changes to the database
return $this->json([
"imgUrl" => $centre->getImgUrl(),
]);
}
/**
* @Route("/centre/images/{id}", name="getCentresImage", methods={"GET"})
*/
public function getCentresImage(Centre $center, PublicFunction $publicFunction): Response
{
$images = $this->getDoctrine()
->getRepository(CenterImage::class)
->findBy(['center' => $center]);
$imageCenter = array_map(function ($image) {
return [
"id" => $image->getId(),
"url" => $image->getUrl(),
"type" => $image->getType(),
];
}, $images);
return $this->json([
"images" => $imageCenter,
]);
}
/**
* @Route("/center/images/{url}", name="getCentresByImages", methods={"GET"})
*/
public function getCentresByImages(string $url, PublicFunction $publicFunction): Response
{
return $publicFunction->replyWithFile('images/centres/', $url);
}
/**
* @Route("centre/images/delete/", name="deleteCentresImage", methods={"POST"})
*/
public function deleteCentresImage(Request $request): Response
{
$imageId = $request->request->get("imageId");
$imageGalerie = $this->getDoctrine()->getRepository(CenterImage::class)
->find($imageId);
$defaultImageUrls = ["by-default-1.jpeg", "by-default-2.jpeg", "by-default-3.jpeg"];
if (!in_array($imageGalerie->getUrl(), $defaultImageUrls)) {
$filePath = $this->getParameter('kernel.project_dir') . "/assets/images/centres/" . $imageGalerie->getUrl();
if (file_exists($filePath)) {
unlink($filePath);
}
}
$entityManager = $this->getDoctrine()->getManager();
$entityManager->remove($imageGalerie);
$entityManager->flush();
return $this->json(["status" => 200]);
}
/**
* @Route("/center-update-description/{id}", name="setCentreDescription", methods={"PUT"})
*/
public function setCentreDescription(Centre $centre, PublicFunction $publicFunction, Request $request)
{
$data = json_decode($request->getContent(), true);
if (!$data['token']) {
return new Response(json_encode([
"message" => "Pas de token n'a été spécifié",
"status" => 401,
]), 401);
}
$entityManager = $this->getDoctrine()->getManager();
/** @var Token */
$token = $this->getDoctrine()
->getRepository(Token::class)
->findOneBy(['token' => $data['token'], 'id_audio' => $data['audio']]);
if (!$token) {
return new Response(json_encode([
"message" => "Pas de token trouvé dans la base de données. Veuillez vous reconnecter.",
"status" => 404,
]), 404);
}
// get token age
$dateDiff = $token->getCreationDate()->diff(new DateTime());
// if the token if older than 7 days
if ($dateDiff->d > 7) {
$entityManager->remove($token);
$entityManager->flush();
return $this->json([
'message' => 'Ce token est obselète. Veuillez vous reconnecter.',
'path' => 'src/Controller/AudioController.php',
"status" => 401,
], 401);
}
$date1 = new DateTime();
$date2 = new DateTime();
$entityManager = $this->getDoctrine()->getManager();
$centre->setDescription($data["description"]);
$entityManager->flush();
return $this->json([
"id" => $centre->getId(),
"status" => "200"
]);
}
/**
* @Route("/audioschedule/centre", name="getScheduleCentre", methods={"GET","HEAD"})
*/
public function getScheduleCentre(Request $request, PublicFunction $publicFunction)
{
$data = $request->query->all();
//dd($data);
if (!$data['token']) {
return new Response(json_encode([
"message" => "Pas de token n'a été spécifié",
"status" => 401,
]), 401);
}
$entityManager = $this->getDoctrine()->getManager();
/** @var Token */
$token = $this->getDoctrine()
->getRepository(Token::class)
->findOneBy(['token' => $data['token'], 'id_audio' => $data['audio']]);
if (!$token) {
return new Response(json_encode([
"message" => "Pas de token trouvé dans la base de données. Veuillez vous reconnecter.",
"status" => 404,
]), 404);
}
// get token age
$dateDiff = $token->getCreationDate()->diff(new DateTime());
// if the token if older than 7 days
if ($dateDiff->d > 7) {
$entityManager->remove($token);
$entityManager->flush();
return $this->json([
'message' => 'Ce token est obselète. Veuillez vous reconnecter.',
'path' => 'src/Controller/AudioController.php',
"status" => 401,
], 401);
}
$audio = $this->getDoctrine()
->getRepository(Audio::class)
->find($data['audio']);
$centre = $this->getDoctrine()
->getRepository(Centre::class)
->find($data['center']);
$date1 = new DateTime();
$date2 = new DateTime();
return $this->json([
"schedule" => [
$publicFunction->calculSchedule($audio, new \DateTime(), $centre),
$publicFunction->calculSchedule($audio, $date1->add(new DateInterval('P7D')), $centre),
$publicFunction->calculSchedule($audio, $date2->add(new DateInterval('P14D')), $centre)
],
"status" => "200"
]);
}
/**
* @Route("/villes", name="getVilleCentre", methods={"GET","HEAD"})
*/
public function getVilleCentre(Request $request, PublicFunction $publicFunction)
{
$data = $request->query->all();
//dd($data);
$villes = $this->getDoctrine()
->getRepository(Ville::class)
->findAll();
$getVilles = array_map(function ($ville) {
return [
"id" => $ville->getId(),
"nom" => $ville->getNom(),
"slug" => $ville->getSlug(),
];
}, $villes);
return $this->json([
"villes" => $getVilles,
"status" => "200"
]);
}
/**
* @Route("/assets/pdf/{filename}", name="download_pdf", methods={"GET"})
*/
public function downloadPdf(string $filename): Response
{
$filePath = '../assets/pdf/' . $filename;
if (!file_exists($filePath)) {
return new Response('File not found.', Response::HTTP_NOT_FOUND);
}
return new BinaryFileResponse($filePath);
}
/**
* @Route("/checkphoneclient", name="checkPhoneClient", methods={"GET","HEAD"})
*/
public function checkPhoneClient(Request $request, PublicFunction $publicFunction)
{
$clientPhoneTest = $this->getDoctrine()
->getRepository(Client::class)
->findOneBy(['phone' => $request->query->get('phone')]);
if ($clientPhoneTest) {
return $this->json([
'message' => 'Ce numéro de téléphone est déjà attribué.',
'path' => 'src/Controller/ClientController.php',
"status" => 401,
], 200);
}
return $this->json([
'message' => 'Le numéro n\'est pas utilisé.',
"status" => 200,
]);
}
/**
* @Route("/checkemailclient", name="checkEmailClient", methods={"GET","HEAD"})
*/
public function checkEmailClient(Request $request, PublicFunction $publicFunction)
{
$clientMailTest = $this->getDoctrine()
->getRepository(Client::class)
->findOneBy(['mail' => $request->query->get('mail')]);
if ($clientMailTest) {
return $this->json([
'message' => 'Ce mail est déjà attribué.',
'path' => 'src/Controller/ClientController.php',
"status" => 401,
], 200);
}
return $this->json([
'message' => 'Le mail n\'est pas utilisé.',
"status" => 200,
]);
}
/**
* @Route("/audioprothesiste/{ville}/{codePostal}/{nomDuCentre}/prise-de-rdv/{id}", name="getCentreByDetails", methods={"GET","HEAD"})
*/
public function getCentreByDetails(string $ville, string $codePostal, string $nomDuCentre, int $id, PublicFunction $publicFunction, Request $request): Response
{
// Récupération du centre par ville, code postal et nom
$centre = $this->getDoctrine()->getRepository(Centre::class)->find($id);
if (!$centre) {
return new Response(json_encode([
'message' => 'Error, no centre found for these details.',
'path' => 'src/Controller/CentreController.php',
]), 404);
}
/** @var CentrePrestation[]*/
$prestations = $this->getDoctrine()->getRepository(CentrePrestation::class)
->findBy(array('id_centre' => $centre->getId()));
$resultPrestation = new ArrayCollection();
foreach ($prestations as $prestation) {
$resultPrestation->add([
"id" => $prestation->getIdPrestation()->getId(),
"titre" => $prestation->getIdPrestation()->getLibelle(),
]);
}
/** @var CentreMutuelle[]*/
$mutuelles = $this->getDoctrine()->getRepository(CentreMutuelle::class)
->findBy(array('id_centre' => $centre->getId()));
$resultMutuelle = new ArrayCollection();
foreach ($mutuelles as $mutuelle) {
$resultMutuelle->add([
"id" => $mutuelle->getIdMutuelle()->getId(),
"titre" => $mutuelle->getIdMutuelle()->getLibelle(),
]);
}
/** @var CentreTier[]*/
$tiers = $this->getDoctrine()->getRepository(CentreTier::class)
->findBy(array('id_centre' => $centre->getId()));
$resultTier = new ArrayCollection();
foreach ($tiers as $tier) {
$resultTier->add([
"id" => $tier->getIdTier()->getId(),
"titre" => $tier->getIdTier()->getLibelle(),
]);
}
/** @var AudioCentre[] */
$liaisons = $this->getDoctrine()->getRepository(AudioCentre::class)
->findBy(array('id_centre' => $centre, 'isConfirmed' => true));
$resultAudio = new ArrayCollection();
foreach ($liaisons as $liaison) {
/** @var Audio */
$audio = $this->getDoctrine()->getRepository(Audio::class)
->findOneBy(array('id' => $liaison->getIdAudio()));
// Motifs
/** @var AudioMotif[] */
$motifs = $this->getDoctrine()->getRepository(AudioMotif::class)
->findBy(array('id_audio' => $liaison->getIdAudio()));
// will test whether or not the audio has the necessery motif to be added
$resultMotif = new ArrayCollection();
foreach ($motifs as $motif) {
// ignore deleted motif
if (!$motif->getIsDeleted() && $motif->getType() !== 2)
$resultMotif->add([
"id" => $motif->getIdMotif()->getId(),
"titre" => $motif->getIdMotif()->getTitre(),
"consigne" => $motif->getConsigne(),
"duration" => $motif->getDuration(),
]);
}
// Specialities
/** @var AudioSpecialite[] */
$specialities = $this->getDoctrine()->getRepository(AudioSpecialite::class)
->findBy(array('id_audio' => $liaison->getIdAudio()));
//speciality filter
$resultSpeciality = new ArrayCollection();
foreach ($specialities as $speciality) {
if ($speciality->getIdSpecialite() !== null) {
$resultSpeciality->add([
"id" => $speciality->getIdSpecialite()->getId(),
"titre" => $speciality->getIdSpecialite()->getLibelle(),
]);
}
}
//schedule
$date = new DateTime();
//add audio in the result
if ($centre->getHoraire() == null || $centre->getHoraire() == []) continue;
/** @var Rdv[] */
$audioRdvs = $this->getDoctrine()->getRepository(Rdv::class)
->findAllReviewsAudio($audio->getId());
$resultAudio->add([
"id" => $audio->getId(),
"civilite" => $audio->getCivilite(),
"name" => $audio->getName(),
"lastname" => $audio->getLastname(),
"birthdate" => $audio->getBirthdate(),
"mail" => $audio->getMail(),
"phone" => $audio->getPhone(),
"adeli" => $audio->getAdeli(),
"pin" => $audio->getPin(),
"description" => $audio->getDescription(),
"imgUrl" => $audio->getImgUrl(),
"averageRating" => $publicFunction->calculateRating($audioRdvs),
"nbrReview" => count($audioRdvs),
"motifs" => $resultMotif->toArray(),
"specialities" => $resultSpeciality->toArray(),
"schedule" => [
$publicFunction->calculSchedule($audio, new \DateTime(), $centre),
$publicFunction->calculSchedule($audio, $date->add(new DateInterval('P7D')), $centre),
$publicFunction->calculSchedule($audio, $date->add(new DateInterval('P14D')), $centre)
],
]);
}
/** @var AccessCentre*/
$accessCentre = $this->getDoctrine()->getRepository(AccessCentre::class)
->findOneBy(array('id_centre' => $centre->getId()));
if (!$accessCentre) {
$tram = [];
$rer = [];
$metro = [];
$bus = [];
$parking = [];
$pp = [];
$other = [];
} else {
$metroIDs = json_decode($accessCentre->getMetro(), true);
$metroNames = array();
if ($metroIDs) {
foreach ($metroIDs as $key => $stationID) {
$station = $this->getDoctrine()->getRepository(Station::class)->find($stationID);
if ($station) {
$metroNames[$key] = $station->getName();
} else {
$metroNames[$key] = "Station Not Found";
}
}
}
$tram = $accessCentre->getTram();
$rer = $accessCentre->getRer();
$metro = $metroNames;
$bus = $accessCentre->getBus();
$parking = $accessCentre->getParkingPublic();
$pp = $accessCentre->getParkingPrivate();
$other = $accessCentre->getOther();
}
/** @var Rdv[] */
$centreRdvs = $this->getDoctrine()->getRepository(Rdv::class)
->findAllReviewsCentre($centre->getId());
// Comment
/** @var Rdv[] */
$rdvs = $this->getDoctrine()->getRepository(Rdv::class)
->findBy(array('id_centre' => $centre));
$comments = [];
foreach ($rdvs as $rdv)
if ($rdv->getComment() && $rdv->getReview() && $rdv->getIdClient())
array_push($comments, [
"id" => $rdv->getIdClient()->getId(),
"name" => $rdv->getIdClient()->getName() . " " . $rdv->getIdClient()->getLastname()[0] . ".",
"comment" => $rdv->getComment(),
"isMale" => $rdv->getIdClient()->getCivilite() == "Monsieur",
"review" => $rdv->getReview(),
]);
$audioCentre = $this->getDoctrine()->getRepository(AudioCentre::class)
->findOneBy(['id_centre' => $centre->getId()]);
$audio = $this->getDoctrine()->getRepository(Audio::class)
->findOneBy(['id' => $audioCentre->getIdAudio()]);
//$doctor = $audio->serialize();
return new Response(json_encode([
"id" => $centre->getId(),
"audio_id" => $centre->getIdGerant()->getId(),
"name" => $centre->getName(),
"imgUrl" => $centre->getImgUrl(),
"isRdvDomicile" => $centre->getIsRdvDomicile(),
"address" => $centre->getAddress(),
"numero" => $centre->getNumero(),
"voie" => $centre->getVoie(),
"rue" => $centre->getRue(),
"description" => $centre->getDescription(),
"postale" => $centre->getPostale(),
"city" => $centre->getCity(),
"finess" => $centre->getFiness(),
"siret" => $centre->getSiret(),
"website" => $centre->getWebsite(),
"phone" => $centre->getPhone(),
"isHandicap" => $centre->getIsHandicap(),
"longitude" => $centre->getLongitude(),
"latitude" => $centre->getLatitude(),
"averageRating" => $publicFunction->calculateRating($centreRdvs),
"nbrReview" => count($centreRdvs),
"tram" => $tram,
"rer" => $rer,
"metro" => $metro,
"bus" => $bus,
"parking" => $parking,
"parkingPrivate" => $pp,
"other" => $other,
"comments" => $comments,
"mutuelles" => $resultMutuelle->toArray(),
"prestations" => $resultPrestation->toArray(),
"tiers" => $resultTier->toArray(),
"audio" => $resultAudio->toArray(),
"schedule" => $centre->getHoraire(),
//"doctor" => $doctor,
"status" => 200,
]));
}
/**
* @Route("/centres/generate-url-rdv", name="generateUrlRdvForAllCentres", methods={"POST"})
*/
public function generateUrlRdvForAllCentres(): Response
{
$entityManager = $this->getDoctrine()->getManager();
$repository = $this->getDoctrine()->getRepository(Centre::class);
// Récupération de tous les centres
$centres = $repository->findAll();
if (empty($centres)) {
return new Response(json_encode([
'message' => 'No centres found in the database.',
]), 404, ['Content-Type' => 'application/json']);
}
$baseClient = $_ENV['BASE_client'] ?? 'https://default-client-url.com';
$updatedCentres = [];
foreach ($centres as $centre) {
// Récupération des informations nécessaires
$id = $centre->getId();
$name = $centre->getName();
$city = $centre->getCity();
$postal = $centre->getPostale();
// Transformation en URL-friendly
$nameSlug = strtolower(preg_replace('/[^a-zA-Z0-9]+/', '-', trim($name)));
$citySlug = strtolower(preg_replace('/[^a-zA-Z0-9]+/', '-', trim($city)));
// Construction de l'URL
$urlRdv = "{$baseClient}audioprothesiste/{$citySlug}/{$postal}/{$nameSlug}/prise-de-rdvaudioprothesiste-rapide/{$id}";
// Mise à jour si l'URL est différente ou inexistante
if (!$centre->getUrlRdv() || $centre->getUrlRdv() !== $urlRdv) {
$centre->setUrlRdv($urlRdv);
$entityManager->persist($centre);
$updatedCentres[] = $centre->getId(); // Ajoute l'ID des centres mis à jour
}
}
// Sauvegarde des changements
$entityManager->flush();
// Retourne une réponse avec les centres mis à jour
return new Response(json_encode([
'message' => count($updatedCentres) . ' centres updated.',
'updatedCentres' => $updatedCentres,
]), 200, ['Content-Type' => 'application/json']);
}
/**
* @Route("/getlogin", name="getAssetsImage", methods={"GET"})
*/
public function getAssetsImage(PublicFunction $publicFunction): Response
{
return $publicFunction->replyWithFile('images/', "login.png");
}
/**
* @Route("/getloginImg", name="getAssetsImages", methods={"GET"})
*/
public function getAssetsImages(PublicFunction $publicFunction): Response
{
return $publicFunction->replyWithFile('images/', "Logoblanc.png");
}
/**
* @Route("/send-password-email/{audio}", name="send-password-email-audio")
*/
public function sendPassworEmail(Request $request, Audio $audio, PublicFunction $publicFunction)
{
$randomPassword = substr(str_shuffle('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'), 0, 8);
$encodedPassword = password_hash($randomPassword, PASSWORD_BCRYPT);
$audio->setPassword($encodedPassword);
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($audio);
$entityManager->flush();
// send email notif to audio
$params = [
"nom" => $audio->getName(),
"url" => $_ENV['BASE_logiciel'],
"password" => $randomPassword,
"email" => $audio->getMail(),
];
$publicFunction->sendEmail($params, $audio->getMail(), "Audioprothésiste", "Bienvenue chez MyAudio, complétez vos informations", 201);
$referer = $request->headers->get('referer');
if (!$referer) {
return $this->redirectToRoute('easyadmin', [
'controller' => 'CentreCrudController',
'action' => 'index',
]);
}
$this->addFlash('success', "L'audioprothésiste a bien reçu les mails d'activation et de génération de son compte MyAudio Pro.");
return $this->redirect($referer);
}
}