Eventuell sieht jemand auf Anhieb das Problem, ich sitze hier seit Stunden und versuche diese eigentlich 08/15 Aufgabe bisher erfolglos zu bewältigen, aber in Shopware 6 muss ja alles so lange umgeschichtet und verstrukturiert werden, bis am Ende überhaupt nichts mehr funktioniert…
Ich benötige lediglich den aktuell im Shop gültigen Preis zu einem Produkt, dessen ID ich während des Aufrufs ermittle.
Codeausschnitt:
...
use Shopware\Core\System\SalesChannel\Entity\SalesChannelRepository;
class Subscriber implements EventSubscriberInterface {
private RequestStack $requestStack;
private SalesChannelRepository $productRepository;
private LineItemFactoryRegistry $factory;
private CartPersister $persister;
private CartService $cartService;
private QuantityPriceCalculator $calculator;
private ProductListingLoader $proload;
public function __construct(RequestStack $requestStack, SalesChannelRepository $productRepository, LineItemFactoryRegistry $factory, CartPersister $persister, CartService $cartservice, QuantityPriceCalculator $calculator, ProductListingLoader $proload) {
$this->requestStack = $requestStack;
$this->productRepository = $productRepository;
$this->factory = $factory;
$this->persister = $persister;
$this->cartService = $cartservice;
$this->calculator = $calculator;
$this->proload = $proload;
}
Gefolgt von getSubscribedEvents, etc. etc.
public function OnCartLoad(CartLoadedEvent $event) :void {
$context = $event->getSalesChannelContext();
$salechannel= $context->getSalesChannelId();
//$session_id = $this->requestStack->getMainRequest()->getSession()->getId();
$request = $this->requestStack->getCurrentRequest();
... // Ermitteln der entsprechenden ArtikelID/UUID
$criteria = new Criteria([strtolower($tmpergarr["artid"])]);
$criteria->addAssociation('prices');
$criteria->addAssociation('tax');
//$product = $this->proload->load($criteria, $context); // Versuch ProductListingLoader
$product = $this->productRepository->search($criteria, $context)->first();
die("<pre>".print_r($product->jsonSerialize(),true)."</pre>");
An dieser Stelle spuckt mir Shopware ein riesiges Produkt aus mit dem Ergebnis:
[calculatedPrices:protected] => Shopware\Core\Checkout\Cart\Price\Struct\PriceCollection Object
(
[extensions:protected] => Array
(
)
[elements:protected] => Array
(
)
)
Daraufhin behaupted Shopware der aktuelle Preis sei der Basispreis, was nicht stimmt, da aufgrund des Subshops / der Standardkundengruppe des Subshops (nicht angemeldet), eigentlich eine Preisrule greiffen müsste und den Preis entsprechend für den Subshop anpassen…
Gehe ich im Shop über das Listing/die Suche auf den Artikel wird mir der korrekte Preis angezeigt.
Gebe ich mir den Kontext aus, finde ich darin sowohl Preisgruppe, Subshop als auch Tax Informationen, es sollte also eigentlich alles vorhanden sein…