Wie migriere ich Gutscheincodes aus Shopware 5 nach Shopware 6?

  • Aktualisiert

Wenn du alle noch nicht eingelösten Gutscheine bzw. Gutscheine mit Restwert aus Shopware 5 in deinen Shopware 6 Shop migrieren möchtest, kannst du die folgende SQL-Abfrage nutzen, um die entsprechenden Gutscheincodes und Restwerte aus Shopware 5 zu exportieren.

Die Abfrage ist auf die Erweiterung Gutscheine, Kaufgutscheine & Coupons - EasyCoupon Plugin von Net Inventors GmbH angepasst, kann aber auch umgeschrieben werden, um für andere Gutscheinerweiterungen genutzt zu werden. Mehr Informationen zu der genannten Erweiterung in Verbindung mit Pickware POS findest du auch hier.

SELECT DISTINCT
    UUID() AS id,
    sev.description AS title,
    0 AS deleted,
    NULL AS deleted_date,
    1 AS active,
    40020 AS voucher_type,
    sevc.code AS code,
    IF(sod.redeemed, ROUND(sev.value + sod.redeemed, 2), sev.value) AS value,
    10010 AS value_type,
    'Import von Pickware Shopware 5 Gutscheinen' AS comment,
    0 AS discard_remaining,
    1 AS mail_sent,
    0 AS combine_vouchers,
    1 AS currency_factor,
    sev.ordercode AS order_position_number,
    NULL AS max_redemption_value,
    'EUR' AS currency_iso_code,
    -- dynamische Kundennummer aus direktem userID oder fallback über Bestellung
    IF(
        su.customernumber IS NOT NULL,
        CONCAT('{"customerNumber":"', su.customernumber, '"}'),
        IF(
            su_fallback.customernumber IS NOT NULL,
            CONCAT('{"customerNumber":"', su_fallback.customernumber, '"}'),
            '{}'
        )
    ) AS virtual_import,
    vcv.validTo AS valid_until,
    0 AS redemption_order,
    NULL AS pin,
    NULL AS initial_value,
    NULL AS tax_id,
    'cart' AS discount_scope
FROM s_emarketing_voucher_codes sevc
LEFT JOIN s_emarketing_vouchers sev ON sev.id = sevc.voucherID
LEFT JOIN s_emarketing_vouchers_attributes seva ON seva.voucherId = sev.id
-- Redeemed value korrekt bestimmen
LEFT JOIN (
    SELECT
        sod.articleID AS voucherCodeId,
        SUM(sod.price) AS redeemed
    FROM s_order_details sod
    LEFT JOIN s_order so ON so.id = sod.orderID
    LEFT JOIN s_emarketing_voucher_codes vc ON vc.id = sod.articleID
    LEFT JOIN s_emarketing_vouchers v ON v.id = vc.voucherID
    WHERE sod.modus = 2
      AND so.status NOT IN (-1, 1, 4)
      AND sod.articleordernumber = v.ordercode
      AND v.modus = 1
    GROUP BY sod.articleID
) AS sod ON sod.voucherCodeId = sevc.id
-- Gutschein-Metadaten
LEFT JOIN s_plugin_viison_coupon_voucher_code_gift_voucher vcv ON vcv.voucherCodeId = sevc.id
-- Direkte Zuordnung via userID
LEFT JOIN s_user su ON su.id = sevc.userID
-- Fallback: Kundennummer über eingelöste Bestellung (nur wenn userID NULL)
LEFT JOIN s_order_details sod_fallback ON sod_fallback.id = vcv.orderDetailId
LEFT JOIN s_order so_fallback ON so_fallback.id = sod_fallback.orderID
LEFT JOIN s_user su_fallback ON su_fallback.id = so_fallback.userID
WHERE sevc.cashed = 0
  AND sev.modus = 1;

Anschließend kannst du die Gutscheine nach Shopware 6 importieren. Bei Net Inventors findest du alle weiteren Informationen dazu.