25 Commits

Author SHA1 Message Date
8dac04b9b1 docs: Marquer tâche #116 comme terminée (Remarque sous adresse)
La fonctionnalité d'affichage de la remarque dans la première card
du passage_form_dialog.dart était déjà implémentée (lignes 703-719).

Affichage inclut:
- Icône Icons.note
- Texte en italique
- Style grisé (opacité 0.7)
- Condition d'affichage si remarque non vide

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

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-26 17:55:34 +01:00
495ba046ec docs: Marquer les tâches #76 et le bug de purge Hive comme terminés
Tâche #76: Accès admin limité web uniquement -  Terminé 26/01
Bug: Boxes Hive non purgées à la connexion -  Corrigé 26/01

Corrections aujourd'hui:
- #15: Nouveau membre non synchronisé (sécurité + sync + API)
- #76: Accès admin limité web uniquement
- Bug: Nettoyage automatique des boxes Hive à la connexion
- Optimisation: operation_id en session (évite requêtes SQL)
2026-01-26 17:42:33 +01:00
957386f78c docs: Marquer la tâche #15 comme terminée
Tâche #15: Nouveau membre non synchronisé -  Terminé 26/01

Solutions implémentées:
- Sécurité: Password supprimé de la réponse API
- Synchronisation: Auto-création ope_users lors création membre
- API retourne id, ope_user_id et username
- Flutter récupère et sauvegarde correctement les données dans Hive
- Optimisation: operation_id stocké en session (évite requête SQL)
- Fallback SQL si operation_id absent de la session
2026-01-26 17:29:56 +01:00
9a185b15f3 fix: Récupérer username et ope_user_id depuis la réponse API
- Utiliser le username retourné par l'API au lieu du username local
- Récupérer ope_user_id depuis la réponse API
- Ajouter des logs de debug pour tracer les valeurs
- Fix: Le username s'affiche maintenant dans le tableau des membres après création
2026-01-26 17:18:51 +01:00
6fd02079c1 feat: Ajouter fallback SQL si operation_id absent de la session
- Si Session::getOperationId() retourne null, requête SQL de fallback
- Log de warning pour identifier les cas où la session n'est pas à jour
- Utile si l'utilisateur n'a pas fait de login récent
- Garantit que l'opération active est toujours récupérée
2026-01-26 17:06:00 +01:00
d0697b1e01 feat: Ajouter operation_id dans la session pour optimisation
- Ajout de operation_id dans Session::login()
- Ajout de Session::getOperationId() et Session::setOperationId()
- LoginController met à jour operation_id dans la session après récupération
- UserController utilise Session::getOperationId() au lieu d'une requête SQL
- Optimisation: évite une jointure SQL users+operations à chaque création de membre
2026-01-26 17:01:46 +01:00
0687900564 fix: Récupérer l'opération active depuis la table operations
- Corrige l'erreur SQL 'Unknown column fk_operation in users'
- L'opération active est récupérée depuis operations.chk_active = 1
- Jointure avec users pour filtrer par entité de l'admin créateur
- Query: SELECT o.id FROM operations o INNER JOIN users u ON u.fk_entite = o.fk_entite WHERE u.id = ? AND o.chk_active = 1
2026-01-26 16:57:08 +01:00
c24a3afe6a feat: Créer automatiquement ope_users lors de la création d'un membre
PROBLÈME TÂCHE #15 :
Quand un admin crée un nouveau membre, seul users.id était créé.
Aucune entrée ope_users n'était créée automatiquement.
Résultat : Le nouveau membre n'apparaissait pas dans Flutter car
il n'était pas synchronisé avec l'opération active.

SOLUTION IMPLÉMENTÉE :
1. Récupération de l'opération active de l'admin créateur (users.fk_operation)
2. Création automatique d'une entrée dans ope_users si opération active
3. Retour de ope_user_id dans la réponse API (en plus de users.id)

NOUVELLE RÉPONSE API :
{
  "status": "success",
  "message": "Utilisateur créé avec succès",
  "id": "10023668",           // users.id (table centrale)
  "ope_user_id": "12345",     // ope_users.id (table opérationnelle)
  "username": "pr.350-renn731"
}

COMPORTEMENT :
- Si admin a une opération active → ope_users créé automatiquement
- Si pas d'opération active → ope_user_id sera null (membre non affecté)

LOGS :
- Log INFO si affectation réussie
- Log WARNING si pas d'opération active

Travail sur tâche #15 (Nouveau membre non synchronisé)

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

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-26 16:42:55 +01:00
6eefa218d8 security: Supprimer le mot de passe de la réponse POST /api/users
PROBLÈME DE SÉCURITÉ :
Le mot de passe était retourné dans la réponse JSON lors de la création
d'un utilisateur (quand généré automatiquement).

RISQUES :
- Exposition dans les logs de proxies/load balancers
- Visible dans DevTools navigateur
- Peut être loggé côté client en cas d'erreur
- Reste en mémoire/historique des requêtes

SOLUTION :
- Suppression complète du champ 'password' de la réponse
- Le mot de passe est DÉJÀ envoyé par email (ligne 525)
- L'admin reçoit seulement : id + username

RÉPONSE AVANT :
{
  "status": "success",
  "message": "Utilisateur créé avec succès",
  "id": "10023668",
  "username": "pr.350-renn731",
  "password": "MPar<2a8^2&VnLE"  //  FAILLE
}

RÉPONSE APRÈS :
{
  "status": "success",
  "message": "Utilisateur créé avec succès",
  "id": "10023668",
  "username": "pr.350-renn731"  //  SÉCURISÉ
}

Travail sur tâche #15 (Nouveau membre non synchronisé)

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

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-26 16:30:03 +01:00
e3d9433442 docs: Marquer tâche #30 comme complétée (26/01)
Membres sélectionnés haut liste - terminé

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

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-26 16:20:30 +01:00
35e9ddbed5 fix: Remplacer NavigationHelper par NavigationConfig dans map_page.dart
NavigationHelper a été supprimé lors du refactoring #74.
Utilisation de NavigationConfig à la place.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-26 16:06:51 +01:00
3daf5a204a docs: Marquer tâche #74 comme complétée (26/01)
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-26 15:28:10 +01:00
1cdb4ec58c refactor: Simplifier DashboardLayout/AppScaffold (tâche #74)
Centralisation et simplification de l'architecture de navigation :

CRÉATIONS :
- navigation_config.dart : Configuration centralisée de la navigation
  * Toutes les destinations (admin/user)
  * Logique de navigation (index → route)
  * Résolution inverse (route → index)
  * Titres et utilitaires

- backgrounds/dots_painter.dart : Painter de points décoratifs
  * Extrait depuis AppScaffold et AdminScaffold
  * Paramétrable (opacité, densité, seed)
  * Réutilisable

- backgrounds/gradient_background.dart : Fond dégradé
  * Gère les couleurs admin (rouge) / user (vert)
  * Option pour afficher/masquer les points
  * Widget indépendant

SIMPLIFICATIONS :
- app_scaffold.dart : 426 → 192 lignes (-55%)
  * Utilise NavigationConfig au lieu de NavigationHelper
  * Utilise GradientBackground au lieu de code dupliqué
  * Suppression de DotsPainter local

- dashboard_layout.dart : 140 → 77 lignes (-45%)
  * Suppression validations excessives (try/catch, vérifications)
  * Code épuré et plus lisible

SUPPRESSIONS :
- admin_scaffold.dart : Supprimé (207 lignes)
  * Obsolète depuis unification avec AppScaffold
  * Code dupliqué avec AppScaffold
  * AdminNavigationHelper fusionné dans NavigationConfig

RÉSULTATS :
- Avant : 773 lignes (AppScaffold + AdminScaffold + DashboardLayout)
- Après : 623 lignes (tout inclus)
- Réduction nette : -150 lignes (-19%)
- Architecture plus claire et maintenable
- Aucune duplication de code
- Navigation centralisée en un seul endroit

Résout tâche #74 du PLANNING-2026-Q1.md

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

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-26 15:27:54 +01:00
7345cf805e fix: Correction format version YY.MM.DDNN (3 parties au lieu de 4)
- VERSION file stocke maintenant: 26.01.2604 (3 parties)
- Au lieu de: 26.01.26.04 (4 parties - invalide pour semver)
- Regex ajustée pour parser le nouveau format: ^YY.MM.DDNN$
- Détection changement de date compare YY, MM, DD séparément
- Build number reste YYMMDDNN (26012604)
- Commentaires mis à jour pour refléter format YY.MM.DDNN

Résout: "Could not parse 26.01.26.04+26012604"

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

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-26 12:35:09 +01:00
eef1fc8d32 fix: Format semver YY.MM.DDNN pour compatibilité Dart/Flutter
- Correction format version pour pubspec.yaml: YY.MM.DDNN
- VERSION file garde format lisible: 26.01.26.03
- pubspec.yaml reçoit format semver: 26.01.2603+26012603
- Concat DD+NN pour 3ème partie: 26+03 = 2603
- Build number complet: 26012603

Résout erreur: Could not parse '26.01.26.03+26012603'

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

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-26 12:30:40 +01:00
097335193e fix: Ajout fonction echo_success manquante
- Ajout fonction echo_success() avec symbole ✓ en vert
- Utilisée dans le système de versioning automatique
- Correction erreur : "echo_success : commande introuvable"

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

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-26 12:22:36 +01:00
cf1e54d8d0 docs: Mise à jour commentaires AppInfoService pour format YY.MM.DD.NN
- Clarification format version : YY.MM.DD.NN
- Commentaire : auto-incrémenté à chaque déploiement DEV
- Build number format : YYMMDDNN (sans points)
- Full version format : vYY.MM.DD.NN+YYMMDDNN

La version complète sera automatiquement affichée dans :
- splash_page.dart (écran chargement)
- login_page.dart (connexion)
- register_page.dart (inscription)
- dashboard_app_bar.dart (tableau de bord)

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

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-26 12:15:37 +01:00
d6c4c6d228 feat: Versioning automatique YY.MM.DD.NN pour DEV
- Système 100% automatique de numérotation de version
- Format : YY.MM.DD.NN (ex: 26.01.27.01)
- Détection automatique de la date du jour
- Incrémentation auto du build number (.01 → .02 → .03...)
- Reset auto à .01 lors d'un changement de date
- Compatible avec ancien format (conversion auto)

Logique :
1. Récupération date système : date +%y.%m.%d
2. Si date différente de VERSION → YY.MM.DD.01
3. Si même date → incrémenter dernier nombre
4. Écriture dans VERSION et pubspec.yaml

Exemple :
- 26/01 build 1 → 26.01.26.01
- 26/01 build 2 → 26.01.26.02
- 27/01 build 1 → 26.01.27.01 (reset auto)

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

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-26 12:14:54 +01:00
b3e03ef6e6 feat: Filtres membres/secteurs dynamiques et liés (#42)
- Filtrage croisé via box user_sector (UserSectorModel)
- Si secteur sélectionné → membres filtrés (uniquement ce secteur)
- Si membre sélectionné → secteurs filtrés (uniquement ses secteurs)
- Relation : UserSectorModel.opeUserId ↔ UserSectorModel.fkSector
- Import UserSectorModel ajouté
- Simplification dropdown secteurs (liste directe, plus de map)

Comportement :
1. Aucun filtre → tous les membres et tous les secteurs
2. Secteur choisi → liste membres réduite
3. Membre choisi → liste secteurs réduite
4. Les deux choisis → affichage le plus restreint

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

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-26 12:00:28 +01:00
9c837f8adb feat: Bouton réinitialiser filtres historique admin (#42)
- Ajout bouton IconButton avec icône clear (X)
- Visible uniquement si au moins un filtre est actif
- Réinitialise : recherche textuelle + membre + secteur
- Remet les 2 selects à "Tous"
- Style : fond gris clair, padding 12px
- Tooltip : "Réinitialiser les filtres"

Affichage conditionnel :
isAdmin && (recherche OU membre OU secteur non vides)

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

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-26 11:51:18 +01:00
16b30b0e9e feat: Poids police inputs w600 + suppression thème dark
- Augmentation poids police inputs : w500 → w600 (semi-bold)
- bodyLarge w600 dans _getTextTheme (statique)
- bodyLarge w600 dans getResponsiveTextTheme (responsive)
- Suppression complète du thème dark inutilisé (~95 lignes)
- Suppression constantes backgroundDarkColor et textDarkColor
- Application forcée sur tous les TextFormField/TextField

Amélioration de la lisibilité des champs de saisie.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-26 11:41:22 +01:00
c1c6c55cbe feat: Format affichage membres avec secteur (#42)
- Format dropdown membre : "FirstName name (sectName)"
- Gestion des cas où firstName ou name sont vides
- Affichage sectName entre parenthèses si disponible
- Fallback : "Membre #opeUserId" si aucun nom

Exemples :
- "Pierre Dupont (Secteur A)"
- "Pierre (Secteur B)"
- "Dupont (Secteur C)"

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

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-26 11:29:17 +01:00
3c3a9b90aa fix: Utiliser membre.opeUserId pour filtre membre (#42)
- Correction : utilise membre.opeUserId (et non membre.id)
- Liste tous les membres ayant un opeUserId != null
- Filtre passages par passage.fkUser == membre.opeUserId
- Retire les debugPrint inutiles
- Affichage : membre.name ou membre.firstName

Relation: MembreModel.opeUserId == PassageModel.fkUser

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

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-26 11:25:42 +01:00
6952417147 fix: Utiliser box Hive membres pour filtre membre (#42)
- Correction du filtre membre : utilise membreRepository.getMembresBox()
- Récupère les membres depuis la box Hive (ope_users)
- Filtre uniquement les membres ayant des passages (memberIdsInPassages)
- Affichage : member.name ou member.firstName
- Tri alphabétique par nom

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

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-26 11:12:57 +01:00
a392305820 feat: Ajout filtres membre/secteur dans historique admin (#42)
- Ajout de 2 dropdowns de filtres dans history_page.dart (admin uniquement)
- Filtre par membre (fkUser) : liste dynamique depuis passages
- Filtre par secteur (fkSector) : liste dynamique depuis passages
- Valeurs par défaut : "Tous" pour chaque filtre
- Tri alphabétique des dropdowns
- Mise à jour du planning : #42 validée (26/01)

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

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-26 10:53:07 +01:00
3055 changed files with 78087 additions and 2324 deletions

0
.gitignore vendored Normal file → Executable file
View File

0
CHANGELOG-v3.1.6.md Normal file → Executable file
View File

0
Capture.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 255 KiB

After

Width:  |  Height:  |  Size: 255 KiB

0
HOWTO-PROKOV.md Normal file → Executable file
View File

0
MONITORING.md Normal file → Executable file
View File

0
PLANNING-STRIPE-ADMIN.md Normal file → Executable file
View File

2
VERSION Normal file → Executable file
View File

@@ -1 +1 @@
3.6.3
26.01.2607

Binary file not shown.

0
api/TODO-API.md Normal file → Executable file
View File

0
api/alter_table_geometry.sql Normal file → Executable file
View File

0
api/config/nginx/pra-geo-http-only.conf Normal file → Executable file
View File

0
api/config/nginx/pra-geo-production.conf Normal file → Executable file
View File

0
api/config/whitelist_ip_cache.txt Normal file → Executable file
View File

0
api/create_table_x_departements_contours.sql Normal file → Executable file
View File

0
api/data/README.md Normal file → Executable file
View File

0
api/docs/API-SECURITY.md Normal file → Executable file
View File

0
api/docs/CHAT_MODULE.md Normal file → Executable file
View File

0
api/docs/CHK_USER_DELETE_PASS_INFO.md Normal file → Executable file
View File

0
api/docs/DELETE_PASSAGE_PERMISSIONS.md Normal file → Executable file
View File

0
api/docs/EVENTS-LOG.md Normal file → Executable file
View File

0
api/docs/FIX_USER_CREATION_400_ERRORS.md Normal file → Executable file
View File

0
api/docs/GESTION-SECTORS.md Normal file → Executable file
View File

0
api/docs/INSTALL_FPDF.md Normal file → Executable file
View File

0
api/docs/PLANNING-STRIPE-API.md Normal file → Executable file
View File

0
api/docs/PREPA_PROD.md Normal file → Executable file
View File

0
api/docs/SETUP_EMAIL_QUEUE_CRON.md Normal file → Executable file
View File

0
api/docs/STRIPE-BACKEND-MIGRATION.md Normal file → Executable file
View File

0
api/docs/STRIPE-TAP-TO-PAY-FLOW.md Normal file → Executable file
View File

0
api/docs/STRIPE-TAP-TO-PAY-REQUIREMENTS.md Normal file → Executable file
View File

0
api/docs/STRIPE_VERIF.md Normal file → Executable file
View File

0
api/docs/UPLOAD-MIGRATION-RECAP.md Normal file → Executable file
View File

0
api/docs/UPLOAD-REORGANIZATION.md Normal file → Executable file
View File

0
api/docs/USERNAME_VALIDATION_CHANGES.md Normal file → Executable file
View File

0
api/docs/_logo_recu.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 99 KiB

After

Width:  |  Height:  |  Size: 99 KiB

0
api/docs/_recu_template.pdf Normal file → Executable file
View File

0
api/docs/contour-des-departements.geojson Normal file → Executable file
View File

0
api/docs/create_table_user_devices.sql Normal file → Executable file
View File

0
api/docs/departements_limitrophes.md Normal file → Executable file
View File

0
api/docs/logrotate_email_queue.conf Normal file → Executable file
View File

0
api/docs/nouvelles-routes-session-refresh.txt Normal file → Executable file
View File

0
api/docs/recu_13718.pdf Normal file → Executable file
View File

0
api/docs/recu_19500582.pdf Normal file → Executable file
View File

0
api/docs/recu_19500586.pdf Normal file → Executable file
View File

0
api/docs/recu_537254062.pdf Normal file → Executable file
View File

0
api/docs/recu_972506460.pdf Normal file → Executable file
View File

0
api/docs/traite_batiments.sql Normal file → Executable file
View File

0
api/docs/x_departements_contours.sql Normal file → Executable file
View File

0
api/docs/x_departements_contours_corrected.sql Normal file → Executable file
View File

0
api/docs/x_departements_contours_fixed.sql Normal file → Executable file
View File

0
api/migration_add_departements_contours.sql Normal file → Executable file
View File

0
api/migration_add_sectors_adresses.sql Normal file → Executable file
View File

0
api/migrations/add_dept_limitrophes.sql Normal file → Executable file
View File

0
api/migrations/integrate_contours_to_departements.sql Normal file → Executable file
View File

0
api/migrations/update_all_dept_limitrophes.sql Normal file → Executable file
View File

1
api/ralph Submodule

Submodule api/ralph added at 098579b5a1

0
api/scripts/CORRECTIONS_MIGRATE.md Normal file → Executable file
View File

0
api/scripts/MIGRATION_PATCH_INSTRUCTIONS.md Normal file → Executable file
View File

0
api/scripts/README-migration.md Normal file → Executable file
View File

0
api/scripts/check_geometry_validity.sql Normal file → Executable file
View File

0
api/scripts/config/update_php_fpm_settings.sh Normal file → Executable file
View File

0
api/scripts/create_addresses_users.sql Normal file → Executable file
View File

0
api/scripts/create_addresses_users_by_env.sql Normal file → Executable file
View File

0
api/scripts/cron/CRON.md Normal file → Executable file
View File

0
api/scripts/cron/cleanup_security_data.php Normal file → Executable file
View File

0
api/scripts/cron/process_email_queue_with_daily_log.sh Normal file → Executable file
View File

0
api/scripts/cron/rotate_event_logs.php Normal file → Executable file
View File

0
api/scripts/fix_geometry_for_spatial_index.sql Normal file → Executable file
View File

0
api/scripts/import_departements_from_file.php Normal file → Executable file
View File

0
api/scripts/import_department_boundaries.php Normal file → Executable file
View File

0
api/scripts/init_departements_contours.php Normal file → Executable file
View File

0
api/scripts/migrate_uploads_structure.php Normal file → Executable file
View File

0
api/scripts/migration2/README.md Normal file → Executable file
View File

0
api/scripts/migration2/geo_app_structure.sql Normal file → Executable file
View File

Some files were not shown because too many files have changed in this diff Show More