Ihr Partner für Online-Marketing in Niederbayern

JTL Connector zu modifiedShop: Versandkosten werden falsch übertragen

Als spezialisierte Agentur für E-Commerce gehört auch die Identifizierung und Behebung von Bugs im Alltag dazu. Ein häufig auftretendes Problem betrifft die fehlerhafte Übermittlung von Brutto- und Nettopreisen zwischen dem JTL-Connector und modifiedshop. In einem bekannten Forum-Beitrag wurde dieses Thema bereits diskutiert – damals im Zusammenhang mit Shopify. Wir haben die Problematik aufgegriffen und einen Workaround speziell für modifiedshop weiterentwickelt.

Das Kernproblem liegt in der fehlerhaften Verarbeitung der Versandkosten. Die ursprüngliche Implementierung führte dazu, dass Versandkosten entweder als Brutto- oder als Nettopreis falsch übermittelt wurden, was in der Bestellabwicklung zu Inkonsistenzen und zusätzlichem administrativen Aufwand führte. Unser Workaround behebt dieses Problem, indem die Preise vor Übertragung durch die JTL-Schnittstelle angepasst und anschließend wieder auf den korrekten Wert gesetzt wird.

function cwShippingBruttoNetto() {
    // Betrifft nur Kunden mit Gruppen-ID 7
    $sql = "
        SELECT
            o.orders_id,
            jt.host_id,
            ot.value,
            ot.text
        FROM orders AS o
        LEFT JOIN orders_total AS ot USING (orders_id)
        LEFT JOIN jtl_connector_link_customer_order AS jt ON (o.orders_id = jt.endpoint_id)
        WHERE ot.class = 'ot_shipping'
          AND o.date_purchased >= DATE(NOW() - INTERVAL 7 DAY)
          AND o.customers_status = 7
    ";

    $result = xtc_db_query($sql);
    while ($order = xtc_db_fetch_array($result)) {
        // Typumwandlungen für mehr Sicherheit
        $orderId    = (int)$order['orders_id'];
        $hostId     = (int)$order['host_id'];
        $dblPreis   = (float)$order['value'];
        $orderText  = $order['text'];

        // Fall: Bestellung wurde von JTL noch nicht abgeholt
        if ($hostId <= 10) {
            // Formatierung des Wertes (z. B. "12,34 EUR")
            $strPreis = number_format($dblPreis, 2, ",", ".") . " EUR";

            // Wenn der formatierte Wert noch identisch ist, Preis ändern
            if ($strPreis === $orderText) {
                // Schein-Bruttopreis für Connector mit 19% Steuer berechnen
                $dblPreisNeu = round($dblPreis * 1.19, 4);

                $updateSql = "
                    UPDATE orders_total
                    SET value = '" . $dblPreisNeu . "'
                    WHERE orders_id = '" . $orderId . "'
                      AND class = 'ot_shipping'
                    LIMIT 1
                ";
                xtc_db_query($updateSql);
            }
        }
        // Fall: Bestellung wurde bereits importiert (Host-ID vorhanden)
        else {
            // Extrahiere den numerischen Wert aus dem Text (z. B. "12,34")
            if (preg_match("#([0-9,]+)#", $orderText, $arrPreis)) {
                $dblPreisNeu = floatval(str_replace(",", ".", $arrPreis[1]));
                // Wenn der extrahierte Wert kleiner ist, Preis zurückändern
                if ($dblPreis > $dblPreisNeu) {
                    $dblPreisNeu = round($dblPreisNeu, 4);

                    $updateSql = "
                        UPDATE orders_total
                        SET value = '" . $dblPreisNeu . "'
                        WHERE orders_id = '" . $orderId . "'
                          AND class = 'ot_shipping'
                        LIMIT 1
                    ";
                    xtc_db_query($updateSql);
                }
            }
        }
    }
}

Bitte beachten Sie, dass der bereitgestellte Quellcode als kostenfreie, unverbindliche Hilfestellung zur Verfügung gestellt wird und jede Nutzung auf eigenes Risiko erfolgt; wir haften nicht für daraus entstehende Schäden.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Ähnliche Themen