Artikel-ID beziehen im Decorator für den PriceCalculatorService?

Hallo liebe Community,

ich baue gerade ein Plugin mit einer etwas komplexeren Preismanipulation. Auf den von Shopware berechneten Preis sollen - teilweise abhängig von Artikel-Attributen - noch gewisse Rabatte hinzukommen.

Jetzt habe ich soweit den Decorator und einen Service zur weiteren Preisberechnung gebaut, stelle aber beim verdrahten mit schrecken fest, dass ich nirgends im $context des PriceCalculatorService irgendwie auf die Artikel-ID zugreifen kann des Artikels, dem der Preis gehört. Oder übersehe ich was?

Der reine Decorator sollte etwa so aussehen, allerdings: Woher nehme ich die $articleId? Irgendwie muss ich ja wissen zu welchem Artikel der übergebene Preis gehört :wink:
 

originalService = $service;
	}

	public function calculatePrice($price, Struct\Tax $tax, Struct\ProductContextInterface $context)
	{
		$price = $this->originalService->calculatePrice($price, $tax, $context);

		$calculator = new DiscountCalculator();
		
        // Hier muss irgendwie die $articleId mit übergeben werden
		$price = $calculator->calculateArticlePrice($articleId, $price);

		return $price;
	}

}

Für einen Anhaltspunkt wäre ich dankbar :slight_smile:

Liebe Grüße
bquarta

Hi bquarta,

 

du dekorierst den falschen Service.

Du musst den PriceCalculationService und nicht den PriceCalculator dekorieren.

Hier hast Du dann in der Funktion calculateProduct

über das ListProduct Struct zugriff auf die articleID.