Individuelle Versandkosten lassen sich überhaupt nicht eingrenzen

Hallo, nach dem ich im Internet keine passende Antwort gefunden habe, hab ich eben selber den Code Untersucht. Zum einen ist es offenar nichterlaubt, diese Felder zu nutzen wenn man keinen Standartversand nutzt.

 

   $statements = $this->db->fetchPairs("
            SELECT id, bind_sql
            FROM s_premium_dispatch
            WHERE active = 1 AND type IN (0)
            AND bind_sql IS NOT NULL AND bind_sql != ''
        ");

Dies halte ich erstmal für einen Fehler. hiervon steht zumindest in der Dokumentation nichts.

Mit den eigenen Bedingungen und eigenen Berechnungen im Versandkosten-Modul, können auch sehr komplexe Anforderungen und Berechnungen abgebildet werden. In diesem Artikel findest du einige Beispiele aufgeführt. Beide Optionen findest du in den Versandkosten im Reiter "Erweiterte Einstellungen".

Mit der eigenen Bedingung kann einen Versandart optional aktiviert oder deaktiviert werden. Die eigene Berechnung ignoriert die automatische Berechnung der Versandkosten. Zur Versandkosten-Ermittlung wird nur noch das Feld eigene Berechnung herangezogen.

Es können grundsätzlich alle Variablen der abgefragten Tabellen innerhalb der Funktionen sGetPremiumDispatches und sGetPremiumShippingcosts genutzt werden. Die jeweiligen Funktionen findest du in der Datei /engine/core/class/sAdmin.php. Die Bereiche sind wie folgt unterteilt: s_order_basket -> b
s_articles -> a
s_articles_details -> d
s_articles_attributes -> at
s_core_tax -> t
s_user -> u
s_user_billingaddress -> ub
s_user_shippingaddress -> us

Diese Aussage ist einfach verwirrend. Es wird von “eigene Bedingung” & “eigene Berrechung” gesprochen. So heißen die Felder im Versandmodul nun einmal.

Nutzen kann man diese Kürzel aber dort überhaupt nicht. Gemeint ist, dass man diese Kürzel in der erweiterten SQL-Abfrage unter Grundeinstellungen->Storefront->Versandkosten-Modul verwenden kann. 

 

Damit geht, was ich mir vorstelle musste dieser Query einfach folgender Maßen erweitert werden:

 

MAX(a.topseller) as has_topseller, MAX(at.attr3) as has_comment, MAX(b.esdarticle) as has_esd, b.ordernumber as orderNr

Außerdem musste ich natürlich in der sAdmin.php in 

**_sGetPremiumDispatches_**

   $statements = $this->db->fetchPairs("
            SELECT id, bind_sql
            FROM s_premium_dispatch
            WHERE active = 1 AND type IN (0,2)
            AND bind_sql IS NOT NULL AND bind_sql != ''
        ");

und 

 

$sql = "
            SELECT
                d.id as `key`,
                d.id, d.name,
                d.description,
                d.calculation,
                d.status_link,
                b.*
            FROM s_premium_dispatch d

            JOIN ( SELECT $sql_basket ) b
            JOIN s_premium_dispatch_countries dc
            ON d.id = dc.dispatchID
            AND dc.countryID=b.countryID
            JOIN s_premium_dispatch_paymentmeans dp
            ON d.id = dp.dispatchID
            AND dp.paymentID=b.paymentID
            LEFT JOIN s_premium_holidays h
            ON h.date = CURDATE()
            LEFT JOIN s_premium_dispatch_holidays dh
            ON d.id=dh.dispatchID
            AND h.id=dh.holidayID

            LEFT JOIN (
                SELECT dc.dispatchID
                FROM s_order_basket b
                JOIN s_articles_categories_ro ac
                ON ac.articleID=b.articleID
                JOIN s_premium_dispatch_categories dc
                ON dc.categoryID=ac.categoryID
                WHERE b.modus=0
                AND b.sessionID='{$this->session->offsetGet('sessionId')}'
                GROUP BY dc.dispatchID
            ) as dk
            ON dk.dispatchID=d.id

            LEFT JOIN s_user u
            ON u.id=b.userID
            AND u.active=1

            LEFT JOIN (
              SELECT *, user_id as userID, country_id as countryID, state_id as stateID
              FROM s_user_addresses a
              WHERE a.user_id = :userId
              AND a.id = :billingAddressId
            ) as ub
              ON ub.userID = u.id
              
           LEFT JOIN (
              SELECT *, user_id as userID, country_id as countryID, state_id as stateID
              FROM s_user_addresses a
              WHERE a.user_id = :userId
              AND a.id = :shippingAddressId
            ) as us
              ON us.userID = u.id

            WHERE d.active=1
            AND (
                (bind_time_from IS NULL AND bind_time_to IS NULL)
            OR
                (IFNULL(bind_time_from,0) <= IFNULL(bind_time_to,86400) AND TIME_TO_SEC(DATE_FORMAT(NOW(),'%H:%i:00')) BETWEEN IFNULL(bind_time_from,0) AND IFNULL(bind_time_to,86400))
            OR
                (bind_time_from > bind_time_to AND TIME_TO_SEC(DATE_FORMAT(NOW(),'%H:%i:00')) NOT BETWEEN bind_time_to AND bind_time_from)
            )
            AND (
                (bind_weekday_from IS NULL AND bind_weekday_to IS NULL)
            OR
                (IFNULL(bind_weekday_from,1) <= IFNULL(bind_weekday_to,7) AND WEEKDAY(NOW())+1 BETWEEN IFNULL(bind_weekday_from,1) AND IFNULL(bind_weekday_to,7))
            OR
                (bind_weekday_from > bind_weekday_to AND WEEKDAY(NOW())+1 NOT BETWEEN bind_weekday_to AND bind_weekday_from)
            )
            AND (bind_weight_from IS NULL OR bind_weight_from <= b.weight)
            AND (bind_weight_to IS NULL OR bind_weight_to >= b.weight)
            AND (bind_price_from IS NULL OR bind_price_from <= b.amount)
            AND (bind_price_to IS NULL OR bind_price_to >= b.amount)
            AND (bind_instock=0 OR bind_instock IS NULL OR (bind_instock=1 AND b.instock) OR (bind_instock=2 AND b.stockmin))
            AND (bind_laststock=0 OR (bind_laststock=1 AND b.laststock))
            AND (bind_shippingfree!=1 OR NOT b.shippingfree)
            AND dh.holidayID IS NULL
            AND (d.multishopID IS NULL OR d.multishopID=b.multishopID)
            AND (d.customergroupID IS NULL OR d.customergroupID=b.customergroupID)
            AND dk.dispatchID IS NULL
            AND d.type IN (0,2)
            $sql_where
            GROUP BY d.id
            ORDER BY d.position, d.name
";

eintragen nun gehts.

Lange Rede kurzer Sinn meine Bitte an ShopWare. Bitte lasst dort mehr Typen als nur 0 zu. Damit ich auch noch in Zukunft ein Update machen kann.