feat(frontend): module Articles complet (liste, création, modification, suppression)

- Article model (MP/PSF/PF, stock, seuil alerte)
- ArticleService : fetchAll, fetchByType, create, update, delete
- ArticleProvider : filtrage par type + recherche temps réel
- ArticlesScreen : liste, chips filtres, barre recherche, alertes stock
- ArticleFormScreen : formulaire création/édition avec validation
- Rapport PFE : section 5.6 module Articles

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-20 20:23:06 +01:00
co-authored by Claude Sonnet 4.6
parent 601a7d0373
commit ed21c3cb80
7 changed files with 915 additions and 1 deletions
+60
View File
@@ -555,3 +555,63 @@ Le drawer affiche le rôle de l'utilisateur connecté et met en surbrillance la
---
*[Section à compléter avec captures d'écran lors de la finalisation du rapport]*
---
## 5.6 Module Articles
### Objectif
Le module Articles permet de gérer le **catalogue complet** des références de l'entreprise, organisé en trois catégories correspondant au cycle industriel de SUARL Rayhan :
| Type | Code | Description |
|------|------|-------------|
| Matière Première | MP | Granulés PEHD/LDPE, colorants, additifs |
| Produit Semi-Fini | PSF | Film tubulaire non découpé |
| Produit Fini | PF | Sacs Bertel, sacs poubelles, film rétractable |
### Fonctionnalités
- **Liste filtrée** : affichage de tous les articles avec filtre par type (MP / PSF / PF) et barre de recherche en temps réel
- **Indicateur d'alerte** : les articles dont le stock est inférieur au seuil minimum sont signalés en rouge avec icône d'avertissement
- **Création** : formulaire complet (référence, désignation, type, unité de mesure, prix unitaire, stock initial, seuil d'alerte)
- **Modification** : édition de tous les champs sauf la référence (clé métier immuable)
- **Archivage** : suppression logique (l'article est marqué `actif=false`, pas effacé de la base)
### Architecture technique
```
ArticleService (Dio) ArticleProvider (ChangeNotifier)
├── fetchAll() ─────► ├── _articles: List<Article>
├── fetchByType() ├── _filterType: String
├── create() ├── _search: String
├── update() └── articles (getter filtré)
└── delete()
ArticlesScreen
├── _SearchBar
├── _FilterChips (TOUS / MP / PSF / PF)
└── ListView → _ArticleCard
└── PopupMenu (Modifier / Supprimer)
ArticleFormScreen (création + édition)
├── Section Identification (ref, désignation, type)
├── Section Unité & Prix
└── Section Stock (actuel + seuil minimum)
```
### Modèle de données
```dart
class Article {
int? id;
String reference; // Clé unique (ex: MP-001)
String designation; // Libellé
String type; // MP | PSF | PF
String? uniteMesure; // kg, unité, rouleau, m
double prixUnitaire; // En TND
double stockActuel; // Quantité en stock
double stockMinimum; // Seuil d'alerte
bool actif; // Soft delete
}
```