<?php
namespace App\Controller;
use App\Entity\Chambre;
use App\Entity\Client;
use App\Entity\Coordonneesvo;
use App\Entity\Reservationsejour;
use App\Entity\Sejour;
use App\Entity\Sejourprice;
use App\Entity\Sejoursearch;
use App\Form\GuestType;
use App\Form\SejoursearchType;
use Knp\Component\Pager\PaginatorInterface;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Form\Extension\Core\Type\CollectionType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Mime\Email;
use Symfony\Component\Routing\Annotation\Route;
use Doctrine\ORM\EntityManagerInterface;
use App\Entity\Detailreservationsejour;
use App\Entity\Reservationsejours;
class SejourController extends AbstractController
{
/**
* @Route("/sejour", name="app_sejour")
*/
public function index(PaginatorInterface $paginator, Request $request): Response
{
$em = $this->getDoctrine()->getManager();
$data = $em->createQueryBuilder()
->select('c')
->from('App\Entity\Sejour','c')
->where('c.etat = 1')
->getQuery()
->getResult()
;
$sejour = $paginator->paginate(
$data,
$request->query->getInt('page', 1),
6
);
return $this->render('sejour/index.html.twig', [
'sejour' => $sejour
]);
}
/**
* @Route("/detailsejour/{id}", name="detailsejour")
*/
public function details(Sejour $sejour, Request $request)
{
$em = $this->getDoctrine()->getManager();
$data = $em->createQueryBuilder()
->select('s')
->from('App\Entity\Sejour','s')
->where('s.etat = 1')
->getQuery()
->getResult()
;
$dataByPack = [];
foreach ($sejour->getSejourprices() as $sejourprice) {
$pack = $sejourprice->getPack();
$dated = $sejourprice->getDated()->format('Y-m-d');
$datef = $sejourprice->getDatef()->format('Y-m-d');
$tarifbb = $sejourprice->getPricebb();
$tarifenf252 = $sejourprice->getEnf252();
$tarifenf6112 = $sejourprice->getEnf6112();
$tarifenf25 = $sejourprice->getEnf25();
$tarifenf611 = $sejourprice->getEnf611();
$demandebb = $sejourprice->isDemandebb();
$demande252 = $sejourprice->isDemande252();
$demande6112 = $sejourprice->isDemande6112();
$demande25 = $sejourprice->isDemande25();
$demande611 = $sejourprice->isDemande611();
if (!isset($dataByPack[$pack])) {
$dataByPack[$pack] = [
'dateRanges' => [],
];
}
if (!empty($dated) && !empty($datef)) {
$dateRange = [
'dated' => $dated,
'datef' => $datef,
'tarifbb' => $tarifbb,
'tarifenf252' => $tarifenf252,
'tarifenf6112' => $tarifenf6112,
'tarifenf25' => $tarifenf25,
'tarifenf611' => $tarifenf611,
'demandebb' => $demandebb,
'demande252' => $demande252,
'demande6112' => $demande6112,
'demande25' => $demande25,
'demande611' => $demande611,
'roomData' => [],
];
if ($sejourprice->getSejourpricerooms()->count() > 0) {
foreach ($sejourprice->getSejourpricerooms() as $sejourpriceroom) {
$chambre = $sejourpriceroom->getSejourroom()->getChambre();
$chambreName = $chambre->getName();
$dateRange['roomData'][$chambreName] = [
'sejourroom' => $sejourpriceroom->getSejourroom()->getChambre(),
'capacity' => $chambre->getCapacity(),
'price' => $sejourpriceroom->getPrice(),
];
}
}
$dataByPack[$pack]['dateRanges'][] = $dateRange;
}
}
return $this->render('sejour/detailsejours.html.twig', [
'sejour' => $data,
'vo' => $sejour,
'dataByPack' => $dataByPack,
]);
}
/**
* @Route("/nouvelle-page/{sejourId}", name="nouvelle_page")
*/
public function nouvellePage(Request $request, $sejourId, MailerInterface $mailer): Response
{
$em = $this->getDoctrine()->getManager();
$payement = $this->getDoctrine()
->getRepository('App\Entity\Paiement')
->find(1)
;
$sejours = $em->createQueryBuilder('s')
->select('s')
->from('App\Entity\Sejour','s')
->where('s.id = :id')
->andWhere('s.etat = 1')
->setParameter('id', $sejourId)
->getQuery()
->getOneOrNullResult()
;
// Récupérez les données depuis le formulaire
$tarifbb = $request->request->get('tarifbb');
$tarifenf252 = $request->request->get('tarifenf252');
$tarifenf6112 = $request->request->get('tarifenf6112');
$tarifenf25 = $request->request->get('tarifenf25');
$tarifenf611 = $request->request->get('tarifenf611');
$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()) {
// Si le formulaire est soumis et valide, faites quelque chose avec les données du formulaire
// Par exemple, persistez les données dans la base de données
$nomClient = $coordonnees->getNom();
$prenomClient = $coordonnees->getPrenom();
$emailClient = $coordonnees->getEmail();
$mobileClient = $coordonnees->getMobile();
$messageClient = $coordonnees->getMessage();
$especeClient = $coordonnees->isEspece();
$chequeClient = $coordonnees->isCheque();
$agencebkClient = $coordonnees->isAgencebk();
$agencetnClient = $coordonnees->isAgencetn();
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($coordonnees);
$entityManager->flush();
}
// Passez les données à la vue et affichez la nouvelle page
return $this->render('sejour/reservation.html.twig', [
'tarifbb' => $tarifbb,
'tarifenf252' => $tarifenf252,
'tarifenf6112' => $tarifenf6112,
'tarifenf25' => $tarifenf25,
'tarifenf611' => $tarifenf611,
'roomData' => $roomData,
'selectedPack' => $selectedPack,
'selectedDate' => $selectedDate,
'form' => $form->createView(),
'sejourId' => $sejourId,
'sejours' => $sejours,
'payement' => $payement,
// Ajoutez d'autres données au besoin
]);
}
/**
* @Route("/envoyer-emails", name="envoyer_emails", methods={"POST"})
*/
public function envoyerEmails(Request $request, MailerInterface $mailer, EntityManagerInterface $entityManager): Response
{
// 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('reservation@rusticavoyages.com')
->to('reservation@rusticavoyages.com')
->subject('Récapitulatif des chambres sélectionnées')
->html($this->renderView('sejour/informations.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
'especeClient' => $data['especeClient'],
'chequeClient' => $data['chequeClient'],
'agencebkClient' => $data['agencebkClient'],
'agencetnClient' => $data['agencetnClient'],
'sejourNom' => $data['sejourNom'],
'chambres' => $data['chambres'],
]));
// Envoyez l'email
$mailer->send($message);
// Construisez le contenu de l'email
$message = (new Email())
->from('reservation@rusticavoyages.com')
->to($emailClient)
->subject('Récapitulatif des chambres sélectionnées')
->html($this->renderView('sejour/informations_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 Reservationsejours();
$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 Detailreservationsejour();
$chambre->setNomTypeChambre($info['nom']);
$chambre->setPrixTotal($info['prixTotal']);
$chambre->setNombreChambre($info['nombreChambres']);
// Ajoutez la chambre à la réservation
$reservation->addDetailreservationsejour($chambre);
}
$client = new Client();
$client->setNom($data['nomClient']);
$client->setPrenom($data['prenomClient']);
$client->setEmail($data['emailClient']);
$client->setMobile($data['mobileClient']);
$client->setMessage($data['messageClient']);
$client->setCheque($data['chequeClient']);
$client->setEspece($data['especeClient']);
$client->setAgencebk($data['agencebkClient']);
$client->setAgencetn($data['agencetnClient']);
$client->setAgencetn($data['agencetnClient']);
$client->setSejourNom($data['sejourNom']);
// Persistez les entités
$entityManager->persist($reservation);
$entityManager->persist($client);
$entityManager->persist($chambre);
$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
}
}