Versandpreis in der Kaufabwicklung für nicht ausgewählte Methoden anzeigen

Hallo!

Ich muss den Preis für Versandmethoden anzeigen, die nicht in der Kasse ausgewählt werden. Ich habe dekoriert

Shopware\Core\Checkout\Shipping\SalesChannel\ShippingMethodRoute

Service und konfigurierte DI, um meine neue Klasse im Checkout-Controller zu platzieren. Hier ist der Code der Ladefunktion

public function load(Request $request, SalesChannelContext $context, Criteria $criteria): ShippingMethodRouteResponse {

    $result = $this->shippingMethodRoute->load($request, $context, $criteria);

    $shippingMethods = $result->getShippingMethods()->filterByActiveRules($context);

    $cart = $this->cartService->getCart($context->getToken(), $context);
    /** @var ShippingMethodEntity $shippingMethod */
    foreach ($shippingMethods as $shippingMethod) {
        $cartClone = clone $cart;
        $cartData = $cartClone->getData();
        $deliveries = $cartClone->getDeliveries();
        /** @var Delivery $delivery */
        foreach ($deliveries as $delivery) {
            $delivery->setShippingMethod($shippingMethod);
        }
        $cartData->set("shipping-method-" . $shippingMethod->getId(), $shippingMethod);
        $this->deliveryCalculator->calculate($cartData, $cartClone, $deliveries, $context);
        $shippingCost = $cartClone->getDeliveries()->getShippingCosts()->sum()->getTotalPrice();
        var_dump($shippingCost);
        $shippingMethod->shippingPrice = $shippingCost;
    }

    return $result;
}

Aber in einigen Fällen funktioniert es richtig, aber manchmal, wenn ich die Versandart ändere, wird ein Preis für alle berechnet, was nicht korrekt ist.

Ich habe das Problem gelöst. Sie müssen auch den Versandpreis für die Lieferung auf Null setzen, sonst wird er nicht berechnet.

 public function load(Request $request, SalesChannelContext $context, Criteria $criteria): ShippingMethodRouteResponse {

      $criteria->addAssociation('prices');
      $result = $this->shippingMethodRoute->load($request, $context, $criteria);
      $originalResult = clone $result;
      $cart = $this->cartService->getCart($context->getToken(), $context);
      $shippingMethods = $result->getShippingMethods()->filterByActiveRules($context);
      /** @var ShippingMethodEntity $shippingMethod */
      try {
          foreach ($shippingMethods as $shippingMethod) {
              $cartClone = clone $cart;
              $cartData =  $cartClone->getData();
              $deliveries = $cartClone->getDeliveries();
              /** @var Delivery $delivery */
              foreach ($deliveries as $delivery) {
                  $delivery->setShippingCosts(new CalculatedPrice(0, 0, new CalculatedTaxCollection(), new TaxRuleCollection()));
                  $delivery->setShippingMethod($shippingMethod);
              }
              $cartData->set(DeliveryProcessor::buildKey($shippingMethod->getId()), $shippingMethod);
              $this->deliveryCalculator->calculate($cartData, $cartClone, $deliveries, $context);
              $shippingCost = $cartClone->getDeliveries()->getShippingCosts()->sum()->getTotalPrice();
              $shippingMethod->shippingPrice = $shippingCost;
          }
      } catch (\Error $exception) {
          return $originalResult;
      }