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
146
147
//! Trait pour la synchronisation d'entités
//!
//! Ce trait standardise les méthodes de synchronisation permettant de récupérer
//! les entités modifiées ou supprimées depuis une date/heure donnée.
use crateSageResult;
/// Trait pour les factories supportant la synchronisation
///
/// Ce trait fournit une interface commune pour synchroniser les données entre
/// un système externe et Sage. Il permet de récupérer uniquement les entités
/// qui ont été modifiées ou supprimées depuis la dernière synchronisation.
///
/// # Type Parameter
///
/// * `T` - Le type d'entité synchronisé
///
/// # Workflow de synchronisation
///
/// 1. Sauvegarder la date/heure de dernière synchro
/// 2. Appeler `query_synchro()` pour récupérer les entités modifiées
/// 3. Appeler `query_synchro_removed()` pour récupérer les entités supprimées
/// 4. Mettre à jour le système externe
/// 5. Sauvegarder la nouvelle date/heure de synchro
///
/// # Exemple
///
/// ```rust,ignore
/// use objets_metier_rs::wrappers::cpta::traits::FactorySyncable;
/// use chrono::Utc;
///
/// fn synchroniser<F, T>(factory: &F) -> SageResult<()>
/// where
/// F: FactorySyncable<T>,
/// T: std::fmt::Debug,
/// {
/// // Récupérer les entités modifiées
/// let modifiees = factory.query_synchro()?;
/// println!("Entités modifiées : {}", modifiees.len());
///
/// // Récupérer les entités supprimées
/// let supprimees = factory.query_synchro_removed()?;
/// println!("Entités supprimées : {}", supprimees.len());
///
/// // Traiter les modifications...
///
/// Ok(())
/// }
/// ```
/// Extension du trait FactorySyncable avec synchronisation par OID
///
/// Certaines factories supportent une synchronisation plus fine basée sur
/// les Object IDs (OID) Sage. Ce trait optionnel permet une synchronisation
/// incrémentale plus efficace.
///
/// # Note
///
/// Ce trait n'est disponible que pour certaines entités spécifiques
/// (principalement les écritures comptables).
// Sera utilisé dans les futures versions