use crate::com::{FromDispatch, FromDispatchNew, SafeDispatch, SafeVariant};
use crate::errors::SageResult;
use windows::Win32::System::Com::IDispatch;
pub struct Contact {
pub dispatch: IDispatch,
}
impl Contact {
fn dispatch(&self) -> SafeDispatch<'_> {
SafeDispatch::new(&self.dispatch)
}
pub fn c_numero(&self) -> SageResult<i32> {
self.dispatch()
.call_method_by_name("C_Numero", &[])?
.to_i32()
}
pub fn c_tiers(&self) -> SageResult<String> {
self.dispatch()
.call_method_by_name("C_Tiers", &[])?
.to_string()
}
pub fn set_c_tiers(&self, value: &str) -> SageResult<()> {
let param = SafeVariant::from_string(value);
self.dispatch().call_property_put("C_Tiers", &[param])?;
Ok(())
}
pub fn c_civilite(&self) -> SageResult<i32> {
self.dispatch()
.call_method_by_name("C_Civilite", &[])?
.to_i32()
}
pub fn set_c_civilite(&self, value: i32) -> SageResult<()> {
let param = SafeVariant::from_i32(value);
self.dispatch().call_property_put("C_Civilite", &[param])?;
Ok(())
}
pub fn c_nom(&self) -> SageResult<String> {
self.dispatch()
.call_method_by_name("C_Nom", &[])?
.to_string()
}
pub fn set_c_nom(&self, value: &str) -> SageResult<()> {
let param = SafeVariant::from_string(value);
self.dispatch().call_property_put("C_Nom", &[param])?;
Ok(())
}
pub fn c_prenom(&self) -> SageResult<String> {
self.dispatch()
.call_method_by_name("C_Prenom", &[])?
.to_string()
}
pub fn set_c_prenom(&self, value: &str) -> SageResult<()> {
let param = SafeVariant::from_string(value);
self.dispatch().call_property_put("C_Prenom", &[param])?;
Ok(())
}
pub fn c_fonction(&self) -> SageResult<String> {
self.dispatch()
.call_method_by_name("C_Fonction", &[])?
.to_string()
}
pub fn set_c_fonction(&self, value: &str) -> SageResult<()> {
let param = SafeVariant::from_string(value);
self.dispatch().call_property_put("C_Fonction", &[param])?;
Ok(())
}
pub fn c_service(&self) -> SageResult<String> {
self.dispatch()
.call_method_by_name("C_Service", &[])?
.to_string()
}
pub fn set_c_service(&self, value: &str) -> SageResult<()> {
let param = SafeVariant::from_string(value);
self.dispatch().call_property_put("C_Service", &[param])?;
Ok(())
}
pub fn c_principal(&self) -> SageResult<bool> {
self.dispatch()
.call_method_by_name("C_Principal", &[])?
.to_bool()
}
pub fn set_c_principal(&self, value: bool) -> SageResult<()> {
let param = SafeVariant::from_bool(value);
self.dispatch().call_property_put("C_Principal", &[param])?;
Ok(())
}
pub fn c_telephone(&self) -> SageResult<String> {
self.dispatch()
.call_method_by_name("C_Telephone", &[])?
.to_string()
}
pub fn set_c_telephone(&self, value: &str) -> SageResult<()> {
let param = SafeVariant::from_string(value);
self.dispatch().call_property_put("C_Telephone", &[param])?;
Ok(())
}
pub fn c_mobile(&self) -> SageResult<String> {
self.dispatch()
.call_method_by_name("C_Mobile", &[])?
.to_string()
}
pub fn set_c_mobile(&self, value: &str) -> SageResult<()> {
let param = SafeVariant::from_string(value);
self.dispatch().call_property_put("C_Mobile", &[param])?;
Ok(())
}
pub fn c_email(&self) -> SageResult<String> {
self.dispatch()
.call_method_by_name("C_Email", &[])?
.to_string()
}
pub fn set_c_email(&self, value: &str) -> SageResult<()> {
let param = SafeVariant::from_string(value);
self.dispatch().call_property_put("C_Email", &[param])?;
Ok(())
}
pub fn c_fax(&self) -> SageResult<String> {
self.dispatch()
.call_method_by_name("C_Fax", &[])?
.to_string()
}
pub fn set_c_fax(&self, value: &str) -> SageResult<()> {
let param = SafeVariant::from_string(value);
self.dispatch().call_property_put("C_Fax", &[param])?;
Ok(())
}
pub fn c_date_naissance(&self) -> SageResult<String> {
self.dispatch()
.call_method_by_name("C_DateNaissance", &[])?
.to_string()
}
pub fn set_c_date_naissance(&self, value: &str) -> SageResult<()> {
let param = SafeVariant::from_string(value);
self.dispatch()
.call_property_put("C_DateNaissance", &[param])?;
Ok(())
}
pub fn c_commentaire(&self) -> SageResult<String> {
self.dispatch()
.call_method_by_name("C_Commentaire", &[])?
.to_string()
}
pub fn set_c_commentaire(&self, value: &str) -> SageResult<()> {
let param = SafeVariant::from_string(value);
self.dispatch()
.call_property_put("C_Commentaire", &[param])?;
Ok(())
}
pub fn write(&self) -> SageResult<()> {
self.dispatch().call_method_by_name("Write", &[])?;
Ok(())
}
pub fn read(&self) -> SageResult<SafeVariant> {
self.dispatch().call_method_by_name("Read", &[])
}
pub fn remove(&self) -> SageResult<()> {
self.dispatch().call_method_by_name("Remove", &[])?;
Ok(())
}
pub fn description(&self) -> SageResult<String> {
let civilite = self.c_civilite()?;
let nom = self.c_nom()?;
let prenom = self.c_prenom().unwrap_or_else(|_| String::new());
let civilite_str = match civilite {
0 => "M.",
1 => "Mme",
2 => "Mlle",
_ => "",
};
let nom_complet = if prenom.is_empty() {
format!("{} {}", civilite_str, nom)
} else {
format!("{} {} {}", civilite_str, prenom, nom)
};
Ok(nom_complet)
}
pub fn coordonnees(&self) -> SageResult<String> {
let tel = self.c_telephone().unwrap_or_else(|_| "N/A".to_string());
let mobile = self.c_mobile().unwrap_or_else(|_| String::new());
let email = self.c_email().unwrap_or_else(|_| "N/A".to_string());
let mut result = format!("Tél: {}", tel);
if !mobile.is_empty() {
result.push_str(&format!(" - Mobile: {}", mobile));
}
result.push_str(&format!(" - Email: {}", email));
Ok(result)
}
}
impl FromDispatch for Contact {
fn from_dispatch(dispatch: IDispatch) -> SageResult<Self> {
Ok(Contact { dispatch })
}
}
impl FromDispatchNew for Contact {
fn from_dispatch_new(dispatch: IDispatch) -> SageResult<Self> {
Ok(Self { dispatch })
}
}
#[cfg(test)]
mod tests {
#[test]
fn test_contact_documentation() {
}
}