Wie weise ich eine Shipping Methode Programm gesteuert zu

Hallo, versuche mit folgendem Code die Versandmethode zuzuweisen, scheitere aber. Es gibt keine Exception und kein Error, es tut sich nur nix. Was mache ich falsch?

<?php declare(strict_types=1);

namespace WtShippingCalc\Core\Checkout\Cart;

use JetBrains\PhpStorm\NoReturn;
use Shopware\Core\Checkout\Cart\Cart;
use Shopware\Core\Checkout\Cart\CartBehavior;
use Shopware\Core\Checkout\Cart\CartProcessorInterface;
use Shopware\Core\Checkout\Cart\LineItem\CartDataCollection;
use Shopware\Core\System\SystemConfig\SystemConfigService;
use Shopware\Core\System\SalesChannel\SalesChannelContext;
use ShippingCalc\Service\ContactDatabaseShipping;
use Shopware\Core\Framework\Context;
use Shopware\Core\System\SalesChannel\SalesChannel\SalesChannelContextSwitcher;
use Shopware\Core\Framework\Validation\DataBag\DataBag;

class ShippingProcessor implements CartProcessorInterface
{
    private SalesChannelContextSwitcher $contextSwitcher;
    private SystemConfigService $systemConfigService;
    private ContactDatabaseShipping $database;

    public function __construct(SalesChannelContextSwitcher $contextSwitcher, SystemConfigService $systemConfigService, ContactDatabaseShipping $database)
    {
        $this->contextSwitcher = $contextSwitcher;
        $this->systemConfigService = $systemConfigService;
        $this->database = $database;
    }
    #[NoReturn] public function process(CartDataCollection $data, Cart $original, Cart $toCalculate, SalesChannelContext $context, CartBehavior $behavior): void
    {
        /* !! ACHTUNG !! ACHTUNG !! !! ACHTUNG !! ACHTUNG !! !! ACHTUNG !! ACHTUNG !! !! ACHTUNG !! ACHTUNG !! !! ACHTUNG !! ACHTUNG !!
            Nicht vergessen: $_SESSION['itemsDuble'] nach dem Checkout/Bezahlvorgang ODER(!) dem Abbruch in den entsprechenden Subscriber
            unbedingt löschen!!
        */
        $LaengeVorgabe = $this->systemConfigService->get('WtShippingCalc.config.laenge', null);
        $HoeheVorgabe = $this->systemConfigService->get('WtShippingCalc.config.hoehe', null);
        $BreiteVorgabe = $this->systemConfigService->get('WtShippingCalc.config.breite', null);
        $spezOneVorgabe = $LaengeVorgabe * $BreiteVorgabe * $HoeheVorgabe;
        $spezTwoVorgabe = $this->systemConfigService->get('WtShippingCalc.config.gewicht', null);
        if (session_status() === PHP_SESSION_NONE)
            session_start();
        //um der nachträglichen Hinzufügung von Artikeln in den Warenkorb gerecht zu werden, wird mit 2 SESSION-Arrays gearbeitet
        if (!empty($_SESSION['itemsDuble'])) {
            $orderGewicht = $_SESSION['items'][0] + $_SESSION['itemsDuble'][0];
            $orderLaenge = $_SESSION['items'][1] + $_SESSION['itemsDuble'][1];
            $orderBreite = $_SESSION['items'][2] + $_SESSION['itemsDuble'][2];
            $orderHoehe = $_SESSION['items'][3] + $_SESSION['itemsDuble'][3];
            $_SESSION['itemsDuble'][0] = $orderGewicht;
            $_SESSION['itemsDuble'][1] = $orderLaenge;
            $_SESSION['itemsDuble'][2] = $orderBreite;
            $_SESSION['itemsDuble'][3] = $orderHoehe;
        } else {
            $_SESSION['itemsDuble'] = $_SESSION['items'];
        }
        $spezOneOrder = $_SESSION['itemsDuble'][1] * $_SESSION['itemsDuble'][2] * $_SESSION['itemsDuble'][3];
        $spezTwoOrder = $_SESSION['itemsDuble'][0];
        //hole alle Shippingobjekte und packe sie in ein Array
        $shippingMethods = $this->database->readTableShipping(Context::createDefaultContext());
        foreach ($shippingMethods as $key => $value) {
            $arShippingId[] = $key;
            $arShippingObj[] = $value;
        }
        /*  in arShippingObj sind alle relevanten Shipping-Objekte. Je nach Abgleich soll das erste oder zweite Objekt verwendet
            werden! Trifft kein Kriterium zu, wird, sofern vorhanden, das dritte Objekt(Versandmethode) verwendet.
        */
        if (isset($arShippingId) && isset($arShippingObj) && count($arShippingId) == 2) {
           $obj = $this->DecideShippingFromTwo($spezOneOrder, $spezOneVorgabe, $spezTwoOrder, $spezTwoVorgabe, $arShippingObj, $context);
        } elseif (isset($arShippingId) && isset($arShippingObj) && count($arShippingId) > 2) {
            $obj = $this->DecideShippingFromMoreThanTwo($spezOneOrder, $spezOneVorgabe, $spezTwoOrder, $spezTwoVorgabe, $arShippingObj, $context, $original, $toCalculate);
        }
        $data->set($obj->getId(), $obj);
        $this->assignShippingObject($obj, $context);
    }

    #[NoReturn] private function DecideShippingFromTwo(float $spezOne, int $spezVorgabeOne, float $spezTwo, int $SpezVorgabeTwo, array $arShippingObj, SalesChannelContext $context): void
    {
        /*  spezOne mit spezVorgabeOne abgleichen; spezTwo mit spezVorgabeTwo abgleichen, um zu eruieren, welche
            Versandmethode ausgewählt werden soll
        */
        foreach ($arShippingObj as $item) {
            if (str_contains(strtolower($item->getName()), 'volume')) {
                $shipingVolumeObj = $item;
            } else {
                $shipingObjStandard = $item;
            }
        }
        //jetzt sind die ShippingObjekte aus dem Array gezogen und zugewiesen. Verwende Sie je nach Auswertung der Übergabeparameter
        if (isset($shipingVolumeObj) && $spezOne >= $spezVorgabeOne) {
            $shippingObject = $shipingVolumeObj;
        } else {
            $shippingObject = $shipingObjStandard;
        }
 if (isset($shippingObject)) {
            $deliveries = $original->getDeliveries();
            $deliveries->first()->setShippingMethod($shippingObject);
            $toCalculate->setDeliveries($deliveries);
            $original->setDeliveries($deliveries);
        }
        return $shippingObject;

    #[NoReturn] private function DecideShippingFromMoreThanTwo(float $spezOne, int $spezVorgabeOne, float $spezTwo, int $spezVorgabeTwo, array $arShippingObj, SalesChannelContext $context, Cart $original, Cart $toCalculate): object
    {
        /*  spezOne mit spezVorgabeOne abgleichen; spezTwo mit spezVorgabeTwo abgleichen, um zu eriuieren, welche
            Versandmethode ausgewählt werden soll
        */
        foreach ($arShippingObj as $item) {
            if (str_contains(strtolower($item->getName()), 'weight')) {
                $shipingWeightObj = $item;
            } elseif (str_contains(strtolower($item->getName()), 'volume')) {
                $shipingVolumeObj = $item;
            } else {
                $shipingObjStandard = $item;
            }
        }
        //jetzt sind die ShippingObjekte aus dem Array gezogen und zugewiesen. Verwende Sie je nach Auswertung der Übergabeparameter
        if (isset($shipingVolumeObj) && $spezOne >= $spezVorgabeOne) {
            $shippingObject = $shipingVolumeObj;
        } elseif (isset($shipingWeightObj) && $spezTwo > $spezVorgabeTwo) {
            $shippingObject = $shipingWeightObj;
        } elseif (isset($shipingObjStandard)) {
            $shippingObject = $shipingObjStandard;
        }
        if (isset($shippingObject)) {
            $deliveries = $original->getDeliveries();
            $deliveries->first()->setShippingMethod($shippingObject);
            $toCalculate->setDeliveries($deliveries);
            $original->setDeliveries($deliveries);
        }
        return $shippingObject;
    }

    //jetzt wurde das Versandobjekt bestimmt. Verbleibt noch die Zuweisung an den SalesChannel.
    #[NoReturn] private function assignShippingObject(object $shippingObject, SalesChannelContext $context): void
    {
        $folder = getcwd();
        $file = 'output.txt';
        $output = $folder . DIRECTORY_SEPARATOR . $file;
        $name = $shippingObject->getName();
        file_put_contents($output, "$name shipping has been used sending product", FILE_APPEND);
        file_put_contents($output, PHP_EOL, FILE_APPEND);
        $shippingId = $shippingObject->getId();
        $contextToken = $context->getToken();
        $dataBag = new DataBag([
            'id' => $shippingId,
        ]);
        $this->contextSwitcher->update($dataBag, $context);
        $salesChannels = $this->database->readTableSalesChannel(Context::createDefaultContext());
        // Prepare the data for updating sales channels
        foreach ($salesChannels as $salesChannel) {
            $shippingMethods = $salesChannel->getShippingMethods();
            $shippingMethodIds = [];
            foreach ($shippingMethods as $shippingMethod) {
                $shippingMethodIds[] = ['id' => $shippingObject->getId()];
            }

        }
        $salesChannelData[] = [
            'id' => $salesChannel->getId(),
            'shippingMethods' => $shippingMethodIds,
        ];
        $this->database->updateSalesChannel(Context::createDefaultContext(), $salesChannelData);
    }
}