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;
use windows::Win32::System::Com::IDispatch;
pub struct DocumentStock {
pub(crate) dispatch: IDispatch,
}
impl DocumentStock {
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_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_commentaire(&self) -> SageResult<String> {
self.dispatch()
.call_method_by_name("DO_Commentaire", &[])?
.to_string()
}
pub fn do_statut(&self) -> SageResult<i16> {
self.dispatch()
.call_method_by_name("DO_Statut", &[])?
.to_short()
}
pub fn do_depot_dest(&self) -> SageResult<Option<Depot>> {
let variant = self.dispatch().call_method_by_name("DO_DepotDest", &[])?;
if variant.is_empty_or_null() {
return Ok(None);
}
let dispatch = variant.to_dispatch()?;
Ok(Some(Depot { dispatch }))
}
pub fn do_quantite(&self) -> SageResult<f64> {
self.dispatch()
.call_method_by_name("DO_Quantite", &[])?
.to_f64()
}
pub fn do_valeur(&self) -> SageResult<f64> {
self.dispatch()
.call_method_by_name("DO_Valeur", &[])?
.to_f64()
}
pub fn do_valide(&self) -> SageResult<bool> {
self.dispatch()
.call_method_by_name("DO_Valide", &[])?
.to_bool()
}
pub fn do_cloture(&self) -> SageResult<bool> {
self.dispatch()
.call_method_by_name("DO_Cloture", &[])?
.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_lot(&self) -> SageResult<String> {
self.dispatch()
.call_method_by_name("DO_Lot", &[])?
.to_string()
}
pub fn do_serie(&self) -> SageResult<String> {
self.dispatch()
.call_method_by_name("DO_Serie", &[])?
.to_string()
}
pub fn do_dluo(&self) -> SageResult<String> {
self.dispatch()
.call_method_by_name("DO_DLUO", &[])?
.to_string()
}
pub fn do_dlc(&self) -> SageResult<String> {
self.dispatch()
.call_method_by_name("DO_DLC", &[])?
.to_string()
}
pub fn do_num_fab(&self) -> SageResult<String> {
self.dispatch()
.call_method_by_name("DO_NumFab", &[])?
.to_string()
}
pub fn do_transporteur(&self) -> SageResult<String> {
self.dispatch()
.call_method_by_name("DO_Transporteur", &[])?
.to_string()
}
pub fn do_colis(&self) -> SageResult<String> {
self.dispatch()
.call_method_by_name("DO_Colis", &[])?
.to_string()
}
pub fn do_poids_net(&self) -> SageResult<f64> {
self.dispatch()
.call_method_by_name("DO_PoidsNet", &[])?
.to_f64()
}
pub fn do_poids_brut(&self) -> SageResult<f64> {
self.dispatch()
.call_method_by_name("DO_PoidsBrut", &[])?
.to_f64()
}
pub fn do_section(&self) -> SageResult<String> {
self.dispatch()
.call_method_by_name("DO_Section", &[])?
.to_string()
}
pub fn do_affaire(&self) -> SageResult<String> {
self.dispatch()
.call_method_by_name("DO_Affaire", &[])?
.to_string()
}
pub fn do_imprime(&self) -> SageResult<bool> {
self.dispatch()
.call_method_by_name("DO_Imprime", &[])?
.to_bool()
}
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_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_depot_dest(&self, de_intitule: &str) -> SageResult<()> {
let param = SafeVariant::from_string(de_intitule);
self.dispatch()
.call_property_put("DO_DepotDest", &[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_valide(&self, valide: bool) -> SageResult<()> {
let param = SafeVariant::from_bool(valide);
self.dispatch().call_property_put("DO_Valide", &[param])?;
Ok(())
}
pub fn set_do_lot(&self, lot: &str) -> SageResult<()> {
let param = SafeVariant::from_string(lot);
self.dispatch().call_property_put("DO_Lot", &[param])?;
Ok(())
}
pub fn set_do_serie(&self, serie: &str) -> SageResult<()> {
let param = SafeVariant::from_string(serie);
self.dispatch().call_property_put("DO_Serie", &[param])?;
Ok(())
}
pub fn set_do_transporteur(&self, transporteur: &str) -> SageResult<()> {
let param = SafeVariant::from_string(transporteur);
self.dispatch()
.call_property_put("DO_Transporteur", &[param])?;
Ok(())
}
pub fn set_do_section(&self, section: &str) -> SageResult<()> {
let param = SafeVariant::from_string(section);
self.dispatch().call_property_put("DO_Section", &[param])?;
Ok(())
}
pub fn set_do_affaire(&self, affaire: &str) -> SageResult<()> {
let param = SafeVariant::from_string(affaire);
self.dispatch().call_property_put("DO_Affaire", &[param])?;
Ok(())
}
pub fn set_do_imprime(&self, imprime: bool) -> SageResult<()> {
let param = SafeVariant::from_bool(imprime);
self.dispatch().call_property_put("DO_Imprime", &[param])?;
Ok(())
}
pub fn set_do_cloture(&self, cloture: bool) -> SageResult<()> {
let param = SafeVariant::from_bool(cloture);
self.dispatch().call_property_put("DO_Cloture", &[param])?;
Ok(())
}
pub fn validate_document(&self) -> SageResult<()> {
self.set_do_valide(true)?;
Ok(())
}
pub fn close_document(&self) -> SageResult<()> {
let param = SafeVariant::from_bool(true);
self.dispatch().call_property_put("DO_Cloture", &[param])?;
Ok(())
}
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 duplicate(&self) -> SageResult<SafeVariant> {
self.dispatch().call_method_by_name("Duplicate", &[])
}
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(())
}
}