feat(#157): consommer le flag API sans_responsable.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
MARTIN Julien 2026-07-17 19:33:21 +02:00
parent ef7512dc1e
commit b0dddd6695
2 changed files with 19 additions and 6 deletions

View File

@ -14,6 +14,8 @@ class EnfantAdminModel {
final bool consentPhoto; final bool consentPhoto;
final bool isMultiple; final bool isMultiple;
final List<EnfantParentLink> parentLinks; final List<EnfantParentLink> parentLinks;
/// Flag API #157 (sinon déduit de [parentLinks]).
final bool? sansResponsable;
EnfantAdminModel({ EnfantAdminModel({
required this.id, required this.id,
@ -27,6 +29,7 @@ class EnfantAdminModel {
this.consentPhoto = false, this.consentPhoto = false,
this.isMultiple = false, this.isMultiple = false,
this.parentLinks = const [], this.parentLinks = const [],
this.sansResponsable,
}); });
String get fullName { String get fullName {
@ -37,9 +40,11 @@ class EnfantAdminModel {
return '$fn $ln'; return '$fn $ln';
} }
/// Aucun lien parent valide (`enfants_parents` vide) ticket #157. /// Aucun lien parent valide ticket #157.
bool get hasNoResponsable => bool get hasNoResponsable {
!parentLinks.any((l) => l.parentId.trim().isNotEmpty); if (sansResponsable != null) return sansResponsable!;
return !parentLinks.any((l) => l.parentId.trim().isNotEmpty);
}
EnfantAdminModel copyWith({ EnfantAdminModel copyWith({
String? id, String? id,
@ -53,6 +58,7 @@ class EnfantAdminModel {
bool? consentPhoto, bool? consentPhoto,
bool? isMultiple, bool? isMultiple,
List<EnfantParentLink>? parentLinks, List<EnfantParentLink>? parentLinks,
bool? sansResponsable,
}) { }) {
return EnfantAdminModel( return EnfantAdminModel(
id: id ?? this.id, id: id ?? this.id,
@ -66,6 +72,7 @@ class EnfantAdminModel {
consentPhoto: consentPhoto ?? this.consentPhoto, consentPhoto: consentPhoto ?? this.consentPhoto,
isMultiple: isMultiple ?? this.isMultiple, isMultiple: isMultiple ?? this.isMultiple,
parentLinks: parentLinks ?? this.parentLinks, parentLinks: parentLinks ?? this.parentLinks,
sansResponsable: sansResponsable ?? this.sansResponsable,
); );
} }
@ -85,6 +92,13 @@ class EnfantAdminModel {
_parseBool(json['consentement_photo']) || _parseBool(json['consentement_photo']) ||
_parseBool(json['consentPhoto']); _parseBool(json['consentPhoto']);
bool? sansResponsable;
if (json.containsKey('sans_responsable') ||
json.containsKey('sansResponsable')) {
sansResponsable = _parseBool(json['sans_responsable']) ||
_parseBool(json['sansResponsable']);
}
return EnfantAdminModel( return EnfantAdminModel(
id: (json['id'] ?? '').toString(), id: (json['id'] ?? '').toString(),
firstName: json['first_name'] as String? ?? json['prenom'] as String?, firstName: json['first_name'] as String? ?? json['prenom'] as String?,
@ -100,6 +114,7 @@ class EnfantAdminModel {
isMultiple: _parseBool(json['is_multiple']) || isMultiple: _parseBool(json['is_multiple']) ||
_parseBool(json['est_multiple']), _parseBool(json['est_multiple']),
parentLinks: links, parentLinks: links,
sansResponsable: sansResponsable,
); );
} }

View File

@ -1,9 +1,7 @@
import 'package:p_tits_pas/models/enfant_admin_model.dart'; import 'package:p_tits_pas/models/enfant_admin_model.dart';
/// Enfant sans lien parent (orphelins daffiliation) ticket #157. /// Enfant sans lien parent (orphelins daffiliation) ticket #157.
bool enfantHasNoResponsable(EnfantAdminModel enfant) { bool enfantHasNoResponsable(EnfantAdminModel enfant) => enfant.hasNoResponsable;
return !enfant.parentLinks.any((l) => l.parentId.trim().isNotEmpty);
}
/// Message vigilance liste Enfants (même usage que [amPlacesVigilanceMessage]). /// Message vigilance liste Enfants (même usage que [amPlacesVigilanceMessage]).
String? enfantSansResponsableVigilanceMessage(EnfantAdminModel enfant) { String? enfantSansResponsableVigilanceMessage(EnfantAdminModel enfant) {