fix #97 Fixed error when validating non-crm customers address

This commit is contained in:
max-baranikov 2021-04-05 14:53:57 +03:00 committed by GitHub
parent 520149394e
commit 7fd6ff80a2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 47 additions and 42 deletions

View File

@ -1,3 +1,8 @@
## v3.2.5
* Исправлена ошибка брошенных корзин для Prestashop версии ниже 1.7.1
* Исправлена ошибка при проверке адреса клиента
* Исправлена ошибка подключения к базе данных при запуске тестов
## v3.2.4
* Доработана выгрузка Releases архивов в Git Actions

View File

@ -1 +1 @@
3.2.4
3.2.5

View File

@ -117,7 +117,7 @@ class RetailCRM extends Module
{
$this->name = 'retailcrm';
$this->tab = 'export';
$this->version = '3.2.4';
$this->version = '3.2.5';
$this->author = 'DIGITAL RETAIL TECHNOLOGIES SL';
$this->displayName = $this->l('retailCRM');
$this->description = $this->l('Integration module for retailCRM');
@ -367,6 +367,10 @@ class RetailCRM extends Module
/** @var Customer|CustomerCore|null $customer */
$customer = isset($params['customer']) ? $params['customer'] : null;
if (empty($customer)) {
return false;
}
/** @var Cart|CartCore|null $cart */
$cart = isset($params['cart']) ? $params['cart'] : null;
@ -379,62 +383,58 @@ class RetailCRM extends Module
/** @var Address|\AddressCore|array $address */
$address = array();
if (empty($customer)) {
return false;
}
// Necessary part if we don't want to overwrite other phone numbers.
if (isset($customerSend['externalId'])) {
$customerData = $this->api->customersGet($customerSend['externalId']);
// Necessary part if we don't want to overwrite other phone numbers.
if ($customerData instanceof RetailcrmApiResponse
&& $customerData->isSuccessful()
&& $customerData->offsetExists('customer')
) {
$customerSend['phones'] = $customerData['customer']['phones'];
}
}
// Workaround: PrestaShop will return OLD address data, before editing.
// In order to circumvent this we are using post data to fill new address object.
if (Tools::getIsset('submitAddress')
&& Tools::getIsset('id_customer')
&& Tools::getIsset('id_address')
) {
$address = new Address(Tools::getValue('id_address'));
// Workaround: PrestaShop will return OLD address data, before editing.
// In order to circumvent this we are using post data to fill new address object.
if (Tools::getIsset('submitAddress')
&& Tools::getIsset('id_customer')
&& Tools::getIsset('id_address')
) {
$address = new Address(Tools::getValue('id_address'));
foreach (array_keys(Address::$definition['fields']) as $field) {
if (property_exists($address, $field) && Tools::getIsset($field)) {
$address->$field = Tools::getValue($field);
foreach (array_keys(Address::$definition['fields']) as $field) {
if (property_exists($address, $field) && Tools::getIsset($field)) {
$address->$field = Tools::getValue($field);
}
}
}
} else {
$addresses = $customer->getAddresses($this->default_lang);
$address = array_shift($addresses);
}
if (!empty($address)) {
$addressBuilder->setMode(RetailcrmAddressBuilder::MODE_CUSTOMER);
if (is_object($address)) {
$addressBuilder->setAddress($address);
} else {
$addressBuilder->setAddressId($address['id_address']);
$addresses = $customer->getAddresses($this->default_lang);
$address = array_shift($addresses);
}
$addressBuilder->build();
} elseif (!empty($cart)) {
$addressBuilder
->setMode(RetailcrmAddressBuilder::MODE_ORDER_DELIVERY)
->setAddressId($cart->id_address_invoice)
->build();
if (!empty($address)) {
$addressBuilder->setMode(RetailcrmAddressBuilder::MODE_CUSTOMER);
if (is_object($address)) {
$addressBuilder->setAddress($address);
} else {
$addressBuilder->setAddressId($address['id_address']);
}
$addressBuilder->build();
} elseif (!empty($cart)) {
$addressBuilder
->setMode(RetailcrmAddressBuilder::MODE_ORDER_DELIVERY)
->setAddressId($cart->id_address_invoice)
->build();
}
$customerSend = RetailcrmTools::mergeCustomerAddress($customerSend, $addressBuilder->getDataArray());
$this->api->customersEdit($customerSend);
return true;
}
$customerSend = RetailcrmTools::mergeCustomerAddress($customerSend, $addressBuilder->getDataArray());
$this->api->customersEdit($customerSend);
return true;
}
return false;