Jump to content
xt:Commerce Community Forum

Bug in der Lagerverwaltung 4.1.10 - Lösungen?


Shoptester2

Recommended Posts

Die Lagerverwaltung der xt:Commerce Shop-Version 4.1.10 enthält in meiner Installation folgenden Fehler:

Wird das letzte verfügbare Produkt in den Warenkorb gelegt (oder auch die Restmenge aller verfügbaren, z.B.: 4 verfügbar, 4 im Warenkorb), dann wird der Warenkorb gelöscht, sobald man beim Checkout folgendes macht:

A) eine Zahlungsart auswählt, die nach dem 'zahlungspflichtig bestellen' den Payframe benutzt (z.B. Kreditkartenzahlung o. Lastschrift meines Zahlungsproviders). Die Bezahlung schlägt damit fehl.

B) die Zahlungsart Paypal (xt_paypal Plugin) verwendet, diesen Vorgang aber auf der PayPal-Seite wieder abbricht.

Ergebnis:

Der Warenkorb ist dann in beiden Fällen leer, die Bestellung kann nicht abgeschlossen werden. Die Produkte sind im Shop nicht mehr verfügbar, da sich der Onliner-Lagerbestand bereits vor Abschluss der Zahlung auf 0 reduziert hat.

Das hat Auswirkungen:

1) Lagerdifferenz -> es entstehen Abweichungen zwischen dem Lagerbestand des Shops und dem tatsächlichen Lager

2) Umsatzverlust -> die Produkte werden beim Checkout-Vorgang gelöscht, unmittelbar vor Generierung einer Zahlung

3) Manipulationsmöglichkeit -> theoretisch lässt sich die online verfügbare Artikelmenge durch Dritte löschen

Dieser Fehler tritt bei Shop-Version 4.1.10 mit folgenden Einstellungen auf:

Einstellungen > Konfiguration > Lager > Lagerverwaltung: true

Einstellungen > Konfiguration > Lager > Lieferzeit anzeigen: true

Einstellungen > Konfiguration > Lager > Lagerampel anzeigen: true

Shop-Einstellungen > Lagerverwaltung > Nicht verfügbare anzeigen: true

Shop-Einstellungen > Lagerverwaltung > Einkauf nicht vorrätiger Ware: false

Um den Fehler einzugrenzen, habe ich 4 Einstellungsmöglichkeiten getestet:

(1) TRUE / FALSE

Shop-Einstellungen > Lagerverwaltung > Nicht verfügbare anzeigen: true

Shop-Einstellungen > Lagerverwaltung > Einkauf nicht vorrätiger Ware: false

=> hierbei entsteht der erwähnte Bug

(2) FALSE / FALSE

Shop-Einstellungen > Lagerverwaltung > Nicht verfügbare anzeigen: false

Shop-Einstellungen > Lagerverwaltung > Einkauf nicht vorrätiger Ware: false

=> dabei entsteht der gleiche Fehler (Unterschied: das Produkt wird danach im Shop nicht mehr angezeigt)

(3) TRUE / TRUE

Shop-Einstellungen > Lagerverwaltung > Nicht verfügbare anzeigen: true

Shop-Einstellungen > Lagerverwaltung > Einkauf nicht vorrätiger Ware: true

=> keine Lösung, da ein Artikel unabhängig vom Warenbestand in beliebiger Menge bestellt werden kann, auch wenn er nicht oder nur teilweise vorrätig ist. Der Lagerbestand verändert sich in diesem Fall auf einen negativen Wert. Bei Bestellung nicht vorrätiger Ware mit direkt durchgeführter Bezahlung (Lastschrift, giropay, Kreditkarte und PayPal) entstehen Aufwand und Kosten für die manuelle Zahlungserstattung. Ist die Lagerampel aktiviert, werden Waren danach als nicht lieferbar gekennzeichnet, können jedoch trotzdem in beliebiger Menge bestellt werden.

(4) FALSE / TRUE

Shop-Einstellungen > Lagerverwaltung > Nicht verfügbare anzeigen: false

Shop-Einstellungen > Lagerverwaltung > Einkauf nicht vorrätiger Ware: true

=> keine Lösung, da ein Artikel unabhängig vom Warenbestand in beliebiger Menge in den Warenkorb gelegt werden kann, auch wenn er nicht oder nur teilweise vorrätig ist.

Hier tritt zusätzlich folgendes Phänomen auf: Checkt man über einen externen Zahlungsframe aus oder bricht eine Paypal-Zahlung ab, dann:

- reduziert sich der Warenkorb auf den Wert 0 EUR

- die Anzahl der darin liegenden Produkte bleibt erhalten (z.B. 10 Stk.)

- die Produktabbildung im Warenkorb verschwindet

- der Artikel ist im Shop nicht mehr verfügbar

Fazit:

Methode (1) oder Methode (2) sind erforderlich, um im Online Shop den Lagerbestand abzubilden und nicht vorrätige Produkte nicht bestellbar zu machen. Durch die Fehlfunktionen ist die Lagerverwaltung in der Praxis in meinem Fall nicht einsetzbar, da sich sehr viele Artikel mit geringem Lagerbestand im Angebot befinden.

Der xt:Commerce Support äußert sich dazu leider etwas unklar ("…wir planen mit dem nächsten Update weitreichende Anpassungen, die uns erlauben auch dieses Problem zu beheben…"). Version 4.2.00 war zu diesem Zeitpunkt schon erhältlich.

Zu kritisieren ist, dass die Lager-Verwaltung von xt:Commerce als Shop Feature angeboten wird.

Ich benötige dringend eine Lösung, deshalb hier die ausführliche Dokumentation und Nachfrage, ob jemand von euch dieses Problem selbst oder durch externe Dienstleister beheben konnte.

Danke vorab!

Link to comment
Share on other sites

Hier kommt ein Ansatz, um den Bug der Lagerverwaltung durch zwei zusätzliche Abfragen zu umgehen.

(1) Einstellungen

Einstellungen > Konfiguration > Lager > Lagerverwaltung: true

Einstellungen > Konfiguration > Lager > Lagerampel anzeigen: true

Shop-Einstellungen > Lagerverwaltung > Nicht verfügbare anzeigen: true

Shop-Einstellungen > Lagerverwaltung > Einkauf nicht vorrätiger Ware: true

=> Damit ist jeder Artikel unbegrenzt bestellbar (= keine Fehlermeldung beim Checkout)

(2) Erforderliche Änderungen

Wenn ein Produkt auf der Artikelseite in den Warenkorb gelegt wird (Action 'add_product') oder die Anzahl auf der Warenkorbseite verändert wird (Action 'update_product'), dann müsste vor dem Ausführen lediglich die in den Warenkorb gelegte Anzahl (bzw. die dort aktualisierte Anzahl) mit dem Bestand aus der Lagerverwaltung abgeglichen und entsprechend reduziert werden.

Logik:

Wenn Kunden-Bestellmenge > Gesamtbestand, dann Kunden-Bestellmenge = Gesamtbestand setzen. Damit kann keine größere Menge im Warenkorb landen, als tatsächlich auf Lager ist.

Frage:

In welcher Datei (vermutlich: /xtCore/form_handler.php) muss diese Änderung integriert werden?

Welcher Wert müsste verändert werden?

Link to comment
Share on other sites

Lösung für 'add_product' (noch nicht ausgiebig gestestet)

Folgenden Code auf /xtCore/form_handler.php einfügen nach:

($plugin_code = $xtPlugin->PluginCode('form_handler.php:add_product_top')) ? eval($plugin_code) : false;


$sql = "SELECT products_quantity FROM xt_products WHERE products_id='".$data_array['product']."'";
$query = mysql_query($sql);
$row = mysql_fetch_object ($query);
$aaa = $row->products_quantity;
$aaa = intval($aaa); # ganze Zahl erzeugen (Dezimalstellen entfernen)
if($aaa < 0)
$aaa = 0; # negative Zahl vermeiden

if($data_array['qty'] > $aaa)
{
$data_array['qty'] = $aaa;
}
[/PHP]

Es wird zwar keine Meldung ausgegeben, dass die in den Korb gelegte Menge reduziert wird, aber dies ist erstmal zweitrangig.

Link to comment
Share on other sites

Und weiter gehts...

Lösung für 'update_product':

Folgenden Code auf /xtCore/form_handler.php einfügen nach:

if(!in_array($data_array['products_key'][$i], $data_array['cart_delete'])){


$sql = "SELECT products_quantity FROM xt_products WHERE products_id='".substr($data_array['products_key'][$i], 0, -3)."'";
$query = mysql_query($sql);
$row = mysql_fetch_object ($query);
$aaa = $row->products_quantity;
$aaa = intval($aaa); # ganze Zahl erzeugen (Dezimalstellen entfernen)
if($aaa < 0)
$aaa = 0; # negative Zahl vermeiden
if($data_array['qty'][$i] > $aaa)
{
$data_array['qty'][$i] = $aaa; # Menge reduzieren auf tatsächlich verfügbaren Lagerbestand
}
[/PHP]

Nach diesen beiden Änderungen in /xtCore/form_handler.php lassen sich jetzt nur noch Produkte in vorrätigen Mengen in den Warenkorb legen (bzw. dort updaten).

Da alle Einträge für Lager und Lagerverwaltung auf TRUE stehen, tritt der beschriebene Bug beim Clearing nicht mehr auf... Bingo!

Der Artikel kann nach dieser Bestellung zwar von anderen Kunden in den Warenkorb gelegt werden, wird dort aber automatisch gelöscht (dies geschieht aber ohne Ausgabe einer Meldung). Der Artikel ist damit nicht mehr bestellbar.

Für diese nicht mehr bestellbaren Artikel kann man den Button 'In den Warenkorb' ausblenden. Dazu folgenden Code auf /templates/xt_grid/xtCore/pages/product/product.html einfügen/ändern nach:

{hook key=product_info_tpl_before_cart}

[PHP]
{assign var="PRODUCTS_ID" value=$products_id}

{php}
$sql = "SELECT products_quantity FROM xt_products WHERE products_id='".$this->get_template_vars('PRODUCTS_ID')."'";
$query = mysql_query($sql);
$row = mysql_fetch_object ($query);
$aaa = $row->products_quantity;
$aaa = intval($aaa); # ganze Zahl erzeugen (Dezimalstellen entfernen)
if($aaa < 0) $aaa = 0; # negative Zahl vermeiden

$aaavisibility = 'visible';
if($aaa <= 0) $aaavisibility = 'hidden';
{/php}

<div style="visibility: {php} echo $aaavisibility; {/php}">
{if $allow_add_cart eq 'true'}
{form type=form name=product action='dynamic' link_params=getParams method=post}
{form type=hidden name=action value=add_product}
{form type=hidden name=product value=$products_id}
{$products_information}
<p class="add-to-cart">{form type=text name=qty value=1} {css_button text=$smarty.const.BUTTON_ADD_CART type='form'}</p>
{form type=formend}
{/if}
</div>
[/PHP]

Soweit funktionierte das bei meinen bisherigen Tests.

Noch nicht abgefangen wird die Aktion, wenn ein Kunde zweimal hintereinander auf die Artikelseite geht und die verfügbare Menge in den Warenkorb legt - dann ist bis zur Aktualisierung eine doppelt so hohe Menge im Korb wie tatsächlich vorhanden.

Auch die DB-Abfragen habe ich komplett eingefügt (z.B. Tabelle mit 'xt_' Prefix), da ich die auf den einzelnen Seiten verfügbaren Variablen nicht nachvollzogen habe.

[b]Der Code lässt sich also sicher noch optimieren. Hier darf der Support gerne aktiv werden und ein Hotfix anbieten, um den Bug zu eliminieren.[/b]

Dieses FIX hier ermöglicht zumindest den Betrieb des Shop mit Lager-Verwaltung, ohne dass beim Verkauf des letzten Produkts Fehler auftreten.

Link to comment
Share on other sites

Der Support hatte mir letzte Woche geschrieben "...das Problem zu lösen ist leider technisch nicht zu 100% möglich, daher können wir hier leider nicht viel machen. Aber wir planen mit dem nächsten Update weitreichende Anpassungen, die uns erlauben auch dieses Problem zu beheben..."

Dies zu einem Zeitpunkt, als 4.2 bereits verfügbar war, der Fehler dürfte demnach auch in 4.2 noch enthalten sein.

Ein Fehler dieser Art taucht wohl bereits seit Mitte 2012 auf, wie man diesem Thema entnehmen kann:

Sucht nach 'Bugs Lager + Paypal/Sofortüberweisung' in diesem Forum (/forum/fragen-zur-software/88813-bugs-lager-paypal-sofort-berweisung.html)

Für mich absolut unverständlich ist, dass man als Anbieter der xtc Shop-Software die Lager-Verwaltung als Leistungsmerkmal des Shop bewirbt, die fehlerfreie Funktion aber nicht herstellen kann.

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
  • Create New...