Lagerbestand vs. Verfügbarer Bestand

Hi, Bestände werden über die Klasse „Shopware\Core\Content\Product\DataAbstractionLayer\StockUpdater.php“ geändert.

In der Funktion „updateAvailableStockAndSales“ über die SQL Anfrage

$sql = '
SELECT LOWER(HEX(order_line_item.product_id)) as product_id,
    IFNULL(
        SUM(IF(state_machine_state.technical_name = :completed_state, 0, order_line_item.quantity)),
        0
    ) as open_quantity,

    IFNULL(
        SUM(IF(state_machine_state.technical_name = :completed_state, order_line_item.quantity, 0)),
        0
    ) as sales_quantity

FROM order_line_item
    INNER JOIN `order`
        ON `order`.id = order_line_item.order_id
        AND `order`.version_id = order_line_item.order_version_id
    INNER JOIN state_machine_state
        ON state_machine_state.id = `order`.state_id
        AND state_machine_state.technical_name <> :cancelled_state

WHERE order_line_item.product_id IN (:ids)
    AND order_line_item.type = :type
    AND order_line_item.version_id = :version
    AND order_line_item.product_id IS NOT NULL
GROUP BY product_id;
        ';

abgerufen und über die Zeile

$update = new RetryableQuery(
            $this->connection,
            $this->connection->prepare('UPDATE product SET available_stock = stock - :open_quantity, sales = :sales_quantity, updated_at = :now WHERE id = :id')
        );

berechnet.

Eine Lösung für euer Problem wäre es ein Plugin zu erstellen mit einem Subscriber (alternativ die Klasse aus Performancegründen überschreiben, aber damit habe ich mich in der SW Umgebung noch nicht befasst) auf die Events in denen die Funktion aufgerufen wird und dort euer eigenes update Statement zu verwenden.

$update = new RetryableQuery(
            $this->connection,
            $this->connection->prepare('UPDATE product SET available_stock = stock , sales = :sales_quantity, updated_at = :now WHERE id = :id')
        );

Grüße