```
✨ feat(Contrats): Ajoute la gestion de l'état de la caution (restituée/encaissée).
```
This commit is contained in:
@@ -32,16 +32,16 @@ const initSentry = async () => {
|
||||
const initLoader = () => {
|
||||
if (document.getElementById('turbo-loader')) return;
|
||||
|
||||
const loaderEl = document.createElement('div');
|
||||
loaderEl.id = 'turbo-loader';
|
||||
loaderEl.className = 'fixed inset-0 z-[9999] flex items-center justify-center bg-white transition-opacity duration-300 opacity-0 pointer-events-none';
|
||||
loaderEl.innerHTML = `
|
||||
<div class="relative flex items-center justify-center">
|
||||
<div class="absolute w-24 h-24 border-4 border-blue-600 border-t-transparent rounded-full animate-spin"></div>
|
||||
<img src="/provider/images/favicon.webp" class="w-12 h-12 relative z-10 animate-pulse" alt="Logo">
|
||||
</div>
|
||||
`;
|
||||
document.body.appendChild(loaderEl);
|
||||
const loaderEl = document.createElement('div');
|
||||
loaderEl.id = 'turbo-loader';
|
||||
loaderEl.className = 'fixed inset-0 z-[9999] flex items-center justify-center bg-white transition-opacity duration-300 opacity-100 pointer-events-none';
|
||||
loaderEl.innerHTML = `
|
||||
<div class="relative flex items-center justify-center">
|
||||
<div class="absolute w-24 h-24 border-4 border-[#f39e36] border-t-transparent rounded-full animate-spin"></div>
|
||||
<img src="/provider/images/favicon.webp" class="w-12 h-12 relative z-10 animate-pulse" alt="Logo">
|
||||
</div>
|
||||
`;
|
||||
document.body.appendChild(loaderEl);
|
||||
|
||||
document.addEventListener("turbo:click", () => {
|
||||
loaderEl.classList.replace('opacity-0', 'opacity-100');
|
||||
|
||||
147148
public/provider/Catalogue.pdf
Normal file
147148
public/provider/Catalogue.pdf
Normal file
File diff suppressed because one or more lines are too long
@@ -448,8 +448,7 @@ class Client
|
||||
]],
|
||||
'mode' => 'payment',
|
||||
'payment_intent_data' => [
|
||||
// IMPORTANT : 'manual' permet de bloquer les fonds sans les encaisser
|
||||
'capture_method' => 'manual',
|
||||
'setup_future_usage' => 'off_session',
|
||||
'metadata' => [
|
||||
'contrat_id' => $contrat->getId(),
|
||||
'type' => 'caution'
|
||||
|
||||
@@ -98,9 +98,9 @@
|
||||
height="48"
|
||||
class="w-12 h-12 relative z-10 animate-pulse"
|
||||
alt="Ludikevent">
|
||||
<span class="text-2xl font-black tracking-tighter text-blue-600 uppercase">
|
||||
<span class="text-2xl font-black tracking-tighter uppercase text-[#f39e36]">
|
||||
{# Correction contraste : amber-500 -> amber-700 pour lisibilité sur blanc #}
|
||||
Ludik<span class="text-amber-700">event</span>
|
||||
Ludik Event</span>
|
||||
</span>
|
||||
</a>
|
||||
</div>
|
||||
@@ -108,7 +108,8 @@
|
||||
{# Menu Desktop #}
|
||||
<div class="hidden md:flex items-center space-x-8">
|
||||
<a href="{{ path('reservation') }}" class="text-gray-700 hover:text-blue-600 font-medium transition-colors">Accueil</a>
|
||||
<a href="{{ path('reservation_catalogue') }}" class="text-gray-700 hover:text-blue-600 font-medium transition-colors">Catalogue</a>
|
||||
<a href="{{ path('reservation_catalogue') }}" class="text-gray-700 hover:text-blue-600 font-medium transition-colors">Nos structures </a>
|
||||
<a target="_blank" href="/provider/Catalogue.pdf" class="text-gray-700 hover:text-blue-600 font-medium transition-colors">Catalogue</a>
|
||||
<a href="{{ path('reservation_contact') }}" class="text-gray-700 hover:text-blue-600 font-medium transition-colors">Contact</a>
|
||||
|
||||
<a href="{{ path('reservation_search') }}" class="p-2 text-gray-600 hover:text-blue-600 transition-colors" aria-label="Rechercher une structure">
|
||||
@@ -125,7 +126,7 @@
|
||||
</a>
|
||||
{% endif %}
|
||||
|
||||
<a href="{{ path('gestion_contrat') }}" class="flex items-center gap-2 text-blue-700 font-bold hover:opacity-70 transition-opacity">
|
||||
<a href="{{ path('gestion_contrat') }}" class="text-[#f39e36] flex items-center gap-2 font-bold hover:opacity-70 transition-opacity">
|
||||
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z"/></svg>
|
||||
Mon Espace
|
||||
</a>
|
||||
@@ -135,13 +136,13 @@
|
||||
</a>
|
||||
</div>
|
||||
{% else %}
|
||||
<a href="{{ path('reservation_login') }}" class="text-gray-700 hover:text-blue-600 font-bold transition-colors flex items-center gap-2">
|
||||
<a href="{{ path('reservation_login') }}" class="text-[#f39e36] font-bold transition-colors flex items-center gap-2">
|
||||
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M11 16l-4-4m0 0l4-4m-4 4h14m-5 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1"/></svg>
|
||||
Connexion
|
||||
</a>
|
||||
{% endif %}
|
||||
|
||||
<a href="tel:0614172447" class="inline-flex items-center px-6 py-3 border border-transparent text-sm font-bold rounded-full text-white bg-blue-600 hover:bg-blue-700 shadow-lg shadow-blue-200 transition-all hover:-translate-y-0.5">
|
||||
<a href="tel:0614172447" class="inline-flex items-center px-6 py-3 border border-transparent text-sm font-bold rounded-full text-white bg-[#f39e36] shadow-lg shadow-blue-200 transition-all hover:-translate-y-0.5">
|
||||
06 14 17 24 47
|
||||
</a>
|
||||
</div>
|
||||
@@ -210,7 +211,7 @@
|
||||
|
||||
<div class="text-center md:text-left">
|
||||
<p class="text-sm text-gray-700">
|
||||
© {{ "now"|date("Y") }} <span class="font-bold text-blue-700">Ludikevent</span>.
|
||||
© {{ "now"|date("Y") }} <span class="font-bold text-[#f39e36]">Ludikevent</span>.
|
||||
Tous droits réservés.
|
||||
</p>
|
||||
{# Correction contraste : gray-400 -> gray-600 #}
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
</nav>
|
||||
|
||||
<h1 class="text-5xl md:text-7xl font-black text-slate-900 uppercase tracking-tighter italic leading-none mb-6">
|
||||
Tout notre <span class="text-blue-600">Univers</span>
|
||||
Tout notre <span class="text-[#f39e36]">Univers</span>
|
||||
</h1>
|
||||
</div>
|
||||
|
||||
@@ -100,13 +100,13 @@
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<h3 class="text-2xl font-black text-slate-900 uppercase tracking-tighter leading-[0.95] group-hover:text-blue-600 transition-colors line-clamp-2">
|
||||
<h3 class="text-2xl font-black text-slate-900 uppercase tracking-tighter leading-[0.95] group-hover:text-[#f39e36] transition-colors line-clamp-2">
|
||||
{{ product.name }}
|
||||
</h3>
|
||||
|
||||
{# LIEN #}
|
||||
{# Correction : text-slate-400 -> text-slate-600 #}
|
||||
<div class="mt-5 flex items-center gap-2 text-[11px] font-black uppercase tracking-[0.15em] text-slate-600 group-hover:text-blue-600 transition-colors">
|
||||
<div class="mt-5 flex items-center gap-2 text-[11px] font-black uppercase tracking-[0.15em] text-slate-600 group-hover:text-[#f39e36] transition-colors">
|
||||
<span>Découvrir le produit</span>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4 transform group-hover:translate-x-2 transition-transform" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="M17 8l4 4m0 0l-4 4m4-4H3" />
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
<div class="flex flex-col md:flex-row items-end justify-between gap-6 border-b border-slate-200 pb-8">
|
||||
<div>
|
||||
<h1 class="text-5xl md:text-7xl font-black text-slate-900 uppercase tracking-tighter italic leading-none">
|
||||
Parlons <span class="text-blue-600">Ensemble</span>
|
||||
Parlons <span class="text-[#f39e36]">Ensemble</span>
|
||||
</h1>
|
||||
{# Correction : text-slate-500 -> text-slate-600 #}
|
||||
<p class="mt-4 text-slate-600 font-medium italic">Une question ? Un devis ? Notre équipe d'experts vous répond.</p>
|
||||
@@ -46,7 +46,7 @@
|
||||
|
||||
{# 1. FORMULAIRE (Bento Large) #}
|
||||
<div class="md:col-span-8 bg-white p-8 md:p-12 rounded-[3rem] shadow-sm border border-slate-100">
|
||||
<h2 class="text-2xl font-black text-slate-900 uppercase italic mb-8 tracking-tight">Envoyer un <span class="text-blue-600">Message</span></h2>
|
||||
<h2 class="text-2xl font-black text-slate-900 uppercase italic mb-8 tracking-tight">Envoyer un <span class="text-[#f39e36]">Message</span></h2>
|
||||
|
||||
{{ form_start(form, {'attr': {'class': 'space-y-6'}}) }}
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
|
||||
@@ -81,7 +81,7 @@
|
||||
{{ form_widget(form.message, {'attr': {'class': 'w-full bg-slate-50 border-none rounded-3xl px-6 py-4 focus:ring-2 focus:ring-blue-500 transition-all font-medium h-40', 'placeholder': 'Dites-nous tout sur votre événement...'}}) }}
|
||||
</div>
|
||||
|
||||
<button type="submit" class="w-full md:w-auto px-12 py-5 bg-blue-600 text-white rounded-2xl font-black uppercase tracking-widest hover:bg-slate-900 hover:-translate-y-1 transition-all shadow-xl shadow-blue-100">
|
||||
<button type="submit" class="w-full md:w-auto px-6 py-4 bg-[#f39e36] text-white rounded-2xl font-black uppercase tracking-widest hover:bg-slate-900 hover:-translate-y-1 transition-all shadow-xl shadow-blue-100">
|
||||
Envoyer ma demande ⚡
|
||||
</button>
|
||||
{{ form_end(form) }}
|
||||
@@ -91,7 +91,7 @@
|
||||
<div class="md:col-span-4 space-y-6">
|
||||
|
||||
{# Tuile Téléphone #}
|
||||
<div class="bg-blue-600 p-8 rounded-[2.5rem] shadow-xl text-white relative overflow-hidden group">
|
||||
<div class="bg-[#f39e36] p-8 rounded-[2.5rem] shadow-xl text-white relative overflow-hidden group">
|
||||
<div class="absolute -right-4 -bottom-4 text-7xl opacity-10 group-hover:scale-110 transition-transform">📞</div>
|
||||
{# Correction : opacity-80 -> opacity-100 (pour contraste blanc sur bleu) #}
|
||||
<p class="text-[10px] font-black uppercase tracking-widest mb-4 opacity-100">Appel direct</p>
|
||||
|
||||
@@ -41,15 +41,15 @@
|
||||
<div class="lg:grid lg:grid-cols-12 lg:gap-8 items-center">
|
||||
<div class="sm:text-center md:max-w-2xl md:mx-auto lg:col-span-6 lg:text-left">
|
||||
<h1 class="text-5xl md:text-7xl font-black tracking-tight text-gray-900 leading-[1.1] uppercase italic">
|
||||
Louez le <span class="text-blue-600">Bonheur</span> <br>
|
||||
Louez le <span class="text-[#f39e36]">Bonheur</span> <br>
|
||||
{# Correction contraste : amber-500 -> amber-700 #}
|
||||
<span class="text-amber-700 underline decoration-blue-600/20">en un clic.</span>
|
||||
<span class="text-[#fc0e50] underline decoration-blue-600/20">en un clic.</span>
|
||||
</h1>
|
||||
<p class="mt-6 text-lg text-gray-700 leading-relaxed italic">
|
||||
Ludik Event simplifie vos événements. Des structures certifiées, une livraison rapide et des souvenirs inoubliables pour les petits et les grands.
|
||||
</p>
|
||||
<div class="mt-10 flex flex-col sm:flex-row gap-4 sm:justify-center lg:justify-start">
|
||||
<a href="{{ path('reservation_catalogue') }}" class="px-8 py-4 bg-blue-600 text-white rounded-2xl font-bold text-lg shadow-xl shadow-blue-200 hover:bg-blue-700 transition-all hover:-translate-y-1 text-center uppercase tracking-tighter">
|
||||
<a href="{{ path('reservation_catalogue') }}" class="px-8 py-4 bg-[#f39e36] text-white rounded-2xl font-bold text-lg shadow-xl shadow-blue-200 hover:bg-blue-700 transition-all hover:-translate-y-1 text-center uppercase tracking-tighter">
|
||||
Voir le catalogue
|
||||
</a>
|
||||
<a href="tel:0614172447" class="px-8 py-4 bg-white text-gray-800 border border-gray-200 rounded-2xl font-bold text-lg hover:bg-gray-50 transition-all text-center uppercase tracking-tighter">
|
||||
@@ -118,10 +118,10 @@
|
||||
<section id="catalogue" class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
||||
<div class="flex flex-col md:flex-row justify-between items-end mb-12 gap-4">
|
||||
<div>
|
||||
<h2 class="text-4xl font-black text-gray-900 uppercase italic tracking-tighter">Nos <span class="text-blue-600">Best-Sellers</span></h2>
|
||||
<h2 class="text-4xl font-black text-gray-900 uppercase italic tracking-tighter">Nos <span class="text-[#f39e36]">Best-Sellers</span></h2>
|
||||
<p class="text-gray-600 mt-2 italic">Sélectionnés pour le succès de vos fêtes.</p>
|
||||
</div>
|
||||
<a href="{{ path('reservation_contact') }}" class="group text-blue-700 font-bold flex items-center gap-2 uppercase text-xs tracking-[0.2em] bg-blue-50 px-6 py-3 rounded-full hover:bg-blue-600 hover:text-white transition-all">
|
||||
<a href="{{ path('reservation_contact') }}" class="group text-[#fc0e50] font-bold flex items-center gap-2 uppercase text-xs tracking-[0.2em] bg-orange-50 px-6 py-3 rounded-full over:text-white transition-all">
|
||||
Tout l'univers
|
||||
<svg class="w-4 h-4 transition-transform group-hover:translate-x-1" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="M14 5l7 7m0 0l-7 7m7-7H3"/>
|
||||
@@ -152,7 +152,7 @@
|
||||
{# Badge Prix flottant #}
|
||||
<div class="absolute top-5 left-5 bg-white/95 backdrop-blur-md px-4 py-2 rounded-2xl shadow-sm border border-white/50">
|
||||
<p class="text-[9px] font-black text-gray-600 uppercase tracking-widest mb-0.5">Location / Jour</p>
|
||||
<p class="text-blue-700 font-black text-sm uppercase leading-none">
|
||||
<p class="text-[#0782bc] font-black text-sm uppercase leading-none">
|
||||
Dès {{ product.priceDay|format_currency('EUR') }}
|
||||
</p>
|
||||
</div>
|
||||
@@ -161,16 +161,16 @@
|
||||
{# Infos Produit (Correction hiérarchie h3) #}
|
||||
<div class="mt-6 px-2 pb-2 flex-grow flex flex-col justify-between">
|
||||
<div>
|
||||
<span class="text-[10px] font-black text-blue-600 uppercase tracking-widest italic mb-1 block">
|
||||
<span class="text-[10px] font-black text-[#0782bc] uppercase tracking-widest italic mb-1 block">
|
||||
Réf: {{ product.ref }}
|
||||
</span>
|
||||
<h3 class="text-2xl font-black text-gray-900 group-hover:text-blue-700 transition-colors leading-tight italic uppercase">
|
||||
<h3 class="text-2xl font-black text-gray-900 group-hover:text-[#f39e36] transition-colors leading-tight italic uppercase">
|
||||
{{ product.name }}
|
||||
</h3>
|
||||
</div>
|
||||
|
||||
<div class="mt-8">
|
||||
<a href="{{ path('reservation_product_show',{id:product.slug}) }}" class="block w-full py-4 bg-gray-900 text-white text-center rounded-[1.5rem] font-black uppercase text-sm tracking-widest hover:bg-blue-600 transition-all shadow-xl hover:shadow-blue-200 active:scale-95">
|
||||
<a href="{{ path('reservation_product_show',{id:product.slug}) }}" class="block w-full py-2 bg-[#f39e36] text-white text-center rounded-[1.5rem] font-black uppercase text-sm tracking-widest hover:bg-blue-600 transition-all shadow-xl hover:shadow-blue-200 active:scale-95">
|
||||
Réserver ce bonheur
|
||||
</a>
|
||||
</div>
|
||||
|
||||
@@ -93,7 +93,7 @@
|
||||
{% endif %}
|
||||
|
||||
<div class="absolute top-8 left-8">
|
||||
<span class="bg-blue-600 text-white px-6 py-2 rounded-2xl text-[10px] font-black uppercase tracking-widest shadow-xl">
|
||||
<span class="bg-[#f39e36] text-white px-6 py-2 rounded-2xl text-[10px] font-black uppercase tracking-widest shadow-xl">
|
||||
{{ product.category }}
|
||||
</span>
|
||||
</div>
|
||||
@@ -113,7 +113,7 @@
|
||||
<div class="space-y-6">
|
||||
{# Prix principal #}
|
||||
<div class="flex items-baseline gap-4">
|
||||
<span class="text-6xl font-black text-blue-600 ">{{ product.priceDay }}€</span>
|
||||
<span class="text-6xl font-black text-[#f39e36] ">{{ product.priceDay }}€</span>
|
||||
<span class="text-sm font-bold text-slate-400 uppercase tracking-widest italic">La première journée</span>
|
||||
</div>
|
||||
|
||||
@@ -208,8 +208,8 @@
|
||||
<section class="max-w-7xl mx-auto px-4 py-24 border-t border-slate-100 mt-12">
|
||||
<div class="flex flex-col md:flex-row md:items-end justify-between gap-6 mb-16">
|
||||
<div>
|
||||
<span class="text-[10px] font-black text-blue-600 uppercase tracking-[0.3em] mb-3 block italic">Vous pourriez aussi aimer</span>
|
||||
<h2 class="text-4xl md:text-6xl font-black text-slate-900 uppercase italic tracking-tighter leading-none">D'autres <span class="text-blue-600">idées ?</span></h2>
|
||||
<span class="text-[10px] font-black text-[#f39e36] uppercase tracking-[0.3em] mb-3 block italic">Vous pourriez aussi aimer</span>
|
||||
<h2 class="text-4xl md:text-6xl font-black text-slate-900 uppercase italic tracking-tighter leading-none">D'autres <span class="text-[#f39e36]">idées ?</span></h2>
|
||||
</div>
|
||||
<a href="{{ path('reservation_catalogue') }}" class="inline-flex items-center gap-2 text-[10px] font-black uppercase tracking-widest border-b-2 border-slate-900 pb-1 hover:text-blue-600 hover:border-blue-600 transition-all">
|
||||
Tout le catalogue
|
||||
@@ -236,7 +236,7 @@
|
||||
</div>
|
||||
<div class="px-2">
|
||||
<span class="text-[8px] font-black text-slate-300 uppercase tracking-widest mb-1 block italic">{{ other.category }}</span>
|
||||
<h3 class="text-lg font-black text-slate-900 uppercase italic tracking-tighter leading-tight group-hover:text-blue-600 transition-colors line-clamp-1">
|
||||
<h3 class="text-lg font-black text-slate-900 uppercase italic tracking-tighter leading-tight group-hover:text-[#f39e36] transition-colors line-clamp-1">
|
||||
{{ other.name }}
|
||||
</h3>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user