objets_metier_rs 1.0.2

Bibliothèque Rust moderne et sûre pour l'API COM Objets Métier Sage 100c - Production Ready
# 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)