Diese Beschreibung richtet sich an das Problem, dass man einen Mindesbestellwert in Kombination mit einer Warenkorbregel hat.
Der Post beschreibt wie man statt Mindestbestellmenge nach(!) Abzug Rabatt Magento so anpasst, dass die Mindestbestellmenge vor(!) Abzug von Rabatten gereinigt.
Folgendende Aufgabenstellung hatten wir:
der Mindesbstellwert sind 10 Produkte zu je 10€ => 100€
Für diese soll es über eine Warenkorb Regel 20€ Rabatt geben
Ziel ist: Statt 100€ zahlt der Kunde nur 80€ für 10 Produkte.
Der Mindestbestellwert soll somit 10 Produkte sein => 100€ (vor Abzug) bzw. 80€ (nach Abzug)
Problem dabei:
Problem ist nun, wenn man den Mindesbestellwert in Magento auf 80€ setzt, können auch Kunden einkaufen, die nur 8 Produkte im Warenkorb haben.
Ursache ist:
Wenn man den Mindestbestellwert höher setzt funktioniert die 80€ statt 100€ zahlen Regeln nicht mehr. Die Ursache ist, dass Magento die Mindestbestellmenge nach(!) Abzug des Rabatts ermittelt.
Lösung:
Die Lösung ist eine Anpassung der Mindestbestellmenge. Dann wird die Mindestbestellmenge vor Abzug des Rabatts ermittelt wird.
Dies geschieht in der Methode „public function validateMinimumAmount()“ in Adress.php
app\code\core\Mage\Sales\Model\Quote\Address.php
ca. Zeile 1060
public function validateMinimumAmount()
{
$storeId = $this->getQuote()->getStoreId();
if (!Mage::getStoreConfigFlag(’sales/minimum_order/active‘, $storeId)) {
return true;
}if ($this->getQuote()->getIsVirtual() && $this->getAddressType() == self::TYPE_SHIPPING) {
return true;
} elseif (!$this->getQuote()->getIsVirtual() && $this->getAddressType() != self::TYPE_SHIPPING) {
return true;
}$amount = Mage::getStoreConfig(’sales/minimum_order/amount‘, $storeId);
if ($this->getBaseSubtotalWithDiscount() < $amount) {
echo $this->getBaseSubtotal();
return false;
}
return true;
}
Die markierte Abfrage gilt es anzupassen:
Folgende anpassen
if ($this->getBaseSubtotalWithDiscount() < $amount) {
echo $this->getBaseSubtotal();
return false;
}
return true;
}
ändern in:
if ($this->getBaseSubtotal() < $amount) {
return false;
}
return true;
Wichtig ist, dass der „BaseSubtotal“ Wert der netto Wert ist. Man kann nun die Mindestbestellmenge als netto Wert ohne Abzug von Rabatten angegeben.
Mehr Infos zu Magento hier
Der Beitrag hat weitergeholfen? Ich würde mich sehr über einen kurzen Kommentar freuen.
Super Beitrag, danke.
Eine Frage noch: Wir bekommt man es hin, das Magento beim Mindestbestellwert den Bruttowert nimmt und nicht netto?
Viele Grüße
Joachim
Das weiß ich leider spontan nicht und müsste ich auch erst rumsuchen und testen. Dürfte aber nicht so schwer sein.
ich habe die selbe Frage wie Joachim. Haben Sie dazu eine Lösung?
Hallo,
leider nein. Dazu bedarf es wohl leider eine Suche die ich aus zeitlichen Gründen nicht gratis durchführen kann.
Grüße
Martin Steudter
Hallo Herr Steudter
Gibt es in Magento die Möglichkeit, einen Mindestbestellwert nur für bestimmte Produkte einer ganzen Kategorie anzuwenden? Wenn jemand ein Produkt der Kategorie A kauft und unter € 20.00 liegt, dann kann er nicht bestellen. Liegt die Warenkorbsumme über € 20.00, dann kann er ganz normal bestellen. In diese Summe von € 20.00 dürfen auch andere Produkte aus der Kategorie B etc. miteinbezogen werden. Ich möchte nur nicht, dass einzelne Produkte dieser spezifischen Kategorie A bestellt werden können. Der Zuschlag müsste dann dynamisch sein und immer auf die € 20.00 gehen. So etwas habe ich aber bei Magento nicht gefunden.
Danke für Ihre Hilfe!
M. Fuchs
Hallo Herr Fuchs,
vielen Dank führ Ihr Kommentar.
Ich bin mir recht sicher es geht mit Magento. Hatten den Fall aber auch noch nicht in der Konstellation.
Lösung dürften die „Warenkorbregeln“ in Kombination mit Definition von versandkostenfrei als Aktion sein. Die sind super mächtig und muss „nur“ überlegen wie diese angelegt werden müssen.
Bitte haben Sie Verständnis, dass ich da leider nicht die vollständige Lösung direkt auf Anhieb habe. Das wird vermutlich 30-60Minuten brauchen das im Detail zu planen und auch zu testen, ob es wirklich klappt und Nichts übersehen wurde-
Grüße
Martin Steudter