# Patch paiements - reçus paysage et envoi WhatsApp

## Objectif

Ce patch corrige trois points du module Paiements :

1. Le reçu PDF de paiement sort désormais au bon format paysage exact 220 x 110 mm.
2. Après l'enregistrement d'un paiement, le reçu PDF est généré puis envoyé par WhatsApp aux contacts du parent/tuteur ou, à défaut, aux contacts de l'apprenant.
3. La page `/school/paiements` contient un renvoi massif progressif des reçus validés, du plus ancien au plus récent, avec un délai de 5,2 secondes entre les envois.

## Reçu PDF

Le générateur `PaiementPdfGenerator` utilisait un format personnalisé 220 x 110 mm, mais en orientation portrait. TCPDF créait donc une page verticale et le contenu paysage était coupé. Le patch force l'orientation `L` pour garder une page paysage réelle.

La route d'ouverture du reçu régénère aussi le PDF avant affichage, afin que les anciens reçus bénéficient automatiquement du modèle corrigé.

## Envoi WhatsApp après paiement

Après validation d'un paiement :

- le reçu est généré ;
- le fichier public est transmis au provider WhatsApp par URL ;
- si l'envoi média échoue, un message texte avec lien du reçu est envoyé en fallback ;
- l'échec WhatsApp ne bloque pas l'enregistrement du paiement.

## Renvoi massif

Sur `/school/paiements`, le bouton `Renvoyer reçus WhatsApp` ouvre une modal. Elle parcourt les paiements validés de la liste actuelle dans l'ordre chronologique ancien -> récent.

Chaque paiement est traité numéro par numéro. Le journal affiche :

- le reçu ;
- l'étudiant ;
- le parent/contact ;
- le numéro masqué ;
- le succès ou l'erreur.

## Routes ajoutées

```text
POST /school/paiements/{id}/renvoyer-recu-numero
```

Nom Symfony :

```text
school_paiement_resend_receipt_recipient
```

## Fichiers modifiés

```text
src/Controller/School/PaiementController.php
src/Service/Pdf/PaiementPdfGenerator.php
templates/school/paiement/index.html.twig
```

## Fichier ajouté

```text
src/Service/Whatsapp/PaymentReceiptWhatsappSender.php
```

## Tests conseillés

```bash
APP_ENV=prod APP_DEBUG=0 php bin/console cache:clear
APP_ENV=prod APP_DEBUG=0 php bin/console cache:warmup
APP_ENV=prod APP_DEBUG=0 php bin/console lint:twig templates/school/paiement/index.html.twig
APP_ENV=prod APP_DEBUG=0 php bin/console lint:container
APP_ENV=prod APP_DEBUG=0 php bin/console debug:router | grep school_paiement_resend_receipt_recipient
```

Puis tester :

1. ouvrir un ancien reçu ;
2. vérifier que le PDF n'est plus coupé ;
3. enregistrer un nouveau paiement ;
4. vérifier le flash d'envoi WhatsApp ;
5. ouvrir `/school/paiements` ;
6. lancer le renvoi massif ;
7. vérifier la modal et les logs d'envoi.
