Coverage for src/henrri_connect/models/document.py: 100%

81 statements  

« prev     ^ index     » next       coverage.py v7.14.1, created at 2026-06-05 10:54 +0200

1""" 

2Modèles Pydantic v2 pour les documents dans l'API Henrri Connect. 

3 

4Attributs: 

5- DocumentType: Représente un type de document dans l'API Henrri Connect. 

6- DocumentLabelElement: Représente un élément d'étiquette de document dans l'API Henrri Connect. 

7- DocumentLabel: Représente une étiquette de document dans l'API Henrri Connect. 

8- DocumentLineType: Représente un type de ligne de document dans l'API Henrri Connect. 

9- DocumentLine: Représente une ligne de document dans l'API Henrri Connect. 

10- DocumentLineMoveQueryParameters: Représente les paramètres de requête pour déplacer une ligne 

11de document dans l'API Henrri Connect. 

12""" 

13 

14from __future__ import annotations 

15 

16from datetime import datetime 

17 

18from .base import CamelModel, Link, DocumentKind, DocumentState, SortOrder 

19from .document_line import DocumentLine 

20from .customer import Customer 

21from .address_contacts import Address 

22 

23class DocumentType(CamelModel): 

24 """ 

25 Représente un type de document dans l'API Henrri Connect. 

26 

27 Attributs: 

28 - id: Identifiant unique du type de document. 

29 - label: Libellé du type de document. 

30 - short_label: Libellé court du type de document. 

31 - document_kind: Type de document. 

32 - is_accounting: Indique si le type de document est comptable. 

33 """ 

34 id: int | None = None 

35 label: str | None = None 

36 short_label: str | None = None 

37 document_kind: str = DocumentKind.INVOICE 

38 is_accounting: bool = False 

39 is_managed: bool = False 

40 is_mandatory: bool = False 

41 is_visible: bool = False 

42 

43 

44class DocumentLabelElement(CamelModel): 

45 """ 

46 Représente un élément d'étiquette de document dans l'API Henrri Connect. 

47 

48 Attributs: 

49 - id: Identifiant unique de l'élément d'étiquette. 

50 - model_element_id: Id de l'élément de modèle auquel appartient l'élément d'étiquette. 

51 - label: Libellé de l'élément d'étiquette. 

52 - value: Valeur de l'élément d'étiquette. 

53 - element_type: Type de l'élément d'étiquette. 

54 - is_main_element: Indique si l'élément d'étiquette est l'élément principal de l'étiquette. 

55 - size: Taille de l'élément d'étiquette. 

56 - index: Index de l'élément d'étiquette dans l'étiquette. 

57 - links: Liste de liens associés à l'élément d'étiquette (si applicable). 

58 """ 

59 id: int | None = None 

60 model_element_id: int | None = None 

61 label: str | None = None 

62 value: str | None = None 

63 element_type: str | None = None 

64 is_main_element: bool = False 

65 size: int | None = None 

66 index: int | None = None 

67 links: list[Link] | None = None 

68 

69 

70class DocumentLabel(CamelModel): 

71 """ 

72 Représente une étiquette de document dans l'API Henrri Connect. 

73 

74 Attributs: 

75 - id: Identifiant unique de l'étiquette de document. 

76 - model_id: Id du modèle auquel appartient l'étiquette de document. 

77 - document_id: Id du document auquel appartient l'étiquette de document. 

78 - label: Libellé de l'étiquette de document. 

79 - elements: Liste d'éléments d'étiquette de doc associés à l'étiquette de doc (si applicable). 

80 - links: Liste de liens associés à l'étiquette de document (si applicable). 

81 """ 

82 id: int | None = None 

83 model_id: int | None = None 

84 document_id: int | None = None 

85 label: str | None = None 

86 elements: list[DocumentLabelElement] | None = None 

87 links: list[Link] | None = None 

88 

89 

90class Document(CamelModel): 

91 """ 

92 Représente un document dans l'API Henrri Connect. 

93 

94 Attributs: 

95 - id: Identifiant unique du document. 

96 - identity: Identité du document. 

97 - finalized: Indique si le document est finalisé. 

98 - type: Type du document. 

99 - document_type_id: Identifiant du type de document. 

100 - document_type: Type de document (si applicable). 

101 - title: Titre du document. 

102 - subtitle: Sous-titre du document (si applicable). 

103 - price_before_tax: Prix total avant taxe du document. 

104 - tax_amount: Montant total de la taxe du document. 

105 - price_after_tax: Prix total après taxe du document. 

106 - due_label: Libellé de l'échéance du document (si applicable). 

107 - last_modification_date: Date de dernière modification du document. 

108 - date: Date du document. 

109 - validated: Indique si le document est validé. 

110 - validation_date: Date de validation du document (si applicable). 

111 - validation_firstname: Prénom de la personne ayant validé le document (si applicable). 

112 - validation_lastname: Nom de la personne ayant validé le document (si applicable). 

113 - validation_email: E-mail de la personne ayant validé le document (si applicable). 

114 - validation_ip: IP de la personne ayant validé le document (si applicable). 

115 - lines: Liste de lignes de document associées au document (si applicable). 

116 - customer_id: Identifiant du client associé au document (si applicable). 

117 - customer: Client associé au document (si applicable). 

118 - customer_address: Adresse du client associée au document (si applicable). 

119 - user_can_validate: Indique si l'utilisateur peut valider le document. 

120 - footer_text: Texte de pied de page du document (si applicable). 

121 - bank_account_label: Libellé du compte bancaire associé au document (si applicable). 

122 - label_id: Identifiant de l'étiquette de document associée au document (si applicable). 

123 - links: Liste de liens associés au document (si applicable). 

124 """ 

125 id: int | None = None 

126 identity: str | None = None 

127 finalized: bool = False 

128 type: str | None = None 

129 document_type_id: int 

130 document_type: DocumentType | None = None 

131 title: str | None = None 

132 subtitle: str | None = None 

133 price_before_tax: float = 0.0 

134 tax_amount: float = 0.0 

135 price_after_tax: float = 0.0 

136 due_label: str | None = None 

137 last_modification_date: datetime | None = None 

138 date: datetime | None = None 

139 validated: bool = False 

140 validation_date: datetime | None = None 

141 validation_firstname: str | None = None 

142 validation_lastname: str | None = None 

143 validation_email: str | None = None 

144 validation_ip: str | None = None 

145 lines: list[DocumentLine] | None = None 

146 customer_id: int 

147 customer: Customer | None = None 

148 customer_address: Address | None = None 

149 user_can_validate: bool = False 

150 footer_text: str | None = None 

151 bank_account_label: str | None = None 

152 label_id: int | None = None 

153 links: list[Link] | None = None 

154 

155 

156class DocumentQuery(CamelModel): 

157 """ 

158 Représente une requête de document dans l'API Henrri Connect. 

159 

160 Attributs: 

161 - finalized (bool) : Indique si le document est finalisé. 

162 - document_types (list[DocumentKind]) :: Type du document. 

163 - state (Optional[DocumentState]) : Etat du document. 

164 - page (int) : Numéro de page (de 1 à 2 147 483 647, défaut 1). 

165 - limit (int) : Nombre de documents par page (de 1 à 100, défaut 50). 

166 - search (str) : Chaine de recherche. 

167 - sort_by (str) : Champ de tri. 

168 - sort_order (SortOrder) : Ordre de tri (Ascending ou Descending). 

169 - min_id (int) : Identifiant minimum. 

170 - from_date (str) : Date de debut. 

171 - to_date (str) : Date de fin. 

172 """ 

173 finalized: bool = False 

174 document_types: list[DocumentKind] | None = None 

175 state: DocumentState | None = None 

176 page: int = 1 

177 limit: int = 50 

178 search: str | None = None 

179 sort_by: str | None = None 

180 sort_order: SortOrder | None = None 

181 min_id: int | None = None 

182 from_date: str | None = None 

183 to_date: str | None = None 

184 

185 

186class ValidateDocumentRequest(CamelModel): 

187 """ 

188 Représente une requête de validation de document dans l'API Henrri Connect. 

189 

190 Attributs: 

191 - email: Adresse e-mail de la personne validant le document. 

192 - first_name: Prénom de la personne validant le document. 

193 - last_name: Nom de la personne validant le document. 

194 - validation_date: Date de validation du document. 

195 - time_offset: Décalage horaire par rapport à UTC. 

196 - ip: Adresse IP de la personne validant le document. 

197 """ 

198 email: str 

199 first_name: str 

200 last_name: str 

201 validation_date: str 

202 time_offset: int 

203 ip: str