Modulshop - Eine große Auswahl an neuen und hilfreichen Modulen für die modified eCommerce Shopsoftware
Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: Möglicher Logikfehler in der xtcPrice.php Klasse

    leima

    • Neu im Forum
    • Beiträge: 5
    Bin heute auf Arbeit über einen vermeindlichen Bug in der xtcPrice.php Klasse gestolpert.
    Zu finden in /includes/classes/.

    Habe vorsichtshalber gecheckt ob es mehrere Shopversionen (2.0.4.2, 2.0.5.0, 2.0.5.1 und vermutlich noch mehr)  betrifft und festgestellt, dass es das tut.

    Situation:
    Der betreffende Shop hat mehrere Kundengruppen die unterschiedlich eingestellte Rabatte haben. Die Artikel haben neben ihrem eigentlichen Preis auch konfigurierbare Attribute (Optionen), die ggf. Zusatzkosten verursachen und entsprechend auf den Preis angerechnet werden müssen.

    Problem:
    Die in den Artikelattributen eingestellten Werte für die Kosten der Option werden nicht berechnet. Es wird der Standardnettopreis angesetzt, den Kunden ohne Rabatt zu zahlen haben.

    Ursache:
    In der Methode "xtcGetOptionPrice" gibt es an der folgenden Stelle einen Logikfehler in der Bedingungsabfrage.
    Code: PHP  [Auswählen]
          // calculate discount
          if ($this->cStatus['customers_status_discount_attributes'] == '1' && $this->cStatus['customers_status_discount'] != 0.00) {
              $discount = $this->cStatus['customers_status_discount'];
          if ($attribute_data['products_discount_allowed'] < $this->cStatus['customers_status_discount']) {
              $discount = $attribute_data['products_discount_allowed'];
          }
        }

    Erklärung:
    • In der Datenbank ist in der Tabelle "products" in der Spalte "products_discount_allowed" im betreffenden Shop (und vermutlich in vielen anderen Shops) ein Standardwert von '0.00' gespeichert.
    • Zur Laufzeit beträgt der Wert im "cStatus['customers_status_discount']" den in der Kundengruppe eingestellten Rabatt (z. B. '10.00' für 10 %).
    • Bei der zweiten Abfrage wird geprüft, ob der Standardwert '0.00' kleiner ist als der Kundenrabatt.
      Da '0.00' immer kleiner sein wird als jeder Rabatt wird hier der '$discount' auf '0.00' gesetzt und dadurch der Standardnettopreis angesetzt.
    Lösungsansatz:
    Einfügen einer vorgeschalteten Bedingung in der zweiten Abfrage.
    Code: PHP  [Auswählen]
         if (($this->cStatus['customers_status_discount_attributes'] !== '1') && ($attribute_data['products_discount_allowed'] < $this->cStatus['customers_status_discount'])) {
           $discount = $attribute_data['products_discount_allowed'];
         }
    Durch die bitwise Abfrage wird hier sofort Abgebrochen, wenn die erste Bedingung ein 'false' liefert. Dadurch wird der Kundenrabatt nicht auf '0.00' gesetzt.
    Oder besser:
    Code: PHP  [Auswählen]
          // calculate discount
          if ($this->cStatus['customers_status_discount_attributes'] == '1' && $this->cStatus['customers_status_discount'] != 0.00) {
              $discount = $this->cStatus['customers_status_discount'];
          } else {
              $discount = $attribute_data['products_discount_allowed'];
          }
    Hier kommt die zweite Anweisung gar nicht erst ins Spiel, wenn die erste Abfrage ein 'true' geliefert hat und ausgeführt wurde. Nur bei einem 'false' wird die zweite Anweisung ausgeführt.

    Dieses Problem betrifft scheinbar nur die Preise der Attribute. Die eigentlichen Artikelpreise werden korrekt berechnet.

    Bitte mal drüberschauen und Rückmeldung geben.

    Linkback: https://www.modified-shop.org/forum/index.php?topic=41178.0
    Modulshop - Eine große Auswahl an neuen und hilfreichen Modulen für die modified eCommerce Shopsoftware

    leima

    • Neu im Forum
    • Beiträge: 5
    Re: Möglicher Logikfehler in der xtcPrice.php Klasse
    Antwort #1 am: 01. Juli 2020, 11:12:20
    Anmerkung:
    Dieses Problem betrifft auch Shops der Version 1.

    Es gibt noch eine weitere Problematik an dieser Stelle.
    Bei Staffelpreisen werden die Kosten der Produktoption bei meinem oben beschriebenen Lösungsansatz noch mit dem eingestellten Rabatt berechnet. Wenn diese Kosten jedoch erst ab einer gewissen Menge nach dem Rabatt berechnet werden sollen, muss man noch eine andere Änderung vornehmen.
    8 Antworten
    2924 Aufrufe
    11. Januar 2015, 15:56:19 von WeXsler
    2 Antworten
    1104 Aufrufe
    28. Februar 2017, 20:08:35 von Selo
    0 Antworten
    863 Aufrufe
    09. April 2014, 19:27:34 von Rizzm
    7 Antworten
    3746 Aufrufe
    04. November 2011, 20:46:32 von thomas-r
    anything