* @copyright 2020 DIGITAL RETAIL TECHNOLOGIES SL * @license https://opensource.org/licenses/MIT The MIT License * * Don't forget to prefix your containers with your own identifier * to avoid any conflicts with others containers. */ class RetailcrmCustomerAddressBuilder extends RetailcrmAbstractBuilder implements RetailcrmBuilderInterface { /** * @var Address|AddressCore customerAddress */ private $customerAddress; /** * @var array $dataCrm */ private $dataCrm; /** * @var int $idCustomer */ private $idCustomer; /** * @var string $firstName */ private $firstName; /** * @var string $lastName */ private $lastName; /** * @var string $phone */ private $phone; /** * @var string $alias */ private $alias; /** * RetailcrmCustomerAddressBuilder constructor. */ public function __construct() { $this->reset(); } /** * @param Address|AddressCore $customerAddress * @return RetailcrmCustomerAddressBuilder */ public function setCustomerAddress($customerAddress) { $this->customerAddress = $customerAddress; return $this; } public function setDataCrm($dataCrm) { $this->dataCrm = $dataCrm; return $this; } /** * @param int $idCustomer * @return RetailcrmCustomerAddressBuilder */ public function setIdCustomer($idCustomer) { $this->idCustomer = $idCustomer; return $this; } /** * @param string $alias * @return RetailcrmCustomerAddressBuilder */ public function setAlias($alias) { $this->alias = $alias; return $this; } /** * @param string $firstName * @return RetailcrmCustomerAddressBuilder */ public function setFirstName($firstName) { $this->firstName = $firstName; return $this; } /** * @param string $lastName * @return RetailcrmCustomerAddressBuilder */ public function setLastName($lastName) { $this->lastName = $lastName; return $this; } /** * @param string $phone * @return RetailcrmCustomerAddressBuilder */ public function setPhone($phone) { $this->phone = $phone; return $this; } public function getData() { if (!empty($this->customerAddress)) { return $this->customerAddress; } return array(); } public function reset() { $this->customerAddress = new Address(); return $this; } public function build() { if (empty($this->customerAddress)) { $this->customerAddress = new Address(); } $this->customerAddress->id_customer = $this->idCustomer; $this->setAddressField('alias', $this->alias, 'default'); $this->setAddressField('lastname', $this->lastName, ''); $this->setAddressField('firstname', $this->firstName, ''); $addressLine = $this->buildAddressLine(); $this->setAddressField('address1', $addressLine[0], '--'); $this->setAddressField('address2', $addressLine[1], ''); $countryIso = isset($this->dataCrm['countryIso']) ? Country::getByIso($this->dataCrm['countryIso']) : null; $this->setAddressField('id_country', $countryIso, Configuration::get('PS_COUNTRY_DEFAULT')); if (isset($this->dataCrm['city'])) { $this->setAddressField('city', $this->dataCrm['city'], '--'); } if (isset($this->dataCrm['index'])) { $this->setAddressField('postcode', $this->dataCrm['index'], ''); } if (isset($this->dataCrm['region'])) { $state = State::getIdByName($this->dataCrm['region']); if (!empty($state)) { $this->customerAddress->id_state = $state; } } $this->setAddressField('phone', $this->phone, ''); $this->customerAddress = RetailcrmTools::filter( 'RetailcrmFilterSaveCustomerAddress', $this->customerAddress, array( 'dataCrm' => $this->dataCrm )); return $this; } private function setAddressField($field, $value, $default = null) { if (!property_exists($this->customerAddress, $field)) { throw new InvalidArgumentException("Property $field not exist in the object"); } if ($value !== null) { $this->customerAddress->$field = $value; } elseif (empty($this->customerAddress->$field)) { $this->customerAddress->$field = $default; } } private function buildAddressLine() { $addressLine = [ null, null ]; if (isset($this->dataCrm['text'])) { $addressLine = explode(RetailcrmAddressBuilder::ADDRESS_LINE_DIVIDER, $this->dataCrm['text'], 2); if (count($addressLine) == 1) { $addressLine[] = null; } } return $addressLine; } }