Individuelle Versandkosten lassen sich überhaupt nicht eingrenzen

Hallo, ich sitze seit gesten an der Einrichtung der Versandkosten. 

Ich bin mir auch recht sicher, dass es nur ein klener Fehler sein kann.

Aber ich komme einfach nicht drauf.

Also ich habe einen Aufschlagversand mti eigener Bedingung.

die Bedingung lautet einfach nur 

b.ordernumber = '217200'

 

Wenn ich der Dokumentation glaube sollte das natürlich gehen. Leider geht es aber nicht.

http://community.shopware.com/Individuelle-Versandkosten-Bedingungen-und-Berechnungen_detail_1933.html

Ob der Shop ein Problem hat habe ich auch geprüft. Mit der Bedingung 1=1 funktionirt alles wunderbar, nur soll es halt nciht immer einen Aufschlag geben.

Mir kommt es ja so vor, als ob b.ordernumber dort einfach nicht existiert. Wenn ich nämlich z.B b.ordernumber = b.ordernumber eingebe kommt ebenfalls ein Fehler.

Kann mir jemand sagen was ich falsch mache ?

 

Du suchst http://community.shopware.com/Individuelle-Versandkosten-Bedingungen-und-Berechnungen_detail_1933.html#Artikelnummern

Viele Grüße

Es geht natürlich nicht um eine Berechnung mit den Postleitzahlen. Der Link war wohl nicht ganz richtig. Mir geht es um eine Bedingung nicht um eine Berechung.

Entschuldigung, aber verstehe ich nicht. Ich habe das bereits gelesen, Hier geht es aber darum, die Erweiterte Abfrage unter Einstellungen->Storefont anzupassen. Diese Einschränkung wäre ja dann Global. Also könnte man so das Versandmodul für diverse Artikel deaktiviren. Ich möchte aber Aufschläge für Einzelne Artikel anlgen. Der Hintergrund ist, dass der Kunde unterschiedliche Kosten bei der Verpackung hat. Dafür möcht eich hier abfragen können.

Hallo,

wenn man dem Link folgt, sieht man, das es wohl  d.ordernumber heißt, weil die Artikelnummer in der s_articles_ d etails-Tabelle steht.

Hallo, natülich habe das als erstes versucht. Es hat nicht geklappt selbiges Spiel. In Folge bin ich auf s_order_basket -> b gegangen. Dort steht die ordernumber natürlich auch drin. Ergibt auch noch mehr Sinn für mich, weil da nur das drinn sein wird was der Kunde im Einkaufswagen hat.

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.