Change Shipping Address in Checkout

Hallo zusammen,

ich komme gerade in den Genuss mein erstes Plugin für Shopware6 zu schreiben. Alles soweit klar und nun kommt für mich eine große Herausforderung. Ich möchte gerne die Shipping Address on the fly im Checkout direkt ändern.

Was habe ich bis jetzt schon gemacht?

  1. Ich habe einen Prozess, die die Adresse beim Customer angelegt, sodass ich eine eine addressId habe.
  2. Dann habe ich die addressId bis zum CartProcessor (CartProcessorInterface) mit durchgeschliffen
  3. Ich habe im Context beim Customer die activeShippingAddress gesetzt (siehe Code)
<?php declare(strict_types=1);

namespace Df\Checkout\Core\Checkout\Cart;

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\Checkout\Customer\Aggregate\CustomerAddress\CustomerAddressEntity;
use Shopware\Core\System\SalesChannel\SalesChannelContext;

class CartProcessor implements CartProcessorInterface
{
    /**
     * @inerhitDoc
     */
    public function process(
        CartDataCollection $data,
        Cart $original,
        Cart $toCalculate,
        SalesChannelContext $context,
        CartBehavior $behavior
    ): void {
        $dfShippingAddressKey = 'dfShippingAddress';
        if (
            $data->has($dfShippingAddressKey) and
            $data->get($dfShippingAddressKey) instanceof CustomerAddressEntity
        ) {
            /** @var CustomerAddressEntity $dfAddress */
            $dfAddress = $data->get($dfShippingAddressKey);
            $context->getCustomer()->setActiveShippingAddress($dfAddress);
        }
    }
}

Nun ist es so, dass wenn ich einen Reload im Checkout mache, die Adresse bei Versandadresse angezeigt wird und auch im AddressBook vom Customer ist. Allerdings wenn ich nun den Warenkorb abschicke, dann kommt die vorgehende ausgewählte Adresse.

Hat jemand von euch eine Idee, wie ich die ShippingAddress korrekt setze, sodass diese auch im Cart gespeichert wird?

Danke euch :slight_smile: