<?php
namespace App\Framework\FrontBundle\Controller;
use App\Framework\AppBundle\Entity\Mail;
use App\Framework\AppBundle\Repository\PlacesRepository;
use App\Framework\AppBundle\Repository\VenueRepository;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Serializer\Encoder\JsonEncoder;
use Symfony\Component\Serializer\Encoder\XmlEncoder;
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
use Symfony\Component\Serializer\Serializer;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
use App\Security\LoginFormAuthenticator;
use Symfony\Component\Security\Guard\GuardAuthenticatorHandler;
use App\Framework\AppBundle\Entity\User;
use App\Framework\AppBundle\Entity\Booking;
use App\Framework\AppBundle\Entity\Order;
use App\Framework\AppBundle\Entity\Places;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mime\Email;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
class TunnelController extends AbstractController
{
private $urlGenerator;
public function __construct(UrlGeneratorInterface $urlGenerator)
{
$this->urlGenerator = $urlGenerator;
}
// SEASON 2024
const labels = [
'individuel' => 'Individuel',
'groupe' => 'Groupe',
'avecrepas' => 'Repas + Spectacle + Lounge Club',
'no-avecrepas' => 'Goûter animé + spectacle',
'ok-avecrepas' => 'Repas + Lounge Club',
'sansrepas' => 'Spectacle + Lounge Club',
'no-sansrepas' => 'Spectacle seul',
'ok-sansrepas' => 'Lounge Club',
'co-avecrepas' => 'Repas + Place de concert',
'co-sansrepas' => 'Place(s) de concert',
'ss-avecrepas' => 'Dîner dansant + Spectacle + Lounge Club',
'ss-sansrepas' => 'Spectacle + Lounge Club',
'ss-majestic' => 'Animations assurées par l’orchestre «Connection d\'enfer» (6 musiciens) et attraction.',
'ss-versailles' => 'Animations assurées par «Francesco», les chanteurs des restaurants et attraction.',
'mj-m1' => 'Menu(s) Plaisir',
'mj-m2' => 'Menu(s) Festival',
'mj-m3' => 'Menu(s) Végétarien avec poisson',
'mj-m4' => 'Menu(s) Végétarien sans poisson',
'mj-me' => 'Menu(s) Enfant',
've-m1' => 'Menu(s) Élégance',
've-m2' => 'Menu(s) Royal',
've-m3' => 'Menu(s) Végétarien avec poisson',
've-m4' => 'Menu(s) Végétarien sans poisson',
've-me' => 'Menu(s) Enfant',
'sp1' => 'Tarte(s) flambée(s)',
'sp2' => 'Fromages',
'in-b1' => 'Forfait(s) Duo',
'in-b2' => 'Forfait(s) Prestigo',
'gr-b1' => 'Forfait(s) n°1',
'gr-b2' => 'Forfait(s) n°2',
'gr-b3' => 'Forfait(s) n°3',
'gr-b4' => 'Forfait(s) n°4',
'gr-b5' => 'Forfait(s) n°5',
'tk5' => 'Ticket(s) boisson 5€',
'tk8' => 'Ticket(s) boisson 8€',
'tk10' => 'Ticket(s) boisson 10€',
'pn' => 'Place(s) normale(s)',
'ph' => 'Place(s) d\'honneur',
'vip' => 'Place(s) VIP',
'ms' => 'Mini-suite(s)',
'no' => 'Place(s)',
'okm' => 'Menu(s) spécial(s)',
'hhm' => 'Menu(s) spécial(s)',
'pam' => 'Menu(s) de Pâques',
'ok' => 'Entrée(s)',
'af' => 'Entrée(s)',
'gift' => 'Emballage cadeau',
];
const labelsDe = [
'individuel' => 'Einzelperson',
'groupe' => 'Gruppe',
'avecrepas' => 'Mahlzeit + Show + Lounge Club',
'no-avecrepas' => 'Nachmittagssnack + spectacle',
'ok-avecrepas' => 'Mahlzeit + Lounge Club',
'sansrepas' => 'Show + Lounge Club',
'no-sansrepas' => 'Nur Show',
'ok-sansrepas' => 'Lounge Club',
'co-avecrepas' => 'Mahlzeit + Konzertplatz',
'co-sansrepas' => 'Konzertkarte(n)',
'ss-avecrepas' => 'Dinner mit Tanz + Show + Lounge Club',
'ss-sansrepas' => 'Show + Lounge Club',
'ss-majestic' => 'Unterhaltung durch das Orchester "Connection d\'enfer" (6 Musiker) und Attraktion.',
'ss-versailles' => 'Unterhaltung durch "Francesco", die Sänger der Restaurants und Attraktion.',
'mj-m1' => 'Menü(s) Plaisir',
'mj-m2' => 'Menü(s) Festival',
'mj-m3' => 'Menü(s) Vegetarisch mit Fisch',
'mj-m4' => 'Menü(s) Vegetarisch ohne Fisch',
'mj-me' => 'Menü(s) Enfant',
've-m1' => 'Menü(s) Élégance',
've-m2' => 'Menü(s) Royal',
've-m3' => 'Menü(s) Vegetarisch mit Fisch',
've-m4' => 'Menü(s) Vegetarisch ohne Fisch',
've-me' => 'Menü(s) Enfant',
'sp1' => 'Flammkuchen',
'sp2' => 'Käse',
'in-b1' => 'Vorschlag Duo',
'in-b2' => 'Vorschlag Prestigo',
'gr-b1' => 'Vorschlag n°1',
'gr-b2' => 'Vorschlag n°2',
'gr-b3' => 'Vorschlag n°3',
'gr-b4' => 'Vorschlag n°4',
'gr-b5' => 'Vorschlag n°5',
'tk5' => 'Getränketicket(s) 5€',
'tk8' => 'Getränketicket(s) 8€',
'tk10' => 'Getränketicket(s) 10€',
'pn' => 'Normale Plätz(e)',
'ph' => 'Ehrenplätz(e)',
'vip' => 'Place(s) VIP',
'ms' => 'Mini-suite(s)',
'no' => 'Plätz(e)',
'hhm' => 'Spezialmenü(s)',
'okm' => 'Spezialmenü(s)',
'pam' => 'Ostermenü(s)',
'ok' => 'Plätz(e)',
'af' => 'Plätz(e)',
'gift' => 'Geschenkverpackung',
];
const labelsEn = [
'individuel' => 'Individual',
'groupe' => 'Group',
'avecrepas' => 'Meal + Show + Lounge Club',
'no-avecrepas' => 'Snack + Show',
'ok-avecrepas' => 'Meal + Lounge Club',
'sansrepas' => 'Show + Lounge Club',
'no-sansrepas' => 'Show only',
'ok-sansrepas' => 'Lounge Club',
'co-avecrepas' => 'Meals + Concert tickets',
'co-sansrepas' => 'Concert ticket(s)',
'ss-avecrepas' => 'Dinner Dance + Show + Lounge Club',
'ss-sansrepas' => 'Show + Lounge Club',
'ss-majestic' => 'Entertainment provided by the "Connection D\'Enfer" orchestra (6 musicians) and attraction.',
'ss-versailles' => 'Entertainment provided by "Francesco", restaurant singers and attraction.',
'mj-m1' => 'Menu(s) Plaisir',
'mj-m2' => 'Menu(s) Festival',
'mj-m3' => 'Vegetarian menu with fish',
'mj-m4' => 'Vegetarian menu without fish',
'mj-me' => 'Menu(s) Child',
've-m1' => 'Menu(s) Élégance',
've-m2' => 'Menu(s) Royal',
've-m3' => 'Vegetarian menu with fish',
've-m4' => 'Vegetarian menu without fish',
've-me' => 'Menu(s) Child',
'sp1' => 'Tarte(s) flambée(s)',
'sp2' => 'Cheeses',
'in-b1' => 'Package(s) Duo',
'in-b2' => 'Package(s) Prestigo',
'gr-b1' => 'Package(s) n°1',
'gr-b2' => 'Package(s) n°2',
'gr-b3' => 'Package(s) n°3',
'gr-b4' => 'Package(s) n°4',
'gr-b5' => 'Package(s) n°5',
'tk5' => 'Drink ticket(s) 5€',
'tk8' => 'Drink ticket(s) 8€',
'tk10' => 'Drink ticket(s) 10€',
'pn' => 'Regular seat(s-)',
'ph' => 'Pace(s) of honor',
'vip' => 'Place(s) VIP',
'ms' => 'Mini-suite(s)',
'no' => 'Place(s)',
'hhm' => 'Special menu(s)',
'okm' => 'Special menu(s)',
'pam' => 'Easter Menu(s)',
'ok' => 'Entry ticket(s)',
'af' => 'Entry ticket(s)',
'gift' => 'Gift wrapping',
];
const foodPrices = [
'd1' => [ // jour 1
'mj' => [ // majestic
'm1' => [ // menu 1
'in' => [ // individuel
'price' => 50,
],
'gr' => [ // groupe
'price' => 47,
],
],
'm2' => [ // menu 2
'in' => [ // individuel
'price' => 60,
],
'gr' => [ // groupe
'price' => 57,
],
],
'm3' => [ // menu 3
'in' => [ // individuel
'price' => 52,
],
'gr' => [ // groupe
'price' => 52,
],
],
'm4' => [ // menu 3 sans poisson
'in' => [ // individuel
'price' => 47,
],
'gr' => [ // groupe
'price' => 47,
],
],
],
've' => [ // versaille
'm1' => [ // menu 1
'in' => [ // individuel
'price' => 68,
],
'gr' => [ // groupe
'price' => 65,
],
],
'm2' => [ // menu 2
'in' => [ // individuel
'price' => 76,
],
'gr' => [ // groupe
'price' => 73,
],
],
'm3' => [ // menu 3
'in' => [ // individuel
'price' => 57,
],
'gr' => [ // groupe
'price' => 57,
],
],
'm4' => [ // menu 3 sans poisson
'in' => [ // individuel
'price' => 52,
],
'gr' => [ // groupe
'price' => 52,
],
],
],
],
'd2' => [ // jour 2
'mj' => [ // majestic
'm1' => [ // menu 1
'in' => [ // individuel
'price' => 56,
],
'gr' => [ // groupe
'price' => 53,
],
],
'm2' => [ // menu 2
'in' => [ // individuel
'price' => 64,
],
'gr' => [ // groupe
'price' => 61,
],
],
'm3' => [ // menu 3
'in' => [ // individuel
'price' => 52,
],
'gr' => [ // groupe
'price' => 52,
],
],
'm4' => [ // menu 3 sans poisson
'in' => [ // individuel
'price' => 47,
],
'gr' => [ // groupe
'price' => 47,
],
],
],
've' => [ // versaille
'm1' => [ // menu 1
'in' => [ // individuel
'price' => 72,
],
'gr' => [ // groupe
'price' => 69,
],
],
'm2' => [ // menu 2
'in' => [ // individuel
'price' => 80,
],
'gr' => [ // groupe
'price' => 77,
],
],
'm3' => [ // menu 3
'in' => [ // individuel
'price' => 57,
],
'gr' => [ // groupe
'price' => 57,
],
],
'm4' => [ // menu 3 sans poisson
'in' => [ // individuel
'price' => 52,
],
'gr' => [ // groupe
'price' => 52,
],
],
],
],
'd3' => [ // jour 3
'mj' => [ // majestic
'm1' => [ // menu 1
'in' => [ // individuel
'price' => 54,
],
'gr' => [ // groupe
'price' => 51,
],
],
'm2' => [ // menu 2
'in' => [ // individuel
'price' => 62,
],
'gr' => [ // groupe
'price' => 59,
],
],
'm3' => [ // menu 3
'in' => [ // individuel
'price' => 52,
],
'gr' => [ // groupe
'price' => 52,
],
],
'm4' => [ // menu 3 sans poisson
'in' => [ // individuel
'price' => 47,
],
'gr' => [ // groupe
'price' => 47,
],
],
],
've' => [ // versaille
'm1' => [ // menu 1
'in' => [ // individuel
'price' => 70,
],
'gr' => [ // groupe
'price' => 67,
],
],
'm2' => [ // menu 2
'in' => [ // individuel
'price' => 78,
],
'gr' => [ // groupe
'price' => 75,
],
],
'm3' => [ // menu 3
'in' => [ // individuel
'price' => 57,
],
'gr' => [ // groupe
'price' => 57,
],
],
'm4' => [ // menu 3 sans poisson
'in' => [ // individuel
'price' => 52,
],
'gr' => [ // groupe
'price' => 52,
],
],
],
],
'd4' => [ // jour 4
'mj' => [ // majestic
'm1' => [ // menu 1
'in' => [ // individuel
'price' => 56,
],
'gr' => [ // groupe
'price' => 53,
],
],
'm2' => [ // menu 2
'in' => [ // individuel
'price' => 64,
],
'gr' => [ // groupe
'price' => 61,
],
],
'm3' => [ // menu 3
'in' => [ // individuel
'price' => 52,
],
'gr' => [ // groupe
'price' => 52,
],
],
'm4' => [ // menu 3 sans poisson
'in' => [ // individuel
'price' => 47,
],
'gr' => [ // groupe
'price' => 47,
],
],
],
've' => [ // versaille
'm1' => [ // menu 1
'in' => [ // individuel
'price' => 72,
],
'gr' => [ // groupe
'price' => 69,
],
],
'm2' => [ // menu 2
'in' => [ // individuel
'price' => 80,
],
'gr' => [ // groupe
'price' => 77,
],
],
'm3' => [ // menu 3
'in' => [ // individuel
'price' => 57,
],
'gr' => [ // groupe
'price' => 57,
],
],
'm4' => [ // menu 3 sans poisson
'in' => [ // individuel
'price' => 52,
],
'gr' => [ // groupe
'price' => 52,
],
],
],
],
'd5' => [ // jour 5
'mj' => [ // majestic
'm1' => [ // menu 1
'in' => [ // individuel
'price' => 54,
],
'gr' => [ // groupe
'price' => 51,
],
],
'm2' => [ // menu 2
'in' => [ // individuel
'price' => 62,
],
'gr' => [ // groupe
'price' => 59,
],
],
'm3' => [ // menu 3
'in' => [ // individuel
'price' => 52,
],
'gr' => [ // groupe
'price' => 52,
],
],
'm4' => [ // menu 3 sans poisson
'in' => [ // individuel
'price' => 47,
],
'gr' => [ // groupe
'price' => 47,
],
],
],
've' => [ // versaille
'm1' => [ // menu 1
'in' => [ // individuel
'price' => 70,
],
'gr' => [ // groupe
'price' => 67,
],
],
'm2' => [ // menu 2
'in' => [ // individuel
'price' => 78,
],
'gr' => [ // groupe
'price' => 75,
],
],
'm3' => [ // menu 3
'in' => [ // individuel
'price' => 57,
],
'gr' => [ // groupe
'price' => 57,
],
],
'm4' => [ // menu 3 sans poisson
'in' => [ // individuel
'price' => 52,
],
'gr' => [ // groupe
'price' => 52,
],
],
],
],
];
const foodPricesFixed = [
'me' => [
'price' => 27,
],
'sp1' => [
'price' => 6,
],
'sp2' => [
'price' => 8,
],
'ev' => [
'price' => 20,
],
'okm' => [
'price' => 27,
],
'pam' => [
'price' => 52,
],
'hhm' => [
'price' => 27,
],
];
const drinkPrices = [
'in' => [
'b1' => [
'price' => 29,
],
'b2' => [
'price' => 41,
],
],
'gr' => [
'b1' => [
'price' => 9,
],
'b2' => [
'price' => 12,
],
'b3' => [
'price' => 13,
],
'b4' => [
'price' => 18,
],
'b5' => [
'price' => 0,
],
],
];
const venuePrices = [
'd1' => [ //MERCREDI / JEUDI MIDI
'avecrepas' => [ // FOOD
'pn' => [ // PLACE NORMALE
'in' => [ // individuel
'price' => 38,
],
'gr' => [ // groupe
'price' => 35,
],
],
'ph' => [ // PLACE D’HONNEUR45
'in' => [ // individuel
'price' => 45,
],
'gr' => [ // groupe
'price' => 45,
],
],
'vip' => [ // LOGE VIP
'price' => 254,
],
],
'sansrepas' => [ // NO FOOD
'pn' => [ // PLACE NORMALE
'in' => [ // individuel
'price' => 48,
],
'gr' => [ // groupe
'price' => 45,
],
],
'ph' => [ // PLACE D’HONNEUR45
'in' => [ // individuel
'price' => 55,
],
'gr' => [ // groupe
'price' => 55,
],
],
'vip' => [ // LOGE VIP
'price' => 294,
],
],
],
'd2' => [ //VENDREDI SOIR
'avecrepas' => [ // FOOD
'pn' => [ // PLACE NORMALE
'in' => [ // individuel
'price' => 48,
],
'gr' => [ // groupe
'price' => 45,
],
],
'ph' => [ // PLACE D’HONNEUR45
'in' => [ // individuel
'price' => 58,
],
'gr' => [ // groupe
'price' => 58,
],
],
'vip' => [ // LOGE VIP
'price' => 354,
],
],
'sansrepas' => [ // NO FOOD
'pn' => [ // PLACE NORMALE
'in' => [ // individuel
'price' => 58,
],
'gr' => [ // groupe
'price' => 55,
],
],
'ph' => [ // PLACE D’HONNEUR45
'in' => [ // individuel
'price' => 68,
],
'gr' => [ // groupe
'price' => 68,
],
],
'vip' => [ // LOGE VIP
'price' => 394,
],
],
],
'd3' => [ //SAMEDI MIDI
'avecrepas' => [ // FOOD
'pn' => [ // PLACE NORMALE
'in' => [ // individuel
'price' => 43,
],
'gr' => [ // groupe
'price' => 40,
],
],
'ph' => [ // PLACE D’HONNEUR45
'in' => [ // individuel
'price' => 53,
],
'gr' => [ // groupe
'price' => 53,
],
],
'vip' => [ // LOGE VIP
'price' => 334,
],
],
'sansrepas' => [ // NO FOOD
'pn' => [ // PLACE NORMALE
'in' => [ // individuel
'price' => 53,
],
'gr' => [ // groupe
'price' => 50,
],
],
'ph' => [ // PLACE D’HONNEUR45
'in' => [ // individuel
'price' => 63,
],
'gr' => [ // groupe
'price' => 63,
],
],
'vip' => [ // LOGE VIP
'price' => 374,
],
],
],
'd4' => [ //SAMEDI SOIR
'avecrepas' => [ // FOOD
'pn' => [ // PLACE NORMALE
'in' => [ // individuel
'price' => 48,
],
'gr' => [ // groupe
'price' => 45,
],
],
'ph' => [ // PLACE D’HONNEUR45
'in' => [ // individuel
'price' => 58,
],
'gr' => [ // groupe
'price' => 58,
],
],
'vip' => [ // LOGE VIP
'price' => 354,
],
],
'sansrepas' => [ // NO FOOD
'pn' => [ // PLACE NORMALE
'in' => [ // individuel
'price' => 58,
],
'gr' => [ // groupe
'price' => 55,
],
],
'ph' => [ // PLACE D’HONNEUR45
'in' => [ // individuel
'price' => 68,
],
'gr' => [ // groupe
'price' => 68,
],
],
'vip' => [ // LOGE VIP
'price' => 394,
],
],
],
'd5' => [ //DIMANCHE MIDI
'avecrepas' => [ // FOOD
'pn' => [ // PLACE NORMALE
'in' => [ // individuel
'price' => 43,
],
'gr' => [ // groupe
'price' => 40,
],
],
'ph' => [ // PLACE D’HONNEUR45
'in' => [ // individuel
'price' => 53,
],
'gr' => [ // groupe
'price' => 53,
],
],
'vip' => [ // LOGE VIP
'price' => 334,
],
],
'sansrepas' => [ // NO FOOD
'pn' => [ // PLACE NORMALE
'in' => [ // individuel
'price' => 53,
],
'gr' => [ // groupe
'price' => 50,
],
],
'ph' => [ // PLACE D’HONNEUR45
'in' => [ // individuel
'price' => 63,
],
'gr' => [ // groupe
'price' => 63,
],
],
'vip' => [ // LOGE VIP
'price' => 374,
],
],
],
];
const venuePricesFixed = [
'af' => [
'price' => 25,
],
'ok' => [
'price' => 47,
'price_am' => 27,
'price_rs' => 20,
],
'no' => [
'avecrepas' => [
'in' => [ // individuel
'price' => 52,
],
'gr' => [ // groupe
'price' => 50,
],
],
'sansrepas' => [
'in' => [ // individuel
'price' => 27,
],
'gr' => [ // groupe
'price' => 25,
],
],
],
'ss' => [
'avecrepas' => [
'in' => [ // individuel
'price' => 293,
'price_am' => 223,
'price_rs' => 70,
],
'gr' => [ // groupe
'price' => 293,
'price_am' => 223,
'price_rs' => 70,
],
],
'sansrepas' => [
'in' => [ // individuel
'price' => 156,
'price_am' => 96,
'price_rs' => 60,
],
'gr' => [ // groupe
'price' => 156,
'price_am' => 96,
'price_rs' => 60,
],
],
],
];
const roomPrices = [
'd1' => [
'price' => 120,
],
'd2' => [
'price' => 160,
],
'd3' => [
'price' => 160,
],
'd4' => [
'price' => 160,
],
'd5' => [
'price' => 120,
],
'ss' => [
'price' => 240,
],
];
// SECOND SEASON 2023
const labelsSecond = [
'individuel' => 'Individuel',
'groupe' => 'Groupe',
'avecrepas' => 'Repas + Spectacle + Lounge Club',
'no-avecrepas' => 'Goûter animé + spectacle',
'ok-avecrepas' => 'Repas + Lounge Club',
'sansrepas' => 'Spectacle + Lounge Club',
'no-sansrepas' => 'Spectacle seul',
'ok-sansrepas' => 'Lounge Club',
'co-avecrepas' => 'Repas + Place de concert',
'co-sansrepas' => 'Place(s) de concert',
'ss-avecrepas' => 'Dîner dansant à 19 h 30 + Spectacle Parfum d\'Etoiles à 1 h du matin + Après le show, retour au restaurant pour le dessert puis danse avec orchestre jusqu\'à l\'aube ou possibilité d\'accéder au lounge club avec ambiance DJ',
'ss-sansrepas' => '21 h : spectacle Parfum d\'Etoiles + 22 h 45 : accès au lounge club avec ambiance DJ (jusqu\'à l\'aube), animations par nos danseuses et numéro d\'attraction + service de gourmandises salées et sucrées ainsi qu\'1 bouteille de Champagne pour 2 (eau minérale à discrétion)',
'ss-majestic' => 'Animations assurées par l’orchestre «Connection D\'enfer» (6 musiciens) et attraction.',
'ss-versailles' => 'Animations assurées par «Francesco», les chanteurs des restaurants et attraction.',
'mj-m1' => 'Menu(s) Plaisir',
'mj-m2' => 'Menu(s) Festival',
'mj-m3' => 'Menu(s) Végétarien avec poisson',
'mj-m4' => 'Menu(s) Végétarien sans poisson',
'mj-me' => 'Menu(s) Enfant',
've-m1' => 'Menu(s) Élégance',
've-m2' => 'Menu(s) Royal',
've-m3' => 'Menu(s) Végétarien avec poisson',
've-m4' => 'Menu(s) Végétarien sans poisson',
've-me' => 'Menu(s) Enfant',
'sp1' => 'Tarte(s) flambée(s)',
'sp2' => 'Fromages',
'in-b1' => 'Forfait(s) Duo',
'in-b2' => 'Forfait(s) Prestigo',
'gr-b1' => 'Forfait(s) n°1',
'gr-b2' => 'Forfait(s) n°2',
'gr-b3' => 'Forfait(s) n°3',
'gr-b4' => 'Forfait(s) n°4',
'gr-b5' => 'Forfait(s) n°5',
'tk5' => 'Ticket(s) boisson 5€',
'tk8' => 'Ticket(s) boisson 8€',
'tk10' => 'Ticket(s) boisson 10€',
'pn' => 'Place(s) normale(s)',
'ph' => 'Place(s) d\'honneur',
'vip' => 'Place(s) VIP',
'ms' => 'Mini-suite(s)',
'no' => 'Place(s)',
'okm' => 'Menu(s) spécial(s)',
'hhm' => 'Menu(s) spécial(s)',
'pam' => 'Menu(s) de Pâques',
'ok' => 'Entrée(s)',
'af' => 'Entrée(s)',
'gift' => 'Emballage cadeau',
];
const labelsSecondDe = [
'individuel' => 'Einzelperson',
'groupe' => 'Gruppe',
'avecrepas' => 'Mahlzeit + Show + Lounge Club',
'no-avecrepas' => 'Nachmittagssnack + spectacle',
'ok-avecrepas' => 'Mahlzeit + Lounge Club',
'sansrepas' => 'Show + Lounge Club',
'no-sansrepas' => 'Nur Show',
'ok-sansrepas' => 'Lounge Club',
'co-avecrepas' => 'Mahlzeit + Konzertplatz',
'co-sansrepas' => 'Konzertkarte(n)',
'ss-avecrepas' => 'Dinner mit Tanz um 19:30 Uhr + Show "Parfum d\'Étoiles" um 1:00 Uhr morgens + Nach der Show Rückkehr ins Restaurant für das Dessert, anschließend Tanz mit Live-Orchester bis zum Morgengrauen oder Zugang zur Lounge mit DJ-Atmosphäre',
'ss-sansrepas' => '21:00 Uhr: Show "Parfum d\'Étoiles" + 22:45 Uhr: Zugang zur Lounge mit DJ-Atmosphäre (bis zum Morgengrauen), Animation durch unsere Tänzerinnen und Show-Act + Service mit salzigen und süßen Köstlichkeiten sowie 1 Flasche Champagner für 2 Personen (Mineralwasser inklusive)',
'ss-majestic' => 'Unterhaltung durch das Orchester "Connection D\'enfer" (6 Musiker) und Attraktion.',
'ss-versailles' => 'Unterhaltung durch "Francesco", die Sänger der Restaurants und Attraktion.',
'mj-m1' => 'Menü(s) Plaisir',
'mj-m2' => 'Menü(s) Festival',
'mj-m3' => 'Menü(s) Vegetarisch mit Fisch',
'mj-m4' => 'Menü(s) Vegetarisch ohne Fisch',
'mj-me' => 'Menü(s) Enfant',
've-m1' => 'Menü(s) Élégance',
've-m2' => 'Menü(s) Royal',
've-m3' => 'Menü(s) Vegetarisch mit Fisch',
've-m4' => 'Menü(s) Vegetarisch ohne Fisch',
've-me' => 'Menü(s) Enfant',
'sp1' => 'Flammkuchen',
'sp2' => 'Käse',
'in-b1' => 'Vorschlag Duo',
'in-b2' => 'Vorschlag Prestigo',
'gr-b1' => 'Vorschlag n°1',
'gr-b2' => 'Vorschlag n°2',
'gr-b3' => 'Vorschlag n°3',
'gr-b4' => 'Vorschlag n°4',
'gr-b5' => 'Vorschlag n°5',
'tk5' => 'Getränketicket(s) 5€',
'tk8' => 'Getränketicket(s) 8€',
'tk10' => 'Getränketicket(s) 10€',
'pn' => 'Normale Plätz(e)',
'ph' => 'Ehrenplätz(e)',
'vip' => 'Place(s) VIP',
'ms' => 'Mini-suite(s)',
'no' => 'Plätz(e)',
'okm' => 'Spezialmenü(s)',
'hhm' => 'Spezialmenü(s)',
'pam' => 'Ostermenü(s)',
'ok' => 'Plätz(e)',
'af' => 'Plätz(e)',
'gift' => 'Geschenkverpackung',
];
const labelsSecondEn = [
'individuel' => 'Individual',
'groupe' => 'Group',
'avecrepas' => 'Meal + Show + Lounge Club',
'no-avecrepas' => 'Snack + Show',
'ok-avecrepas' => 'Meal + Lounge Club',
'sansrepas' => 'Show + Lounge Club',
'no-sansrepas' => 'Show only',
'ok-sansrepas' => 'Lounge Club',
'co-avecrepas' => 'Meals + Concert tickets',
'co-sansrepas' => 'Concert ticket(s)',
'ss-avecrepas' => 'Dinner & dance at 7:30 PM + "Parfum d\'Étoiles" show at 1:00 AM + After the show, return to the restaurant for dessert, then dance with live orchestra until dawn or access to the lounge club with DJ atmosphere',
'ss-sansrepas' => '9:00 PM: "Parfum d\'Étoiles" show + 10:45 PM: access to the lounge club with DJ atmosphere (until dawn), entertainment by our dancers and a special act + service of sweet and savory treats, plus 1 bottle of Champagne for 2 (mineral water included)',
'ss-majestic' => 'Entertainment provided by the "Connection D\'enfer" orchestra (6 musicians) and attraction.',
'ss-versailles' => 'Entertainment provided by "Francesco", restaurant singers and attraction.',
'mj-m1' => 'Menu(s) Plaisir',
'mj-m2' => 'Menu(s) Festival',
'mj-m3' => 'Vegetarian menu with fish',
'mj-m4' => 'Vegetarian menu without fish',
'mj-me' => 'Menu(s) Child',
've-m1' => 'Menu(s) Élégance',
've-m2' => 'Menu(s) Royal',
've-m3' => 'Vegetarian menu with fish',
've-m4' => 'Vegetarian menu without fish',
've-me' => 'Menu(s) Child',
'sp1' => 'Tarte(s) flambée(s)',
'sp2' => 'Cheeses',
'in-b1' => 'Package(s) Duo',
'in-b2' => 'Package(s) Prestigo',
'gr-b1' => 'Package(s) n°1',
'gr-b2' => 'Package(s) n°2',
'gr-b3' => 'Package(s) n°3',
'gr-b4' => 'Package(s) n°4',
'gr-b5' => 'Package(s) n°5',
'tk5' => 'Drink ticket(s) 5€',
'tk8' => 'Drink ticket(s) 8€',
'tk10' => 'Drink ticket(s) 10€',
'pn' => 'Regular seat(s-)',
'ph' => 'Pace(s) of honor',
'vip' => 'Place(s) VIP',
'ms' => 'Mini-suite(s)',
'no' => 'Place(s)',
'hhm' => 'Special menu(s)',
'okm' => 'Special menu(s)',
'pam' => 'Easter Menu(s)',
'ok' => 'Entry ticket(s)',
'af' => 'Entry ticket(s)',
'gift' => 'Gift wrapping',
];
const foodPricesSecond = [
'd1' => [ // jour 1
'mj' => [ // majestic
'm1' => [ // menu 1
'in' => [ // individuel
'price' => 52,
],
'gr' => [ // groupe
'price' => 49,
],
],
'm2' => [ // menu 2
'in' => [ // individuel
'price' => 62,
],
'gr' => [ // groupe
'price' => 59,
],
],
'm3' => [ // menu 3
'in' => [ // individuel
'price' => 54,
],
'gr' => [ // groupe
'price' => 54,
],
],
'm4' => [ // menu 3 sans poisson
'in' => [ // individuel
'price' => 49,
],
'gr' => [ // groupe
'price' => 49,
],
],
],
've' => [ // versaille
'm1' => [ // menu 1
'in' => [ // individuel
'price' => 67,
],
'gr' => [ // groupe
'price' => 64,
],
],
'm2' => [ // menu 2
'in' => [ // individuel
'price' => 75,
],
'gr' => [ // groupe
'price' => 72,
],
],
'm3' => [ // menu 3
'in' => [ // individuel
'price' => 57,
],
'gr' => [ // groupe
'price' => 57,
],
],
'm4' => [ // menu 3 sans poisson
'in' => [ // individuel
'price' => 52,
],
'gr' => [ // groupe
'price' => 52,
],
],
],
],
'd2' => [ // jour 2
'mj' => [ // majestic
'm1' => [ // menu 1
'in' => [ // individuel
'price' => 58,
],
'gr' => [ // groupe
'price' => 55,
],
],
'm2' => [ // menu 2
'in' => [ // individuel
'price' => 66,
],
'gr' => [ // groupe
'price' => 63,
],
],
'm3' => [ // menu 3
'in' => [ // individuel
'price' => 54,
],
'gr' => [ // groupe
'price' => 54,
],
],
'm4' => [ // menu 3 sans poisson
'in' => [ // individuel
'price' => 49,
],
'gr' => [ // groupe
'price' => 49,
],
],
],
've' => [ // versaille
'm1' => [ // menu 1
'in' => [ // individuel
'price' => 71,
],
'gr' => [ // groupe
'price' => 68,
],
],
'm2' => [ // menu 2
'in' => [ // individuel
'price' => 79,
],
'gr' => [ // groupe
'price' => 76,
],
],
'm3' => [ // menu 3
'in' => [ // individuel
'price' => 57,
],
'gr' => [ // groupe
'price' => 57,
],
],
'm4' => [ // menu 3 sans poisson
'in' => [ // individuel
'price' => 52,
],
'gr' => [ // groupe
'price' => 52,
],
],
],
],
'd3' => [ // jour 3
'mj' => [ // majestic
'm1' => [ // menu 1
'in' => [ // individuel
'price' => 56,
],
'gr' => [ // groupe
'price' => 53,
],
],
'm2' => [ // menu 2
'in' => [ // individuel
'price' => 64,
],
'gr' => [ // groupe
'price' => 61,
],
],
'm3' => [ // menu 3
'in' => [ // individuel
'price' => 54,
],
'gr' => [ // groupe
'price' => 54,
],
],
'm4' => [ // menu 3 sans poisson
'in' => [ // individuel
'price' => 49,
],
'gr' => [ // groupe
'price' => 49,
],
],
],
've' => [ // versaille
'm1' => [ // menu 1
'in' => [ // individuel
'price' => 69,
],
'gr' => [ // groupe
'price' => 66,
],
],
'm2' => [ // menu 2
'in' => [ // individuel
'price' => 77,
],
'gr' => [ // groupe
'price' => 74,
],
],
'm3' => [ // menu 3
'in' => [ // individuel
'price' => 57,
],
'gr' => [ // groupe
'price' => 57,
],
],
'm4' => [ // menu 3 sans poisson
'in' => [ // individuel
'price' => 52,
],
'gr' => [ // groupe
'price' => 52,
],
],
],
],
'd4' => [ // jour 4
'mj' => [ // majestic
'm1' => [ // menu 1
'in' => [ // individuel
'price' => 58,
],
'gr' => [ // groupe
'price' => 55,
],
],
'm2' => [ // menu 2
'in' => [ // individuel
'price' => 66,
],
'gr' => [ // groupe
'price' => 63,
],
],
'm3' => [ // menu 3
'in' => [ // individuel
'price' => 54,
],
'gr' => [ // groupe
'price' => 54,
],
],
'm4' => [ // menu 3 sans poisson
'in' => [ // individuel
'price' => 49,
],
'gr' => [ // groupe
'price' => 49,
],
],
],
've' => [ // versaille
'm1' => [ // menu 1
'in' => [ // individuel
'price' => 71,
],
'gr' => [ // groupe
'price' => 68,
],
],
'm2' => [ // menu 2
'in' => [ // individuel
'price' => 79,
],
'gr' => [ // groupe
'price' => 76,
],
],
'm3' => [ // menu 3
'in' => [ // individuel
'price' => 57,
],
'gr' => [ // groupe
'price' => 57,
],
],
'm4' => [ // menu 3 sans poisson
'in' => [ // individuel
'price' => 52,
],
'gr' => [ // groupe
'price' => 52,
],
],
],
],
'd5' => [ // jour 5
'mj' => [ // majestic
'm1' => [ // menu 1
'in' => [ // individuel
'price' => 56,
],
'gr' => [ // groupe
'price' => 53,
],
],
'm2' => [ // menu 2
'in' => [ // individuel
'price' => 64,
],
'gr' => [ // groupe
'price' => 61,
],
],
'm3' => [ // menu 3
'in' => [ // individuel
'price' => 54,
],
'gr' => [ // groupe
'price' => 54,
],
],
'm4' => [ // menu 3 sans poisson
'in' => [ // individuel
'price' => 49,
],
'gr' => [ // groupe
'price' => 49,
],
],
],
've' => [ // versaille
'm1' => [ // menu 1
'in' => [ // individuel
'price' => 69,
],
'gr' => [ // groupe
'price' => 66,
],
],
'm2' => [ // menu 2
'in' => [ // individuel
'price' => 77,
],
'gr' => [ // groupe
'price' => 74,
],
],
'm3' => [ // menu 3
'in' => [ // individuel
'price' => 57,
],
'gr' => [ // groupe
'price' => 57,
],
],
'm4' => [ // menu 3 sans poisson
'in' => [ // individuel
'price' => 52,
],
'gr' => [ // groupe
'price' => 52,
],
],
],
],
];
const foodPricesFixedSecond = [
'me' => [
'price' => 27,
],
'sp1' => [
'price' => 6,
],
'sp2' => [
'price' => 8,
],
'ev' => [
'price' => 20,
],
'okm' => [
'price' => 27,
],
'pam' => [
'price' => 52,
],
'hhm' => [
'price' => 27,
],
];
const drinkPricesSecond = [
'in' => [
'b1' => [
'price' => 29,
],
'b2' => [
'price' => 41,
],
],
'gr' => [
'b1' => [
'price' => 9,
],
'b2' => [
'price' => 12,
],
'b3' => [
'price' => 13,
],
'b4' => [
'price' => 18,
],
'b5' => [
'price' => 0,
],
],
];
const venuePricesSecond = [
'd1' => [ //MERCREDI / JEUDI MIDI
'avecrepas' => [ // FOOD
'pn' => [ // PLACE NORMALE
'in' => [ // individuel
'price' => 43,
],
'gr' => [ // groupe
'price' => 40,
],
],
'ph' => [ // PLACE D’HONNEUR45
'in' => [ // individuel
'price' => 50,
],
'gr' => [ // groupe
'price' => 50,
],
],
'vip' => [ // LOGE VIP
'price' => 254,
],
],
'sansrepas' => [ // NO FOOD
'pn' => [ // PLACE NORMALE
'in' => [ // individuel
'price' => 55,
],
'gr' => [ // groupe
'price' => 52,
],
],
'ph' => [ // PLACE D’HONNEUR45
'in' => [ // individuel
'price' => 62,
],
'gr' => [ // groupe
'price' => 62,
],
],
'vip' => [ // LOGE VIP
'price' => 294,
],
],
],
'd2' => [ //VENDREDI SOIR
'avecrepas' => [ // FOOD
'pn' => [ // PLACE NORMALE
'in' => [ // individuel
'price' => 53,
],
'gr' => [ // groupe
'price' => 50,
],
],
'ph' => [ // PLACE D’HONNEUR45
'in' => [ // individuel
'price' => 63,
],
'gr' => [ // groupe
'price' => 63,
],
],
'vip' => [ // LOGE VIP
'price' => 354,
],
],
'sansrepas' => [ // NO FOOD
'pn' => [ // PLACE NORMALE
'in' => [ // individuel
'price' => 65,
],
'gr' => [ // groupe
'price' => 62,
],
],
'ph' => [ // PLACE D’HONNEUR45
'in' => [ // individuel
'price' => 75,
],
'gr' => [ // groupe
'price' => 75,
],
],
'vip' => [ // LOGE VIP
'price' => 394,
],
],
],
'd3' => [ //SAMEDI MIDI
'avecrepas' => [ // FOOD
'pn' => [ // PLACE NORMALE
'in' => [ // individuel
'price' => 48,
],
'gr' => [ // groupe
'price' => 45,
],
],
'ph' => [ // PLACE D’HONNEUR45
'in' => [ // individuel
'price' => 58,
],
'gr' => [ // groupe
'price' => 58,
],
],
'vip' => [ // LOGE VIP
'price' => 334,
],
],
'sansrepas' => [ // NO FOOD
'pn' => [ // PLACE NORMALE
'in' => [ // individuel
'price' => 60,
],
'gr' => [ // groupe
'price' => 57,
],
],
'ph' => [ // PLACE D’HONNEUR45
'in' => [ // individuel
'price' => 70,
],
'gr' => [ // groupe
'price' => 70,
],
],
'vip' => [ // LOGE VIP
'price' => 374,
],
],
],
'd4' => [ //SAMEDI SOIR
'avecrepas' => [ // FOOD
'pn' => [ // PLACE NORMALE
'in' => [ // individuel
'price' => 53,
],
'gr' => [ // groupe
'price' => 50,
],
],
'ph' => [ // PLACE D’HONNEUR45
'in' => [ // individuel
'price' => 63,
],
'gr' => [ // groupe
'price' => 63,
],
],
'vip' => [ // LOGE VIP
'price' => 354,
],
],
'sansrepas' => [ // NO FOOD
'pn' => [ // PLACE NORMALE
'in' => [ // individuel
'price' => 65,
],
'gr' => [ // groupe
'price' => 62,
],
],
'ph' => [ // PLACE D’HONNEUR45
'in' => [ // individuel
'price' => 75,
],
'gr' => [ // groupe
'price' => 75,
],
],
'vip' => [ // LOGE VIP
'price' => 394,
],
],
],
'd5' => [ //DIMANCHE MIDI
'avecrepas' => [ // FOOD
'pn' => [ // PLACE NORMALE
'in' => [ // individuel
'price' => 48,
],
'gr' => [ // groupe
'price' => 45,
],
],
'ph' => [ // PLACE D’HONNEUR45
'in' => [ // individuel
'price' => 58,
],
'gr' => [ // groupe
'price' => 58,
],
],
'vip' => [ // LOGE VIP
'price' => 334,
],
],
'sansrepas' => [ // NO FOOD
'pn' => [ // PLACE NORMALE
'in' => [ // individuel
'price' => 60,
],
'gr' => [ // groupe
'price' => 57,
],
],
'ph' => [ // PLACE D’HONNEUR45
'in' => [ // individuel
'price' => 70,
],
'gr' => [ // groupe
'price' => 70,
],
],
'vip' => [ // LOGE VIP
'price' => 374,
],
],
],
];
const venuePricesFixedSecond = [
'af' => [
'price' => 25,
],
'ok' => [
'price' => 47,
'price_am' => 27,
'price_rs' => 20,
],
'no' => [
'avecrepas' => [
'in' => [ // individuel
'price' => 53,
],
'gr' => [ // groupe
'price' => 51,
],
],
'sansrepas' => [
'in' => [ // individuel
'price' => 28,
],
'gr' => [ // groupe
'price' => 26,
],
],
],
'ss' => [
'avecrepas' => [
'in' => [ // individuel
'price' => 293,
'price_am' => 223,
'price_rs' => 70,
],
'gr' => [ // groupe
'price' => 293,
'price_am' => 223,
'price_rs' => 70,
],
],
'sansrepas' => [
'in' => [ // individuel
'price' => 156,
'price_am' => 96,
'price_rs' => 60,
],
'gr' => [ // groupe
'price' => 156,
'price_am' => 96,
'price_rs' => 60,
],
],
],
];
const roomPricesSecond = [
'd1' => [
'price' => 140,
],
'd2' => [
'price' => 180,
],
'd3' => [
'price' => 180,
],
'd4' => [
'price' => 180,
],
'd5' => [
'price' => 140,
],
'ss' => [
'price' => 240,
],
];
const giftPrice = 4;
const bonsOptions = [
[
'id' => 1,
'name' => 'Forfait boisson Duo',
'price' => 29,
'lounge' => false,
'sub' => 'Pour deux personnes',
'restaurant' => true,
'boutique' => false,
'desc' => '<strong>Valable pour deux personnes</strong><br><br>
1⁄2 bt de Pinot Blanc Dussourt<br>***<br>
1⁄2 bt Bordeaux Château Goumin<br>***<br>
2 cafés',
],
[
'id' => 2,
'name' => 'Forfait boisson Prestigo',
'price' => 41,
'lounge' => false,
'sub' => 'Pour deux personnes',
'restaurant' => true,
'boutique' => false,
'desc' => '<strong>Valable pour deux personnes</strong><br><br>
1⁄2 bt de Pinot Gris Signature Domaine Ville de Colmar<br>***<br>
1⁄2 bt Saint-Emilion Cheval Noir Mähler-Besser<br>***<br>
2 cafés',
],
[
'id' => 3,
'name' => 'Ticket boisson 5€',
'price' => 5,
'sub' => '',
'restaurant' => false,
'boutique' => false,
'lounge' => true,
'desc' => '',
],
[
'id' => 4,
'name' => 'Ticket boisson 8€',
'price' => 8,
'sub' => '',
'restaurant' => false,
'boutique' => false,
'lounge' => true,
'desc' => '',
],
[
'id' => 5,
'name' => 'Ticket boisson 10€',
'price' => 10,
'sub' => '',
'restaurant' => false,
'boutique' => false,
'lounge' => true,
'desc' => '',
],
[
'id' => 6,
'name' => 'Bouteille de Champagne',
'price' => 65,
'sub' => '',
'restaurant' => false,
'boutique' => false,
'lounge' => true,
'desc' => '',
],
[
'id' => 7,
'name' => 'Bon d’achat boutique 10€',
'price' => 10,
'sub' => '',
'restaurant' => false,
'boutique' => true,
'lounge' => false,
'desc' => '',
],
[
'id' => 8,
'name' => 'Bon d’achat boutique 20€',
'price' => 20,
'sub' => '',
'restaurant' => false,
'boutique' => true,
'lounge' => false,
'desc' => '',
],
[
'id' => 9,
'name' => 'Assortiment de fromages',
'price' => 8,
'sub' => '',
'restaurant' => true,
'boutique' => false,
'lounge' => false,
'desc' => '',
],
];
/**
* @Route("/{locale}/reservation/tunnel", name="framework_front_reservation", requirements={"locale" = "([a-z\-0-9]+)"})
*/
public function reservationTunnelAction(Request $request, VenueRepository $venueRepository,PlacesRepository $placesRepository, $locale = NULL)
{
$request->setLocale($locale);
$em = $this->getDoctrine()->getManager();
// Convertir la date sélectionnée en objet DateTime
$content = $request->get('show_id');
// Récupérer la disponibilité pour la date sélectionnée
$disponibility = $venueRepository->findOneBy(['id' => $content]);
// Initialiser les indicateurs
// $places = [
// '$isMajesicFull' => false,
// '$isVersaillFull' => false,
// '$isNormalFull' => false,
// '$isHonneurFull' => false,
// '$isVipFull' => false,
// '$isMiniSuiteFull' => false,
// ];
$places = new Places();
$places->setIsMajesicFull(0);
$places->setIsVersaillesFull(0);
$places->setIsPlaceNormal(0);
$places->setIsPlaceHonneur(0);
$places->setIsPlaceVip(0);
$places->setIsMiniSuiteFull(0);
if ($disponibility != null) {
// $places_tmp = $disponibility->getPlaces()->toArray()[0];
if(isset($disponibility->getPlaces()->toArray()[0])) {
$places = $disponibility->getPlaces()->toArray()[0];
// foreach ($places as $place) {
// // Mettre à jour les indicateurs avec les valeurs actuelles
// $isMajesicFull = $place->isIsMajesicFull();
// $isVersaillFull = $place->isIsVersaillesFull();
// $isNormalFull = $place->isIsPlaceNormal();
// $isHonneurFull = $place->isIsPlaceHonneur();
// $isVipFull = $place->isIsPlaceVip();
// $isMiniSuiteFull = $place->isIsMiniSuiteFull();
// }
}
}
// Parcourir la collection de places
$globals = $this->get("twig")->getGlobals();
$locales = explode('|', $globals["app_locales"]);
$page = $em->getRepository('FrameworkAppBundle:Page')->findOneBy(['slug' => 'reservation-tunnel', 'locale' => $locale]);
return $this->render('FrontBundle/Page/reservation-tunnel.html.twig', [
'page' => $page,
'body' => '',
'places' => $places,
'de_url' => 'reservation/tunnel',
'en_url' => 'reservation/tunnel',
'fr_url' => 'reservation/tunnel',
// 'labels' => self::labels,
]);
}
/**
* @Route("/{locale}/reservation/confirmation", name="framework_front_reservation_confirm", requirements={"locale" = "([a-z\-0-9]+)"})
*/
public function reservationConfirmAction(Request $request, $locale = NULL)
{
$request->setLocale($locale);
$em = $this->getDoctrine()->getManager();
$globals = $this->get("twig")->getGlobals();
$locales = explode('|', $globals["app_locales"]);
$page = $em->getRepository('FrameworkAppBundle:Page')->findOneBy(['slug' => 'reservation-confirm', 'locale' => $locale]);
return $this->render('FrontBundle/Page/reservation-confirm.html.twig', [
'page' => $page,
'body' => '',
]);
}
/**
* @Route("/tunnel/consts", name="tunnel_consts_ajax")
* @Route("/tunnel/consts/{locale}", name="tunnel_consts_ajax_locale", requirements={"locale" = "([a-z\-0-9]+)"})
*/
public function constsAction(Request $request, $locale = NULL)
{
$isAjax = $request->isXMLHttpRequest();
if ($isAjax) {
$em = $this->getDoctrine()->getManager();
// $encoders = [new XmlEncoder(), new JsonEncoder()];
// $normalizers = [new ObjectNormalizer()];
// $serializer = new Serializer($normalizers, $encoders);
$venue = $em->getRepository('FrameworkAppBundle:Venue')->findOneById($request->get('venue_id'));
$labels = self::labels;
if($locale == 'de'){
$labels = self::labelsDe;
}
if($locale == 'en'){
$labels = self::labelsEn;
}
$labelsSecond = self::labelsSecond;
if($locale == 'de'){
$labelsSecond = self::labelsSecondDe;
}
if($locale == 'en'){
$labelsSecond = self::labelsSecondEn;
}
$jsonContent = [
'labels' => $labels,
'foodPrices' => self::foodPrices,
'foodPricesFixed' => self::foodPricesFixed,
'drinkPrices' => self::drinkPrices,
'venuePrices' => self::venuePrices,
'venuePricesFixed' => self::venuePricesFixed,
'roomPrices' => self::roomPrices,
'labelsFirst' => $labels,
'foodPricesFirst' => self::foodPrices,
'foodPricesFixedFirst' => self::foodPricesFixed,
'drinkPricesFirst' => self::drinkPrices,
'venuePricesFirst' => self::venuePrices,
'venuePricesFixedFirst' => self::venuePricesFixed,
'roomPricesFirst' => self::roomPrices,
'labelsSecond' => $labelsSecond,
'foodPricesSecond' => self::foodPricesSecond,
'foodPricesFixedSecond' => self::foodPricesFixedSecond,
'drinkPricesSecond' => self::drinkPricesSecond,
'venuePricesSecond' => self::venuePricesSecond,
'venuePricesFixedSecond' => self::venuePricesFixedSecond,
'roomPricesSecond' => self::roomPricesSecond,
];
//PRIX NOUVELLE SAISON
if( $venue && $venue->getVenueType()->getSeason() == 2025 ){
$labels = self::labels;
if($locale == 'de'){
$labels = self::labelsDe;
}
if($locale == 'en'){
$labels = self::labelsEn;
}
$labelsSecond = self::labelsSecond;
if($locale == 'de'){
$labelsSecond = self::labelsSecondDe;
}
if($locale == 'en'){
$labelsSecond = self::labelsSecondEn;
}
$jsonContent = [
'labels' => $labelsSecond,
'foodPrices' => self::foodPricesSecond,
'foodPricesFixed' => self::foodPricesFixedSecond,
'drinkPrices' => self::drinkPricesSecond,
'venuePrices' => self::venuePricesSecond,
'venuePricesFixed' => self::venuePricesFixedSecond,
'roomPrices' => self::roomPricesSecond,
'labelsFirst' => $labels,
'foodPricesFirst' => self::foodPrices,
'foodPricesFixedFirst' => self::foodPricesFixed,
'drinkPricesFirst' => self::drinkPrices,
'venuePricesFirst' => self::venuePrices,
'venuePricesFixedFirst' => self::venuePricesFixed,
'roomPricesFirst' => self::roomPrices,
'labelsSecond' => $labelsSecond,
'foodPricesSecond' => self::foodPricesSecond,
'foodPricesFixedSecond' => self::foodPricesFixedSecond,
'drinkPricesSecond' => self::drinkPricesSecond,
'venuePricesSecond' => self::venuePricesSecond,
'venuePricesFixedSecond' => self::venuePricesFixedSecond,
'roomPricesSecond' => self::roomPricesSecond,
];
}
$response = new Response(json_encode($jsonContent));
$response->headers->set('Content-Type', 'application/json');
return $response;
} else {
return $this->redirectToRoute('framework_front_page_index');
}
}
/**
* @Route("/tunnel/amount", name="tunnel_amount_ajax")
*/
public function amountAction(Request $request)
{
$isAjax = $request->isXMLHttpRequest();
if ($isAjax) {
$em = $this->getDoctrine()->getManager();
$encoders = [new XmlEncoder(), new JsonEncoder()];
$normalizers = [new ObjectNormalizer()];
$serializer = new Serializer($normalizers, $encoders);
$resa = $request->get('resa');
$venue = $em->getRepository('FrameworkAppBundle:Venue')->findOneById($resa['show']['id']);
$amount = $this->getAmount($resa, $venue);
// dump($amount);exit;
$jsonContent = json_encode($amount['amount']);
$response = new Response($jsonContent);
$response->headers->set('Content-Type', 'application/json');
return $response;
} else {
return $this->redirectToRoute('framework_front_page_index');
}
}
function getAmount($resa, $venue){
$amount = 0;
$amount_adam = 0;
$amount_show = 0;
$foodPrices = self::foodPrices;
$foodPricesFixed = self::foodPricesFixed;
$drinkPrices = self::drinkPrices;
$roomPrices = self::roomPrices;
$venuePrices = self::venuePrices;
$venuePricesFixed = self::venuePricesFixed;
$giftPrice = self::giftPrice;
//PRIX NOUVELLE SAISON
if( $venue->getVenueType()->getSeason() == 2025 ){
$foodPrices = self::foodPricesSecond;
$foodPricesFixed = self::foodPricesFixedSecond;
$drinkPrices = self::drinkPricesSecond;
$roomPrices = self::roomPricesSecond;
$venuePrices = self::venuePricesSecond;
$venuePricesFixed = self::venuePricesFixedSecond;
}
$day = $resa['show']['day'];
$resto = ( $resa['step2']['resto'] == 'majestic') ? 'mj' : 've';
$group = ( $resa['step1']['group'] == 'individuel') ? 'in' : 'gr';
$formula = $resa['step1']['formula'];
if(isset($resa['step2']['selection'])){
foreach ($resa['step2']['selection'] as $key => $value) {
$ref = $value['ref'];
if(strpos($ref, '-') !== false){
$ref = explode('-', $ref)[1];
}
if( $formula == 'avecrepas' ){
//REPAS
if( isset($foodPrices[$day][$resto][$ref]) ){
if( $ref == 'm3' && $value['option'] ){
$amount = $amount + ($foodPrices[$day][$resto]['m4'][$group]['price'] * $value['qty']);
} else {
$amount = $amount + ($foodPrices[$day][$resto][$ref][$group]['price'] * $value['qty']);
}
}
//REPAS FIXE
if( isset($foodPricesFixed[$ref]) ){
$amount = $amount + ($foodPricesFixed[$ref]['price'] * $value['qty']);
}
//BOISSONS
if( isset($drinkPrices[$group][$ref]) ){
$amount = $amount + ($drinkPrices[$group][$ref]['price'] * $value['qty']);
}
//TICKETS BOISSONS
if( substr($ref, 0, 2) == 'tk' ){
$tk = explode('tk', $ref);
$amount = $amount + $tk[1] * $value['qty'];
}
} else { //SANS REPAS
//REPAS OKTOBER
if( isset($foodPricesFixed[$ref]) ){
$amount = $amount + ($foodPricesFixed[$ref]['price'] * $value['qty']);
}
}
//MINISUITES
if($venue->getId() == 335){ //CUSTOM VENUE
if( $ref == 'ms' ){
$amount = $amount + ($roomPrices['d1']['price'] * $value['qty']);
}
} elseif($venue->getId() >= 245 && $venue->getId() <= 249){ //CUSTOM VENUE
if( $ref == 'ms' ){
$amount = $amount + ($roomPrices['d1']['price'] * $value['qty']);
}
} else {
if( $ref == 'ms' ){
$amount = $amount + ($roomPrices[$day]['price'] * $value['qty']);
}
}
//END MINISUITES
}
}
// //GIFT
// if( isset($resa['step1']['gift']) && $resa['step1']['gift'] == 'true' ){
// $amount = $amount + $giftPrice;
// }
//save prix des repas
$amount_adam = $amount;
//SHOW
if( $venue->getVenueType()->getSlug() == 'co' ){ // IF CONCERT
if( $resa['step3']['pn'] > 0 ){
$amount = $amount + (floatval($venue->getConcert()->getInfo('pn')) * $resa['step3']['pn']);
}
if( $resa['step3']['ph'] > 0 ){
$amount = $amount + (floatval($venue->getConcert()->getInfo('ph')) * $resa['step3']['ph']);
}
if( $resa['step3']['vip'] > 0 ){
$amount = $amount + (floatval($venue->getConcert()->getInfo('vip')));
}
} elseif( $resa['show']['type'] == 'ss' ){ // IF SAINT SYLVESTRE
if( $resa['step3']['pn'] > 0 ){
$amount = $amount + ($venuePricesFixed['ss'][$formula][$group]['price'] * $resa['step3']['pn']);
}
} else {
if( $resa['step3']['pn'] > 0 ){
$amount = $amount + ($venuePrices[$day][$formula]['pn'][$group]['price'] * $resa['step3']['pn']);
}
if( $resa['step3']['ph'] > 0 ){
$amount = $amount + ($venuePrices[$day][$formula]['ph'][$group]['price'] * $resa['step3']['ph']);
}
if( $resa['step3']['vip'] > 0 ){
$amount = $amount + ($venuePrices[$day][$formula]['vip']['price']);
}
}
//NOEL DES ENFANTS
if( $resa['show']['type'] == 'no' ){
if(isset($resa['step2']['selection'])){
foreach ($resa['step2']['selection'] as $key => $value) {
$ref = $value['ref'];
if( isset($venuePricesFixed[$ref]) ){
$amount = $amount + ($venuePricesFixed[$ref][$formula][$group]['price'] * $value['qty']);
}
}
}
}
//OKTOBERFEST
if( $resa['show']['type'] == 'ok' ){
//NEW OVERRIDE
//$amount = $amount_adam = $amount_show = 0;
if( $resa['step1']['participants'] > 0 ){
$amount_adam = $amount_adam + ($venuePricesFixed['ok']['price_am'] * $resa['step1']['participants']);
$amount_show = $amount_show + ($venuePricesFixed['ok']['price_rs'] * $resa['step1']['participants']);
}
/* if(isset($resa['step2']['selection'])){
foreach ($resa['step2']['selection'] as $key => $value) {
$ref = $value['ref'];
if( isset($venuePricesFixed[$ref]) ){
$amount = $amount + ($venuePricesFixed[$ref]['price'] * $value['qty']);
}
}
}*/
$amount = $amount_adam + $amount_show;
//END NEW OVERRIDE
}
//AFTERWORK
if( $resa['show']['type'] == 'af' ){
if(isset($resa['step2']['selection'])){
foreach ($resa['step2']['selection'] as $key => $value) {
$ref = $value['ref'];
if( isset($venuePricesFixed[$ref]) ){
$amount = $amount + ($venuePricesFixed[$ref]['price'] * $value['qty']);
}
}
}
}
$amount_show = $amount - $amount_adam;
//SAINT SYLVESTRE
if( $resa['show']['type'] == 'ss' ){
$amount = $amount_adam + $amount_show;
$amount_adam = $amount;
$amount_show = 0;
//NEW OVERRIDE
$amount = $amount_adam = $amount_show = 0;
if( $resa['step3']['pn'] > 0 ){
$amount_adam = ($venuePricesFixed['ss'][$formula][$group]['price_am'] * $resa['step3']['pn']);
$amount_show = ($venuePricesFixed['ss'][$formula][$group]['price_rs'] * $resa['step3']['pn']);
}
if(isset($resa['step2']['selection'])){
foreach ($resa['step2']['selection'] as $key => $value) {
$ref = $value['ref'];
if(strpos($ref, '-') !== false){
$ref = explode('-', $ref)[1];
}
if( $ref == 'ms' ){
$amount_adam = $amount_adam + ($roomPrices['ss']['price'] * $value['qty']);
}
}
}
$amount = $amount_adam + $amount_show;
//END NEW OVERRIDE
}
//GIFT NEW TO ROYAL SHOW
if( isset($resa['step1']['gift']) && $resa['step1']['gift'] == 'true' ){
$amount = $amount + $giftPrice;
$amount_show = $amount_show + $giftPrice;
}
return [
'amount' => $amount,
'amount_adam' => $amount_adam,
'amount_show' => $amount_show,
];
}
/**
* @Route("/tunnel/calendar/load", name="tunnel_calendar_load_ajax")
*/
public function loadAction(Request $request)
{
$em = $this->getDoctrine()->getManager();
$isAjax = $request->isXMLHttpRequest();
if (!$isAjax) {
return $this->redirectToRoute('palace_manager_calendar_index');
}
$success = false;
$error = $slug = '';
$venue = $em->getRepository('FrameworkAppBundle:Venue')->findOneById($request->get('id'));
if(!$venue){
$error = 'Erreur de chargement';
} else {
$success = true;
}
$form = [];
if($success){
if($request->get('lang')){
$lang = $request->get('lang');
} else {
$lang = $request->getLocale();
}
$form['id'] = $venue->getId();
$form['title'] = $venue->getTitle();
$form['concert'] = $venue->getConcert();
$form['description'] = $venue->getVenueType()->getDescriptionTr($lang);
$form['description_venue'] = $venue->getDescriptionTr($lang);
$form['thumbnail'] = $venue->getVenueType()->getThumbnail();
$form['type'] = $venue->getVenueType()->getId();
$form['typeSlug'] = $venue->getVenueType()->getSlug();
$form['season'] = $venue->getVenueType()->getSeason();
$form['food'] = ($venue->getVenueType()->getFood()) ? 'true' : 'false';
$form['start'] = date_format($venue->getStart(), 'd/m/Y H:i');
$form['date'] = date_format($venue->getStart(), 'Y-m-d');
$form['hour'] = date_format($venue->getStart(), 'H:i');
$form['pn'] = 0;
$form['ph'] = 0;
$form['vip'] = 0;
$form['full'] = $venue->getIsfull();
$form['places'] = array_map(function($place) {
return [
'is_versailles_full' => $place->isIsVersaillesFull(),
'is_majesic_full' => $place->isIsMajesicFull(),
'is_vip_full' => $place->isIsPlaceVip(),
'is_normal_full' => $place->isIsPlaceNormal(),
'is_honneur_full' => $place->isIsPlaceHonneur(),
'is_mini_suite_full' => $place->isIsMiniSuiteFull(),
];
}, $venue->getPlaces()->toArray());
// setlocale(LC_TIME, "fr_FR");
// $dateStr = ucfirst( strftime("%A %d %B %G %Hh%M", strtotime(date_format($venue->getStart(), 'Y-m-d H:i:s'))) );
// $form['dateStr'] = $dateStr;
if($request->get('lang') == 'de'){
$form['dateStr'] = $venue->getStrStartDe();
} elseif($request->get('lang') == 'en'){
$form['dateStr'] = $venue->getStrStartEn();
} else {
$form['dateStr'] = $venue->getStrStart();
}
if( $venue->getVenueType()->getSeason() == 2023 ){ //OVERIDE DES JOURS REGROUPES POUR 2025
switch ( intval(strftime("%w", strtotime(date_format($venue->getStart(), 'Y-m-d H:i:s')))) ) {
case 3: //Mer
$day = 'd1';
break;
case 4: //Jeu
$day = 'd1';
break;
case 5: //Ven
$day = 'd4';
break;
case 6: //Sam
$day = 'd3';
if( intval(strftime("%k", strtotime(date_format($venue->getStart(), 'Y-m-d H:i:s')))) > 15 ){ //SI SAMEDI SOIR
$day = 'd4';
}
break;
case 0: //Dim
$day = 'd5';
break;
default:
$day = 'd1';
break;
}
} else {
switch ( intval(strftime("%w", strtotime(date_format($venue->getStart(), 'Y-m-d H:i:s')))) ) {
case 3: //Mer
$day = 'd1';
break;
case 4: //Jeu
$day = 'd1';
break;
case 5: //Ven
$day = 'd2';
break;
case 6: //Sam
$day = 'd3';
if( intval(strftime("%k", strtotime(date_format($venue->getStart(), 'Y-m-d H:i:s')))) > 15 ){ //SI SAMEDI SOIR
$day = 'd4';
}
break;
case 0: //Dim
$day = 'd5';
break;
default:
$day = 'd1';
break;
}
}
if( $venue->getForceDay() != null && strlen($venue->getForceDay()) > 0 ){
$day = $venue->getForceDay();
}
$form['day'] = $day;
}
//concerts
if( $venue->getVenueType()->getSlug() == 'co' ){
$form['description'] = $venue->getConcert()->getDescription($lang);
$form['thumbnail'] = $venue->getConcert()->getThumbnail();
$form['pn'] = $venue->getConcert()->getInfo('pn');
$form['ph'] = $venue->getConcert()->getInfo('ph');
$form['vip'] = $venue->getConcert()->getInfo('vip');
}
$data = [
'error' => $error,
'success' => $success,
'form' => $form,
];
// dump($data);
// exit;
$response = new Response(json_encode($data));
$response->headers->set('Content-Type', 'application/json');
return $response;
}
/**
* @Route("/tunnel/credentials/check", name="tunnel_credentials_check_ajax")
* @Route("/tunnel/credentials/check/{locale}", name="tunnel_credentials_check_ajax_locale", requirements={"locale" = "([a-z\-0-9]+)"})
*/
public function credentialsCheckAction(Request $request, UserPasswordEncoderInterface $passwordEncoder, LoginFormAuthenticator $login, GuardAuthenticatorHandler $guard, $locale = NULL)
{
if($locale){
$request->setLocale($locale);
}
$success = $check = false;
$error = '';
$userArr = [];
$em = $this->getDoctrine()->getManager();
$tr = $this->loadTranslation($locale);
$user = $em->getRepository('FrameworkAppBundle:User')->findOneBy(['email' => $request->get('email')]);
if( $request->get('email') == '' || $request->get('password') == ''){
$error = $tr['contact_error2'];
} else {
if(!$user){
$error = $tr['login_error1'];
} else {
$check = $passwordEncoder->isPasswordValid($user, $request->get('password'));
if(!$check){
$error = $tr['login_error2'];
} else {
$guard->authenticateUserAndHandleSuccess($user,$request,$login,'main');
$success = true;
$infos = [
'lastname' => $user->getInfo('lastname'),
'firstname' => $user->getInfo('firstname'),
'company' => $user->getInfo('company'),
'phone' => $user->getInfo('phone'),
'email' => $user->getInfo('email'),
'lastname' => $user->getInfo('lastname'),
'address' => $user->getInfo('address1'),
'zipcode' => $user->getInfo('zipcode'),
'city' => $user->getInfo('city'),
'country_code' => $user->getInfo('country_code'),
'country' => $user->getInfo('country'),
];
$userArr = [
'email' => $user->getEmail(),
'infos' => $infos,
];
}
}
}
// dump($check);
// exit;
$data = [
'error' => $error,
'success' => $success,
'user' => $userArr,
];
$response = new Response(json_encode($data));
$response->headers->set('Content-Type', 'application/json');
return $response;
}
/**
* @Route("/tunnel/booking/send", name="tunnel_booking_send_ajax")
* @Route("/tunnel/booking/send/{locale}", name="tunnel_booking_send_ajax_locale", requirements={"locale" = "([a-z\-0-9]+)"})
*/
public function bookingSendAction(Request $request, UserPasswordEncoderInterface $passwordEncoder, LoginFormAuthenticator $login, GuardAuthenticatorHandler $guard, MailerInterface $mailer, $locale = NULL)
{
if($locale){
$request->setLocale($locale);
}
$tr = $this->loadTranslation($locale);
require_once dirname(__FILE__).'/../../plugins/stripe-php-10.12.1/init.php';
$success = true;
$error = '';
$em = $this->getDoctrine()->getManager();
$globals = $this->get("twig")->getGlobals();
$resa = $request->get('palace_resa');
$infos = $request->get('infos');
$venue = $em->getRepository('FrameworkAppBundle:Venue')->findOneById($resa['show']['id']);
$user = $this->getUser();
if($infos['firstname'] == '' || $infos['lastname'] == '' || $infos['phone'] == '' || $infos['address'] == '' || $infos['zipcode'] == '' || $infos['city'] == '' || $infos['country_code'] == '') {
$error = $tr['contact_error2'];
$success = false;
}
if( $infos['form_mode'] == 'register' ){
if( $em->getRepository('FrameworkAppBundle:User')->findOneBy(['email' => $infos['email']]) ){
$error = $tr['signup_error1'];
$success = false;
} elseif($infos['email'] == '' || $infos['password'] == '' || $infos['confirm'] == '') {
$error = $tr['contact_error2'];
$success = false;
} elseif(strlen($infos['password']) < 8) {
$error = $tr['signup_error2'];
$success = false;
} elseif($infos['password'] != $infos['confirm']) {
$error = $tr['signup_error3'];
$success = false;
} elseif($infos['agree'] == 'false') {
$error = $tr['signup_error4'];
$success = false;
}
}
if( $infos['form_mode'] == 'logged' && $user == null ){
$error = $tr['signup_error5'];
$success = false;
}
if( $infos['gift'] == 'true' && strlen($infos['gift_user']) < 1 ){
$error = $tr['booking_error1'];
$success = false;
}
if( !$venue ){
$error = $tr['booking_error2'];
$success = false;
} elseif ( $venue->getStart()->getTimestamp() < time() ){
$error = $tr['booking_error2'];
$success = false;
}
if($success){
if($user == null && $infos['form_mode'] == 'register'){
//REGISTER USER
if(trim($infos['email']) == 'sample@email.tst'){
exit;
}
$user = new User();
$user->setUsername(strtolower(trim($infos['email'])));
$user->setEmail(strtolower(trim($infos['email'])));
$user->setPassword(
$passwordEncoder->encodePassword(
$user,
$infos['password']
)
);
$user->setDeleted(0);
$user->setRoles(["ROLE_USER"]);
$stripe = new \Stripe\StripeClient(
$globals['stripe_secret_key']
);
$customer = $stripe->customers->create([
'email' => strtolower(trim($infos['email'])),
'name' => ucwords(strtolower(trim($infos['firstname']))).' '.strtoupper(trim($infos['lastname'])),
'address' => [
'city' => trim($infos['city']),
'country' => $infos['country_code'],
'line1' => trim($infos['address']),
'postal_code' => trim($infos['zipcode']),
],
'metadata' => ['user_id' => $user->getId()],
]);
$user->setInfos(json_encode(['stripe_id' => $customer->id]));
$em->persist($user);
$em->flush();
//FORCE LOG IN
$guard->authenticateUserAndHandleSuccess($user,$request,$login,'main');
}
//RECORD RESA
$amount = $this->getAmount($resa, $venue);
$lastBooking = $em->getRepository('FrameworkAppBundle:Booking')->findOneBy([], ['baseId' => 'DESC']);
if($lastBooking){
$lastId = $lastBooking->getBaseId();
} else {
$lastId = 57530;
}
$date = new \DateTimeImmutable();
$milli = (int)$date->format('Uv');
$infos['ip']=$_SERVER['REMOTE_ADDR'];
$booking = new Booking();
$booking->setBaseId($lastId + 1);
$booking->setVenue($venue);
$booking->setUser($user);
$booking->setToken($milli);
$booking->setInfos(json_encode($infos));
$booking->setCart(json_encode($resa));
$booking->setStatus('new');
$booking->setState(0);
$booking->setAmount(floatval($amount['amount_adam']));
$booking->setAmountShow(floatval($amount['amount_show']));
$booking->setOptions($booking->getRecap(true));
$booking->setLang($locale);
$booking->setIsFlash(NULL);
$em->persist($booking);
$em->flush();
$subject = '['.$booking->getBaseId().'] Votre réservation Royal Palace';
$title = 'Votre réservation Royal Palace';
$content = '<p>Bonjour,</p>
<p>Votre demande de réservation <strong>'.$resa['show']['title'].' : '.$resa['show']['dateStr'].'</strong> à bien été prise en compte. Nos équipes vérifient la disponibilité des prestations souhaitées et reviendrons vers vous par email sous 24 heures (hors dimanches et jours fériés). Un lien de paiement vous sera envoyé par mail et sera également disponible dans votre espace <a href="'.$globals['app_email_domain'].'login">"Mon Compte"</a> de notre site web.</p>
<p><br>A bientôt au <a href="'.$globals['app_email_domain'].'"><strong>Royal Palace</strong></a></p>';
if($locale == 'de'){
$subject = '['.$booking->getBaseId().'] Ihre Buchung Royal Palace';
$title = 'Ihre Buchung Royal Palace';
$content = '<p>Hallo,</p>
<p>Ihre Buchungsanfrage <strong>'.$resa['show']['title'].' : '.$resa['show']['dateStr'].'</strong> wurde erfolgreich bearbeitet. Unsere Mitarbeiter überprüfen die Verfügbarkeit der gewünschten Leistungen und melden sich innerhalb von 24 Stunden (außer an Sonn- und Feiertagen) per E-Mail bei Ihnen zurück. Ein Zahlungslink wird Ihnen per E-Mail zugeschickt und ist auch in Ihrem Bereich <a href="'.$globals['app_email_domain'].'login">"Mein Konto"</a> auf unserer Website verfügbar.</p>
<p><br>Bis bald im <a href="'.$globals['app_email_domain'].'"><strong>Royal Palace</strong></a></p>';
}
if($locale == 'en'){
$subject = '['.$booking->getBaseId().'] Your reservation at Royal Palace';
$title = 'Your reservation at Royal Palace';
$content = '<p>Hello,</p>
<p>Your reservation request <strong>'.$resa['show']['title'].' : '.$resa['show']['dateStr'].'</strong> has been processed. Our teams will check the availability of the services you require and get back to you by email within 24 hours (excluding Sundays and public holidays). A payment link will be sent to you by email and will also be available in your <a href="'.$globals['app_email_domain'].'login">"My Account"</a> area of our website.</p>
<p><br>See you soon at <a href="'.$globals['app_email_domain'].'"><strong>Royal Palace</strong></a></p>';
}
//ENVOI EMAIL
$from = $globals['app_email_noreply'];
$to = $user->getEmail();
$contact = $globals['app_email_contact'];
$email = (new Email())
->from($from)
->to($user->getEmail())
//->cc('cc@example.com')
//->bcc('bcc@example.com')
->replyTo($contact)
//->priority(Email::PRIORITY_HIGH)
->subject($subject)
// ->text(nl2br('Votre demande de réservation <strong>'.$resa['show']['title'].' : '.$resa['show']['dateStr'].'</strong> à bien été prise en compte. Nos équipes vérifient la disponibilité des prestations souhaitées et reviendrons vers vous par email sous 24 heures (hors dimanches et jours fériés). Un lien de paiement vous sera envoyé par mail et sera également disponible dans votre espace "Mon Compte" de notre site web.').nl2br('A bientôt au Royal Palace'))
->html($this->renderView(
'FrontBundle/Emails/general.html.twig', array(
'title' => $title,
'content' => $content
)
));
$mailer->send($email);
//FIN ENVOI EMAIL
// ENREGISTREMENT LOG MAIL
$mail = New Mail();
$mail->setBooking($booking);
$mail->setEmailTitle($title);
$mail->setEmailContent($content);
$em->persist($mail);
$em->flush();
// FIN ENREGISTREMENT LOG MAIL
// //DESACTIVé SUR DEMANDE DU CLIENT
// //ENVOI EMAIL ADMIN ROYAL PALACE
// $from = $globals['app_email_noreply'];
// $to = $globals['app_email_address'];
// $contact = $globals['app_email_contact'];
// $email = (new Email())
// ->from($from)
// ->to($to)
// //->cc('cc@example.com')
// //->bcc('bcc@example.com')
// ->replyTo($contact)
// //->priority(Email::PRIORITY_HIGH)
// ->subject('Nouvelle demande de réservation Site Web')
// ->text(nl2br('Nouvelle demande de réservation Site Web'))
// ->html($this->renderView(
// 'FrontBundle/Emails/general.html.twig', array(
// 'title' => 'Nouvelle demande de réservation Site Web #'.$booking->getBaseId(),
// 'content' => '<p>
// <strong>'.$resa['show']['title'].' : '.$resa['show']['dateStr'].'</strong><br>
// '.ucwords(strtolower(trim($infos['firstname']))).' '.strtoupper(trim($infos['lastname'])).'<br>
// '.$infos['phone'].'<br>
// '.$infos['email'].'<br>
// '.trim($infos['address']).' '.trim($infos['zipcode']).' '.trim($infos['city']).' '.trim($infos['country']).'<br>
// TOTAL : '.$booking->getAmountTotal().'€<br>
// <a href="'.$globals['app_email_domain'].'backoffrp/resa/'.$booking->getId().'">VOIR LA RESERVATION</a>
// </p>
// '
// )
// ));
// $mailer->send($email);
// //FIN ENVOI EMAIL ADMIN ROYAL PALACE
}
$data = [
'error' => $error,
'success' => $success,
];
$response = new Response(json_encode($data));
$response->headers->set('Content-Type', 'application/json');
return $response;
}
/**
* @Route("/{locale}/mon-compte/paiement/{token}", name="framework_front_reservation_payment", requirements={"locale" = "([a-z\-0-9]+)", "token" = "([0-9]+)"})
*/
public function reservationPaymentAction(Request $request, $locale = NULL, $token = NULL)
{
$blocked = false;
if($locale){
$request->setLocale($locale);
}
$tr = $this->loadTranslation($locale);
require_once dirname(__FILE__).'/../../plugins/stripe-php-10.12.1/init.php';
$em = $this->getDoctrine()->getManager();
$globals = $this->get("twig")->getGlobals();
$booking = $em->getRepository('FrameworkAppBundle:Booking')->findOneBy(['token' => $token]);
if(!$token || !$booking || $booking->getState() != 1){
return $this->redirectToRoute('framework_front_account_infos', ['locale' => $locale]);
}
$start = $booking->getVenue()->getStart()->getTimestamp();
$future = strtotime('+4 day');
if( $future < $start ){
$manualPayment = true;
} else {
$manualPayment = false; //PAS DE CHEQUE ET VIREMENT
}
if( strtotime("now") > $start || $booking->getVenue()->getDeleted() ){
$blocked = true;
}
// MISS ALSACE
if($booking->getVenue()->getVenueType()->getSlug() == 'ma'){
$manualPayment = false; //PAS DE CHEQUE ET VIREMENT
}
$block_tickets = false;
$orders = $em->getRepository('FrameworkAppBundle:Booking')->findBy(['state' => 6, 'venue' => 1951], ['id' => 'DESC']);
$orders_2 = $em->getRepository('FrameworkAppBundle:Booking')->findBy(['state' => 2, 'venue' => 1951], ['id' => 'DESC']);
$selled = 0;
$total = 0;
foreach ($orders as $key => $order) {
// $selled = $selled + intval($order->getCart()->step1->participants);
$total = $total + ((intval($order->getAmount()) + intval($order->getAmountShow())) / 85);
}
foreach ($orders_2 as $key => $order) {
// $selled = $selled + intval($order->getCart()->step1->participants);
$total = $total + ((intval($order->getAmount()) + intval($order->getAmountShow())) / 85);
}
if($booking->getVenue()->getVenueType()->getSlug() == 'ma'){
if($total >= 1000){
$block_tickets = true;
}
}
$tmp_cart = json_decode($booking->getCartJson(), true);
if(isset($tmp_cart['step1']['forceTickets'])){
$block_tickets = false;
}
// END MISS ALSACE
$page = $em->getRepository('FrameworkAppBundle:Page')->findOneBy(['slug' => 'reservation-payment', 'locale' => $locale]);
// dump($this->getUser()->getInfo('stripe_id'));exit;
// dump($booking->getAmount());
// dump($booking->getAmountShow());
$amount = intVal(($booking->getAmount() + $booking->getAmountShow()) * 100);
$stripe = new \Stripe\StripeClient(
$globals['stripe_secret_key']
);
$username = ucwords(strtolower($booking->getInfo('firstname'))).' '.strtoupper($booking->getInfo('lastname'));
$stripe_show_account_id = $globals['stripe_show_account_id'];
if( intVal($booking->getAmountShow()) > 0 ){
$intent = $stripe->paymentIntents->create([
'customer' => $booking->getUser()->getInfo('stripe_id'),
// 'setup_future_usage' => 'off_session',
'amount' => $amount,
'currency' => 'eur',
'payment_method_types' => [
'card',
'klarna',
'paypal',
],
'metadata' => [
'type' => 'reservation',
'user_name' => $username,
'user_email' => $booking->getUser()->getEmail(),
'user_phone' => $booking->getInfo('phone'),
'user_id' => $booking->getUser()->getId(),
'booking_id' => $booking->getBaseId(),
'booking_detail' => substr($booking->getOptions(), 0, 449),
'booking_date' => $booking->getVenueTitle(),
'amount' => intVal($booking->getAmount() * 100),
'amount_show' => intVal($booking->getAmountShow() * 100),
'amount_eur' => intVal($booking->getAmount()),
'amount_show_eur' => intVal($booking->getAmountShow()),
'amount_total_eur' => intVal($booking->getAmount()) + intVal($booking->getAmountShow()),
],
'description' => $booking->getBaseId().' | '.$booking->getVenueTitle().' | '.$username,
'transfer_group' => 'BOOKING_'.$booking->getBaseId(),
'transfer_data' => [
'destination' => $stripe_show_account_id,
'amount' => intVal($booking->getAmountShow() * 100), //ROYAL SHOW PART
],
]);
} else {
$intent = $stripe->paymentIntents->create([
'customer' => $booking->getUser()->getInfo('stripe_id'),
// 'setup_future_usage' => 'off_session',
'amount' => $amount,
'currency' => 'eur',
'payment_method_types' => [
'card',
'klarna',
'paypal',
],
'metadata' => [
'type' => 'reservation',
'user_name' => $username,
'user_email' => $booking->getUser()->getEmail(),
'user_phone' => $booking->getInfo('phone'),
'user_id' => $booking->getUser()->getId(),
'booking_id' => $booking->getBaseId(),
'booking_detail' => substr($booking->getOptions(), 0, 449),
'booking_date' => $booking->getVenueTitle(),
'amount' => intVal($booking->getAmount() * 100),
'amount_show' => intVal($booking->getAmountShow() * 100),
'amount_eur' => intVal($booking->getAmount()),
'amount_show_eur' => intVal($booking->getAmountShow()),
'amount_total_eur' => intVal($booking->getAmount()) + intVal($booking->getAmountShow()),
],
'description' => $booking->getBaseId().' | '.$booking->getVenueTitle().' | '.$username,
]);
}
$client_secret = $intent->client_secret;
return $this->render('FrontBundle/Page/reservation-payment.html.twig', [
'booking' => $booking,
'client_secret' => $client_secret,
'page' => $page,
'manualPayment' => $manualPayment,
'body' => '',
'de_url' => 'mon-compte/paiement/'.$token,
'en_url' => 'mon-compte/paiement/'.$token,
'fr_url' => 'mon-compte/paiement/'.$token,
'block_tickets' => $block_tickets,
'total' => $total,
'blocked' => $blocked
]);
}
/**
* @Route("/{locale}/mon-compte/paiement/{token}/complete", name="framework_front_reservation_payment_complete", requirements={"locale" = "([a-z\-0-9]+)", "token" = "([0-9]+)"})
*/
public function reservationPaymentCompleteAction(Request $request, $locale = NULL, $token = NULL, MailerInterface $mailer) //PAIEMENT VALIDé PAR CARTE
{
if($locale){
$request->setLocale($locale);
}
$tr = $this->loadTranslation($locale);
require_once dirname(__FILE__).'/../../plugins/stripe-php-10.12.1/init.php';
$em = $this->getDoctrine()->getManager();
$globals = $this->get("twig")->getGlobals();
$page = $em->getRepository('FrameworkAppBundle:Page')->findOneBy(['slug' => 'reservation-payment', 'locale' => $locale]);
$booking = $em->getRepository('FrameworkAppBundle:Booking')->findOneBy(['token' => $token]);
if(!$token || !$booking){
return $this->redirectToRoute('framework_front_account_infos', ['locale' => $locale]);
}
$payment_intent = $request->get('payment_intent');
// //A SUPPRIMER !!!!!!!!!!
// $payment_intent = "pi_3N8VA8D5gSqLmI0L1dWocqJv";
// $payment_intent = "pi_3NClgzD5gSqLmI0L0cDsgUf1";
// //A SUPPRIMER !!!!!!!!!!
$stripe = new \Stripe\StripeClient(
$globals['stripe_secret_key']
);
$intent = $stripe->paymentIntents->retrieve(
$payment_intent,
[]
);
$method = $stripe->paymentMethods->retrieve(
$intent->payment_method,
[]
);
$payment_type = $method['type'];
$booking->setStatus($intent->status);
$em->persist($booking);
$em->flush();
if($intent->status == 'succeeded'){
$booking->setState(2); //Réservation confirmée
$booking->setPaymentType($payment_type);
$booking->setResult(json_encode($intent));
$em->persist($booking);
$em->flush();
// // TRANSFERT VERS ROYAL SHOW PROD
// if( $booking->getTransfered() != 1 ){
// echo 'trasfert';
// $stripe_show_account_id = $globals['stripe_show_account_id'];
// $transfert = $stripe->transfers->create([
// 'amount' => intVal($booking->getAmountShow() * 100),
// 'currency' => 'eur',
// 'destination' => $stripe_show_account_id,
// // 'source_transaction' => '',
// 'transfer_group' => 'BOOKING_'.$booking->getId(),
// 'metadata' => [
// 'user_id' => $booking->getUser()->getId(),
// 'booking_id' => $booking->getId(),
// 'amount' => intVal($booking->getAmount() * 100),
// 'amount_show' => intVal($booking->getAmountShow() * 100),
// ],
// 'description' => $booking->getOptions(),
// ]);
// dump($transfert);
// exit;
// }
//ENVOI EMAIL
if( $booking->getMailed() != 1 ){
$start = $booking->getVenue()->getStart()->getTimestamp();
$future = strtotime('+8 day');
//FIX LOUNGECLUB HORAIRE
$moment = '2h30';
if( $booking->getVenue()->getStart()->format('H') < 16 ){
$moment = '18h00';
}
$subject = '['.$booking->getBaseId().'] Votre réservation au Royal Palace est confirmée !';
$title = 'Votre réservation au Royal Palace est confirmée !';
$content_lounge = 'Après le spectacle, animations au Lounge Club jusqu\'à '.$moment.'<br>
L\'accès y est gratuit, seules les consommations sont payantes.<br><br>';
if( $future < $start ){
$content_tikets = 'La confirmation avec les billets vous parviendront par voie postale sous quelques jours.<br><br>';
} else {
$content_tikets = 'Les billets de spectacle sont à retirer à votre arrivée, au comptoir de l\'accueil.<br>(ces billets ne sont ni repris, ni échangés)<br><br>';
}
if( $booking->getIsflash() ){
$content_tikets = 'Les billets de spectacle sont à retirer à votre arrivée, au comptoir de l\'accueil.<br>(ces billets ne sont ni repris, ni échangés)<br><br>';
$content_lounge = '';
}
if( in_array( $booking->getVenue()->getVenueType()->getSlug(), ['rl', 'no']) ){
$content_tikets = '<p>Merci ! Votre réservation <strong>'.$booking->getVenueTitle().'</strong> sera confirmée à la réception de votre paiement.<br><br><strong>Les billets de spectacle vous seront envoyés par voie postale sous quinze jours.</strong><br><br>';
}
if( $booking->getVenue()->getVenueType()->getSlug() != 'main' ){
$content_lounge = '';
}
$content = '<p style="line-height:initial;">Chers clients,<br><br>
Nous vous remercions pour votre règlement qui valide votre réservation pour :<br>
'.$booking->getVenueTitle().'<br><br>
(Il est conseillé à notre aimable clientèle de se présenter environ 20 minutes avant)<br>
Un grand parking gratuit se trouve juste à côté.<br><br>
'.$content_lounge.'
'.$content_tikets.'
<i>Attention à l\'orthographe de KIRRWILLER lorsque vous programmez votre GPS (il existe un autre KIRVILLER dans le département du 57)<br>
Depuis Strasbourg A4 sortie 46 Hochfelden direction Bouxwiller<br>
Depuis Paris A4 sortie 45 Saverne direction Hochfelden</i><br><br>
Pour préparer au mieux votre venue au Royal Palace, <a href="'.$globals['app_email_domain'].'front/déroulement-spectacle.pdf">cliquez ici</a> pour télécharger la fiche <strong>"Déroulement d\'un évènement".</strong><br><br>
Au plaisir de vous accueillir,<br>
Recevez, nos cordiales salutations,<br>
<a href="'.$globals['app_email_domain'].'"><strong>Royal Palace</strong></a>
</p>';
if($locale == 'de'){
//FIX LOUNGECLUB HORAIRE
$moment = '2.30';
if( $booking->getVenue()->getStart()->format('H') < 16 ){
$moment = '18.00';
}
$subject = '['.$booking->getBaseId().'] Ihre Buchung im Royal Palace ist bestätigt!';
$title = 'Ihre Buchung im Royal Palace ist bestätigt!';
$content_lounge = 'Nach der Show gibt es bis '.$moment.' Uhr Unterhaltung im Lounge Club.<br>
Der Eintritt ist frei, nur die Getränke sind kostenpflichtig.<br><br>';
if( $future < $start ){
$content_tikets = 'Die Bestätigung mit den Tickets wird Ihnen innerhalb weniger Tage per Post zugestellt.<br><br>';
} else {
$content_tikets = 'Die Eintrittskarten sind bei Ihrer Ankunft am Empfangstresen abzuholen.<br>(Diese Karten werden weder zurückgenommen noch umgetauscht)<br><br>';
}
if( $booking->getIsflash() ){
$content_tikets = 'Die Eintrittskarten sind bei Ihrer Ankunft am Empfangstresen abzuholen.<br>(Diese Karten werden weder zurückgenommen noch umgetauscht)<br><br>';
$content_lounge = '';
}
if( in_array( $booking->getVenue()->getVenueType()->getSlug(), ['rl', 'no']) ){
$content_tikets = '<p>Vielen Dank! Ihre Buchung <strong>'.$booking->getVenueTitle().'</strong> wird bestätigt, sobald Ihre Zahlung eingegangen ist.<br><br><strong>Die Eintrittskarten für die Aufführung werden Ihnen innerhalb von zwei Wochen per Post zugesandt.</strong><br><br>';
}
if( $booking->getVenue()->getVenueType()->getSlug() != 'main' ){
$content_lounge = '';
}
$content = '<p style="line-height:initial;">Liebe Gäste,<br><br>
Wir danken Ihnen für Ihre Zahlung, die Ihre Buchung für :<br>
'.$booking->getVenueTitle().'<br><br>
(Unserer freundlichen Kundschaft wird empfohlen, sich etwa 20 Minuten vorher einzufinden)<br>
Ein großer kostenloser Parkplatz befindet sich direkt nebenan.<br><br>
'.$content_lounge.'
'.$content_tikets.'
<i>Achten Sie auf die Schreibweise von KIRRWILLER, wenn Sie Ihr GPS programmieren (es gibt noch ein weiteres KIRVILLER im Département 57)<br>
Aus Straßburg A4 Ausfahrt 46 Hochfelden Richtung Bouxwiller<br>
Von Paris A4 Ausfahrt 45 Saverne Richtung Hochfelden</i><br><br>
Um Ihren Besuch im Royal Palace optimal vorzubereiten, <a href="'.$globals['app_email_domain'].'front/déroulement-spectacle.pdf">klicken Sie hier</a>, um das Arbeitsblatt <strong>"Ablauf einer Veranstaltung"</strong> herunterzuladen.<br><br>
Wir freuen uns, Sie begrüßen zu dürfen,<br>
Herzliche Grüße,<br>
<a href="'.$globals['app_email_domain'].'"><strong>Royal Palace</strong></a>
</p>';
}
if($locale == 'en'){
//FIX LOUNGECLUB HORAIRE
$moment = '2:30 am';
if( $booking->getVenue()->getStart()->format('H') < 16 ){
$moment = '06:00 pm';
}
$subject = '['.$booking->getBaseId().'] Your reservation at the Royal Palace is confirmed!';
$title = 'Your reservation at the Royal Palace is confirmed!';
$content_lounge = 'After the show, entertainment in the Lounge Club until '.$moment.'.<br>
Access is free, with a charge for drinks only.<br><br>';
if( $future < $start ){
$content_tikets = 'Confirmation and tickets will be sent to you by post within a few days.<br><br>';
} else {
$content_tikets = 'Tickets can be picked up on arrival at the reception desk.<br>(no refunds or exchanges)<br><br>';
}
if( $booking->getIsflash() ){
$content_tikets = 'Tickets can be picked up on arrival at the reception desk.<br>(no refunds or exchanges)<br><br>';
$content_lounge = '';
}
if( in_array( $booking->getVenue()->getVenueType()->getSlug(), ['rl', 'no']) ){
$content_tikets = '<p>Thank you! Your reservation <strong>'.$booking->getVenueTitle().'</strong> will be confirmed upon receipt of your payment.<br><br><strong>Tickets will be sent to you by post within two weeks.</strong><br><br>';
}
if( $booking->getVenue()->getVenueType()->getSlug() != 'main' ){
$content_lounge = '';
}
$content = '<p style="line-height:initial;">Dear customers,<br><br>
Thank you for your payment which validates your reservation for :<br>
'.$booking->getVenueTitle().'<br><br>
(Our customers are advised to arrive about 20 minutes beforehand)<br>
There\'s a large free parking lot right next door.<br><br>
'.$content_lounge.'
'.$content_tikets.'
<i>Pay attention to the spelling of KIRRWILLER when programming your GPS (there is another KIRVILLER in the 57 department).<br>
From Strasbourg A4 exit 46 Hochfelden direction Bouxwiller<br>
From Paris A4 exit 45 Saverne direction Hochfelden</i><br><br>
To help you prepare for your visit to the Royal Palace, <a href="'.$globals['app_email_domain'].'front/déroulement-spectacle.pdf">click here</a> to download the <strong>"How an event unfolds"</strong> sheet.<br><br>
Looking forward to welcoming you,<br>
Yours sincerely,<br>
<a href="'.$globals['app_email_domain'].'"><strong>Royal Palace</strong></a>
</p>';
}
// MAIL MISS ALSACE
if($booking->getVenue()->getVenueType()->getSlug() == 'ma'){
$subject = '['.$booking->getBaseId().'] Votre réservation au Royal Palace est confirmée !';
$title = 'Votre réservation au Royal Palace est confirmée !';
$content_tikets = 'La confirmation avec les billets vous parviendront par voie postale sous quelques jours.<br><br>';
$content = '<p style="line-height:initial;">Chers clients,<br><br>
Nous vous remercions pour votre règlement qui valide votre réservation pour :<br>
Election '.$booking->getVenueTitle().'<br><br>
Ouverture des portes à 17h15h.<br><br>
En présence d\'Angélique Angarni-Filipon France 2025, d\'Isabella Hebert Miss Alsace 2024 ainsi que de nombreuses Miss Alsace.
L\'ambassadrice élue sera notre représentante lors de l\'élection de Miss France 2026 en décembre prochain !
12 candidates se produiront sur scène lors d\'un show incroyable pour tenter de décrocher la couronne et devenir notre ambassadrice de l\'Alsace.
<br><br>
(Il est conseillé à notre aimable clientèle de se présenter environ 20 minutes avant)<br>
Un grand parking gratuit se trouve juste à côté. Tenue de soirée obligatoire. <br><br>
'.$content_tikets.'
<i>Attention à l\'orthographe de KIRRWILLER lorsque vous programmez votre GPS (il existe un autre KIRVILLER dans le département du 57)<br>
Depuis Strasbourg A4 sortie 46 Hochfelden direction Bouxwiller<br>
Depuis Paris A4 sortie 45 Saverne direction Hochfelden</i><br><br>
Au plaisir de vous accueillir,<br>
Recevez, nos cordiales salutations,<br>
<a href="'.$globals['app_email_domain'].'"><strong>Royal Palace</strong></a>
</p>';
if($locale == 'de'){
$subject = '['.$booking->getBaseId().'] Ihre Buchung im Royal Palace ist bestätigt!';
$title = 'Ihre Buchung im Royal Palace ist bestätigt!';
$content_tikets = 'Die Bestätigung mit den Tickets wird Ihnen innerhalb weniger Tage per Post zugestellt.<br><br>';
$content = '<p style="line-height:initial;">Liebe Gäste,<br><br>
Wir danken Ihnen für Ihre Zahlung, die Ihre Buchung für :<br>
Wahl zur '.$booking->getVenueTitle().'<br><br>
Öffnung der Türen um 17.45 Uhr.<br><br>
In Anwesenheit von Angélique Angarni-Filipon, Miss France 2025, Isabella Hebert, Miss Alsace 2024 sowie zahlreicher ehemaliger Miss Alsace.<br>
Die gewählte Botschafterin wird uns bei der Wahl zur Miss France 2026 im kommenden Dezember vertreten!<br>
Zwölf Kandidatinnen treten in einer unglaublichen Show auf die Bühne, um die Krone zu erringen und Botschafterin des Elsass zu werden.<br><br>
(Unserer freundlichen Kundschaft wird empfohlen, sich etwa 20 Minuten vorher einzufinden)<br>
Ein großer kostenloser Parkplatz befindet sich direkt nebenan. Abendgarderobe erforderlich.<br><br>
'.$content_tikets.'
<i>Achten Sie auf die Schreibweise von KIRRWILLER, wenn Sie Ihr GPS programmieren (es gibt noch ein weiteres KIRVILLER im Département 57)<br>
Aus Straßburg A4 Ausfahrt 46 Hochfelden Richtung Bouxwiller<br>
Von Paris A4 Ausfahrt 45 Saverne Richtung Hochfelden</i><br><br>
Wir freuen uns, Sie begrüßen zu dürfen,<br>
Herzliche Grüße,<br>
<a href="'.$globals['app_email_domain'].'"><strong>Royal Palace</strong></a>
</p>';
}
if($locale == 'en'){
$subject = '['.$booking->getBaseId().'] Your reservation at the Royal Palace is confirmed!';
$title = 'Your reservation at the Royal Palace is confirmed!';
$content_tikets = 'Confirmation and tickets will be sent to you by post within a few days.<br><br>';
$content = '<p style="line-height:initial;">Dear customers,<br><br>
Thank you for your payment which validates your reservation for :<br>
'.$booking->getVenueTitle().' election<br><br>
Doors open at 7.45pm.<br><br>
In the presence of Angélique Angarni-Filipon, Miss France 2025, Isabella Hebert, Miss Alsace 2024, as well as many former Miss Alsace winners.<br>
The elected ambassador will represent us at the Miss France 2026 election next December!<br>
Twelve candidates will perform on stage in an incredible show, competing for the crown and the title of Alsace ambassador.<br><br>
(Our customers are advised to arrive about 20 minutes beforehand)<br>
There\'s a large free parking lot right next door. Evening attire required.<br><br>
'.$content_tikets.'
<i>Pay attention to the spelling of KIRRWILLER when programming your GPS (there is another KIRVILLER in the 57 department).<br>
From Strasbourg A4 exit 46 Hochfelden direction Bouxwiller<br>
From Paris A4 exit 45 Saverne direction Hochfelden</i><br><br>
Looking forward to welcoming you,<br>
Yours sincerely,<br>
<a href="'.$globals['app_email_domain'].'"><strong>Royal Palace</strong></a>
</p>';
}
}
// FIN MAIL MISS ALSACE
//ENVOI EMAIL
$from = $globals['app_email_noreply'];
$to = $booking->getUser()->getEmail();
$contact = $globals['app_email_contact'];
$email = (new Email())
->from($from)
->to($to)
//->cc('cc@example.com')
//->bcc('bcc@example.com')
->replyTo($contact)
//->priority(Email::PRIORITY_HIGH)
->subject($subject)
->html($this->renderView(
'FrontBundle/Emails/general.html.twig', array(
'title' => $title,
'content' => $content
)
));
$mailer->send($email);
//FIN ENVOI EMAIL
// ENREGISTREMENT LOG MAIL
$mail = New Mail();
$mail->setBooking($booking);
$mail->setEmailTitle($title);
$mail->setEmailContent($content);
$em->persist($mail);
$em->flush();
// FIN ENREGISTREMENT LOG MAIL
$booking->setMailed(1);
$em->persist($booking);
$em->flush();
}
} else {
$booking->setState(3); //Erreur de paiement
$booking->setResult(json_encode($intent));
$em->persist($booking);
$em->flush();
}
return $this->render('FrontBundle/Page/reservation-payment-complete.html.twig', [
'booking' => $booking,
'status' => $intent->status,
'page' => $page,
'body' => '',
]);
}
/**
* @Route("/{locale}/mon-compte/paiement/{token}/manual", name="framework_front_reservation_payment_manual", requirements={"locale" = "([a-z\-0-9]+)", "token" = "([0-9]+)"})
*/
public function reservationPaymentManualAction(Request $request, $locale = NULL, $token = NULL, MailerInterface $mailer)
{
$success = true;
$error = '';
$em = $this->getDoctrine()->getManager();
$globals = $this->get("twig")->getGlobals();
$page = $em->getRepository('FrameworkAppBundle:Page')->findOneBy(['slug' => 'reservation-payment', 'locale' => $locale]);
$booking = $em->getRepository('FrameworkAppBundle:Booking')->findOneBy(['token' => $token]);
if(!$token || !$booking || $booking->getState() != 1){
return $this->redirectToRoute('framework_front_account_infos', ['locale' => $locale]);
}
$booking->setStatus('manual');
$booking->setState(5); //Validée : En attente de règlement
$booking->setPaymentType($request->get('payment_type'));
$em->persist($booking);
$em->flush();
//ENVOI EMAIL
if( $booking->getMailed() != 1 ){
$subject = '['.$booking->getBaseId().'] Votre réservation au Royal Palace';
$title = 'Votre réservation au Royal Palace sera confirmée à la réception de votre paiement.';
$content = '<p>Merci ! Votre réservation <strong>'.$booking->getVenueTitle().'</strong> sera confirmée à la réception de votre paiement.<br><br>';
if( $booking->getIsflash() ){
$content .= '<strong>Les billets de spectacle sont à retirer à votre arrivée, au comptoir de l\'accueil.<br>(ces billets ne sont ni repris, ni échangés)</strong><br><br>';
}
if( $booking->getVenue()->getVenueType()->getSlug() != 'main' ){
$content_lounge = '';
}
if( in_array( $booking->getVenue()->getVenueType()->getSlug(), ['rl', 'no']) ){
$content = '<p>Merci ! Votre réservation <strong>'.$booking->getVenueTitle().'</strong> sera confirmée à la réception de votre paiement.<br><br><strong>Les billets de spectacle vous seront envoyés par voie postale sous quinze jours.</strong><br><br>';
}
$content .= 'TOTAL : <strong>'.$booking->getAmountTotal().'€</strong><br>
Précisez le numéro de commande suivant lors de votre paiement : <strong>#'.$booking->getBaseId().'</strong><br><br>
- Soit par chèques à l\'adresse suivante :<br>
<strong>ROYAL PALACE - 20 RUE DE HOCHFELDEN - 67330 KIRRWILLER </strong><br>';
if($booking->getAmount() > 0){
$content .= '1 chèque à l\'ordre d\'<strong>ADAM MEYER SAS</strong> d\'un montant de <strong>'.$booking->getAmount().'€</strong><br>';
}
if($booking->getAmountShow() > 0){
$content .= '1 chèque à l\'ordre de <strong>ROYAL SHOW PRODUCTIONS SAS</strong> d\'un montant de <strong>'.$booking->getAmountShow().'€</strong><br>';
}
$content .= '<br>
- Soit par virements bancaires (CCM DE BOUXWILLER) :<br>';
if($booking->getAmount() > 0){
$content .= '1 virement d\'un montant de <strong>'.$booking->getAmount().'€</strong> (ADAM MEYER SAS)<br>
<strong>IBAN : FR76 10278 01670 00013429645 56 - BIC CMCIFR2A</strong><br>';
}
if($booking->getAmountShow() > 0){
$content .= '1 virement d\'un montant de <strong>'.$booking->getAmountShow().'€</strong> (ROYAL SHOW PRODUCTIONS SAS)<br>';
}
$content .= '<strong>IBAN : FR76 10278 01670 00014697745 96 - BIC CMCIFR2A</strong><br>
<br>
Pour préparer au mieux votre venue au Royal Palace, <a href="'.$globals['app_email_domain'].'front/déroulement-spectacle.pdf">cliquez ici</a> pour télécharger la fiche <strong>"Déroulement d\'un évènement".</strong></p><br>
Le récapitulatif est disponnible dans votre espace <a href="'.$globals['app_email_domain'].'login">"Mon Compte"</a> de notre site web.<br>
<p>A bientôt au <a href="'.$globals['app_email_domain'].'"><strong>Royal Palace</strong></a></p>
';
if($locale == 'de'){
$subject = '['.$booking->getBaseId().'] Ihre Buchung im Royal Palace';
$title = 'Ihre Buchung im Royal Palace wird bestätigt, sobald Ihre Zahlung eingegangen ist.';
$content = '<p>Vielen Dank! Ihre Buchung <strong>'.$booking->getVenueTitle().'</strong> wird bestätigt, sobald Ihre Zahlung eingegangen ist.<br><br>';
if( $booking->getIsflash() ){
$content .= '<strong>Die Eintrittskarten sind bei Ihrer Ankunft am Empfangstresen abzuholen.<br>(Diese Karten werden weder zurückgenommen noch umgetauscht)</strong><br><br>';
}
if( $booking->getVenue()->getVenueType()->getSlug() != 'main' ){
$content_lounge = '';
}
if( in_array( $booking->getVenue()->getVenueType()->getSlug(), ['rl', 'no']) ){
$content = '<p>Vielen Dank! Ihre Buchung <strong>'.$booking->getVenueTitle().'</strong> wird bestätigt, sobald Ihre Zahlung eingegangen ist.<br><br><strong>Die Eintrittskarten für die Aufführung werden Ihnen innerhalb von zwei Wochen per Post zugesandt.</strong><br><br>';
}
$content .= 'TOTAL : <strong>'.$booking->getAmountTotal().'€</strong><br>
Geben Sie bei der Zahlung die folgende Bestellnummer an : <strong>#'.$booking->getBaseId().'</strong><br><br>
- Oder per Scheck an die folgende Adresse :<br>
<strong>ROYAL PALACE - 20 RUE DE HOCHFELDEN - 67330 KIRRWILLER </strong><br>';
if($booking->getAmount() > 0){
$content .= '1 Scheck ausgestellt auf <strong>ADAM MEYER SAS</strong> n Höhe von <strong>'.$booking->getAmount().'€</strong><br>';
}
if($booking->getAmountShow() > 0){
$content .= '1 Scheck ausgestellt auf <strong>ROYAL SHOW PRODUCTIONS SAS</strong> n Höhe von <strong>'.$booking->getAmountShow().'€</strong><br>';
}
$content .= '<br>
- Entweder per Banküberweisung (CCM DE BOUXWILLER) :<br>';
if($booking->getAmount() > 0){
$content .= '1 Überweisung in Höhe von <strong>'.$booking->getAmount().'€</strong> (ADAM MEYER SAS)<br>
<strong>IBAN : FR76 10278 01670 00013429645 56 - BIC CMCIFR2A</strong><br>';
}
if($booking->getAmountShow() > 0){
$content .= '1 Überweisung in Höhe von <strong>'.$booking->getAmountShow().'€</strong> (ROYAL SHOW PRODUCTIONS SAS)<br>';
}
$content .= '<strong>IBAN : FR76 10278 01670 00014697745 96 - BIC CMCIFR2A</strong><br>
<br>
Um Ihren Besuch im Royal Palace optimal vorzubereiten, <a href="'.$globals['app_email_domain'].'front/déroulement-spectacle.pdf">klicken Sie hier</a> um das Merkblatt herunterzuladen <strong>"Ablauf einer Veranstaltung".</strong></p><br>
Die Zusammenfassung ist in Ihrem Bereich <a href="'.$globals['app_email_domain'].'login">"Mein Konto"</a> auf unserer Website verfügbar.<br>
<p>Bis bald im <a href="'.$globals['app_email_domain'].'"><strong>Royal Palace</strong></a></p>
';
}
if($locale == 'en'){
$subject = '['.$booking->getBaseId().'] Your reservation at the Royal Palace';
$title = 'Your reservation at the Royal Palace will be confirmed upon receipt of your payment.';
$content = '<p>Thank you! Your reservation <strong>'.$booking->getVenueTitle().'</strong> will be confirmed upon receipt of your payment.<br><br>';
if( $booking->getIsflash() ){
$content .= '<strong>Tickets can be picked up on arrival at the reception desk.<br>(no refunds or exchanges)</strong><br><br>';
}
if( $booking->getVenue()->getVenueType()->getSlug() != 'main' ){
$content_lounge = '';
}
if( in_array( $booking->getVenue()->getVenueType()->getSlug(), ['rl', 'no']) ){
$content = '<p>Thank you! Your reservation <strong>'.$booking->getVenueTitle().'</strong> will be confirmed upon receipt of your payment.<br><br><strong>Tickets will be sent to you by post within two weeks.</strong><br><br>';
}
$content .= 'TOTAL : <strong>'.$booking->getAmountTotal().'€</strong><br>
Please quote the following order number when making your payment: <strong>#'.$booking->getBaseId().'</strong><br><br>
- By cheque to the following address:<br>
<strong>ROYAL PALACE - 20 RUE DE HOCHFELDEN - 67330 KIRRWILLER </strong><br>';
if($booking->getAmount() > 0){
$content .= '1 cheque payable to <strong>ADAM MEYER SAS</strong> for <strong>'.$booking->getAmount().'€</strong><br>';
}
if($booking->getAmountShow() > 0){
$content .= '1 cheque payable to <strong>ROYAL SHOW PRODUCTIONS SAS</strong> for <strong>'.$booking->getAmountShow().'€</strong><br>';
}
$content .= '<br>
- Or by bank transfer (CCM DE BOUXWILLER) :<br>';
if($booking->getAmount() > 0){
$content .= '1 transfer of <strong>'.$booking->getAmount().'€</strong> (ADAM MEYER SAS)<br>
<strong>IBAN : FR76 10278 01670 00013429645 56 - BIC CMCIFR2A</strong><br>';
}
if($booking->getAmountShow() > 0){
$content .= '1 transfer of <strong>'.$booking->getAmountShow().'€</strong> (ROYAL SHOW PRODUCTIONS SAS)<br>';
}
$content .= '<strong>IBAN : FR76 10278 01670 00014697745 96 - BIC CMCIFR2A</strong><br>
<br>
To help you prepare for your visit to the Royal Palace <a href="'.$globals['app_email_domain'].'front/déroulement-spectacle.pdf">click here</a> to download the "How an event unfolds" sheet.</strong></p><br>
The summary is available in your <a href="'.$globals['app_email_domain'].'login">"My Account"</a> area of our website.<br>
<p>See you soon at <a href="'.$globals['app_email_domain'].'"><strong>Royal Palace</strong></a></p>
';
}
//ENVOI EMAIL
$from = $globals['app_email_noreply'];
$to = $booking->getUser()->getEmail();
$contact = $globals['app_email_contact'];
$email = (new Email())
->from($from)
->to($to)
//->cc('cc@example.com')
//->bcc('bcc@example.com')
->replyTo($contact)
//->priority(Email::PRIORITY_HIGH)
->subject($subject)
->html($this->renderView(
'FrontBundle/Emails/general.html.twig', array(
'title' => $title,
'content' => $content
)
));
$mailer->send($email);
//FIN ENVOI EMAIL
// ENREGISTREMENT LOG MAIL
$mail = New Mail();
$mail->setBooking($booking);
$mail->setEmailTitle($title);
$mail->setEmailContent($content);
$em->persist($mail);
$em->flush();
// FIN ENREGISTREMENT LOG MAIL
// //DESACTIVé SUR DEMANDE DU CLIENT
// //ENVOI EMAIL ADMIN ROYAL PALACE
// $from = $globals['app_email_noreply'];
// $to = $globals['app_email_address'];
// $contact = $globals['app_email_contact'];
// $email = (new Email())
// ->from($from)
// ->to($to)
// //->cc('cc@example.com')
// //->bcc('bcc@example.com')
// ->replyTo($contact)
// //->priority(Email::PRIORITY_HIGH)
// ->subject('Nouvelle demande de réservation Site Web')
// ->text(nl2br('Nouvelle demande de réservation Site Web'))
// ->html($this->renderView(
// 'FrontBundle/Emails/general.html.twig', array(
// 'title' => 'Nouvelle demande de réservation Site Web #'.$booking->getBaseId(),
// 'content' => '<p>
// <strong>'.$resa['show']['title'].' : '.$resa['show']['dateStr'].'</strong><br>
// '.ucwords(strtolower(trim($infos['firstname']))).' '.strtoupper(trim($infos['lastname'])).'<br>
// '.$infos['phone'].'<br>
// '.$infos['email'].'<br>
// '.trim($infos['address']).' '.trim($infos['zipcode']).' '.trim($infos['city']).' '.trim($infos['country']).'<br>
// TOTAL : '.$booking->getAmountTotal().'€<br>
// Type de paiement : '.$booking->getPaymentTypeTr('fr').'<br><br>
// <a href="'.$globals['app_email_domain'].'backoffrp/resa/'.$booking->getId().'">VOIR LA RESERVATION</a>
// </p>
// '
// )
// ));
// $mailer->send($email);
// //FIN ENVOI EMAIL ADMIN ROYAL PALACE
$booking->setMailed(1);
$em->persist($booking);
$em->flush();
}
$data = [
'error' => $error,
'success' => $success,
];
$response = new Response(json_encode($data));
$response->headers->set('Content-Type', 'application/json');
return $response;
}
/**
* @Route("/{locale}/mon-compte/paiement/manual/confirm/{token}", name="framework_front_reservation_payment_manual_confirm", requirements={"locale" = "([a-z\-0-9]+)", "token" = "([0-9]+)"})
*/
public function reservationPaymentManualConfirmAction(Request $request, $locale = NULL, $token = NULL)
{
if($locale){
$request->setLocale($locale);
}
$em = $this->getDoctrine()->getManager();
$globals = $this->get("twig")->getGlobals();
$page = $em->getRepository('FrameworkAppBundle:Page')->findOneBy(['slug' => 'cart-payment', 'locale' => $locale]);
$booking = $em->getRepository('FrameworkAppBundle:Booking')->findOneBy(['token' => $token]);
if(!$token || !$booking){
return $this->redirectToRoute('framework_front_account_infos', ['locale' => $locale]);
}
return $this->render('FrontBundle/Page/reservation-payment-manual-confirm.html.twig', [
'baseId' => $booking->getBaseId(),
'booking' => $booking,
'page' => $page,
'body' => '',
]);
}
/* BOUTIQUE */
/**
* @Route("/{locale}/boutique/articles", name="framework_front_shop_all", requirements={"locale" = "([a-z\-0-9]+)"})
* @Route("/{locale}/shop/articles", name="framework_front_shop_all_de", requirements={"locale" = "([a-z\-0-9]+)"})
* @Route("/{locale}/boutique/articles/{category_slug}", name="framework_front_shop_cat", requirements={"category_slug" = "([a-z\-0-9]+)"})
* @Route("/{locale}/shop/articles/{category_slug}", name="framework_front_shop_cat_de", requirements={"category_slug" = "([a-z\-0-9]+)"})
*/
public function shopAction(Request $request, $locale = NULL, $category_slug = NULL)
{
// $request->setLocale($locale);
// $em = $this->getDoctrine()->getManager();
// $globals = $this->get("twig")->getGlobals();
// $locales = explode('|', $globals["app_locales"]);
// $categoryName = 'Bons cadeaux';
// $filter = 'all';
// if( $request->get('f') != null ){
// $filter = $request->get('f');
// }
// $page = $em->getRepository('FrameworkAppBundle:Page')->findOneBy(['slug' => 'boutique-articles', 'locale' => $locale]);
// $categories = $em->getRepository('FrameworkShopBundle:Category')->findBy([], ['position' => 'ASC']);
// $category = $em->getRepository('FrameworkShopBundle:Category')->findOneBy(['slug' => $category_slug]);
// if( $category_slug ){
// $categoryTmp = $em->getRepository('FrameworkAppBundle:Category')->findOneBy(['slug' => $category_slug]);
// if( $categoryTmp ){
// $categoryName = $categoryTmp->getTitle();
// }
// }
// $bons = $em->getRepository('FrameworkShopBundle:Product')->findBy(['category' => 5], ['position' => 'ASC']);
// $bookmarks = $em->getRepository('FrameworkShopBundle:Bookmark')->findBy(['user' => $this->getUser(), 'product' => $bons]);
// return $this->render('FrontBundle/Page/shop.html.twig', [
// 'page' => $page,
// 'categories' => $categories,
// 'category' => $category,
// 'category_slug' => $category_slug,
// 'categoryName' => $categoryName,
// 'body' => '',
// 'filter' => $filter,
// 'bons' => $bons,
// 'bookmarks' => $bookmarks,
// 'de_url' => 'shop/articles',
// 'en_url' => 'shop/articles',
// 'fr_url' => 'boutique/articles',
// ]);
$request->setLocale($locale);
$em = $this->getDoctrine()->getManager();
$globals = $this->get("twig")->getGlobals();
$locales = explode('|', $globals["app_locales"]);
$categoryName = 'Bons cadeaux';
$filter = 'all';
if( $request->get('f') != null ){
$filter = $request->get('f');
}
$page = $em->getRepository('FrameworkAppBundle:Page')->findOneBy(['slug' => 'boutique-articles', 'locale' => $locale]);
$categories = $em->getRepository('FrameworkShopBundle:Category')->findBy([], ['position' => 'ASC']);
$category = $em->getRepository('FrameworkShopBundle:Category')->findOneBy(['slug' => $category_slug]);
if( $category_slug ){
$categoryTmp = $em->getRepository('FrameworkAppBundle:Category')->findOneBy(['slug' => $category_slug]);
if( $categoryTmp ){
$categoryName = $categoryTmp->getTitle();
}
}
$bons = $em->getRepository('FrameworkShopBundle:Product')->findBy(['category' => 5], ['position' => 'ASC']);
$bookmarks = $em->getRepository('FrameworkShopBundle:Bookmark')->findBy(['user' => $this->getUser(), 'product' => $bons]);
return $this->render('FrontBundle/Page/shop2.html.twig', [
'page' => $page,
'categories' => $categories,
'category' => $category,
'category_slug' => $category_slug,
'categoryName' => $categoryName,
'body' => '',
'filter' => $filter,
'bons' => $bons,
'bookmarks' => $bookmarks,
'de_url' => 'shop/articles',
'en_url' => 'shop/articles',
'fr_url' => 'boutique/articles',
'options' => $this->getBonsOptions($locale),
]);
}
/**
* @Route("/{locale}/boutique/panier", name="framework_front_shop_cart", requirements={"locale" = "([a-z\-0-9]+)"})
*/
public function cartAction(Request $request, $locale = NULL)
{
$request->setLocale($locale);
$em = $this->getDoctrine()->getManager();
$globals = $this->get("twig")->getGlobals();
$locales = explode('|', $globals["app_locales"]);
$page = $em->getRepository('FrameworkAppBundle:Page')->findOneBy(['slug' => 'boutique-panier', 'locale' => $locale]);
return $this->render('FrontBundle/Page/shop-cart.html.twig', [
'page' => $page,
'body' => '',
'de_url' => 'boutique/panier',
'en_url' => 'boutique/panier',
'fr_url' => 'boutique/panier',
]);
}
/**
* @Route("/{locale}/boutique/produit/{slug}", name="framework_front_shop_product", requirements={"slug" = "([a-z\-0-9]+)", "locale" = "([a-z\-0-9]+)"})
* @Route("/{locale}/shop/produit/{slug}", name="framework_front_shop_product_de", requirements={"slug" = "([a-z\-0-9]+)", "locale" = "([a-z\-0-9]+)"})
*/
public function productAction(Request $request, $locale = NULL, $slug = NULL)
{
$request->setLocale($locale);
$em = $this->getDoctrine()->getManager();
$globals = $this->get("twig")->getGlobals();
$locales = explode('|', $globals["app_locales"]);
$page = $em->getRepository('FrameworkAppBundle:Page')->findOneBy(['slug' => 'boutique-produit', 'locale' => $locale]);
$product = $em->getRepository('FrameworkShopBundle:Product')->findOneBy(['slug' => $slug]);
if($product->getPublished() != 1){
return $this->redirectToRoute('framework_front_shop_all', ['locale' => $locale]);
}
if(is_null($product)){
return $this->redirectToRoute('framework_front_page_404', ['locale' => $locale]);
}
$similar = $em->getRepository('FrameworkShopBundle:Product')->sameTags($product->getTags());
$saved = false;
if( $this->getUser()){
$bookmark = $em->getRepository('FrameworkShopBundle:Bookmark')->findOneBy(['user' => $this->getUser(), 'product' => $product]);
if( $bookmark ){
$saved = true;
}
}
return $this->render('FrontBundle/Page/shop-product.html.twig', [
'page' => $page,
'body' => '',
'product' => $product,
'similar' => $similar,
'saved' => $saved,
'options' => $this->getBonsOptions($locale),
'de_url' => 'shop/produit/'.$slug,
'en_url' => 'shop/produit/'.$slug,
'fr_url' => 'boutique/produit/'.$slug,
]);
}
/**
* @Route("/tunnel/cart/send", name="tunnel_cart_send_ajax")
* @Route("/tunnel/cart/send/{locale}", name="tunnel_cart_send_ajax_locale", requirements={"locale" = "([a-z\-0-9]+)"})
*/
public function cartSendAction(Request $request, UserPasswordEncoderInterface $passwordEncoder, LoginFormAuthenticator $login, GuardAuthenticatorHandler $guard, MailerInterface $mailer, $locale = NULL)
{
if($locale){
$request->setLocale($locale);
}
$tr = $this->loadTranslation($locale);
require_once dirname(__FILE__).'/../../plugins/stripe-php-10.12.1/init.php';
$success = true;
$error = '';
$redirect = null;
$em = $this->getDoctrine()->getManager();
$globals = $this->get("twig")->getGlobals();
$cart = $request->get('palace_cart');
$infos = $request->get('infos');
$user = $this->getUser();
if($infos['firstname'] == '' || $infos['lastname'] == '' || $infos['phone'] == '' || $infos['address'] == '' || $infos['zipcode'] == '' || $infos['city'] == '' || $infos['country_code'] == '') {
$error = $tr['contact_error2'];
$success = false;
}
if( $infos['form_mode'] == 'register' ){
if( $em->getRepository('FrameworkAppBundle:User')->findOneBy(['email' => $infos['email']]) ){
$error = $tr['signup_error1'];
$success = false;
} elseif($infos['email'] == '' || $infos['password'] == '' || $infos['confirm'] == '') {
$error = $tr['contact_error2'];
$success = false;
} elseif(strlen($infos['password']) < 8) {
$error = $tr['signup_error2'];
$success = false;
} elseif($infos['password'] != $infos['confirm']) {
$error = $tr['signup_error3'];
$success = false;
} elseif($infos['agree'] == 'false') {
$error = $tr['signup_error4'];
$success = false;
}
}
if( $infos['form_mode'] == 'logged' && $user == null ){
$error = $tr['signup_error5'];
$success = false;
}
if($success){
if($user == null && $infos['form_mode'] == 'register'){
//REGISTER USER
if(trim($infos['email']) == 'sample@email.tst'){
exit;
}
$user = new User();
$user->setUsername(strtolower(trim($infos['email'])));
$user->setEmail(strtolower(trim($infos['email'])));
$user->setPassword(
$passwordEncoder->encodePassword(
$user,
$infos['password']
)
);
$user->setDeleted(0);
$user->setRoles(["ROLE_USER"]);
$stripe = new \Stripe\StripeClient(
$globals['stripe_secret_key']
);
$customer = $stripe->customers->create([
'email' => strtolower(trim($infos['email'])),
'name' => ucwords(strtolower(trim($infos['firstname']))).' '.strtoupper(trim($infos['lastname'])),
'address' => [
'city' => trim($infos['city']),
'country' => $infos['country_code'],
'line1' => trim($infos['address']),
'postal_code' => trim($infos['zipcode']),
],
'metadata' => ['user_id' => $user->getId()],
]);
$user->setInfos(json_encode(['stripe_id' => $customer->id]));
$em->persist($user);
$em->flush();
//FORCE LOG IN
$guard->authenticateUserAndHandleSuccess($user,$request,$login,'main');
}
//RECORD CART
$amount = $this->getCartAmount($cart);
$lastOrder = $em->getRepository('FrameworkAppBundle:Order')->findOneBy([], ['baseId' => 'DESC']);
if($lastOrder){
$lastId = $lastOrder->getBaseId();
} else {
$lastId = 1000;
}
$date = new \DateTimeImmutable();
$milli = (int)$date->format('Uv');
$order = new Order();
$order->setBaseId($lastId + 1);
$order->setUser($user);
$order->setToken($milli);
$order->setInfos(json_encode($infos));
$order->setCart(json_encode($cart));
$order->setStatus('new');
$order->setState(1);
$order->setAmount(floatval($amount['amount_adam']));
$order->setAmountShow(floatval($amount['amount_show']));
$order->setLang($locale);
$em->persist($order);
$em->flush();
$redirect = $this->urlGenerator->generate('tunnel_cart_payment', ['token' => $order->getToken(), 'locale' => $request->getLocale()]);
}
$data = [
'error' => $error,
'success' => $success,
'redirect' => $redirect,
];
$response = new Response(json_encode($data));
$response->headers->set('Content-Type', 'application/json');
return $response;
}
/**
* @Route("/{locale}/cart/payment/{token}", name="tunnel_cart_payment", requirements={"locale" = "([a-z\-0-9]+)", "token" = "([0-9]+)"})
*/
public function cartPaymentAction(Request $request, $locale = NULL, $token = NULL)
{
$request->setLocale($locale);
require_once dirname(__FILE__).'/../../plugins/stripe-php-10.12.1/init.php';
$em = $this->getDoctrine()->getManager();
$globals = $this->get("twig")->getGlobals();
$order = $em->getRepository('FrameworkAppBundle:Order')->findOneBy(['token' => $token]);
if(!$token || !$order || $order->getState() != 1){
return $this->redirectToRoute('framework_front_account_infos', ['locale' => $locale]);
}
$page = $em->getRepository('FrameworkAppBundle:Page')->findOneBy(['slug' => 'cart-payment', 'locale' => $locale]);
$amount = intVal(($order->getAmount() + $order->getAmountShow()) * 100);
$stripe = new \Stripe\StripeClient(
$globals['stripe_secret_key']
);
$username = ucwords(strtolower($order->getInfo('firstname'))).' '.strtoupper($order->getInfo('lastname'));
$stripe_show_account_id = $globals['stripe_show_account_id'];
if( intVal($order->getAmountShow()) > 0 ){
$intent = $stripe->paymentIntents->create([
'customer' => $order->getUser()->getInfo('stripe_id'),
// 'setup_future_usage' => 'off_session',
'amount' => $amount,
'currency' => 'eur',
'payment_method_types' => [
'card',
'klarna',
'paypal',
],
'metadata' => [
'type' => 'article',
'user_name' => $username,
'user_email' => $order->getUser()->getEmail(),
'user_phone' => $order->getInfo('phone'),
'user_id' => $order->getUser()->getId(),
'order_id' => $order->getBaseId(),
'order_detail' => $order->getRecap(true),
'amount' => intVal($order->getAmount() * 100),
'amount_show' => intVal($order->getAmountShow() * 100),
'amount_eur' => intVal($order->getAmount()),
'amount_show_eur' => intVal($order->getAmountShow()),
'amount_total_eur' => intVal($order->getAmount()) + intVal($order->getAmountShow()),
],
'description' => $order->getRecap('title'),
'transfer_group' => 'ORDER_'.$order->getBaseId(),
// 'application_fee_amount' => intVal($booking->getAmount() * 100), //ADAM MEYER PART
'transfer_data' => [
'destination' => $stripe_show_account_id,
'amount' => intVal($order->getAmountShow() * 100), //ROYAL SHOW PART
],
]);
} else {
$intent = $stripe->paymentIntents->create([
'customer' => $order->getUser()->getInfo('stripe_id'),
// 'setup_future_usage' => 'off_session',
'amount' => $amount,
'currency' => 'eur',
'payment_method_types' => [
'card',
'klarna',
'paypal'
],
'metadata' => [
'type' => 'article',
'user_name' => $username,
'user_email' => $order->getUser()->getEmail(),
'user_phone' => $order->getInfo('phone'),
'user_id' => $order->getUser()->getId(),
'order_id' => $order->getBaseId(),
'order_detail' => $order->getRecap(true),
'amount' => intVal($order->getAmount() * 100),
'amount_show' => intVal($order->getAmountShow() * 100),
'amount_eur' => intVal($order->getAmount()),
'amount_show_eur' => intVal($order->getAmountShow()),
'amount_total_eur' => intVal($order->getAmount()) + intVal($order->getAmountShow()),
],
'description' => $order->getRecap('title'),
]);
}
// $intent = $stripe->paymentIntents->create([
// 'customer' => $this->getUser()->getInfo('stripe_id'),
// 'setup_future_usage' => 'off_session',
// 'amount' => $amount,
// 'currency' => 'eur',
// 'payment_method_types' => [
// 'card',
// ],
// 'metadata' => [
// 'type' => 'reservation',
// 'user_name' => $username,
// 'user_email' => $booking->getUser()->getEmail(),
// 'user_phone' => $booking->getUser()->getInfo('phone'),
// 'user_id' => $booking->getUser()->getId(),
// 'booking_id' => $booking->getBaseId(),
// 'booking_detail' => $booking->getOptions(),
// 'booking_date' => $booking->getVenueTitle(),
// 'amount' => intVal($booking->getAmount() * 100),
// 'amount_show' => intVal($booking->getAmountShow() * 100),
// 'amount_eur' => intVal($booking->getAmount()),
// 'amount_show_eur' => intVal($booking->getAmountShow()),
// 'amount_total_eur' => intVal($booking->getAmount()) + intVal($booking->getAmountShow()),
// ],
// 'description' => $booking->getBaseId().' | '.$booking->getVenueTitle().' | '.$username,
// 'transfer_group' => 'BOOKING_'.$booking->getBaseId(),
// // 'application_fee_amount' => intVal($booking->getAmount() * 100), //ADAM MEYER PART
// 'transfer_data' => [
// 'destination' => $stripe_show_account_id,
// 'amount' => intVal($booking->getAmountShow() * 100), //ROYAL SHOW PART
// ],
// ]);
$client_secret = $intent->client_secret;
return $this->render('FrontBundle/Page/cart-payment.html.twig', [
'order' => $order,
'client_secret' => $client_secret,
'page' => $page,
'body' => '',
'de_url' => 'cart/payment/'.$token,
'en_url' => 'cart/payment/'.$token,
'fr_url' => 'cart/payment/'.$token,
]);
}
/**
* @Route("/{locale}/cart/paiement/{token}/complete", name="tunnel_cart_payment_complete", requirements={"locale" = "([a-z\-0-9]+)", "token" = "([0-9]+)"})
*/
public function cartPaymentCompleteAction(Request $request, $locale = NULL, $token = NULL, MailerInterface $mailer)
{
$request->setLocale($locale);
require_once dirname(__FILE__).'/../../plugins/stripe-php-10.12.1/init.php';
$em = $this->getDoctrine()->getManager();
$globals = $this->get("twig")->getGlobals();
$page = $em->getRepository('FrameworkAppBundle:Page')->findOneBy(['slug' => 'reservation-payment', 'locale' => $locale]);
$order = $em->getRepository('FrameworkAppBundle:Order')->findOneBy(['token' => $token]);
if(!$token || !$order){
return $this->redirectToRoute('framework_front_account_infos', ['locale' => $locale]);
}
$payment_intent = $request->get('payment_intent');
$stripe = new \Stripe\StripeClient(
$globals['stripe_secret_key']
);
$intent = $stripe->paymentIntents->retrieve(
$payment_intent,
[]
);
$method = $stripe->paymentMethods->retrieve(
$intent->payment_method,
[]
);
$payment_type = $method['type'];
$order->setStatus($intent->status);
$em->persist($order);
$em->flush();
if($intent->status == 'succeeded'){
$order->setState(2); //Commande confirmée
$order->setPaymentType($payment_type);
$order->setResult(json_encode($intent));
$em->persist($order);
$em->flush();
//ENVOI EMAIL
if( $order->getMailed() != 1 ){
$subject = 'Royal Palace : Merci pour votre commande !';
$title = 'Royal Palace : Merci pour votre commande !';
$content = '<p>Merci, votre commande <strong>#'.$order->getBaseId().'</strong> est maintenant confirmée.<br>
Le récapitulatif est disponible dans votre espace <a href="'.$globals['app_email_domain'].'login">"Mon Compte"</a> de notre site web.<br>
<a href="'.$globals['app_email_domain'].'front/déroulement-spectacle.pdf">Cliquez ici</a> pour télécharger la fiche <strong>"Déroulement d\'un évènement".</strong></p>
<p>A bientôt au <a href="'.$globals['app_email_domain'].'"><strong>Royal Palace</strong></a></p>';
if($locale == 'de'){
$subject = 'Royal Palace: Vielen Dank für Ihre Bestellung!';
$title = 'Royal Palace: Vielen Dank für Ihre Bestellung!';
$content = '<p>Vielen Dank, Ihre Bestellung <strong>#'.$order->getBaseId().'</strong> ist nun bestätigt.<br>
Die Zusammenfassung finden Sie in Ihrem Bereich <a href="'.$globals['app_email_domain'].'login">"Mein Konto"</a> auf unserer Website.<br>
<a href="'.$globals['app_email_domain'].'front/déroulement-spectacle.pdf">Klicken Sie hier</a>, um das Arbeitsblatt <strong>"Ablauf einer Veranstaltung"</strong> herunterzuladen.</p>
<p>Bis bald im <a href="'.$globals['app_email_domain'].'"><strong>Royal Palace</strong></a></p>';
}
if($locale == 'en'){
$subject = 'Royal Palace : Merci pour votre commande !';
$title = 'Royal Palace : Merci pour votre commande !';
$content = '<p>Thank you, your order <strong>#'.$order->getBaseId().'</strong> is now confirmed.<br>
The summary is available in your <a href="'.$globals['app_email_domain'].'login">"My Account"</a> area of our website.<br>
<a href="'.$globals['app_email_domain'].'front/déroulement-spectacle.pdf">Click here</a> to download the <strong>"Event procedure"</strong> sheet.</p>
<p>See you soon at <a href="'.$globals['app_email_domain'].'"><strong>Royal Palace</strong></a></p>';
}
//ENVOI EMAIL
$from = $globals['app_email_noreply'];
$to = $order->getUser()->getEmail();
$contact = $globals['app_email_contact'];
$email = (new Email())
->from($from)
->to($to)
//->cc('cc@example.com')
//->bcc('bcc@example.com')
->replyTo($contact)
//->priority(Email::PRIORITY_HIGH)
->subject($subject)
// ->text(nl2br('Merci, votre commande #<strong>'.$order->getBaseId().'</strong> est maintenant confirmée.').nl2br('A bientôt au Royal Palace'))
->html($this->renderView(
'FrontBundle/Emails/general.html.twig', array(
'title' => $title,
'content' => $content
)
));
$mailer->send($email);
//FIN ENVOI EMAIL
// //DESACTIVé SUR DEMANDE DU CLIENT
// //ENVOI EMAIL ADMIN ROYAL PALACE
// $from = $globals['app_email_noreply'];
// $to = $globals['app_email_address'];
// $contact = $globals['app_email_contact'];
// $infos = $order->getInfosArr();
// $cart = $order->getCartArr();
// $email = (new Email())
// ->from($from)
// ->to($to)
// //->cc('cc@example.com')
// //->bcc('bcc@example.com')
// ->replyTo($contact)
// //->priority(Email::PRIORITY_HIGH)
// ->subject('Nouvelle commande Site Web')
// ->text(nl2br('Nouvelle commande Site Web'))
// ->html($this->renderView(
// 'FrontBundle/Emails/general.html.twig', array(
// 'title' => 'Nouvelle commande Site Web #'.$order->getBaseId(),
// 'content' => '<p>
// '.ucwords(strtolower(trim($infos['firstname']))).' '.strtoupper(trim($infos['lastname'])).'<br>
// '.$infos['phone'].'<br>
// '.$infos['email'].'<br>
// '.trim($infos['address']).' '.trim($infos['zipcode']).' '.trim($infos['city']).' '.trim($infos['country']).'<br>
// TOTAL : '.$order->getAmountTotal().'€<br>
// Type de paiement : '.$order->getPaymentTypeTr('fr').'<br><br>
// <a href="'.$globals['app_email_domain'].'backoffrp/order/'.$order->getId().'">VOIR LA COMMANDE</a>
// </p>
// '
// )
// ));
// $mailer->send($email);
// //FIN ENVOI EMAIL ADMIN ROYAL PALACE
$order->setMailed(1);
$em->persist($order);
$em->flush();
}
} else {
$order->setState(3); //Erreur de paiement
$order->setResult(json_encode($intent));
$em->persist($order);
$em->flush();
}
return $this->render('FrontBundle/Page/cart-payment-complete.html.twig', [
'order' => $order,
'status' => $intent->status,
'page' => $page,
'body' => '',
]);
}
/**
* @Route("/{locale}/mon-compte/paiement/{token}/manual-cart", name="framework_front_reservation_payment_manual_cart", requirements={"locale" = "([a-z\-0-9]+)", "token" = "([0-9]+)"})
*/
public function reservationPaymentManualCartAction(Request $request, $locale = NULL, $token = NULL, MailerInterface $mailer)
{
$request->setLocale($locale);
$success = true;
$error = '';
$em = $this->getDoctrine()->getManager();
$globals = $this->get("twig")->getGlobals();
$page = $em->getRepository('FrameworkAppBundle:Page')->findOneBy(['slug' => 'reservation-payment', 'locale' => $locale]);
$order = $em->getRepository('FrameworkAppBundle:Order')->findOneBy(['token' => $token]);
if(!$token || !$order || $order->getState() != 1){
return $this->redirectToRoute('framework_front_account_infos', ['locale' => $locale]);
}
$order->setStatus('manual');
$order->setState(5); //Validée : En attente de règlement
$order->setPaymentType($request->get('payment_type'));
$em->persist($order);
$em->flush();
//ENVOI EMAIL
if( $order->getMailed() != 1 ){
$subject = 'Royal Palace : Merci pour votre commande !';
$title = 'Votre commande sera confirmée à la réception de votre paiement.';
$content = '<p>Merci ! Votre commande <strong>#'.$order->getBaseId().'</strong> sera confirmée à la réception de votre paiement.<br><br>
TOTAL : <strong>'.$order->getAmountTotal().'€</strong><br>
Précisez le numéro de commande suivant lors de votre paiement : <strong>#'.$order->getBaseId().'</strong><br><br>
- Soit par chèques à l\'adresse suivante :<br>
<strong>ROYAL PALACE - 20 RUE DE HOCHFELDEN - 67330 KIRRWILLER </strong><br>
1 chèque à l\'ordre d\'<strong>ADAM MEYER SAS</strong> d\'un montant de <strong>'.$order->getAmount().'€</strong><br>';
if($order->getAmountShow() > 0){
$content .= '1 chèque à l\'ordre de <strong>ROYAL SHOW PRODUCTIONS SAS</strong> d\'un montant de <strong>'.$order->getAmountShow().'€</strong><br>';
}
$content .= '<br>
- Soit par virements bancaires (CCM DE BOUXWILLER) :<br>
1 virement d\'un montant de <strong>'.$order->getAmount().'€</strong> (ADAM MEYER SAS)<br>
<strong>IBAN : FR76 10278 01670 00013429645 56 - BIC CMCIFR2A</strong><br>';
if($order->getAmountShow() > 0){
$content .= '1 virement d\'un montant de <strong>'.$order->getAmountShow().'€</strong> (ROYAL SHOW PRODUCTIONS SAS)<br>';
}
$content .= '<strong>IBAN : FR76 10278 01670 00014697745 96 - BIC CMCIFR2A</strong><br>
<br>
Pour préparer au mieux votre venue au Royal Palace, <a href="'.$globals['app_email_domain'].'front/déroulement-spectacle.pdf">cliquez ici</a> pour télécharger la fiche <strong>"Déroulement d\'un évènement".</strong></p><br>
Le récapitulatif est disponible dans votre espace <a href="'.$globals['app_email_domain'].'login">"Mon Compte"</a> de notre site web.<br>
<p>A bientôt au <a href="'.$globals['app_email_domain'].'"><strong>Royal Palace</strong></a></p>
';
if($locale == 'de'){
$subject = 'Royal Palace : Vielen Dank für Ihre Bestellung!';
$title = 'Ihre Bestellung wird bestätigt, sobald Ihre Zahlung eingegangen ist.';
$content = '<p>Vielen Dank! Ihre Bestellung <strong>#'.$order->getBaseId().'</strong> wird bestätigt, sobald Ihre Zahlung eingegangen ist.<br><br>
TOTAL : <strong>'.$order->getAmountTotal().'€</strong><br>
Geben Sie bei der Zahlung die folgende Bestellnummer an : <strong>#'.$order->getBaseId().'</strong><br><br>
- Oder per Scheck an die folgende Adresse :<br>
<strong>ROYAL PALACE - 20 RUE DE HOCHFELDEN - 67330 KIRRWILLER </strong><br>
1 Scheck ausgestellt auf <strong>ADAM MEYER SAS</strong> in Höhe von <strong>'.$order->getAmount().'€</strong><br>';
if($order->getAmountShow() > 0){
$content .= '1 Scheck ausgestellt auf <strong>ROYAL SHOW PRODUCTIONS SAS</strong> in Höhe von <strong>'.$order->getAmountShow().'€</strong><br>';
}
$content .= '<br>
- Entweder per Banküberweisung (CCM DE BOUXWILLER) :<br>
1 Überweisung in Höhe von <strong>'.$order->getAmount().'€</strong> (ADAM MEYER SAS)<br>
<strong>IBAN : FR76 10278 01670 00013429645 56 - BIC CMCIFR2A</strong><br>';
if($order->getAmountShow() > 0){
$content .= '1 Überweisung in Höhe von <strong>'.$order->getAmountShow().'€</strong> (ROYAL SHOW PRODUCTIONS SAS)<br>';
}
$content .= '<strong>IBAN : FR76 10278 01670 00014697745 96 - BIC CMCIFR2A</strong><br>
<br>
Um Ihren Besuch im Royal Palace optimal vorzubereiten, <a href="'.$globals['app_email_domain'].'front/déroulement-spectacle.pdf">klicken Sie hier</a> um das Merkblatt herunterzuladen <strong>"Ablauf einer Veranstaltung".</strong></p><br>
Die Zusammenfassung ist in Ihrem Bereich <a href="'.$globals['app_email_domain'].'login">"Mein Konto"</a> auf unserer Website verfügbar.<br>
<p>Bis bald im <a href="'.$globals['app_email_domain'].'"><strong>Royal Palace</strong></a></p>
';
}
if($locale == 'en'){
$subject = 'Royal Palace : Thank you for your order!';
$title = 'Your order will be confirmed upon receipt of your payment.';
$content = '<p>Thank you! Your order <strong>#'.$order->getBaseId().'</strong> will be confirmed upon receipt of your payment.<br><br>
TOTAL : <strong>'.$order->getAmountTotal().'€</strong><br>
Specify the following order number when making your payment: <strong>#'.$order->getBaseId().'</strong><br><br>
- By cheque to the following address :<br>
<strong>ROYAL PALACE - 20 RUE DE HOCHFELDEN - 67330 KIRRWILLER </strong><br>
1 cheque to the order of <strong>ADAM MEYER SAS</strong> in the amount of <strong>'.$order->getAmount().'€</strong><br>';
if($order->getAmountShow() > 0){
$content .= '1 cheque to the order of <strong>ROYAL SHOW PRODUCTIONS SAS</strong> in the amount of <strong>'.$order->getAmountShow().'€</strong><br>';
}
$content .= '<br>
- Or by bank transfer (CCM DE BOUXWILLER) :<br>
1 transfer in the amount of <strong>'.$order->getAmount().'€</strong> (ADAM MEYER SAS)<br>
<strong>IBAN : FR76 10278 01670 00013429645 56 - BIC CMCIFR2A</strong><br>';
if($order->getAmountShow() > 0){
$content .= '1 transfer in the amount of <strong>'.$order->getAmountShow().'€</strong> (ROYAL SHOW PRODUCTIONS SAS)<br>';
}
$content .= '<strong>IBAN : FR76 10278 01670 00014697745 96 - BIC CMCIFR2A</strong><br>
<br>
To best prepare your visit to the Royal Palace, <a href="'.$globals['app_email_domain'].'front/déroulement-spectacle.pdf">click here</a> to download the data sheet <strong>"How an event unfolds".</strong></p><br>
The summary is available in your space <a href="'.$globals['app_email_domain'].'login">"My Account"</a> of our website.<br>
<p>See you soon at <a href="'.$globals['app_email_domain'].'"><strong>Royal Palace</strong></a></p>
';
}
//ENVOI EMAIL
$from = $globals['app_email_noreply'];
$to = $order->getUser()->getEmail();
$contact = $globals['app_email_contact'];
$email = (new Email())
->from($from)
->to($to)
//->cc('cc@example.com')
//->bcc('bcc@example.com')
->replyTo($contact)
//->priority(Email::PRIORITY_HIGH)
->subject($subject)
// ->text(nl2br('Merci ! Votre commande <strong>'.$order->getBaseId().'</strong> est maintenant confirmée.').nl2br('A bientôt au Royal Palace'))
->html($this->renderView(
'FrontBundle/Emails/general.html.twig', array(
'title' => $title,
'content' => $content
)
));
$mailer->send($email);
//FIN ENVOI EMAIL
// //DESACTIVé SUR DEMANDE DU CLIENT
// //ENVOI EMAIL ADMIN ROYAL PALACE
// $from = $globals['app_email_noreply'];
// $to = $globals['app_email_address'];
// $contact = $globals['app_email_contact'];
// $infos = $order->getInfosArr();
// $cart = $order->getCartArr();
// $email = (new Email())
// ->from($from)
// ->to($to)
// //->cc('cc@example.com')
// //->bcc('bcc@example.com')
// ->replyTo($contact)
// //->priority(Email::PRIORITY_HIGH)
// ->subject('Nouvelle commande Site Web')
// ->text(nl2br('Nouvelle commande Site Web'))
// ->html($this->renderView(
// 'FrontBundle/Emails/general.html.twig', array(
// 'title' => 'Nouvelle commande Site Web #'.$order->getBaseId(),
// 'content' => '<p>
// '.ucwords(strtolower(trim($infos['firstname']))).' '.strtoupper(trim($infos['lastname'])).'<br>'.$infos['phone'].'<br>
// '.$infos['email'].'<br>
// '.trim($infos['address']).' '.trim($infos['zipcode']).' '.trim($infos['city']).' '.trim($infos['country']).'<br>
// TOTAL : '.$order->getAmountTotal().'€<br>
// Type de paiement : '.$order->getPaymentTypeTr('fr').'<br><br>
// <a href="'.$globals['app_email_domain'].'backoffrp/order/'.$order->getId().'">VOIR LA COMMANDE</a>
// </p>
// '
// )
// ));
// $mailer->send($email);
// //FIN ENVOI EMAIL ADMIN ROYAL PALACE
$order->setMailed(1);
$em->persist($order);
$em->flush();
}
$data = [
'error' => $error,
'success' => $success,
];
$response = new Response(json_encode($data));
$response->headers->set('Content-Type', 'application/json');
return $response;
}
/**
* @Route("/{locale}/mon-compte/paiement/manual-cart/confirm/{token}", name="framework_front_reservation_payment_manual_cart_confirm", requirements={"locale" = "([a-z\-0-9]+)", "token" = "([0-9]+)"})
*/
public function reservationPaymentManualCartConfirmAction(Request $request, $locale = NULL, $token = NULL)
{
$request->setLocale($locale);
$em = $this->getDoctrine()->getManager();
$globals = $this->get("twig")->getGlobals();
$page = $em->getRepository('FrameworkAppBundle:Page')->findOneBy(['slug' => 'cart-payment', 'locale' => $locale]);
$order = $em->getRepository('FrameworkAppBundle:Order')->findOneBy(['token' => $token]);
if(!$token || !$order){
return $this->redirectToRoute('framework_front_account_infos', ['locale' => $locale]);
}
return $this->render('FrontBundle/Page/cart-payment-manual-confirm.html.twig', [
'baseId' => $order->getBaseId(),
'order' => $order,
'page' => $page,
'body' => '',
]);
}
function getCartAmount($cart){
$em = $this->getDoctrine()->getManager();
$globals = $this->get("twig")->getGlobals();
$options = self::bonsOptions;
$amount = 0;
$amount_adam = 0;
$amount_show = 0;
$amount_gifts = 0;
$giftPrice = self::giftPrice;
foreach ($cart as $key => $item) {
$product = $em->getRepository('FrameworkShopBundle:Product')->findOneBy(['slug' => $item['slug']]);
if( $item['slug'] == 'bon-cadeau-10' || $item['slug'] == 'bon-cadeau-21' ){//SILVER PRIX VARIABLE
$amount = $amount + ( floatval($item['price']) * intval($item['quantity']) );
if( $item['gift'] == 'true' ){
$amount_gifts = $amount_gifts + ( $giftPrice ); //NOUVEAU CALCUL
}
} else {
$amount = $amount + ( floatval($product->getPrice()) * intval($item['quantity']) );
$amount_show = $amount_show + ( $product->getAmountShow() * intval($item['quantity']) );
if( $item['gift'] == 'true' ){
// $amount_gifts = $amount_gifts + ( $giftPrice * intval($item['quantity']) );
$amount_gifts = $amount_gifts + ( $giftPrice ); //NOUVEAU CALCUL
}
if(isset($item['options']) && $item['options'] != ""){
foreach ($item['options'] as $key2 => $value) {
foreach ($options as $key3 => $option) {
if($option['id'] == $value['id']){
// $amount = $amount + ( $option['price'] * intval($value['qty']) * intval($item['quantity']) );
$amount = $amount + ( $option['price'] * intval($value['qty']) ); //NOUVEAU CALCUL
}
}
}
}
}
}
$amount_adam = $amount - $amount_show;
$amount_show = $amount_show + $amount_gifts;
$amount = $amount + $amount_gifts;
// dump([
// 'amount' => $amount,
// 'amount_adam' => $amount_adam,
// 'amount_show' => $amount_show,
// ]);
// exit;
return [
'amount' => $amount,
'amount_adam' => $amount_adam,
'amount_show' => $amount_show,
];
}
public function getBonsOptions($locale){
if($locale == 'de'){
return [
[
'id' => 1,
'name' => 'Vorschlag Duo',
'price' => 29,
'lounge' => false,
'sub'=> 'Für 2 Personen',
'boutique' => false,
'restaurant' => true,
'desc' => '<strong>Gültig für zwei Personen</strong><br><br>
1⁄2 bt Pinot Blanc Dussourt<br>***<br>
1⁄2 bt Bordeaux Château Goumin<br>***<br>
2 Kaffee',
],
[
'id' => 2,
'name' => 'Vorschlag Prestigo',
'price' => 41,
'lounge' => false,
'sub'=> 'Für 2 Personen',
'restaurant' => true,
'boutique' => false,
'desc' => '<strong>Gültig für zwei Personen</strong><br><br>
1⁄2 bt Pinot Gris Signature Domaine Ville de Colmar<br>***<br>
1⁄2 bt Saint-Emilion Cheval Noir Mähler-Besser<br>***<br>
2 Kaffee',
],
[
'id' => 3,
'name' => 'Getränketicket 5€',
'price' => 5,
'sub'=> '',
'restaurant' => false,
'boutique' => false,
'lounge' => true,
'desc' => '',
],
[
'id' => 4,
'name' => 'Getränketicket 8€',
'price' => 8,
'sub'=> '',
'restaurant' => false,
'boutique' => false,
'lounge' => true,
'desc' => '',
],
[
'id' => 5,
'name' => 'Getränketicket 10€',
'price' => 10,
'sub'=> '',
'restaurant' => false,
'boutique' => false,
'lounge' => true,
'desc' => '',
],
[
'id' => 6,
'name' => 'Champagner-Flasche',
'price' => 65,
'sub'=> '',
'restaurant' => false,
'boutique' => false,
'lounge' => true,
'desc' => '',
],
[
'id' => 7,
'name' => 'Gutschein Shop 10€',
'price' => 10,
'sub'=> '',
'restaurant' => false,
'boutique' => true,
'lounge' => false,
'desc' => '',
],
[
'id' => 8,
'name' => 'Gutschein Shop 20€',
'price' => 20,
'sub'=> '',
'restaurant' => false,
'boutique' => true,
'lounge' => false,
'desc' => '',
],
[
'id' => 9,
'name' => 'Käsesortiment',
'price' => 8,
'sub' => '',
'restaurant' => true,
'boutique' => false,
'lounge' => false,
'desc' => '',
],
];
} elseif($locale == 'en'){
return [
[
'id' => 1,
'name' => 'Package Duo',
'price' => 29,
'lounge' => false,
'sub' => 'For two people',
'restaurant' => true,
'boutique' => false,
'desc' => '<strong>Valid for two people</strong><br><br>
1⁄2 bt Pinot Blanc Dussourt<br>***<br>
1⁄2 bt Bordeaux Château Goumin<br>***<br>
2 cafés',
],
[
'id' => 2,
'name' => 'Package Prestigo',
'price' => 41,
'lounge' => false,
'sub' => 'For two people',
'restaurant' => true,
'boutique' => false,
'desc' => '<strong>Valid for two people</strong><br><br>
1⁄2 bt Pinot Gris Signature Domaine Ville de Colmar<br>***<br>
1⁄2 bt Saint-Emilion Cheval Noir Mähler-Besser<br>***<br>
2 cafés',
],
[
'id' => 3,
'name' => 'Drinks ticket 5€',
'price' => 5,
'lounge' => true,
'sub' => '',
'restaurant' => false,
'boutique' => false,
'desc' => '',
],
[
'id' => 4,
'name' => 'Drinks ticket 8€',
'price' => 8,
'sub' => '',
'lounge' => true,
'restaurant' => false,
'boutique' => false,
'desc' => '',
],
[
'id' => 5,
'name' => 'Drinks ticket 10€',
'price' => 10,
'sub' => '',
'lounge' => true,
'restaurant' => false,
'boutique' => false,
'desc' => '',
],
[
'id' => 6,
'name' => 'Bottle of Champagne',
'price' => 65,
'sub' => '',
'lounge' => true,
'restaurant' => false,
'boutique' => false,
'desc' => '',
],
[
'id' => 7,
'name' => 'Store voucher 10€',
'price' => 10,
'sub' => '',
'lounge' => false,
'boutique' => true,
'restaurant' => false,
'desc' => '',
],
[
'id' => 8,
'name' => 'Store voucher 20€',
'price' => 20,
'sub' => '',
'lounge' => false,
'restaurant' => false,
'boutique' => true,
'desc' => '',
],
[
'id' => 9,
'name' => 'Assorted cheeses',
'price' => 8,
'sub' => '',
'restaurant' => true,
'boutique' => false,
'lounge' => false,
'desc' => '',
],
];
} else {
return [
[
'id' => 1,
'name' => 'Forfait boisson Duo',
'price' => 29,
'lounge' => false,
'sub' => 'Pour deux personnes',
'restaurant' => true,
'boutique' => false,
'desc' => '<strong>Valable pour deux personnes</strong><br><br>
1⁄2 bt de Pinot Blanc Dussourt<br>***<br>
1⁄2 bt Bordeaux Château Goumin<br>***<br>
2 cafés',
],
[
'id' => 2,
'name' => 'Forfait boisson Prestigo',
'price' => 41,
'lounge' => false,
'sub' => 'Pour deux personnes',
'restaurant' => true,
'boutique' => false,
'desc' => '<strong>Valable pour deux personnes</strong><br><br>
1⁄2 bt de Pinot Gris Signature Domaine Ville de Colmar<br>***<br>
1⁄2 bt Saint-Emilion Cheval Noir Mähler-Besser<br>***<br>
2 cafés',
],
[
'id' => 3,
'name' => 'Ticket boisson 5€',
'price' => 5,
'sub' => '',
'restaurant' => false,
'boutique' => false,
'lounge' => true,
'desc' => '',
],
[
'id' => 4,
'name' => 'Ticket boisson 8€',
'price' => 8,
'sub' => '',
'restaurant' => false,
'boutique' => false,
'lounge' => true,
'desc' => '',
],
[
'id' => 5,
'name' => 'Ticket boisson 10€',
'price' => 10,
'sub' => '',
'restaurant' => false,
'boutique' => false,
'lounge' => true,
'desc' => '',
],
[
'id' => 6,
'name' => 'Bouteille de Champagne',
'price' => 65,
'sub' => '',
'restaurant' => false,
'boutique' => false,
'lounge' => true,
'desc' => '',
],
[
'id' => 7,
'name' => 'Bon d’achat boutique 10€',
'price' => 10,
'sub' => '',
'restaurant' => false,
'boutique' => true,
'lounge' => false,
'desc' => '',
],
[
'id' => 8,
'name' => 'Bon d’achat boutique 20€',
'price' => 20,
'sub' => '',
'restaurant' => false,
'boutique' => true,
'lounge' => false,
'desc' => '',
],
[
'id' => 9,
'name' => 'Assortiment de fromages',
'price' => 8,
'sub' => '',
'restaurant' => true,
'boutique' => false,
'lounge' => false,
'desc' => '',
],
];
}
}
public function loadTranslation($locale){
$arr = [];
$em = $this->getDoctrine()->getManager();
$translations = $em->getRepository('FrameworkAppBundle:Translation')->findAll();
foreach ($translations as $key => $translation) {
$content = $translation->getContent();
if(isset($content[$locale])){
$arr[$translation->getSlug()] = $content[$locale];
} else {
$arr[$translation->getSlug()] = $translation->getSlug();
}
}
return $arr;
}
/**
* @Route("/tunnel/venue/infos/{id}", name="framework_front_tunnel_venue_info", requirements={"id" = "([0-9]+)"})
*/
public function venueInfoAction(Request $request, $id = NULL)
{
$em = $this->getDoctrine()->getManager();
$globals = $this->get("twig")->getGlobals();
$venue = $em->getRepository('FrameworkAppBundle:Venue')->findOneBy(['id' => $request->get('id')]);
if($venue){
$data = [
'error' => '',
'success' => true,
'venueId' => $venue->getId(),
'isFull' => $venue->getIsfull(),
];
} else {
$data = [
'error' => 'No venue',
'success' => false,
'venueId' => null,
'isFull' => null,
];
}
$response = new Response(json_encode($data));
$response->headers->set('Content-Type', 'application/json');
return $response;
}
// NEW ARTICLES SHOP
/**
* @Route("/{locale}/boutique/articles2", name="framework_front_shop_all_2", requirements={"locale" = "([a-z\-0-9]+)"})
*/
public function shop2Action(Request $request, $locale = NULL, $category_slug = NULL)
{
$request->setLocale($locale);
$em = $this->getDoctrine()->getManager();
$globals = $this->get("twig")->getGlobals();
$locales = explode('|', $globals["app_locales"]);
$categoryName = 'Bons cadeaux';
$filter = 'all';
if( $request->get('f') != null ){
$filter = $request->get('f');
}
$page = $em->getRepository('FrameworkAppBundle:Page')->findOneBy(['slug' => 'boutique-articles', 'locale' => $locale]);
$categories = $em->getRepository('FrameworkShopBundle:Category')->findBy([], ['position' => 'ASC']);
$category = $em->getRepository('FrameworkShopBundle:Category')->findOneBy(['slug' => $category_slug]);
if( $category_slug ){
$categoryTmp = $em->getRepository('FrameworkAppBundle:Category')->findOneBy(['slug' => $category_slug]);
if( $categoryTmp ){
$categoryName = $categoryTmp->getTitle();
}
}
$bons = $em->getRepository('FrameworkShopBundle:Product')->findBy(['category' => 5], ['position' => 'ASC']);
$bookmarks = $em->getRepository('FrameworkShopBundle:Bookmark')->findBy(['user' => $this->getUser(), 'product' => $bons]);
return $this->render('FrontBundle/Page/shop2.html.twig', [
'page' => $page,
'categories' => $categories,
'category' => $category,
'category_slug' => $category_slug,
'categoryName' => $categoryName,
'body' => '',
'filter' => $filter,
'bons' => $bons,
'bookmarks' => $bookmarks,
'de_url' => 'shop/articles',
'en_url' => 'shop/articles',
'fr_url' => 'boutique/articles',
]);
}
// EDIT EXISTING BOOKING
/**
* @Route("/tunnel/booking/resend", name="tunnel_booking_resend_ajax")
* @Route("/tunnel/booking/resend/{locale}", name="tunnel_booking_resend_ajax_locale", requirements={"locale" = "([a-z\-0-9]+)"})
*/
public function bookingResendAction(Request $request, MailerInterface $mailer, $locale = NULL)
{
if($locale){
$request->setLocale($locale);
}
$tr = $this->loadTranslation($locale);
require_once dirname(__FILE__).'/../../plugins/stripe-php-10.12.1/init.php';
$success = true;
$error = '';
$em = $this->getDoctrine()->getManager();
$globals = $this->get("twig")->getGlobals();
$resa = $request->get('palace_resa');
$infos = $request->get('infos');
$venue = $em->getRepository('FrameworkAppBundle:Venue')->findOneById($resa['show']['id']);
$user = $this->getUser();
if($infos['firstname'] == '' || $infos['lastname'] == '' || $infos['phone'] == '' || $infos['address'] == '' || $infos['zipcode'] == '' || $infos['city'] == '' || $infos['country_code'] == '') {
$error = $tr['contact_error2'];
$success = false;
}
if( $infos['form_mode'] == 'register' ){
if( $em->getRepository('FrameworkAppBundle:User')->findOneBy(['email' => $infos['email']]) ){
$error = $tr['signup_error1'];
$success = false;
} elseif($infos['email'] == '' || $infos['password'] == '' || $infos['confirm'] == '') {
$error = $tr['contact_error2'];
$success = false;
} elseif(strlen($infos['password']) < 8) {
$error = $tr['signup_error2'];
$success = false;
} elseif($infos['password'] != $infos['confirm']) {
$error = $tr['signup_error3'];
$success = false;
} elseif($infos['agree'] == 'false') {
$error = $tr['signup_error4'];
$success = false;
}
}
if( $infos['form_mode'] == 'logged' && $user == null ){
$error = $tr['signup_error5'];
$success = false;
}
if( $infos['gift'] == 'true' && strlen($infos['gift_user']) < 1 ){
$error = $tr['booking_error1'];
$success = false;
}
if( !$venue ){
$error = $tr['booking_error2'];
$success = false;
} elseif ( $venue->getStart()->getTimestamp() < time() ){
$error = $tr['booking_error2'];
$success = false;
}
$booking = $em->getRepository('FrameworkAppBundle:Booking')->findOneById($request->get('booking_id'));
if(!$booking){
$error = 'Réservation invalide';
$success = false;
}
if($this->getUser()->getId() != $booking->getUser()->getId()){
$error = 'Réservation invalide';
$success = false;
}
if($success){
//RECORD RESA
$amount = $this->getAmount($resa, $venue);
$lastBooking = $em->getRepository('FrameworkAppBundle:Booking')->findOneBy([], ['baseId' => 'DESC']);
if($lastBooking){
$lastId = $lastBooking->getBaseId();
} else {
$lastId = 57530;
}
$date = new \DateTimeImmutable();
$milli = (int)$date->format('Uv');
$infos['ip']=$_SERVER['REMOTE_ADDR'];
// $booking = new Booking();
// $booking->setBaseId($lastId + 1);
// $booking->setVenue($venue);
// $booking->setUser($user);
// $booking->setToken($milli);
$booking->setInfos(json_encode($infos));
$booking->setCart(json_encode($resa));
$booking->setStatus('new');
$booking->setState(0);
$booking->setAmount(floatval($amount['amount_adam']));
$booking->setAmountShow(floatval($amount['amount_show']));
$booking->setOptions($booking->getRecap(true));
$booking->setLang($locale);
$booking->setIsFlash(NULL);
$em->persist($booking);
$booking->setAction(1);
$booking->setAlerting(1);
$em->flush();
$subject = '['.$booking->getBaseId().'] Votre réservation Royal Palace';
$title = 'Votre réservation Royal Palace';
$content = '<p>Bonjour,</p>
<p>Votre demande de réservation <strong>'.$resa['show']['title'].' : '.$resa['show']['dateStr'].'</strong> à bien été prise en compte. Nos équipes vérifient la disponibilité des prestations souhaitées et reviendrons vers vous par email sous 24 heures (hors dimanches et jours fériés). Un lien de paiement vous sera envoyé par mail et sera également disponible dans votre espace <a href="'.$globals['app_email_domain'].'login">"Mon Compte"</a> de notre site web.</p>
<p><br>A bientôt au <a href="'.$globals['app_email_domain'].'"><strong>Royal Palace</strong></a></p>';
if($locale == 'de'){
$subject = '['.$booking->getBaseId().'] Ihre Buchung Royal Palace';
$title = 'Ihre Buchung Royal Palace';
$content = '<p>Hallo,</p>
<p>Ihre Buchungsanfrage <strong>'.$resa['show']['title'].' : '.$resa['show']['dateStr'].'</strong> wurde erfolgreich bearbeitet. Unsere Mitarbeiter überprüfen die Verfügbarkeit der gewünschten Leistungen und melden sich innerhalb von 24 Stunden (außer an Sonn- und Feiertagen) per E-Mail bei Ihnen zurück. Ein Zahlungslink wird Ihnen per E-Mail zugeschickt und ist auch in Ihrem Bereich <a href="'.$globals['app_email_domain'].'login">"Mein Konto"</a> auf unserer Website verfügbar.</p>
<p><br>Bis bald im <a href="'.$globals['app_email_domain'].'"><strong>Royal Palace</strong></a></p>';
}
if($locale == 'en'){
$subject = '['.$booking->getBaseId().'] Your reservation at Royal Palace';
$title = 'Your reservation at Royal Palace';
$content = '<p>Hello,</p>
<p>Your reservation request <strong>'.$resa['show']['title'].' : '.$resa['show']['dateStr'].'</strong> has been processed. Our teams will check the availability of the services you require and get back to you by email within 24 hours (excluding Sundays and public holidays). A payment link will be sent to you by email and will also be available in your <a href="'.$globals['app_email_domain'].'login">"My Account"</a> area of our website.</p>
<p><br>See you soon at <a href="'.$globals['app_email_domain'].'"><strong>Royal Palace</strong></a></p>';
}
//ENVOI EMAIL
$from = $globals['app_email_noreply'];
$to = $user->getEmail();
$contact = $globals['app_email_contact'];
$email = (new Email())
->from($from)
->to($user->getEmail())
//->cc('cc@example.com')
//->bcc('bcc@example.com')
->replyTo($contact)
//->priority(Email::PRIORITY_HIGH)
->subject($subject)
// ->text(nl2br('Votre demande de réservation <strong>'.$resa['show']['title'].' : '.$resa['show']['dateStr'].'</strong> à bien été prise en compte. Nos équipes vérifient la disponibilité des prestations souhaitées et reviendrons vers vous par email sous 24 heures (hors dimanches et jours fériés). Un lien de paiement vous sera envoyé par mail et sera également disponible dans votre espace "Mon Compte" de notre site web.').nl2br('A bientôt au Royal Palace'))
->html($this->renderView(
'FrontBundle/Emails/general.html.twig', array(
'title' => $title,
'content' => $content
)
));
$mailer->send($email);
//FIN ENVOI EMAIL
// //DESACTIVé SUR DEMANDE DU CLIENT
// //ENVOI EMAIL ADMIN ROYAL PALACE
// $from = $globals['app_email_noreply'];
// $to = $globals['app_email_address'];
// $contact = $globals['app_email_contact'];
// $email = (new Email())
// ->from($from)
// ->to($to)
// //->cc('cc@example.com')
// //->bcc('bcc@example.com')
// ->replyTo($contact)
// //->priority(Email::PRIORITY_HIGH)
// ->subject('Nouvelle demande de réservation Site Web')
// ->text(nl2br('Nouvelle demande de réservation Site Web'))
// ->html($this->renderView(
// 'FrontBundle/Emails/general.html.twig', array(
// 'title' => 'Nouvelle demande de réservation Site Web #'.$booking->getBaseId(),
// 'content' => '<p>
// <strong>'.$resa['show']['title'].' : '.$resa['show']['dateStr'].'</strong><br>
// '.ucwords(strtolower(trim($infos['firstname']))).' '.strtoupper(trim($infos['lastname'])).'<br>
// '.$infos['phone'].'<br>
// '.$infos['email'].'<br>
// '.trim($infos['address']).' '.trim($infos['zipcode']).' '.trim($infos['city']).' '.trim($infos['country']).'<br>
// TOTAL : '.$booking->getAmountTotal().'€<br>
// <a href="'.$globals['app_email_domain'].'backoffrp/resa/'.$booking->getId().'">VOIR LA RESERVATION</a>
// </p>
// '
// )
// ));
// $mailer->send($email);
// //FIN ENVOI EMAIL ADMIN ROYAL PALACE
}
$data = [
'error' => $error,
'success' => $success,
];
$response = new Response(json_encode($data));
$response->headers->set('Content-Type', 'application/json');
return $response;
}
}