Hallöchen, ich habe eine neue Prüfung bei Tustedshops beantragt und die war heute. Jetzt habe ich ein großes Problem. Lieferung in die Schweiz bis zu einem Betrag von 1000€ möglich. Im Riskmanagement bei allen Zahlarten hinterlegt. Funktioniert auch soweit, aber: Ist der Kunde bereits eingeloggt und hat seine Zahlart z.B. Vorkasse gewählt, kann er den Warenwert einfach überschreiten. Möchte er eine andere Zahlart wählen geht das natürlich nicht, weil diese nicht zur Verfügung stehen. Ob Zone, Land, etc. egal = die voreingestellte Zahlart greift hier nicht und es kommt auch kein Hinweis!! Das ist doch ein Fehler in SW und kann doch so nicht richtig sein??? Ich tüfftle jetzt schon den ganzen Abend rum, wie man es hinbekommt, dass ab einem bestimmen Warenkorbwert nicht mehr bestellt werden kann. Auch Einschränkung in der Versandart mit eigener Bedingung ist nicht möglich. Ich habe das ganze Forum und Wiki durchforstet und keinen Plan was ich hier machen könnte. Hat jemand von Euch eine Idee?
Hallo, das ist genau das Problem, dass in SW immer eine Zahlungsart da sein muss. Eine Möglichkeit wäre, dass man das über die Versandarten regelt. Also den Warenkorbwert abfragen und mit der us.countryID ‘26’ verbindet. Wenn Warenkorbwert > 1000 && us.countryID == ‘26’, dann sperren. Frag mich mal, wie man den Warenkorbwert ausliest… ich weiß es leider nicht. Sollte das funktionieren, dann hast Du keine Versandart mehr und kannst auch keine auswählen. Die Bestellung kann nicht abgeschlossen werden… Hier ist es übrigens extrem doof in Shopware, dass man die Bestellung bis zum Ende durchziehen kann und erst mit dem Klick auf “Zahlungspflichtig bestellen” der Hinweis erscheint, dass keine Versandart zur Verfügung steht. Ich habe das zumindest vor Kurzem so hinbekommen, dass der Kunde gleich eine entsprechende Meldung bekommt und gar nicht erst weiter versucht zu bestellen. Mal sehen, was hier noch so an Hinweisen zusammenkommt. Tom
Hi Tom, ja danke, habe auch schon daran gedacht, dass das mit einer Abfrage im Template gehen muss, nur wo und wie. Ich habe von der Matherie keine Ahnung. Ich fummel ja schon viel rum, aber das kriege ich nicht hin. Es sollte aber auch schon irgendwie ein Hinweis im Warenkorb erscheinen, genauso wie beim Mindestbestellwert. Der Kunde ist ja verwirrt und sauer wenn er den Warenkorb füllt, bis zum Ende maschiert und dann doch nicht bestellen kann. Und noch nicht mal weiß warum, wenn kein Hinweis erscheint. Nicht jeder Kunde liest ja vorher die Bedingungen durch!! Am besten wäre es, wenn das über Kundengruppen gelöst werden könnte. Dort auswählen wie der Mindestbestellwert. Ich hoffe es kann mir wer helfen.
Ist das über Risk Management und Zahlungsart überhaupt möglich? Hier greift doch -immer- die standard fallback Zahlungsart (=Vorkasse)?! Ich befürchte, dass hier tatsächlich ein Plugin her muss. Viele Grüße
Folgendes setzen wir für bestimmte Mindestbestellwerte für Shops ein. Kann man relativ leicht ummünzen auf Maximalbestellwert und Land. Aus der Wühlkiste: [code]<?php /**
- Aquatuning Software Development - Order Minimum Amount Plugin - Bootstrap
- 1.0.0
-
- initial release
- @category Aquatuning
- @package Shopware\Plugins\AtsdOrderMinimumAmount
-
@copyright Copyright © 2014, Aquatuning GmbH
*/
class Shopware_Plugins_Frontend_AtsdOrderMinimumAmount_Bootstrap extends Shopware_Components_Plugin_Bootstrap
{
// info
private $plugin_info = array(
'version' => "1.0.0", 'label' =\> "ATSD - Mindestbestellwert für Shops", 'description' =\> "Mindestbestellwert für Shops", 'supplier' =\> "Aquatuning GmbH", 'autor' =\> "Aquatuning GmbH", 'support' =\> "Aquatuning GmbH", 'copyright' =\> "Aquatuning GmbH", 'link' =\> 'http://www.aquatuning.de', 'source' =\> null, 'changes' =\> null, 'license' =\> null, 'revision' =\> null ); // getCapabilities private $plugin\_capabilities = array( 'install' =\> true, 'update' =\> true, 'enable' =\> true ); /\*\* \* Returns the current version of the plugin. \* \* @return string \*/ public function getVersion() { return $this-\>plugin\_info['version']; } /\*\* \* Get (nice) name for the plugin manager list \* \* @return string \*/ public function getLabel() { return $this-\>plugin\_info['label']; } /\*\* \* Get full information for the plugin manager list \* @return array \*/ public function getInfo() { return $this-\>plugin\_info; } /\*\* \* Get capabilities for the plugin manager \* \* @return array \*/ public function getCapabilities() { return $this-\>plugin\_capabilities; } /\*\* \* Creates the configuration fields and subscribes the post dispatch event of the frontend listing container. \* \* @return bool \*/ public function install() { // subscribe to events $this-\>installSubscribeEvents(); // create the form $this-\>installCreateConfigForm(); // done return array( 'success' =\> true, 'invalidateCache' =\> array( "frontend", "backend", "config" ) ); } /\*\* \* Creates the configuration form for the plugin \* \* @return void \*/ protected function installCreateConfigForm() { // get the form $form = $this-\>Form(); // create the element $form-\>setElement( "number", "minAmount", array( 'label' =\> "Mindestbestellwert", 'description' =\> "Brutto Mindestbestellwert für Händler in der aktuellen Shop Währung.", 'minValue' =\> 0, 'maxValue' =\> 9999, 'required' =\> false, 'value' =\> 0, 'scope' =\> Shopware\Models\Config\Element::SCOPE\_SHOP )); } /\*\* \* Registers all necessary events and hooks. \* \* @return void \*/ private function installSubscribeEvents() { // $this-\>subscribeEvent( "Enlight\_Controller\_Action\_PreDispatch\_Frontend\_Checkout", "onPreDispatchCheckout" ); // $this-\>subscribeEvent( "Enlight\_Controller\_Action\_PostDispatch\_Frontend\_Checkout", "onPostDispatchCheckout" ); } /\*\* \* ... \* \* @param Enlight\_Event\_EventArgs $arguments \*/ public function onPreDispatchCheckout( Enlight\_Event\_EventArgs $arguments ) { // get shopware arguments $subject = $arguments-\>getSubject(); $request = $subject-\>Request(); $response = $subject-\>Response(); $action = $request-\>getActionName(); $view = $subject-\>View(); // valid request? if ( !$request-\>isDispatched() || $response-\>isException() || !$view-\>hasTemplate() || $request-\>getModuleName() != "frontend" ) // abort return; // valid action? if ( !in\_array( $action, array( "confirm", "finish", "cart" ) ) ) // abort return; /\* // logged in? if ( Shopware()-\>Session()-\>sUserId === null ) // abort return; \*/ // get configuration $namespace = Shopware()-\>Snippets()-\>getNamespace( "frontend/checkout/AtsdOrderMinimumAmount" ); $config = $this-\>Config(); // get minimum order amount $minAmount = (float) $config-\>get( "minAmount" ); // do we have a minimum set? if ( $minAmount == 0 ) // nope return; // get basket $basket = Shopware()-\>Modules()-\>Basket()-\>sGetBasket(); // get netto amount $cartAmount = (float) $basket['AmountNumeric']; // get the current currency $currency = Shopware()-\>Shop()-\>getCurrency(); // is the amount below the minimum? if ( $cartAmount \>= $minAmount ) // nope return; // get snippet $snippet = $namespace-\>get( "min\_amount\_error", "Sie haben den Mindestbestellwert über #amount#,- #currency# noch nicht erreicht.
Bitte bestellen Sie noch weitere #amount_left# #currency# damit wir Ihre Bestellung entgegennehmen können.", true ); // format snippet $str = str_replace( array( “#amount#”, “#currency#”, “#amount_left#” ), array( $minAmount, $currency->getCurrency(), number_format( $minAmount - $cartAmount, 2, “.”, “” ) ), $snippet ); // are we in the cart? if ( $action == “cart” ) // show the message $view->assign( “sBasketInfo”, $str ); // we are in confirm/finish else // forward to cart $subject->forward( “cart”, “checkout”, “frontend”, array( “sMinimumAmountInfo” => $str ) ); // done return; } /** * … * * @param Enlight_Event_EventArgs $arguments */ public function onPostDispatchCheckout(Enlight_Event_EventArgs $arguments) { // get shopware parameters $subject = $arguments->getSubject(); $request = $subject->Request(); $response = $subject->Response(); $action = $request->getActionName(); $view = $subject->View(); // valid request? if ( !$request->isDispatched() || $response->isException() || !$view->hasTemplate() || $request->getModuleName() != “frontend” ) // abort return; // valid action? if ( $action != “cart” ) // abort return; // did we save an error message? if ( $request->has( “sMinimumAmountInfo” ) ) // assign the error message $view->assign( “sBasketInfo”, $request->getParam( “sMinimumAmountInfo” ) ); // done return; } /** * Uninstall our plugin. Removes database tables and attributes. * * @return boolean */ public function uninstall() { // nothing to do return true; } /** * Update our plugin if necessary. * * @param string $version * * @return boolean */ public function update( $version ) { // check current installed version switch ( $version ) { } // all done return true; } } [/code] Viele Grüße
Hi Aquatuning, super nett von Dir, dankeschön!! Werde ich meinen Sohn nachher mal fragen, ob er mir das dafür ändern kann. Ich werde berichten.
Sodele, mein Sohn hat es direkt in mein Template geschrieben und es funktioniert. So schauts aus:
Noch einmal vielen lieben Dank für Deine Hilfe!!
Hallo, übrigens darf nur der Warenwert die 1000 EUR nicht überschreiten, wenn man eine el. Ausfuhrerklärung vermeiden will. Die Versandkosten zählen nicht dazu.
Hi, danke für die Info! Werde es ändern Man wird alt wie ne Kuh und lernt immer noch dazu!
Schön dass ich helfen konnte Gesendet von meinem iPhone mit Tapatalk
[quote=“artep”]Sodele, mein Sohn hat es direkt in mein Template geschrieben und es funktioniert. Noch einmal vielen lieben Dank für Deine Hilfe!![/quote] Hallo Petra, Wärst du so nett uns den Code zur Verfügung zu stellen, suche so etwas auch für meinen Shop.
[quote=“artep”]Sodele, mein Sohn hat es direkt in mein Template geschrieben und es funktioniert. So schauts aus:
Noch einmal vielen lieben Dank für Deine Hilfe!![/quote] Kannst Du uns (besser mir) zeigen, was Du geändert hattest?
Danke & LG, Tom
Okäy… Ich habe versch. Kundengruppen für die Schweiz, da ich an normale Kunden und Firmenkunden verkaufe. Deshalb hat mein Sohn das hier mit unserer Abfrage $x der Kundengruppen geregelt. Ihr müsstest das dann ändern mit der Länder ID für die Schweiz oder halt Eure Kundengruppen-ID. Fragt mich aber jetzt bitte nicht wie! Vielleich wisst Ihrs selber oder fragt nochmal im Forum. Danke nochmal an Aquatuning, freu mich richtig, dass das so super funktioniert und noch so schön aussieht. :thumbup:
/templates/deintemplate/frontend/checkout - cart_footer.tpl angelegt: [code]{extends file=“parent:frontend/checkout/cart_footer.tpl”} {block name=“frontend_checkout_cart_footer_tax_information” append} {if ($xUserGroup == 7 || $xUserGroup == 8) && $sBasket.Amount >= 1000}
{se name=‘CheckoutChOverMaximum’}{/se}
{/if} {/block}[/code] - confirm_footer.tpl angelegt: {extends file="parent:frontend/checkout/confirm\_footer.tpl"} {block name="frontend\_checkout\_cart\_footer\_tax\_information" append} {if ($xUserGroup == 7 || $xUserGroup == 8) && $sBasket.Amount \>= 1000}
{se name='CheckoutChOverMaximum'}{/se}
{/if} {/block}
- in der confirm.tpl ganz unten folgenden Block eingefügt: {block name="frontend\_checkout\_confirm\_submit"} {if $xUserGroup == 7 || $xUserGroup == 8} {if $sBasket.Amount \>= 1000} {else} {$smarty.block.parent} {/if} {else} {$smarty.block.parent} {/if} {/block}
In den Textbausteinen sind jetzt zwei neue Textbausteine: CheckoutChOverMaximum Beide dann mit Eurem Text füllen.