src/Flexy/FrontBundle/Themes/CoWorking/templates/reservation/reservation-meeting-next.html.twig line 1
{% extends '@Flexy/FrontBundle/Themes/CoWorking/templates/layout.html.twig' %}
{% block stylesheets %}
{{ parent() }}
<link rel="stylesheet" href="{{ asset('themes/coworking/css/reservation.css') }}" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/chosen/1.4.2/chosen.css" />
<style>
.card{
box-shadow: rgba(17, 17, 26, 0.05) 0px 1px 0px, rgba(17, 17, 26, 0.1) 0px 0px 8px ;
}
.custom-tooltip .tooltip-inner {
background-color: #fff; /* Remplacez #ff0000 par la couleur de votre choix */
text-align: left;
color: #000; /* Couleur du texte à l'intérieur de l'info-bulle */
}
/* Tooltip */
.tooltip {
background-color: #fff; /* Couleur de fond */
color: #fff; /* Couleur du texte */
border: 1px solid #fff; /* Bordure */
border-radius: 4px; /* Coins arrondis */
padding: 5px 10px; /* Espacement intérieur */
font-size: 13px; /* Taille de la police */
box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.2); /* Ombre */
}
/* Tooltip - flèche */
.tooltip .arrow::before {
border-top-color: #fff; /* Couleur de fond */
}
/* Tooltip - position */
.tooltip.top {
margin-top: -3px; /* Positionnement par rapport à l'élément parent */
}
.menu {
display: flex;
justify-content: space-around;
}
h5 {
color: #7b7b7b !important;
}
.category {
flex: 1;
margin: 0 10px;
border: 1px solid #ccc;
border-radius: 5px;
padding: 10px;
}
h2 {
font-size: 13px;
margin-bottom: 5px;
padding: 5px;
}
.menu .category ul {
list-style-type: none;
padding: 0;
}
.menu .category li {
margin-bottom: 5px;
font-size: 12px; /* Taille de police légèrement augmentée */
}
/* Style additionnel pour un meilleur aspect */
.menu {
background-color: #f9f9f9;
padding: 20px;
border-radius: 10px;
}
.category {
background-color: #fff;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}
.list-group li {
font-size: 11px;
color: #333;
}
/* Ajout de styles de survol pour un effet interactif */
.list-group li:hover {
color: #FFCB00 !important; /* Changement de couleur au survol */
cursor: pointer; /* Curseur de la souris en pointeur */
}
/* Animation de survol */
.list-group li:hover {
transform: scale(1.1); /* Agrandissement au survol */
transition: transform 0.2s ease; /* Transition fluide */
}
.form-control {
border-radius: 9px;
padding: 0px !important
}
.form-check {
min-height: 1.9rem !important;
}
.modal-backdrop.fade.show {
display: none;
}
/* css checkbox*/
/* hide checkbox */
input[type="checkbox"] {
display: none;
}
/* if checkbox is checked, then do these things */
input[type="checkbox"]:checked + label {
color: white;
background:#FFD86E;
border-radius: 5px;
padding: 0px 10px 0px 10px;
}
/* styles when hovering over options */
label:hover {
cursor: pointer;
/* transitions and animations */
-webkit-transition: color .5s ease;
-moz-transition: color .5s ease;
-ms-transition: color .5s ease;
-o-transition: color .5s ease;
transition: color .5s ease;
}
.boutton-step{
padding:10px;
text-decoration:none;
width:230px;
font-size: 12px;
font-family: 'PT Sans', sans-serif;
letter-spacing:2px;
}
input.button {
width:130px;
height:50px;
margin: 20px 0 30px 0;
padding: 0px 20px 0px 20px;
background: #e6e6e6;
border-radius:5px;
border: 1px solid #ccc;
font-family: OpenSans, sans-serif;
font-size:16pt;
color:#444;
}
.Addons label{
font-size:12px !important;
font-family: 'roboto';
font-weight: 500;
border: 1px solid #80808024;
margin: 2px;
padding: 0px 5px 0px 5px;
border-radius: 5px;
}
.multistep-container .active-button li:not(:first-child) .round-btn:before {
position: absolute;
content: '';
width: 141px;
height: 3px;
background-color: #E9F2FA;
left: -120px;
}
.multistep-container .active-button li {
display: inline-block;
width: 140px;
}
.form-check {
line-height: 22px;
}
.col-md-12.col-lg-12.col-sm-12.d-flex.justify-content-end.align-items-end.mb-3{
flex: 0 0 86%;
}
p.badge.badge-light {
background-color: black;
}
li.etape1:before {
background: #7ED670 !important; /* Change the background color */
color: white !important;
}
.titre-page{
margin-top:10px;
font-size: 20px;
line-height:45.29px;
color: #000000;
}
.radio-buttons {
display: flex;
}
.radio-buttons input[type="radio"] {
display: none;
}
.radio-buttons label {
display: block;
margin-right: 40px;
cursor: pointer;
}
.radio-buttons label img {
border-radius: 10px;
width: 100px;
height: 110px;
box-shadow: rgba(17, 17, 26, 0.05) 0px 1px 0px, rgba(17, 17, 26, 0.1) 0px 0px 8px;
}
.radio-buttons input[type="radio"]:checked + label img {
border: 2px solid #FFCB00 ; /* Style pour indiquer la sélection, vous pouvez personnaliser */
}
.form-select{
width: 100% !important;
}
.custom-radio {
padding-right: 20px; /* Ajoutez le padding ici */
}
</style>
{% endblock %}
{% block body %}
<img src="{{asset('themes/coworking/front/images/sallereunion.jpg')}}" style="width: 100%;height: 520px;" class="img-fluid" />
<div class="container">
<div class="row justify-content-between">
<div class="col-sm-8 reservation-steeps">
<div class="row">
<div class="col-sm-8">
<h6 class="titre-page">Réservation
</h6>
</div>
<div class="col-sm-4" style="margin-top:10px;">
<a href="/themes/coworking/front/images/prixSalles.pdf" class="btn-res text-center text-light text-uppercase bg-dark" style="float: right;padding: 8px;border-radius: 6px;font-size:13px;" target="_blank"> NOS TARIFS</a>
</div>
</div>
<div class="container">
<div class="container d-flex justify-content-center align-items-center">
<ul id="progressbar">
<li class="etape1"> <span> Type</span> </li>
<li class="active" > Formule + extra </li>
<li> Dates</li>
<li> Confirmation</li>
</ul>
</div>
<div class="col-xl-12" style="top: 20px;">
<div class="multistep-container">
<div class="mutistep-form-area">
<div class="form-box">
<div class="container" >
<div id="form-attribue" style="line-height: 20px;" class="mt-4">
<div class="form-check">
<input class="form-check-input" type="radio" name="choix" id="repas_demande" value="repas">
<label class="form-check-label" for="repas_demande">
<h5 style="font-weight:bold; margin-top: 2px;" >Voulez-vous choisir un extra ?</h5>
</label>
</div>
<div class="container">
<div class="row">
<div class="col-md-4">
<div class="card">
{% for break in breakfast %}
{%if break.photo is not empty %}
<img style="widh:100%" src="{{asset('/uploads/coworking/' ~ break.photo )}}" class="card-img-top" alt="Breakfast Image">
{% endif %}
{% endfor %}
<div >
<ul class="list-group">
{% for break in breakfast %}
<li class="list-group-item" data-placement="top" data-toggle="tooltip" title="<b>{{ break.type }}</b><br>{{ break.description|raw|nl2br }}"> {{ break.name }}</li>
{% endfor %}
</ul>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card">
{% for lun in lunch %}
{%if lun.photo is not empty %}
<img style="widh:100%" src="{{asset('/uploads/coworking/' ~ lun.photo )}}" class="card-img-top" alt="Lunch Image">
{% endif %}
{% endfor %}
<ul class="list-group">
{% for lun in lunch %}
<li class="list-group-item" data-placement="top" data-toggle="tooltip" title="<b>{{ lun.type }}</b><br> {{lun.description|raw|nl2br}}">{{ lun.name }}</li>
{% endfor %}
</ul>
</div>
</div>
<div class="col-md-4">
<div class="card">
{% for after in afternoonBreak %}
{%if after.photo is not empty %}
<img style="widh:100%" src="{{asset('/uploads/coworking/' ~ after.photo )}}" class="card-img-top" alt="Lunch Image">
{% endif %}
{% endfor %}
<ul class="list-group">
{% for after in afternoonBreak %}
<li class="list-group-item" data-placement="top" data-toggle="tooltip" title="<b>{{ after.type }}</b> <br> {{ after.description|raw|nl2br }}">{{ after.name }}</li>
{% endfor %}
</ul>
</div>
</div>
</div>
</div>
<div class="form-group" style="margin-top: 10px;">
<div id="repas" style="padding: 0 20px !important;">
<div class="row">
<div class="col-md-6">
<div class="form-group">
<label for="select_repas_matin">Pause matin</label>
<select class="form-select" id="select_repas_matin" name="select_repas_matin" disabled>
<option value="">Choisissez un repas pour le matin</option>
{% for break in breakfast %}
<option data-id="{{break.id}}" value="{{break.price}}">{{break.name}} ({{break.price}} DH)</option>
{% endfor %}
</select>
</div>
</div>
<div class="col-md-6">
<div class="form-group" id="quantity_input" style="display: none;">
<label for="quantity"><small>Quantité </small></label>
<input type="number" class="form-control" id="quantity" name="quantity" min="0" style="width: 50px;">
</div>
<div id="total_price" style="display: none;">
<span class="badge badge-light">Total : <span id="total_amount" class="total-amount"></span> DH</span>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="form-group">
<label for="select_repas_dejeuner"> Déjeuner </label>
<select class="form-select" id="select_repas_dejeuner" name="select_repas_dejeuner" disabled>
<option value="">Choisissez un repas pour le déjeuner </option>
{% for lun in lunch %}
<option data-id="{{lun.id}}" value="{{lun.price}}">{{lun.name}} ({{lun.price}} DH)</option>
{% endfor %}
</select>
</div>
</div>
<div class="col-md-6">
<div class="form-group" id="quantity_dejeune" style="display: none;" >
<label for="quantity"><small>Quantité </small></label>
<input type="number" class="form-control" id="quantity_input_dejeuner" name="quantity_input_dejeuner" min="0" style="width: 50px;">
</div>
<div id="total_price_dejeune" style="display: none;">
<span class="badge badge-light">Total : <span id="total_amount_dejeune" class="total-amount"></span> DH</span>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="form-group">
<label for="select_repas_apres_midi"> Pause après-midi </label>
<select class="form-select" id="select_repas_apres_midi" name="select_repas_apres_midi" disabled>
<option value="">Choisissez un repas pour la pause après-midi </option>
{% for after in afternoonBreak %}
<option data-id="{{after.id}}" value="{{after.price}}">{{after.name}} ({{after.price}} DH)</option>
{% endfor %}
</select>
</div>
</div>
<div class="col-md-6">
<div class="form-group" id="quantity_input_apres" style="display: none;" >
<label for="quantity"><small>Quantité</small></label>
<input type="number" class="form-control" id="quantity_apres" name="quantity_apres" min="0" style="width: 50px;">
</div>
<div id="total_price_apres" style="display: none;">
<span class="badge badge-light">Total : <span id="total_amount_apres" class="total-amount"></span> DH</span>
</div>
</div>
<div class="col-md-6">
</div>
<div id="total_sum_section" class="col-md-6">
<p class="badge badge-light">Total : <span id="total_sum"></span> DH</p>
</div>
</div>
</div>
<div class="form-check mt-4">
<input class="form-check-input" type="radio" name="choix" value="demande">
<label class="form-check-label" for="repas_demande">
<h5 style="font-weight:bold; " >Non merci </h5>
</label>
</div>
</div>
</form>
</div>
</div>
<div class="button-row">
<form action="{{path('reservationstep2',{id:id})}}" id="myForm" method="GET" data-turbo="false">
<input type="hidden" name="days" id="formule_" value="{{ days }}"/>
<input type="hidden" name="Plage" id="horaire_" value="{{ Plage }}"/>
<input type="hidden" name="amount_extra" id="amount_extra" value=""/>
<input type="hidden" name="id_extra" id="id_extra" value=""/>
<input type="hidden" name="time" id="time_" value="{{ time }}"/>
<input type="hidden" name="device" id="device_" value="{{ device }}"/>
<input type="hidden" name="nbrApproximatif" id="nbrApproximatif" value="{{ nbrApproximatif }}"/>
<a href="javascript:void(0)" onclick="history.back()" style="border:1px solid #FFCB00 !important; color:black !important;background: #ffff !important;" class="btn-res text-center text-light text-uppercase bg-dark ReserveNext__ boutton-step" >Étape précédente</a>
<button type="submit" class="btn-res text-center text-light text-uppercase bg-dark ReserveNext__" style="background: #FFCB00 !important;padding:5px; border: none; text-decoration:none; width:177px; font-size:12px; font-family:'PT Sans', sans-serif; letter-spacing:2px;">
Étape suivante
</button>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-sm-4 reservation-steeps-panier" style="overflow-y: auto;">
{{render(path("ajax_cart"))}}
</div>
</div>
</div>
{% endblock %}
{% block javascripts %}
<!-- MAIN CONTENT -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
<script>
$(document).ready(function(){
$('#myForm').on('submit', function(event) {
if (!$('input[name="choix"]:checked').length) {
alert('Veuillez sélectionner une option.');
event.preventDefault();
}
});
$('[data-toggle="tooltip"]').tooltip({
placement: 'top', // Position de l'info-bulle
trigger: 'hover', // Déclencheur de l'info-bulle
delay: { "show": 500, "hide": 100 }, // Délai d'affichage et de masquage en millisecondes
html: true, // Autoriser le contenu HTML dans l'info-bulle
template: '<div class="tooltip custom-tooltip" role="tooltip"><div class="arrow"></div><div class="tooltip-inner"></div></div>' // Utilisation d'un modèle personnalisé pour l'info-bulle
});
$('body').on("click",".delete-cart-item",function() {
var idProduct = $(this).attr("data-id");
var price = $(this).attr("data-price");
var name = $(this).attr("data-name");
var actionType = "remove";
$.ajax({
url:"{{path('ajax_cart')}}",
data:{
idProduct:idProduct,
price:price,
name:name,
actionType:actionType
},
success:function(result){
console.log(result);
$(".reservation-steeps-panier").html(result);
}
});
});
// Fonction de mise à jour du prix total pour le repas du matin
$('#select_repas_matin, #quantity').change(function() {
if ($(this).val() === "0") {
$('#select_repas_matin').val("");
}
updateTotalPrice('#select_repas_matin', '#quantity', '#total_amount', '#total_price');
calculateTotalSum();
updateIdExtra(); // Mettre à jour l'ID extra
});
// Fonction de mise à jour du prix total pour le repas du déjeuner
$('#select_repas_dejeuner, #quantity_input_dejeuner').change(function() {
if ($(this).val() === "0") {
$('#select_repas_dejeuner').val(""); // Réinitialiser la sélection si la quantité est 0
}
updateTotalPrice('#select_repas_dejeuner', '#quantity_input_dejeuner', '#total_amount_dejeune', '#total_price_dejeune');
calculateTotalSum();
updateIdExtra(); // Mettre à jour l'ID extra
});
// Fonction de mise à jour du prix total pour la pause de l'après-midi
$('#select_repas_apres_midi, #quantity_apres').change(function() {
updateTotalPrice('#select_repas_apres_midi', '#quantity_apres', '#total_amount_apres', '#total_price_apres');
calculateTotalSum();
updateIdExtra(); // Mettre à jour l'ID extra
});
function updateIdExtra() {
var selectedIds = [];
$('#select_repas_dejeuner, #select_repas_matin , #select_repas_apres_midi').each(function() {
var selectedOption = $(this).find(':selected');
if (selectedOption.length > 0) {
var dataId = selectedOption.data('id');
selectedIds.push(dataId);
}
});
$('#id_extra').val(selectedIds.join(',')); // Mettre à jour la valeur de l'input caché avec les data-ids séparés par une virgule
}
// Fonction de mise à jour du prix total
function updateTotalPrice(selectElement, quantityElement, totalAmountElement, totalPriceElement) {
var selectedOptionValue = parseInt($(selectElement).val());
var quantity = parseInt($(quantityElement).val());
if (!isNaN(selectedOptionValue) && !isNaN(quantity)) {
var totalPrice = selectedOptionValue * quantity;
$(totalAmountElement).text(totalPrice);
$(totalPriceElement).show();
} else {
$(totalPriceElement).hide();
}
}
// Fonction de calcul de la somme totale
function calculateTotalSum() {
var totalSum = 0;
$('.total-amount').each(function() {
var amount = parseInt($(this).text());
if (!isNaN(amount)) {
totalSum += amount;
}
});
$('#total_sum').text(totalSum);
$('#amount_extra').val(totalSum);
}
// Écouter le changement de la sélection pour le repas du matin
$('#repas_demande').change(function() {
if ($(this).is(':checked')) {
$('#quantity_input').show();
$('#select_repas_matin').prop('disabled', false);
} else {
$('#quantity_input').hide();
$('#select_repas_matin').prop('disabled', true);
$('#total_price').hide();
}
});
// Écouter le changement de la sélection pour le déjeuner
$('#repas_demande').change(function() {
if ($(this).is(':checked')) {
$('#quantity_dejeune').show();
$('#select_repas_dejeuner').prop('disabled', false);
} else {
$('#quantity_input_dejeuner').hide();
$('#select_repas_dejeuner').prop('disabled', true);
$('#total_price_dejeune').hide();
}
});
// Écouter le changement de la sélection pour l'après-midi
$('#repas_demande').change(function() {
if ($(this).is(':checked')) {
$('#quantity_input_apres').show();
$('#select_repas_apres_midi').prop('disabled', false);
} else {
$('#quantity_input_apres').hide();
$('#select_repas_apres_midi').prop('disabled', true);
$('#total_price_apres').hide();
}
});
$('input[name="choix"]').change(function(){
if($(this).val() == "demande"){
$('#select_repas_apres_midi').prop('selectedIndex', 0);
$('#select_repas_dejeuner').prop('selectedIndex', 0);
$('#select_repas_matin').prop('selectedIndex', 0);
$('#quantity').val(0);
$('#quantity_input_dejeuner').val(0);
$("#quantity_apres").val(0);
$("#total_amount").text(0);
$("#total_amount_dejeune").text(0);
$("#total_amount_apres").text(0);
$("#total_sum").text(0);
$("#amount_extra").val(0);
$("#select_repas_matin").prop('disabled', true);
$("#select_repas_dejeuner").prop('disabled', true);
$("#select_repas_apres_midi").prop('disabled', true);
}else if($(this).val() == "non"){
$('#select_repas_apres_midi').prop('selectedIndex', 0);
$('#select_repas_dejeuner').prop('selectedIndex', 0);
$('#select_repas_matin').prop('selectedIndex', 0);
$('#quantity').val(0);
$('#quantity_input_dejeuner').val(0);
$("#quantity_apres").val(0);
$("#total_amount").text(0);
$("#total_amount_dejeune").text(0);
$("#total_amount_apres").text(0);
$("#total_sum").text(0);
$("#amount_extra").val(0);
$("#select_repas_matin").prop('disabled', true);
$("#select_repas_dejeuner").prop('disabled', true);
$("#select_repas_apres_midi").prop('disabled', true);
}else if($(this).val() == "repas"){
$("#select_repas_matin").prop('disabled', false);
$("#select_repas_dejeuner").prop('disabled', false);
$("#select_repas_apres_midi").prop('disabled', false);
}
});
/*$('input[name="repas"]').change(function(){
if($(this).val() === 'pause_matin') {
// $("#select_repas_matin").val($('option:nth-child(1)').prop('selected', true));
$("#select_repas_matin").prop('disabled', false);
$("#select_repas_dejeuner").prop('disabled', true);
$("#select_repas_apres_midi").prop('disabled', true);
} else if($(this).val() == 'dejeuner') {
// $("#select_repas_dejeuner").val($('option:nth-child(1)').prop('selected', true));
$("#select_repas_dejeuner").prop('disabled', false);
$("#select_repas_matin").prop('disabled', true);
$("#select_repas_apres_midi").prop('disabled', true);
} else if($(this).val() == 'pause_apres_midi') {
// $("#select_repas_apres_midi").val($('option:nth-child(1)').prop('selected', true));
$("#select_repas_apres_midi").prop('disabled', false);
$("#select_repas_dejeuner").prop('disabled', true);
$("#select_repas_matin").prop('disabled', true);
}
});*/
function updateSession() {
let meals = {
breakfast: {
name: $("#select_repas_matin option:selected").text(),
price: $("#select_repas_matin").val(),
quantity: $("#quantity").val() || 0
},
lunch: {
name: $("#select_repas_dejeuner option:selected").text(),
price: $("#select_repas_dejeuner").val(),
quantity: $("#quantity_input_dejeuner").val() || 0
},
afternoonBreak: {
name: $("#select_repas_apres_midi option:selected").text(),
price: $("#select_repas_apres_midi").val(),
quantity: $("#quantity_apres").val() || 0
}
};
// Envoi des données à Symfony via AJAX
$.ajax({
url: "{{path('save_meals_session')}}",
type: "POST",
contentType: "application/json",
data: JSON.stringify(meals),
success: function (response) {
console.log("Session updated", response);
},
error: function (xhr, status, error) {
console.error("Error:", error);
}
});
}
// Écoute des changements sur les sélections de repas
$("#select_repas_matin, #quantity, #select_repas_dejeuner, #quantity_input_dejeuner, #select_repas_apres_midi, #quantity_apres").on("change", updateSession);
});
</script>
{% endblock %}