From b0dddd66959914f0c4e1317926243e425f36f3ac Mon Sep 17 00:00:00 2001 From: Julien Martin Date: Fri, 17 Jul 2026 19:33:21 +0200 Subject: [PATCH] feat(#157): consommer le flag API sans_responsable. Co-authored-by: Cursor --- frontend/lib/models/enfant_admin_model.dart | 21 ++++++++++++++++++--- frontend/lib/utils/enfant_vigilance.dart | 4 +--- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/frontend/lib/models/enfant_admin_model.dart b/frontend/lib/models/enfant_admin_model.dart index 9d591eb..e835d26 100644 --- a/frontend/lib/models/enfant_admin_model.dart +++ b/frontend/lib/models/enfant_admin_model.dart @@ -14,6 +14,8 @@ class EnfantAdminModel { final bool consentPhoto; final bool isMultiple; final List parentLinks; + /// Flag API #157 (sinon déduit de [parentLinks]). + final bool? sansResponsable; EnfantAdminModel({ required this.id, @@ -27,6 +29,7 @@ class EnfantAdminModel { this.consentPhoto = false, this.isMultiple = false, this.parentLinks = const [], + this.sansResponsable, }); String get fullName { @@ -37,9 +40,11 @@ class EnfantAdminModel { return '$fn $ln'; } - /// Aucun lien parent valide (`enfants_parents` vide) — ticket #157. - bool get hasNoResponsable => - !parentLinks.any((l) => l.parentId.trim().isNotEmpty); + /// Aucun lien parent valide — ticket #157. + bool get hasNoResponsable { + if (sansResponsable != null) return sansResponsable!; + return !parentLinks.any((l) => l.parentId.trim().isNotEmpty); + } EnfantAdminModel copyWith({ String? id, @@ -53,6 +58,7 @@ class EnfantAdminModel { bool? consentPhoto, bool? isMultiple, List? parentLinks, + bool? sansResponsable, }) { return EnfantAdminModel( id: id ?? this.id, @@ -66,6 +72,7 @@ class EnfantAdminModel { consentPhoto: consentPhoto ?? this.consentPhoto, isMultiple: isMultiple ?? this.isMultiple, parentLinks: parentLinks ?? this.parentLinks, + sansResponsable: sansResponsable ?? this.sansResponsable, ); } @@ -85,6 +92,13 @@ class EnfantAdminModel { _parseBool(json['consentement_photo']) || _parseBool(json['consentPhoto']); + bool? sansResponsable; + if (json.containsKey('sans_responsable') || + json.containsKey('sansResponsable')) { + sansResponsable = _parseBool(json['sans_responsable']) || + _parseBool(json['sansResponsable']); + } + return EnfantAdminModel( id: (json['id'] ?? '').toString(), firstName: json['first_name'] as String? ?? json['prenom'] as String?, @@ -100,6 +114,7 @@ class EnfantAdminModel { isMultiple: _parseBool(json['is_multiple']) || _parseBool(json['est_multiple']), parentLinks: links, + sansResponsable: sansResponsable, ); } diff --git a/frontend/lib/utils/enfant_vigilance.dart b/frontend/lib/utils/enfant_vigilance.dart index 354efae..5488416 100644 --- a/frontend/lib/utils/enfant_vigilance.dart +++ b/frontend/lib/utils/enfant_vigilance.dart @@ -1,9 +1,7 @@ import 'package:p_tits_pas/models/enfant_admin_model.dart'; /// Enfant sans lien parent (orphelins d’affiliation) — ticket #157. -bool enfantHasNoResponsable(EnfantAdminModel enfant) { - return !enfant.parentLinks.any((l) => l.parentId.trim().isNotEmpty); -} +bool enfantHasNoResponsable(EnfantAdminModel enfant) => enfant.hasNoResponsable; /// Message vigilance liste Enfants (même usage que [amPlacesVigilanceMessage]). String? enfantSansResponsableVigilanceMessage(EnfantAdminModel enfant) {