Système complet de gestion des contrats, plannings et factures
Organisez efficacement vos interventions, suivez vos clients et gérez votre facturation en un seul endroit.
- 📖 À Propos
- ✨ Fonctionnalités
- 🚀 Fonctionnalités Avancées
- 🏗️ Architecture
- 💾 Base de Données
- 🔧 Utilitaires
- 📱 Écrans Principaux
- 🐛 Bugs Fixes Récents
- 🚀 Démarrage Rapide
- 📦 Dépendances
- 📊 État du Projet
- 👨💻 Auteur
- 📄 Licence
- 🎯 Roadmap Futures
- 💡 Contribution
- 🐛 Signaler un Bug
Planificator est une application Flutter moderne et intuitive conçue pour révolutionner la gestion des contrats et de la facturation. Actuellement en version 2.1.1 (Stable), elle offre une solution complète pour :
- 📋 Gérer efficacement vos clients et contrats
- 📅 Planifier vos interventions avec un calendrier interactif
- 💰 Suivre vos factures et effectuer des modifications de prix en cascade
- 📊 Consulter un historique complet de vos actions
- 🔍 Rechercher et filtrer rapidement vos données
- 🎯 Centraliser la gestion des contrats et factures
- 📱 Offrir une expérience mobile fluide et intuitive
- 🔐 Garantir la fiabilité et la précision des données
- ⚡ Optimiser les opérations quotidiennes
- 📈 Supporter la croissance avec une architecture robuste
- Système de connexion sécurisée
- Hash des mots de passe avec bcrypt
- Validation des identifiants
- Sessions utilisateur persistantes
- Système d'enregistrement (inscription)
- Création de nouveaux comptes
- Validation des données
- Protection des données sensibles
- Création, édition et suppression de clients
- Support des catégories (Particulier, Organisation, Société)
- Gestion complète : NIF, STAT, Adresse, Téléphone, Email
- Classification par axe géographique (Nord, Sud, Est, Ouest, Centre)
- Comptage précis des traitements par client
- Recherche et filtrage des clients
- Création de contrats avec sélection multiple de traitements
- Support des contrats déterminés (date fin) et indéterminés
- Affichage complet : numéro, référence, dates, durée
- Gestion des traitements associés avec détails
- Rechargement automatique après création
- Vue complète des contrats actifs et archivés
- Recherche moderne : par client, traitement, date
- Groupement intelligent par client-traitement
- Affichage du montant total, payé et non payé
- Tri des factures par date décroissante (récentes en premier)
- Modification de prix en cascade :
- Change le prix d'une facture
- Applique automatiquement à toutes les factures suivantes du même traitement
- Crée une piste d'audit dans
Historique_prix
- Validation des montants (positifs uniquement)
- Gestion automatique des espaces dans les entrées
- États des factures (payée, partiellement payée, impayée)
- Calendrier interactif avec
table_calendar - Affichage des traitements prévus et en cours
- Filtrage par état (À venir, En cours, Effectué)
- Génération automatique des dates de planning
- Bouton de rafraîchissement flottant
- Vue détaillée des plannings avec statuts
- Vue "En cours" : traitements du mois actuel
- Vue "À venir" : traitements futurs (sans redondance 1 mois)
- Affichage : dates, noms, états et axes
- Bouton de rafraîchissement pour mise à jour en temps réel
- Charge tous les statuts (pas seulement "À venir")
- Suivi complet de toutes les actions
- Affichage des modifications de prix avec ancien/nouveau montant
- Piste d'audit pour conformité
- Historique des traitements et modifications
- Export en Excel
- Export des factures par client-traitement
- Formatting automatique avec en-têtes
- Support des montants et dates formatés
- Export de rapports
- Données complètes des factures
- Historique des modifications
- Statistiques de gestion
- Gestion des préférences utilisateur
- Configuration de la base de données
- Paramètres d'affichage
- Gestion des notifications
- Informations de l'application
- Numéro de version actuel
- Droits d'auteur et crédits
- Liens utiles
- Ajout de remarques sur les traitements
- Signalement de problèmes ou d'anomalies
- Suivi des commentaires utilisateur
- Piste d'audit des signalements
- Notifications locales intégrées
- Alertes planifiées pour les traitements
- Rappels des factures impayées
- Gestion des événements avec timezone
┌─────────────────────────────────────────────────────┐
│ Planificator - Gestion Contrats │
├─────────────────────────────────────────────────────┤
│ Couche Présentation (Écrans & Widgets) │
│ ├─ HomeScreen │
│ ├─ ContratScreen (avec création multi-étapes) │
│ ├─ FactureScreen (avec recherche & modification) │
│ ├─ PlanningScreen (avec calendrier) │
│ └─ HistoriqueScreen │
├─────────────────────────────────────────────────────┤
│ Couche Métier (Providers & Repositories) │
│ ├─ FactureRepository │
│ ├─ ContratRepository │
│ ├─ PlanningDetailsRepository │
│ ├─ ClientRepository │
│ └─ SignalementRepository │
├─────────────────────────────────────────────────────┤
│ Couche Données (Services & DB) │
│ ├─ DatabaseService (MySQL connection) │
│ ├─ NumberFormatter (utilitaires) │
│ └─ Database MySQL (schema optimisé) │
└─────────────────────────────────────────────────────┘
- Framework : Flutter 3.x
- Langage : Dart 3.x
- Gestion d'état : Provider (MultiProvider pattern)
- Base de données : MySQL avec SQL joins optimisés
- Design : Material Design 3
- Logging : Logger avec emojis pour meilleure lisibilité
- Localisation : Intl (fr_FR)
- Calendrier : table_calendar pour interactions avancées
lib/
├── main.dart # Point d'entrée et Provider setup
├── config/
│ └── database_config.dart # Configuration MySQL
├── core/
│ ├── constants.dart # Constantes de l'app
│ └── theme.dart # Thème Material Design 3
├── models/ # Modèles de données
│ ├── client.dart
│ ├── contrat.dart
│ ├── facture.dart
│ ├── planning_event.dart
│ └── ...
├── repositories/ # Couche d'accès aux données (10+ repos)
│ ├── facture_repository.dart # Opérations sur factures + prix
│ ├── contrat_repository.dart # Opérations sur contrats
│ ├── client_repository.dart # Gestion des clients
│ ├── planning_details_repository.dart # Planning détaillé
│ └── ...
├── screens/
│ ├── home/
│ │ └── home_screen.dart
│ ├── contrat/
│ │ └── contrat_screen.dart
│ ├── facture/
│ │ └── facture_screen.dart
│ ├── planning/
│ │ └── planning_screen.dart
│ └── ...
├── services/
│ └── database_service.dart # Service de connexion MySQL
├── utils/
│ └── number_formatter.dart # Utilitaires de formatting des montants
└── widgets/ # Composants réutilisables
Facture (facture_id, montant, etat, date_traitement)
↓ planning_detail_id
PlanningDetails (statut, date_planification)
↓ planning_id
Planning (traitement_id, redondance)
↓ traitement_id
Traitement (contrat_id, id_type_traitement)
↓ contrat_id, id_type_traitement
Contrat + TypeTraitement
↓ client_id
Client (nom, prenom, axe, adresse)
Historique_prix : Piste d'audit des modifications (old_amount, new_amount, change_date)
Remarque : Commentaires et confirmations sur traitements
- Treatment Counting :
COUNT(DISTINCT t.traitement_id)pour éviter les doublons - Price Cascade : Mise à jour des factures suivantes du même traitement
- DateTime Flexible : Support de différents formats de base de données
- Indexed Joins : Joins optimisés pour les performances
Gère le parsing et le formatting des montants avec précision :
// Parsing montants avec espaces
final amount = NumberFormatter.parseMontant("50 000"); // → 50000
final amount2 = NumberFormatter.parseMontant("-50 000"); // → 50000 (positif)
// Formatting avec séparateurs
final formatted = NumberFormatter.formatMontant(50000); // → "50 000"
// Validation
final isValid = NumberFormatter.isValidMontant("50 000"); // → true
final isValid2 = NumberFormatter.isValidMontant("abc"); // → falseFonctionnalités Clés :
- 🔢 Accepte les espaces : "50 000" → 50000
- ✅ Montants positifs uniquement (pas de négatifs)
- 🎯 Validation robuste avec regex
- 📊 Formatting avec séparateurs d'espaces
-
Écran de Connexion
- Formulaire de connexion sécurisée
- Validation des identifiants
- Gestion des erreurs de connexion
- Lien vers inscription
-
Écran d'Enregistrement
- Création de nouveaux comptes
- Validation des mots de passe
- Confirmation des données
- Retour à la connexion
- Deux tables côte à côte : "En cours" et "À venir"
- ⚡ Bouton de rafraîchissement flottant
- 📊 Affichage dynamique avec filtrage par statut
- 🔄 Charge automatiquement tous les statuts
- Champs affichés : Date, Nom traitement, État, Axe
- 📑 Liste des contrats avec filtrage par client
- 🔍 Détails complets d'un contrat :
- Numéro contrat (#ID)
- Durée totale et durée restante
- Date début/fin (fin masquée si indéterminée)
- Traitements associés
- ➕ Formulaire de création multi-étapes :
- Sélection du client
- Sélection multiple des traitements
- Configuration des dates
- Revue et confirmation
- 📊 Résumé : nombre de clients, contrats et traitements
- 🔍 Onglet de Recherche Moderne
- Filtrage par client
- Filtrage par traitement
- Recherche par date
- 📊 Groupement Intelligent
- Cartes groupées par client-traitement
- Affichage du montant total, payé et non payé
- État visuel des paiements
- ✏️ Modification de Prix
- Dialog avec ancien prix (lecture seule) et nouveau prix
- Validation : montants positifs uniquement
- Application en cascade : change le prix et les suivantes du même traitement
- 📋 Détails des Factures
- Liste triée par date décroissante (récentes en premier)
- Affichage du montant et de l'état
- 🗓️ Calendrier interactif avec
table_calendar - 📍 Génération automatique des dates de planning
- 🔄 Filtrage par statut (À venir, En cours, Effectué)
- 🔄 Bouton de rafraîchissement flottant
- 📊 Vue détaillée des événements planifiés
- 📖 Affichage complet de tous les historiques
- 🔄 Tri par date décroissante (récentes en premier)
- 📝 Détails des modifications :
- Type de modification
- Ancien et nouveau montants
- Date de changement
- Utilisateur responsable
- 🔍 Recherche et filtrage par client/traitement
- ➕ Ajout de remarques sur les traitements
- 🚩 Signalement de problèmes
- 💬 Gestion des commentaires
- 🔔 Suivi des signalements
- 📊 Export en Excel
- Export des factures complètes
- Formatting professionnel
- Support de multiples formats
- 📋 Rapports
- Statistiques de gestion
- Historique des modifications
- État des factures par client
- ⚙️ Configuration générale
- 🗄️ Gestion de la base de données
- 🎨 Préférences d'affichage
- 📱 Paramètres des notifications
- 🔔 Configuration des alertes
- 📋 Informations de l'application
- 🔢 Numéro de version
- 👨💻 Informations de l'auteur
- 📚 Liens utiles
- ⚖️ Licences et crédits
| Bug | Cause | Solution | Statut |
|---|---|---|---|
| Client page infinite loading sur Windows | MySQL strict mode + GROUP BY complexe avec COUNT/DISTINCT | Simplifié avec SELECT DISTINCT + WHERE clause au lieu de HAVING + subquery pour treatment_count |
✅ Résolu |
| Contract count showing 0 on first load | _contratCount variable updated in FutureBuilder without setState() call |
Added setState() callback in FutureBuilder onData to trigger UI rebuild |
✅ Résolu |
| Treatment count lost after query simplification | Suppression du GROUP BY pattern a cassé le comptage |
Restored using subquery approach: SELECT COUNT(DISTINCT t.traitement_id) WHERE co.client_id = c.client_id |
✅ Résolu |
| Comptage faux des traitements (20 au lieu de 2) | COUNT(p.planning_id) avec Planning JOIN créait des doublons |
Utilisé COUNT(DISTINCT t.traitement_id) sans Planning JOIN |
✅ Hérité v2.0.0 |
| Nouveaux contrats invisibles après création | loadContrats() non appelé après insertion |
Ajout de await loadContrats() après création |
✅ Hérité v2.0.0 |
| Statuts incomplets dans le planning | Filtre SQL AND pd.statut = 'À venir' cachait les autres |
Suppression du filtre dans SQL, filtrage en Flutter | ✅ Hérité v2.0.0 |
Pattern (Windows Safe) :
SELECT DISTINCT c.client_id,
COALESCE((
SELECT COUNT(DISTINCT t.traitement_id)
FROM Traitement t
INNER JOIN Contrat co2 ON t.contrat_id = co2.contrat_id
WHERE co2.client_id = c.client_id
), 0) as treatment_count
FROM Client c
LEFT JOIN Contrat co ON c.client_id = co.client_id
WHERE co.contrat_id IS NOT NULLAvantages ✨:
SELECT DISTINCTuniversellement supporté (tous les versions MySQL)WHEREclause au lieu deHAVING(plus robuste, moins d'erreurs)- Subquery pour COUNT (évite les problèmes GROUP BY + strict mode)
- Compatible avec MySQL 5.7, 8.0, MariaDB 10.x+
About Screen Improvements :
- ✅ Build number display:
20260120-001 - ✅ Last update date:
20 janvier 2026 - ✅ Support email:
[email protected](clickable mailto) - ✅ Changelog link: Direct access to GitHub releases
- ✅ Info box with reusable
_buildInfoRow()component
Code Quality :
- ✅ Improved logging with platform-specific formatting
- ✅ Enhanced error handling in repositories
- ✅ Windows-specific SQL patterns tested and validated
- ✅ UI state management with proper
setState()callbacks
- Flutter SDK: ≥3.1.0 (Installation)
- Dart SDK: ≥3.1.0 (inclus avec Flutter)
- MySQL Server: ≥8.0 pour la base de données
- Git: Pour cloner le dépôt
- IDE: Android Studio, VS Code ou IntelliJ IDEA
git clone https://github.com/josoavj/PlanificatorFinal.git
cd planificatorflutter pub getImporter le schéma dans MySQL :
# Importer le schéma principal
mysql -u root -p < scripts/Planificator.sql
# Importer les migrations
mysql -u root -p < scripts/Migration.sqlflutter doctor
flutter analyze# Sur Linux (desktop)
flutter run -d linux
# Sur Windows
flutter run -d windows
# Sur iOS (macOS uniquement)
flutter run -d iosUtilisez ces identifiants si disponibles dans votre base de données :
| Type | Description |
|---|---|
| Client Test | Créez un client pour tester |
| Contrat Test | Créez un contrat avec 2-3 traitements |
| Factures Auto | Générées automatiquement pour chaque traitement |
# Framework & SDK
flutter:
sdk: flutter
version: >=3.1.0
# State management
provider: ^6.1.5+1
# Database
mysql1: ^0.20.0
path_provider: ^2.1.0
# UI & Design
cupertino_icons: ^1.0.0
table_calendar: ^3.2.0
# Utilities
intl: ^0.20.2 # Internationalisation (fr_FR)
logger: ^2.6.2 # Logging avec emojis
shared_preferences: ^2.2.0 # Stockage local
http: ^1.6.0 # Requêtes HTTP
collection: ^1.19.1 # Utilitaires collection
# Sécurité & Cryptographie
crypto: ^3.0.7 # Utilitaires cryptographiques
bcrypt: ^1.1.3 # Hash des mots de passe
# Export & Fichiers
excel: ^2.1.0 # Création de fichiers Excel
path: ^1.8.0 # Gestion des chemins
syncfusion_flutter_xlsio: ^29.2.11 # Création avancée Excel
url_launcher: ^6.2.0 # Ouverture d'URLs
# Notifications & Calendrier
flutter_local_notifications: ^17.1.0 # Notifications locales
timezone: ^0.9.2 # Gestion des fuseaux horaires
workmanager: ^0.5.1 # Tâches planifiées en arrière-planenvironment:
sdk: ^3.10.4
Flutter: ≥3.1.0
Dart: ≥3.1.0
MySQL: ≥8.0flutter_lints: ^2.0.0-
MySQL Connection Pooling
- Connexions persistantes optimisées
- Gestion automatique des erreurs de connexion
- Reconnexion automatique en cas de déconnexion
-
Requêtes Optimisées
- SQL joins optimisés pour les performances
- Indexation efficace des clés primaires et étrangères
- Caching intelligent des données
- Pagination pour les grandes listes
-
NumberFormatter avec Validation
- Parsing intelligent des montants (accepte les espaces)
- Formatting avec séparateurs
- Validation robuste avec regex
- Montants positifs uniquement
-
Localisation Complète
- Support multilingue (français par défaut)
- Dates formatées selon la locale
- Nombres et montants localisés
- Support des fuseau horaires
-
Authentification
- Hash bcrypt pour les mots de passe
- Sessions utilisateur persistantes
- Protection contre les attaques par injection SQL
-
Audit & Conformité
- Piste d'audit complète (
Historique_prix) - Traçabilité de toutes les modifications
- Timestamps de chaque action
- Identification de l'utilisateur
- Piste d'audit complète (
- Notifications Locales
- Alertes planifiées pour les traitements
- Rappels des factures impayées
- Support des timezones
- Gestion en arrière-plan avec workmanager
- Génération de Rapports
- Export Excel professionnel
- Statistiques de gestion
- Analyse des factures par client
- Historique des modifications
| Composant | État | Completude |
|---|---|---|
| Authentification | ✅ Stable | 100% |
| Gestion Clients | ✅ Stable | 100% |
| Gestion Contrats | ✅ Stable | 100% |
| Gestion Factures | ✅ Stable | 100% |
| Planning | ✅ Stable | 100% |
| Historique | ✅ Stable | 100% |
| Remarques & Signalements | ✅ Stable | 100% |
| Export de Données | ✅ Stable | 100% |
| Paramètres | ✅ Stable | 100% |
| Notifications | ✅ Stable | 100% |
| UI/UX | ✅ Stable | 95% |
| Base de Données | ✅ Optimisée | 100% |
| Sécurité | ✅ Renforcée | 100% |
| Tests | 🚧 À faire | 20% |
| Documentation | ✅ À jour | 95% |
Josoa - Développeur principal
- 📧 Email: [email protected]
- 🐙 GitHub: @josoavj
Josoa - Développeur Back-end
- 📧 Email: [email protected]
- 🐙 GitHub: @josoavj
Ce projet est sous licence MIT.
- Flutter Team pour le framework remarquable
- MySQL Community pour la base de données
- Tous les testeurs et utilisateurs
⭐ Si ce projet vous a été utile, n'hésitez pas à nous laisser une étoile!
Made with ❤️ by Josoa
Dernière mise à jour : 20 janvier 2026
- 🧪 Tests Unitaires & Intégration : Suite de tests complète
- 📈 Dashboard Analytique : Graphiques et statistiques avancées
- 🔔 Push Notifications : Notifications cloud améliorées
- 🌙 Mode Sombre : Support complet du thème sombre
- 🗺️ Géolocalisation : Intégration GPS pour les interventions
- 🤖 Machine Learning : Prédictions et recommandations
Les contributions sont bienvenues! Pour contribuer :
- Fork le projet
- Créez une branche (
git checkout -b feature/AmazingFeature) - Commit vos changements (
git commit -m 'Add some AmazingFeature') - Push vers la branche (
git push origin feature/AmazingFeature) - Ouvrez une Pull Request
Veuillez vous assurer que votre code suit les guidelines du projet et que tous les tests passent.
Si vous trouvez un bug, veuillez ouvrir une issue GitHub avec :
- Description détaillée du bug
- Étapes pour reproduire le problème
- Version de l'application
- Logs/stack traces si disponible
- Suggestions de fix si vous en avez