/** * {@inheritdoc} */ public function denormalize($data, $class, $format = null, array $context = []) { if (empty($data)) { return false; } /** @var Region $resultObject */ $resultObject = new $class(); if (isset($data['region_id'])) { $resultObject->setRegionId($data['region_id']); } if (isset($data['code'])) { $code = $data['code']; $resultObject->setCode($code); // Some magento region codes are already combined $countryCode = $data['countryCode']; if (strpos($code, $countryCode . BAPRegion::SEPARATOR) === 0) { $combinedCode = $code; } else { $combinedCode = BAPRegion::getRegionCombinedCode($countryCode, $code); } $resultObject->setCombinedCode($combinedCode); $resultObject->setCountryCode($countryCode); } // magento can bring empty name, region will be skipped in strategy if (isset($data['name'])) { $resultObject->setName($data['name']); } return $resultObject; }
/** * @param array $regionData * * @return null|Region */ protected function getRegion(array $regionData) { if (strpos($regionData['code'], $regionData['country_id'] . BAPRegion::SEPARATOR) === 0) { $combinedCode = $regionData['code']; } else { $combinedCode = BAPRegion::getRegionCombinedCode($regionData['country_id'], $regionData['code']); } /** @var $region Region */ $region = $this->regionRepository->findOneBy(array('combinedCode' => $combinedCode)); if (!$region) { $region = new Region($combinedCode); $region->setCode($regionData['code'])->setRegionId($regionData['region_id'])->setCombinedCode($combinedCode)->setCountryCode($regionData['country_id']); } $region->setName($regionData['default_name']); return $region; }
/** * @param string $combinedCode * @param string $countryCode * @param string $code * * @return BAPRegion */ public function loadRegionByCode($combinedCode, $countryCode, $code) { $regionClass = 'Oro\\Bundle\\AddressBundle\\Entity\\Region'; $countryClass = 'Oro\\Bundle\\AddressBundle\\Entity\\Country'; // Simply search region by combinedCode $region = $this->doctrineHelper->getEntityByCriteria(['combinedCode' => $combinedCode], $regionClass); if (!$region) { // Some region codes in magento are filled by region names $em = $this->doctrineHelper->getEntityManager($countryClass); $country = $em->getReference($countryClass, $countryCode); $region = $this->doctrineHelper->getEntityByCriteria(['country' => $country, 'name' => $combinedCode], $regionClass); } if (!$region) { // Some numeric regions codes may be padded by 0 in ISO format and not padded in magento // As example FR-1 in magento and FR-01 in ISO $region = $this->doctrineHelper->getEntityByCriteria(['combinedCode' => BAPRegion::getRegionCombinedCode($countryCode, str_pad($code, 2, '0', STR_PAD_LEFT))], $regionClass); } return $region; }
public function testGetRegionCombinedCode() { $this->assertEquals('US-CA', Region::getRegionCombinedCode('US', 'CA')); }