Saisie/insertion : date de journée, repositionnement, point A/R, retour domicile

Améliorations de saisie issues du retour d'usage :

- Insertion : la date pré-remplie est celle de la JOURNÉE du trajet source (via
  prefill.date), et non la date de la carte, pour éviter les erreurs de saisie.
- Insertion « après » / « avant le suivant » : l'adresse de départ pré-remplie
  est le point de FIN du trajet source — son arrivée, ou son DÉPART si c'est un
  aller/retour (le véhicule est revenu à son point d'origine).
- Après création/modification sur une autre journée : repositionnement auto sur
  le mois du trajet, cadrage de la carte sur sa date, et dépliage du groupe de
  cette journée (TrajetListComponent.ouvrirJour, différé après recalcul du
  repliage) pour rendre le trajet ajouté visible.
- Bouton « Utiliser mon domicile » sur l'arrivée : pré-remplit le commentaire
  avec « Retour domicile » si le commentaire est vide (jamais de remplacement).

Specs : requirements.md (exigences 10.19, 11.1/11.2/11.12, 12.23) et design.md
(TrajetForm, TrajetList, ConsultationJour) mis à jour.
This commit is contained in:
2026-09-20 20:16:30 +02:00
parent e84c2356f1
commit 173b123f03
6 changed files with 112 additions and 18 deletions
@@ -230,6 +230,23 @@ export class TrajetListComponent {
});
}
/**
* Déplie explicitement la journée `dateIso` (`yyyy-MM-dd`), sans toucher aux autres.
* Appelé par le conteneur après l'ajout/insertion d'un trajet pour rendre la journée
* concernée visible. Sans effet si la date n'est pas dans le mois affiché.
*/
ouvrirJour(dateIso: string): void {
const cle = (dateIso ?? '').slice(0, 10);
if (!cle) {
return;
}
this.joursOuverts.update((ouverts) => {
const suivant = new Set(ouverts);
suivant.add(cle);
return suivant;
});
}
// --- Helpers d'affichage ---
/** Vrai si le trajet est le dernier DE SA JOURNÉE (pas d'« insérer avant le suivant »). */
@@ -263,14 +280,22 @@ export class TrajetListComponent {
}
/**
* Insérer après le trajet courant : pré-remplit l'adresse de départ avec
* l'adresse d'arrivée du trajet courant (Exigence 11.1/11.2).
* Insérer après le trajet courant : pré-remplit l'adresse de départ avec le point
* où l'on se trouve à la fin de ce trajet (Exigence 11.1/11.2).
*
* - Trajet simple : on se trouve à l'ADRESSE D'ARRIVÉE → départ pré-rempli = arrivée.
* - Trajet aller/retour : le véhicule est revenu à son point de départ → départ
* pré-rempli = ADRESSE DE DÉPART du trajet (et non son arrivée).
*/
insererApres(trajet: Trajet): void {
const pointDeFin = trajet.allerRetour ? trajet.adresseDepart : trajet.adresseArrivee;
this.insertAfter.emit({
prefill: {
adresseDepart: trajet.adresseArrivee,
vehiculeId: trajet.vehiculeId
adresseDepart: pointDeFin,
vehiculeId: trajet.vehiculeId,
// Rattache l'insertion à la JOURNÉE du trajet concerné (et non à la date de
// la carte), pour éviter les erreurs de saisie de date.
date: (trajet.date ?? '').slice(0, 10)
},
positionApres: trajet.position
});
@@ -287,11 +312,17 @@ export class TrajetListComponent {
if (!courant || !suivant) {
return;
}
// Point de fin du trajet courant : son arrivée, ou son départ s'il est aller/retour
// (le véhicule est alors revenu à son point d'origine).
const finCourant = courant.allerRetour ? courant.adresseDepart : courant.adresseArrivee;
this.insertBetween.emit({
prefill: {
adresseDepart: courant.adresseArrivee,
adresseDepart: finCourant,
// Le trajet suivant part toujours de son adresse de départ (indépendant de l'A/R).
adresseArrivee: suivant.adresseDepart,
vehiculeId: courant.vehiculeId
vehiculeId: courant.vehiculeId,
// Journée du trajet courant (insertion au sein de la même journée).
date: (courant.date ?? '').slice(0, 10)
},
positionApres: courant.position,
positionAvant: suivant.position