# STOCKMASTER PRO V2.1 - CHANGELOG

## 🚀 Version 2.1 - Février 2025

### ✨ NOUVELLES FONCTIONNALITÉS MAJEURES

#### 1. **Système Entrée de Stock vs Ajout**
- **Entrée de Stock** (Admin uniquement) : Réception commande fournisseur, augmente le stock maximum autorisé
- **Ajout** (Tous utilisateurs) : Remise en stock limitée au plafond autorisé
- Nouveau type de mouvement `"entry"` distinct de `"add"`
- Protection : utilisateurs non-admin ne peuvent pas dépasser `maxAuthorized`
- Champ `maxAuthorized` ajouté dans `stock.json`

#### 2. **Pagination**
- Produits : 20 items/page (grid responsive)
- Mouvements : 50 items/page (table)
- Fournisseurs : 30 items/page
- Contrôles : Page X/Y, Précédent/Suivant, info totaux
- Performance améliorée sur gros catalogues

#### 3. **Fournisseurs + Marques Intégrés**
- Champ `brands` (array) ajouté aux fournisseurs
- Formulaire produit : cascade Fournisseur → Marques
- Ajout rapide marque depuis modal fournisseur
- Auto-complétion marques dans formulaire produit

#### 4. **Cards Produits Enrichies**
- Badge magasin principal visible
- Tooltip autres magasins au hover
- Indicateur nombre de magasins
- Stock par magasin affiché
- Icône visuelle claire

#### 5. **Scanner Amélioré**
- **Arrêt automatique** sur code inconnu
- Bouton "Créer produit" avec code pré-rempli
- Bouton "Rescanner" pour relancer
- Évite les scans multiples erronés
- Message clair : "Code inconnu → Créer"

#### 6. **Impression Tableaux**
- CSS print-friendly pour tous les tableaux
- Bouton "Imprimer" dans chaque page
- Masquage automatique navigation/filtres
- Mise en page optimisée A4
- Headers répétés sur chaque page

---

### 🔒 SÉCURITÉ

#### CSRF Protection
- Token CSRF dans toutes les requêtes POST/PUT/DELETE
- Validation côté serveur automatique
- Meta tag `<meta name="csrf-token">` dans layout
- Header `X-CSRF-TOKEN` dans API calls

#### Rate Limiting Login
- Maximum 5 tentatives / 5 minutes
- Fichier `rate_limits.json` pour tracking
- Message explicite : "Trop de tentatives"
- Reset automatique après fenêtre

#### Validation Formulaires Client
- Nouveau module `Validator` JavaScript
- Validation avant soumission
- Messages d'erreur clairs
- Règles : required, min, max, email, etc.

---

### 🎨 AMÉLIORATIONS UX/UI

#### Filtres Avancés Mouvements
- Filtre par produit (autocomplete)
- Filtre par opérateur (liste)
- Filtre par chantier/site (autocomplete historique)
- Filtre par lot (si traçabilité)
- Combinaisons multiples

#### Dashboard Graphiques
- Graphique valeur stock par magasin (Chart.js)
- Répartition visuelle claire
- Couleurs par magasin
- Tooltip détaillé au hover

#### Export Excel Multi-Onglets
- Onglet 1 : Catalogue produits
- Onglet 2 : Stock actuel par magasin
- Onglet 3 : Mouvements période
- Onglet 4 : Alertes actives
- Utilise SheetJS (xlsx.js)

#### Recherche Globale Étendue
- Recherche produits ET mouvements
- Recherche magasins ET fournisseurs
- Résultats catégorisés
- Navigation rapide

---

### 🛠️ TECHNIQUE

#### Backup Automatique
- Script `backup_cron.php` pour cron
- Backup JSON complet quotidien
- Dossier `/backups/` avec rotation 30 jours
- Nommage : `backup_YYYY-MM-DD_HH-mm-ss.json`

#### Migrations Automatiques
- `migrateStockMaxAuth()` : ajoute `maxAuthorized`
- `migrateSuppliers()` : ajoute `brands`
- Backward compatible : anciennes données upgradées
- Aucune perte de données

#### Performance
- Pagination côté client (pas de recharge)
- Cache des données chargées
- Filtres optimisés
- Rendering incrémental

---

### 📋 FICHIERS MODIFIÉS

#### Backend PHP
- `config.php` : +150 lignes (helpers stock, CSRF, rate limit)
- `api/movements.php` : type "entry", check limite
- `api/products.php` : liaison marques
- `api/suppliers.php` : champ brands
- `login.php` : rate limiting

#### Frontend JavaScript
- `assets/js/app.js` : pagination module, validator
- `assets/js/api.js` : CSRF header automatique
- `assets/js/pages/products.js` : modals entry/add, cards
- `assets/js/pages/movements.js` : filtres avancés
- `assets/js/pages/scanner.js` : arrêt auto
- `assets/js/pages/dashboard.js` : graphiques
- `assets/js/pages/suppliers.js` : gestion marques

#### CSS
- `assets/css/app.css` : +200 lignes (pagination, print, graphiques)

#### Vues
- `views/layout.php` : CSRF meta tag, print button
- `views/products.php` : boutons entry/add séparés
- `views/movements.php` : filtres avancés
- `views/suppliers.php` : champ marques

---

### 📦 STRUCTURE BASE DE DONNÉES

#### stock.json (nouveau champ)
```json
{
  "maxAuthorized": 100  // Plafond autorisé (admin entry)
}
```

#### movements.json (nouveau type)
```json
{
  "type": "entry",  // Nouveau type (vs "add")
  "deliveryNote": "BL-2025-0234",
  "supplier": "CASTO"
}
```

#### suppliers.json (nouveau champ)
```json
{
  "brands": ["DULUX", "LEVIS", "V33"]
}
```

#### rate_limits.json (nouveau fichier)
```json
{
  "login_admin": {
    "attempts": 3,
    "firstAttempt": 1738778234
  }
}
```

---

### 🔄 MIGRATION DEPUIS V2.0

1. **Extraction** : Décompresser ZIP dans dossier serveur
2. **Permissions** : `chmod 775 data/ uploads/ backups/`
3. **Migration auto** : Au premier chargement, champs ajoutés automatiquement
4. **Pas de perte** : Toutes données préservées
5. **Test** : Vérifier login, créer produit, faire mouvement

---

### ⚠️ COMPATIBILITÉ

- ✅ PHP 8.1+ (inchangé)
- ✅ Navigateurs modernes (Chrome 90+, Firefox 88+, Safari 14+)
- ✅ Mobile/Tablet (iOS 14+, Android 10+)
- ✅ Fichiers JSON conservés (pas de SQL)
- ✅ Backward compatible V2.0 → V2.1

---

### 📝 NOTES IMPORTANTES

#### Entrée vs Ajout
- **Admins** : utilisez "Entrée de stock" pour réceptions fournisseurs
- **Utilisateurs** : utilisez "Ajout" pour remises en stock (limité)
- Le plafond `maxAuthorized` protège contre surstock accidentel

#### Impression
- Bouton "Imprimer" dans toolbar de chaque page
- Ctrl+P fonctionne aussi (CSS print optimisé)
- Marges A4 configurées automatiquement

#### Backups
- Configurer cron : `0 2 * * * php /path/to/backup_cron.php`
- Ou backup manuel via API : `api/backup.php`

---

### 🐛 CORRECTIONS

- Fix : Scanner continue après code inconnu → CORRIGÉ (arrêt auto)
- Fix : Ajout stock sans limite admin → CORRIGÉ (maxAuthorized)
- Fix : Marque champ libre sans lien fournisseur → CORRIGÉ (cascade)
- Fix : Cards produits sans info magasin → CORRIGÉ (badges visibles)
- Fix : Login bruteforce possible → CORRIGÉ (rate limiting)
- Fix : Tableau impression layout cassé → CORRIGÉ (CSS print)

---

### 📈 PROCHAINES VERSIONS (Roadmap)

#### V2.2 (Q2 2025)
- PWA : Service Worker + offline
- Notifications desktop
- Multi-devises
- Historique modifications (audit trail)

#### V2.3 (Q3 2025)
- API REST documentée (Swagger)
- Export PDF rapports
- Graphiques avancés (stock évolution)
- Permissions granulaires

---

## 🙏 SUPPORT

Pour toute question ou problème :
1. Consulter `README.md` et `INSTALL.md`
2. Vérifier permissions dossiers (`data/`, `uploads/`, `backups/`)
3. Vérifier logs PHP (`/var/log/apache2/error.log`)
4. Vérifier console navigateur (F12)

---

**StockMaster Pro V2.1** - Gestion de stock professionnelle  
Développé avec ❤️ - Février 2025
