ich bin heute über ein Problem gestolpert, welches Auftritt wenn versucht wird, zwei Artikel in den Warenkorb zu legen, die jeweils aus Stücklisten besteht, wo die Stücklistenkomponenten teilweise übereinstimmen und wo die beiden Artikel jeweils einen Lagerbestand von 1 haben. Bei Hinzufügen des zweiten Artikels in den Warenkorb wird in der Funktion pruefeWarenkorbStueckliste geprüft, ob die Lagermenge der einzelnen Komponenten es zulässt. Das Problem dabei ist, dass die Lagermenge der Komponente aus der Anzahl der Komponente in der Stückliste und dem Lagerbestand der ersten Position berechnet wird, was nicht (immer) stimmt.
Direktes Beispiel:
Artikel A
Enthält Stücklisten-Komponenten
- 1 x Komponente-Artikel-AAA selbst (Lagermenge = 1)
- 1 x Anleitung B (Lagermenge > 400)
- 1 x Flyer C (Lagermenge > 400)
Artikel B
Enthält Stücklisten-Komponenten
- 1 x Komponente-Artikel-BBB selbst (Lagermenge = 1)
- 1 x Anleitung B (Lagermenge > 400)
- 1 x Flyer C (Lagermenge > 400)
Wenn ein Kunde beide Artikel jeweils zum Warenkorb nach einander hinzufügen möchte, bekommt er beim zweiten Artikel die Fehlermeldung, dass der Artikel nicht hinzugefügt werden kann, weil die gewünschte Menge nicht verfügbar ist, obwohl beide Artikel noch jeweils 1 auf Lager sind und komplett verkaufbar.
Das Problem tritt auf, weil in der Funktion pruefeWarenkorbStueckliste die currentComponentStock folgendermaßen bestimmt wird:
$currentComponentStock = $oPosition->Artikel->fLagerbestand * $oKomponente->fAnzahl; ---> Ergebnis 1 (obwohl definitiv mehr als 1 davon vorhanden sind)
$desiredComponentQuantity = $fAnzahl * $oStuecklisteKomponente_arr[$oKomponente->kArtikel]->fAnzahl; --> 1 .... ok
$currentComponentQuantity = $oPosition->nAnzahl * $oKomponente->fAnzahl; --> 1 .... ok
$currentComponentStock = $oPosition->Artikel->fLagerbestand * $oKomponente->fAnzahl; ---> 1 .... Hier muss die Lagermenge der Komponente anders ermittelt werden.
Dadurch greift die if Funktion und liefer einen return R_LAGER, was falsch ist.
if ($desiredComponentQuantity + $currentComponentQuantity > $currentComponentStock) return R_LAGER;
Und dadurch kann ein Kunde seine gewünschte Bestellung nicht aufgeben, obwohl sowohl beide Artikel als auch alle Komponenten noch in ausreichender Anzahl auf Lager sind.
Direktes Beispiel:
Artikel A
Enthält Stücklisten-Komponenten
- 1 x Komponente-Artikel-AAA selbst (Lagermenge = 1)
- 1 x Anleitung B (Lagermenge > 400)
- 1 x Flyer C (Lagermenge > 400)
Artikel B
Enthält Stücklisten-Komponenten
- 1 x Komponente-Artikel-BBB selbst (Lagermenge = 1)
- 1 x Anleitung B (Lagermenge > 400)
- 1 x Flyer C (Lagermenge > 400)
Wenn ein Kunde beide Artikel jeweils zum Warenkorb nach einander hinzufügen möchte, bekommt er beim zweiten Artikel die Fehlermeldung, dass der Artikel nicht hinzugefügt werden kann, weil die gewünschte Menge nicht verfügbar ist, obwohl beide Artikel noch jeweils 1 auf Lager sind und komplett verkaufbar.
Das Problem tritt auf, weil in der Funktion pruefeWarenkorbStueckliste die currentComponentStock folgendermaßen bestimmt wird:
$currentComponentStock = $oPosition->Artikel->fLagerbestand * $oKomponente->fAnzahl; ---> Ergebnis 1 (obwohl definitiv mehr als 1 davon vorhanden sind)
$desiredComponentQuantity = $fAnzahl * $oStuecklisteKomponente_arr[$oKomponente->kArtikel]->fAnzahl; --> 1 .... ok
$currentComponentQuantity = $oPosition->nAnzahl * $oKomponente->fAnzahl; --> 1 .... ok
$currentComponentStock = $oPosition->Artikel->fLagerbestand * $oKomponente->fAnzahl; ---> 1 .... Hier muss die Lagermenge der Komponente anders ermittelt werden.
Dadurch greift die if Funktion und liefer einen return R_LAGER, was falsch ist.
if ($desiredComponentQuantity + $currentComponentQuantity > $currentComponentStock) return R_LAGER;
Und dadurch kann ein Kunde seine gewünschte Bestellung nicht aufgeben, obwohl sowohl beide Artikel als auch alle Komponenten noch in ausreichender Anzahl auf Lager sind.