Artikelbilder aus ERPNext an Shopware pushen #31

Closed
opened 2026-08-22 18:55:38 +00:00 by csaeum · 1 comment
Owner

Bislang deckt keines der Milestone-5-Issues (#16-#19, alle bereits geschlossen) Bilder ab — nur Artikel-Stammdaten, Beschreibungen/SEO, Preise/Steuer und Varianten. Bilder sind eine echte Lücke im bisherigen Push-Umfang.

Ziel: Artikelbilder aus ERPNext (Item.image bzw. eine Galerie mehrerer Bilder, falls vorhanden) nach Shopware pushen — als media/product-media-Zuordnung über die Admin API.

Zu klären beim Umsetzen (nicht Teil dieses Issues, nur als Hinweis für den Umsetzungs-Plan):

  • Shopware-Endpunkte: POST /api/media (Upload) + POST /api/product/{id}/media-Zuordnung bzw. direktes media-Array am Produkt — genau prüfen wie Julian/Marcel das ggf. schon gelöst haben (beide Referenz-Forks vorher checken, wie bei den bisherigen Issues).
  • Ein Bild vs. mehrere Bilder pro Artikel (ERPNext-Standard-Item hat nur ein image-Feld — reicht das, oder wird eine Galerie gebraucht?).
  • Delta-Erkennung wie bei #22 (Bestandssync), damit nicht bei jedem Lauf alle Bilder neu hochgeladen werden — z. B. Hash-Vergleich, wie es laut früherer Recherche in Julians/Marcels export/image_handler.py bereits per MD5-Hash gelöst ist (siehe docs/architecture.md#issue-22).

Noch keinem Milestone zugeordnet — passt inhaltlich am ehesten an Milestone 5 an, das aber schon geschlossen ist. Bitte bei Gelegenheit einsortieren.

Bislang deckt keines der Milestone-5-Issues (#16-#19, alle bereits geschlossen) Bilder ab — nur Artikel-Stammdaten, Beschreibungen/SEO, Preise/Steuer und Varianten. Bilder sind eine echte Lücke im bisherigen Push-Umfang. **Ziel**: Artikelbilder aus ERPNext (`Item.image` bzw. eine Galerie mehrerer Bilder, falls vorhanden) nach Shopware pushen — als `media`/`product-media`-Zuordnung über die Admin API. **Zu klären beim Umsetzen** (nicht Teil dieses Issues, nur als Hinweis für den Umsetzungs-Plan): - Shopware-Endpunkte: `POST /api/media` (Upload) + `POST /api/product/{id}/media`-Zuordnung bzw. direktes `media`-Array am Produkt — genau prüfen wie Julian/Marcel das ggf. schon gelöst haben (beide Referenz-Forks vorher checken, wie bei den bisherigen Issues). - Ein Bild vs. mehrere Bilder pro Artikel (ERPNext-Standard-`Item` hat nur ein `image`-Feld — reicht das, oder wird eine Galerie gebraucht?). - Delta-Erkennung wie bei #22 (Bestandssync), damit nicht bei jedem Lauf alle Bilder neu hochgeladen werden — z. B. Hash-Vergleich, wie es laut früherer Recherche in Julians/Marcels `export/image_handler.py` bereits per MD5-Hash gelöst ist (siehe `docs/architecture.md#issue-22`). Noch keinem Milestone zugeordnet — passt inhaltlich am ehesten an Milestone 5 an, das aber schon geschlossen ist. Bitte bei Gelegenheit einsortieren.
Author
Owner

Umgesetzt in 8ad3f0b auf shopware6-dach (neuer Button "Push Images" auf Shopware Account, Modul shopware6/api/image.py).

Scope-Entscheidung: Item.image bleibt immer das Shopware-Cover; zusätzliche Bilder kommen aus normalen File-Attachments am Item (Dateiname-sortiert, per Content-Hash dedupliziert) und werden als Galerie danach angehängt. Design orientiert an Marcels Referenz-Fork (image_handler.py), aber ohne dessen Cache-Layer/S3-Presigned-URLs (bei uns nicht installiert) - reiner Binär-Upload.

Zusätzlich entdeckt und mitgelöst: Item.image kann auch eine reine externe URL sein (kein lokales File) - live an den eigenen Test-Items SKU001-SKU010 bestätigt. Solche Bilder werden beim Push heruntergeladen (SSRF-abgesichert) und binär hochgeladen.

Live gegen erpnext-sync/sw6-erpnext verifiziert:

  • Erst-Push aller 10 Test-Items: 0 Fehler, Cover + Galerie-Reihenfolge per Shopware Admin API bestätigt (Position 0 = Cover)
  • Zweiter Lauf ohne Änderung: korrekt skipped_unchanged
  • Echter Bildaustausch (Attachment ersetzt): korrekt erkannt, nur das eine Item neu gepusht
  • Test-Attachments und Hash-Feld danach bereinigt

Kein automatisches Löschen von Shopware-Bildern wenn ERPNext keine mehr hat (bewusst out of scope, siehe Code-Kommentar).

Umgesetzt in `8ad3f0b` auf `shopware6-dach` (neuer Button "Push Images" auf Shopware Account, Modul `shopware6/api/image.py`). **Scope-Entscheidung:** `Item.image` bleibt immer das Shopware-Cover; zusätzliche Bilder kommen aus normalen File-Attachments am Item (Dateiname-sortiert, per Content-Hash dedupliziert) und werden als Galerie danach angehängt. Design orientiert an Marcels Referenz-Fork (`image_handler.py`), aber ohne dessen Cache-Layer/S3-Presigned-URLs (bei uns nicht installiert) - reiner Binär-Upload. **Zusätzlich entdeckt und mitgelöst:** `Item.image` kann auch eine reine externe URL sein (kein lokales File) - live an den eigenen Test-Items SKU001-SKU010 bestätigt. Solche Bilder werden beim Push heruntergeladen (SSRF-abgesichert) und binär hochgeladen. **Live gegen `erpnext-sync`/`sw6-erpnext` verifiziert:** - Erst-Push aller 10 Test-Items: 0 Fehler, Cover + Galerie-Reihenfolge per Shopware Admin API bestätigt (Position 0 = Cover) - Zweiter Lauf ohne Änderung: korrekt `skipped_unchanged` - Echter Bildaustausch (Attachment ersetzt): korrekt erkannt, nur das eine Item neu gepusht - Test-Attachments und Hash-Feld danach bereinigt Kein automatisches Löschen von Shopware-Bildern wenn ERPNext keine mehr hat (bewusst out of scope, siehe Code-Kommentar).
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
Frappe-Projekte/ecommerce_integrations#31
No description provided.