diff --git a/frontend/lib/models/parent_model.dart b/frontend/lib/models/parent_model.dart index 3a0cd5e..040aeda 100644 --- a/frontend/lib/models/parent_model.dart +++ b/frontend/lib/models/parent_model.dart @@ -62,4 +62,56 @@ class ParentModel { return children; } + + /// Nombre d’enfants distincts du foyer (ce parent + co-parent / même dossier). + /// Évite Claire=7 / Thomas=6 quand un lien n’est que sur un des deux (#157). + static int foyerChildrenCount( + ParentModel parent, + List allParents, + ) { + final memberIds = {parent.user.id}; + final coId = parent.coParent?.id.trim(); + if (coId != null && coId.isNotEmpty) memberIds.add(coId); + + final dossier = (parent.user.numeroDossier ?? '').trim(); + + for (final other in allParents) { + if (memberIds.contains(other.user.id)) continue; + final otherCo = other.coParent?.id.trim(); + if (otherCo != null && memberIds.contains(otherCo)) { + memberIds.add(other.user.id); + continue; + } + if (dossier.isNotEmpty && + (other.user.numeroDossier ?? '').trim() == dossier) { + memberIds.add(other.user.id); + final oc = other.coParent?.id.trim(); + if (oc != null && oc.isNotEmpty) memberIds.add(oc); + } + } + + final childIds = {}; + for (final p in allParents) { + if (!memberIds.contains(p.user.id)) continue; + for (final c in p.children) { + final id = c.id.trim(); + if (id.isNotEmpty) childIds.add(id); + } + // Repli si la liste enfants n’est pas hydratée. + if (p.children.isEmpty && p.childrenCount > 0) { + // Impossible de dédupliquer sans IDs : on prend au moins ce compte. + // (évite d’afficher 0 si l’API n’envoie que childrenCount) + } + } + + if (childIds.isNotEmpty) return childIds.length; + + var maxCount = 0; + for (final p in allParents) { + if (!memberIds.contains(p.user.id)) continue; + final n = p.children.isNotEmpty ? p.children.length : p.childrenCount; + if (n > maxCount) maxCount = n; + } + return maxCount; + } } diff --git a/frontend/lib/widgets/admin/common/admin_am_edit_modal.dart b/frontend/lib/widgets/admin/common/admin_am_edit_modal.dart index 6663be2..7059c2f 100644 --- a/frontend/lib/widgets/admin/common/admin_am_edit_modal.dart +++ b/frontend/lib/widgets/admin/common/admin_am_edit_modal.dart @@ -446,8 +446,7 @@ class _AdminAmEditModalState extends State builder: (ctx) => AlertDialog( title: const Text('Détacher l\'enfant'), content: Text( - 'Retirer ${child.fullName} de la fiche de cette assistante ?\n' - '(L\'enfant ne sera pas supprimé.)', + 'Retirer ${child.fullName} de la fiche de cette assistante ?', ), actions: [ TextButton( diff --git a/frontend/lib/widgets/admin/common/admin_parent_edit_modal.dart b/frontend/lib/widgets/admin/common/admin_parent_edit_modal.dart index e9bdab7..6365159 100644 --- a/frontend/lib/widgets/admin/common/admin_parent_edit_modal.dart +++ b/frontend/lib/widgets/admin/common/admin_parent_edit_modal.dart @@ -283,9 +283,7 @@ class _AdminParentEditModalState extends State { builder: (ctx) => AlertDialog( title: const Text('Détacher l\'enfant'), content: Text( - 'Retirer ${child.fullName} de la fiche de ce parent ?\n' - '(L\'enfant ne sera pas supprimé. S\'il n\'a plus d\'autre ' - 'responsable, il restera visible dans l\'onglet Enfants avec une alerte.)', + 'Retirer ${child.fullName} de la fiche de ce parent ?', ), actions: [ TextButton( diff --git a/frontend/lib/widgets/admin/parent_managmant_widget.dart b/frontend/lib/widgets/admin/parent_managmant_widget.dart index dcc2a66..24e0ef5 100644 --- a/frontend/lib/widgets/admin/parent_managmant_widget.dart +++ b/frontend/lib/widgets/admin/parent_managmant_widget.dart @@ -80,7 +80,7 @@ class _ParentManagementWidgetState extends State { onCardTap: () => _openParentDetails(parent), subtitleLines: [ parent.user.email, - 'Statut : ${_displayStatus(parent.user.statut)} | Enfants : ${parent.children.isNotEmpty ? parent.children.length : parent.childrenCount}', + 'Statut : ${_displayStatus(parent.user.statut)} | Enfants : ${ParentModel.foyerChildrenCount(parent, _parents)}', ], actions: [ IconButton(