<?php
namespace App\Controller\VoyagesOrganise;
use App\Service\Generale;
use App\Service\WSCMS;
use App\Service\WSVoyagesOrganise;
use APY\BreadcrumbTrailBundle\BreadcrumbTrail\Trail;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Session\SessionInterface as Session;
use Symfony\Component\Routing\Annotation\Route;
class IndexController extends AbstractController
{
public function __construct(Generale $service)
{
$this->service = $service;
}
public function listvoyages($type, $themes, $destinations, $pays, Session $session, WSVoyagesOrganise $voyagesOrganise, Request $request): Response
{
if (!$this->service->hasModule('voyages-organise')) {
$this->addFlash('danger', 'Produit sans licence');
return $this->render('bundles/TwigBundle/Exception/error404.html.twig');
}
$session->set('nameType', $request->get('nameType'));
$session->set('routeDetails', $request->get('routeDetails'));
$key = "title_{$request->get('_route')}_" . implode('-', $request->get('_route_params'));
if (isset($_GET['title'])) {
$session->set($key, $_GET['title']);
return $this->redirectToRoute($request->get('_route'), $request->get('_route_params'));
}
return $this->render($this->service->checkCustomTemplate('VoyagesOrganise/listvoyages.html.twig'), [
'title' => $session->get($key, $request->get('nameType')),
/*'detailsVoyages'=>$detailsVoyages,*/
'themes' => $themes,
'destinations' => $destinations,
'pays' => $pays,
'type' => $type,
]);
}
public function jsonVoyages($type, WSVoyagesOrganise $voyagesOrganise, Session $session)
{
$listeVoyages = $voyagesOrganise->getListe($_GET);
if (isset($listeVoyages['Error']))
return new JsonResponse(['Error' => $listeVoyages['Error']]);
$voyages = array();
foreach ($listeVoyages['Resultat'] as $voyage) {
$_voyages = $voyage;
$_voyages['route'] = $this->get('router')->generate($session->get('routeDetails'), array('slug' => $voyage['slug']));
$voyages['Voyage'][] = $_voyages;
}
$voyages['filtre'] = $listeVoyages['filtre'];
$voyages['referentielle'] = $listeVoyages['referentielle'];
return new JsonResponse($voyages);
}
public function detailsVoyages($slug, WSVoyagesOrganise $voyagesOrganise, WSCMS $WSCMS, Trail $trail, Session $session, Request $request): Response
{
$detailsVoyages = $voyagesOrganise->getDetails(['slug' => $slug]);
$type = $detailsVoyages['Resultat']['type'];
$session->set('routeConfirm', $request->get('routeConfirm'));
$trail->add($request->get('nameType'), $request->get('routeList'));
$session->set('nameType', $request->get('nameType'));
$session->set('routeList', $request->get('routeList'));
$configAffichage = array();
if (!is_null($WSCMS->ConfigFrontOffice()))
$configAffichage = $WSCMS->ConfigFrontOffice()['ConfigFrontOffice'];
$facebook = $WSCMS->ReseauxSociaux()['ReseauxSociaux']['facebook'];
if (isset($detailsVoyages['Resultat'])) {
$detailsVoyages = $detailsVoyages['Resultat'];
return $this->render($this->service->checkCustomTemplate('VoyagesOrganise/details/details.html.twig'),
[
'details' => $detailsVoyages,
'configAffichage' => $configAffichage,
'facebook' => $facebook,
'type' => $type
]);
} else {
return $this->render('bundles/TwigBundle/Exception/error500.html.twig');
}
}
/**
* @Route("/reservation/{slug}/{pack}/{periode}", name="reservation")
*/
public function reservationVoyages($slug, $pack, $periode, WSVoyagesOrganise $voyagesOrganise, WSCMS $WSCMS, Trail $trail, Session $session, Request $request): Response
{
if ($request->isMethod('POST') and !isset($_POST['reservation'])) {
if ($request->files->get('fichier') != null) {
$uniqid = sha1(uniqid(mt_rand(), TRUE));
foreach ($request->files->get('fichier') as $i => $file)
$_POST['data']['file-passeport'][] = [
'nom' => "$i-$uniqid.{$file->guessExtension()}",
'ordre' => 0,
'base64' => [
'contents' => base64_encode(file_get_contents($file->getPathName())),
'originalName' => $file->getClientOriginalName(),
'size' => $file->getSize(),
'mimeType' => $file->getMimeType()
],
'nomOrigine' => $file->getClientOriginalName(),
'taille' => '',
'width' => getimagesize($file)[0],
'height' => getimagesize($file)[1]
];
}
foreach ($_POST['data'] as $key => &$value)
if (strpos($key, '_nom_') !== false && $value == "")
$value = "*";
$res = $voyagesOrganise->saveReservation($_POST);
if ($request->isXmlHttpRequest())
return new JsonResponse($res);
if (isset($res["Resultat"]["err"]["message"]) and $res["Resultat"]["err"]["message"])
throw new \ErrorException($res["Resultat"]["err"]["message"]);
else {
// if (!isset($res["Resultat"]["err"]["message"]) and !$res["Resultat"]["err"]["message"]){
$paymentOnline = $res["Resultat"]['PaymentOnline'];
$idbook = $res["Resultat"]["id"];
$route_confir = $this->generateUrl($_POST['routeConfirm'], ['Paiement' => $paymentOnline ? 'EnLigne' : 'Agence', 'id' => $idbook,], 0);
$url_echec = $this->generateUrl('front_voyageorganise_echec', [], 0);
if ($paymentOnline)
return $this->redirect("{$this->service->domaineBack()}/payment-electronique/2/{$res["Resultat"]["id"]}/VO?url_succes=" . urlencode($route_confir) . "&url_echec=" . urlencode($url_echec) );
return $this->redirect($route_confir);
}
//return $this->redirectToRoute($_POST['routeConfirm'], ['Paiement' => 'Agence', 'id' => $res["Resultat"]["id"],]);
}
$detailsVoyages = $voyagesOrganise->getDetails(['slug' => $slug])['Resultat'];
$type = $detailsVoyages['type'];
$libelle = $detailsVoyages['libelle'];
$trail->add($session->get('nameType'), $session->get('routeList'));
$trail->add($libelle, "front_voyagecarte_details", ['slug' => $slug]);
$_pack = array();
$_periode = array();
$periodes = $detailsVoyages['PERIODES'];
foreach ($periodes as $periode) {
foreach ($periode['PACKS'] as $pck) {
if ($pck['id'] == $pack) {
$_pack = $pck;
$_periode = $periode;
}
}
}
$pointsventes = array_map(function ($item) {
$tel = [];
if ($item['tel1'])
$tel[] = $item['tel1'];
if ($item['tel2'])
$tel[] = $item['tel2'];
if ($item['fax'])
$tel[] = $item['fax'];
return [
'id' => $item['id'],
'libelle' => $item['libelle'],
'tel' => implode(' / ', $tel),
'adresse' => $item['adresse'],
'franchise' => $item['franchise'],
];
}, $WSCMS->PointVente(['franchis' => true])['PointsVente']);
$ModePayement = $WSCMS->ModePayement([
'produit' => 'VO',
'montant' => $detailsVoyages['prix']
]);
$configAffichage = array();
if (!is_null($WSCMS->ConfigFrontOffice()))
$configAffichage = $WSCMS->ConfigFrontOffice()['ConfigFrontOffice'];
$facebook = $WSCMS->ReseauxSociaux()['ReseauxSociaux']['facebook'];
return $this->render($this->service->checkCustomTemplate('VoyagesOrganise/reservation.html.twig'),
[
'details' => $detailsVoyages,
'packs' => $_pack,
'periode' => $_periode,
'rib' => $ModePayement['ModePayement']['CoordonnnesBancarie'],
'rip' => $ModePayement['ModePayement']['CoordonnnesPostales'],
'methodPayment' => $ModePayement['ModePayement']['MethodPayment'],
'typePayment' => $ModePayement['ModePayement']['TypePayment'],
'pointsventes' => $pointsventes,
'configAffichage' => $configAffichage,
'facebook' => $facebook,
'type' => $type
]);
}
public function echec($detailsPayement): Response
{
if ($detailsPayement) {
$detailsPayement = json_decode(base64_decode($detailsPayement), true);
$this->addFlash('danger', $detailsPayement['Echec']);
unset($detailsPayement['Echec']);
} else
$detailsPayement = [];
return $this->render($this->service->checkCustomTemplate('VoyagesOrganise/echec.html.twig'), [
'detailsPayement' => $detailsPayement
]);
}
public function saveReservation($id, WSVoyagesOrganise $voyagesOrganise, Trail $trail, Session $session, Request $request): Response
{
if (isset($_GET['id']))
$id = $_GET['id'];
$detailsReservation = $voyagesOrganise->detailsReservation(['id' => $id]);
$type = $detailsReservation['type'];
$libelle = $detailsReservation['voyage'];
$slug = $detailsReservation['slug'];
$trail->add($session->get('nameType'), $session->get('routeList'));
$trail->add($libelle, "front_voyagecarte_details", ['slug' => $slug]);
return $this->render($this->service->checkCustomTemplate('VoyagesOrganise/succes.html.twig'),
[
'succes' => ['Resultat' => $detailsReservation],
'detailreservation' => ['payment_type' => $detailsReservation['payment_type']],
'detailsPayement' => $detailsReservation['DetailsPayement'],
'type' => $type
]
);
}
}