Implémentation complète de la duplication de lignes produits dans les devis :
Backend (controllers/cjxdevis.php):
- Ajout endpoint duplicate_ligne_produit avec paramètre gratuite
- Recalcul automatique des ordres lors de la duplication
- Suppression du warning "Undefined array key user"
- Gestion correcte de l'ordre des lignes (fix ordre=0)
Frontend (pub/res/js/jdevis.js):
- Bouton ➕ pour dupliquer une ligne produit
- Duplication directe en gratuité (remise 100%) sans confirmation
- Bouton 🗑️ pour supprimer les lignes à 100% de remise
- Colorisation violet clair (rgba(138, 43, 226, 0.2)) des lignes gratuites
- Limitation à 2 occurrences max par produit (➕ disparaît après)
- Badge (x2) dans l'onglet Sélection pour les produits dupliqués
- Déduplication de la liste de sélection (1 produit = 1 ligne)
- Première colonne sans retour à la ligne (white-space: nowrap)
- Fix: loadProduitsDevis n'existe pas → showDevisProduits
- Fix: ReferenceError remiseProduit avant initialisation
Bugs corrigés:
- Bug #1: Warning PHP "Undefined array key user" (ligne 165)
- Bug #2: Ligne dupliquée ne s'affiche pas (ordre=0)
- Bug #3: ReferenceError loadProduitsDevis non définie
- Bug #4: ReferenceError remiseProduit avant initialisation
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Correction affichage email contact dans SAP (models/msap.php)
- Ajout fonctionnalité tri des tableaux devis (jsap.js, jdevis.js)
- Améliorations diverses vues devis et SAP
- Mise à jour contrôleurs et modèles export
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Correction de 14 vulnérabilités SQL (8 critiques, 6 moyennes)
- Suppression de la fonction autocomplete non utilisée
- Migration complète vers PDO avec requêtes préparées
- Ajout du bouton 'Réactiver' pour les devis archivés (statut 20 → 1)
- Conversion des appels $.ajax en fetch API (vanilla JS)
- Correction des erreurs JavaScript empêchant l'attachement d'événements
- Mise à jour de la documentation (README.md et TODO.md)
Sécurité: Utilisation systématique de intval() et requêtes préparées PDO
UI: Nouveau bouton vert dans la grille 2x2 des actions sur devis archivés
Historique: Traçabilité dans devis_histo lors de la réactivation
- Architecture MVC avec framework maison d6
- Modules : devis, clients, marchés, SAP
- Documentation initiale (README et TODO)
- Configuration Composer avec dépendances
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>