CA mensuel
Répartition par catégorie
Comparaison CA — toutes les années
Date Client Pack Prix Km Total Lieu Statut Paiement
Année principale
Année de référence
Période
CA mensuel comparé
Nb locations comparé
Mois CA principal Nb loc. CA référence Nb loc. Δ € Δ % Évolution
Gérants
CA mensuel (locations terminées)
Ajouter un membre
Membres actuels
À lire en premier
L'outil de création de devis (index.html) a été long et difficile à mettre au point — ne pas le casser. Toute refonte doit conserver ce fonctionnement exact ou faire une migration propre. Le dashboard (dashboard.html) communique avec index.html via postMessage car Safari file:// isole le localStorage par fichier.
1 — Calendrier partagé (abonnement iCal)
Objectif : Quand une location est confirmée, elle apparaît automatiquement dans le Calendrier Apple de Rémi.

Comment : Apple Calendrier supporte l'abonnement à une URL .ics — il suffit d'une route GET /calendar.ics?token=xxx qui génère un iCalendar RFC 5545 avec un VEVENT par location à venir (DTSTART, DTEND, SUMMARY = client + pack, LOCATION = lieu, DESCRIPTION = prix + statut + contact). Rafraîchissement automatique toutes les heures.
2 — Formulaire de réservation public → dashboard
Flux :
1. Client remplit le formulaire (nom, email, tel, date, lieu, pack envisagé)
2. La demande apparaît en haut de la page Locations sous forme de notification "Demande à traiter"
3. Rémi clique Accepter → onglet Devis s'ouvre avec tous les champs pré-remplis
4. Rémi ajuste si besoin → génère le PDF → location auto-ajoutée à la liste
5. Rémi clique Refuser → archivé comme "Refusé"

Note technique : Le pré-remplissage est déjà codé dans index.html via prefillDevisFromLocation(loc) qui écoute postMessage({type:'ls64_open_devis', location:{...}}). Il suffit d'appeler ça depuis le dashboard.
3 — Modifier une location depuis le tableau
Déjà partiellement implémenté : Les locations à venir ont un bouton bleu qui ouvre l'onglet Devis et pré-remplit le formulaire via openInDevis(locId).

À compléter : recalculer le forfait km selon le lieu lors du pré-remplissage. Après modification, si le num_devis reste le même, la ligne se met à jour automatiquement (déduplication par num_devis déjà en place).
4 — Envoi automatique du reçu par mail (Remise matériel)
Contexte : Lors de la remise du matériel au client, l'employé coche la liste + le client signe sur l'écran → un reçu (PDF) + la charte de location doivent être envoyés automatiquement à l'adresse email du client.

Problème : L'app tourne en pur HTML/JS côté client — impossible d'envoyer un mail sans serveur.

Solution recommandée : EmailJS
→ Service gratuit jusqu'à 200 mails/mois
→ S'intègre en JS pur : emailjs.send(serviceId, templateId, params)
→ Supporte les pièces jointes base64 (pour envoyer le PDF)
→ Clé publique à placer dans l'app : emailjs.init("YOUR_PUBLIC_KEY")

À configurer sur emailjs.com :
1. Créer un compte (email : remi.renard64@gmail.com)
2. Connecter le service email (Gmail)
3. Créer un template "recu_location" avec les variables : {{to_email}} {{prenom}} {{pack}} {{date}} {{caution}}
4. Récupérer : Service ID + Template ID + Public Key → les injecter dans l'app

En attendant : L'app utilise un lien mailto: qui ouvre Mail avec le corps pré-rempli — l'utilisateur doit appuyer sur Envoyer manuellement. Remplacer par EmailJS dès que la clé est dispo.
5 — Architecture recommandée
Navigation : Locations (principale) → Nouveau devis → Demandes (réservations) → Répartition

Stack suggérée : Next.js + Prisma + SQLite (simple à héberger) ou FastAPI + SQLite. Auth : login email/mdp pour protéger le dashboard.

Champs d'une location : id, date, year, month, client, prenom, email, tel, pack, pack_id, categorie, prix_pack, deplacement, total, caution, lieu, statut (en_attente/a_venir/termine/refuse), paiement (non_paye/acompte_verse/solde_paye), num_devis, client_type

Clés localStorage actuelles à migrer en DB : ls64_dyn_locations, ls64_hist_overrides, ls64_settings, ls64_custom_packs

Forfait kilométrique — constantes
Sert de point de départ pour calculer les km et le temps de trajet.
Pré-rempli comme adresse réelle par défaut sur une nouvelle location.
Devis — numéro & validité
N° du prochain devis
Laisser vide pour générer automatiquement.
Textes personnalisables

Personnalisez les textes générés : documents PDF, email, calendrier et contact. Les variables entre {{accolades}} seront remplacées automatiquement.

Charte de location — Devis (page 2)

Texte affiché sur la deuxième page du devis PDF. Lignes commençant par A. B. etc. → titre de section en gras.

Charte de location — Reçu (page 2)

Texte affiché sur la deuxième page du reçu PDF.

Template email

Variables disponibles : {{prenom}} {{nom}} {{date}} {{pack}} {{prix}} {{caution}} {{lieu}} {{tel}} {{email_client}} {{num_devis}} {{adresse_cic}}

Template email — validation après acompte

Variables : {{prenom}} {{date}} {{heure}} {{lieu}} {{pack}} {{caution}} {{acompte}} {{reste}} {{num_devis}}

Template calendrier (.ICS)

Variables : {{prenom}} {{nom}} {{pack}} {{prix}} {{caution}} {{lieu}} {{tel}} {{email_client}} {{num_devis}}

Template contact (.VCF)

Variables : {{prenom}} {{nom}} {{date}} {{pack}} {{email_client}} {{tel}}

En construction

Cette section est réservée à Nils pour configurer les paramètres techniques du site.

Notifications

Quand une location déclenche l'alerte en haut de l'écran et met l'onglet Préparation en surbrillance.

Devis & paiement
S'applique aux deux rendez-vous — mise à disposition et restitution — au-delà du retard toléré. Reprise telle quelle dans les conditions générales. Laissée à 0, la clause chiffrée n'est pas imprimée.
Calendrier d'équipe

Abonne ton calendrier à cette adresse : il se met à jour tout seul à partir des locations, en lecture seule.

Sur iPhone : Réglages ▸ Applications ▸ Calendrier ▸ Comptes ▸ Ajouter un compte ▸ Autre ▸ Ajouter un abonnement.

Synchronisation
Forfait kilométrique

Le lieu de référence (départ) et le lieu de prise/dépose par défaut se règlent dans Paramètres devis.

Vedettes du formulaire location

Les choix mis en avant dans une location. L'ordre d'affichage = l'ordre ci-dessous (glisser pour réordonner).

Sacs

Un sac contient du matériel réel du catalogue et s'attribue aux packs — affiché à l'étape Préparation.

Enregistrement automatique à chaque modification.