# Exemple : Création d'un bon de commande client
## Description
Cet exemple démontre la création complète d'une commande client dans la base BIJOU en utilisant :
- Le client avec code tiers **CARAT**
- L'article avec référence **LOCCOLLIER**
## Prérequis
### Installation Sage 100c
- ✅ Sage 100c installé et fonctionnel
- ✅ Module Commercial (CIAL) activé
- ✅ Base BIJOU.MAE accessible à `D:\TMP\BIJOU.MAE`
### Données requises dans BIJOU
- ✅ **Client CARAT** : Doit exister dans le module comptable
- ✅ **Article LOCCOLLIER** : Doit exister dans le catalogue articles
## Exécution
### Commande
```bash
cargo run --example create_commande_carat
```
### Si Sage n'est pas installé
L'exemple affichera une erreur COM explicite :
```
❌ ERREUR : Impossible de créer l'application CIAL
Cause : Sage 100c non installé ou CLSID non enregistré
```
## Workflow de l'exemple
L'exemple suit ces 8 étapes :
### 1. Connexion à la base comptable BIJOU (CPTA)
- Création de l'application CPTA
- Configuration du chemin de la base comptable
- Authentification (Administrateur)
- Ouverture de la base comptable
### 1bis. Connexion à la base commerciale BIJOU (CIAL)
- Création de l'application CIAL
- ⚠️ **LIAISON CRITIQUE** : Lier CIAL à CPTA avec `set_cpta_application()`
- Configuration du chemin de la base commerciale
- Authentification (Administrateur)
- Ouverture de la base commerciale
### 2. Vérification du client CARAT
- ✅ Utilisation de FactoryClient (module CPTA)
- Vérification de l'existence du client
- Lecture des détails du client (numéro, intitulé, qualité, classement)
### 3. Vérification de l'article LOCCOLLIER
- Vérification de l'existence avec `exist_reference()`
- Lecture des détails avec `read_reference()`
- Affichage de la référence et de la désignation
### 4. Création du document de commande
- Obtention de FactoryDocumentVente
- Création d'un document type 1 (Commande client)
- Types disponibles :
- 0 = Devis
- 1 = Commande client ✅ (utilisé)
- 2 = Bon de livraison
- 3 = Facture
- 4 = Avoir
### 5. Ajout des lignes de commande
- ℹ️ À implémenter avec DocumentLigne (Phase 2)
- Définir l'article, la quantité, le prix
### 6. Enregistrement du document
- Appel de `write()` pour sauvegarder
- Affichage du numéro de pièce créé
### 7. Vérification du document créé
- ℹ️ À implémenter avec query_type_order_piece()
- Liste des commandes récentes
### 8. Fermeture des connexions
- Fermeture propre de la base commerciale (CIAL)
- Fermeture propre de la base comptable (CPTA)
## Fonctionnalités actuelles (Phase 1)
### Intégration CPTA/CIAL
✅ **Implémenté :**
- Connexion simultanée aux modules CPTA et CIAL
- Accès à FactoryClient depuis CPTA
- Vérification existence client avec `exist_numero()`
- Lecture des détails client avec `read_numero()`
- Validation compte tiers
### Propriétés DocumentVente actuelles
La version minimale Phase 1 contient :
- ✅ `do_piece()` - Numéro de pièce
- ✅ `do_type()` - Type de document
- ✅ `write()` - Enregistrement
- ✅ `remove()` - Suppression
**Phase 2 ajoutera :**
- ⏳ `set_do_tiers()` - Définir le client
- ⏳ `set_do_date()` - Définir la date
- ⏳ `set_do_ref()` - Définir la référence
- ⏳ `set_do_devise()` - Définir la devise
- ⏳ `lignes()` - Collection de lignes
- ⏳ `montant_ht()`, `montant_ttc()` - Calculs
- ⏳ Et 50+ propriétés supplémentaires
### Gestion des lignes à implémenter
La Phase 2 ajoutera :
- ⏳ Objet `DocumentLigne`
- ⏳ Collection `lignes()` sur DocumentVente
- ⏳ Méthodes `add()`, `remove()`, `clear()`
- ⏳ Propriétés ligne : article, quantité, prix, remise, etc.
## Sortie attendue
```
═══════════════════════════════════════════════════════════
Création d'un bon de commande client - Base BIJOU
═══════════════════════════════════════════════════════════
📂 ÉTAPE 1 : Connexion à la base comptable BIJOU
─────────────────────────────────────────────────────────
✓ Application CPTA créée
✓ Base comptable définie : D:\TMP\BIJOU.MAE
✓ Authentification CPTA configurée
✓ Base comptable ouverte avec succès
✓ Connexion CPTA vérifiée
📂 ÉTAPE 1bis : Connexion à la base commerciale BIJOU
─────────────────────────────────────────────────────────
✓ Application CIAL créée
✓ Application CIAL liée à l'application CPTA (⚠️ CRUCIAL)
✓ Base commerciale définie : D:\TMP\BIJOU.MAE
✓ Authentification CIAL configurée
✓ Base commerciale ouverte avec succès
✓ Connexion CIAL vérifiée
👤 ÉTAPE 2 : Vérification du client CARAT
─────────────────────────────────────────────────────────
✓ FactoryClient obtenue depuis CPTA
✓ Client CARAT existe dans la base comptable
→ Compte client : CARAT
→ Intitulé : CARAT SARL
→ Qualité : Joaillerie
→ Classement : CLIENT_VIP
📦 ÉTAPE 3 : Vérification de l'article LOCCOLLIER
─────────────────────────────────────────────────────────
✓ FactoryArticle obtenue
✓ Article LOCCOLLIER existe dans la base
→ Référence : LOCCOLLIER
→ Désignation : Location collier or 18 carats
📝 ÉTAPE 4 : Création du bon de commande client
─────────────────────────────────────────────────────────
✓ FactoryDocumentVente obtenue
→ Création d'un document type 1 (Commande client)...
✓ Document de commande créé
→ Définition des propriétés du document...
ℹ️ Propriétés détaillées à implémenter dans DocumentVente
(do_tiers, do_date, do_ref, etc.)
→ Pièce : BC00001
→ Type : 1 (1=Commande)
📋 ÉTAPE 5 : Ajout des lignes de commande
─────────────────────────────────────────────────────────
→ Ajout d'une ligne pour l'article LOCCOLLIER...
ℹ️ Gestion des lignes à implémenter
En production :
- Accéder à la collection de lignes : commande.lignes()?
- Créer une nouvelle ligne : lignes.add()?
- Définir article : ligne.set_ar_ref("LOCCOLLIER")?
- Définir quantité : ligne.set_dl_qte(1.0)?
- Prix : ligne.set_dl_puttc(prix)?
💾 ÉTAPE 6 : Enregistrement du document
─────────────────────────────────────────────────────────
→ Enregistrement de la commande...
✓ Commande enregistrée avec succès !
→ Numéro de pièce : BC00001
🔍 ÉTAPE 7 : Vérification du document créé
─────────────────────────────────────────────────────────
→ Liste des commandes clients...
ℹ️ À implémenter avec query_type_order_piece(1)
🚪 ÉTAPE 8 : Fermeture des connexions
─────────────────────────────────────────────────────────
✓ Base commerciale fermée proprement
✓ Base comptable fermée proprement
═══════════════════════════════════════════════════════════
✅ EXEMPLE TERMINÉ AVEC SUCCÈS
═══════════════════════════════════════════════════════════
📌 NOTES IMPORTANTES :
1. Cet exemple utilise la version minimale Phase 1
2. ✅ Intégration CPTA/CIAL fonctionnelle (vérification client)
3. Les propriétés détaillées DocumentVente (tiers, date, etc.)
seront disponibles dans la Phase 2
4. La gestion des lignes nécessite l'implémentation de
la collection DocumentLigne
5. Pour un workflow complet, voir la Phase 2 à venir
💡 PROCHAINES ÉTAPES :
→ Phase 2 : Enrichir DocumentVente avec toutes les propriétés
→ Phase 2 : Implémenter DocumentLigne pour gérer les lignes
→ Phase 2 : Ajouter les méthodes de calcul (totaux, taxes, etc.)
```
## Prochaines évolutions
### Phase 2 - Configuration Produits
- Enrichissement de DocumentVente avec 50+ propriétés
- Implémentation DocumentLigne
- Gestion complète des lignes de commande
- Calculs automatiques (HT, TVA, TTC, remises)
### Intégration CPTA/CIAL
- ✅ Liaison FactoryClient pour validation tiers (Phase 1)
- ⏳ Synchronisation comptable automatique (Phase 2)
- ⏳ Génération écritures comptables (Phase 2)
### Workflows avancés
- Transformation devis → commande → BL → facture
- Gestion des acomptes
- Suivi des livraisons partielles
- Gestion des retours et avoirs
## Dépannage
### Erreur "Valeur invalide" lors de CreateType
**Cause :** La base CIAL n'est pas liée à la base CPTA
**Solution :** Le code utilise maintenant `cial.set_cpta_application(cpta.instance())` AVANT `cial.open()`
Si l'erreur persiste :
1. Vérifier que la base CPTA est bien ouverte avant CIAL
2. Vérifier que `set_cpta_application()` est appelé avant `cial.open()`
3. Les deux bases doivent pointer vers le même fichier .MAE
### Erreur "Article LOCCOLLIER introuvable"
**Solution :** Créer l'article dans Sage 100c :
1. Ouvrir Sage 100c Commercial
2. Gestion → Articles
3. Créer un article avec référence "LOCCOLLIER"
### Erreur "Client CARAT introuvable"
**Solution :** Créer le client dans Sage 100c :
1. Ouvrir Sage 100c Comptabilité
2. Structure → Tiers → Clients
3. Créer un compte client avec code "CARAT"
### Erreur "Base BIJOU.MAE introuvable"
**Solution :** Vérifier le chemin :
- Chemin attendu : `D:\TMP\BIJOU.MAE`
- Ou modifier le chemin dans l'exemple ligne 23
## Références
- **Documentation Phase 1** : `docs/CIAL_GUIDE.md` (à venir)
- **Tests d'intégration** : `tests/cial_integration_tests.rs`
- **Exemple simple** : `examples/cial_demo.rs`
- **API Reference** : `docs/CIAL_API_REFERENCE.md` (à venir)