/** * Convert ValidAddress to QuoteAddressInterface * * @param \AvaTax\ValidAddress $address * @param QuoteAddressInterface $originalAddress * @return QuoteAddressInterface */ public function convertAvaTaxValidAddressToQuoteAddress(\AvaTax\ValidAddress $address, \Magento\Quote\Api\Data\AddressInterface $originalAddress) { $street = []; if ($address->getLine1()) { $street[] = $address->getLine1(); } if ($address->getLine2()) { $street[] = $address->getLine2(); } if ($address->getLine3()) { $street[] = $address->getLine3(); } // Not using line 4, as it returns a concatenation of city, state, and zip (e.g., BAINBRIDGE IS WA 98110-2450) // Get data from original address so that information like name and telephone will be preserved $data = array_merge($originalAddress->getData(), [QuoteAddressInterface::KEY_COUNTRY_ID => $address->getCountry(), QuoteAddressInterface::KEY_REGION_CODE => $address->getRegion(), QuoteAddressInterface::KEY_STREET => $street, QuoteAddressInterface::KEY_POSTCODE => $address->getPostalCode(), QuoteAddressInterface::KEY_CITY => $address->getCity()]); $region = $this->getRegionByCodeAndCountry($address->getRegion(), $address->getCountry()); if (!is_null($region)) { $data[QuoteAddressInterface::KEY_REGION_ID] = $region->getId(); $data[QuoteAddressInterface::KEY_REGION] = $region; } return $this->quoteAddressFactory->create(['data' => $data]); }
/** * Set shipping address * * @param \Magento\Quote\Api\Data\AddressInterface $address * @return $this */ public function setShippingAddress(\Magento\Quote\Api\Data\AddressInterface $address = null) { if ($this->getIsMultiShipping()) { $this->addAddress($address->setAddressType(Address::TYPE_SHIPPING)); } else { $old = $this->getShippingAddress(); if (!empty($old)) { $old->addData($address->getData()); } else { $this->addAddress($address->setAddressType(Address::TYPE_SHIPPING)); } } return $this; }
/** * @inheritdoc */ public function estimateByExtendedAddress($cartId, AddressInterface $address) { /** @var \Magento\Quote\Model\Quote $quote */ $quote = $this->quoteRepository->getActive($cartId); // no methods applicable for empty carts or carts with virtual products if ($quote->isVirtual() || 0 == $quote->getItemsCount()) { return []; } return $this->getShippingMethods($quote, $address->getData()); }