Bestand wird nicht abgezogen wenn Artikel manuell in Bestellung hinzugefügt wird

Hallo zusammen,

wir haben seit einiger Zeit eine Oxid 4.10.8 Installation laufen und hatten immer wieder Probleme mit dem Bestand. Jetzt haben wir zufällig entdeckt das wenn man einen Artikel manuell einfügt der Bestand nicht aus dem Lager verschwindet. Das gleiche Phänomen, tritt auf scheinbar auch auf wenn ein Kunden einen Artikel mit Zubehör bestellt.
Löscht man die Artikel aus den Bestellungen wird der Bestand aber auf das Lager wieder aufgebucht.

Hat jemand eine Idee wo ich schauen muss, oder das Problem schon gelöst?

Danke schon mal vorab.

D.h. der Bestand wird generell gar nicht reduziert, aber bei beim Entfernen wieder erhöht, wenn der Artikel mit Zubehör war?

Und mit “Artikel mit Zubehör” ist die Zuweisung über die Funktion “Artikel dazu” gemeint, oder?

@ vanilla_thunder
Danke für die schnelle Reaktion.
Zu dem Zubehör muss ich beim Kunden nocmal konkret nachfragen wie ich das testen kann.
Bei bestehenden Bestellungen ist es in jedem Fall leicht nachzuvollziehen, man entfernt einen Artikel aus einer bestehenden Bestellung, danach fügt man den gelichen Artikel wieder hinzu. Bestand ändert sich nicht, entfernt man den wieder, wird der Bestand erhöht, um den gleichen Wert der vorab nicht abgebucht wurde.
Softwarestand ist im übrigen der aus Deinem Git Repo. An der Stelle danke für deine Super Arbeit. Der Umstieg auf 6.X ist ja nicht ohne und zwingende Vorteile sehe ich da im Moment nicht, weder an der Performance noch an der UX hat sich entscheidendes getan.
Grüsse

Das erste Problem habe ich inzwischen selbst gefunden:

in order_article.php im Admin fehlt bei public function addThisArticle() ein Zeile Code:
$oProduct->oxarticles__oxstock = $oProduct->oxarticles__oxstock->value - $dAmount;

Damit klappt das hinzufügen von Artikeln im Admin korrekt.

Über einen Tipp wo ich schauen muss, wo eine ähnliche Zeile im Shop Frontend (Zubehör Artikel) fehlt, würde ich mich natürlich trotzdem freuen.

Auch wenn ich hier nur Alleinunterhalter bin :sweat_smile: ich habe die oben gepostete Löung nun auf einen Produktivshop übertragen, trotz mehrfach Cache löschen funktioniert sie da nicht, Hoster ist ein anderer und OP Cache kommt zum Einsatz, PHP Version wie bei mir 7.3.XX kann es sein das der OP Cache die Änderung nicht sieht, oder habe ich einen Fehler in meiner Zeile?
Bin kein PHP Guru, das ist nicht mein Geschäft.

Ich warte eigentlich auf die Rückmeldung, wie genau “Artikel mit Zubehör” gemeint war, erst dann kann ich im Code schauen, was Oxid da macht.

es sind ja eigentlich zwei Sachen, Teil eins betrifft das:


Hier wird kein Bestand aus dem Lager abgezogen.

Teil 2 betrifft so einen Fall Theme Flow:


hier wird der Bestand für das dazu bestellte Zubehör ebenso nicht abgezogen.

Bei der Stelle im Admin ist die Stelle richtig, warum es bei dem einen Shop geht und beim anderen nicht, völlig unklar.

@ vanilla_thunder
War das jetzt ein korrekte Rückmeldung? Oder fehlt noch etwas?

okay, ich habe folgendes in einer frischen 4.10.8 Version getestet:

  1. bei einer vorhandenen Bestellung die Anzahl der Artikel erhöht.
    Resultat: der Lagerbestand in der Artikelverwaltung wurde entsprechend aktualisiert
  2. einen ganz neuen Artikel zu der Bestellung hinzugefügt
    Resultat: der Lagerbestand beim zweiten Artikel wurde ebenfalls richtig aktualisiert.
  3. Stückzahl vom ersten Artikel wieder auf 1 gesetzt.
    Resultat: der Lagerbestand wurde entsprechend erhöht.
  4. den zweiten Artikel komplett storniert
    Resultat: der Lagerbetsand vom zweiten Artikel wurde auf die ursprüngliche Menge wieder erhöht.

Soweit ich es berurteilen kann, funktioniert es allgemein korrekt.

Das führt uns wieder zu dem speziellen Fall “Artikel mit Zubehör”.
Ein Screenshot sagt leider immer noch nichts darüber aus, wie die Zubehör-Zurdnung gemacht wurde. Das ist in etwa so, als würdest du beim Internet-Anbieter anrufen und fragen, warum du kein Internet hast, der Anbieter fragt was für einen Anschluss du hast und du schickst ihm so ein Screenshot:

Nun zurück zum Problem: mit den Artikeldaten aus dem Screenshot konnte ich den Shop ausfindig machen und einen anderen Artikel mit Zubehör und vorhandenem Bestand finden (LEX-02806).
Wenn dieser Artikel genau so konfiguriert ist, wie LEX-34902, dann ist es leidglich ein einziger Artikel mit einer zugeordneten Auswahlliste, also nicht mal unterschiedliche Varianten mit unterschiedlichen Artikelnummern.
Damit der Shop die Bestände anpassen kann, muss es irgendeine Zuordnung zwischen den Artikeln geben, in der Regel nennt sich sowas ein Set oder ein Bundle, dem mehrere Artikel zugeordnet werden können.
In der CE geht sowas nur in einem sehr eingeschränkten Umfang über die Funktion “Artikel dazu” oder mittels eines Moduls. (Das wollte ich wissen)
Einfach nur die Artikelnummer eines beliebigen anderen Artikels in einem Auswahl-Punkt zu erwähnten, ist noch keine Zuordnung, da der Shop keine magischen Kräfte hat, um diesen Zusammenhang zu erkennen.
Man kann einen Mercedes-Stern auf ein Fiat Punto kleben, aber es bleibt ein Fiat und kein Mercedes.

Fazit: Es wird also nicht “Artikel mit Zubehör” bestellt, sondern lediglich ein einziger Artikel, der “Artikel mit Zubehör” heißt.
Somit können auch nur die Bestände des einen gekauften Artikels aktualisiert werden.
Dies sollte aber in beide Richtungen funktionieren.
Wenn es das nicht tut, müsste man prüfen, ob die PHP Dateien vom Shop angepasst wurden oder ggf. ein Modul zu diesem Fehler führt.

Danke für den Test.

Genau das funktioniert bei uns mit der normalen Implementierung nicht, Rest geht so wie von Dir getestet. Ich werde nochmal prüfen ob es mit deaktivierten Modulen geht, sind aber nur 2 die in beiden Shops drin sind und auf dem einen geht es mit meiner Änderung beim anderen nicht.
Bin da im Moment etwas ratlos.

Nachdem ich die Konfig der Artikel mal angesehen habe und nach deinem Hinweis, kann das natürlich keine Bestände abziehen, da es tatsächlich ja gar keinen Bezug zu dem Artikel gibt, ist ja nur ein Text.

falls es OPcache gibt, habe ich noch das hier zwecks Cache-Reset gefunden:


(konnte noch nicht selbst ausprobieren, da mein Server keinen OPcache hat)

Hi Matthias, super habe ich mal in mein delete Cache Sktript eingebaut, Cache Rest sieht man auch in der Info.
Am We habe ich mal alle Files verglichen und keine Unterschiede zwischen dem Produktiven Shop und meinem Testshop feststellen können, irgendwo ist aber der Wurm drin.
Zur Geschichte der Prod Shop ist 2013 installiert die Version kenne ich nicht mehr, es gab auch mehrfach Probleme mit den Updates, beim letzten allerdings nicht. Wenn ich diesen jetzt auf PHP 7.4 (7.3 geht) umstelle gehen die ganzen Zuweisungsmasken im Admin nicht. Das abbuchen der Artiekl wenn ich im Admin einen zur Bestellung hinzufüge geht nur mit dem folgenden Code:

    /**
 * Adds article to order list.
 */
public function addThisArticle()
{
    $sOxid = oxRegistry::getConfig()->getRequestParameter('aid');
    $dAmount = oxRegistry::getConfig()->getRequestParameter('am');
    $oProduct = oxNew("oxarticle");

    if ($sOxid && $dAmount && $oProduct->load($sOxid)) {

        $sOrderId = $this->getEditObjectId();
        $oOrder = oxNew('oxorder');
        if ($sOrderId && $oOrder->load($sOrderId)) {
            $oOrderArticle = oxNew('oxorderArticle');
            $oOrderArticle->oxorderarticles__oxartid = new oxField($oProduct->getId());
            $oOrderArticle->oxorderarticles__oxartnum = new oxField($oProduct->oxarticles__oxartnum->value);
            $oOrderArticle->oxorderarticles__oxamount = new oxField($dAmount);
            $oOrderArticle->oxorderarticles__oxselvariant = new oxField(oxRegistry::getConfig()->getRequestParameter('sel'));
           // $oProduct->oxarticles__oxstock = new oxField($oProduct->oxarticles__oxstock->value - $dAmount);
            $oProduct->reduceStock($dAmount,TRUE);
            $oOrder->recalculateOrder(array($oOrderArticle));
            
        }
    }
}, 

Der gleiche Code in meinem Testshop (installiert als 4.10.5) und Update mit dem gleichen Stand wie der Produktivshop zeigt mal gar keine Probleme mit PHP 7.4 wenn ich hier den Code von oben einsetze wird bei addThisArticle der Bestand doppelt abgezogen.

Ich muss also weiter suchen, aber wenn einer eine Idee hat, gerne!!