[Gelöst] Gutschein mit Mindestbestellwert < Gutscheinwert

Hallo! Ich habe folgendes Problem: Für eine Aktion erzeugen wir Gutscheine mit z.B. Wert 10 €. Nun verlangt der Shop, dass der Mindestumsatz mindestens dem Gutscheinwert entspricht: Im Online-Handbuch steht: [quote]Der Mindestumsatz, den der Kunde erreichen muss um den Gutschein einzulösen ist in das folgende Feld „Mindestumsatz“ einzutragen. Der Mindestumsatz sollte immer größer oder gleich dem Gutscheinwert sein. [/quote] http://wiki.shopware.de/Gutscheine-erstellen_detail_312.html Das entscheidende Wort ist „sollte“… Wir benötigen Gutscheine, bei dem z.B. auch NUR ein Artikel mit einem Verkaufspreis unterhalb des Gutscheinwertes gekauft werden kann, der Rest des Gutscheinwertes würde verfallen. Beim günstigsten Artikel zzgl. Versandkosten erreichen wir auch dann nicht die 10 €, wenn der Gutschein auch auf die Versandkosten angerechnet würde. Weiß da einer Rat? Liebe Grüße, Oliver Reichert

Hi, das geht System-bedingt so nicht. Eine Bestellung kann max. Auf 0 fallen. Der Wert des Gutscheins darf nicht höher sein als der Warenkorbwert, daher kommt auch die Prüfung im Backend. Du kannst natürlich testweise den Wert in der Datenbank Änderung und dann mit deiner Konstellation mal eine Testbestellung durchführen. Dann kannst du direkt sehen, ob das theoretisch durchläuft oder der Shop direkt mit einem Fehler abbricht. Vorgesehen ist das nicht und daher kenne ich die Auswirkungen so auch nicht.

1 „Gefällt mir“

Danke für die prompte und leider für mich schlechte Antwort… :frowning: [EDIT: Erste Fassung war fiskalischer Blödsinn…] Wäre es nicht eine einfache Routine, wenn der Endbetrag unter Null fällt, der Betrag des Gutscheins dann angepasst wird?<?php if($bestellsumme < $gutscheinbetrag){
$gutscheinbetrag = $bestellsumme;
}
?>LG, Oliver Reichert

So, habe jetzt folgenden Patch erfolgreich eingepflegt: [list=1] [*] im Backend habe ich die Gültigkeitsprüfung Mindestbestellwert >= Gutscheinwert entfernt[/*] [*] in der Gutscheinklasse einen Spezial-Gutschein definiert, der an einem String in der Beschreibung erkannt wird und der einen festen Wert hat. Er wird dann entsprechend im Wert angepasst.[/*][/list] Das ganze ist nur ein Hotfix, eigentlich müsste man das am besten als Plugin einbauen, wenn das geht… Aber ich hatte nur ein paar Stunden Zeit, mich in den Quelltext von Shopware einzulesen. Dank der pflegeleichten und durchdachten Programmierung (Hut ab!) ging das leicht. diff -rupN /var/www/vhosts/livesite/shopware/engine/backend/modules/vouchers/index.php /var/www/vhosts/testsite/shop/engine/backend/modules/vouchers/index.php --- /var/www/vhosts/livesite/shopware/engine/backend/modules/vouchers/index.php 2012-04-02 15:26:43.504055664 +0200 +++ /var/www/vhosts/testsite/shop/engine/backend/modules/vouchers/index.php 2012-06-22 09:39:04.763723984 +0200 @@ -628,8 +628,9 @@ $sCore-\>sInitTranslations(1,"config\_disp fieldLabel: 'Mindestumsatz', name: 'minimumcharge', id: 'dispatch\_minimumcharge', - xtype: 'numberfield', - validator: function(){ + xtype: 'numberfield'//, + /\* + validator: function(){ var percentalVal = Ext.get('percental').getValue(); //absolut @@ -643,6 +644,7 @@ $sCore-\>sInitTranslations(1,"config\_disp } return true; } + \*/ }, new Ext.form.ComboBox({ diff -rupN /var/www/vhosts/livesite/shopware/engine/backend/modules/vouchers/vouchers.php /var/www/vhosts/testsite/shop/engine/backend/modules/vouchers/vouchers.php --- /var/www/vhosts/livesite/shopware/engine/backend/modules/vouchers/vouchers.php 2012-04-02 15:26:43.508055056 +0200 +++ /var/www/vhosts/testsite/shop/engine/backend/modules/vouchers/vouchers.php 2012-06-21 13:43:03.838282480 +0200 @@ -194,7 +194,7 @@ function do\_save () if (!$\_POST["vouchercode"] && !$\_POST["modus"]) $fehler[] = "Gutschein-Code"; if (!$\_POST["numberofunits"]) $fehler[] = "Anzahl Gutscheine"; if (!$\_POST["value"]) $fehler[] = "Gutschein-Wert"; - if (($\_POST["minimumcharge"]\<=$\_POST["value"]) && empty($\_POST["kind"])) $fehler[] = "Mindestbestellwert muss größer als Gutscheinwert sein"; + //if (($\_POST["minimumcharge"]\<=$\_POST["value"]) && empty($\_POST["kind"])) $fehler[] = "Mindestbestellwert muss größer als Gutscheinwert sein"; if (!$\_POST["ordercode"]) $fehler[] = "Bestellnummer"; if (!$\_POST["numorder"]) $\_POST["numorder"] = "1"; diff -rupN /var/www/vhosts/livesite/shopware/engine/core/class/sBasket.php /var/www/vhosts/testsite/shop/engine/core/class/sBasket.php --- /var/www/vhosts/livesite/shopware/engine/core/class/sBasket.php 2012-04-02 15:26:44.095965680 +0200 +++ /var/www/vhosts/testsite/shop/engine/core/class/sBasket.php 2012-06-22 09:35:43.975248472 +0200 @@ -519,12 +519,31 @@ class sBasket }else { $factor = 1; } - - if (($amount["totalAmount"]/$factor) \< $ticketResult["minimumcharge"]){ - - $sErrorMessages[] = str\_replace("{sMinimumCharge}",$ticketResult["minimumcharge"],$this-\>sSYSTEM-\>sCONFIG['sErrors']['sVoucherMinimumCharge']); + + if(strstr(strtolower($ticketResult["description"]),'FESTE\_BESCHREIBUNG') === FALSE){//Kann man bestimmt noch besser machen + if (($amount["totalAmount"]/$factor) \< $ticketResult["minimumcharge"]){ + $sErrorMessages[] = str\_replace("{sMinimumCharge}",$ticketResult["minimumcharge"],$this-\>sSYSTEM-\>sCONFIG['sErrors']['sVoucherMinimumCharge']); + return array("sErrorFlag"=\>$sErrorFlag,"sErrorMessages"=\>$sErrorMessages); + } + }else{ + //Spezial-Gutschein + $gGutscheinwert = 10.0;//Kann man bestimmt noch besser machen + $gWarenkorb = $amount["totalAmount"]/$factor; + + //Warenkorb ist leer, Gutschein nicht hinzufügen + if($this-\>sCountArticles() == 0){ + $this-\>sDeleteBasket(); + $sErrorMessages[] = 'Der Warenkorb ist leer'; return array("sErrorFlag"=\>$sErrorFlag,"sErrorMessages"=\>$sErrorMessages); - } + } + + //Gutschein wird nicht aufgebraucht + if($gWarenkorb \< $gGutscheinwert){ + $gGutscheinwert = $gWarenkorb; + } + + $ticketResult['value'] = $gGutscheinwert; + } $timeInsert = date("Y-m-d H:i:s");