Versandkosten nach PLZ, wie auf die Datenbank zugreifen?

Hallo,

ich bin noch recht neu in dem ganzen Thema und ich bin auch ganz gut durch gekommen bis jetzt. Nun möchte ich aber meine Versandkosten nach PLZ berechnen. Die Tabellen die dafür gebraucht werden habe ich glaube gefunden. Ich sende mal ein Screenshit mal mit. Kann mir jemand helfen wie ich das ganze richtig Stellen kann?

 

Gruß Oliver

Schau mal hier, da gibt es Beispiele: http://community.shopware.com/Individuelle-Versandkosten-Bedingungen-und-Berechnungen_detail_1933.html

@Moritz Naczenski schrieb:

Schau mal hier, da gibt es Beispiele: http://community.shopware.com/Individuelle-Versandkosten-Bedingungen-und-Berechnungen_detail_1933.html

 Vielen dank das hilft mir schon sehr, aber kann ich dich eine Kleinigkeit fragen? in der list ganz am Anfang sind die Kürzel von den Tabellen: 

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

Ich brauche jetzt aber die Tabelle “s_user_shippingaddress_attributes”. Ist der Kürzel dann “usa” oder “su”? In der Datei sAdmin.php kann ich dazu auch nichts finden auch nicht mit der Suchen Funktion.

Würde mich freuen wenn du mir bei dieser Kleinigkeit helfen könntest.

 

Gruß Oliver 

Die müsstest du per Subselect einbinden. Hier gibt es ein Beispiel: https://forum.shopware.com/discussion/comment/106180/#Comment_106180

@Moritz Naczenski schrieb:

Die müsstest du per Subselect einbinden. Hier gibt es ein Beispiel: https://forum.shopware.com/discussion/comment/106180/#Comment_106180

Ich habs jetzt soweit hinbekommen, vielen Dank. Da wäre noch eine Kleinigkeit. Ich hab mal die Dokus von Shopware und die ganzen Ordner durchsucht werde aber nicht fündig. Und zwar möchte ich das wenn die PLZ z.B. 24455 ist das er 50 EURO als versand nimmt oder das irgendwie Plus nimmt so das am Ende halt diese 50 EURO sind. Ich hab es so versucht das er den Artikel Preis + 50 nimmt und dann bei 60 EURO ca. sein SOLLTE, aber ich hab es dann wie folgt gemacht: (d.purchaseprice) + 50. Das ist wahrscheinlich falsch denn er stürzt immer ab wenn ich den Warenkoprb öffne. Denn in meiner Berechnung schreibt er ja quasi in die Datenbank-Tablle rein was ja auch Unsinn ist. Der Preis des Artikels soll ja bleiben wie er ist und nicht am Ende 60 EURO sein. Wie muss ich meine Berechnung formulieren das er das wirklich nur quasi Temporär irgendwo speichert bis die Bestellug abgewickelt ist. Oder habe ich mich hier in irgendwas verrannt und blicke nicht durch? 

Und noch einmal wäre ich dir für deine Hilfe überaus dankbar. 

Gruß Oliver

Die Versandkosten ändern keinen Artikel-Preis. Du kannst damit nur den Preis der Versandkosten ändern. Wenn du bei eigene Berechnung 50 Einträgst, dann berechnet er 50€. Wenn du d.purchaseprice + 50 machst, berechnet er den Artikeleinkaufspreis + 50€ als Versandkosten. Aber das macht nicht viel Sinn.

Zeig mal wie du das jetzt gelöst hast, kann dir aktuell nicht folgen.

 

Ich bin grad nicht auf der Arbeit und kann deswegen kein Screenshot schicken aber ich habe das jetzt so versucht zu lösen was leider keinen Erfolg bringt:

Terms: if(us.zipcode)=33556

Calculations: (d.purchaseprice) + 50

 

Das funktioniert aber leider nicht weil sich dann der Warenkorb garnicht mehr öffnen möchte. Er bleibt in einer Ladeschleife hängen. Habe ich vielleicht einen Denkfehler irgendwo? In den oberen Einstellungen habe ich auch Eigeneberechnung verwenden aktiviert bzw. ausgewählt.

Also in den Terms solltest du kein if brauchen einfach us.zipcode=33556, ansonsten musst du für ein if immer einen true oder false Wert zurückgeben, sonst bekommst du einen Synthaxfehler. Ein IFNULL solltest du auch nutzen, für den Fall, dass es keine Lieferadresse gibt sondern nur eine Rechnungsaddresse.

Der schönere Workflow wäre jedoch den term unter Einstellungen > Grundeinstellungen > Versandkosten-Modul in der erweiterten SQL-Abfrage z.B. so zu definieren, dann kannst du das später besser einordnen und ggfs. noch erweitern:

if(IFNULL(us.zipcode, ub.zipcode)=33556, 1, 0) as plz33556

In der Versandart bei Terms dann einfach plz33556 oder !plz33556 eintragen.

Viele Grüße aus Schöppingen
Janine

Hallo Janine,

wenn ich dich jetzt richtig verstanden habe muss ich das SQL in die erweiterte SQL-Abfrage tun und nicht in meine Terms? (if(IFNULL(us.zipcode, ub.zipcode)=33556, 1, 0) as plz33556). Aber es gibt doch schon einen SQL in der erweiterten SQL der dort stehen muss als Standart, zumindest habe ich das in der Shopware Doku gelesen. Der Standart SQL soll wohl dafür sorgen das die Benutzerdefinierte Rechnung verwendet wird und nicht der Standart.

Und wiseo ein IFNULL? Das bedeutet doch quasi WENN die PLZ nicht 33556 ist soll er was machen, möglicherweise liege ich auch falsch. Ich bin recht neu mit all dem zugange. 

Und wenn ich das erweitern möchte, muss das dann in etwa so aussehen?:

Wenn man PLZ von bis ermitteln möchte:

if(IFNULL(us.zipcode, ub.zipcode)=33556, 1, 0) as plz33556 between if(IFNULL(us.zipcode, ub.zipcode)=95555, 1, 0) as plz95555

Oder kann man einzelne PLZ auch so ermitteln?

if(IFNULL(us.zipcode, ub.zipcode)=33556, 1, 0) as plz33556 and if(IFNULL(us.zipcode, ub.zipcode)=33557, 1, 0) as plz33557 and etc…

 

Und in den Terms müsste das dann so aussehen oder? 

plz33556 and plz33557 and etc…

Aber wie funktioniert das dann mit der von bis Methode? Wie könnte ich die in die Terms eintragen?

 

Entschuldigt die vielen Fragen aber ich bin euch sehr dankbar für eure Hilfe!

Gruß

Oliver

Hallo,

die erweiterte SQL-Abfrage ist im Standard schon befüllt und kann in den Versandkosten genutzt werden(Mit der Rechnung hat diese nichts zu tun).

Diese kannst du jedoch problemlos jederzeit erweitern um deine eigenen Bedingungen indem du ein , und dann deinen weiteren SQL-Code ohne Klammern o.Ä. um die ganze Abfrage hinzufügst.

IFNULL brauchst du in diesem Fall dafür, um auf die PLZ der Rechnungsadresse zuzugreifen, wenn es mal keine Lieferadresse gibt. IFNULL bedeutet im groben nur „Wenn Wert1 = NULL dann nimm stattdessen Wert2 für den Vergleich“.

Um das ganze zu Erweitern solltest du erstmal die Grundsätzliche Logik der IF-Abfrage an dieser Stelle verstehen, ich versuche das mal zu vereinfachen:

Nehmen wir die Abfrage if(IFNULL(us.zipcode, ub.zipcode)=33556, 1, 0) as plz33556 wird hier das if eröffnet und an erster Stelle hinter der öffnenden Klammer folgt ein Vergleich eines Wertes in diesem Fall der Bereich „IFNULL(us.zipcode, ub.zipcode)=33556“. Dieser bedeutet als Frage formuliert „Ist die Lieferadressen PLZ, bzw. wenn diese nicht da ist die Rechnungsadressen PLZ = 33556“. Nun folgt nach dem ersten , in der Klammer der Wert den wir zurückgeben wollen, wenn dieser Vergleich von vorher zutrifft, also die PLZ=33556 ist. In diesem Fall geben wir eine 1 für true zurück. Nun folgt ein weiteres , und der Wert den wir zurückgeben, wenn der Vergleich nicht zutrifft in diesem fall eine 0 für false. Die schließende Klammer und das as plz33556 beenden die gesamte Abfrage und schließen den Vergleich. Will ich nun den Vergleich erweitern so muss ich dies immer innerhalb der Klammern des IF-Vergleichs erfolgen und nicht nach dem as plz33556, da ansonsten eine ganz neue Verlgeichende Abfrage angefangen wird.

Für mehrere PLZ kannst du die SQL-Logik IN anstelle des = zeichens nutzen also z.b. IFNULL(us.zipcode, ub.zipcode) IN (33556,33559,33552).

Weitere Beispiele für PLZ-Bereiche usw. findest du hier im Wiki: http://community.shopware.com/Individuelle-Versandkosten-Bedingungen-und-Berechnungen_detail_1933_647.html#Aufschlag_nach_Postleitzahlen

Willst du doch mal mehrere separate IF-Abfragen in deinen terms eintragen und du hast für diese in der erweiterten SQL-Abfrage unterschiedliche Aliase mit einem AS definiert so kannst du diese z.B. über plz3356 || plz47586 abfragen, wenn eine oder die andere Bedingung reicht bzw. plz3356 && plz47586 wenn beide zutreffen müssen.

Viele Grüße aus Schöppingen
Janine

Vielen vielen Dank, jetzt hab ich es verstanden. Das If(IFNOT) hatte mich verwirrt. 

Ich habe das ganze jetzt eingebunden in die erweiterte SQL-Abfrage:

Und so sehen die Versandkosten jetzt in der Maske aus:

Allerdings sind die calculations falsch, da bin ich mir ziehmlich. Zum einen weil es nicht funktioniert. Ich verstehe wohl wie es berechnet werden muss aber ich weiß nicht welche Tabelle ich benutzen soll um die Kosten zu berechnen oder wie ich das ganze Temporär irgendwie speichern könnte. Oder vielleicht die Tabelle Order details benutzen? Quasi müsste ich es ja so machen das er in der Bestellung also wenn der Kunde gerade im Warenkorb seine Kosten ansieht so berechnen und anzeigen lassen das dort die Gesamtkosten mit meiner Berechnung angezeigt werden. Also das er anstatt die Standart Versandkosten Beispielsweise 50 € nehmen soll. Aber es erscheint mir auch nicht richtig in calculations einfach 50 ein zutragen.

Das ist eigentlich meine letzte Frage. Hoffentlich. 

Gruß 

Oliver

Zu meinem Letzten Kommentar:

 

Hier stehen immernoch andere Versandkosten die ich garnicht angelegt habe. Ich vermute das das die Standart Versandkosten.