Günstigster Preis der letzten 30 Tage (PAngV-Aktualisierung)

Hallo zusammen,

Ende Mai steht ja die Aktualisierung der PAngV an, u.a. mit der Vorgabe, dass bei Preisermäßigungen der günstigste vorher geltende Preis der letzten 30 Tage angezeigt werden muss.

Für Shopware 6 gibt es in der neuesten Version ja eine entsprechende Anpassung. Einige Kunden steigen aus diversen Gründen noch nicht auf SW 6 um, müssen die Vorgabe aber natürlich auch erfüllen.

Wird es da irgendwas für SW 5 geben (Update, Plugin, …)? Wie werdet ihr das in euren Projekten handhaben?

Viele Grüße,
Malte

Shopware hat bereits angekündigt, für Shopware 5, bis dahin eine Lösung zur Verfügung zu stellen.

1 „Gefällt mir“

Hallo Malte,

die Anpassung wurde bereits umgesetzt und wird Teil der 5.7.8 sein. Dieses Update wird sehr bald veröffentlicht.

Viele Grüße aus Schöppingen
Michael Telgmann

1 „Gefällt mir“

Super, danke für die schnelle Rückmeldung! :slight_smile:

Mittlerweile ist das Update verfügbar!

Ich habe heute das Update eingespielt - es werden jetzt keine Produkte mehr gelistet!

\Core\ListProductService::isProductValid liefert bei allen FALSE, weil $product->getPrices() bei jedem Produkt ein leeres Array zurück liefert.

Das Upadet habe ich via console gemacht … muss noch was anderes gemacht werden??

[Nachtrag]

Das Problem tritt dann auf, wenn der Testnutzer von der Kundengruppe „EK“ zur Kundengruppe „H“ - zu der keine Preise explizit hinterlegt sind - wechselt.

War das schon immer so??

[Nachtrag 2]

Gehe ich recht in der Annahme, dass der 30-Tage-Preis NICHT automatisch gesetzt wird??

Hallo @PingPong

dazu hatten wir bereits ein Ticket Shopware Issuetracker
Wir konnten das aber leider nicht in unseren Umgebungen nachstellen.
Hast du eventuell nähere Infos zu Einstellungen und Klickwegen?

Richtig, der 30-Tage-Preis wird nicht automatisch ermittelt, sondern muss manuell bei Bedarf vom Händler gepflegt werden.

Viele Grüße aus Schöppingen
Michael Telgmann

Einstellungen:

Preise werden via API zur Kundengruppe „EK“ hochgeladen … ausdrücklich keine Preise zu „H“

keine Pseudopreise oder sonstiges

Der Testkunden gehört der Gruppe EK an → alles wie immer

Ändert man die Gruppenzugehörigjkeit zu „H“, tritt das Problem auf, dass keine Preise berechnet/gesetzt werden und o.g. Fehler aufläuft (isProductValid liefert immer FALSE —> damit ist sArticles in Folge ein leeres Array)

Interessant nebenbei: der eigentliche ProductCount funktioniert - im Listing werden die korrekten Seitenzahlen im Paginator angezeigt … nur das Listing ist eben leer

Der Reiter „Händler netto“ im Backend wird aber korrekt angezeigt

[Nachtrag]

Preis im „Händler netto“ im Backend mal von Hand geändert → Artikel wird angezeigt

[Nachtrag 2]

Ich hab mir das Ticket gerade mal angesehen: man braucht die Preise in der DB gar nicht löschen. Der Fehler reproduziert sich auch ohne diesen Eingriff.

[Nachtrag 3]

ListProductService::getList → $graduatedPrices hat falsche Indizes [0, 1, … anstatt der productNumber] … in Folge ist

if (isset($graduatedPrices[$number])) {
$product->setPriceRules($graduatedPrices[$number]);
}

immer FALSE ----> $this->priceCalculationService->calculateProduct($product, $context); setzt die preise dann nicht

Zumindest soweit, wie ich das jetzt nachvollziehen konnte :slight_smile:

Bei uns tritt der selbe Fehler auf: alle Preise in s_articles_prices stehen nur für die Gruppe EK in der DB. Das hat unter 5.7.7 auch bisher wunderbar funktioniert. Unter 5.7.8 führt das dann z.B. bei buildPrices() im CheapesPriceService.php zu einem leeren prices Array.

Da wir international versenden verwenden wir 4 Kundengruppen, die damit natürlich nicht mehr zu benutzen sind.

Gibt es hierzu eine mögliche Lösung?

Ja, es gibt eine Lösung.
Die unnötige Änderung in der folgenden Datei rückgängig machen:
engine/Shopware/Bundle/StoreFrontBundle/Service/Core/GraduatedPricesService.php

$prices = array_merge($prices, $fallbackPrices);
ändern in
$prices = $prices + $fallbackPrices;

Der Hintergrund ist der, dass $fallbackPrices numerische Indizes haben kann, wenn die Produktnummer nur aus Zahlen besteht. Der Plus-Operator und array_merge sind eben nicht genau gleich und sollten nicht einfach ausgetauscht werden. Array_merge numeriert die Array-Elemente neu und somit wird dann der Preis des Produkts nicht mehr gefunden.

Gleiches gilt für die Datei CheapestPriceService.php.

3 „Gefällt mir“

Vielen Dank!

Die Änderung funktioniert endlich, diese Stelle hatte ich bei der Fehlersuche am Ende nicht mehr beachtet.

@kapehaa Vielen Dank für das Finden des Fehlers.
Wir werden die Änderung schnellstmöglich rückgängig machen und in einem Patch Release fixen.

Wie setzt man den 30-Tage-Presis per API?

@PingPong du kannst den regulationPrice mit dem Preis schreiben.

Hier ist es in unserer Dokumentation zu finden: REST API - Models

Dieser Test veranschaulicht das Schreiben per API: shopware/ArticleTest.php at 5.7 · shopware/shopware · GitHub

1 „Gefällt mir“

Gibt es kein Plugin oder eine Erweiterung der Funktion, welche den 30 Tage Preis automatisch setzt? Es ist für viele Shops garnicht möglich diese Preise ständig manuell nachzuhalten … dazu bedarf es zwingend eines Automatismus.

Dieses Plugin sollte dies z.B. automatisch können: