| Date | Client | Pack | Prix | Km | Total | Lieu | Statut | Paiement |
|---|
| Mois | CA principal | Nb loc. | CA référence | Nb loc. | Δ € | Δ % | Évolution |
|---|
postMessage car Safari file:// isole le localStorage par fichier.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.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.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).
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.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
Personnalisez les textes générés : documents PDF, email, calendrier et contact. Les variables entre {{accolades}} seront remplacées automatiquement.
Cette section est réservée à Nils pour configurer les paramètres techniques du site.
Quand une location déclenche l'alerte en haut de l'écran et met l'onglet Préparation en surbrillance.
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.
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.
Les choix mis en avant dans une location. L'ordre d'affichage = l'ordre ci-dessous (glisser pour réordonner).
Un sac contient du matériel réel du catalogue et s'attribue aux packs — affiché à l'étape Préparation.
Enregistrement automatique à chaque modification.