Unterschiedliche Versandkosten nach Warengruppen im Warenkorb - Höchster Preis

Hallo zusammen,

im geplanten Shop werden 3 unterschiedliche Warengruppen verkauft, die alle Ihren eigenen Versand haben.

  • Felgen (ab 11€ pro Artikel)
  • Motorräder (255€ Spedition pro Artikel)
  • MTB Zubehör (4,95€ pauschal)

 

Ich habe hier jetzt 3 Versandarten (Typ Standard) angelegt und über Kategorieausschluß eingestellt was am Ende im Warenkorb angezeigt wird. Das klappt soweit ganz gut. Wenn jetzt aber ein MTB Artikel und eine Felge im Warenkorb ist, wird Versand 4,95 angezeigt.

Wo sage ich denn das immer die höchsten Versandkosten verwendet werden sollen? Habe ich in den Grundeinstellungen etwas übersehen oder ist der Lösungsansatz falsch?

 

VG
Frank

Über den Kategorieausschluss ist dies nicht umzusetzen, allerdings kannst du es mit den individuellen Versandkosten lösen.
Hier wäre es sinnvoll für die verschiedenen Artikeltypen Freitextfelder zu erstellen vom Typ Checkbox also eines für Zubehör, Motorrad und Felden.
Damit mit der Aufwand nicht so hoch ist kannst du die Mehrfachänderung nutzen um die Freitextfelder für die Artikel mit Werten zu befüllen.
Für die verschiedenen Kategorien setzt du beim passenden Boolean-Feld den Wert 1 bzw. true.
Im Anschluss kannst du dann die von dir gewünschte Bedingung festlegen. 

Am besten schaust du dir einmal folgende Doku-Artikel an:

http://community.shopware.com/Mehrfachänderung-Multi-Edit_detail_1401.html

1 „Gefällt mir“

OK, den ersten Schritt habe ich hinbekommen. Danke

Drei Freitextfelder im Artikel angelegt und alle Werte via Mehrfachbearbeitung zugewiesen

  • Attr20 Motorräder
  • Attr19 Felgen
  • Attr18 Normale Artikel

 

Aber bei der Anleitung für die individuellen Versandkosten steige ich nicht ganz durch. Dort werden SQL Abfragen angegeben. Aber wo gebe ich das SQL bei den Versandkosten an? Bei eigene Bedingung erzeugt das einen Fehler im Frontend.

 

Edit:

Also ich bin der Sache ein wenig näher gekommen. Ich weiss jetzt wo das SQL rein muss und wo ich die Abfrage mache. So kann ich schon mal die Versandart für die jeweiligen Freitextfelder zuweisen/abfragen.

MAX(a.topseller) as has_topseller, MAX(at.attr3) as has_comment, MAX(b.esdarticle) as has_esd, Min(attr18='1') as artikel_sonstiges, Min(attr19='1') as artikel_felge, Min(attr20='1') as artikel_motorrad

Sprich in den Versandkosten für Felgen frage ich ab: Eigene Bedingung: artikel_felge

 

Das mit dem Mischkorb schaffe ich aber trotzdem noch nicht.Laut der Doku soll es dann ja möglich sein das beide Versandkosten aufgeführt werden. Muss ich dann hierfür extra Aufschlagversandkosten anlegen die mit einer Bedingung greifen?

VG

Ich muss hier leider noch mal nachfragen…ich komme nicht weiter. Im Beispiel für Mischkörbe wird nur mit einem Attribut gearbeitet. Wie kann ich denn einen Mischkorb mit 3 Attributen abfragen?

 

Standard

MAX(a.topseller) as has_topseller, MAX(at.attr3) as has_comment, MAX(b.esdarticle) as has_esd, Min(attr1='1') as attribut, Max(attr1='1') as mischkorb

 Angepasst

MAX(a.topseller) as has_topseller, MAX(at.attr3) as has_comment, MAX(b.esdarticle) as has_esd, Min(attr18='1') as artikel_sonstiges, Min(attr19='1') as artikel_felge, Min(attr20='1') as artikel_motorrad, MAX(attr20='1') as mischkorb

 

Und sehe ich das richtig. sobald diese Abfrage passt, muss ich Aufschlagversandarten/Kombinationen anlegen die auf die Werte abfragen?

 

VG
Frank

So…2,5 Stunden Try & Error sind vergangen…ohne Ergebnis. Ich kotze… :smiley: Gasp Thumb-down

Ich glaube inzwischen das dieser Part hier für mich relevant ist, denn ich brauche ja die Anzahl der Artikel mit einem bestimmten Attribut und muss dann * Versandkosten rechnen http://community.shopware.com/Individuelle-Versandkosten-Bedingungen-und-Berechnungen\_detail\_1933.html?\_ga=2.212645908.1854534694.1514809267-578159177.1512496585#Vergleichen\_der\_Artikelanzahl\_im\_Warenkorb\_mit\_Artikeln\_mit\_bestimmten\_Attributen

Allerdings verstehe ich die Anleitung einfach nicht…ich bin eigentlich nicht doof was sowas betrifft aber das macht irgendwie keinen Sinn.

 

Ich habe diese Query in den Grundeinstellungen laut Anleitung (Abfrage auf Freitextfeld)

COUNT(a.id) as item_count, MAX(at.attr18='1') as lager1, MAX(at.attr18='2') as lager2

Kann mir mal jemand bitte diese Query erklären???

 

Und unterhalb steht:

Eine mögliche Berechnung der Versandkosten könnte dann lauten:

// Alle Artikel besitzen lager1 IF(item_count=lager1,1,0)   // Alle Artikel besitzen lager1 oder lager2 IF(item_count=(lager1+lager2),1,0)

Wo bitte trage ich dieses IF ein? Doch eigentlich bei „Eigene Bedingung“…nur wie bekomme ich dann den Wert der Anzahl Artikel lagerX in die Berechnung darunter? Für was stehen die Werte 1 und 0 nach lagerX? Und wieso wird lager2 auf den Wert 2 geprüft?

@NLukowski‍  kannst du mir noch mal weiterhelfen?

 

Vg

Frank

Also…heute früh hatte ich eine Eingebung :D. Vielleicht helfen meine Selbstgespräche jemand mit dem selben Problem.

Artikel haben drei Attribute (siehe oben)

Versandarten

  • Versandart Standardversand Basis (Kosten 0€)
  • Versandart Aufschlag für normale Artikel (4,95 € pauschal)
  • Versandart Aufschlag für Felgen mit eigener Berechnung SUM(IF(at.attr19=‘1’,  b.quantity*11,0)
  • Versandart Aufschlag für Motorräder mit eigener Berechnung SUM(IF(at.attr20=‘1’,  b.quantity*270,0)

Bei den letzten beiden Versandartarten werden die Versandkosten mal Artikelanzahl genommen.

Wird jetzt in Mischkörben die Anzahl eines Artikels geändert, werden die Versandkosten korrekt nach der Warengruppe dazugerechnet. Bisher wurde immer die Gesamtzahl der Artikel im Warenkorb herangezogen und hat für falsche Besträge gesorgt, was natürlich Quatsch ist.

VG Frank

Kommen wir erst einmal zu den SQL-Abfragen:

COUNT(a.id) as item_count     ← Hier zählst du die Anzahl der Artikel und setzt Sie in die Variable „item_count“.

MAX(at.attr18=‚1‘) as lager1    ← Hier speicherst du den maximalen Wert in der Variable „lager1“, welcher in Attribut18 steht, wenn der Wert „1“ beträgt.

MAX(at.attr18=‚2‘) as lager2    ← Hier speicherst du den maximalen Wert in der Variable „lager2“, welcher in Attribut18 steht, wenn der Wert „2“ beträgt.

Diese Abfrage an sich würde für den im ersten Beitrag beschriebenen Fall allerdings nicht viel Sinn machen,
da du ja drei Kategorien hast und du aus diesem Grund schauen möchtest aus welcher Kategorie ein Artikel enthalten ist. 
Also nutzen wir als Freitextfeld für die Artikel am besten ein Boolean, weil es ja nur 2 Fälle gibt, entweder er ist in der Kategorie also „true/1“ oder nicht „false/0“.

Boolean-Freitextfelder
Bitte beachten Sie, dass sich die Abfrage verändern kann, je nachdem welche Shopware-Version eingesetzt wird. In den aktuellen 5.2 Versionen entspricht true =„1“ und false =„0“, in älteren Versionen kann es nötig sein direkt nach =„true“ oder =„false“ abzufragen.

Also müsste deine Abfrage circa so aussehen:

MAX(at.attr1="1") as felgen, MAX(at.attr2="1") as motorraeder, MAX(at.attr3="1") as zubehoer

Nachdem du mit diesen SQL-Abfragen die benötigten Variablen ermittelt hast kannst du die nun für deine Bedigung nutzen in Form eines IF. 

IF(Bedingung,Ja,Nein) -> Eine einfache Wenn-Dann-Sonst-Verzweigung, z.B. IF(d.weight>5,1,0) Wenn das Gewicht größer als 5 ist wird eine 1 zurückgegeben ansonsten eine 0.

Jetzt liegt es natürlich an dir, wie deine Bedigung aussehen soll. Ohne zu wissen, was bei welchem Fall eintreten soll, kann man hier nicht wirklich sagen wie die Bedingung bei dir aussehen muss. 

1 „Gefällt mir“