use crate::com::{SafeDispatch, SafeVariant};
use crate::errors::{SageError, SageResult};
use crate::wrappers::cial::objects::{ConditionLivraison, Depot, Expedition};
use crate::wrappers::cpta::objects::{Contact, Devise, Reglement, Tiers};
use windows::Win32::System::Com::IDispatch;
pub struct DocumentVente {
pub(crate) dispatch: IDispatch,
}
impl DocumentVente {
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 set_do_piece(&self, value: &str) -> SageResult<()> {
let param = SafeVariant::from_string(value);
self.dispatch().call_property_put("DO_Piece", &[param])?;
Ok(())
}
pub fn do_type(&self) -> SageResult<i32> {
self.dispatch()
.call_method_by_name("DO_Type", &[])?
.to_i32()
}
pub fn cbmarq(&self) -> SageResult<i32> {
self.dispatch().call_method_by_name("cbMarq", &[])?.to_i32()
}
pub fn do_date(&self) -> SageResult<String> {
self.dispatch()
.call_method_by_name("DO_Date", &[])?
.to_string()
}
pub fn set_do_date(&self, value: &str) -> SageResult<()> {
let param = SafeVariant::from_string(value);
self.dispatch().call_property_put("DO_Date", &[param])?;
Ok(())
}
pub fn do_date_livr(&self) -> SageResult<String> {
self.dispatch()
.call_method_by_name("DO_DateLivr", &[])?
.to_string()
}
pub fn set_do_date_livr(&self, value: &str) -> SageResult<()> {
let param = SafeVariant::from_string(value);
self.dispatch().call_property_put("DO_DateLivr", &[param])?;
Ok(())
}
pub fn do_souche(&self) -> SageResult<i32> {
self.dispatch()
.call_method_by_name("DO_Souche", &[])?
.to_i32()
}
pub fn set_do_souche(&self, value: i32) -> SageResult<()> {
let param = SafeVariant::I4(value);
self.dispatch().call_property_put("DO_Souche", &[param])?;
Ok(())
}
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);
}
if variant.is_object() {
Ok(Some(Tiers {
dispatch: variant.to_dispatch()?,
}))
} else {
Err(SageError::ConversionError {
from_type: "VARIANT".to_string(),
to_type: "Tiers".to_string(),
value: "DO_Tiers n'est pas un objet".to_string(),
})
}
}
pub fn set_do_tiers(&self, tiers: &Tiers) -> SageResult<()> {
let param = SafeVariant::from_dispatch(tiers.dispatch.clone());
self.dispatch().call_property_put("DO_Tiers", &[param])?;
Ok(())
}
pub fn do_tiers_payeur(&self) -> SageResult<Option<Tiers>> {
let variant = self.dispatch().call_method_by_name("DO_TiersPayeur", &[])?;
if variant.is_empty_or_null() {
return Ok(None);
}
if variant.is_object() {
Ok(Some(Tiers {
dispatch: variant.to_dispatch()?,
}))
} else {
Err(SageError::ConversionError {
from_type: "VARIANT".to_string(),
to_type: "Tiers".to_string(),
value: "DO_TiersPayeur n'est pas un objet".to_string(),
})
}
}
pub fn set_do_tiers_payeur(&self, tiers: &Tiers) -> SageResult<()> {
let param = SafeVariant::from_dispatch(tiers.dispatch.clone());
self.dispatch()
.call_property_put("DO_TiersPayeur", &[param])?;
Ok(())
}
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);
}
if variant.is_object() {
Ok(Some(Contact {
dispatch: variant.to_dispatch()?,
}))
} else {
Err(SageError::ConversionError {
from_type: "VARIANT".to_string(),
to_type: "Contact".to_string(),
value: "DO_Contact n'est pas un objet".to_string(),
})
}
}
pub fn set_do_contact(&self, contact: &Contact) -> SageResult<()> {
let param = SafeVariant::from_dispatch(contact.dispatch.clone());
self.dispatch().call_property_put("DO_Contact", &[param])?;
Ok(())
}
pub fn do_ref(&self) -> SageResult<String> {
self.dispatch()
.call_method_by_name("DO_Ref", &[])?
.to_string()
}
pub fn set_do_ref(&self, value: &str) -> SageResult<()> {
let param = SafeVariant::from_string(value);
self.dispatch().call_property_put("DO_Ref", &[param])?;
Ok(())
}
pub fn do_devise(&self) -> SageResult<Option<Devise>> {
let variant = self.dispatch().call_method_by_name("DO_Devise", &[])?;
if variant.is_empty_or_null() {
return Ok(None);
}
if variant.is_object() {
Ok(Some(Devise {
dispatch: variant.to_dispatch()?,
}))
} else {
Err(SageError::ConversionError {
from_type: "VARIANT".to_string(),
to_type: "Devise".to_string(),
value: "DO_Devise n'est pas un objet".to_string(),
})
}
}
pub fn set_do_devise(&self, devise: &Devise) -> SageResult<()> {
let param = SafeVariant::from_dispatch(devise.dispatch.clone());
self.dispatch().call_property_put("DO_Devise", &[param])?;
Ok(())
}
pub fn do_cours(&self) -> SageResult<f64> {
self.dispatch()
.call_method_by_name("DO_Cours", &[])?
.to_f64()
}
pub fn set_do_cours(&self, value: f64) -> SageResult<()> {
let param = SafeVariant::R8(value);
self.dispatch().call_property_put("DO_Cours", &[param])?;
Ok(())
}
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);
}
if variant.is_object() {
Ok(Some(Depot {
dispatch: variant.to_dispatch()?,
}))
} else {
Err(SageError::ConversionError {
from_type: "VARIANT".to_string(),
to_type: "Depot".to_string(),
value: "DO_Depot n'est pas un objet".to_string(),
})
}
}
pub fn set_do_depot(&self, depot: &Depot) -> SageResult<()> {
let param = SafeVariant::from_dispatch(depot.dispatch.clone());
self.dispatch().call_property_put("DO_Depot", &[param])?;
Ok(())
}
pub fn do_condition(&self) -> SageResult<Option<ConditionLivraison>> {
let variant = self.dispatch().call_method_by_name("DO_Condition", &[])?;
if variant.is_empty_or_null() {
return Ok(None);
}
if variant.is_object() {
Ok(Some(ConditionLivraison {
dispatch: variant.to_dispatch()?,
}))
} else {
Err(SageError::ConversionError {
from_type: "VARIANT".to_string(),
to_type: "ConditionLivraison".to_string(),
value: "DO_Condition n'est pas un objet".to_string(),
})
}
}
pub fn set_do_condition(&self, condition: &ConditionLivraison) -> SageResult<()> {
let param = SafeVariant::from_dispatch(condition.dispatch.clone());
self.dispatch()
.call_property_put("DO_Condition", &[param])?;
Ok(())
}
pub fn do_expedition(&self) -> SageResult<Option<Expedition>> {
let variant = self.dispatch().call_method_by_name("DO_Expedition", &[])?;
if variant.is_empty_or_null() {
return Ok(None);
}
if variant.is_object() {
Ok(Some(Expedition {
dispatch: variant.to_dispatch()?,
}))
} else {
Err(SageError::ConversionError {
from_type: "VARIANT".to_string(),
to_type: "Expedition".to_string(),
value: "DO_Expedition n'est pas un objet".to_string(),
})
}
}
pub fn set_do_expedition(&self, expedition: &Expedition) -> SageResult<()> {
let param = SafeVariant::from_dispatch(expedition.dispatch.clone());
self.dispatch()
.call_property_put("DO_Expedition", &[param])?;
Ok(())
}
pub fn do_langue(&self) -> SageResult<i16> {
self.dispatch()
.call_method_by_name("DO_Langue", &[])?
.to_short()
}
pub fn set_do_langue(&self, value: i16) -> SageResult<()> {
let param = SafeVariant::I2(value);
self.dispatch().call_property_put("DO_Langue", &[param])?;
Ok(())
}
pub fn do_statut(&self) -> SageResult<i16> {
self.dispatch()
.call_method_by_name("DO_Statut", &[])?
.to_short()
}
pub fn set_do_statut(&self, value: i16) -> SageResult<()> {
let param = SafeVariant::I2(value);
self.dispatch().call_property_put("DO_Statut", &[param])?;
Ok(())
}
pub fn do_valide(&self) -> SageResult<bool> {
self.dispatch()
.call_method_by_name("DO_Valide", &[])?
.to_bool()
}
pub fn set_do_valide(&self, value: bool) -> SageResult<()> {
let param = SafeVariant::Bool(value);
self.dispatch().call_property_put("DO_Valide", &[param])?;
Ok(())
}
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_net_a_payer(&self) -> SageResult<f64> {
self.dispatch()
.call_method_by_name("DO_NetAPayer", &[])?
.to_f64()
}
pub fn do_total_remise(&self) -> SageResult<f64> {
self.dispatch()
.call_method_by_name("DO_TotalRemise", &[])?
.to_f64()
}
pub fn do_remise(&self) -> SageResult<f64> {
self.dispatch()
.call_method_by_name("DO_Remise", &[])?
.to_f64()
}
pub fn set_do_remise(&self, value: f64) -> SageResult<()> {
let param = SafeVariant::R8(value);
self.dispatch().call_property_put("DO_Remise", &[param])?;
Ok(())
}
pub fn do_montant_remise(&self) -> SageResult<f64> {
self.dispatch()
.call_method_by_name("DO_MontantRemise", &[])?
.to_f64()
}
pub fn set_do_montant_remise(&self, value: f64) -> SageResult<()> {
let param = SafeVariant::R8(value);
self.dispatch()
.call_property_put("DO_MontantRemise", &[param])?;
Ok(())
}
pub fn do_port_ht(&self) -> SageResult<f64> {
self.dispatch()
.call_method_by_name("DO_PortHT", &[])?
.to_f64()
}
pub fn set_do_port_ht(&self, value: f64) -> SageResult<()> {
let param = SafeVariant::R8(value);
self.dispatch().call_property_put("DO_PortHT", &[param])?;
Ok(())
}
pub fn do_port_ttc(&self) -> SageResult<f64> {
self.dispatch()
.call_method_by_name("DO_PortTTC", &[])?
.to_f64()
}
pub fn do_total_poids(&self) -> SageResult<f64> {
self.dispatch()
.call_method_by_name("DO_TotalPoids", &[])?
.to_f64()
}
pub fn do_total_volume(&self) -> SageResult<f64> {
self.dispatch()
.call_method_by_name("DO_TotalVolume", &[])?
.to_f64()
}
pub fn do_montant_regle(&self) -> SageResult<f64> {
self.dispatch()
.call_method_by_name("DO_MontantRegle", &[])?
.to_f64()
}
pub fn do_solde(&self) -> SageResult<f64> {
self.dispatch()
.call_method_by_name("DO_Solde", &[])?
.to_f64()
}
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);
}
if variant.is_object() {
Ok(Some(Reglement {
dispatch: variant.to_dispatch()?,
}))
} else {
Err(SageError::ConversionError {
from_type: "VARIANT".to_string(),
to_type: "Reglement".to_string(),
value: "DO_Reglement n'est pas un objet".to_string(),
})
}
}
pub fn set_do_reglement(&self, reglement: &Reglement) -> SageResult<()> {
let param = SafeVariant::from_dispatch(reglement.dispatch.clone());
self.dispatch()
.call_property_put("DO_Reglement", &[param])?;
Ok(())
}
pub fn do_condition_r(&self) -> SageResult<String> {
self.dispatch()
.call_method_by_name("DO_ConditionR", &[])?
.to_string()
}
pub fn set_do_condition_r(&self, value: &str) -> SageResult<()> {
let param = SafeVariant::from_string(value);
self.dispatch()
.call_property_put("DO_ConditionR", &[param])?;
Ok(())
}
pub fn do_nb_echeance(&self) -> SageResult<i16> {
self.dispatch()
.call_method_by_name("DO_NbEcheance", &[])?
.to_short()
}
pub fn set_do_nb_echeance(&self, value: i16) -> SageResult<()> {
let param = SafeVariant::I2(value);
self.dispatch()
.call_property_put("DO_NbEcheance", &[param])?;
Ok(())
}
pub fn do_date_echeance1(&self) -> SageResult<String> {
self.dispatch()
.call_method_by_name("DO_DateEcheance1", &[])?
.to_string()
}
pub fn set_do_date_echeance1(&self, value: &str) -> SageResult<()> {
let param = SafeVariant::from_string(value);
self.dispatch()
.call_property_put("DO_DateEcheance1", &[param])?;
Ok(())
}
pub fn do_type_paiement(&self) -> SageResult<i16> {
self.dispatch()
.call_method_by_name("DO_TypePaiement", &[])?
.to_short()
}
pub fn set_do_type_paiement(&self, value: i16) -> SageResult<()> {
let param = SafeVariant::I2(value);
self.dispatch()
.call_property_put("DO_TypePaiement", &[param])?;
Ok(())
}
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 set_do_cloture(&self, value: bool) -> SageResult<()> {
let param = SafeVariant::Bool(value);
self.dispatch().call_property_put("DO_Cloture", &[param])?;
Ok(())
}
pub fn do_facturer(&self) -> SageResult<bool> {
self.dispatch()
.call_method_by_name("DO_Facturer", &[])?
.to_bool()
}
pub fn do_expedier(&self) -> SageResult<bool> {
self.dispatch()
.call_method_by_name("DO_Expedier", &[])?
.to_bool()
}
pub fn do_user(&self) -> SageResult<String> {
self.dispatch()
.call_method_by_name("DO_User", &[])?
.to_string()
}
pub fn do_date_creat(&self) -> SageResult<String> {
self.dispatch()
.call_method_by_name("DO_DateCreat", &[])?
.to_string()
}
pub fn do_date_modif(&self) -> SageResult<String> {
self.dispatch()
.call_method_by_name("DO_DateModif", &[])?
.to_string()
}
pub fn do_commentaire(&self) -> SageResult<String> {
self.dispatch()
.call_method_by_name("DO_Commentaire", &[])?
.to_string()
}
pub fn set_do_commentaire(&self, value: &str) -> SageResult<()> {
let param = SafeVariant::from_string(value);
self.dispatch()
.call_property_put("DO_Commentaire", &[param])?;
Ok(())
}
pub fn document_lignes(&self) -> SageResult<SafeVariant> {
self.dispatch().call_method_by_name("DocumentLignes", &[])
}
pub fn get_ligne(&self, index: i32) -> SageResult<SafeVariant> {
let param = SafeVariant::I4(index);
self.dispatch().call_method_by_name("GetLigne", &[param])
}
pub fn create_ligne(&self) -> SageResult<SafeVariant> {
self.dispatch().call_method_by_name("CreateLigne", &[])
}
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 transfer_to(&self, doc_type: i16) -> SageResult<SafeVariant> {
let param = SafeVariant::I2(doc_type);
self.dispatch().call_method_by_name("TransferTo", &[param])
}
pub fn close_document(&self) -> SageResult<()> {
self.dispatch().call_method_by_name("CloseDocument", &[])?;
Ok(())
}
pub fn add_payment(&self, amount: f64) -> SageResult<()> {
let param = SafeVariant::R8(amount);
self.dispatch()
.call_method_by_name("AddPayment", &[param])?;
Ok(())
}
pub fn duplicate(&self) -> SageResult<DocumentVente> {
let result = self.dispatch().call_method_by_name("Duplicate", &[])?;
if result.is_object() {
Ok(DocumentVente {
dispatch: result.to_dispatch()?,
})
} else {
Err(SageError::ConversionError {
from_type: "VARIANT".to_string(),
to_type: "DocumentVente".to_string(),
value: "Duplicate ne retourne pas un objet".to_string(),
})
}
}
pub fn print_preview(&self) -> SageResult<()> {
self.dispatch().call_method_by_name("PrintPreview", &[])?;
Ok(())
}
pub fn send_email(&self, email: &str) -> SageResult<()> {
let param = SafeVariant::from_string(email);
self.dispatch().call_method_by_name("SendEmail", &[param])?;
Ok(())
}
pub fn write(&self) -> SageResult<()> {
self.dispatch().call_method_by_name("Write", &[])?;
Ok(())
}
pub fn write_default(&self) -> SageResult<()> {
self.dispatch().call_method_by_name("WriteDefault", &[])?;
Ok(())
}
pub fn remove(&self) -> SageResult<()> {
self.dispatch().call_method_by_name("Remove", &[])?;
Ok(())
}
pub fn set_default_client(&self, client_dispatch: &IDispatch) -> SageResult<()> {
let param = SafeVariant::from_dispatch(client_dispatch.clone());
self.dispatch()
.call_method_by_name("SetDefaultClient", &[param])?;
Ok(())
}
pub fn set_default_do_piece(&self) -> SageResult<()> {
self.dispatch()
.call_method_by_name("SetDefaultDO_Piece", &[])?;
Ok(())
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_document_vente_has_enriched_properties() {
}
}