# Walk The Line — V16.10 — Prospection & préparation

Cette version ajoute quatre évolutions au back-office multi-projets.

## 1. E-mails de prospection depuis une fiche

- Bouton **Envoyer un mail** sur la fiche de prospection.
- Wizard en 3 étapes :
  1. choix du modèle ;
  2. personnalisation (éditeur CKEditor) + pièces jointes de la GED du projet ;
  3. aperçu final puis envoi.
- 22 modèles initiaux : version courte + version développée des 11 modèles fournis.
- Modèles **propres à chaque projet**. Ils sont copiés automatiquement à la création d'un projet et peuvent être modifiés dans **Administration → Modèles de mails**.
- Variables automatiques : `{{ projet_nom }}`, `{{ lieu_nom }}`, `{{ lieu_ville }}`, `{{ contact_nom }}`, `{{ contact_prenom }}`, `{{ date_souhaitee }}`, `{{ tarif_propose }}`, `{{ contact_email_projet }}`, `{{ contact_telephone_projet }}`.
- Variables de personnalisation conservées et signalées dans le wizard : `{{ phrase_personnalisee }}`, `{{ recommandation_nom }}`, `{{ lieu_date_echange }}`, `{{ element_evoque }}`, `{{ element_nouveau }}`, `{{ evolution_concrete }}`.
- Les mails sont envoyés en HTML via le SMTP du projet.
- Les relances J+12 / J+28 utilisent `In-Reply-To` / `References` lorsqu'un précédent mail envoyé depuis l'application existe, afin de favoriser la conservation du fil de discussion.
- Historisation de chaque envoi : destinataire, objet, corps, modèle, utilisateur, date et Message-ID.
- L'étape commerciale est mise à jour automatiquement selon le type de modèle (premier contact / relance 1 / relance 2).

## 2. Google Calendar par projet

La configuration est dans **Configuration du projet → Site public & communications**.

Champs :
- activation ;
- ID du calendrier ;
- e-mail du compte de service Google ;
- clé privée du compte de service (chiffrée en base) ;
- fuseau horaire.

Une aide intégrée explique :
1. création / choix du projet Google Cloud ;
2. activation de Google Calendar API ;
3. création du compte de service ;
4. génération de la clé JSON ;
5. création éventuelle d'un calendrier dédié ;
6. partage du calendrier avec le compte de service ;
7. récupération de l'ID du calendrier ;
8. test de la connexion.

Les dates confirmées sont synchronisées à leur création et à leur modification. Un bouton permet également de resynchroniser manuellement chaque date, et un bouton de la page Communications permet de synchroniser les dates existantes.

La suppression locale d'une date tente aussi de supprimer l'événement Google lié.

## 3. Préparation administrative avant une date

Une checklist automatique est affichée sur la fiche de prospection liée à une date et dans la liste des dates. Elle contrôle :
- devis ;
- convention ;
- fiche technique ;
- coordonnées de facturation ;
- contact opérationnel ;
- horaire du spectacle ;
- adresse du lieu.

Le nombre d'éléments manquants est visible immédiatement.

## 4. Synthèse commerciale des lieux

La liste **Lieux & contacts** affiche désormais pour le projet actif :
- nombre de prospections ;
- nombre de dates confirmées ;
- nombre de dates réalisées ;
- dernier contact ;
- dernier tarif proposé connu.

## Déploiement

Une migration est ajoutée :

```bash
php bin/console doctrine:migrations:migrate --no-interaction
php bin/console cache:clear --env=prod
```

Aucune nouvelle variable `.env` n'est requise : les paramètres SMTP / Google Calendar restent stockés par projet, et les secrets sont chiffrés avec le mécanisme existant basé sur `APP_SECRET`.

### Prérequis Google Calendar

Le serveur PHP doit pouvoir effectuer des connexions HTTPS sortantes vers :
- `oauth2.googleapis.com`
- `www.googleapis.com`

La méthode intégrée utilise OpenSSL pour signer le JWT du compte de service et les flux HTTPS PHP pour les requêtes Google.

## Correctif V16.10.1 — suivi automatique et schéma Doctrine

- L'envoi d'un modèle de catégorie `initial`, `followup1` ou `followup2` renseigne automatiquement le premier contact, la relance 1 ou la relance 2 dans la prospection et actualise son statut / sa prochaine action.
- Pour un premier contact envoyé par le wizard, le canal initial est automatiquement positionné sur **E-mail** lorsqu'il n'était pas déjà renseigné.
- Une date déjà enregistrée n'est pas écrasée si le même type de mail est renvoyé : l'historique d'envoi continue, mais la date du premier événement commercial reste intacte.
- La migration `Version20260820123000` corrige les écarts signalés par `doctrine:schema:validate` après la migration V16.10 (types DATETIME et noms d'index Doctrine).
