123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- <?php
- /**
- * Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License").
- * You may not use this file except in compliance with the License.
- * A copy of the License is located at
- *
- * http://aws.amazon.com/apache2.0
- *
- * or in the "license" file accompanying this file. This file is distributed
- * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
- * express or implied. See the License for the specific language governing
- * permissions and limitations under the License.
- */
- namespace Amazon\Payment\Helper;
- use Amazon\Core\Api\Data\AmazonAddressInterface;
- use Amazon\Core\Domain\AmazonAddress;
- use Magento\Customer\Api\Data\AddressInterface;
- use Magento\Customer\Api\Data\AddressInterfaceFactory;
- use Magento\Customer\Api\Data\RegionInterfaceFactory;
- use Magento\Directory\Model\RegionFactory;
- use Magento\Framework\App\Config\ScopeConfigInterface;
- class Address
- {
- /**
- * @var AddressInterfaceFactory
- */
- private $addressFactory;
- /**
- * @var RegionFactory
- */
- private $regionFactory;
- /**
- * @var RegionInterfaceFactory
- */
- private $regionDataFactory;
- /**
- * @var ScopeConfigInterface
- */
- private $scopeConfig;
- public function __construct(
- AddressInterfaceFactory $addressFactory,
- RegionFactory $regionFactory,
- RegionInterfaceFactory $regionDataFactory,
- ScopeConfigInterface $config
- ) {
- $this->addressFactory = $addressFactory;
- $this->regionFactory = $regionFactory;
- $this->regionDataFactory = $regionDataFactory;
- $this->scopeConfig = $config;
- }
- /**
- * Convert Amazon Address to Magento Address
- *
- * @param AmazonAddressInterface $amazonAddress
- *
- * @return AddressInterface
- */
- public function convertToMagentoEntity(AmazonAddressInterface $amazonAddress)
- {
- $addressLinesAllowed = (int)$this->scopeConfig->getValue(
- 'customer/address/street_lines',
- \Magento\Store\Model\ScopeInterface::SCOPE_STORE
- );
- $address = $this->addressFactory->create();
- $address->setFirstname($amazonAddress->getFirstName());
- $address->setLastname($amazonAddress->getLastName());
- $address->setCity($amazonAddress->getCity());
- $address->setPostcode($amazonAddress->getPostCode());
- $address->setTelephone($amazonAddress->getTelephone());
- $address->setCountryId($this->getCountryId($amazonAddress));
- /*
- * The number of lines in a street address is configurable via 'customer/address/street_lines'.
- * To avoid discarding information, we'll concatenate additional lines so that they fit within the configured
- * address length.
- */
- $lines = [];
- for ($i = 1; $i <= 4; $i++) {
- $line = (string) $amazonAddress->getLine($i);
- if ($i <= $addressLinesAllowed) {
- $lines[] = $line;
- } else {
- $lines[count($lines)-1] = trim($lines[count($lines)-1] . ' ' . $line);
- }
- }
- $address->setStreet(array_values($lines));
- $company = !empty($amazonAddress->getCompany()) ? $amazonAddress->getCompany() : '';
- $address->setCompany($company);
- if ($amazonAddress->getState()) {
- $address->setRegion($this->getRegionData($amazonAddress, $address->getCountryId()));
- }
- return $address;
- }
- protected function getCountryId(AmazonAddressInterface $amazonAddress)
- {
- return strtoupper($amazonAddress->getCountryCode());
- }
- protected function getRegionData(AmazonAddressInterface $amazonAddress, $countryId)
- {
- $region = $this->regionFactory->create();
- $regionData = $this->regionDataFactory->create();
- $region->loadByCode($amazonAddress->getState(), $countryId);
- if (! $region->getId()) {
- $region->loadByName($amazonAddress->getState(), $countryId);
- }
- if ($region->getId()) {
- $regionData
- ->setRegionId($region->getId())
- ->setRegionCode($region->getCode())
- ->setRegion($region->getDefaultName());
- } else {
- $regionData->setRegion($amazonAddress->getState());
- }
- return $regionData;
- }
- /**
- * Convert Magento address to array for json encode
- *
- * @param AddressInterface $address
- *
- * @return array
- */
- public function convertToArray(AddressInterface $address)
- {
- $data = [
- AddressInterface::CITY => $address->getCity(),
- AddressInterface::FIRSTNAME => $address->getFirstname(),
- AddressInterface::LASTNAME => $address->getLastname(),
- AddressInterface::COUNTRY_ID => $address->getCountryId(),
- AddressInterface::STREET => $address->getStreet(),
- AddressInterface::POSTCODE => $address->getPostcode(),
- AddressInterface::COMPANY => $address->getCompany(),
- AddressInterface::TELEPHONE => null,
- AddressInterface::REGION => null,
- AddressInterface::REGION_ID => null,
- 'region_code' => null
- ];
- if ($address->getTelephone()) {
- $data[AddressInterface::TELEPHONE] = $address->getTelephone();
- }
- if ($address->getRegion()) {
- $data[AddressInterface::REGION] = $address->getRegion()->getRegion();
- if ($address->getRegion()->getRegionId()) {
- $data[AddressInterface::REGION_ID] = $address->getRegion()->getRegionId();
- $data['region_code'] = $address->getRegion()->getRegionCode();
- }
- }
- return $data;
- }
- }
|