* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) * @link http://www.temando.com/ */ class GuestCartCheckoutFieldManagement implements GuestCartCheckoutFieldManagementInterface { /** * @var GuestShippingAddressManagementInterface */ private $addressManagement; /** * @var AddressRepositoryInterface */ private $addressRepository; /** * @var AddressInterfaceFactory */ private $addressFactory; /** * GuestCartCheckoutFieldManagement constructor. * @param GuestShippingAddressManagementInterface $addressManagement * @param AddressRepositoryInterface $addressRepository * @param AddressInterfaceFactory $addressFactory */ public function __construct( GuestShippingAddressManagementInterface $addressManagement, AddressRepositoryInterface $addressRepository, AddressInterfaceFactory $addressFactory ) { $this->addressManagement = $addressManagement; $this->addressRepository = $addressRepository; $this->addressFactory = $addressFactory; } /** * @param string $cartId * @param AttributeInterface[] $serviceSelection * @return void * @throws CouldNotSaveException */ public function saveCheckoutFields($cartId, $serviceSelection) { try { $shippingAddress = $this->addressManagement->get($cartId); } catch (NoSuchEntityException $exception) { throw new CouldNotSaveException(__('Unable to load shipping address for specified quote.')); } try { $address = $this->addressRepository->getByQuoteAddressId($shippingAddress->getId()); } catch (NoSuchEntityException $e) { $address = $this->addressFactory->create(['data' => [ AddressInterface::SHIPPING_ADDRESS_ID => $shippingAddress->getId() ]]); } $address->setServiceSelection($serviceSelection); $this->addressRepository->save($address); } }