N’Abend! Wir überlegen, für die Zahlungsart Vorkasse einen prozentualen Abschlag zu gewähren. Allerdings kommen da natürlich teils sehr unrunde Beträge raus. Ein Artikel mit einem Preis von 27,65 EUR führt z. B. zu einem Abschlag von 0,83 EUR. Gibt es die Möglichkeit, diesen Abschlag immer auf die nächsten 5 oder 10 Cent aufzurunden? Allerdings dürfte das nicht nur so ausgegeben werden, sondern müsste dann natürlich auch bei der Bestellung in die DB so geschrieben werden. Die Frage ist also wo / wie der Abschlag tatsächlich berechnet wird. Kann da jemand was zu sagen … ? AS
Schau mal in die sAdmin.php - ca. Zeile 3379. Da könntest du eingreifen - das wird dann auch direkt in die Datenbank übernommen etc. Konkret ist es die Zeile: $percent = round($amount / 100 * $payment[‘debit_percent’], 2); if(!empty($payment['debit\_percent'])&&(empty($dispatch)||$dispatch['surcharge\_calculation']!=2)) { $sql = 'SELECT SUM(quantity\*price) as amount FROM s\_order\_basket WHERE sessionID=? GROUP BY sessionID'; $amount = $this-\>sSYSTEM-\>sDB\_CONNECTION-\>GetOne($sql, array($this-\>sSYSTEM-\>sSESSION\_ID)); $percent = round($amount / 100 \* $payment['debit\_percent'], 2); if ($percent\>0) { $percent\_name = $this-\>sSYSTEM-\>sCONFIG["sPAYMENTSURCHARGEADD"]; } else { $percent\_name = $this-\>sSYSTEM-\>sCONFIG["sPAYMENTSURCHARGEDEV"]; } if (empty($this-\>sSYSTEM-\>sUSERGROUPDATA["tax"]) && !empty($this-\>sSYSTEM-\>sUSERGROUPDATA["id"])){ $percent\_net = $percent; } else { $percent\_net = round($percent/(100+$discount\_tax)\*100,2); } $sql = ' INSERT INTO s\_order\_basket (sessionID, articlename, articleID, ordernumber, quantity, price, netprice, datum, modus, currencyFactor) VALUES (?, ?, 0, ?, 1, ?, ?, NOW(), 4, ?) '; $this-\>sSYSTEM-\>sDB\_CONNECTION-\>Execute($sql,array( $this-\>sSYSTEM-\>sSESSION\_ID, $percent\_name, $percent\_ordernumber, $percent, $percent\_net, $currencyFactor )); }
Anschlussfrage: Gibt’s da auch was … für die MwSt.? Hintergrund: Ich habe gesehen, dass Ihr Euch schon sehr viel Mühe gegeben habt bei der Abbildung von Länderspezifika. Konkret für die Schweiz verwendet Ihr z. B. bereits als Tausender-Trennzeichen " ’ " statt " . " und als Dezimal-Trennzeichen " . " statt " , ". Das ist soweit super. Es gibt aber für die Schweiz noch ein Spezifikum, das nicht ganz so bekannt ist. Die kleinste Geld-Münze in der Schweiz sind 5 Rappen. Aus diesem Grunde lauten alle Preise in der Schweiz hinten auf 0 oder 5, da niemand einen Betrag von z. B. 2.99 CHF in Bar bezahlen kann. Es gibt dafür schlicht keine Münzen. Das wirkt sich auf den bargeldlosen Bereich insofern aus, als auch dort alles, aber auch wirklich alles hinten auf 0 oder 5 gerundet wird. Bei den Preisen kann ich ja selbst dafür sorgen, dass die entsprechend aussehen. Aber bei Zuschlägen, Abschlägen und MwSt. ist das eben nicht so einfach. Eben alles, was dann irgendwie prozentual aus den Preisen resultiert. Wenn Ihr da für die MwSt.-Berechnung einen HotFix für die Schweiz hättet, könntet Ihr bei Schweizern richtig punkten. Und ich habe schon gesehen, dass davon auch hier im Forum welche unterwegs sind … [tax_neu = round(tax_alt/0.05;0)*0.05] AS
Also, ich habe mal versucht zumindest das mit dem Vorkasse-Rabatt umzusetzen. Habe also in der sAdmin.php die Zeile … $percent = round($amount / 100 \* $payment['debit\_percent'], 2);
… durch … $percent = round(($amount / 100 \* $payment['debit\_percent']) / 0.05, 0) \* 0.05;
… ersetzt. Leider ohne Erfolg. Habe immer noch “Abschlag für Zahlungsart 10,19 EUR”. ??? AS
… so funktioniert es: $percent = round($amount / 100 \* $payment['debit\_percent'] / 0.05, 0) \* 0.05;
Er mochte, warum auch immer, die Klammer nicht. Jetzt bräuchte ich das nur noch für die MwSt. Und noch die Frage: updatesicher geht das so wohl nicht, oder? Denn die sAdmin.php wird wohl ziemlich oft bei Updates betroffen sein, oder? AS
N’Abend! Habe heute mal einen Gutschein-Code angelegt. Damit gibt es im Warenkorb 5% Rabatt. Allerdings habe ich jetzt wieder das Problem mit den „krummen“ Zahlen. Denn auch der Gutschein-Rabatt sollte, wie oben bereits der Abschlag bei Vorkasse-Zahlung, auf 5 Rappen gerundet werden. Ich finde aber den Code nicht, wo das berechnet wird und anzupassen wäre. Bin die sAdmin.php jetzt schon rauf und runter … Hat mir da jemand einen Ansatzpunkt, wie ich das finde? AS
Moin! Also, ich habe da was gefunden in \engine\core\class\sBasket.php ab Zeile 325. Dort ist die public function sAddVoucher. Ab Zeile 500 ist dann der relevante Code: if ($ticketResult["percental"]){ $value = $ticketResult["value"]; $vouchername .= " ".$value." %"; $ticketResult["value"] = ($amount["totalAmount"] / 100) \* floatval($value); }
Habe den mal ersetzt durch: if ($ticketResult["percental"]){ $value = $ticketResult["value"]; $vouchername .= " ".$value." %"; $ticketResult["value"] = ($amount["totalAmount"] / 100) \* floatval($value); $ticketResult["value"] = round($ticketResult["value"] / 0.05, 0) \* 0.05 - 0.05; }
Also, die letzte Zeile kam hinzu. Scheint zu funktionieren. Könnte sich das mal jemand noch anschaun, ob ich da auch keinen Mist baue? :wtf: Wäre super … AS
Moin, sieht okay aus
Moin! Danke. So ganz, ganz langsam arbeite ich mich rein … Wünsch Euch einen guten Start in die Woche! AS
Gibt es mittlerweilen eine updatesichere Lösung für die Schweiz-spezifische Rundungsproblematik (kleinste Geldeinheit 5 Rappen) für Preise, Rabatte und MWST?
Moin! Für uns ergibt sich diese Frage auch erneut beim anstehenden Wechsel auf die SW4. Es hat sich ja betreffend SubShops, Währungen, Steuersätze usw. einiges getan … aber an dem Punkt gibt es scheinbar noch keine wirkliche Lösung, oder? LG, AS
Eigentlich benötigen wir nur eine Rundung auf die Totalsumme (inkl. MwSt, inkl. Rabatte, etc.) und nicht für jede einzelnde Summe. Das führt sonst auf die berühmte Rundungsdifferenz.
[quote=„Stefan Hamann“]Schau mal in die sAdmin.php - ca. Zeile 3379. Da könntest du eingreifen - das wird dann auch direkt in die Datenbank übernommen etc. Konkret ist es die Zeile: $percent = round($amount / 100 * $payment[‚debit_percent‘], 2); [/quote] Moin! Hat sich hier etwas verändert? Irgendwie funktioniert das nicht mehr in der SW 4. Wird in der 4.0.8 der ABschlag für Zahulngsart woanders berechnet? LG, AS
Weil es schon ein Weilchen her ist … FALL 1: Um die Rappenrundung bei prozentualen Gutscheinen zu gewährleisten haben wir in der sBasket.php die Zeile … $ticketResult["value"] = ($amount["totalAmount"] / 100) \* floatval($value);
… ergänzt durch … $ticketResult["value"] = ($amount["totalAmount"] / 100) \* floatval($value); $ticketResult["value"] = round($ticketResult["value"] / 0.05, 0) \* 0.05;
… und das funktioniert in der 4.0.8 genau wie in der 3.5 ganz prima. FALL 2: Um die Rappenrundung bei prozentualen Abschlägen auf eine Zahlungsart zu gewährleisten haben wir in der sAdmin.php die Zeile … $percent = round($amount / 100 \* $payment['debit\_percent'], 2);
… ergänzt durch … $percent = round($amount / 100 \* $payment['debit\_percent'], 2); $percent = round($percent / 0.05, 0) \* 0.05;
… und das funktioniert in der 4.0.8 leider nicht. Es greift einfach nicht, hat in der 3.5 aber so funktioniert. Irgendwie scheint Shopware das hier komplett zu ignorieren … Hat jemand eine Idee? LG, AS