protected function setRegionAndCountry(AbstractAddress $address, array $data)
 {
     if (!empty($data['regionText'])) {
         $address->setRegionText($data['regionText']);
     }
     if (!empty($data['country'])) {
         $country = $this->createCountry($data['country']);
         $address->setCountry($country);
         if (!empty($data['region'])) {
             $address->setRegion($this->createRegion($data['region'], $country));
         }
     }
 }
示例#2
0
 /**
  * @param AbstractAddress|BAPRegion $source
  *
  * @return array magento correspondent fields data
  * @throws \InvalidArgumentException
  */
 public function toMagentoData($source)
 {
     $data = ['region' => null, 'region_id' => null];
     if (!$source instanceof AbstractAddress && !$source instanceof BAPRegion) {
         throw new \InvalidArgumentException('Source should be instance of AbstractAddress or Region');
     }
     if ($source instanceof AbstractAddress && !$source->getRegion()) {
         $data['region'] = $source->getRegionText();
     } elseif ($source instanceof AbstractAddress) {
         $source = $source->getRegion();
     }
     if ($source instanceof BAPRegion) {
         $magentoRegion = $this->tryGetMRByCode($source->getCombinedCode());
         if (!$magentoRegion) {
             $data['region'] = $source->getName();
         } else {
             $data['region_id'] = $magentoRegion->getRegionId();
         }
     }
     return $data;
 }
 /**
  * @dataProvider isEqualDataProvider
  *
  * @param AbstractAddress $one
  * @param mixed $two
  * @param bool $expectedResult
  */
 public function testIsEqual(AbstractAddress $one, $two, $expectedResult)
 {
     $this->assertEquals($expectedResult, $one->isEqual($two));
 }
示例#4
0
 /**
  * {@inheritdoc}
  */
 public function isEmpty()
 {
     return parent::isEmpty() && $this->types->isEmpty() && !$this->primary;
 }
示例#5
0
 /**
  * @param AbstractAddress $address
  * @param string $countryCode
  * @param int|string|null $mageRegionId
  * @throws InvalidItemException
  */
 public function updateRegionByMagentoRegionId(AbstractAddress $address, $countryCode, $mageRegionId = null)
 {
     if (!empty($mageRegionId) && empty($this->mageRegionsCache[$mageRegionId]) && is_numeric($mageRegionId)) {
         $this->mageRegionsCache[$mageRegionId] = $this->findRegionByRegionId($mageRegionId);
     }
     if (!empty($this->mageRegionsCache[$mageRegionId])) {
         /** @var Region $mageRegion */
         $mageRegion = $this->mageRegionsCache[$mageRegionId];
         $combinedCode = $mageRegion->getCombinedCode();
         $regionCode = $mageRegion->getCode();
         if (!array_key_exists($combinedCode, $this->regionsCache)) {
             $this->regionsCache[$combinedCode] = $this->loadRegionByCode($combinedCode, $countryCode, $regionCode);
         }
         /**
          * no region found in system db for corresponding magento region, use region text
          */
         if (empty($this->regionsCache[$combinedCode])) {
             $address->setRegion(null);
             $address->setRegionText($mageRegion->getName());
         } else {
             $this->regionsCache[$combinedCode] = $this->doctrineHelper->merge($this->regionsCache[$combinedCode]);
             $address->setRegion($this->regionsCache[$combinedCode]);
             $address->setRegionText(null);
         }
     } elseif ($address->getRegionText() || $address->getCountry()) {
         $address->setRegion(null);
         // unable to find corresponding region and region text is empty,
         // it's correct case for UK addresses, if country present
     } else {
         throw new InvalidItemException('Unable to handle region for address', [$address]);
     }
 }
示例#6
0
 /**
  * @param AbstractAddress $address
  * @param string          $countryCode
  *
  * @throws InvalidItemException
  * @return Country|null
  */
 public function getAddressCountryByCode(AbstractAddress $address, $countryCode)
 {
     if (!$address->getCountry()) {
         return null;
     }
     if (array_key_exists($countryCode, $this->countriesCache)) {
         if (!empty($this->countriesCache[$countryCode])) {
             $this->countriesCache[$countryCode] = $this->doctrineHelper->merge($this->countriesCache[$countryCode]);
         }
     } else {
         /** @var Country $country */
         $country = $this->doctrineHelper->findAndReplaceEntity($address->getCountry(), 'Oro\\Bundle\\AddressBundle\\Entity\\Country', 'iso2Code', ['iso2Code', 'iso3Code', 'name']);
         $this->countriesCache[$countryCode] = $country->getIso2Code() ? $country : null;
     }
     return $this->countriesCache[$countryCode];
 }