Problème: Le système supposait l'année basée sur le contexte, ce qui causait des erreurs.
Solution:
- Ajout de formatDateFrWithYear() pour retourner DD/MM/YYYY
- Le calendrier DatePickerCalendar retourne maintenant des dates avec l'année complète
- parseFrenchedDate() supporte maintenant DD/MM/YYYY et DD/MM
- Si l'année est dans la date (DD/MM/YYYY), elle est utilisée directement
- Plus besoin de supposer l'année basée sur oct/nov/déc -> jan/fev/mar
- Les dates de début et fin se calculent correctement à partir des vraies dates ISO
Cela garantit que:
1. Les dates en janvier 2026 restent bien en 2026
2. Les champs date début/date fin se remplissent avec les bonnes années
3. Aucune supposition erronée n'est faite
Problème: Quand on sélectionnait des dates en janvier 2026 depuis un contrat en décembre 2025, les dates étaient converties en janvier 2025.
Solution: Amélioration de la fonction parseFrenchedDate pour détecter automatiquement si une date est dans l'année suivante:
- Si le mois de la date est janvier/février/mars (1-3)
- ET que le mois du contexte (dateDebut/dateFin) est oct/nov/déc (10-12)
- Alors on utilise l'année suivante
Exemple: Contrat du 15/12/2025 au 20/01/2026
- Les dates de janvier seront correctement converties en 2026 au lieu de 2025
- Ajout bouton calculatrice avec gradient bleu-indigo
- Ajout bouton Minima avec gradient émeraude-teal et lien vers /minima-ccn
- Correction focus trap : autoriser liens target=_blank
- Ajout champs conditionnels panier repas (nombre, CCN, montant personnalisé)
- DatePickerCalendar : initialisation sur date de début contrat si pas de dates sélectionnées
- DatesQuantityModal : option 'Ne pas appliquer...' pour tous types (repré/répét/heures)
- DatesQuantityModal : adaptation texte selon type (représentations/répétitions/heures)
- DatesQuantityModal : champ 'Appliquer à toutes les dates' pour saisie rapide
- DatesQuantityModal : reset quantités quand option 'Ne pas appliquer' cochée
- DatesQuantityModal : aperçu sans détails quand option cochée
- Intégration durée répétitions dans formatage dates (3h ou 4h, avec 'chacun' si >1)
- Notification paiement salaires : nouvel email 'salary-transfer-payment-confirmation'
- Notification paiement salaires : API route /api/staff/virements-salaires/[id]/notify-payment-sent
- Notification paiement salaires : modal NotifyPaymentSentModal avec détails paiement
- Notification paiement salaires : tracking avec payment_notification_sent/sent_at
- Notification paiement salaires : affichage statut dans modal virements
- Template email : support detailsCardDisclaimer pour mentions légales
- Ajout champs heures totales et minutes pour répétitions dans AmendmentDureeForm
- Intégration DatesQuantityModal pour saisie heures par jour de répétition
- Ajout type 'heures_repetitions' dans dateFormatter et DatesQuantityModal
- Correction envoi precisions_salaire à PDFMonkey pour les avenants
- Ajout champs séparés dates_representations_detail et dates_repetitions_detail
- Correction logique dates_repetitions_heures pour éviter doublons dans PDF
- Création de /lib/dateFormatter.ts avec utilities de parsing/formatting des dates
* Parsing format input (DD/MM) en ISO (YYYY-MM-DD)
* Groupement automatique des dates consécutives
* Formatage smart: 'le xx/xx' pour isolées, 'du xx/xx au xx/xx' pour plages
* Détection automatique du multi-mois
* Format pour PDFMonkey: 'le 12/10 ; du 14/10 au 17/10.'
- Création de /components/DatePickerCalendar.tsx
* Composant modal draggable et multi-select
* Prévisualisation du formatage PDFMonkey
* Limites de plage (minDate/maxDate)
* Warning multi-mois
* Retour des données au format input et pdfFormatted
- Intégration dans /components/contrats/NouveauCDDUForm.tsx
* Remplacement des inputs texte par calendriers pour dates_representations, dates_repetitions, jours_travail
* Auto-détection multi-mois et set isMultiMois = 'Oui' si >1 mois
* Pré-remplissage du calendrier lors de la duplication
* Affichage lisible du formatage smart
- Intégration dans /components/staff/contracts/ContractEditor.tsx
* Ajout du calendrier pour zone 'Dates travaillées'
* Affichage du format smart au lieu du texte brut
Closes #calendar-dates-picker