Versandkosten aus mehreren Versandarten kombinieren

Hallo zusammen,

leider komme ich bei einem Problem bei der Versandkostenberechnung nicht weiter und hoffe auf Hilfe hier im Forum.

Ich habe folgende zwei Versandarten in meinem System welche gleichzeitig dem Verkaufskanal zugewiesen sind:

  • Spedition, Netto: 0€, Brutto: 0€ <= Standard-Versandart des Verkaufskanals
  • DHL, Netto: 4,78€, Brutto: 5,9

Nun habe ich ein kleines Plugin geschrieben mit einer Frontend.php welche die Frachtkostenberechnung anhand des Produktgewichtes im Warenkorb berechnet. Die Frontend.php ist als ein Subscriber deklariert.
Die in der Frontend.php berechneten Frachtkosten werden als ein Line-Item mit in den Warenkorb gelegt. Soweit, so gut.
Im weiteren Verlauf gibt es Artikel welche von der Frachtkostenberechnung ausgeschlossen werden können. Dabei gibt es entweder die Versandkostenfreie-Lieferung oder eben nicht. Und da wären wir bei dem eigentlichen Problem. Sobald ein Produkt, sowohl von den Frachtkosten als auch von der Versandkostenfreien-Lieferung, ausgeschlossen wird, müssen die 5,90€ Versandkosten aus der Versandart „DHL“ berechnet werden.

Hierzu hole ich mir die Kosten aus den shippingMethods und schreibe diese in drei Arrays:

  • $newPriceToSet
  • $newNetPriceToSet
  • $newfreightCosts

Anschließend wird folgender Code ausgeführt:

$priceToSet = new CartPrice($newNetPriceToSet, $newPriceToSet, $newNetPriceToSet, new CalculatedTaxCollection(), new TaxRuleCollection([new TaxRule(19)]), CartPrice::TAX_STATE_FREE);
$cart->setPrice($priceToSet);

$freightPrice = new CalculatedPrice($newfreightCosts, $newfreightCosts, new CalculatedTaxCollection(), new TaxRuleCollection([new TaxRule(19)]));
$deliveries = $cart->getDeliveries();

foreach ($deliveries as $delivery) {
    $delivery->setShippingCosts($freightPrice);
}
$this->deliveryCalculator->calculate($cart->getData(), $cart, $deliveries, $salesChannel);

$this->cartService->recalculate($cart, $salesChannel);
$cart->setDeliveries($deliveries);

Dabei wird der Preis im Cart, die shippingMethod und die shippingCosts korrekt gesetzt. Jedoch, wenn ich in die Datenbank in der tabelle „cart“ schaue fehlen in der Spalte „price“ genau diese 5,90€.

Was mache ich falsch und wie bekomme ich das hin, dass beide Versandarten beachtet werden? Bzw. an welcher Stelle wird der Warenkorb in die DB geschrieben, sodass ich dort eingreifen kann?

Gerne kann ich auch mehr Code zur Verfügung stellen.

Vielen Dank für deine Hilfe im Voraus!

Ohne es zu wissen, ich schätze, dass der Preis erst beim Kauf festgeschrieben wird und alles andere über die REQUEST gehandelt wird. Weil bis dahin kann man die Versandkosten ja noch ändern.