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?
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??
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.
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
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.
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
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.
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.