Repository navigation
Tarification
Le prix de livraison se calcule dans cet ordre :
- Un point d'extension
_dpd_get_live_price(vide par défaut, car DPD France n'expose pas d'API de cotation en temps réel). - Si la méthode est grille, le prix vient de la grille tarifaire du transporteur, par zone et tranche de poids.
- Si la méthode est règles Odoo, le moteur
base_on_rules'applique.
Le prix est exprimé dans la devise de la société.
La zone de destination est déduite du pays :
| Zone | Contenu |
|---|---|
| FR | France métropolitaine, Monaco |
| EU1 | Europe zone 1 : Allemagne, Belgique, Luxembourg, Pays-Bas |
| EU2 | Europe zone 2 : reste de l'Europe, Royaume-Uni, Suisse |
| INT | Intercontinental : reste du monde |
La grille est éditable directement sur le transporteur (onglet DPD, tableau des tarifs). Les données de démo contiennent des tarifs indicatifs 2026 relevés sur des comparateurs : DPD France ne publie pas de grille publique, les tarifs sont négociés par contrat. Remplacez-les par les vôtres.
Une ligne = une zone + un poids maximum + un prix. La recherche prend la première ligne dont le poids maximum couvre le colis.
Chaque cotation renvoie aussi le délai annoncé, en jours ouvrés après remise au transporteur :
- Délai min / max sur le transporteur (onglet DPD, groupe Pricing) : valeur par défaut pour toutes les destinations.
- Delivery days min / max sur une ligne de la grille : surcharge le transporteur pour cette zone (0 = utiliser la valeur du transporteur). Avec les règles Odoo, seule la valeur du transporteur s'applique.
Le résultat de rate_shipment contient delay_min et delay_max (0 quand
le délai est inconnu) en plus de price. La phrase « Livraison en 2 à 3 jours
ouvrés » s'affiche dans l'assistant Ajouter une livraison et se retrouve
dans delivery_message sur le devis.
Pour choisir un transporteur sur le coût et le délai, il suffit de coter chaque candidat :
quotes = []
for carrier in carriers:
res = carrier.rate_shipment(order)
if res["success"]:
quotes.append((carrier, res["price"], res.get("delay_max", 0)))
cheapest = min(quotes, key=lambda q: q[1])
fastest = min((q for q in quotes if q[2]), key=lambda q: q[2])Les délais de démo sont indicatifs (Predict et Relais 24 à 48 h, CLASSIC Europe 2 à 3 jours en zone 1 et 3 à 5 jours en zone 2) : remplacez-les par ceux de votre contrat.
Le découpage Europe 1 / Europe 2 est représentatif. Alignez-le sur le zonage
de votre contrat DPD CLASSIC Europe avant de figer vos prix internationaux.
Le mapping est dans models/delivery_carrier.py.