✨ feat(formule): Intègre la gestion des formules et packs libres dans le parcours de réservation et les documents.
This commit is contained in:
@@ -9,7 +9,7 @@
|
||||
crossorigin=""/>
|
||||
<script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"
|
||||
integrity="sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo="
|
||||
crossorigin=""></script>
|
||||
crossorigin="" nonce="{{ csp_nonce('script') }}"></script>
|
||||
|
||||
<div class="space-y-8 pb-20">
|
||||
|
||||
@@ -55,12 +55,12 @@
|
||||
<div class="grid grid-cols-1 md:grid-cols-3 gap-4">
|
||||
<div>
|
||||
<label class="block text-[10px] font-bold text-slate-400 uppercase tracking-widest mb-1">Distance (km)</label>
|
||||
<input type="number" step="0.1" name="deliveryDistance" value="{{ session.deliveryDistance }}"
|
||||
<input type="number" step="0.1" name="deliveryDistance" value="{{ session.deliveryDistance }}"
|
||||
class="w-full bg-slate-900/50 border border-slate-700 rounded-lg px-3 py-2 text-white text-sm focus:border-blue-500 focus:ring-1 focus:ring-blue-500 outline-none transition-all">
|
||||
</div>
|
||||
<div>
|
||||
<label class="block text-[10px] font-bold text-slate-400 uppercase tracking-widest mb-1">Prix Livraison (€)</label>
|
||||
<input type="number" step="0.01" name="deliveryPrice" value="{{ session.deliveryPrice }}"
|
||||
<input type="number" step="0.01" name="deliveryPrice" value="{{ session.deliveryPrice }}"
|
||||
class="w-full bg-slate-900/50 border border-slate-700 rounded-lg px-3 py-2 text-white text-sm focus:border-blue-500 focus:ring-1 focus:ring-blue-500 outline-none transition-all">
|
||||
</div>
|
||||
<div>
|
||||
@@ -167,7 +167,7 @@
|
||||
{% if session.deliveryDistance is not null %}
|
||||
<div class="mt-6 border-t border-slate-700/50 pt-6">
|
||||
<h4 class="text-white font-bold text-sm mb-4">Détails Livraison</h4>
|
||||
|
||||
|
||||
<div class="bg-slate-900/50 rounded-xl border border-slate-700/50 overflow-hidden mb-4">
|
||||
{# Map #}
|
||||
{% if session.deliveryGeometry %}
|
||||
@@ -219,6 +219,18 @@
|
||||
Contenu de la demande
|
||||
</h3>
|
||||
|
||||
{% if session.formule %}
|
||||
<div class="mb-6 p-4 bg-blue-500/10 border border-blue-500/20 rounded-xl flex items-center gap-3">
|
||||
<div class="p-2 bg-blue-500/20 rounded-lg text-blue-400">
|
||||
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10"/></svg>
|
||||
</div>
|
||||
<div>
|
||||
<p class="text-[10px] font-bold text-blue-400 uppercase tracking-widest">Formule appliquée</p>
|
||||
<p class="text-white font-bold">{{ session.formule.name }}</p>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if session.products['start'] is defined and session.products['end'] is defined %}
|
||||
<div class="flex items-center gap-4 mb-8 p-4 bg-slate-900/50 rounded-xl border border-slate-700/50 w-fit">
|
||||
<div class="flex items-center gap-2">
|
||||
@@ -329,6 +341,16 @@
|
||||
{% set totalData = totalSession(session) %}
|
||||
<div class="mt-8 pt-6 border-t border-slate-700">
|
||||
<div class="flex flex-col gap-2 items-end">
|
||||
{% if session.promotion %}
|
||||
<div class="flex items-center gap-2 text-sm text-amber-400 font-bold uppercase mb-1">
|
||||
<span>Promotion : {{ session.promotion.name }}</span>
|
||||
<span class="bg-amber-500/10 px-2 py-0.5 rounded text-amber-500">-{{ session.promotion.percentage }}%</span>
|
||||
</div>
|
||||
<div class="text-xs text-slate-500 font-bold line-through">
|
||||
{{ totalData.originalHT|number_format(2, ',', ' ') }} € HT
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="text-sm text-slate-400">
|
||||
Durée : <span class="text-white font-bold">{{ totalData.duration }} jour{{ totalData.duration > 1 ? 's' : '' }}</span>
|
||||
</div>
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
<li class="form-repeater__row group animate-in slide-in-from-right-5 duration-300">
|
||||
<fieldset class="backdrop-blur-md bg-white/5 border border-white/10 rounded-[2.5rem] p-6 hover:border-blue-500/30 transition-all shadow-xl">
|
||||
<div class="grid grid-cols-1 lg:grid-cols-12 gap-5 items-end">
|
||||
|
||||
<input type="hidden" name="rest[{{ key }}][id]" value="{{ line.id }}">
|
||||
{# 1. PRODUIT #}
|
||||
<div class="lg:col-span-7">
|
||||
<label class="text-[10px] font-black text-slate-400 uppercase tracking-widest ml-1 mb-2 block">Produit / Prestation</label>
|
||||
|
||||
@@ -24,8 +24,8 @@
|
||||
<div class="w-2 h-2 rounded-full bg-emerald-400 shadow-[0_0_8px_rgba(52,211,153,0.8)] animate-pulse"></div>
|
||||
<span class="text-[10px] font-black text-emerald-400 uppercase tracking-widest">En ligne</span>
|
||||
</div>
|
||||
<a data-turbo="false" href="{{ path('app_crm_formules_view', {id: formule.id, act: 'togglePublish', status: 'false'}) }}"
|
||||
onclick="return confirm('Voulez-vous vraiment masquer cette formule ?')"
|
||||
<a href="{{ path('app_crm_formules_view', {id: formule.id, act: 'togglePublish', status: 'false'}) }}"
|
||||
data-turbo-confirm="Voulez-vous vraiment masquer cette formule ?"
|
||||
class="px-6 py-3 bg-white/5 hover:bg-rose-600 text-slate-400 hover:text-white text-[10px] font-black uppercase tracking-widest transition-all active:scale-95 border-l border-white/10">
|
||||
Désactiver
|
||||
</a>
|
||||
|
||||
28
templates/mails/prestataire/new_contrat.twig
Normal file
28
templates/mails/prestataire/new_contrat.twig
Normal file
@@ -0,0 +1,28 @@
|
||||
{% extends 'mails/base.twig' %}
|
||||
|
||||
{% block content %}
|
||||
<mj-section background-color="#ffffff" padding-bottom="0px">
|
||||
<mj-column width="100%">
|
||||
<mj-text font-size="20px" font-weight="900" color="#0f172a" text-transform="uppercase" font-style="italic" align="center">
|
||||
Nouveau Contrat Attribué
|
||||
</mj-text>
|
||||
<mj-divider border-width="1px" border-color="#f1f5f9" padding-top="20px" padding-bottom="20px" />
|
||||
</mj-column>
|
||||
</mj-section>
|
||||
|
||||
<mj-section background-color="#ffffff" padding-top="0px">
|
||||
<mj-column width="100%">
|
||||
<mj-text font-size="16px" color="#1e293b" padding-bottom="15px">
|
||||
Bonjour {{ datas.prestataire.surname }} {{ datas.prestataire.name }},
|
||||
</mj-text>
|
||||
|
||||
<mj-text font-size="16px" color="#0f172a" line-height="24px">
|
||||
Un nouveaux contrat à vous été attribuer pour les date du <b>{{ datas.dateStart }}</b> au <b>{{ datas.dateEnd }}</b>.
|
||||
</mj-text>
|
||||
|
||||
<mj-text padding-top="20px" font-size="12px" color="#64748b">
|
||||
Référence : #{{ datas.contrat.numReservation }}
|
||||
</mj-text>
|
||||
</mj-column>
|
||||
</mj-section>
|
||||
{% endblock %}
|
||||
@@ -82,7 +82,12 @@
|
||||
<div class="lg:col-span-3 space-y-6">
|
||||
<div class="bg-white rounded-[2.5rem] border border-slate-100 shadow-xl shadow-slate-200/40 overflow-hidden">
|
||||
<div class="p-8 border-b border-slate-50 flex justify-between items-center bg-slate-50/30">
|
||||
<h2 class="text-xs font-black uppercase tracking-widest text-slate-900">Détail des prestations & Options</h2>
|
||||
<div>
|
||||
<h2 class="text-xs font-black uppercase tracking-widest text-slate-900">Détail des prestations & Options</h2>
|
||||
{% if contrat.devis and contrat.devis.orderSession and contrat.devis.orderSession.formule %}
|
||||
<p class="text-[10px] font-bold text-blue-600 uppercase tracking-widest mt-1">Formule : {{ contrat.devis.orderSession.formule.name }}</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
<span class="bg-blue-600 text-white text-[10px] font-black px-4 py-1.5 rounded-full uppercase">{{ days }} Jours</span>
|
||||
</div>
|
||||
<div class="overflow-x-auto">
|
||||
|
||||
@@ -70,6 +70,18 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% if cart.formule %}
|
||||
<div class="mb-6 bg-blue-50 border border-blue-100 rounded-xl p-4 flex items-center gap-3">
|
||||
<div class="bg-white p-2 rounded-lg text-blue-500">
|
||||
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10"/></svg>
|
||||
</div>
|
||||
<div>
|
||||
<p class="text-[10px] font-black text-blue-400 uppercase tracking-widest">Formule appliquée</p>
|
||||
<p class="text-sm font-bold text-slate-900">{{ cart.formule }}</p>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="space-y-4">
|
||||
{% for item in cart.items %}
|
||||
<div class="flex items-center bg-white p-4 rounded-xl border border-slate-200 shadow-sm">
|
||||
@@ -83,6 +95,9 @@
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="flex-1">
|
||||
{% if item.in_formule is defined and item.in_formule %}
|
||||
<span class="inline-block px-2 py-0.5 rounded text-[8px] font-black uppercase tracking-widest bg-blue-100 text-blue-600 mb-1">Inclus formule</span>
|
||||
{% endif %}
|
||||
<h3 class="font-bold text-slate-800">{{ item.product.name }}</h4>
|
||||
|
||||
<div class="text-xs text-slate-600 bg-slate-50 p-2 rounded-lg border border-slate-100 inline-block mt-2">
|
||||
|
||||
@@ -32,6 +32,18 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% if cart.formule %}
|
||||
<div class="mb-6 bg-blue-50 border border-blue-100 rounded-xl p-4 flex items-center gap-3">
|
||||
<div class="bg-white p-2 rounded-lg text-blue-500">
|
||||
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10"/></svg>
|
||||
</div>
|
||||
<div>
|
||||
<p class="text-[10px] font-black text-blue-400 uppercase tracking-widest">Formule appliquée</p>
|
||||
<p class="text-sm font-bold text-slate-900">{{ cart.formule }}</p>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="space-y-4">
|
||||
{% for item in cart.items %}
|
||||
<div class="flex items-center bg-white p-4 rounded-xl border border-slate-200 shadow-sm">
|
||||
@@ -45,6 +57,9 @@
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="flex-1">
|
||||
{% if item.in_formule is defined and item.in_formule %}
|
||||
<span class="inline-block px-2 py-0.5 rounded text-[8px] font-black uppercase tracking-widest bg-blue-100 text-blue-600 mb-1">Inclus formule</span>
|
||||
{% endif %}
|
||||
<h4 class="font-bold text-slate-800">{{ item.product.name }}</h4>
|
||||
<div class="text-xs text-slate-500 mb-2 prose prose-sm max-w-none">
|
||||
{{ item.product.description|raw }}
|
||||
@@ -361,7 +376,7 @@
|
||||
Télécharger le devis
|
||||
</a>
|
||||
|
||||
<form data-turbo="false" method="post" action="{{ path('reservation_flow_confirmed', {sessionId: session.uuid}) }}" onsubmit="localStorage.clear();" class="w-full md:w-auto">
|
||||
<form is="submit-clear-storage" data-turbo="false" method="post" action="{{ path('reservation_flow_confirmed', {sessionId: session.uuid}) }}" class="w-full md:w-auto">
|
||||
<button type="submit" class="w-full px-8 py-4 bg-gradient-to-r from-blue-600 to-blue-700 text-white font-bold rounded-2xl shadow-lg shadow-blue-200 hover:shadow-xl hover:scale-[1.02] transition-all flex items-center justify-center gap-2 text-lg">
|
||||
Je confirme la commande
|
||||
</button>
|
||||
|
||||
@@ -92,58 +92,92 @@
|
||||
<div class="max-w-7xl mx-auto px-4 py-20">
|
||||
|
||||
{% if formule.type == "free" %}
|
||||
{# --- DESIGN BENTO POUR FORMULE FREE --- #}
|
||||
<div class="flex items-center space-x-4 mb-12">
|
||||
<h2 class="text-4xl font-black text-slate-900 uppercase italic tracking-tighter">Composez <span class="text-[#f39e36]">votre pack</span></h2>
|
||||
<div class="h-1 flex-grow bg-slate-100 rounded-full"></div>
|
||||
</div>
|
||||
|
||||
{# Grille Bento des Quotas #}
|
||||
<div class="grid grid-cols-1 md:grid-cols-3 gap-6 mb-16">
|
||||
<div class="bg-blue-50 border-4 border-slate-900 rounded-[2.5rem] p-8 flex flex-col justify-between h-30 group hover:-translate-y-1 transition-transform">
|
||||
<div>
|
||||
<p class="text-4xl font-black text-slate-900 leading-none">{{ formule.formulesRestriction.nbStructureMax|default(0) }}</p>
|
||||
<p class="text-xs font-black text-slate-400 uppercase italic mt-2 tracking-widest">Structures au choix</p>
|
||||
</div>
|
||||
<flow-formule-configurator
|
||||
data-limits='{"structure": {{ formule.formulesRestriction.nbStructureMax|default(0) }}, "alimentaire": {{ formule.formulesRestriction.nbAlimentaireMax|default(0) }}, "barnum": {{ formule.formulesRestriction.nbBarhumsMax|default(0) }}}'
|
||||
data-prices='{"p1": {{ formule.price1j|default(0) }}, "p2": {{ formule.price2j|default(0) }}, "p5": {{ formule.price5j|default(0) }}}'
|
||||
data-formule-id="{{ formule.id }}">
|
||||
|
||||
{# --- DESIGN BENTO POUR FORMULE FREE --- #}
|
||||
<div class="flex items-center space-x-4 mb-12">
|
||||
<h2 class="text-4xl font-black text-slate-900 uppercase italic tracking-tighter">Composez <span class="text-[#f39e36]">votre pack</span></h2>
|
||||
<div class="h-1 flex-grow bg-slate-100 rounded-full"></div>
|
||||
</div>
|
||||
|
||||
<div class="bg-orange-50 border-4 border-slate-900 rounded-[2.5rem] p-8 flex flex-col justify-between h-30 group hover:-translate-y-1 transition-transform">
|
||||
<div>
|
||||
<p class="text-4xl font-black text-slate-900 leading-none">{{ formule.formulesRestriction.nbAlimentaireMax|default(0) }}</p>
|
||||
<p class="text-xs font-black text-slate-400 uppercase italic mt-2 tracking-widest">Animations Alimentaires</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="bg-purple-50 border-4 border-slate-900 rounded-[2.5rem] p-8 flex flex-col justify-between h-30 group hover:-translate-y-1 transition-transform">
|
||||
<div>
|
||||
<p class="text-4xl font-black text-slate-900 leading-none">{{ formule.formulesRestriction.nbBarhumsMax|default(0) }}</p>
|
||||
<p class="text-xs font-black text-slate-400 uppercase italic mt-2 tracking-widest">Barnums & Mobilier</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{# Catalogue des produits éligibles #}
|
||||
<h3 class="text-[10px] font-black text-slate-400 uppercase tracking-[0.4em] mb-8 text-center italic">— Catalogue éligible à cette formule —</h3>
|
||||
<div class="grid grid-cols-2 md:grid-cols-3 lg:grid-cols-5 gap-6">
|
||||
{% for item in formule.formulesRestriction.restrictionConfig %}
|
||||
{% set product = loadProductByName(item.product) %}
|
||||
<div class="group border-2 border-slate-900 rounded-[2rem] p-2 bg-white hover:bg-slate-50 transition-all shadow-[8px_8px_0px_0px_rgba(15,23,42,1)] hover:shadow-none hover:translate-x-1 hover:translate-y-1">
|
||||
<div class="aspect-square rounded-[1.5rem] overflow-hidden bg-slate-100 mb-3 border border-slate-900/10">
|
||||
{% if product.image %}
|
||||
<img src="{{ product.image|imagine_filter('webp') }}" alt="{{ product.name }}" class="w-full h-full object-cover group-hover:scale-110 transition-transform duration-500">
|
||||
{% else %}
|
||||
<div class="w-full h-full flex items-center justify-center italic text-[8px] font-black text-slate-300 uppercase">Image non disp.</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="px-2 pb-2">
|
||||
<span class="text-[8px] font-black uppercase px-2 py-0.5 rounded-full border border-slate-900 {% if item.type == 'structure' %}bg-blue-100{% elseif item.type == 'alimentaire' %}bg-orange-100{% else %}bg-purple-100{% endif %}">
|
||||
{{ item.type }}
|
||||
</span>
|
||||
<h4 class="text-[11px] font-black text-slate-900 uppercase italic leading-tight mt-2 line-clamp-2">{{ product.name|default(item.product) }}</h4>
|
||||
{# Grille Bento des Quotas #}
|
||||
<div class="grid grid-cols-1 md:grid-cols-3 gap-6 mb-16">
|
||||
<div class="bg-blue-50 border-4 border-slate-900 rounded-[2.5rem] p-8 flex flex-col justify-between h-30 group hover:-translate-y-1 transition-transform">
|
||||
<div>
|
||||
<p class="text-4xl font-black text-slate-900 leading-none">
|
||||
<span id="count-structure" class="text-[#f39e36]">0</span><span class="text-2xl text-slate-400">/{{ formule.formulesRestriction.nbStructureMax|default(0) }}</span>
|
||||
</p>
|
||||
<p class="text-xs font-black text-slate-400 uppercase italic mt-2 tracking-widest">Structures au choix</p>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
<div class="bg-orange-50 border-4 border-slate-900 rounded-[2.5rem] p-8 flex flex-col justify-between h-30 group hover:-translate-y-1 transition-transform">
|
||||
<div>
|
||||
<p class="text-4xl font-black text-slate-900 leading-none">
|
||||
<span id="count-alimentaire" class="text-[#f39e36]">0</span><span class="text-2xl text-slate-400">/{{ formule.formulesRestriction.nbAlimentaireMax|default(0) }}</span>
|
||||
</p>
|
||||
<p class="text-xs font-black text-slate-400 uppercase italic mt-2 tracking-widest">Animations Alimentaires</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="bg-purple-50 border-4 border-slate-900 rounded-[2.5rem] p-8 flex flex-col justify-between h-30 group hover:-translate-y-1 transition-transform">
|
||||
<div>
|
||||
<p class="text-4xl font-black text-slate-900 leading-none">
|
||||
<span id="count-barnum" class="text-[#f39e36]">0</span><span class="text-2xl text-slate-400">/{{ formule.formulesRestriction.nbBarhumsMax|default(0) }}</span>
|
||||
</p>
|
||||
<p class="text-xs font-black text-slate-400 uppercase italic mt-2 tracking-widest">Barnums & Mobilier</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{# Catalogue des produits éligibles #}
|
||||
<h3 class="text-[10px] font-black text-slate-400 uppercase tracking-[0.4em] mb-8 text-center italic">— Catalogue éligible à cette formule —</h3>
|
||||
|
||||
<div class="grid grid-cols-2 md:grid-cols-3 lg:grid-cols-5 gap-6" id="pack-grid">
|
||||
{% for item in formule.formulesRestriction.restrictionConfig %}
|
||||
{% set product = loadProductByName(item.product) %}
|
||||
{% set catKey = item.type %}
|
||||
{% if item.type != 'structure' and item.type != 'alimentaire' %}
|
||||
{% set catKey = 'barnum' %}
|
||||
{% endif %}
|
||||
|
||||
<div class="product-card group cursor-pointer border-2 border-slate-900 rounded-[2rem] p-2 bg-white hover:bg-slate-50 transition-all shadow-[8px_8px_0px_0px_rgba(15,23,42,1)] hover:shadow-none hover:translate-x-1 hover:translate-y-1 relative"
|
||||
data-category="{{ catKey }}"
|
||||
data-id="{{ product.id }}"
|
||||
data-selected="false">
|
||||
|
||||
{# Checkbox Indicator #}
|
||||
<div class="absolute top-4 right-4 z-10 w-6 h-6 bg-white border-2 border-slate-900 rounded-full flex items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity selection-indicator">
|
||||
<div class="w-3 h-3 bg-[#f39e36] rounded-full hidden"></div>
|
||||
</div>
|
||||
|
||||
<div class="aspect-square rounded-[1.5rem] overflow-hidden bg-slate-100 mb-3 border border-slate-900/10">
|
||||
{% if product.image %}
|
||||
<img src="{{ product.image|imagine_filter('webp') }}" alt="{{ product.name }}" class="w-full h-full object-cover group-hover:scale-110 transition-transform duration-500">
|
||||
{% else %}
|
||||
<div class="w-full h-full flex items-center justify-center italic text-[8px] font-black text-slate-300 uppercase">Image non disp.</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="px-2 pb-2">
|
||||
<span class="text-[8px] font-black uppercase px-2 py-0.5 rounded-full border border-slate-900 {% if item.type == 'structure' %}bg-blue-100{% elseif item.type == 'alimentaire' %}bg-orange-100{% else %}bg-purple-100{% endif %}">
|
||||
{{ item.type }}
|
||||
</span>
|
||||
<h4 class="text-[11px] font-black text-slate-900 uppercase italic leading-tight mt-2 line-clamp-2">{{ product.name|default(item.product) }}</h4>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
{# Action Bar #}
|
||||
<div class="mt-12 text-center sticky bottom-8 z-50">
|
||||
<a id="btn-validate-pack" href="#" class="inline-block px-12 py-4 bg-slate-900 text-white rounded-full font-black uppercase italic tracking-widest hover:bg-[#fc0e50] transition-all shadow-xl opacity-50 pointer-events-none transform translate-y-4">
|
||||
Valider mon pack (0)
|
||||
</a>
|
||||
</div>
|
||||
</flow-formule-configurator>
|
||||
{% endif %}
|
||||
|
||||
{% if formule.type == "pack" %}
|
||||
|
||||
Reference in New Issue
Block a user