feat: Version 3.3.4 - Nouvelle architecture pages, optimisations widgets Flutter et API

- Mise à jour VERSION vers 3.3.4
- Optimisations et révisions architecture API (deploy-api.sh, scripts de migration)
- Ajout documentation Stripe Tap to Pay complète
- Migration vers polices Inter Variable pour Flutter
- Optimisations build Android et nettoyage fichiers temporaires
- Amélioration système de déploiement avec gestion backups
- Ajout scripts CRON et migrations base de données

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
pierre
2025-10-05 20:11:15 +02:00
parent 2786252307
commit 570a1fa1f0
212 changed files with 24275 additions and 11321 deletions

View File

@@ -82,6 +82,9 @@ class AmicaleModel extends HiveObject {
@HiveField(25)
final bool chkUserDeletePass;
@HiveField(26)
final bool chkLotActif;
AmicaleModel({
required this.id,
required this.name,
@@ -109,6 +112,7 @@ class AmicaleModel extends HiveObject {
this.chkUsernameManuel = false,
this.logoBase64,
this.chkUserDeletePass = false,
this.chkLotActif = false,
});
// Factory pour convertir depuis JSON (API)
@@ -145,6 +149,8 @@ class AmicaleModel extends HiveObject {
json['chk_username_manuel'] == 1 || json['chk_username_manuel'] == true;
final bool chkUserDeletePass =
json['chk_user_delete_pass'] == 1 || json['chk_user_delete_pass'] == true;
final bool chkLotActif =
json['chk_lot_actif'] == 1 || json['chk_lot_actif'] == true;
// Traiter le logo si présent
String? logoBase64;
@@ -199,6 +205,7 @@ class AmicaleModel extends HiveObject {
chkUsernameManuel: chkUsernameManuel,
logoBase64: logoBase64,
chkUserDeletePass: chkUserDeletePass,
chkLotActif: chkLotActif,
);
}
@@ -230,6 +237,7 @@ class AmicaleModel extends HiveObject {
'chk_mdp_manuel': chkMdpManuel ? 1 : 0,
'chk_username_manuel': chkUsernameManuel ? 1 : 0,
'chk_user_delete_pass': chkUserDeletePass ? 1 : 0,
'chk_lot_actif': chkLotActif ? 1 : 0,
// Note: logoBase64 n'est pas envoyé via toJson (lecture seule depuis l'API)
};
}
@@ -261,6 +269,7 @@ class AmicaleModel extends HiveObject {
bool? chkUsernameManuel,
String? logoBase64,
bool? chkUserDeletePass,
bool? chkLotActif,
}) {
return AmicaleModel(
id: id,
@@ -289,6 +298,7 @@ class AmicaleModel extends HiveObject {
chkUsernameManuel: chkUsernameManuel ?? this.chkUsernameManuel,
logoBase64: logoBase64 ?? this.logoBase64,
chkUserDeletePass: chkUserDeletePass ?? this.chkUserDeletePass,
chkLotActif: chkLotActif ?? this.chkLotActif,
);
}
}

View File

@@ -43,13 +43,14 @@ class AmicaleModelAdapter extends TypeAdapter<AmicaleModel> {
chkUsernameManuel: fields[23] as bool,
logoBase64: fields[24] as String?,
chkUserDeletePass: fields[25] as bool,
chkLotActif: fields[26] as bool,
);
}
@override
void write(BinaryWriter writer, AmicaleModel obj) {
writer
..writeByte(26)
..writeByte(27)
..writeByte(0)
..write(obj.id)
..writeByte(1)
@@ -101,7 +102,9 @@ class AmicaleModelAdapter extends TypeAdapter<AmicaleModel> {
..writeByte(24)
..write(obj.logoBase64)
..writeByte(25)
..write(obj.chkUserDeletePass);
..write(obj.chkUserDeletePass)
..writeByte(26)
..write(obj.chkLotActif);
}
@override

View File

@@ -92,6 +92,9 @@ class PassageModel extends HiveObject {
@HiveField(28)
bool isSynced;
@HiveField(29)
String? stripePaymentId;
PassageModel({
required this.id,
required this.fkOperation,
@@ -122,6 +125,7 @@ class PassageModel extends HiveObject {
required this.lastSyncedAt,
this.isActive = true,
this.isSynced = false,
this.stripePaymentId,
});
// Factory pour convertir depuis JSON (API)
@@ -192,6 +196,7 @@ class PassageModel extends HiveObject {
lastSyncedAt: DateTime.now(),
isActive: true,
isSynced: true,
stripePaymentId: json['stripe_payment_id']?.toString(),
);
} catch (e) {
debugPrint('❌ Erreur parsing PassageModel: $e');
@@ -229,6 +234,7 @@ class PassageModel extends HiveObject {
'name': name,
'email': email,
'phone': phone,
'stripe_payment_id': stripePaymentId,
};
}
@@ -263,6 +269,7 @@ class PassageModel extends HiveObject {
DateTime? lastSyncedAt,
bool? isActive,
bool? isSynced,
String? stripePaymentId,
}) {
return PassageModel(
id: id ?? this.id,
@@ -294,6 +301,7 @@ class PassageModel extends HiveObject {
lastSyncedAt: lastSyncedAt ?? this.lastSyncedAt,
isActive: isActive ?? this.isActive,
isSynced: isSynced ?? this.isSynced,
stripePaymentId: stripePaymentId ?? this.stripePaymentId,
);
}

View File

@@ -46,13 +46,14 @@ class PassageModelAdapter extends TypeAdapter<PassageModel> {
lastSyncedAt: fields[26] as DateTime,
isActive: fields[27] as bool,
isSynced: fields[28] as bool,
stripePaymentId: fields[29] as String?,
);
}
@override
void write(BinaryWriter writer, PassageModel obj) {
writer
..writeByte(29)
..writeByte(30)
..writeByte(0)
..write(obj.id)
..writeByte(1)
@@ -110,7 +111,9 @@ class PassageModelAdapter extends TypeAdapter<PassageModel> {
..writeByte(27)
..write(obj.isActive)
..writeByte(28)
..write(obj.isSynced);
..write(obj.isSynced)
..writeByte(29)
..write(obj.stripePaymentId);
}
@override