1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
use crate::com::{SafeDispatch, SafeVariant};
use crate::errors::SageResult;
use windows::Win32::System::Com::IDispatch;
/// ✅ IMPLÉMENTATION ENRICHIE - Version Phase 6
///
/// Wrapper pour conditionnements d'articles (IBSCIALConditionnement3)
///
/// Un conditionnement définit un mode de vente ou d'achat groupé :
/// - Unité (pièce individuelle)
/// - Carton de 12
/// - Palette de 100
/// - Lot de 50
/// - etc.
///
/// Chaque conditionnement est lié à une unité de base et possède
/// un coefficient de conversion.
///
/// # Exemple
/// ```no_run
/// use objets_metier_rs::wrappers::cial::CialApplication;
///
/// let cial_app = CialApplication::new("Objets100c.CIAL")?;
/// let factory = cial_app.factory_conditionnement()?;
///
/// let cond = factory.create()?;
/// cond.set_intitule("Carton de 12")?;
/// cond.set_coefficient(12.0)?;
/// cond.write()?;
/// # Ok::<(), Box<dyn std::error::Error>>(())
/// ```
pub struct Conditionnement {
pub(crate) dispatch: IDispatch,
}
impl Conditionnement {
fn dispatch(&self) -> SafeDispatch<'_> {
SafeDispatch::new(&self.dispatch)
}
// ═══════════════════════════════════════════════════════════════════════
// PROPRIÉTÉS DE BASE (2 propriétés)
// ═══════════════════════════════════════════════════════════════════════
/// Identifiant unique (cbMarq)
pub fn cbmarq(&self) -> SageResult<i32> {
self.dispatch().call_method_by_name("cbMarq", &[])?.to_i32()
}
/// Intitulé du conditionnement
pub fn intitule(&self) -> SageResult<String> {
self.dispatch()
.call_method_by_name("Intitule", &[])?
.to_string()
}
// ═══════════════════════════════════════════════════════════════════════
// PROPRIÉTÉS DE CONFIGURATION (4 propriétés)
// ═══════════════════════════════════════════════════════════════════════
/// Coefficient de conversion (ex: 12 pour carton de 12)
pub fn coefficient(&self) -> SageResult<f64> {
self.dispatch()
.call_method_by_name("Coefficient", &[])?
.to_f64()
}
/// Code barre du conditionnement
pub fn code_barre(&self) -> SageResult<String> {
self.dispatch()
.call_method_by_name("CodeBarre", &[])?
.to_string()
}
/// Poids du conditionnement
pub fn poids(&self) -> SageResult<f64> {
self.dispatch().call_method_by_name("Poids", &[])?.to_f64()
}
/// Volume du conditionnement
pub fn volume(&self) -> SageResult<f64> {
self.dispatch().call_method_by_name("Volume", &[])?.to_f64()
}
// ═══════════════════════════════════════════════════════════════════════
// SETTERS (5 setters)
// ═══════════════════════════════════════════════════════════════════════
/// Modifie l'intitulé du conditionnement
pub fn set_intitule(&self, value: &str) -> SageResult<()> {
let param = SafeVariant::from_string(value);
self.dispatch().call_property_put("Intitule", &[param])?;
Ok(())
}
/// Modifie le coefficient de conversion
pub fn set_coefficient(&self, coef: f64) -> SageResult<()> {
let param = SafeVariant::from_f64(coef);
self.dispatch().call_property_put("Coefficient", &[param])?;
Ok(())
}
/// Modifie le code barre
pub fn set_code_barre(&self, code: &str) -> SageResult<()> {
let param = SafeVariant::from_string(code);
self.dispatch().call_property_put("CodeBarre", &[param])?;
Ok(())
}
/// Modifie le poids
pub fn set_poids(&self, poids: f64) -> SageResult<()> {
let param = SafeVariant::from_f64(poids);
self.dispatch().call_property_put("Poids", &[param])?;
Ok(())
}
/// Modifie le volume
pub fn set_volume(&self, volume: f64) -> SageResult<()> {
let param = SafeVariant::from_f64(volume);
self.dispatch().call_property_put("Volume", &[param])?;
Ok(())
}
// ═══════════════════════════════════════════════════════════════════════
// MÉTHODES STANDARD (3 méthodes)
// ═══════════════════════════════════════════════════════════════════════
/// Enregistre les modifications
pub fn write(&self) -> SageResult<()> {
self.dispatch().call_method_by_name("Write", &[])?;
Ok(())
}
/// Enregistre avec valeurs par défaut
pub fn write_default(&self) -> SageResult<()> {
self.dispatch().call_method_by_name("WriteDefault", &[])?;
Ok(())
}
/// Supprime l'objet
pub fn remove(&self) -> SageResult<()> {
self.dispatch().call_method_by_name("Remove", &[])?;
Ok(())
}
}