use crate::com::{SafeDispatch, SafeVariant};
use crate::errors::SageResult;
use crate::wrappers::cial::objects::{article_wrapper::Article, depot_wrapper::Depot};
use crate::wrappers::cpta::objects::{
collaborateur_wrapper::Collaborateur, contact_wrapper::Contact, reglement_wrapper::Reglement,
tiers_wrapper::Tiers,
};
use windows::Win32::System::Com::IDispatch;
pub struct DocumentAchat {
pub(crate) dispatch: IDispatch,
}
impl DocumentAchat {
fn dispatch(&self) -> SafeDispatch<'_> {
SafeDispatch::new(&self.dispatch)
}
pub fn do_piece(&self) -> SageResult<String> {
self.dispatch()
.call_method_by_name("DO_Piece", &[])?
.to_string()
}
pub fn do_type(&self) -> SageResult<i16> {
self.dispatch()
.call_method_by_name("DO_Type", &[])?
.to_short()
}
pub fn do_date(&self) -> SageResult<String> {
self.dispatch()
.call_method_by_name("DO_Date", &[])?
.to_string()
}
pub fn do_ref(&self) -> SageResult<String> {
self.dispatch()
.call_method_by_name("DO_Ref", &[])?
.to_string()
}
pub fn do_tiers(&self) -> SageResult<Option<Tiers>> {
let variant = self.dispatch().call_method_by_name("DO_Tiers", &[])?;
if variant.is_empty_or_null() {
return Ok(None);
}
let dispatch = variant.to_dispatch()?;
Ok(Some(Tiers { dispatch }))
}
pub fn do_contact(&self) -> SageResult<Option<Contact>> {
let variant = self.dispatch().call_method_by_name("DO_Contact", &[])?;
if variant.is_empty_or_null() {
return Ok(None);
}
let dispatch = variant.to_dispatch()?;
Ok(Some(Contact { dispatch }))
}
pub fn do_depot(&self) -> SageResult<Option<Depot>> {
let variant = self.dispatch().call_method_by_name("DO_Depot", &[])?;
if variant.is_empty_or_null() {
return Ok(None);
}
let dispatch = variant.to_dispatch()?;
Ok(Some(Depot { dispatch }))
}
pub fn do_souche(&self) -> SageResult<i16> {
self.dispatch()
.call_method_by_name("DO_Souche", &[])?
.to_short()
}
pub fn do_devise(&self) -> SageResult<i16> {
self.dispatch()
.call_method_by_name("DO_Devise", &[])?
.to_short()
}
pub fn do_cours(&self) -> SageResult<f64> {
self.dispatch()
.call_method_by_name("DO_Cours", &[])?
.to_f64()
}
pub fn do_langue(&self) -> SageResult<i16> {
self.dispatch()
.call_method_by_name("DO_Langue", &[])?
.to_short()
}
pub fn do_acheteur(&self) -> SageResult<Option<Collaborateur>> {
let variant = self.dispatch().call_method_by_name("DO_Acheteur", &[])?;
if variant.is_empty_or_null() {
return Ok(None);
}
let dispatch = variant.to_dispatch()?;
Ok(Some(Collaborateur { dispatch }))
}
pub fn do_statut(&self) -> SageResult<i16> {
self.dispatch()
.call_method_by_name("DO_Statut", &[])?
.to_short()
}
pub fn do_commentaire(&self) -> SageResult<String> {
self.dispatch()
.call_method_by_name("DO_Commentaire", &[])?
.to_string()
}
pub fn do_expedit(&self) -> SageResult<String> {
self.dispatch()
.call_method_by_name("DO_Expedit", &[])?
.to_string()
}
pub fn do_total_ht(&self) -> SageResult<f64> {
self.dispatch()
.call_method_by_name("DO_TotalHT", &[])?
.to_f64()
}
pub fn do_total_ttc(&self) -> SageResult<f64> {
self.dispatch()
.call_method_by_name("DO_TotalTTC", &[])?
.to_f64()
}
pub fn do_montant_tva(&self) -> SageResult<f64> {
self.dispatch()
.call_method_by_name("DO_MontantTVA", &[])?
.to_f64()
}
pub fn do_net_a_payer(&self) -> SageResult<f64> {
self.dispatch()
.call_method_by_name("DO_NetAPayer", &[])?
.to_f64()
}
pub fn do_remise(&self) -> SageResult<f64> {
self.dispatch()
.call_method_by_name("DO_Remise", &[])?
.to_f64()
}
pub fn do_montant_remise(&self) -> SageResult<f64> {
self.dispatch()
.call_method_by_name("DO_MontantRemise", &[])?
.to_f64()
}
pub fn do_port_ht(&self) -> SageResult<f64> {
self.dispatch()
.call_method_by_name("DO_PortHT", &[])?
.to_f64()
}
pub fn do_port_ttc(&self) -> SageResult<f64> {
self.dispatch()
.call_method_by_name("DO_PortTTC", &[])?
.to_f64()
}
pub fn do_taxe1(&self) -> SageResult<f64> {
self.dispatch()
.call_method_by_name("DO_Taxe1", &[])?
.to_f64()
}
pub fn do_montant_taxe1(&self) -> SageResult<f64> {
self.dispatch()
.call_method_by_name("DO_MontantTaxe1", &[])?
.to_f64()
}
pub fn do_regime(&self) -> SageResult<i16> {
self.dispatch()
.call_method_by_name("DO_Regime", &[])?
.to_short()
}
pub fn do_reglement(&self) -> SageResult<Option<Reglement>> {
let variant = self.dispatch().call_method_by_name("DO_Reglement", &[])?;
if variant.is_empty_or_null() {
return Ok(None);
}
let dispatch = variant.to_dispatch()?;
Ok(Some(Reglement { dispatch }))
}
pub fn do_nb_echeance(&self) -> SageResult<i16> {
self.dispatch()
.call_method_by_name("DO_NbEcheance", &[])?
.to_short()
}
pub fn do_banque(&self) -> SageResult<i16> {
self.dispatch()
.call_method_by_name("DO_Banque", &[])?
.to_short()
}
pub fn do_date_echeance(&self) -> SageResult<String> {
self.dispatch()
.call_method_by_name("DO_DateEcheance", &[])?
.to_string()
}
pub fn do_solde(&self) -> SageResult<f64> {
self.dispatch()
.call_method_by_name("DO_Solde", &[])?
.to_f64()
}
pub fn do_transf(&self) -> SageResult<bool> {
self.dispatch()
.call_method_by_name("DO_Transf", &[])?
.to_bool()
}
pub fn do_cloture(&self) -> SageResult<bool> {
self.dispatch()
.call_method_by_name("DO_Cloture", &[])?
.to_bool()
}
pub fn do_imprime(&self) -> SageResult<bool> {
self.dispatch()
.call_method_by_name("DO_Imprime", &[])?
.to_bool()
}
pub fn do_date_cr(&self) -> SageResult<String> {
self.dispatch()
.call_method_by_name("DO_DateCr", &[])?
.to_string()
}
pub fn do_date_modif(&self) -> SageResult<String> {
self.dispatch()
.call_method_by_name("DO_DateModif", &[])?
.to_string()
}
pub fn do_user_cr(&self) -> SageResult<Option<Collaborateur>> {
let variant = self.dispatch().call_method_by_name("DO_UserCr", &[])?;
if variant.is_empty_or_null() {
return Ok(None);
}
let dispatch = variant.to_dispatch()?;
Ok(Some(Collaborateur { dispatch }))
}
pub fn do_user_modif(&self) -> SageResult<Option<Collaborateur>> {
let variant = self.dispatch().call_method_by_name("DO_UserModif", &[])?;
if variant.is_empty_or_null() {
return Ok(None);
}
let dispatch = variant.to_dispatch()?;
Ok(Some(Collaborateur { dispatch }))
}
pub fn do_num_origine(&self) -> SageResult<String> {
self.dispatch()
.call_method_by_name("DO_NumOrigine", &[])?
.to_string()
}
pub fn document_lignes(&self) -> SageResult<SafeVariant> {
self.dispatch().call_method_by_name("DocumentLignes", &[])
}
pub fn create_ligne(&self) -> SageResult<SafeVariant> {
self.dispatch().call_method_by_name("CreateLigne", &[])
}
pub fn nb_lignes(&self) -> SageResult<i32> {
let lignes = self.document_lignes()?;
let dispatch = lignes.to_dispatch()?;
let safe_dispatch = SafeDispatch::new(&dispatch);
safe_dispatch.call_method_by_name("Count", &[])?.to_i32()
}
pub fn set_do_piece(&self, piece: &str) -> SageResult<()> {
let param = SafeVariant::from_string(piece);
self.dispatch().call_property_put("DO_Piece", &[param])?;
Ok(())
}
pub fn set_do_date(&self, date: &str) -> SageResult<()> {
let param = SafeVariant::from_string(date);
self.dispatch().call_property_put("DO_Date", &[param])?;
Ok(())
}
pub fn set_do_ref(&self, ref_ext: &str) -> SageResult<()> {
let param = SafeVariant::from_string(ref_ext);
self.dispatch().call_property_put("DO_Ref", &[param])?;
Ok(())
}
pub fn set_do_tiers(&self, ct_num: &str) -> SageResult<()> {
let param = SafeVariant::from_string(ct_num);
self.dispatch().call_property_put("DO_Tiers", &[param])?;
Ok(())
}
pub fn set_do_contact(&self, co_num: i32) -> SageResult<()> {
let param = SafeVariant::from_i32(co_num);
self.dispatch().call_property_put("DO_Contact", &[param])?;
Ok(())
}
pub fn set_do_depot(&self, de_intitule: &str) -> SageResult<()> {
let param = SafeVariant::from_string(de_intitule);
self.dispatch().call_property_put("DO_Depot", &[param])?;
Ok(())
}
pub fn set_do_souche(&self, souche: i16) -> SageResult<()> {
let param = SafeVariant::from_i16(souche);
self.dispatch().call_property_put("DO_Souche", &[param])?;
Ok(())
}
pub fn set_do_commentaire(&self, comment: &str) -> SageResult<()> {
let param = SafeVariant::from_string(comment);
self.dispatch()
.call_property_put("DO_Commentaire", &[param])?;
Ok(())
}
pub fn set_do_expedit(&self, expedit: &str) -> SageResult<()> {
let param = SafeVariant::from_string(expedit);
self.dispatch().call_property_put("DO_Expedit", &[param])?;
Ok(())
}
pub fn set_do_remise(&self, remise: f64) -> SageResult<()> {
let param = SafeVariant::from_f64(remise);
self.dispatch().call_property_put("DO_Remise", &[param])?;
Ok(())
}
pub fn set_do_port_ht(&self, port: f64) -> SageResult<()> {
let param = SafeVariant::from_f64(port);
self.dispatch().call_property_put("DO_PortHT", &[param])?;
Ok(())
}
pub fn set_do_taxe1(&self, taxe: f64) -> SageResult<()> {
let param = SafeVariant::from_f64(taxe);
self.dispatch().call_property_put("DO_Taxe1", &[param])?;
Ok(())
}
pub fn set_do_regime(&self, regime: i16) -> SageResult<()> {
let param = SafeVariant::from_i16(regime);
self.dispatch().call_property_put("DO_Regime", &[param])?;
Ok(())
}
pub fn set_do_reglement(&self, r_code: &str) -> SageResult<()> {
let param = SafeVariant::from_string(r_code);
self.dispatch()
.call_property_put("DO_Reglement", &[param])?;
Ok(())
}
pub fn set_do_nb_echeance(&self, nb: i16) -> SageResult<()> {
let param = SafeVariant::from_i16(nb);
self.dispatch()
.call_property_put("DO_NbEcheance", &[param])?;
Ok(())
}
pub fn recalculate_totals(&self) -> SageResult<()> {
self.dispatch()
.call_method_by_name("RecalculateTotals", &[])?;
Ok(())
}
pub fn validate_document(&self) -> SageResult<()> {
self.dispatch()
.call_method_by_name("ValidateDocument", &[])?;
Ok(())
}
pub fn duplicate(&self) -> SageResult<SafeVariant> {
self.dispatch().call_method_by_name("Duplicate", &[])
}
pub fn transfer_to(&self, doc_type: i16) -> SageResult<SafeVariant> {
let param = SafeVariant::from_i16(doc_type);
self.dispatch().call_method_by_name("TransferTo", &[param])
}
pub fn add_article(&self, article: &Article, quantite: f64) -> SageResult<SafeVariant> {
let ar_ref = article.ar_ref()?;
let param_ref = SafeVariant::from_string(&ar_ref);
let param_qte = SafeVariant::from_f64(quantite);
self.dispatch()
.call_method_by_name("AddArticle", &[param_ref, param_qte])
}
pub fn close_document(&self) -> SageResult<()> {
let param = SafeVariant::from_bool(true);
self.dispatch().call_property_put("DO_Cloture", &[param])?;
Ok(())
}
pub fn cbmarq(&self) -> SageResult<i32> {
self.dispatch().call_method_by_name("cbMarq", &[])?.to_i32()
}
pub fn write(&self) -> SageResult<()> {
self.dispatch().call_method_by_name("Write", &[])?;
Ok(())
}
pub fn remove(&self) -> SageResult<()> {
self.dispatch().call_method_by_name("Remove", &[])?;
Ok(())
}
}