ChristopherMChristopherM MitgliedKommentare: 7 Danke erhalten: 1 Mitglied seit: Dezember 2016 bearbeitet 19. Mai

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 ?

 

Kommentare

  • ChristopherMChristopherM MitgliedKommentare: 7 Danke erhalten: 1 bearbeitet 19. Mai Mitglied seit: Dezember 2016

    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.

    image

  • drakondrakon MitgliedKommentare: 557 Danke erhalten: 152 Mitglied seit: Februar 2014

    Hallo,

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

  • ChristopherMChristopherM MitgliedKommentare: 7 Danke erhalten: 1 bearbeitet 19. Mai Mitglied seit: Dezember 2016

    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.

  • ChristopherMChristopherM MitgliedKommentare: 7 Danke erhalten: 1 bearbeitet 19. Mai Mitglied seit: Dezember 2016

    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.

     

Anmelden oder Registrieren, um zu kommentieren.