Bestand von Hauptartikeln & Varianten im Gambio-Shop

Verwenden Sie Artikelvarianten im Gambio-Shop? Soll deren Bestand den Ausschlag geben, ob ein Artikel auf Lager ist oder nicht? Also der Lagerbestand (Artikelanzahl) des Hauptartikels ignoriert werden? Das lässt sich via Einstellungen oder automatisierter Bestandsaktualisierung lösen.

Sold out, obwohl verfügbar

Artikelanzahl: 0
Hauptartikel ohne Bestand
Tabelle von Artikelvarianten (Größe, Farbe)
Varianten haben Bestand
Größe S, Farbe Gold: Sold out
Sold out obwohl verfügbar

Unser Testartikel hat einen Bestand von 0. Den Testartikel als solchen gibt es nicht. Er kann nicht gekauft werden. Denn: Es gibt kein T-Shirt ohne Farbe und Größe. Aus demselben Grund können wir bei Variantenartikeln auch erst nach gewählter Variantenkombination eine EAN im Gambio-Shop anzeigen lassen.

Im Gegensatz zum Hauptartikel sind Varianten also echte, käufliche Produkte. Bei unserem Testartikel sind verschiedene Variantenkombinationen auf Lager, sollten also im Shop käuflich sein.

Warum also zeigt Gambio das „Sold out“-Ribbon, obwohl der Artikel durchaus in mehreren Varianten lagernd ist? Welcher Interessent am T-Shirt in der Größe S und Farbe Gold kommt auf die Idee, trotz abschreckenden „Sold out“-Ribbon zu versuchen, den scheinbar nicht verfügbaren Artikel zu kaufen?

Wir haben mehrere Möglichkeiten, um das unerwünschte Sold-out-Ribbon loszuwerden:

  1. Das Sold-out-Ribbon lässt sich im StyleEdit komplett deaktivieren. Das wollen wir normalerweise nicht, weil Frust bei potenziellen Käufern vorprogrammiert wäre. Sinnvoller ist es, Artikel mit Bestand bevorzugt im Gambio-Shop zu präsentieren, das Sold-out-Ribbon aber generell aktiviert zu lassen.
  2. Bestandsprüfung: Artikelvariantenbestand
    Bestandsprüfung via Artikelvarianten

    Wir aktivieren bei der Bestandsprüfung für die Artikelvarianten die Option Artikelvariantenbestand. Damit wird der Bestand des Hauptartikels ignoriert. Soll für alle Artikel diese Option gelten? Dann können wir uns via Toolbox > SQL oder phpMyAdmin das Leben etwas leichter gestalten. Für alle bestehenden Artikel die Option aktivieren können wir einfach mit folgendem SQL-Befehl:

    UPDATE `products` SET `use_properties_combis_quantity`=2;

    Und zum Standard für neue Artikel deklarieren:

    ALTER TABLE `products` CHANGE `use_properties_combis_quantity` `use_properties_combis_quantity` TINYINT(1) NOT NULL DEFAULT '2';
  3. Wir sorgen dafür, dass der Hauptartikel Bestand hat.

Hauptartikelbestand = Summe Variantenbeständen?

Im Lager liegen 3 Paar Sneaker, davon 2 Paar in Größe 37 und 1 Paar in Größe 38. Klingt das logisch? Dann ergibt sich der Bestand des Hauptartikels also aus der Summe der Variantenbestände: 2 + 1 = 3.

Gehen wir davon aus, dass wir die Variantenbestände via WaWi verwalten. Und da es den Hauptartikel als solchen nicht wirklich gibt, kann er eigentlich nur einen fiktiven Bestand haben. Insbesondere der Abgleich mit dem Shop wird dadurch komplex und fehleranfällig. Das macht nicht jede WaWi mit. Dabei ist der Rechenweg doch ziemlich einfach 🙂

Um einmalig (bzw. initial) die Bestände der Hauptartikel auf die Summe der Variantenbestände des jeweiligen Artikels zu aktualisieren, können wir diesen SQL-Befehl verwenden:

UPDATE products p
JOIN (
SELECT products_id, SUM(combi_quantity) AS total_quantity
FROM products_properties_combis
GROUP BY products_id
) c ON p.products_id = c.products_id
SET p.products_quantity = c.total_quantity;

Wir pflegen also ausschließlich die Variantenbestände und diese sollen den Ausschlag geben, ob ein Artikel auf Lager ist. Dann wollen wir nicht nach jeder Bestandsanpassung wieder diesen SQL-Befehl händisch ausführen. Denkbar wäre deshalb ein minütlicher CronJob. Noch eleganter, ganz ohne PHP-Skript und außerdem in Echtzeit lassen wir den Bestandsabgleich via Trigger durchführen.

Trigger-Code in phpMyAdmin-Eingabefeld
Trigger via phpMyAdmin anlegen

Ein Trigger kümmert sich darum, dass der Lagerbestand des Hauptartikels auf die Summe der Variantenbestände des jeweiligen Artikels aktualisiert wird. Klingt kompliziert, ist aber sehr einfach einzurichten und läuft dann ganz automatisch im Hintergrund:

DROP TRIGGER IF EXISTS update_products_quantity;

DELIMITER $$

CREATE TRIGGER update_products_quantity
AFTER UPDATE ON products_properties_combis
FOR EACH ROW
BEGIN
    DECLARE total_quantity DECIMAL(10,2);

    -- Nur ausführen, wenn sich combi_quantity geändert hat
    IF NEW.combi_quantity != OLD.combi_quantity THEN
        -- Berechne die Summe der combi_quantity für die jeweilige products_id
        SELECT SUM(combi_quantity) INTO total_quantity
        FROM products_properties_combis
        WHERE products_id = NEW.products_id;

        -- Aktualisiere den Bestand in der products-Tabelle
        UPDATE products
        SET products_quantity = total_quantity
        WHERE products_id = NEW.products_id;
    END IF;
END$$

DELIMITER ;

Damit sollten unerwünschte Sold-out-Ribbons und Diskrepanzen zwischen Hauptartikel- und Variantenbestand im Gambio-Shop der Vergangenheit angehören 🙂

»«

Schreiben Sie einen Kommentar