* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) * @link http://www.temando.com/ */ class CartCheckoutFieldManagement implements CartCheckoutFieldManagementInterface { /** * @var ShippingAddressManagementInterface */ private $addressManagement; /** * @var AddressRepositoryInterface */ private $addressRepository; /** * @var AddressInterfaceFactory */ private $addressFactory; /** * CartCheckoutFieldManagement constructor. * @param ShippingAddressManagementInterface $addressManagement * @param AddressRepositoryInterface $addressRepository * @param AddressInterfaceFactory $addressFactory */ public function __construct( ShippingAddressManagementInterface $addressManagement, AddressRepositoryInterface $addressRepository, AddressInterfaceFactory $addressFactory ) { $this->addressManagement = $addressManagement; $this->addressRepository = $addressRepository; $this->addressFactory = $addressFactory; } /** * @param int $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.'), $exception); } 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); } }