Hallo zusammen, hier schreibt der Sohn von Joschka, Simon. Ich habe den Testshop meines Vaters heute auf 2.2.0.0 upgedatet. Lief alles soweit gut, allerdings ist mir aufgefallen, dass auf der checkout success Seite und in den error logs die Warnung "Division by zero" ausgegeben wird. Hab mir den Quellcode näher angesehen und habe die Vermutung, dass hier ein Fehler vorliegt und habe die enstprechenden Stellen nachfolgend kommentiert: system/classes/orders/OrderTaxInformation.inc.php PHP: /* $taxInfoArray kommt aus der Datenbank und ist ein Array das beispielsweise so aussieht: $taxInfoArray = [ 'title' => "20% MwSt.:", 'value' => "1.3200" ] */ protected function _prepareTaxInfoDataset($taxInfoArray = false) { $taxItem = clone $this->taxItem; $taxItem->setInsertDate($this->_getDateOfPurchase()); $taxItem->setLastChangeDatetime(new DateTime()); if(is_array($taxInfoArray)) { $title = $taxInfoArray['title']; $title = substr($title, 6); // $title = 'St.:'; $title = substr($title, 0, -1); // $title = 'St.'; $taxItem->setTaxDescription($title); $taxItem->setTax($taxInfoArray['value']); // Hier wird meiner Meinung nach der falsche Parameter übergeben $additionalTaxInfo = $this->_getAdditionalTaxInfo($title); $taxItem->setTaxClass($additionalTaxInfo->getTaxClass()); $taxItem->setTaxRate($additionalTaxInfo->getTaxRate()); $taxItem->setTaxZone($additionalTaxInfo->getTaxZone()); $taxItem->setCurrency($additionalTaxInfo->getCurrency()); $taxItem->setOrderId($this->orderId); /* Get gross and net */ $taxRate = $taxItem->getTaxRate(); $tax = $taxItem->getTax(); $net = ($tax / $taxRate) * 100; $net = round($net, 4); $gross = $net + $tax; $taxItem->setNet($net); $taxItem->setGross($gross); } $this->taxItemWriter->insertDB($taxItem); } In der Funktion _getAdditionalTaxInfo wird nämlich der Wert '20% MwSt.' benötigt, um damit etwas in der Tabelle tax_rate zu finden. Aktuell wird aber nur 'St.' übergeben PHP: protected function _getTaxRate($p_taxDescription) { $where = 'tax_description = \'' . xtc_db_input($p_taxDescription) . '\''; $taxInfo = $this->_getOneDataset(self::$tableTaxRate, $where); $taxRate = $taxInfo['tax_rate']; return $taxRate; } Beispielsquery aktuell: Code: SELECT * FROM tax_rates WHERE tax_description = 'St.' Da findet er aber natürlich nichts. Bei folgendem Code aber schon: Code: SELECT * FROM tax_rates WHERE tax_description = '20% MwSt:' Meine Tabelle tax_rates sieht so aus: Code: tax_rates_id tax_zone_id tax_class_id tax_priority tax_rate tax_description 1 5 1 1 20.0000 20% MwSt. 2 5 2 1 10.0000 10% MwSt. 3 6 1 1 0.0000 EU-AUS-UST 0% 4 6 2 1 0.0000 EU-AUS-UST 0% 5 6 3 1 0.0000 EU-AUS-UST 0% 6 11 3 1 19.0000 19% MwSt. (Deutschland) 7 12 3 1 20.0000 20% MwSt. (Österreich) Vll irre ich mich auch, aber ich glaube, hier liegt ein Bug vor Schreibt gerne, wenn etwas unklar ist oder weitere Infos benötigt werden Schöne Grüße, Simon
Hallo Simon, vielen Dank für die ausführliche Fehlermeldung. Ich habe das mal als Bug erfasst, sodass wir uns in den nächsten Service Packs darum kümmern werden. Hier ist das dazugehörige Ticket: https://tracker.gambio-server.net/issues/41581 LG Torben
Hallo Torben, danke für's anlegen des Tickets. Ich wundere mich ja irgendwie nur, warum das noch keinem Shopbetreiber/Kunden bzw. Entwickler aufgefallen ist. Meiner Einschätzung nach müssten ALLE shops betroffen sein. Im Endeffekt soll hier ja etwas in der Datenbank gespeichert werden ($this->taxItemWriter->insertDB), aber das dürfte ja aktuell nicht möglich sein. Sind diese Infos, die hier abgespeichert werden, wichtig? LG, Simon
Hallo Simon, es ist zwar schon ein bisschen her, ich wollte aber trotzdem kurz Rückmeldung geben, warum dieser Fehler nicht immer auftritt: Das Problem besteht nur in wenigen Außnahmefällen, wenn die MwSt. ausgewiesen wird und diese den Wert 0 hat. Diese Kombination tritt nicht so häufig auf, weshalb der Fehler nicht sofort aufgefallen ist. Es sollte aber mit dem Paket 2.2.1.0 gefixt werden. LG Torben Edit: Wenn du einen schnellen Fix dafür brauchst, kannst du ein Ticket im Support eröffnen, die können dir da weiter helfen