karrio-geodis 2025.5rc1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- karrio/mappers/geodis/__init__.py +3 -0
- karrio/mappers/geodis/mapper.py +51 -0
- karrio/mappers/geodis/proxy.py +76 -0
- karrio/mappers/geodis/settings.py +36 -0
- karrio/plugins/geodis/__init__.py +20 -0
- karrio/providers/geodis/__init__.py +11 -0
- karrio/providers/geodis/error.py +29 -0
- karrio/providers/geodis/shipment/__init__.py +8 -0
- karrio/providers/geodis/shipment/cancel.py +39 -0
- karrio/providers/geodis/shipment/create.py +202 -0
- karrio/providers/geodis/tracking.py +96 -0
- karrio/providers/geodis/units.py +248 -0
- karrio/providers/geodis/utils.py +58 -0
- karrio/schemas/geodis/__init__.py +0 -0
- karrio/schemas/geodis/cancel_request.py +10 -0
- karrio/schemas/geodis/cancel_response.py +73 -0
- karrio/schemas/geodis/error_response.py +10 -0
- karrio/schemas/geodis/shipping_request.py +166 -0
- karrio/schemas/geodis/shipping_response.py +91 -0
- karrio/schemas/geodis/tracking_request.py +9 -0
- karrio/schemas/geodis/tracking_response.py +216 -0
- karrio_geodis-2025.5rc1.dist-info/METADATA +45 -0
- karrio_geodis-2025.5rc1.dist-info/RECORD +26 -0
- karrio_geodis-2025.5rc1.dist-info/WHEEL +5 -0
- karrio_geodis-2025.5rc1.dist-info/entry_points.txt +2 -0
- karrio_geodis-2025.5rc1.dist-info/top_level.txt +3 -0
@@ -0,0 +1,248 @@
|
|
1
|
+
from itertools import count
|
2
|
+
import karrio.lib as lib
|
3
|
+
import karrio.core.units as units
|
4
|
+
import karrio.core.models as models
|
5
|
+
|
6
|
+
|
7
|
+
class LabelType(lib.Enum):
|
8
|
+
PDF = "P"
|
9
|
+
PDF_themique = "T"
|
10
|
+
Json = "J"
|
11
|
+
EPL = "E"
|
12
|
+
ZPL_200dpi = "Z"
|
13
|
+
ZPL_300dpi = "Y"
|
14
|
+
ZPL_600dpi = "W"
|
15
|
+
|
16
|
+
ZPL = ZPL_300dpi
|
17
|
+
PNG = PDF
|
18
|
+
|
19
|
+
|
20
|
+
class Incoterm(lib.StrEnum):
|
21
|
+
CFR = "COST AND FREIGHT"
|
22
|
+
CIF = "COST, INSURANCE AND FREIGHT"
|
23
|
+
CIP = "CARRIAGE AND INSURANCE PAID TO"
|
24
|
+
CPT = "CARRIAGE PAID TO"
|
25
|
+
D = "CARRIAGE DUE"
|
26
|
+
DAF = "DELIVERED AT FRONTIER"
|
27
|
+
DAP = "DELIVERED AT PLACE"
|
28
|
+
DAT = "DELIVERED AT TERMINAL"
|
29
|
+
DDP = "DELIVERED DUTY PAID"
|
30
|
+
DDU = "DELIVERED DUTY UNPAID"
|
31
|
+
DEQ = "DELIVERED EX QUAY"
|
32
|
+
DES = "DELIVERED EX SHIP"
|
33
|
+
EXW = "EX WORKS"
|
34
|
+
FAS = "FREE ALONGSIDE SHIP"
|
35
|
+
FCA = "FREE CARRIER"
|
36
|
+
FDC = "FRANCO DOMICILE DEDOUANE"
|
37
|
+
FDU = "FRANCO DOMICILE NON DEDOUANE"
|
38
|
+
FOB = "FREE ON BOARD"
|
39
|
+
P = "CARRIAGE PAID"
|
40
|
+
|
41
|
+
|
42
|
+
class PackagingType(lib.StrEnum):
|
43
|
+
"""Carrier specific packaging type"""
|
44
|
+
|
45
|
+
PACKAGE = "PACKAGE"
|
46
|
+
|
47
|
+
""" Unified Packaging type mapping """
|
48
|
+
envelope = PACKAGE
|
49
|
+
pak = PACKAGE
|
50
|
+
tube = PACKAGE
|
51
|
+
pallet = PACKAGE
|
52
|
+
small_box = PACKAGE
|
53
|
+
medium_box = PACKAGE
|
54
|
+
your_packaging = PACKAGE
|
55
|
+
|
56
|
+
|
57
|
+
class ConnectionConfig(lib.Enum):
|
58
|
+
agency_code = lib.OptionEnum("agency_code")
|
59
|
+
|
60
|
+
|
61
|
+
class ShippingService(lib.StrEnum):
|
62
|
+
"""Carrier specific services"""
|
63
|
+
|
64
|
+
geodis_EXP = "EXP"
|
65
|
+
geodis_MES = "MES"
|
66
|
+
geodis_express_france = "NTX"
|
67
|
+
geodis_retour_trans_fr_messagerie_plus = "ENL"
|
68
|
+
|
69
|
+
|
70
|
+
class ShippingOption(lib.Enum):
|
71
|
+
"""Carrier specific options"""
|
72
|
+
|
73
|
+
geodis_web_appointment = lib.OptionEnum("RDW", bool)
|
74
|
+
geodis_telephone_appointment = lib.OptionEnum("RDT", bool)
|
75
|
+
geodis_pick_up_at_a_geodis_agency = lib.OptionEnum("BRT", bool)
|
76
|
+
geodis_desired_date_of_delivery = lib.OptionEnum("DSL", bool)
|
77
|
+
geodis_delivery_on_a_saturday_morning = lib.OptionEnum("SAT", bool)
|
78
|
+
|
79
|
+
geodis_validate_envoi = lib.OptionEnum("validate_envoi", bool)
|
80
|
+
geodis_no_recepisse = lib.OptionEnum("no_recepisse")
|
81
|
+
geodis_instruction_enlevement = lib.OptionEnum("instruction_enlevement")
|
82
|
+
geodis_date_livraison = lib.OptionEnum("date_livraison")
|
83
|
+
geodis_heure_livraison = lib.OptionEnum("heure_livraison")
|
84
|
+
geodis_instruction_livraison = lib.OptionEnum("instruction_livraison")
|
85
|
+
|
86
|
+
""" Unified Option type mapping """
|
87
|
+
saturday_delivery = geodis_delivery_on_a_saturday_morning
|
88
|
+
|
89
|
+
|
90
|
+
def shipping_options_initializer(
|
91
|
+
options: dict,
|
92
|
+
package_options: units.ShippingOptions = None,
|
93
|
+
) -> units.ShippingOptions:
|
94
|
+
"""
|
95
|
+
Apply default values to the given options.
|
96
|
+
"""
|
97
|
+
|
98
|
+
if package_options is not None:
|
99
|
+
options.update(package_options.content)
|
100
|
+
|
101
|
+
def items_filter(key: str) -> bool:
|
102
|
+
return key in ["RDW" "RDT", "BRT", "DSL", "SAT"]
|
103
|
+
|
104
|
+
return units.ShippingOptions(options, ShippingOption, items_filter=items_filter)
|
105
|
+
|
106
|
+
|
107
|
+
LABTEST_RATE_SHEET = [
|
108
|
+
# weight, 1001, 1002, 1003, 1007
|
109
|
+
(0.5, 49, 45, 53, 57),
|
110
|
+
(1, 52, 49, 58.25, 62.33),
|
111
|
+
(2, 56.85, 52.3, 65.52, 73.55),
|
112
|
+
(3, 64.27, 59.45, 71.78, 84.55),
|
113
|
+
(4, 70.92, 65.85, 77.5, 101.54),
|
114
|
+
(5, 81.85, 76.36, 89.04, 114.52),
|
115
|
+
(6, 86.59, 80.92, 93.86, 124.86),
|
116
|
+
(7, 92.78, 85.65, 101.12, 136.96),
|
117
|
+
(8, 95.04, 87.82, 108.65, 140.76),
|
118
|
+
(9, 98.29, 90.96, 111.24, 155.3),
|
119
|
+
(10, 99.38, 92, 113.76, 156.01),
|
120
|
+
(11, 99.92, 92.52, 114.2, 158.89),
|
121
|
+
(12, 100.83, 93.39, 115.23, 163.05),
|
122
|
+
(13, 110.65, 102.85, 126.47, 177.87),
|
123
|
+
(14, 117.14, 109.09, 137.07, 189.05),
|
124
|
+
(15, 119.56, 111.42, 139.25, 211.16),
|
125
|
+
(16, 130.04, 121.5, 144.96, 217.07),
|
126
|
+
(17, 131, 122.42, 148.01, 221.99),
|
127
|
+
(18, 133.1, 124.45, 150.56, 230.63),
|
128
|
+
(19, 133.96, 125.27, 156.72, 240.79),
|
129
|
+
(20, 136.25, 127.48, 157.88, 253.64),
|
130
|
+
(21, 141.53, 132.56, 161.94, 268.15),
|
131
|
+
(22, 142.47, 133.46, 162.8, 270.95),
|
132
|
+
(23, 143.33, 134.29, 163.58, 271.74),
|
133
|
+
(24, 144.1, 135.03, 164.64, 276.63),
|
134
|
+
(25, 145.46, 136.34, 165.95, 279.38),
|
135
|
+
(26, 179.69, 169.28, 207.52, 305.69),
|
136
|
+
(27, 187.89, 177.17, 218.5, 313.19),
|
137
|
+
(28, 191.51, 180.65, 219.41, 331.85),
|
138
|
+
(29, 192.26, 181.37, 223.14, 347.95),
|
139
|
+
(30, 193.03, 182.12, 227.02, 350),
|
140
|
+
(31, 196.46, 185.42, 235.14, 350.23),
|
141
|
+
(32, 197.18, 186.11, 235.78, 350.88),
|
142
|
+
(33, 198.05, 186.95, 241.1, 358.36),
|
143
|
+
(34, 198.82, 187.68, 243.97, 363.37),
|
144
|
+
(35, 199.55, 188.39, 251.02, 364.93),
|
145
|
+
(36, 200.36, 189.17, 252.83, 370.29),
|
146
|
+
(37, 201.06, 189.84, 253.53, 376.34),
|
147
|
+
(38, 209.95, 198.39, 259.95, 385.32),
|
148
|
+
(39, 219.27, 207.36, 264.51, 387.14),
|
149
|
+
(40, 220.5, 208.54, 275.76, 400.96),
|
150
|
+
(41, 221.3, 209.31, 277.4, 403.67),
|
151
|
+
(42, 222.24, 210.21, 279.07, 436),
|
152
|
+
(43, 227.36, 215.14, 289.98, 452.97),
|
153
|
+
(44, 235.77, 223.24, 297.17, 453.75),
|
154
|
+
(45, 236.9, 224.33, 298.18, 454.39),
|
155
|
+
(46, 238.34, 225.71, 298.96, 455.58),
|
156
|
+
(47, 239.04, 226.38, 305.55, 474.31),
|
157
|
+
(48, 239.78, 227.1, 310.68, 496.66),
|
158
|
+
(49, 242.16, 229.39, 311.31, 499.19),
|
159
|
+
(50, 245.52, 232.62, 312.11, 499.92),
|
160
|
+
(51, 247.86, 234.87, 322.96, 501.23),
|
161
|
+
(52, 248.18, 235.17, 323.27, 501.54),
|
162
|
+
(53, 255.48, 242.21, 327.89, 521.4),
|
163
|
+
(54, 255.81, 242.52, 328.22, 521.74),
|
164
|
+
(55, 261.77, 248.25, 332, 524.7),
|
165
|
+
(56, 262.08, 248.55, 332.31, 525.02),
|
166
|
+
(57, 268.97, 255.18, 336.38, 525.95),
|
167
|
+
(58, 269.28, 255.48, 336.69, 526.26),
|
168
|
+
(59, 279.46, 265.28, 340.87, 527.17),
|
169
|
+
(60, 279.94, 265.74, 341.34, 527.65),
|
170
|
+
(61, 280.79, 266.55, 342.9, 528.51),
|
171
|
+
(62, 281.26, 267, 343.36, 528.99),
|
172
|
+
(63, 282.09, 267.81, 345.96, 552.99),
|
173
|
+
(64, 282.52, 268.22, 346.39, 553.42),
|
174
|
+
(65, 284.01, 269.65, 374.39, 561.44),
|
175
|
+
(66, 284.32, 269.95, 374.7, 561.76),
|
176
|
+
(67, 285.81, 271.38, 402.7, 569.78),
|
177
|
+
(68, 286.34, 271.9, 403.23, 570.32),
|
178
|
+
(69, 287.84, 273.34, 431.24, 578.35),
|
179
|
+
(70, 288.34, 273.82, 431.74, 578.86),
|
180
|
+
]
|
181
|
+
|
182
|
+
|
183
|
+
DEFAULT_SERVICES = [
|
184
|
+
models.ServiceLevel(
|
185
|
+
service_name="GEODIS Express",
|
186
|
+
service_code="geodis_EXP",
|
187
|
+
currency="USD",
|
188
|
+
domicile=True,
|
189
|
+
international=True,
|
190
|
+
zones=[
|
191
|
+
*[
|
192
|
+
models.ServiceZone(
|
193
|
+
label="1001",
|
194
|
+
rate=rate[1],
|
195
|
+
max_weight=rate[0],
|
196
|
+
country_codes=["BE", "FR", "DE", "IE", "IT", "LU", "NL", "MC"],
|
197
|
+
)
|
198
|
+
for rate in LABTEST_RATE_SHEET
|
199
|
+
],
|
200
|
+
*[
|
201
|
+
models.ServiceZone(
|
202
|
+
label="1002",
|
203
|
+
rate=rate[2],
|
204
|
+
max_weight=rate[0],
|
205
|
+
country_codes=["GB"],
|
206
|
+
)
|
207
|
+
for rate in LABTEST_RATE_SHEET
|
208
|
+
],
|
209
|
+
*[
|
210
|
+
models.ServiceZone(
|
211
|
+
label="1003",
|
212
|
+
rate=rate[3],
|
213
|
+
max_weight=rate[0],
|
214
|
+
country_codes=["AT", "DK", "ES", "FI", "GR", "PT", "SE"],
|
215
|
+
)
|
216
|
+
for rate in LABTEST_RATE_SHEET
|
217
|
+
],
|
218
|
+
*[
|
219
|
+
models.ServiceZone(
|
220
|
+
label="1007",
|
221
|
+
rate=rate[4],
|
222
|
+
max_weight=rate[0],
|
223
|
+
country_codes=[
|
224
|
+
"CZ",
|
225
|
+
"HU",
|
226
|
+
"LV",
|
227
|
+
"LT",
|
228
|
+
"PL",
|
229
|
+
"SK",
|
230
|
+
"SI",
|
231
|
+
"BG",
|
232
|
+
"RO",
|
233
|
+
"HR",
|
234
|
+
"EE",
|
235
|
+
],
|
236
|
+
)
|
237
|
+
for rate in LABTEST_RATE_SHEET
|
238
|
+
],
|
239
|
+
],
|
240
|
+
min_weight=0.5,
|
241
|
+
max_weight=70.0,
|
242
|
+
weight_unit=units.WeightUnit.LB,
|
243
|
+
max_length=68.0,
|
244
|
+
max_height=118.0,
|
245
|
+
dimension_unit=units.DimensionUnit.CM,
|
246
|
+
transit_days=6,
|
247
|
+
),
|
248
|
+
]
|
@@ -0,0 +1,58 @@
|
|
1
|
+
import json
|
2
|
+
import time
|
3
|
+
import hashlib
|
4
|
+
import karrio.lib as lib
|
5
|
+
import karrio.core as core
|
6
|
+
|
7
|
+
LanguageEnum = lib.units.create_enum("LanguageEnum", ["fr", "en"])
|
8
|
+
|
9
|
+
|
10
|
+
class Settings(core.Settings):
|
11
|
+
"""GEODIS connection settings."""
|
12
|
+
|
13
|
+
api_key: str
|
14
|
+
identifier: str
|
15
|
+
code_client: str = None
|
16
|
+
language: LanguageEnum = "fr" # type: ignore
|
17
|
+
|
18
|
+
account_country_code: str = "FR"
|
19
|
+
metadata: dict = {}
|
20
|
+
config: dict = {}
|
21
|
+
|
22
|
+
@property
|
23
|
+
def carrier_name(self):
|
24
|
+
return "geodis"
|
25
|
+
|
26
|
+
@property
|
27
|
+
def server_url(self):
|
28
|
+
return (
|
29
|
+
"https://espace-client.geodis.com/services/services-mock"
|
30
|
+
if self.test_mode
|
31
|
+
else "https://espace-client.geodis.com/services"
|
32
|
+
)
|
33
|
+
|
34
|
+
@property
|
35
|
+
def connection_config(self) -> lib.units.Options:
|
36
|
+
from karrio.providers.geodis.units import ConnectionConfig
|
37
|
+
|
38
|
+
return lib.to_connection_config(
|
39
|
+
self.config or {},
|
40
|
+
option_type=ConnectionConfig,
|
41
|
+
)
|
42
|
+
|
43
|
+
def get_token(self, service: str, data: dict) -> str:
|
44
|
+
timestamp = "%d" % (time.time() * 1000)
|
45
|
+
hash = hashlib.sha256(
|
46
|
+
";".join(
|
47
|
+
[
|
48
|
+
self.api_key,
|
49
|
+
self.identifier,
|
50
|
+
timestamp,
|
51
|
+
self.language,
|
52
|
+
service,
|
53
|
+
json.dumps(data, separators=(",", ":")),
|
54
|
+
]
|
55
|
+
).encode("utf-8")
|
56
|
+
).hexdigest()
|
57
|
+
|
58
|
+
return ";".join([self.identifier, timestamp, self.language, hash])
|
File without changes
|
@@ -0,0 +1,10 @@
|
|
1
|
+
import attr
|
2
|
+
import jstruct
|
3
|
+
import typing
|
4
|
+
|
5
|
+
|
6
|
+
@attr.s(auto_attribs=True)
|
7
|
+
class CancelRequestType:
|
8
|
+
listNosRecepisses: typing.Optional[typing.List[str]] = None
|
9
|
+
listNosSuivis: typing.Optional[typing.List[str]] = None
|
10
|
+
listReferences: typing.Optional[typing.List[str]] = None
|
@@ -0,0 +1,73 @@
|
|
1
|
+
import attr
|
2
|
+
import jstruct
|
3
|
+
import typing
|
4
|
+
|
5
|
+
|
6
|
+
@attr.s(auto_attribs=True)
|
7
|
+
class DestinataireType:
|
8
|
+
nom: typing.Optional[str] = None
|
9
|
+
adresse1: typing.Optional[str] = None
|
10
|
+
adresse2: typing.Optional[str] = None
|
11
|
+
codePostal: typing.Optional[int] = None
|
12
|
+
ville: typing.Optional[str] = None
|
13
|
+
codePays: typing.Optional[str] = None
|
14
|
+
email: typing.Optional[str] = None
|
15
|
+
telFixe: typing.Optional[str] = None
|
16
|
+
indTelMobile: typing.Optional[int] = None
|
17
|
+
telMobile: typing.Optional[str] = None
|
18
|
+
nomContact: typing.Optional[str] = None
|
19
|
+
codePorte: typing.Optional[int] = None
|
20
|
+
codeTiers: typing.Optional[str] = None
|
21
|
+
noEntrepositaireAgree: typing.Any = None
|
22
|
+
particulier: typing.Optional[bool] = None
|
23
|
+
|
24
|
+
|
25
|
+
@attr.s(auto_attribs=True)
|
26
|
+
class ListRetoursEnvoisType:
|
27
|
+
index: typing.Optional[int] = None
|
28
|
+
horsSite: typing.Optional[bool] = None
|
29
|
+
codeSa: typing.Optional[str] = None
|
30
|
+
codeClient: typing.Optional[int] = None
|
31
|
+
codeProduit: typing.Optional[str] = None
|
32
|
+
reference1: typing.Optional[str] = None
|
33
|
+
reference2: typing.Optional[str] = None
|
34
|
+
dateDepartEnlevement: typing.Optional[str] = None
|
35
|
+
destinataire: typing.Optional[DestinataireType] = jstruct.JStruct[DestinataireType]
|
36
|
+
noRecepisse: typing.Optional[int] = None
|
37
|
+
noSuivi: typing.Optional[str] = None
|
38
|
+
urlSuiviDestinataire: typing.Optional[str] = None
|
39
|
+
docEtiquette: typing.Any = None
|
40
|
+
docBordereau: typing.Any = None
|
41
|
+
docRecapitulatif: typing.Any = None
|
42
|
+
msgErreurEnregistrement: typing.Any = None
|
43
|
+
msgErreurValidation: typing.Any = None
|
44
|
+
msgErreurSuppression: typing.Any = None
|
45
|
+
msgErreurEtiquette: typing.Any = None
|
46
|
+
msgErreurBordereau: typing.Any = None
|
47
|
+
msgErreurRecapitulatif: typing.Any = None
|
48
|
+
|
49
|
+
|
50
|
+
@attr.s(auto_attribs=True)
|
51
|
+
class ContenuType:
|
52
|
+
msgErreur: typing.Any = None
|
53
|
+
nbEnvoisATraiter: typing.Optional[int] = None
|
54
|
+
nbEnvoisEnregistres: typing.Optional[int] = None
|
55
|
+
nbEnvoisValides: typing.Optional[int] = None
|
56
|
+
nbEnvoisSupprimes: typing.Optional[int] = None
|
57
|
+
nbAnomaliesSuppression: typing.Optional[int] = None
|
58
|
+
nbAnomaliesEtiquette: typing.Optional[int] = None
|
59
|
+
nbAnomaliesBordereau: typing.Optional[int] = None
|
60
|
+
nbAnomaliesRecapitulatif: typing.Optional[int] = None
|
61
|
+
docBordereau: typing.Any = None
|
62
|
+
docRecapitulatif: typing.Any = None
|
63
|
+
msgErreurBordereau: typing.Any = None
|
64
|
+
msgErreurRecapitulatif: typing.Any = None
|
65
|
+
listRetoursEnvois: typing.Optional[typing.List[ListRetoursEnvoisType]] = jstruct.JList[ListRetoursEnvoisType]
|
66
|
+
|
67
|
+
|
68
|
+
@attr.s(auto_attribs=True)
|
69
|
+
class CancelResponseType:
|
70
|
+
ok: typing.Optional[bool] = None
|
71
|
+
codeErreur: typing.Any = None
|
72
|
+
texteErreur: typing.Any = None
|
73
|
+
contenu: typing.Optional[ContenuType] = jstruct.JStruct[ContenuType]
|
@@ -0,0 +1,166 @@
|
|
1
|
+
import attr
|
2
|
+
import jstruct
|
3
|
+
import typing
|
4
|
+
|
5
|
+
|
6
|
+
@attr.s(auto_attribs=True)
|
7
|
+
class ContreRemboursementType:
|
8
|
+
quantite: typing.Optional[float] = None
|
9
|
+
codeUnite: typing.Optional[str] = None
|
10
|
+
|
11
|
+
|
12
|
+
@attr.s(auto_attribs=True)
|
13
|
+
class DestinataireType:
|
14
|
+
nom: typing.Optional[str] = None
|
15
|
+
adresse1: typing.Optional[str] = None
|
16
|
+
adresse2: typing.Optional[str] = None
|
17
|
+
codePostal: typing.Optional[int] = None
|
18
|
+
ville: typing.Optional[str] = None
|
19
|
+
codePays: typing.Optional[str] = None
|
20
|
+
nomContact: typing.Optional[str] = None
|
21
|
+
email: typing.Optional[str] = None
|
22
|
+
telFixe: typing.Optional[str] = None
|
23
|
+
indTelMobile: typing.Optional[int] = None
|
24
|
+
telMobile: typing.Optional[str] = None
|
25
|
+
codePorte: typing.Optional[int] = None
|
26
|
+
codeTiers: typing.Optional[str] = None
|
27
|
+
noEntrepositaireAgree: typing.Optional[str] = None
|
28
|
+
particulier: typing.Optional[bool] = None
|
29
|
+
|
30
|
+
|
31
|
+
@attr.s(auto_attribs=True)
|
32
|
+
class PieceJointeType:
|
33
|
+
nom: typing.Optional[str] = None
|
34
|
+
type: typing.Optional[str] = None
|
35
|
+
contenu: typing.Optional[str] = None
|
36
|
+
|
37
|
+
|
38
|
+
@attr.s(auto_attribs=True)
|
39
|
+
class ListFactureType:
|
40
|
+
noFacture: typing.Optional[str] = None
|
41
|
+
montantFacture: typing.Optional[ContreRemboursementType] = jstruct.JStruct[ContreRemboursementType]
|
42
|
+
dateFacture: typing.Optional[str] = None
|
43
|
+
pieceJointe: typing.Optional[PieceJointeType] = jstruct.JStruct[PieceJointeType]
|
44
|
+
|
45
|
+
|
46
|
+
@attr.s(auto_attribs=True)
|
47
|
+
class InformationDouaneType:
|
48
|
+
poidsNetTotal: typing.Optional[float] = None
|
49
|
+
eoriExpediteur: typing.Optional[str] = None
|
50
|
+
eoriDestinataire: typing.Optional[str] = None
|
51
|
+
emailExpediteurDouane: typing.Optional[str] = None
|
52
|
+
indTelExpediteurDouane: typing.Optional[str] = None
|
53
|
+
telExpediteurDouane: typing.Optional[str] = None
|
54
|
+
mandatRepresentation: typing.Optional[bool] = None
|
55
|
+
listFactures: typing.Optional[typing.List[ListFactureType]] = jstruct.JList[ListFactureType]
|
56
|
+
|
57
|
+
|
58
|
+
@attr.s(auto_attribs=True)
|
59
|
+
class ListDocumentsEnvoiType:
|
60
|
+
visibiliteDestinataire: typing.Optional[bool] = None
|
61
|
+
pieceJointe: typing.Optional[PieceJointeType] = jstruct.JStruct[PieceJointeType]
|
62
|
+
|
63
|
+
|
64
|
+
@attr.s(auto_attribs=True)
|
65
|
+
class ListMatieresDangereusType:
|
66
|
+
noONU: typing.Optional[str] = None
|
67
|
+
groupeEmballage: typing.Optional[str] = None
|
68
|
+
classeADR: typing.Optional[str] = None
|
69
|
+
codeTypeEmballage: typing.Optional[str] = None
|
70
|
+
nbEmballages: typing.Optional[int] = None
|
71
|
+
nomTechnique: typing.Optional[str] = None
|
72
|
+
codeQuantite: typing.Optional[str] = None
|
73
|
+
poidsVolume: typing.Optional[float] = None
|
74
|
+
dangerEnv: typing.Optional[bool] = None
|
75
|
+
|
76
|
+
|
77
|
+
@attr.s(auto_attribs=True)
|
78
|
+
class ListUmgType:
|
79
|
+
palette: typing.Optional[bool] = None
|
80
|
+
paletteConsignee: typing.Optional[bool] = None
|
81
|
+
quantite: typing.Optional[int] = None
|
82
|
+
poids: typing.Optional[float] = None
|
83
|
+
volume: typing.Optional[float] = None
|
84
|
+
longueurUnitaire: typing.Optional[float] = None
|
85
|
+
largeurUnitaire: typing.Optional[float] = None
|
86
|
+
hauteurUnitaire: typing.Optional[float] = None
|
87
|
+
referenceColis: typing.Optional[str] = None
|
88
|
+
|
89
|
+
|
90
|
+
@attr.s(auto_attribs=True)
|
91
|
+
class ListVinsSpiritueuxType:
|
92
|
+
regimeFiscal: typing.Optional[str] = None
|
93
|
+
nbCols: typing.Optional[int] = None
|
94
|
+
contenance: typing.Optional[float] = None
|
95
|
+
volumeEnDroits: typing.Optional[float] = None
|
96
|
+
noTitreMvtRefAdmin: typing.Optional[str] = None
|
97
|
+
dureeTransport: typing.Optional[float] = None
|
98
|
+
|
99
|
+
|
100
|
+
@attr.s(auto_attribs=True)
|
101
|
+
class ListEnvoisType:
|
102
|
+
noRecepisse: typing.Optional[str] = None
|
103
|
+
noSuivi: typing.Optional[str] = None
|
104
|
+
horsSite: typing.Optional[bool] = None
|
105
|
+
codeSa: typing.Optional[str] = None
|
106
|
+
codeClient: typing.Optional[int] = None
|
107
|
+
codeProduit: typing.Optional[str] = None
|
108
|
+
reference1: typing.Optional[str] = None
|
109
|
+
reference2: typing.Optional[str] = None
|
110
|
+
expediteur: typing.Optional[DestinataireType] = jstruct.JStruct[DestinataireType]
|
111
|
+
dateDepartEnlevement: typing.Optional[str] = None
|
112
|
+
instructionEnlevement: typing.Optional[str] = None
|
113
|
+
destinataire: typing.Optional[DestinataireType] = jstruct.JStruct[DestinataireType]
|
114
|
+
listUmgs: typing.Optional[typing.List[ListUmgType]] = jstruct.JList[ListUmgType]
|
115
|
+
natureEnvoi: typing.Optional[str] = None
|
116
|
+
poidsTotal: typing.Optional[float] = None
|
117
|
+
volumeTotal: typing.Optional[float] = None
|
118
|
+
largerTotal: typing.Optional[float] = None
|
119
|
+
hauteurTotal: typing.Optional[float] = None
|
120
|
+
longueurTotal: typing.Optional[float] = None
|
121
|
+
uniteTaxation: typing.Optional[ContreRemboursementType] = jstruct.JStruct[ContreRemboursementType]
|
122
|
+
animauxPlumes: typing.Optional[bool] = None
|
123
|
+
optionLivraison: typing.Optional[str] = None
|
124
|
+
codeSaBureauRestant: typing.Optional[str] = None
|
125
|
+
idPointRelais: typing.Optional[str] = None
|
126
|
+
dateLivraison: typing.Optional[str] = None
|
127
|
+
heureLivraison: typing.Optional[str] = None
|
128
|
+
instructionLivraison: typing.Optional[str] = None
|
129
|
+
natureMarchandise: typing.Optional[str] = None
|
130
|
+
valeurDeclaree: typing.Optional[ContreRemboursementType] = jstruct.JStruct[ContreRemboursementType]
|
131
|
+
contreRemboursement: typing.Optional[ContreRemboursementType] = jstruct.JStruct[ContreRemboursementType]
|
132
|
+
codeIncotermConditionLivraison: typing.Optional[str] = None
|
133
|
+
typeTva: typing.Optional[str] = None
|
134
|
+
sadLivToph: typing.Optional[bool] = None
|
135
|
+
sadSwap: typing.Optional[bool] = None
|
136
|
+
sadLivEtage: typing.Optional[bool] = None
|
137
|
+
sadMiseLieuUtil: typing.Optional[bool] = None
|
138
|
+
sadDepotage: typing.Optional[bool] = None
|
139
|
+
etage: typing.Optional[int] = None
|
140
|
+
emailNotificationDestinataire: typing.Optional[str] = None
|
141
|
+
smsNotificationDestinataire: typing.Optional[str] = None
|
142
|
+
emailNotificationExpediteur: typing.Optional[str] = None
|
143
|
+
emailConfirmationEnlevement: typing.Optional[str] = None
|
144
|
+
emailPriseEnChargeEnlevement: typing.Optional[str] = None
|
145
|
+
poidsQteLimiteeMD: typing.Optional[float] = None
|
146
|
+
dangerEnvQteLimiteeMD: typing.Optional[bool] = None
|
147
|
+
nbColisQteExcepteeMD: typing.Optional[int] = None
|
148
|
+
dangerEnvQteExcepteeMD: typing.Optional[bool] = None
|
149
|
+
listMatieresDangereuses: typing.Optional[typing.List[ListMatieresDangereusType]] = jstruct.JList[ListMatieresDangereusType]
|
150
|
+
listVinsSpiritueux: typing.Optional[typing.List[ListVinsSpiritueuxType]] = jstruct.JList[ListVinsSpiritueuxType]
|
151
|
+
nosUmsAEtiqueter: typing.Optional[str] = None
|
152
|
+
listDocumentsEnvoi: typing.Optional[typing.List[ListDocumentsEnvoiType]] = jstruct.JList[ListDocumentsEnvoiType]
|
153
|
+
informationDouane: typing.Optional[InformationDouaneType] = jstruct.JStruct[InformationDouaneType]
|
154
|
+
|
155
|
+
|
156
|
+
@attr.s(auto_attribs=True)
|
157
|
+
class ShippingRequestType:
|
158
|
+
modificationParReference1: typing.Optional[bool] = None
|
159
|
+
impressionEtiquette: typing.Optional[bool] = None
|
160
|
+
typeImpressionEtiquette: typing.Optional[str] = None
|
161
|
+
formatEtiquette: typing.Optional[str] = None
|
162
|
+
validationEnvoi: typing.Optional[bool] = None
|
163
|
+
suppressionSiEchecValidation: typing.Optional[bool] = None
|
164
|
+
impressionBordereau: typing.Optional[bool] = None
|
165
|
+
impressionRecapitulatif: typing.Optional[bool] = None
|
166
|
+
listEnvois: typing.Optional[typing.List[ListEnvoisType]] = jstruct.JList[ListEnvoisType]
|
@@ -0,0 +1,91 @@
|
|
1
|
+
import attr
|
2
|
+
import jstruct
|
3
|
+
import typing
|
4
|
+
|
5
|
+
|
6
|
+
@attr.s(auto_attribs=True)
|
7
|
+
class DestinataireType:
|
8
|
+
nom: typing.Optional[str] = None
|
9
|
+
adresse1: typing.Optional[str] = None
|
10
|
+
adresse2: typing.Optional[str] = None
|
11
|
+
codePostal: typing.Optional[int] = None
|
12
|
+
ville: typing.Optional[str] = None
|
13
|
+
codePays: typing.Optional[str] = None
|
14
|
+
email: typing.Optional[str] = None
|
15
|
+
telFixe: typing.Optional[str] = None
|
16
|
+
indTelMobile: typing.Optional[int] = None
|
17
|
+
telMobile: typing.Optional[str] = None
|
18
|
+
nomContact: typing.Optional[str] = None
|
19
|
+
codePorte: typing.Optional[int] = None
|
20
|
+
codeTiers: typing.Any = None
|
21
|
+
noEntrepositaireAgree: typing.Any = None
|
22
|
+
particulier: typing.Any = None
|
23
|
+
|
24
|
+
|
25
|
+
@attr.s(auto_attribs=True)
|
26
|
+
class DocEtiquetteType:
|
27
|
+
nom: typing.Optional[str] = None
|
28
|
+
type: typing.Optional[str] = None
|
29
|
+
contenu: typing.Optional[str] = None
|
30
|
+
|
31
|
+
|
32
|
+
@attr.s(auto_attribs=True)
|
33
|
+
class ListRetoursUMType:
|
34
|
+
numeroUM: typing.Optional[int] = None
|
35
|
+
typeUM: typing.Optional[str] = None
|
36
|
+
referenceUM: typing.Optional[str] = None
|
37
|
+
cabGeodisUM: typing.Optional[str] = None
|
38
|
+
cabGeodisEuropeUM: typing.Optional[str] = None
|
39
|
+
|
40
|
+
|
41
|
+
@attr.s(auto_attribs=True)
|
42
|
+
class ListRetoursEnvoisType:
|
43
|
+
index: typing.Optional[int] = None
|
44
|
+
horsSite: typing.Optional[bool] = None
|
45
|
+
codeSa: typing.Optional[str] = None
|
46
|
+
codeClient: typing.Optional[int] = None
|
47
|
+
codeProduit: typing.Optional[str] = None
|
48
|
+
reference1: typing.Optional[str] = None
|
49
|
+
reference2: typing.Optional[str] = None
|
50
|
+
dateDepartEnlevement: typing.Optional[str] = None
|
51
|
+
destinataire: typing.Optional[DestinataireType] = jstruct.JStruct[DestinataireType]
|
52
|
+
noRecepisse: typing.Optional[int] = None
|
53
|
+
noSuivi: typing.Optional[str] = None
|
54
|
+
urlSuiviDestinataire: typing.Optional[str] = None
|
55
|
+
listRetoursUM: typing.Optional[typing.List[ListRetoursUMType]] = jstruct.JList[ListRetoursUMType]
|
56
|
+
docEtiquette: typing.Optional[DocEtiquetteType] = jstruct.JStruct[DocEtiquetteType]
|
57
|
+
docBordereau: typing.Any = None
|
58
|
+
docRecapitulatif: typing.Any = None
|
59
|
+
msgErreurEnregistrement: typing.Any = None
|
60
|
+
msgErreurValidation: typing.Any = None
|
61
|
+
msgErreurSuppression: typing.Any = None
|
62
|
+
msgErreurEtiquette: typing.Any = None
|
63
|
+
msgErreurBordereau: typing.Any = None
|
64
|
+
msgErreurRecapitulatif: typing.Any = None
|
65
|
+
|
66
|
+
|
67
|
+
@attr.s(auto_attribs=True)
|
68
|
+
class ContenuType:
|
69
|
+
msgErreur: typing.Any = None
|
70
|
+
nbEnvoisATraiter: typing.Optional[int] = None
|
71
|
+
nbEnvoisEnregistres: typing.Optional[int] = None
|
72
|
+
nbEnvoisValides: typing.Optional[int] = None
|
73
|
+
nbEnvoisEtiquetes: typing.Optional[int] = None
|
74
|
+
nbEnvoisSupprimes: typing.Optional[int] = None
|
75
|
+
nbAnomaliesSuppression: typing.Optional[int] = None
|
76
|
+
nbAnomaliesEtiquette: typing.Optional[int] = None
|
77
|
+
nbAnomaliesBordereau: typing.Optional[int] = None
|
78
|
+
nbAnomaliesRecapitulatif: typing.Optional[int] = None
|
79
|
+
docBordereau: typing.Any = None
|
80
|
+
docRecapitulatif: typing.Any = None
|
81
|
+
msgErreurBordereau: typing.Any = None
|
82
|
+
msgErreurRecapitulatif: typing.Any = None
|
83
|
+
listRetoursEnvois: typing.Optional[typing.List[ListRetoursEnvoisType]] = jstruct.JList[ListRetoursEnvoisType]
|
84
|
+
|
85
|
+
|
86
|
+
@attr.s(auto_attribs=True)
|
87
|
+
class ShippingResponseType:
|
88
|
+
ok: typing.Optional[bool] = None
|
89
|
+
codeErreur: typing.Any = None
|
90
|
+
texteErreur: typing.Any = None
|
91
|
+
contenu: typing.Optional[ContenuType] = jstruct.JStruct[ContenuType]
|