v2.2.x Bug im Quellcode: "Division by zero" im checkout success

Thema wurde von Joschka, 12. April 2015 erstellt.

  1. Joschka

    Joschka Erfahrener Benutzer

    Registriert seit:
    27. Februar 2012
    Beiträge:
    771
    Danke erhalten:
    114
    Danke vergeben:
    218
    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($title6);        // $title = 'St.:';
                
    $title substr($title0, -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($net4);
                
    $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
     
  2. Torben Wark

    Torben Wark Gambio GmbH

    Registriert seit:
    15. Juli 2014
    Beiträge:
    2.581
    Danke erhalten:
    1.178
    Danke vergeben:
    399
    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
     
  3. Joschka

    Joschka Erfahrener Benutzer

    Registriert seit:
    27. Februar 2012
    Beiträge:
    771
    Danke erhalten:
    114
    Danke vergeben:
    218
    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
     
  4. Torben Wark

    Torben Wark Gambio GmbH

    Registriert seit:
    15. Juli 2014
    Beiträge:
    2.581
    Danke erhalten:
    1.178
    Danke vergeben:
    399
    #4 Torben Wark, 16. April 2015
    Zuletzt bearbeitet: 16. April 2015
    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 :)