JTL-Wawi-Stammdaten in Odoo — gestaffelt, mappbar, wiederholbar
jtl_wawi_product_import bringt JTL-Wawi-Exports nach Odoo: ein Multi-File-Wizard für 10 CSV-Dateitypen, Spalten-Mapping pro Datei, Barcode-Konflikt-Behandlung, Parent-Child-Variants, Hersteller- und EU-Responsible-Sync, sowie staged Background-Verarbeitung mit Logs.
Was sich für das Stammdaten-Team ändert
Die JTL-CSV-Welt mit Pipe-Separator, deutschem Dezimalkomma und 100+ Spalten pro File trifft auf Odoo's klares Datenmodell. Statt händisches Excel-Pingpong: ein Wizard, drei Schritte, ein Background-Job. Fehlerhafte Zeilen landen mit Field-Level-Logs in der Run-Historie — nicht im Vergessen.
Hochladen
Alle 10 JTL-Exporte in einem Wizard hochladen — Artikelstammdaten, Hersteller, EU-RP, Kategorien, Lieferantenartikel, Variationen, Attribute, Merkmale, Stückliste. Optional: Mapping-Profil reusen aus letztem Lauf.
Spalten zuordnen
Pro Datei eigener Tab. CSV-Header werden automatisch erkannt, Spalten dem passenden Odoo-Feld zugeordnet. Aktive/Inaktiv-Toggle pro Spalte, Transform-Regel pro Feld (Trim, Komma → Punkt, Boolean-Normalize, ...).
Validieren & queuen
Pflichtfeld-Validierung läuft. Run wird angelegt, in Batches gequeued, Background-Worker arbeitet ab. Fortschritt + Field-Logs sichtbar im Run-Record. Bei Fehlern: Reset, Requeue, oder gezielt einzelne Zeilen reparieren.
Zehn JTL-Dateitypen in einem Wizard
JTL-Wawi exportiert pro Use-Case eine eigene CSV — Artikel, Variationen, Lieferanten, Kategorien usw. liegen alle separat. Wir behandeln jedes File mit seinem eigenen Mapping-Profil und seiner eigenen Ziel-Modell-Whitelist; zusammenführen passiert sauber im Odoo-Datenmodell, nicht im Excel-Chaos.
Artikelstammdaten
Hauptdatei mit allen Artikel-Records — Name, SKU, Preis, Steuer, Dimensionen, Bilder, SEO-Felder. article_master → product.template
Hersteller
Hersteller-Records mit Adresse und Kontakt. Werden zu res.partner und auf product.brand verknüpft.
EU-Responsible
EU-Repräsentant pro Produkt — Pflicht seit GPSR. Wird als spezialisierter Partner-Record angelegt und am Artikel referenziert.
Kategorien
Hierarchische Kategorienbäume aus JTL — Mapping wahlweise auf product.category (interne Buchung) oder product.public.category (Webshop).
Lieferantenartikel
Lieferanten-spezifische SKUs, EK-Preise, Mindestbestellmengen, Lead-Times. Werden zu product.supplierinfo mit korrektem Vendor-Link.
Variationen
Variations-Definitionen (Farbe = rot/grün/blau, Größe = S/M/L). Werden zu product.attribute + product.attribute.value.
Variationskombinationen
Konkrete Varianten pro Stammartikel mit Parent-Child-SKU-Linking. Generiert product.product-Records mit Eltern-Bezug.
Attribute
Reine Attribut-Werte (z.B. Farbe = #FF0000). Werden auf product.attribute.value gemappt oder als Roh-Record (jtl.product.attribute.raw) zwischengespeichert.
Eigene Merkmale
Frei definierbare Merkmale (Material, Pflegehinweise, Allergene). Mapping auf Odoo-Standardfeld oder eigenes jtl.product.feature-Record.
Stückliste
BOM-Zeilen für Sets, Bundles, Manufacturing. Werden zu mrp.bom + mrp.bom.line wenn das MRP-Modul installiert ist.
Was der Wizard kann
Mehr als ein CSV-Loader: profilbasiertes Mapping, Konflikt-Modes, Daten-Sync und gestaffeltes Verarbeiten in Background-Queues. Kein „läuft 4 Stunden und stirbt"-Verhalten.
Multi-File-Wizard
- Alle 10 JTL-CSV-Files in einem Wizard-Lauf
- Auto-Header-Detection mit Encoding-Sniffing (UTF-8 / Latin1)
- Pflichtmapping-Validierung vor dem Queue
- Modul-Precheck (
contacts,website_sale,mrp)
Spalten-Mapping pro Datei
- Eigener Tab pro Datei mit File-spezifischer Whitelist
- Selektive Spalten-Aktivierung — nicht jede Spalte muss importiert werden
- Transform-Regeln: Trim, Upper/Lower, Komma → Punkt, Boolean-Normalize, HTML-Clean
- Custom-Felder als Many2one mit Auto-Create-on-Miss
Mapping-Profile
- Wiederverwendbar via
jtl.import.profile - Save-as-Profile am Ende des Wizard-Laufs
- Auto-Apply beim nächsten Lauf — nur neue Spalten manuell mappen
- Versions-tracked, kein Verlust bei Updates
Barcode-Konflikt-Modes
- Skip: Doppelte Barcodes überspringen, Logging
- Match-Update: existierender Record per Barcode finden, gezielt updaten
- Update-Existing-Only: nur vorhandene Records aktualisieren, keine neuen anlegen
- Audit-Trail über jede getroffene Entscheidung
Parent-Child-Variants
- JTL Variations-SKUs werden auf Eltern-Stammartikel verknüpft
product.product-Records pro Kombination, korrekte Eltern-Beziehung- Variation-Definitionen werden zu Odoo-Attribut-Linien
- Re-Import idempotent: kein Variant-Spam bei Re-Run
Sync-Felder
- SEO-Felder (Meta-Title, Meta-Description, Slug) für
website_sale - Bilder & Galerie-Bilder als
product.image - Dimensionen, Gewicht, Volumen am Stammartikel
- Stock-Quants pro Lager (optional, mit Stock-Module)
Hersteller- & EU-RP-Sync
- Hersteller werden als
res.partner+product.brandangelegt - EU-Responsible-Records pro GPSR-Pflichtartikel
- Lieferanten-Adressen aus Hersteller-CSV
- Custom-Brand-Assign-Wizard für Bestand-Cleanup
Background-Queue
- Verarbeitung in
jtl.import.run-Records - Batch-Größe konfigurierbar (Default 200 Zeilen)
- Cron-getrieben, kein UI-Timeout
- State-Tracking: Pending / Running / Done / Failed
Logs & Diagnostik
- Field-Level-Log-Messages bei Mapping-Fehlern
- Reset, Requeue, Cancel auf Run-Record
- Dry-Run-Mode für Testläufe ohne DB-Schreiben
- Import-Sequence pro Run zur Nachverfolgung
Vorher (JTL-Wawi-Welt) vs. Nachher (Odoo)
Was sich konkret zwischen den Systemen ändert. Die Spalten der JTL-CSV-Files landen in den passenden Odoo-Feldern — mit korrektem Datentyp, Encoding und Beziehungs-Logik.
| JTL-Wawi | Odoo | Hinweis |
|---|---|---|
Artikel mit Pipe-Separator (|) |
product.template |
Auto-Encoding-Detection, Pipe als CSV-Delim erkannt. |
| Variationskombinationen mit Parent-SKU | product.product + product.attribute.value |
Eltern-Stammartikel wird gefunden, Varianten werden korrekt verlinkt. |
| Hersteller-Datei mit Adressblock | res.partner + product.brand |
Brand-Record wird automatisch mit angelegt, falls nicht vorhanden. |
| Lieferanten-CSV mit EK-Preis & MOQ | product.supplierinfo |
Vendor-Pricelist mit Mindestmenge, Lead-Time, EK-Preis je Lieferant. |
| Eigene Merkmale (frei definierbar) | Standard-Feld oder jtl.product.feature |
Mapping-Wahlrecht: bekanntes Feld nutzen oder Roh-Record für späteres Cleanup. |
| Bilder im JTL-Bilderordner | product.image + image_1920 |
Bild-Pfade werden gelesen, Galerie-Bilder pro Stammartikel angelegt. |
| SEO-Felder (Title, Meta, URL-Slug) | website_sale-SEO-Felder |
Wird gesetzt wenn website_sale installiert ist. |
| Stückliste (Set/Bundle) | mrp.bom + mrp.bom.line |
Wird zu echter BOM wenn das MRP-Modul installiert ist; sonst Roh-Record. |
Typischer Migrations-Ablauf
Vom JTL-Export bis zum produktiv genutzten Odoo-Stamm dauert ein typischer Migrations-Lauf 2-5 Tage Vorbereitung plus 1-2 Stunden Background-Verarbeitung — abhängig von Stammumfang und Custom-Mapping-Anteil.
- JTL-Wawi-Export. Alle 10 CSV-Files aus JTL-Wawi exportieren. Reihenfolge spielt im Wizard keine Rolle, fehlende Files können nachgereicht werden.
- Modul-Precheck. Wizard prüft
contacts,website_sale,mrp: was nicht installiert ist, wird übersprungen — kein Crash. - Files hochladen. Alle Datei-Slots auf einer Seite, Drag & Drop. Encoding und Header werden direkt nach dem Upload erkannt.
- Spalten mappen. Pro Datei eigener Tab. Auto-Vorschläge für Standard-Felder, manuelles Override jederzeit möglich.
- Konflikt-Mode wählen. Skip / Match-Update / Update-Existing-Only — abhängig davon, ob es ein Erst- oder Re-Import ist.
- Mapping-Profil speichern. Beim ersten Lauf — alle weiteren Läufe nutzen das Profil und mappen nur neue Spalten manuell.
- Validate & Queue. Pflichtfelder werden geprüft, Run-Record angelegt, Cron-Worker startet die Batches.
- Run beobachten. Fortschritts-Balken, Field-Level-Logs, Skip/Match-Counter live im Run-Record.
- Cleanup. Brand-Assign-Wizard, Variant-Validation, Image-Cleanup — die letzte Meile vor Produktiv-Schaltung.
Voraussetzungen
Was Odoo-seitig installiert sein muss damit alle Datei-Typen verarbeitet werden können. Nicht-installierte Module werden vom Wizard übersprungen — nicht crashed.
Pflicht-Module
account— Steuer- und Buchungs-Feldercontacts— Hersteller- und EU-RP-Recordsmail— Audit-Log und Subscribe-Funktionenproduct— Produkt-Stammdatenpurchase_stock— Lieferanten-Pricelistsstock— Lager-Mengen, Locations
Optional
website_sale— SEO-Felder, Webshop-Kategorien, Galerie-Bilder im Webshop-Kontextproduct-Variants aktiviert — für Variations-Import aufproduct.productmrp— damit Stücklisten als echtemrp.bomangelegt werdenqueue_job— alternativer Background-Worker für sehr große Datenmengen