In Odoo 19 is er een OCA-module voor DHL Parcel en geen OCA-module voor GLS. delivery_dhl_parcel staat op de 19.0-branch van OCA/l10n-spain, versie 19.0.1.0.2. delivery_gls_asm loopt van 12.0 tot 18.0 en is niet gemigreerd. Als je van plan was naar Odoo 19 te gaan en GLS-labels te blijven printen vanuit de levering, is dit het eerste cijfer om naar te kijken.
Controleer het zelf: vraag het manifest op in elke branch en kijk naar de HTTP-code: OCA/l10n-spain/19.0/delivery_gls_asm/__manifest__.py geeft 404; hetzelfde pad in 18.0 geeft 200; en dat van delivery_dhl_parcel in 19.0 ook 200.
GLS of DHL: waarom het niet dezelfde keuze is
GLS Spanje is pakketvervoer: kleine colli en een netwerk van agentschappen. De integratie staat of valt met het label en de status, en haar bestaansreden is volume: honderd labels per dag die niemand wil overtikken.
DHL in Odoo is geen merk: het zijn twee producten met verschillende API's. De OCA-module waarschuwt daarvoor in zijn readme/DESCRIPTION.md: «No es válido para otras integraciones de DHL como el Express, que usan otras APIs». En de officiële Odoo 19-documentatie vermeldt in de connectortabel DHL Express en sluit af met: «Other services from DHL are not supported».
Het gevolg: als je contract DHL Express is, heb je niets aan de OCA-module en zit de native connector niet in Community: in addons/ van de openbare repository odoo/odoo is in 17, 18 en 19 de enige vervoerdersmodule delivery_mondialrelay. Is het DHL Parcel Spanje, dan is de OCA-module de weg. Dat is een vraag voor je DHL-accountmanager, nog voor je integrator.
| DHL Parcel | GLS | |
|---|---|---|
| Technische naam | delivery_dhl_parcel | delivery_gls_asm |
| Gepubliceerde branches | 13.0 tot 19.0 (zonder 16.0) | 12.0 tot 18.0. Geen 19.0 |
| Ophaalopdrachten | Nee | Ja, met eigen statussen |
| Douanevelden | Bestaan en blijven leeg | Bestaan niet |
Welke OCA-module er echt bestaat, en in welke repository
De verwarring begint op de verkeerde plek: je zoekt «OCA DHL Odoo» en belandt in OCA/delivery-carrier, de logistiekrepository van de OCA. Daar staat hij niet: er is in geen enkele branch van 12.0 tot 19.0 een DHL-module, en van GLS rest alleen een spookmap in 16.0 met één bestand erin, static/description/index.html. Geen manifest en geen code.
De twee levende modules staan in OCA/l10n-spain, en je verwachting stel je best bij: in de 19.0-branch van OCA/delivery-carrier is de enige module die de API van een vervoerder aanroept delivery_correos_express; de rest is infrastructuur. En in 19.0 van OCA/l10n-spain zijn er drie vervoerders: delivery_dhl_parcel, delivery_mrw en delivery_seur_atlas.
Wat elke module dekt, gelezen in de code
Bij DHL Parcel komt alles uit één methode, _prepare_dhl_parcel_shipping: een platte dictionary die je in twee minuten leest.
- Label in PDF, ZPL of EPL, bij de levering bijgevoegd, met de AWB en de tracking.
- Rembours op basis van het ordertotaal, met verdeling van de kosten volgens de incoterm.
- Optionele verzekering, retouren, dagafsluiting via wizard en levering vóór 13:30.
- Drie in de module vastgelegde grenzen: hij berekent geen tarief (zijn
ROADMAPzegt dat zendingen «siempre se cotizan a 0»), naam en adres worden afgekapt op 40 tekens, en het minimale gewicht dat meegaat is 1 kg, ook als het collo 200 g weegt.
Het equivalent bij GLS is _prepare_gls_asm_shipping, langer omdat de API bij elke aanroep volledige afzender- en ontvangergegevens vraagt:
- Dienst en tijdvenster per verzendmethode, PDF-label en retourlabel.
- Tracking met volledige historie en afleverbewijs bij de levering bijgevoegd.
- Ophaalopdrachten als eigen flow: twaalf dienstcodes gemarkeerd als ophaling, met aparte knop en statussen.
- Annulering met vangrail: ververst de status en annuleert alleen als de zending nog op "registrado en el transportista" staat; anders geeft hij een foutmelding en verwijst hij je door om het per e-mail met GLS af te handelen.
- De beperkingen: de referentie mag niet langer zijn dan 15 tekens (GLS kapt af en er ontstaan botsingen), hij berekent ook geen tarief, en het land van de afzender staat in de code vast op Spanje, met de opmerking always 34=Spain.
Douane en export: de velden die de OCA leeg laat
Het gat heeft een concrete vorm: Odoo levert de velden mee en de OCA-modules gebruiken ze niet. De informatie ontbreekt niet: ze reist alleen niet mee. Wat Odoo 19 wel heeft, in stock_delivery:
product.template.hs_code, gelabeld "HS Code", met de hulptekst "Standardized code for international shipping and goods declaration". Dat is de tariefpost.product.template.country_of_origin, gelabeld "Origin of Goods", relatie naarres.country.- Een klasse
DeliveryCommodity(letterlijke docstring: «Commodities information are needed for Commercial invoices with each provider») met product, aantal, geldwaarde en land van herkomst, plus twee methoden die haar opbouwen. Heeft het product geen land van herkomst, dan wordt dat van het verzendende magazijn gebruikt.
Wat de OCA-modules daarmee doen: niets. Zoeken naar hs_code, customs, aduana, arancel, incoterm of country_of_origin in de hele GLS-module levert nul resultaten op. In die van DHL Parcel komen ze wel voor, en dat is het interessante, want ze komen leeg voor:
"Incoterms": self.dhl_parcel_incoterm, # CPT paid, EXW owed
"GoodsDescription": "", # [optional]
"CustomsValue": "", # [optional]
"CustomsCurrency": "", # [optional]delivery_dhl_parcel · models/delivery_carrier.py · _prepare_dhl_parcel_shipping
Drie velden die de API voorziet en alle drie leeg verstuurd: aangegeven waarde, valuta en omschrijving van de goederen. De incoterm gaat wel mee, maar kijk waar hij vandaan komt (uit self, van de verzendmethode, niet van de levering) en in de code zijn er maar twee waarden, CPT en EXW: één vaste voor die hele vervoerder. Bij GLS is het equivalent het veld declarado, dat ook leeg vertrekt. En geen van de vier vervoerders die in 19.0 van die twee repositories overblijven (DHL Parcel, MRW, SEUR en Correos Express) noemt DeliveryCommodity, hs_code of country_of_origin: de leiding die Odoo heeft klaargelegd is niet aangesloten.
Wat je mist op de dag dat je exporteert:
- Tariefpost en land van herkomst, per regel. Ze bestaan op het product, maar gaan niet naar de vervoerder.
- Aangegeven waarde en de valuta ervan. Voorzien in de API van DHL Parcel. Wordt leeg verstuurd.
- Omschrijving van de goederen. Voorzien veld. Wordt leeg verstuurd.
- Handelsdocument. Een proforma gegenereerd vanuit de levering en bij de zending gevoegd. Bestaat in geen van beide.
- Incoterm per zending. Bestaat per vervoerder, met twee waarden.
Dit is geen verzuim van deze twee: het is het patroon. delivery_schenker stuurt "customsClearance": False mee met de opmerking «Customs Clearance not supported for now as it needs a full customs implementation», en zijn ROADMAP rekent douane-afhandeling tot het niet-ondersteunde; die module loopt tot 18.0 en staat ook niet in 19.0. Als een OCA-module wél echt douane doet, lost hij dat niet op met een veld: hij voegt een eigen model toe met tariefpost en land van herkomst per goederenregel. Dat is de werkelijke maat van het werk.
Wat er gebeurt als een van die velden ontbreekt
Niets, en dat is het probleem. De velden zijn optioneel in de API: de vervoerder accepteert de zending, geeft tracking terug en het label komt uit de printer. In Odoo is de levering gevalideerd en groen. De fout treedt later op, bij de douane op de bestemming: het pakket blijft staan en iemand van je bedrijf typt met de hand de tariefpost, de omschrijving en de waarde in die de vervoerder vraagt. Stil in Odoo en luid bij de klantenservice.
Het loont de moeite precies te zijn over wanneer dit speelt. Niet van Barcelona naar München: de EU is een interne markt en daar is geen douanegrens. Het speelt bij het verlaten van het gebied (Verenigd Koninkrijk, Zwitserland, Noorwegen, Andorra, Turkije) en, zonder Spanje te verlaten, op de Canarische Eilanden, in Ceuta en in Melilla. De Spaanse btw-wet (Ley 37/1992) zegt het in artikel 3: ze sluit Ceuta en Melilla uit «en cuanto territorios no comprendidos en la Unión Aduanera» en de Canarische Eilanden «en cuanto territorios excluidos de la armonización de los impuestos sobre el volumen de negocios».
En verwacht ook geen drempel waaronder de formaliteit verdwijnt. Aan de importzijde, die de Spaanse regelgeving uitwerkt, zette het Real Decreto-ley 7/2021 (BOE-A-2021-6872) het btw-pakket voor e-commerce om met ingang van 1 juli 2021: het schafte de vrijstelling voor de invoer van goederen van geringe waarde af «hasta los 22 euros de valor global de la mercancía», en legt uit dat tot 150 euro intrinsieke waarde «se aplica la franquicia aduanera por lo que no se exige una declaración completa ante la Aduana en el momento de la importación». Lees het andersom: onder 150 euro is de aangifte korter, niet nul. En wie haar moet invullen heeft nog steeds omschrijving, waarde en tariefpost nodig: precies de velden die de module leeg verstuurt.
Wanneer de OCA volstaat en wanneer je meer nodig hebt
De OCA-module is het juiste antwoord als je binnen de EU verzendt zonder een douanegrens over te gaan, als je wilt stoppen met adressen overtikken en geen exact tarief in de order nodig hebt, en als je op Odoo 18 of ouder zit: of op 19 met DHL Parcel.
Je hebt meer nodig als:
- Je regelmatig exporteert of naar de Canarische Eilanden, Ceuta of Melilla verzendt. Het werk is niet "de module installeren": het is
hs_codeen land van herkomst vullen, de payload uitbreiden en het handelsdocument genereren. - Je op Odoo 19 met GLS zit: vandaag is er geen module, dus ofwel wordt
delivery_gls_asmgemigreerd, ofwel kies je een andere route. - Je contract DHL Express is, of je met GLS verzendt vanuit een ander land dan Spanje.
Een opmerking over de werkwijze ter afsluiting: een OCA-module uitbreiden is de goedkope weg zolang het gat een veld is, en dat is hij niet meer zodra het gat een document is. De tariefpost en het land van herkomst in de payload zetten is _prepare_dhl_parcel_shipping erven en twintig regels toevoegen. Een proforma genereren die klopt met de boekhouding is al een module, met sjabloon, tests en onderhoud over drie versies.
Veelgestelde vragen
Is er een OCA-module van DHL voor Odoo 19?
Ja: delivery_dhl_parcel, in OCA/l10n-spain, versie 19.0.1.0.2. Hij staat niet in OCA/delivery-carrier, waar bijna iedereen hem zoekt, en werkt alleen voor de API van DHL Parcel: niet voor DHL Express.
En van GLS?
In Odoo 19 niet. delivery_gls_asm is gepubliceerd van branch 12.0 tot 18.0 in OCA/l10n-spain; in 19.0 bestaat hij niet.
Als de aangegeven waarde ontbreekt, geeft Odoo dan een foutmelding?
Nee: ze zijn optioneel in de API. De zending wordt geregistreerd, het label wordt gegenereerd en de levering wordt gevalideerd; het probleem komt aan het licht bij de douane op de bestemming, buiten Odoo.
Verder lezen
Wat wij hierover doen
Exporteer je en schiet de module tekort?
We bekijken je contract, de API die je hebt gekregen en de catalogus, en vertellen je of het opgelost wordt door de OCA-module uit te breiden of dat eigen ontwikkeling nodig is.

