<?php
namespace App\Controller;
use App\Entity\Circuit;
use App\Entity\Client;
use App\Entity\Coordonnescircuit;
use App\Entity\Reservationcircuit;
use Knp\Component\Pager\PaginatorInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mime\Email;
use Symfony\Component\Routing\Annotation\Route;
use Doctrine\ORM\EntityManagerInterface;
use App\Entity\Detailreservationcircuit;
use App\Entity\Reservationcircuits;
class CircuitController extends AbstractController
{
/**
* @Route("/circuit", name="app_circuit")
*/
public function index(PaginatorInterface $paginator, Request $request): Response
{
$em = $this->getDoctrine()->getManager();
$data = $em->createQueryBuilder()
->select('c')
->from('App\Entity\Circuit','c')
->where('c.etat = 1')
->getQuery()
->getResult()
;
$circuit = $paginator->paginate(
$data,
$request->query->getInt('page', 1),
6
);
return $this->render('circuit/index.html.twig', [
'circuit' => $circuit,
]);
}
/**
* @Route("/detailcircuit/{id}", name="detailcircuit")
*/
public function details(Circuit $circuit, Request $request)
{
$em = $this->getDoctrine()->getManager();
$data = $em->createQueryBuilder()
->select('c')
->from('App\Entity\Circuit','c')
->where('c.etat = 1')
->getQuery()
->getResult()
;
$dataByPack = [];
foreach ($circuit->getCircuitprices() as $circuitprice) {
$pack = $circuitprice->getPack();
$dated = $circuitprice->getDated()->format('Y-m-d');
$datef = $circuitprice->getDatef()->format('Y-m-d');
$tarifbb = $circuitprice->getPricebb();
if (!isset($dataByPack[$pack])) {
$dataByPack[$pack] = [
'dateRanges' => [],
];
}
if (!empty($dated) && !empty($datef)) {
$dateRange = [
'dated' => $dated,
'datef' => $datef,
'tarifbb' => $tarifbb,
'roomData' => [],
];
if ($circuitprice->getCircuitpricerooms()->count() > 0) {
foreach ($circuitprice->getCircuitpricerooms() as $circuitpriceroom) {
$chambre = $circuitpriceroom->getCircuitroom()->getChambre();
$chambreName = $chambre->getName();
$dateRange['roomData'][$chambreName] = [
'circuitroom' => $circuitpriceroom->getCircuitroom()->getChambre(),
'capacity' => $chambre->getCapacity(),
'price' => $circuitpriceroom->getPrice(),
];
}
}
$dataByPack[$pack]['dateRanges'][] = $dateRange;
}
}
return $this->render('circuit/detailcircuit.html.twig', [
'circuit' => $data,
'c' => $circuit,
'dataByPack' => $dataByPack,
]);
}
/**
* @Route("/nouvelle/{circuitId}", name="nouvelle")
*/
public function nouvellePage(Request $request, $circuitId)
{
$em = $this->getDoctrine()->getManager();
$payement = $this->getDoctrine()
->getRepository('App\Entity\Paiement')
->find(1)
;
$circuits = $em->createQueryBuilder('c')
->select('c')
->from('App\Entity\Circuit','c')
->where('c.id = :id')
->andWhere('c.etat = 1')
->setParameter('id', $circuitId)
->getQuery()
->getOneOrNullResult()
;
// Récupérez les données depuis le formulaire
$tarifbb = $request->request->get('tarifbb');
$roomData = json_decode($request->request->get('roomData'), true);
$selectedPack = $request->request->get('selectedPack');
$selectedDate = $request->request->get('selectedDate');
$coordonnees = new Client();
$form = $this->createForm('App\Form\ClientType', $coordonnees);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$nomClient = $coordonnees->getNom();
$prenomClient = $coordonnees->getPrenom();
$emailClient = $coordonnees->getEmail();
$mobileClient = $coordonnees->getMobile();
$messageClient = $coordonnees->getMessage();
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($coordonnees);
$entityManager->flush();
}
// Ajoutez d'autres paramètres au besoin
// Passez les données à la vue et affichez la nouvelle page
return $this->render('circuit/reservation.html.twig', [
'tarifbb' => $tarifbb,
'roomData' => $roomData,
'selectedPack' => $selectedPack,
'selectedDate' => $selectedDate,
'form' => $form->createView(),
'circuitId' => $circuitId,
'circuits' => $circuits,
'payement' => $payement,
// Ajoutez d'autres données au besoin
]);
}
/**
* @Route("/send-email", name="send_email", methods={"POST"})
*/
public function envoyerEmails(Request $request, MailerInterface $mailer, EntityManagerInterface $entityManager)
{
// Récupérez les données JSON envoyées depuis le frontend
$data = json_decode($request->getContent(), true);
// Récupérez l'adresse e-mail du client à partir des données du formulaire
$emailClient = $data['emailClient'];
// Construisez le contenu de l'email
$message = (new Email())
->from('amiraarfaoui1989@rusticavoyages.com')
->to($emailClient)
->subject('Récapitulatif des chambres sélectionnées')
->html($this->renderView('circuit/reservation_details.html.twig', [
'emailData' => $data,
'selectedPack' => $data['selectedPack'],
'selectedDate' => $data['selectedDate'],
'nomClient' => $data['nomClient'], // Ajoutez le nom du client
'prenomClient' => $data['prenomClient'], // Ajoutez le nom du client
'emailClient' => $data['emailClient'], // Ajoutez le nom du client
'mobileClient' => $data['mobileClient'], // Ajoutez le mobile du client
'messageClient' => $data['messageClient'], // Ajoutez le message du client
]));
// Envoyez l'email
$mailer->send($message);
// Construisez le contenu de l'email
$message = (new Email())
->from('amiraarfaoui1989@rusticavoyages.com')
->to($emailClient)
->subject('Récapitulatif des chambres sélectionnées')
->html($this->renderView('circuit/reservation_client.html.twig', [
'emailData' => $data,
'nomClient' => $data['nomClient'], // Ajoutez le nom du client
'prenomClient' => $data['prenomClient'], // Ajoutez le nom du client
]));
// Envoyez l'email
$mailer->send($message);
// Persistez les données dans l'entité Reservation
$reservation = new Reservationcircuits();
$reservation->setNomClient($data['nomClient']);
$reservation->setPrenomClient($data['prenomClient']);
$reservation->setEmailClient($data['emailClient']);
$reservation->setMobileClient($data['mobileClient']);
$reservation->setMessageClient($data['messageClient']);
$reservation->setSelectedPack($data['selectedPack']);
$reservation->setPeriode($data['selectedDate']);
foreach ($data['typeChambresInfo'] as $info) {
$chambre = new Detailreservationcircuit();
$chambre->setNomTypeChambre($info['nom']);
$chambre->setPrixTotal($info['prixTotal']);
$chambre->setNombreChambre($info['nombreChambres']);
// Ajoutez la chambre à la réservation
$reservation->addDetailreservationcircuit($chambre);
}
// Persistez les entités
$entityManager->persist($reservation);
$entityManager->flush();
// Répondez avec une confirmation (modifiable en fonction de vos besoins)
return $this->redirectToRoute('app_home'); // Remplacez 'accueil' par le nom de votre route d'accueil
}
}