Add Keycloak authentication for ETL users.
Configure ETL routes and login/logout functionality.
Integrate ETL with Keycloak SSO.
Update vite.config.js to include etl.js.
Create EtlController with home, login, and logout routes.
Implement EtlAuthenticator for email/password login.
Configure security.yaml for ETL firewall and providers.
Add etl.js and etl.scss for ETL frontend.
Add Keycloak client configuration for ETL.
Update PrestaireController to use absolute URL for login.
✨ feat(contrats): Améliore la gestion des contrats et des paiements.
- Rend le champ details non obligatoire dans add.twig
- Ajoute une valeur par défaut pour isSigned et type dans les entités.
- Corrige l'ajout des lignes et options au contrat.
- Ajoute la création automatique du client Stripe.
```
✨ feat(env): Met à jour les URLs ngrok pour l'environnement.
✨ feat(Prestaire): Ajoute contrainte d'unicité email et relations Contrats/OrderSession.
✨ feat(OrderSession): Ajoute une relation ManyToOne vers Prestaire.
✨ feat(Contrats): Ajoute une relation ManyToOne vers Prestaire.
🐛 fix(SignatureController): Corrige la création de contrat à partir du devis signé.
✨ feat(FlowController): Ajoute un sélecteur de prestataire à la session.
✨ feat(devis/list.twig): Ajoute une légende des actions dans la liste des devis.
✨ feat(ContratsController): Ajoute le prestataire au contrat lors de la génération.
✨ feat(SearchController): Ajoute la recherche de prestataires.
🐛 fix(SignatureClient): Corrige le stockage de l'ID de signature du devis.
✨ feat(base.twig): Ajoute un lien vers la liste des prestataires dans le menu.
✨ feat(PrestataireRepository): Ajoute une méthode de recherche par nom et email.
```
✨ feat(contrat): Ajoute des labels d'accessibilité et améliore l'UX.
✨ feat(password): Ajoute des labels d'accessibilité pour une meilleure UX.
🗑️ feat(adresses): Ajoute un label d'accessibilité au bouton de suppression.
```
🔧 chore(ansible): Met à jour la version de PHP pour les tâches cron et commandes.
✨ feat(flow/view): Ajoute la gestion de la livraison et réorganise le formulaire de paiement.
```
✨ feat(reservation/flow): Améliore le flux de réservation et ajoute des options.
Cette commit améliore le flux de réservation, ajoute une estimation des
frais de livraison et gère les options de produit et les paiements.
```
✨ feat(ReserverController): Gère les options de produits au panier et en session.
Ajoute la gestion des options de produits lors de l'ajout au panier et dans la session de réservation. Inclut des corrections pour les options orphelines.
```
✨ feat(Product.php): Ajoute la liaison ManyToMany avec l'entité Options
✨ feat(Devis.php): Ajoute la propriété isNotAddCaution pour masquer la caution
♻️ refactor(.env): Met à jour les URLs de SIGN, STRIPE et CONTRAT
✨ feat(workflow.twig): Adapte le workflow et supprime l'étape de caution
✨ feat(NewDevisType.php): Ajoute un champ pour gérer
✨ feat(Product): Ajoute la publication des produits et les périodes bloquées
Ajoute la possibilité de publier ou masquer un produit.
Permet de bloquer des périodes pour un produit.
Corrige des bugs liés à la suppression des produits du panier.
Mise à jour de l'affichage du calendrier pour les blocages.
```
✨ feat(ReserverController): Génère un devis PDF provisoire basé sur la session.
🎨 style(flow_confirmed.twig): Ajoute un lien pour télécharger le devis provisoire.
```
✨ feat(admin.js): Ajoute le calculateur de commission Stripe.
✨ feat(add.twig): Affiche la commission Stripe estimée pour les tarifs.
✨ feat(view.twig): Affiche la commission Stripe estimée sur le total contrat et le solde.
```
✨ feat(ReserverController): Ajoute route de confirmation de réservation.
✨ feat(FeedController): Crée un contrôleur pour les flux RSS.
✨ feat(templates): Ajoute un template pour les flux RSS.
✨ feat(templates): Ajoute des liens RSS dans la base du template.
```
✨ feat(revervation): [Ajoute la création de session de réservation et le flow]
🐛 fix(PurgeCommandTest): [Utilise addCommand au lieu de add pour les commandes]
📝 chore(deps): [Mise à jour des dépendances Composer et corrections]
🐛 fix(KeycloakAuthenticator): [Corrige le type nullable de l'exception start]
✨ feat(Customer): [Ajoute les sessions de commandes aux entités Customer]
♻️ refactor(AppLogger): [Refactorise l'AppLogger pour obtenir l'UserAgent]
✨ feat(FlowReserve): [Ajoute une action de validation du panier]
```
✨ feat(reservation): Ajoute le panier et sélection de date globale
Ajoute un composant de panier accessible depuis toutes les pages de réservation et un sélecteur de date global.
```
✨ feat(reservation): Ajoute le panier et sélection de date globale
Ajoute un composant de panier accessible depuis toutes les pages de réservation et un sélecteur de date global.
```
✨ feat(workflow.twig): Ajoute animations AOS pour un effet visuel amélioré.
✨ feat(app.js): Initialise la librairie AOS pour les animations.
➕ chore(package.json): Ajoute AOS comme dépendance.
✨ feat(reserve.js): Initialise AOS pour les animations.
✨ feat(formules.twig): Ajoute animations AOS pour améliorer l'UX.
✨ feat(catalogue.twig): Ajoute animations AOS pour une meilleure UX.
✨ feat(dashboard/base.twig): Améliore la mise en page du dashboard.
✨ feat(base.twig): Ajoute macros pour les liens de navigation.
✨ feat(home.twig): Ajoute animations AOS et macros pour la page d'accueil.
```
✨ feat(Product.php): Ajoute les entités ProductPhotos et ProductVideo.
✨ feat(Product): Ajoute les collections photos et vidéos au produit.
🆕 feat(ProductPhotosType): Crée le formulaire d'upload des photos.
🆕 feat(ProductVideoType): Crée le formulaire d'upload des vidéos.
🎨 refactor(add.twig): Ajoute les formulaires et affichage des photos/vidéos.
🎨 refactor(produit.twig): Affiche les photos et vidéos sur la page produit.
♻️ refactor(vich_uploader.yaml): Ajoute les mappings pour photos et vidéos.
🐛 fix(ProductController): Gère l'ajout/suppression des photos et vidéos.
```
✨ feat(ReserverController): Ordonne les formules par position
🎨 style(formule/show.twig): Simplifie le texte de tarification
♻️ refactor(FormulesController): Permet de réordonner les formules
🐛 fix(SortableReorder.js): Corrige l'attribut URL de tbody
✨ feat(formules/view.twig): Ajoute un sélecteur de type de formule
🐛 fix(formules.twig): Correction de l'ordre d'affichage
🐛 fix(revervation.twig): Correction de la description SEO
```
✨ feat(admin): Enregistre et utilise SortableReorder.js
Ajoute SortableReorder.js pour permettre le tri des lignes de tableau par drag-and-drop. L'implémente dans la page des formules.
```
✨ feat(templates): Améliore la lisibilité et l'esthétique de l'interface
Ce commit met à jour les couleurs et les styles de texte dans plusieurs
templates pour améliorer la lisibilité et l'esthétique globale de
l'interface utilisateur. Les couleurs de texte secondaires sont
ajustées pour un meilleur contraste.
```
✨ feat(crm): Améliore l'interface et la recherche de produits/options
Ce commit modernise l'interface utilisateur pour la recherche et la sélection de produits et d'options. Il améliore l'apparence
visuelle, l'ergonomie et la réactivité, en utilisant des composants plus modernes et des animations plus fluides. Les
fonctionnalités de recherche ont été optimisées pour une meilleure expérience utilisateur. Ajout de nouvelles classes
'SearchProductDevis' et 'SearchOptionsDevis' pour la gestion des options dans Devis.
```
✨ feat(MailCommand): Automatise les rappels et suivis par mail
- Ajoute rappels devis/contrats non signés.
- Gère les acomptes/cautions manquants.
- Planifie rappels logistiques J-3/J-1.
```
✨ feat(contrat/view): Ajoute l'attribut data-turbo="false" au lien d'acompte.
🐛 fix(RedirecListener): Exclut les webhooks de la redirection ngrok.
✨ feat(Webhooks): Crée des ProductReserve lors du paiement d'un acompte.
✨ feat(ContratPdfService): Remplace le code-barres par un QR code.
✨ feat(ContratController): Gère le paiement de l'acompte via Stripe.
```
✨ feat: fin de création des contrat dans crm fonctionel et valide
activation partie visiteur sur création et connexion compte visiteur valide et tester
```