Coverage for src/henrri_connect/models/document_line.py: 87%

82 statements  

« prev     ^ index     » next       coverage.py v7.14.1, created at 2026-06-09 19:37 +0200

1""" 

2Modèles document pour 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 .base import CamelModel, DocumentLineKind, Link, SortOrder 

17from .items import Item 

18 

19 

20class DocumentLineType(CamelModel): 

21 """ 

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

23 

24 Attributs: 

25 - id: Identifiant unique du type de ligne de document. 

26 - label: Libellé du type de ligne de document. 

27 - type: Type de ligne de document. 

28 """ 

29 id: int | None = None 

30 label: str | None = None 

31 type: str = DocumentLineKind.NONE 

32 

33 

34class DocumentLine(CamelModel): 

35 """ 

36 Représente une ligne de document dans l'API Henrri Connect. 

37 

38 ``type_id`` peut être récupéré par un GET sur ``/documentlinetypes`` ou avec 

39 ``henrry_connect.<client>.document_line_types.list_document_line_types`` 

40 

41 Attributs: 

42 - id: Identifiant unique de la ligne de document. 

43 - document_id: Identifiant du document auquel appartient la ligne. 

44 - reference: Référence de la ligne de document. 

45 - description: Description de la ligne de document. 

46 - selling_price_without_tax: Prix de vente sans taxe de la ligne de document. 

47 - purchasing_price_without_tax: Prix d'achat sans taxe de la ligne de document. 

48 - vat_percent: Pourcentage de TVA appliqué à la ligne de document. 

49 - quantity: Quantité de l'article dans la ligne de document. 

50 - is_tax_included: Indique si les prix incluent la taxe. 

51 - total_without_tax: Total sans taxe pour la ligne de document. 

52 - total_with_tax: Total avec taxe pour la ligne de document. 

53 - are_elements_of_group_shown: Indique si les éléments du groupe sont affichés. 

54 - line_number: Numéro de la ligne dans le document. 

55 - is_a_group: Indique si la ligne est un groupe d'articles. 

56 - does_group_own_different_vat: Indique si le groupe a une TVA différente pour ses éléments. 

57 - is_member_of_a_group: Indique si la ligne est membre d'un groupe d'articles. 

58 - is_adjustment_of_group: Indique si la ligne est un ajustement d'un groupe d'articles. 

59 - type_id: Identifiant du type de ligne de document. 

60 - type: Type de ligne de document (si applicable). 

61 - group_id: Identifiant du groupe d'articles auquel appartient la ligne (si applicable). 

62 - item_id: Identifiant de l'article associé à la ligne (si applicable). 

63 - item: Article associé à la ligne (si applicable). 

64 - links: Liste de liens associés à la ligne de document (si applicable). 

65 """ 

66 id: int | None = None 

67 document_id: int | None = None 

68 reference: str | None = None 

69 description: str | None = None 

70 selling_price_without_tax: float | None = None 

71 purchasing_price_without_tax: float = 0.0 

72 vat_percent: float | None = None 

73 quantity: float = 0.0 

74 is_tax_included: bool = False 

75 total_without_tax: float | None = None 

76 total_with_tax: float | None = None 

77 are_elements_of_group_shown: bool = False 

78 line_number: int | None = None 

79 is_a_group: bool = False 

80 does_group_own_different_vat: bool = False 

81 is_member_of_a_group: bool = False 

82 is_adjustment_of_group: bool = False 

83 type_id: int 

84 type: DocumentLineType | None = None 

85 group_id: int | None = None 

86 item_id: int | None = None 

87 item: Item | None = None 

88 links: list[Link] | None = None 

89 

90class DecorativeDocumentLine(DocumentLine): 

91 """ 

92 Représente une ligne de document decoratif dans l'API Henrri Connect. 

93 

94 Attributs: 

95 - type_id: Identifiant du type de ligne de document. 

96 """ 

97 type_id: int = 0 

98 document_id: int| None = None 

99 reference: str | None = None 

100 description: str | None = None 

101 selling_price_without_tax: float | None = None 

102 purchasing_price_without_tax: float = 0.0 

103 vat_percent: float | None = None 

104 quantity: float = 1.0 

105 is_tax_included: bool = False 

106 total_without_tax: float | None = None 

107 total_with_tax: float | None = None 

108 are_elements_of_group_shown: bool = False 

109 line_number: int | None = None 

110 is_a_group: bool = False 

111 does_group_own_different_vat: bool = False 

112 is_member_of_a_group: bool = False 

113 is_adjustment_of_group: bool = False 

114 type_id: int 

115 type: DocumentLineType | None = None 

116 group_id: int | None = None 

117 item_id: int | None = None 

118 item: Item | None = None 

119 links: list[Link] | None = None 

120 

121 def horizontal_line(self) -> "DocumentLine": 

122 """ 

123 Créer une ligne horizontale dans le document. 

124 

125 Returns: 

126 DocumentLine: La ligne horizontale crée. 

127 """ 

128 self.type_id = 13 

129 return self 

130 

131 def empty_line(self) -> "DocumentLine": 

132 """ 

133 Créer une ligne vide dans le document. 

134 

135 Returns: 

136 DocumentLine: La ligne vide crée. 

137 """ 

138 self.type_id = 11 

139 return self 

140 

141 def subtotal_line(self) -> "DocumentLine": 

142 """ 

143 Créer une ligne de sous-total dans le document. 

144 

145 Returns: 

146 DocumentLine: La ligne de sous-total crée. 

147 """ 

148 self.type_id = 5 

149 return self 

150 

151 def total_line(self) -> "DocumentLine": 

152 """ 

153 Créer une ligne de total dans le document. 

154 

155 Returns: 

156 DocumentLine: La ligne de total crée. 

157 """ 

158 self.type_id = 4 

159 return self 

160 

161 def textual_line(self, text: str) -> "DocumentLine": 

162 """ 

163 Créer une ligne de texte dans le document. 

164 

165 Returns: 

166 DocumentLine: La ligne de texte crée. 

167 """ 

168 self.type_id = 12 

169 self.description = text 

170 return self 

171 

172class DocumentLineMoveQueryParameters(CamelModel): 

173 """ 

174 Représente les paramètres de requête pour déplacer une ligne de document dans 

175 l'API Henrri Connect. 

176 

177 Attributs: 

178 - to: Identifiant de la ligne de document vers laquelle déplacer la ligne. 

179 """ 

180 to: int 

181 

182 

183class DocumentLineListQueryParameters(CamelModel): 

184 """ 

185 Représente les paramètres de requête pour obtenir une liste de lignes de document 

186 dans l'API Henrri Connect. 

187 

188 Attributs: 

189 - document_id: Identifiant du document auquel appartient la ligne. 

190 """ 

191 page: int = 1 

192 limit: int = 50 

193 search: str | None = None 

194 sort_by: str | None = None 

195 sort_order: SortOrder | None = None 

196 minId: int 

197 from_date: str 

198 to_date: str