Hallo zusammen,
In der Datenbank finden sich Produkte und Varianten, bei denen Brutto- und Netto-Preis nicht zueinander passen: Der Brutto-Preis ist korrekt, der hinterlegte Netto-Wert entspricht jedoch noch einem früheren Brutto-Stand. Im JSON-Feld price steht in diesen Fällen linked: false. Beim Klick auf das Verknüpfungs-Schloss in der Administration wird der Netto-Wert korrekt neu berechnet.
Das Verhalten deckt sich mit dem GitHub-Issue #15121 („sw-price-field does not update linked net price while typing"): Wird der Brutto-Preis eingegeben und direkt gespeichert, ohne das Eingabefeld vorher zu verlassen, wird der Netto-Wert nicht neu berechnet. Dadurch lassen sich inkonsistente Preispaare speichern. Das Verhalten wurde mit 6.7.9 gefixt.
In einem Shop waren 2% der Produkte betroffen und der Bruttopreis ist die Bezugsgröße. Wie habt ihr die Auswirkungen des Bugs behoben?
Würde das wie folgt per Datenbank machen:
UPDATE product p
LEFT JOIN product parent ON parent.id = p.parent_id
JOIN tax t ON t.id = COALESCE(p.tax_id, parent.tax_id)
SET p.price = JSON_SET(
p.price,
'$."cb7d2554b0ce847cd82f3ac9bd1c0dfca".net',
ROUND(
CAST(JSON_UNQUOTE(JSON_EXTRACT(p.price, '$."cb7d2554b0ce847cd82f3ac9bd1c0dfca".gross')) AS DECIMAL(30,10))
/ (1 + t.tax_rate/100), 10),
'$."cb7d2554b0ce847cd82f3ac9bd1c0dfca".linked',
CAST(TRUE AS JSON)
)
WHERE p.price IS NOT NULL
AND ABS(
CAST(JSON_UNQUOTE(JSON_EXTRACT(p.price, '$."cb7d2554b0ce847cd82f3ac9bd1c0dfca".net')) AS DECIMAL(30,10))
- CAST(JSON_UNQUOTE(JSON_EXTRACT(p.price, '$."cb7d2554b0ce847cd82f3ac9bd1c0dfca".gross')) AS DECIMAL(30,10))
/ (1 + t.tax_rate/100)
) > 0.01;
Danach
dal:refresh:index & cache:clear
Freu mich auf eure Einschätzung