use objets_metier_rs::errors::SageResult;
use objets_metier_rs::wrappers::cpta::traits::*;
use objets_metier_rs::wrappers::cpta::CptaApplication;
const BSCPTA_CLSID: &str = "309DE0FB-9FB8-4F4E-8295-CC60C60DAA33";
fn main() -> SageResult<()> {
println!("🚀 Exemple d'utilisation des traits communs\n");
println!("{}", "=".repeat(60));
let app = CptaApplication::new(BSCPTA_CLSID)?;
println!("✓ BSCPTAApplication100c créée");
app.set_name(r"D:\TMP\BIJOU.MAE")?;
println!("✓ Base définie: D:\\TMP\\BIJOU.MAE");
let loggable = app.loggable()?;
loggable.set_user_name("<Administrateur>")?;
loggable.set_user_pwd("")?;
println!("✓ Identifiants configurés");
app.open()?;
println!("✓ Connecté au dossier BIJOU\n");
let factory_taxe = app.factory_taxe()?;
println!("\n📋 Exemple 1 : Trait FactoryRead<T>");
println!("{}", "-".repeat(60));
afficher_toutes_avec_trait(&factory_taxe)?;
println!("\n🔍 Exemple 2 : Trait FactoryReadByCode<T>");
println!("{}", "-".repeat(60));
lire_par_code_avec_trait(&factory_taxe, "C20")?;
println!("\n➕ Exemple 3 : Trait FactoryCreate<T>");
println!("{}", "-".repeat(60));
demontrer_creation_avec_trait(&factory_taxe)?;
println!("\n📝 Exemple 4 : Trait InfoLibreCapable");
println!("{}", "-".repeat(60));
afficher_infos_libres(&factory_taxe)?;
println!("\n{}", "=".repeat(60));
println!("✅ Tous les exemples exécutés avec succès !");
app.close()?;
println!("✓ Connexion fermée");
Ok(())
}
fn afficher_toutes_avec_trait<F, T>(factory: &F) -> SageResult<()>
where
F: FactoryRead<T>,
{
println!("Récupération de toutes les entités avec list()...");
let entites = factory.list()?;
println!(" ✓ Nombre d'entités trouvées : {}", entites.len());
println!("\nRécupération avec list_forward() (optimisé)...");
let entites_forward = factory.list_forward()?;
println!(" ✓ Nombre d'entités (forward) : {}", entites_forward.len());
Ok(())
}
fn lire_par_code_avec_trait<F, T>(factory: &F, code: &str) -> SageResult<()>
where
F: FactoryReadByCode<T>,
{
println!("Vérification de l'existence du code '{}'...", code);
if factory.exist_code(code)? {
println!(" ✓ L'entité existe");
println!("\nLecture de l'entité...");
let _entite = factory.read_code(code)?;
println!(" ✓ Entité lue avec succès");
} else {
println!(" ⚠ L'entité n'existe pas");
}
Ok(())
}
fn demontrer_creation_avec_trait<F, T>(factory: &F) -> SageResult<()>
where
F: FactoryCreate<T>,
{
println!("Création d'une nouvelle entité (non persistée)...");
let _nouvelle_entite = factory.create()?;
println!(" ✓ Entité créée avec succès");
println!(" ℹ Note : L'entité n'est pas sauvegardée pour préserver la base");
Ok(())
}
fn afficher_infos_libres<F>(factory: &F) -> SageResult<()>
where
F: InfoLibreCapable,
{
println!("Récupération de la collection d'informations libres...");
match factory.info_libre_fields() {
Ok(_fields) => {
println!(" ✓ Collection d'infos libres récupérée");
println!(" ℹ Les informations libres sont disponibles");
}
Err(e) => {
println!(" ⚠ Pas d'informations libres configurées : {}", e);
}
}
Ok(())
}
#[allow(dead_code)]
fn operations_completes<F, T>(factory: &F, code: &str) -> SageResult<()>
where
F: FactoryRead<T> + FactoryReadByCode<T> + FactoryCreate<T>,
{
let _toutes = factory.list()?;
if factory.exist_code(code)? {
let _entite = factory.read_code(code)?;
}
let _nouvelle = factory.create()?;
Ok(())
}
#[allow(dead_code)]
fn traiter_factory_generique<T>(factory: Box<dyn FactoryRead<T>>) -> SageResult<usize> {
let entites = factory.list()?;
Ok(entites.len())
}