{% extends 'base.html.twig' %}
{% block title %}Consultations Tarots Téléphone, Visio, Email, Domicile | Les Ailes Dorées{% endblock %}
{% block metas %}
<meta name="title" content="Consultations Tarots Téléphone, Visio, Email, Domicile | Les Ailes Dorées">
<meta name="description" content="Je vous propose trois types de consultations de tarots selon vos besoins et votre budget : consulation rapide de 1 heure, consultation 1 question de 30 minutes, et une consultation complète de 3 heures. A mon domicile ou au votre dans l'Allier, ou par téléphone, e-mail, fichier audio, visio conférence.">
{% endblock %}
{% block stylesheets %}
{{ parent() }}
{{ encore_entry_link_tags('prestation_page') }}
{% endblock %}
{% block body %}
{% include '/partials/header.html.twig' with {'current_page':'prestations'} %}
<!-- Main Content -->
<main class="main-content app_prestation">
<div class="tm-section contact-area tm-padding-section">
<div class="container position-relative">
<div class="row">
<div class="col-lg-12">
<h2 class="text-yellow text-uppercase">Prestations</h2>
<form action="{{path('app_appointment')}}" method="GET">
<div class="accordion" id="prestationAccordion">
{% for cat in categories %}
{% if cat.valid %}
<div class="accordion-item">
<h2 class="accordion-header" id="heading{{cat.id}}">
<button class="accordion-button my-categorie" type="button" data-bs-toggle="collapse" data-bs-target="#{{cat.slug}}" aria-expanded="false" aria-controls="{{cat.slug}}">
{{cat.nom}}
</button>
</h2>
<div id="{{cat.slug}}" class="accordion-collapse collapse" aria-labelledby="heading{{cat.id}}" data-bs-parent="#prestationAccordion">
<div class="accordion-body">
<a href="{{ path('app_prestations_category_details', {'id': cat.id}) }}"
class="tm-button tm-button-yellow text-yellow">En savoir plus</a>
<!-- PRESTATION ITEM DETAILS -->
<div class="accordion" id="prestationDetails{{cat.id}}Accordion">
{% for prest in cat.prestations|sort((a, b) => a.ordre <=> b.ordre) %} {% if prest.valid %}
<div class="accordion-item accordion-item--sub">
<h2 class="accordion-header" id="prestationDetailsHeading{{prest.id}}">
<button class="accordion-button my-prestation py-2" type="button" data-bs-toggle="collapse" data-bs-target="#prestationDetailsCollapse{{prest.id}}" aria-expanded="{% if loop.index0 == 0 %}true{% else %}false{% endif %}" aria-controls="prestationDetailsCollapse{{prest.id}}" data-prestation-id={{prest.id}}>
<div class="d-block">
<span>{{prest.nom}} </span>
<div>({{prest.prix | number_format(2, ',', ' ') }} €)</div>
</div>
</button>
</h2>
<div id="prestationDetailsCollapse{{prest.id}}" class="accordion-collapse collapse {% if loop.index0 == 0 %}show{% endif %}" aria-labelledby="prestationDetailsHeading{{prest.id}}" data-bs-parent="#prestationDetails{{cat.id}}Accordion">
<div class="accordion-body">
<div class="row">
<div class="col-lg-5">
{# <p>Une question, un domaine de vie, un bilan : un jeu complet et précis C'est la consultation la plus c...</p> #}
{% for type in prest.types %}
{% if type.statut == 1 %}
<div class="form-check">
<input class="form-check-input" type="radio" name="typeConsultation{{prest.id}}" id="typeConsultation{{type.id}}" {% if loop.index0 == 0 %}checked {% endif %} value="{{type.typeConsultation.id}}">
<label class="form-check-label" for="typeConsultation{{type.id}}">
{{type.typeConsultation.nom}} {% if type.typeConsultation.description %} ({{type.typeConsultation.description}}) {% endif %}
</label>
</div>
{% endif %}
{% endfor %}
</div>
<div class="col-lg-7">
<ul class="list-group">
{% for opt in prest.options %} {% if opt.valid %}
<li class="list-group-item">
<div>
<span>{{opt.nom}}</span>
<div>{% if (opt.prix and opt.prix > 0) %}{{opt.prix | number_format(2, ',', ' ') }} € {% endif %}</div>
</div>
<div>
<div class="form-check">
<input class="form-check-input my-option prestationDetailsCollapse{{prest.id}}" name="prestationDetailsCollapseFlexCheckDefault{{prest.id}}" type="checkbox" id="prestationDetailsCollapseFlexCheckDefault{{opt.id}}" value="{{opt.id}}" {% if opt.defaut %}checked{% endif %} {% if prest.nbMax and prest.nbMax > 0 %} onchange="checkMax({{prest.nbMax}}, 'prestationDetailsCollapse{{prest.id}}')" {% endif %}>
<label class="form-check-label" for="prestationDetailsCollapseFlexCheckDefault{{opt.id}}">
</label>
</div>
</div>
{% if opt.avecChoix %}
<div class="d-flex align-items-center flex-wrap atelier-wrapper" id="atelier-wrapper-{{opt.id}}">
{% for i in opt.debutChoix..(opt.debutChoix + opt.nbrChoix - 1) %}
<button type="button" data-numero="{{i}}" class="option-atelier tm-button tm-button-yellow mt-30 {% if i == opt.debutChoix %}active{% endif %}" style="margin-right: 8px;">Atelier {{i}}</button>
{% endfor %}
</div>
{% endif %}
</li>
{% endif %} {% endfor %}
</ul>
</div>
</div>
</div>
</div>
</div>
{% endif %} {% endfor %}
</div>
<!-- PRESTATION ITEM DETAILS -->
</div>
</div>
</div>
{% endif %}
{% endfor %}
</div>
<div class="d-flex align-items-center justify-content-center py-4">
<button type="submit" id="take-appointment-btn" class="tm-button tm-button-yellow active button--loading d-flex align-items-center">
<span>Prendre un rendez-vous</span>
<div class="spinner-border ms-2 my-spinner d-none" role="status">
<span class="sr-only">Chargement...</span>
</div>
</button>
</div>
</form>
</div>
</div>
</div>
</main>
<!--// Main Content -->
{% endblock %}
{% block javascripts %}
{{ parent() }}
<script>
function expandPrestation(){
if (location.hash !== null && location.hash !== "") {
let sectionToExpand = location.hash;
const section = document.querySelector(sectionToExpand);
console.log(section);
if (section) {
const collapse = new bootstrap.Collapse(section, { parent: '#prestationAccordion' });
collapse.show();
section.scrollIntoView({ behavior: "smooth", block: 'center' });
}
}
}
expandPrestation();
window.addEventListener('hashchange', () => {
expandPrestation();
}, false);
var classLoad = '.my-spinner';
function load(btn, is = true){
if(is){
$(btn).find(classLoad).removeClass('d-none');
} else{
$(btn).find(classLoad).addClass('d-none');
}
$(btn).attr('disabled', is);
}
$(document).ready(function () {
const error = () => {
alert('Choisissez une prestation');
}
$('#take-appointment-btn').click(function (e){
e.preventDefault();
let ariaControlsCat = $('.my-categorie[aria-expanded="true"]').attr('aria-controls');
if(!ariaControlsCat){
return error();
}
let prestationId = $(`#${ariaControlsCat} .my-prestation[aria-expanded="true"]`).data('prestationId');
if(!prestationId){
return error();
}
let typeConsultationId = $(`input[name="typeConsultation${prestationId}"]:checked`).val();
if(!typeConsultationId){
alert('Choisissez la type de consultation');
}
let options = [];
$(`#prestationDetailsCollapse${prestationId} input.my-option:checked`).each(function (){
const opt = {id: $(this).val()};
const numero = $('#atelier-wrapper-'+opt.id+' .option-atelier.active').data('numero');
opt.numero = numero ?? null;
options.push(opt);
});
console.log('prestationId', prestationId);
console.log('typeConsultationId', typeConsultationId);
console.log('options', options);
let params = {prestationId, typeConsultationId, options};
let request = $.ajax({
url: "{{path('app_take_appointment')}}",
type: 'POST',
data : JSON.stringify(params),
contentType: 'application/json; charset=utf-8',
dataType: "json"
});
let btn = $(this);
request.done(function(data) {
load(btn, false);
console.log(data);
let pathname = "{{path('app_take_appointment_step_1', {id: 'reservationId'})}}";
window.location.pathname = pathname.replace('reservationId', data.reservationId);
});
request.fail(function(jqXHR, textStatus) {
load(btn, false);
let data = jqXHR.responseJSON;
alert('Erreur: '+data.message);
});
load(btn);
});
const optionsDOM = $('.my-option');
const blockAvecChoixDOM = $('#block-avec-choix');
function openChoix(target = null){
target = target ?? optionsDOM;
$(target).each(function (){
const block = $('#atelier-wrapper-'+$(this).val());
/*if($(this).is(':checked')){
$(block).removeClass('d-none');
} else{
$(block).addClass('d-none');
}*/
})
}
$(optionsDOM).change(function (e){
openChoix(e.target);
});
$('.option-atelier').click(function (){
$(this).siblings().removeClass('active');
$(this).addClass('active');
});
openChoix();
});
function checkMax(max, className){
if(max && max > 0){
let casesCochees = document.querySelectorAll('.'+className);
let nombreCasesCochees = 0;
// Parcourez les cases à cocher et comptez celles qui sont cochées
for (let i = 0; i < casesCochees.length; i++) {
if (casesCochees[i].checked) {
nombreCasesCochees++;
if(nombreCasesCochees > max) {
casesCochees [i].checked = false;
alert("Vous ne pouvez pas choisir plus de " + max + " option(s).");
break;
}
}
}
}
}
</script>
{% endblock %}