feat(v2.0.4): Corrections diverses et tri des tableaux devis
- 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>
This commit is contained in:
84
docs/TODO.md
84
docs/TODO.md
@@ -195,12 +195,90 @@ DB_PASSWORD=<PROD_PASSWORD> # À sécuriser
|
||||
- [ ] Scripts de backup automatisés à mettre en place
|
||||
- [ ] Réplication master-slave pour haute disponibilité (optionnel)
|
||||
|
||||
## ⚠️ CRITIQUE - Risque de collision de codes clients (EN ATTENTE CLIENT)
|
||||
|
||||
### Problématique identifiée
|
||||
**Date**: 26 novembre 2025
|
||||
**Statut**: 🔴 EN ATTENTE RÉPONSE CLIENT
|
||||
|
||||
#### Situation actuelle
|
||||
Lorsqu'un commercial crée un nouveau client manuellement dans CLEO (client non présent dans SAP), le système génère automatiquement un code via :
|
||||
```php
|
||||
$newCode = MAX(code) + 1; // cjxdevis.php ligne 1326
|
||||
```
|
||||
|
||||
#### Risque de collision
|
||||
**Scénario catastrophe** :
|
||||
1. Commercial crée un client manuel → code auto = `12345`
|
||||
2. Commercial ajoute des contacts, fait des devis
|
||||
3. **Import SAP suivant** : un nouveau client SAP arrive avec le code `12345`
|
||||
4. L'import trouve le client existant (même code) et **écrase toutes les données** du client manuel
|
||||
5. Les contacts du client manuel deviennent incohérents (pointent vers le mauvais client SAP)
|
||||
6. Les devis du client manuel sont rattachés au mauvais client SAP
|
||||
|
||||
#### Question posée au client
|
||||
**"Que se passe-t-il lorsqu'un devis avec un nouveau client (code = MAX+1) est intégré dans SAP ?"**
|
||||
- Le client manuel reçoit-il un vrai code SAP ?
|
||||
- Le code est-il synchronisé dans CLEO après intégration ?
|
||||
- Existe-t-il un processus de réconciliation ?
|
||||
|
||||
### Solutions techniques envisagées
|
||||
|
||||
#### Option A : Plage réservée pour clients manuels
|
||||
```php
|
||||
// Codes 9000000+ réservés aux créations manuelles
|
||||
$newCode = 9000000 + $compteur;
|
||||
```
|
||||
**Avantages** : Simple, pas de collision possible
|
||||
**Inconvénients** : Nécessite coordination avec SAP
|
||||
|
||||
#### Option B : Codes négatifs pour clients manuels
|
||||
```php
|
||||
// Codes négatifs = clients manuels non SAP
|
||||
$newCode = -1 * (MAX(ABS(code)) + 1);
|
||||
```
|
||||
**Avantages** : Distinction claire SAP/Manuel
|
||||
**Inconvénients** : Peut poser problème avec certains systèmes
|
||||
|
||||
#### Option C : Flag `chk_manual` + protection
|
||||
```sql
|
||||
ALTER TABLE clients ADD COLUMN chk_manual TINYINT DEFAULT 0;
|
||||
```
|
||||
- `chk_manual = 1` → Client créé manuellement, jamais écrasé par import SAP
|
||||
- Lors de l'import SAP, ignorer les clients avec `chk_manual = 1`
|
||||
- Processus manuel de réconciliation si le client est créé dans SAP
|
||||
|
||||
**Avantages** : Protection garantie, traçabilité
|
||||
**Inconvénients** : Nécessite gestion manuelle de la réconciliation
|
||||
|
||||
#### Option D : Code temporaire + synchronisation
|
||||
- Client manuel créé avec code `TEMP_XXXXX`
|
||||
- Lors de l'intégration SAP, récupération du vrai code SAP
|
||||
- Mise à jour du code client + tous les contacts/devis associés
|
||||
|
||||
**Avantages** : Cohérence totale avec SAP
|
||||
**Inconvénients** : Complexe, nécessite API ou process de sync
|
||||
|
||||
### Actions en attente
|
||||
- [ ] **Réponse client** sur le processus actuel d'intégration SAP
|
||||
- [ ] Choix de la solution technique selon la réponse
|
||||
- [ ] Implémentation de la solution retenue
|
||||
- [ ] Tests de non-régression sur imports SAP
|
||||
- [ ] Documentation du processus de gestion des clients manuels
|
||||
|
||||
### Impact sur le code existant
|
||||
**Fichiers concernés** :
|
||||
- `controllers/cjxdevis.php` : fonction `save_new_client` (ligne 1308)
|
||||
- `controllers/cjximport.php` : fonction `upload_clients` (ligne 112)
|
||||
- Documentation utilisateur à mettre à jour
|
||||
|
||||
---
|
||||
|
||||
## Modification Contacts Clients - Migration vers clients.code
|
||||
|
||||
### Contexte
|
||||
La relation entre `clients_contacts` et `clients` utilise actuellement `clients.rowid` comme clé étrangère.
|
||||
Cela pose problème lors des imports SAP qui peuvent écraser ou modifier les `rowid`.
|
||||
Il faut migrer vers `clients.code` (identifiant SAP immuable) pour garantir l'intégrité des relations.
|
||||
La relation entre `clients_contacts` et `clients` utilise `clients.code` comme clé de référence.
|
||||
Le système a été conçu pour utiliser le `code` SAP (clé métier immuable) plutôt que le `rowid` (clé technique auto-incrémentée).
|
||||
|
||||
### Plan de correction
|
||||
|
||||
|
||||
Reference in New Issue
Block a user