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 242a90720e
commit b6584c83fa
1625 changed files with 145669 additions and 51249 deletions

View File

@@ -1,6 +1,5 @@
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'dart:typed_data';
import 'dart:convert';
import 'package:flutter_map/flutter_map.dart';
import 'package:geosector_app/core/data/models/amicale_model.dart';
@@ -62,7 +61,8 @@ class _AmicaleFormState extends State<AmicaleForm> {
bool _chkMdpManuel = false;
bool _chkUsernameManuel = false;
bool _chkUserDeletePass = false;
bool _chkLotActif = false;
// Pour l'upload du logo
final ImagePicker _picker = ImagePicker();
XFile? _selectedImage;
@@ -100,7 +100,8 @@ class _AmicaleFormState extends State<AmicaleForm> {
_chkMdpManuel = amicale?.chkMdpManuel ?? false;
_chkUsernameManuel = amicale?.chkUsernameManuel ?? false;
_chkUserDeletePass = amicale?.chkUserDeletePass ?? false;
_chkLotActif = amicale?.chkLotActif ?? false;
// Note : Le logo sera chargé dynamiquement depuis l'API
// Initialiser le service Stripe si API disponible
@@ -314,6 +315,7 @@ class _AmicaleFormState extends State<AmicaleForm> {
'chk_mdp_manuel': amicale.chkMdpManuel ? 1 : 0,
'chk_username_manuel': amicale.chkUsernameManuel ? 1 : 0,
'chk_user_delete_pass': amicale.chkUserDeletePass ? 1 : 0,
'chk_lot_actif': amicale.chkLotActif ? 1 : 0,
};
// Ajouter les champs réservés aux administrateurs si l'utilisateur est admin
@@ -564,6 +566,7 @@ class _AmicaleFormState extends State<AmicaleForm> {
chkMdpManuel: _chkMdpManuel,
chkUsernameManuel: _chkUsernameManuel,
chkUserDeletePass: _chkUserDeletePass,
chkLotActif: _chkLotActif,
) ??
AmicaleModel(
id: 0, // Sera remplacé par l'API
@@ -588,6 +591,7 @@ class _AmicaleFormState extends State<AmicaleForm> {
chkMdpManuel: _chkMdpManuel,
chkUsernameManuel: _chkUsernameManuel,
chkUserDeletePass: _chkUserDeletePass,
chkLotActif: _chkLotActif,
);
debugPrint('🔧 AmicaleModel créé: ${amicale.name}');
@@ -1392,6 +1396,20 @@ class _AmicaleFormState extends State<AmicaleForm> {
});
},
),
const SizedBox(height: 8),
// Checkbox pour activer le mode Lot
_buildCheckboxOption(
label: "Activer le mode Lot (distributions groupées)",
value: _chkLotActif,
onChanged: widget.readOnly
? null
: (value) {
setState(() {
_chkLotActif = value!;
});
},
),
const SizedBox(height: 25),
// Boutons Fermer et Enregistrer
@@ -1461,12 +1479,13 @@ class _AmicaleFormState extends State<AmicaleForm> {
@override
Widget build(BuildContext context) {
final theme = Theme.of(context);
// Note : Utilise le rôle RÉEL pour les permissions d'édition (pas le mode d'affichage)
final userRole = widget.userRepository.getUserRole();
// Déterminer si l'utilisateur peut modifier les champs restreints
// Déterminer si l'utilisateur peut modifier les champs restreints (super admin uniquement)
final bool canEditRestrictedFields = userRole > 2;
// Pour Stripe, les admins d'amicale (rôle 2) peuvent aussi configurer
// Pour Stripe, les admins d'amicale (rôle 2) et super admins peuvent configurer
final bool canEditStripe = userRole >= 2;
// Lecture seule pour les champs restreints si l'utilisateur n'a pas les droits