Appli Flutter se connecte bien à l'API.
This commit is contained in:
186
unionflow-mobile-apps/lib/core/models/membre_model.dart
Normal file
186
unionflow-mobile-apps/lib/core/models/membre_model.dart
Normal file
@@ -0,0 +1,186 @@
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
part 'membre_model.g.dart';
|
||||
|
||||
/// Modèle de données pour un membre UnionFlow
|
||||
/// Aligné avec MembreDTO du serveur API
|
||||
@JsonSerializable()
|
||||
class MembreModel extends Equatable {
|
||||
/// ID unique du membre
|
||||
final String? id;
|
||||
|
||||
/// Numéro unique du membre (format: UF-YYYY-XXXXXXXX)
|
||||
@JsonKey(name: 'numeroMembre')
|
||||
final String numeroMembre;
|
||||
|
||||
/// Nom de famille du membre
|
||||
final String nom;
|
||||
|
||||
/// Prénom du membre
|
||||
final String prenom;
|
||||
|
||||
/// Adresse email
|
||||
final String email;
|
||||
|
||||
/// Numéro de téléphone
|
||||
final String telephone;
|
||||
|
||||
/// Date de naissance
|
||||
@JsonKey(name: 'dateNaissance')
|
||||
final DateTime? dateNaissance;
|
||||
|
||||
/// Adresse complète
|
||||
final String? adresse;
|
||||
|
||||
/// Ville
|
||||
final String? ville;
|
||||
|
||||
/// Code postal
|
||||
@JsonKey(name: 'codePostal')
|
||||
final String? codePostal;
|
||||
|
||||
/// Pays
|
||||
final String? pays;
|
||||
|
||||
/// Profession
|
||||
final String? profession;
|
||||
|
||||
/// Statut du membre (ACTIF, INACTIF, SUSPENDU)
|
||||
final String statut;
|
||||
|
||||
/// Date d'adhésion
|
||||
@JsonKey(name: 'dateAdhesion')
|
||||
final DateTime dateAdhesion;
|
||||
|
||||
/// Date de création
|
||||
@JsonKey(name: 'dateCreation')
|
||||
final DateTime dateCreation;
|
||||
|
||||
/// Date de dernière modification
|
||||
@JsonKey(name: 'dateModification')
|
||||
final DateTime? dateModification;
|
||||
|
||||
/// Indique si le membre est actif
|
||||
final bool actif;
|
||||
|
||||
/// Version pour optimistic locking
|
||||
final int version;
|
||||
|
||||
const MembreModel({
|
||||
this.id,
|
||||
required this.numeroMembre,
|
||||
required this.nom,
|
||||
required this.prenom,
|
||||
required this.email,
|
||||
required this.telephone,
|
||||
this.dateNaissance,
|
||||
this.adresse,
|
||||
this.ville,
|
||||
this.codePostal,
|
||||
this.pays,
|
||||
this.profession,
|
||||
required this.statut,
|
||||
required this.dateAdhesion,
|
||||
required this.dateCreation,
|
||||
this.dateModification,
|
||||
required this.actif,
|
||||
required this.version,
|
||||
});
|
||||
|
||||
/// Constructeur depuis JSON
|
||||
factory MembreModel.fromJson(Map<String, dynamic> json) =>
|
||||
_$MembreModelFromJson(json);
|
||||
|
||||
/// Conversion vers JSON
|
||||
Map<String, dynamic> toJson() => _$MembreModelToJson(this);
|
||||
|
||||
/// Nom complet du membre
|
||||
String get nomComplet => '$prenom $nom';
|
||||
|
||||
/// Initiales du membre
|
||||
String get initiales {
|
||||
final prenomInitial = prenom.isNotEmpty ? prenom[0].toUpperCase() : '';
|
||||
final nomInitial = nom.isNotEmpty ? nom[0].toUpperCase() : '';
|
||||
return '$prenomInitial$nomInitial';
|
||||
}
|
||||
|
||||
/// Adresse complète formatée
|
||||
String get adresseComplete {
|
||||
final parts = <String>[];
|
||||
if (adresse?.isNotEmpty == true) parts.add(adresse!);
|
||||
if (ville?.isNotEmpty == true) parts.add(ville!);
|
||||
if (codePostal?.isNotEmpty == true) parts.add(codePostal!);
|
||||
if (pays?.isNotEmpty == true) parts.add(pays!);
|
||||
return parts.join(', ');
|
||||
}
|
||||
|
||||
/// Copie avec modifications
|
||||
MembreModel copyWith({
|
||||
String? id,
|
||||
String? numeroMembre,
|
||||
String? nom,
|
||||
String? prenom,
|
||||
String? email,
|
||||
String? telephone,
|
||||
DateTime? dateNaissance,
|
||||
String? adresse,
|
||||
String? ville,
|
||||
String? codePostal,
|
||||
String? pays,
|
||||
String? profession,
|
||||
String? statut,
|
||||
DateTime? dateAdhesion,
|
||||
DateTime? dateCreation,
|
||||
DateTime? dateModification,
|
||||
bool? actif,
|
||||
int? version,
|
||||
}) {
|
||||
return MembreModel(
|
||||
id: id ?? this.id,
|
||||
numeroMembre: numeroMembre ?? this.numeroMembre,
|
||||
nom: nom ?? this.nom,
|
||||
prenom: prenom ?? this.prenom,
|
||||
email: email ?? this.email,
|
||||
telephone: telephone ?? this.telephone,
|
||||
dateNaissance: dateNaissance ?? this.dateNaissance,
|
||||
adresse: adresse ?? this.adresse,
|
||||
ville: ville ?? this.ville,
|
||||
codePostal: codePostal ?? this.codePostal,
|
||||
pays: pays ?? this.pays,
|
||||
profession: profession ?? this.profession,
|
||||
statut: statut ?? this.statut,
|
||||
dateAdhesion: dateAdhesion ?? this.dateAdhesion,
|
||||
dateCreation: dateCreation ?? this.dateCreation,
|
||||
dateModification: dateModification ?? this.dateModification,
|
||||
actif: actif ?? this.actif,
|
||||
version: version ?? this.version,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
List<Object?> get props => [
|
||||
id,
|
||||
numeroMembre,
|
||||
nom,
|
||||
prenom,
|
||||
email,
|
||||
telephone,
|
||||
dateNaissance,
|
||||
adresse,
|
||||
ville,
|
||||
codePostal,
|
||||
pays,
|
||||
profession,
|
||||
statut,
|
||||
dateAdhesion,
|
||||
dateCreation,
|
||||
dateModification,
|
||||
actif,
|
||||
version,
|
||||
];
|
||||
|
||||
@override
|
||||
String toString() => 'MembreModel(id: $id, numeroMembre: $numeroMembre, '
|
||||
'nomComplet: $nomComplet, email: $email, statut: $statut)';
|
||||
}
|
||||
54
unionflow-mobile-apps/lib/core/models/membre_model.g.dart
Normal file
54
unionflow-mobile-apps/lib/core/models/membre_model.g.dart
Normal file
@@ -0,0 +1,54 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'membre_model.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// JsonSerializableGenerator
|
||||
// **************************************************************************
|
||||
|
||||
MembreModel _$MembreModelFromJson(Map<String, dynamic> json) => MembreModel(
|
||||
id: json['id'] as String?,
|
||||
numeroMembre: json['numeroMembre'] as String,
|
||||
nom: json['nom'] as String,
|
||||
prenom: json['prenom'] as String,
|
||||
email: json['email'] as String,
|
||||
telephone: json['telephone'] as String,
|
||||
dateNaissance: json['dateNaissance'] == null
|
||||
? null
|
||||
: DateTime.parse(json['dateNaissance'] as String),
|
||||
adresse: json['adresse'] as String?,
|
||||
ville: json['ville'] as String?,
|
||||
codePostal: json['codePostal'] as String?,
|
||||
pays: json['pays'] as String?,
|
||||
profession: json['profession'] as String?,
|
||||
statut: json['statut'] as String,
|
||||
dateAdhesion: DateTime.parse(json['dateAdhesion'] as String),
|
||||
dateCreation: DateTime.parse(json['dateCreation'] as String),
|
||||
dateModification: json['dateModification'] == null
|
||||
? null
|
||||
: DateTime.parse(json['dateModification'] as String),
|
||||
actif: json['actif'] as bool,
|
||||
version: (json['version'] as num).toInt(),
|
||||
);
|
||||
|
||||
Map<String, dynamic> _$MembreModelToJson(MembreModel instance) =>
|
||||
<String, dynamic>{
|
||||
'id': instance.id,
|
||||
'numeroMembre': instance.numeroMembre,
|
||||
'nom': instance.nom,
|
||||
'prenom': instance.prenom,
|
||||
'email': instance.email,
|
||||
'telephone': instance.telephone,
|
||||
'dateNaissance': instance.dateNaissance?.toIso8601String(),
|
||||
'adresse': instance.adresse,
|
||||
'ville': instance.ville,
|
||||
'codePostal': instance.codePostal,
|
||||
'pays': instance.pays,
|
||||
'profession': instance.profession,
|
||||
'statut': instance.statut,
|
||||
'dateAdhesion': instance.dateAdhesion.toIso8601String(),
|
||||
'dateCreation': instance.dateCreation.toIso8601String(),
|
||||
'dateModification': instance.dateModification?.toIso8601String(),
|
||||
'actif': instance.actif,
|
||||
'version': instance.version,
|
||||
};
|
||||
@@ -0,0 +1,206 @@
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
part 'wave_checkout_session_model.g.dart';
|
||||
|
||||
/// Modèle pour les sessions de paiement Wave Money
|
||||
/// Aligné avec WaveCheckoutSessionDTO du serveur API
|
||||
@JsonSerializable()
|
||||
class WaveCheckoutSessionModel extends Equatable {
|
||||
/// ID unique de la session
|
||||
final String? id;
|
||||
|
||||
/// ID de la session Wave (retourné par l'API Wave)
|
||||
@JsonKey(name: 'waveSessionId')
|
||||
final String waveSessionId;
|
||||
|
||||
/// URL de la session de paiement Wave
|
||||
@JsonKey(name: 'waveUrl')
|
||||
final String? waveUrl;
|
||||
|
||||
/// Montant du paiement
|
||||
final double montant;
|
||||
|
||||
/// Devise (XOF pour la Côte d'Ivoire)
|
||||
final String devise;
|
||||
|
||||
/// URL de succès (redirection après paiement réussi)
|
||||
@JsonKey(name: 'successUrl')
|
||||
final String successUrl;
|
||||
|
||||
/// URL d'erreur (redirection après échec)
|
||||
@JsonKey(name: 'errorUrl')
|
||||
final String errorUrl;
|
||||
|
||||
/// Statut de la session
|
||||
final String statut;
|
||||
|
||||
/// ID de l'organisation qui effectue le paiement
|
||||
@JsonKey(name: 'organisationId')
|
||||
final String? organisationId;
|
||||
|
||||
/// Nom de l'organisation
|
||||
@JsonKey(name: 'nomOrganisation')
|
||||
final String? nomOrganisation;
|
||||
|
||||
/// ID du membre qui effectue le paiement
|
||||
@JsonKey(name: 'membreId')
|
||||
final String? membreId;
|
||||
|
||||
/// Nom du membre
|
||||
@JsonKey(name: 'nomMembre')
|
||||
final String? nomMembre;
|
||||
|
||||
/// Type de paiement (COTISATION, ADHESION, AIDE, EVENEMENT)
|
||||
@JsonKey(name: 'typePaiement')
|
||||
final String? typePaiement;
|
||||
|
||||
/// Description du paiement
|
||||
final String? description;
|
||||
|
||||
/// Référence externe
|
||||
@JsonKey(name: 'referenceExterne')
|
||||
final String? referenceExterne;
|
||||
|
||||
/// Date de création
|
||||
@JsonKey(name: 'dateCreation')
|
||||
final DateTime dateCreation;
|
||||
|
||||
/// Date d'expiration
|
||||
@JsonKey(name: 'dateExpiration')
|
||||
final DateTime? dateExpiration;
|
||||
|
||||
/// Date de dernière modification
|
||||
@JsonKey(name: 'dateModification')
|
||||
final DateTime? dateModification;
|
||||
|
||||
/// Indique si la session est active
|
||||
final bool actif;
|
||||
|
||||
/// Version pour optimistic locking
|
||||
final int version;
|
||||
|
||||
const WaveCheckoutSessionModel({
|
||||
this.id,
|
||||
required this.waveSessionId,
|
||||
this.waveUrl,
|
||||
required this.montant,
|
||||
required this.devise,
|
||||
required this.successUrl,
|
||||
required this.errorUrl,
|
||||
required this.statut,
|
||||
this.organisationId,
|
||||
this.nomOrganisation,
|
||||
this.membreId,
|
||||
this.nomMembre,
|
||||
this.typePaiement,
|
||||
this.description,
|
||||
this.referenceExterne,
|
||||
required this.dateCreation,
|
||||
this.dateExpiration,
|
||||
this.dateModification,
|
||||
required this.actif,
|
||||
required this.version,
|
||||
});
|
||||
|
||||
/// Constructeur depuis JSON
|
||||
factory WaveCheckoutSessionModel.fromJson(Map<String, dynamic> json) =>
|
||||
_$WaveCheckoutSessionModelFromJson(json);
|
||||
|
||||
/// Conversion vers JSON
|
||||
Map<String, dynamic> toJson() => _$WaveCheckoutSessionModelToJson(this);
|
||||
|
||||
/// Montant formaté avec devise
|
||||
String get montantFormate => '${montant.toStringAsFixed(0)} $devise';
|
||||
|
||||
/// Indique si la session est expirée
|
||||
bool get estExpiree {
|
||||
if (dateExpiration == null) return false;
|
||||
return DateTime.now().isAfter(dateExpiration!);
|
||||
}
|
||||
|
||||
/// Indique si la session est en attente
|
||||
bool get estEnAttente => statut == 'PENDING' || statut == 'EN_ATTENTE';
|
||||
|
||||
/// Indique si la session est réussie
|
||||
bool get estReussie => statut == 'SUCCESS' || statut == 'REUSSIE';
|
||||
|
||||
/// Indique si la session a échoué
|
||||
bool get aEchoue => statut == 'FAILED' || statut == 'ECHEC';
|
||||
|
||||
/// Copie avec modifications
|
||||
WaveCheckoutSessionModel copyWith({
|
||||
String? id,
|
||||
String? waveSessionId,
|
||||
String? waveUrl,
|
||||
double? montant,
|
||||
String? devise,
|
||||
String? successUrl,
|
||||
String? errorUrl,
|
||||
String? statut,
|
||||
String? organisationId,
|
||||
String? nomOrganisation,
|
||||
String? membreId,
|
||||
String? nomMembre,
|
||||
String? typePaiement,
|
||||
String? description,
|
||||
String? referenceExterne,
|
||||
DateTime? dateCreation,
|
||||
DateTime? dateExpiration,
|
||||
DateTime? dateModification,
|
||||
bool? actif,
|
||||
int? version,
|
||||
}) {
|
||||
return WaveCheckoutSessionModel(
|
||||
id: id ?? this.id,
|
||||
waveSessionId: waveSessionId ?? this.waveSessionId,
|
||||
waveUrl: waveUrl ?? this.waveUrl,
|
||||
montant: montant ?? this.montant,
|
||||
devise: devise ?? this.devise,
|
||||
successUrl: successUrl ?? this.successUrl,
|
||||
errorUrl: errorUrl ?? this.errorUrl,
|
||||
statut: statut ?? this.statut,
|
||||
organisationId: organisationId ?? this.organisationId,
|
||||
nomOrganisation: nomOrganisation ?? this.nomOrganisation,
|
||||
membreId: membreId ?? this.membreId,
|
||||
nomMembre: nomMembre ?? this.nomMembre,
|
||||
typePaiement: typePaiement ?? this.typePaiement,
|
||||
description: description ?? this.description,
|
||||
referenceExterne: referenceExterne ?? this.referenceExterne,
|
||||
dateCreation: dateCreation ?? this.dateCreation,
|
||||
dateExpiration: dateExpiration ?? this.dateExpiration,
|
||||
dateModification: dateModification ?? this.dateModification,
|
||||
actif: actif ?? this.actif,
|
||||
version: version ?? this.version,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
List<Object?> get props => [
|
||||
id,
|
||||
waveSessionId,
|
||||
waveUrl,
|
||||
montant,
|
||||
devise,
|
||||
successUrl,
|
||||
errorUrl,
|
||||
statut,
|
||||
organisationId,
|
||||
nomOrganisation,
|
||||
membreId,
|
||||
nomMembre,
|
||||
typePaiement,
|
||||
description,
|
||||
referenceExterne,
|
||||
dateCreation,
|
||||
dateExpiration,
|
||||
dateModification,
|
||||
actif,
|
||||
version,
|
||||
];
|
||||
|
||||
@override
|
||||
String toString() => 'WaveCheckoutSessionModel(id: $id, '
|
||||
'waveSessionId: $waveSessionId, montant: $montantFormate, '
|
||||
'statut: $statut, typePaiement: $typePaiement)';
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'wave_checkout_session_model.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// JsonSerializableGenerator
|
||||
// **************************************************************************
|
||||
|
||||
WaveCheckoutSessionModel _$WaveCheckoutSessionModelFromJson(
|
||||
Map<String, dynamic> json) =>
|
||||
WaveCheckoutSessionModel(
|
||||
id: json['id'] as String?,
|
||||
waveSessionId: json['waveSessionId'] as String,
|
||||
waveUrl: json['waveUrl'] as String?,
|
||||
montant: (json['montant'] as num).toDouble(),
|
||||
devise: json['devise'] as String,
|
||||
successUrl: json['successUrl'] as String,
|
||||
errorUrl: json['errorUrl'] as String,
|
||||
statut: json['statut'] as String,
|
||||
organisationId: json['organisationId'] as String?,
|
||||
nomOrganisation: json['nomOrganisation'] as String?,
|
||||
membreId: json['membreId'] as String?,
|
||||
nomMembre: json['nomMembre'] as String?,
|
||||
typePaiement: json['typePaiement'] as String?,
|
||||
description: json['description'] as String?,
|
||||
referenceExterne: json['referenceExterne'] as String?,
|
||||
dateCreation: DateTime.parse(json['dateCreation'] as String),
|
||||
dateExpiration: json['dateExpiration'] == null
|
||||
? null
|
||||
: DateTime.parse(json['dateExpiration'] as String),
|
||||
dateModification: json['dateModification'] == null
|
||||
? null
|
||||
: DateTime.parse(json['dateModification'] as String),
|
||||
actif: json['actif'] as bool,
|
||||
version: (json['version'] as num).toInt(),
|
||||
);
|
||||
|
||||
Map<String, dynamic> _$WaveCheckoutSessionModelToJson(
|
||||
WaveCheckoutSessionModel instance) =>
|
||||
<String, dynamic>{
|
||||
'id': instance.id,
|
||||
'waveSessionId': instance.waveSessionId,
|
||||
'waveUrl': instance.waveUrl,
|
||||
'montant': instance.montant,
|
||||
'devise': instance.devise,
|
||||
'successUrl': instance.successUrl,
|
||||
'errorUrl': instance.errorUrl,
|
||||
'statut': instance.statut,
|
||||
'organisationId': instance.organisationId,
|
||||
'nomOrganisation': instance.nomOrganisation,
|
||||
'membreId': instance.membreId,
|
||||
'nomMembre': instance.nomMembre,
|
||||
'typePaiement': instance.typePaiement,
|
||||
'description': instance.description,
|
||||
'referenceExterne': instance.referenceExterne,
|
||||
'dateCreation': instance.dateCreation.toIso8601String(),
|
||||
'dateExpiration': instance.dateExpiration?.toIso8601String(),
|
||||
'dateModification': instance.dateModification?.toIso8601String(),
|
||||
'actif': instance.actif,
|
||||
'version': instance.version,
|
||||
};
|
||||
Reference in New Issue
Block a user