Compare commits
12 commits
Author | SHA1 | Date | |
---|---|---|---|
|
8def052f47 | ||
|
48fe118be9 | ||
|
c04286f62b | ||
|
bcefce1c4d | ||
|
d2d4866c13 | ||
|
d45ddf3fbf | ||
|
92dd5cedee | ||
|
ee90b20a65 | ||
|
ecd0dc03c0 | ||
|
086862ea87 | ||
|
aad19442a4 | ||
|
e43221c76d |
13 changed files with 610 additions and 255 deletions
12
README.md
12
README.md
|
@ -1,14 +1,14 @@
|
||||||
Magento module
|
Magento module (THIS VERSION IS DEPRECATED!)
|
||||||
==============
|
============================================
|
||||||
|
|
||||||
Magento module for interaction with [RetailCRM](http://www.retailcrm.ru) through [REST API](http://retailcrm.ru/docs/Разработчики).
|
Magento 1.9.x module for interaction with [retailCRM](https://www.retailcrm.pro) through [REST API](https://www.retailcrm.pro/docs/Developers/Index).
|
||||||
|
|
||||||
Module allows:
|
Module allows:
|
||||||
|
|
||||||
* Exchange the orders with retailCRM
|
* Exchange the orders with retailCRM
|
||||||
* Configure relations between dictionaries of RetailCRM and Magento (statuses, payments, delivery types and etc)
|
* Configure relations between dictionaries of retailCRM and Magento (statuses, payments, delivery types and etc)
|
||||||
* Generate [ICML](http://docs.retailcrm.ru/index.php?n=Разработчики.ФорматICML) (Intaro Markup Language) for catalog loading by RetailCRM
|
* Generate [ICML](https://www.retailcrm.pro/docs/Developers/ICML) (Intaro Markup Language) for catalog loading by retailCRM
|
||||||
|
|
||||||
ICML
|
ICML
|
||||||
|
|
||||||
By default ICML file is being generated by module every 4 hours. You can find file in the web root folder with name "retailcrm_{{shop_code}}.xml". For example, http://retailcrm.ru/retailcrm_default.xml
|
By default ICML file is being generated by module every 4 hours. You can find file in the web root folder with name "retailcrm_{{shop_code}}.xml". For example, http://example.com/retailcrm_default.xml
|
||||||
|
|
|
@ -0,0 +1,37 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
class Retailcrm_Retailcrm_Block_Adminhtml_System_Config_Backend_Api_Key extends Mage_Core_Model_Config_Data
|
||||||
|
{
|
||||||
|
protected function _beforeSave()
|
||||||
|
{
|
||||||
|
if ($this->isValueChanged()) {
|
||||||
|
$api_url = $this->getFieldsetDataValue('api_url');
|
||||||
|
$api_key = $this->getValue();
|
||||||
|
|
||||||
|
if (!$api_key) {
|
||||||
|
Mage::throwException(Mage::helper('retailcrm')->__('Field API KEY could not be empty'));
|
||||||
|
}
|
||||||
|
|
||||||
|
$api_client = new Retailcrm_Retailcrm_Model_ApiClient(
|
||||||
|
$api_url,
|
||||||
|
$api_key
|
||||||
|
);
|
||||||
|
|
||||||
|
try {
|
||||||
|
$response = $api_client->sitesList();
|
||||||
|
} catch (Retailcrm_Retailcrm_Model_Exception_CurlException $curlException) {
|
||||||
|
Mage::throwException(Mage::helper('retailcrm')->__($curlException->getMessage()));
|
||||||
|
} catch (Retailcrm_Retailcrm_Model_Exception_InvalidJsonException $invalidJsonException) {
|
||||||
|
Mage::throwException(Mage::helper('retailcrm')->__($invalidJsonException->getMessage()));
|
||||||
|
} catch (\InvalidArgumentException $invalidArgumentException) {
|
||||||
|
Mage::throwException(Mage::helper('retailcrm')->__($invalidArgumentException->getMessage()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($response['errorMsg'])) {
|
||||||
|
Mage::throwException(Mage::helper('retailcrm')->__($response['errorMsg']));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,42 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
class Retailcrm_Retailcrm_Block_Adminhtml_System_Config_Backend_Api_Url extends Mage_Core_Model_Config_Data
|
||||||
|
{
|
||||||
|
protected function _beforeSave()
|
||||||
|
{
|
||||||
|
if ($this->isValueChanged()) {
|
||||||
|
$api_url = $this->getValue();
|
||||||
|
$api_key = $this->getFieldsetDataValue('api_key');
|
||||||
|
|
||||||
|
if (!$api_url) {
|
||||||
|
Mage::throwException(Mage::helper('retailcrm')->__('Field API URL could not be empty'));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (false === stripos($api_url, 'https://')) {
|
||||||
|
$api_url = str_replace("http://", "https://", $api_url);
|
||||||
|
$this->setValue($api_url);
|
||||||
|
}
|
||||||
|
|
||||||
|
$api_client = new Retailcrm_Retailcrm_Model_ApiClient(
|
||||||
|
$api_url,
|
||||||
|
$api_key
|
||||||
|
);
|
||||||
|
|
||||||
|
try {
|
||||||
|
$response = $api_client->sitesList();
|
||||||
|
} catch (Retailcrm_Retailcrm_Model_Exception_CurlException $curlException) {
|
||||||
|
Mage::throwException(Mage::helper('retailcrm')->__($curlException->getMessage()));
|
||||||
|
} catch (Retailcrm_Retailcrm_Model_Exception_InvalidJsonException $invalidJsonException) {
|
||||||
|
Mage::throwException(Mage::helper('retailcrm')->__($invalidJsonException->getMessage()));
|
||||||
|
} catch (\InvalidArgumentException $invalidArgumentException) {
|
||||||
|
Mage::throwException(Mage::helper('retailcrm')->__($invalidArgumentException->getMessage()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($response['errorMsg'])) {
|
||||||
|
Mage::throwException(Mage::helper('retailcrm')->__($response['errorMsg']));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
}
|
|
@ -6,7 +6,7 @@ class Retailcrm_Retailcrm_Block_Adminhtml_System_Config_Form_Fieldset_Base exten
|
||||||
protected $_apiKey;
|
protected $_apiKey;
|
||||||
protected $_apiUrl;
|
protected $_apiUrl;
|
||||||
protected $_isCredentialCorrect;
|
protected $_isCredentialCorrect;
|
||||||
|
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
parent::__construct();
|
parent::__construct();
|
||||||
|
@ -14,30 +14,9 @@ class Retailcrm_Retailcrm_Block_Adminhtml_System_Config_Form_Fieldset_Base exten
|
||||||
$this->_apiUrl = Mage::getStoreConfig('retailcrm/general/api_url');
|
$this->_apiUrl = Mage::getStoreConfig('retailcrm/general/api_url');
|
||||||
$this->_apiKey = Mage::getStoreConfig('retailcrm/general/api_key');
|
$this->_apiKey = Mage::getStoreConfig('retailcrm/general/api_key');
|
||||||
$this->_isCredentialCorrect = false;
|
$this->_isCredentialCorrect = false;
|
||||||
|
|
||||||
if (!empty($this->_apiUrl) && !empty($this->_apiKey)) {
|
if (!empty($this->_apiUrl) && !empty($this->_apiKey)) {
|
||||||
if (false === stripos($this->_apiUrl, 'https://')) {
|
$this->_isCredentialCorrect = true;
|
||||||
$this->_apiUrl = str_replace("http://", "https://", $this->_apiUrl);
|
|
||||||
Mage::getModel('core/config')->saveConfig('retailcrm/general/api_url', $this->_apiUrl);
|
|
||||||
}
|
|
||||||
|
|
||||||
$client = new Retailcrm_Retailcrm_Model_ApiClient(
|
|
||||||
$this->_apiUrl,
|
|
||||||
$this->_apiKey
|
|
||||||
);
|
|
||||||
|
|
||||||
try {
|
|
||||||
$response = $client->sitesList();
|
|
||||||
} catch (Retailcrm_Retailcrm_Model_Exception_CurlException $e) {
|
|
||||||
Mage::log($e->getMessage());
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($response->isSuccessful()) {
|
|
||||||
$this->_isCredentialCorrect = true;
|
|
||||||
|
|
||||||
if($response['success'] != 1) {
|
|
||||||
Mage::getModel('core/config')->saveConfig('retailcrm/general/api_url', '');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,85 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
class Retailcrm_Retailcrm_Block_Adminhtml_System_Config_Form_Fieldset_Site extends Retailcrm_Retailcrm_Block_Adminhtml_System_Config_Form_Fieldset_Base
|
||||||
|
{
|
||||||
|
public function render(Varien_Data_Form_Element_Abstract $element)
|
||||||
|
{
|
||||||
|
$html = $this->_getHeaderHtml($element);
|
||||||
|
|
||||||
|
if (!empty($this->_apiUrl) && !empty($this->_apiKey) && $this->_isCredentialCorrect) {
|
||||||
|
$html .= $this->_getFieldHtml($element);
|
||||||
|
} else {
|
||||||
|
$html .= '<div style="margin-left: 15px;"><b><i>Please check your API Url & API Key</i></b></div>';
|
||||||
|
}
|
||||||
|
|
||||||
|
$html .= $this->_getFooterHtml($element);
|
||||||
|
return $html;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function _getFieldRenderer()
|
||||||
|
{
|
||||||
|
if (empty($this->_fieldRenderer)) {
|
||||||
|
$this->_fieldRenderer = Mage::getBlockSingleton('adminhtml/system_config_form_field');
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->_fieldRenderer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
protected function _getValues()
|
||||||
|
{
|
||||||
|
if (!empty($this->_apiUrl) && !empty($this->_apiKey) && $this->_isCredentialCorrect) {
|
||||||
|
$client = new Retailcrm_Retailcrm_Model_ApiClient(
|
||||||
|
$this->_apiUrl,
|
||||||
|
$this->_apiKey
|
||||||
|
);
|
||||||
|
|
||||||
|
try {
|
||||||
|
$sites = $client->sitesList();
|
||||||
|
} catch (Retailcrm_Retailcrm_Model_Exception_CurlException $e) {
|
||||||
|
Mage::log($e->getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($sites->isSuccessful()) {
|
||||||
|
if (empty($this->_values)) {
|
||||||
|
foreach ($sites['sites'] as $site) {
|
||||||
|
$this->_values[] = array('label'=>Mage::helper('adminhtml')->__($site['name']), 'value'=>$site['code']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->_values;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function _getFieldHtml($fieldset)
|
||||||
|
{
|
||||||
|
$configData = $this->getConfigData();
|
||||||
|
|
||||||
|
$path = 'retailcrm/site/default';
|
||||||
|
if (isset($configData[$path])) {
|
||||||
|
$data = $configData[$path];
|
||||||
|
$inherit = false;
|
||||||
|
} else {
|
||||||
|
$data = (int)(string)$this->getForm()->getConfigRoot()->descend($path);
|
||||||
|
$inherit = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
$field = $fieldset->addField(
|
||||||
|
'site_default', 'select',
|
||||||
|
array(
|
||||||
|
'name' => 'groups[site][fields][default][value]',
|
||||||
|
'label' => 'Default',
|
||||||
|
'value' => $data,
|
||||||
|
'values' => $this->_getValues(),
|
||||||
|
'inherit' => $inherit,
|
||||||
|
'can_use_default_value' => 1,
|
||||||
|
'can_use_website_value' => 1
|
||||||
|
)
|
||||||
|
)->setRenderer($this->_getFieldRenderer());
|
||||||
|
|
||||||
|
return $field->toHtml();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,89 @@
|
||||||
|
<?php
|
||||||
|
class Retailcrm_Retailcrm_Block_Adminhtml_System_Config_Form_Fieldset_Sites extends Retailcrm_Retailcrm_Block_Adminhtml_System_Config_Form_Fieldset_Base
|
||||||
|
{
|
||||||
|
public function render(Varien_Data_Form_Element_Abstract $element)
|
||||||
|
{
|
||||||
|
$html = $this->_getHeaderHtml($element);
|
||||||
|
|
||||||
|
if (!empty($this->_apiUrl) && !empty($this->_apiKey) && $this->_isCredentialCorrect) {
|
||||||
|
$websiteCode = Mage::app()->getRequest()->getParam('website');
|
||||||
|
$website = Mage::app()->getWebsite()->load($websiteCode);
|
||||||
|
|
||||||
|
foreach ($website->getStoreCollection() as $store) {
|
||||||
|
$html .= $this->_getFieldHtml($element, $store);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$html .= '<div style="margin-left: 15px;"><b><i>Please check your API Url & API Key</i></b></div>';
|
||||||
|
}
|
||||||
|
|
||||||
|
$html .= $this->_getFooterHtml($element);
|
||||||
|
return $html;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function _getFieldRenderer()
|
||||||
|
{
|
||||||
|
if (empty($this->_fieldRenderer)) {
|
||||||
|
$this->_fieldRenderer = Mage::getBlockSingleton('adminhtml/system_config_form_field');
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->_fieldRenderer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
protected function _getValues()
|
||||||
|
{
|
||||||
|
if (!empty($this->_apiUrl) && !empty($this->_apiKey) && $this->_isCredentialCorrect) {
|
||||||
|
$client = new Retailcrm_Retailcrm_Model_ApiClient(
|
||||||
|
$this->_apiUrl,
|
||||||
|
$this->_apiKey
|
||||||
|
);
|
||||||
|
|
||||||
|
try {
|
||||||
|
$sites = $client->sitesList();
|
||||||
|
} catch (Retailcrm_Retailcrm_Model_Exception_CurlException $e) {
|
||||||
|
Mage::log($e->getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($sites->isSuccessful()) {
|
||||||
|
if (empty($this->_values)) {
|
||||||
|
foreach ($sites['sites'] as $site) {
|
||||||
|
$this->_values[] = array('label'=>Mage::helper('adminhtml')->__($site['name']), 'value'=>$site['code']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->_values;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function _getFieldHtml($fieldset, $group)
|
||||||
|
{
|
||||||
|
$configData = $this->getConfigData();
|
||||||
|
|
||||||
|
$path = 'retailcrm/sites/' . $group->getCode();
|
||||||
|
if (isset($configData[$path])) {
|
||||||
|
$data = $configData[$path];
|
||||||
|
$inherit = false;
|
||||||
|
} else {
|
||||||
|
$data = (int)(string)$this->getForm()->getConfigRoot()->descend($path);
|
||||||
|
$inherit = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
$field = $fieldset->addField(
|
||||||
|
'sites_' . $group->getCode(), 'select',
|
||||||
|
array(
|
||||||
|
'name' => 'groups[sites][fields][' . $group->getCode() . '][value]',
|
||||||
|
'label' => $group->getName(),
|
||||||
|
'value' => $data,
|
||||||
|
'values' => $this->_getValues(),
|
||||||
|
'inherit' => $inherit,
|
||||||
|
'can_use_default_value' => 1,
|
||||||
|
'can_use_website_value' => 1
|
||||||
|
)
|
||||||
|
)->setRenderer($this->_getFieldRenderer());
|
||||||
|
|
||||||
|
return $field->toHtml();
|
||||||
|
}
|
||||||
|
}
|
|
@ -37,7 +37,75 @@ class Retailcrm_Retailcrm_Helper_Data extends Mage_Core_Helper_Abstract
|
||||||
*/
|
*/
|
||||||
const XML_API_KEY = 'retailcrm/general/api_key';
|
const XML_API_KEY = 'retailcrm/general/api_key';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
const XML_SITES = 'retailcrm/sites/';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
const XML_SITE = 'retailcrm/site/default';
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get site code
|
||||||
|
*
|
||||||
|
* @param Mage_Core_Model_Store $store
|
||||||
|
*
|
||||||
|
* @return mixed|null
|
||||||
|
*/
|
||||||
|
public function getSite($store)
|
||||||
|
{
|
||||||
|
if (!$store instanceof Mage_Core_Model_Store
|
||||||
|
&& is_int($store)
|
||||||
|
) {
|
||||||
|
$store = Mage::app()->getStore($store);
|
||||||
|
}
|
||||||
|
|
||||||
|
$website = $store->getWebsite();
|
||||||
|
$site = $website->getConfig(self::XML_SITES . $store->getCode());
|
||||||
|
|
||||||
|
if ($site) {
|
||||||
|
return $site;
|
||||||
|
} else {
|
||||||
|
$site = Mage::getStoreConfig(self::XML_SITE);
|
||||||
|
|
||||||
|
if ($site) {
|
||||||
|
return $site;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getMappingSites() {
|
||||||
|
$sites = array();
|
||||||
|
$webSites = Mage::app()->getWebsites();
|
||||||
|
|
||||||
|
foreach ($webSites as $webSite) {
|
||||||
|
$storesFromSite = $webSite->getStores();
|
||||||
|
|
||||||
|
foreach ($storesFromSite as $store) {
|
||||||
|
$config = $webSite->getConfig(self::XML_SITES . $store->getCode());
|
||||||
|
|
||||||
|
if ($config) {
|
||||||
|
$sites[$config] = $store->getCode();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
unset($storesFromSite);
|
||||||
|
}
|
||||||
|
|
||||||
|
unset($webSites);
|
||||||
|
|
||||||
|
return $sites;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
* Get api url
|
* Get api url
|
||||||
*
|
*
|
||||||
* @param Mage_Core_Model_Store $store store instance
|
* @param Mage_Core_Model_Store $store store instance
|
||||||
|
|
|
@ -31,6 +31,7 @@ class Retailcrm_Retailcrm_Model_Customer extends Retailcrm_Retailcrm_Model_Excha
|
||||||
'lastName' => $data->getLastname(),
|
'lastName' => $data->getLastname(),
|
||||||
'createdAt' => Mage::getSingleton('core/date')->date()
|
'createdAt' => Mage::getSingleton('core/date')->date()
|
||||||
);
|
);
|
||||||
|
$this->_api->setSite(Mage::helper('retailcrm')->getSite($data->getStore()));
|
||||||
$this->_api->customersEdit($customer);
|
$this->_api->customersEdit($customer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -44,7 +45,7 @@ class Retailcrm_Retailcrm_Model_Customer extends Retailcrm_Retailcrm_Model_Excha
|
||||||
*/
|
*/
|
||||||
public function customersExport()
|
public function customersExport()
|
||||||
{
|
{
|
||||||
$customers = array();
|
$customersSites = array();
|
||||||
$customerCollection = Mage::getModel('customer/customer')
|
$customerCollection = Mage::getModel('customer/customer')
|
||||||
->getCollection()
|
->getCollection()
|
||||||
->addAttributeToSelect('email')
|
->addAttributeToSelect('email')
|
||||||
|
@ -57,19 +58,23 @@ class Retailcrm_Retailcrm_Model_Customer extends Retailcrm_Retailcrm_Model_Excha
|
||||||
'firstName' => $customerData->getData('firstname'),
|
'firstName' => $customerData->getData('firstname'),
|
||||||
'lastName' => $customerData->getData('lastname')
|
'lastName' => $customerData->getData('lastname')
|
||||||
);
|
);
|
||||||
$customers[] = $customer;
|
|
||||||
|
$customersSites[$customerData->getStore()->getId()][] = $customer;
|
||||||
}
|
}
|
||||||
|
|
||||||
unset($customerCollection);
|
unset($customerCollection);
|
||||||
$chunked = array_chunk($customers, 50);
|
|
||||||
unset($customers);
|
foreach ($customersSites as $storeId => $customers) {
|
||||||
foreach ($chunked as $chunk) {
|
$chunked = array_chunk($customers, 50);
|
||||||
$this->_api->customersUpload($chunk);
|
unset($customers);
|
||||||
time_nanosleep(0, 250000000);
|
foreach ($chunked as $chunk) {
|
||||||
|
$this->_api->customersUpload($chunk, Mage::helper('retailcrm')->getSite($storeId));
|
||||||
|
time_nanosleep(0, 250000000);
|
||||||
|
}
|
||||||
|
|
||||||
|
unset($chunked);
|
||||||
}
|
}
|
||||||
|
|
||||||
unset($chunked);
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,9 +6,11 @@ class Retailcrm_Retailcrm_Model_Exchange
|
||||||
protected $_apiUrl;
|
protected $_apiUrl;
|
||||||
protected $_config;
|
protected $_config;
|
||||||
protected $_api;
|
protected $_api;
|
||||||
|
private $_helper;
|
||||||
|
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
|
$this->_helper = Mage::helper('retailcrm');
|
||||||
$this->_apiUrl = Mage::getStoreConfig('retailcrm/general/api_url');
|
$this->_apiUrl = Mage::getStoreConfig('retailcrm/general/api_url');
|
||||||
$this->_apiKey = Mage::getStoreConfig('retailcrm/general/api_key');
|
$this->_apiKey = Mage::getStoreConfig('retailcrm/general/api_key');
|
||||||
|
|
||||||
|
@ -19,7 +21,7 @@ class Retailcrm_Retailcrm_Model_Exchange
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get orders history & modify orders into shop
|
* Get orders history & modify orders into shop
|
||||||
*
|
*
|
||||||
|
@ -29,12 +31,12 @@ class Retailcrm_Retailcrm_Model_Exchange
|
||||||
$runTime = $this->getExchangeTime($this->_config['general']['history']);
|
$runTime = $this->getExchangeTime($this->_config['general']['history']);
|
||||||
$historyFilter = array();
|
$historyFilter = array();
|
||||||
$historiOrder = array();
|
$historiOrder = array();
|
||||||
|
|
||||||
$historyStart = Mage::getStoreConfig('retailcrm/general/fhistory');
|
$historyStart = Mage::getStoreConfig('retailcrm/general/fhistory');
|
||||||
if($historyStart && $historyStart > 0) {
|
if($historyStart && $historyStart > 0) {
|
||||||
$historyFilter['sinceId'] = $historyStart;
|
$historyFilter['sinceId'] = $historyStart;
|
||||||
}
|
}
|
||||||
|
|
||||||
while(true) {
|
while(true) {
|
||||||
try {
|
try {
|
||||||
$response = $this->_api->ordersHistory($historyFilter);
|
$response = $this->_api->ordersHistory($historyFilter);
|
||||||
|
@ -44,38 +46,38 @@ class Retailcrm_Retailcrm_Model_Exchange
|
||||||
Mage::log(
|
Mage::log(
|
||||||
sprintf("Orders history error: [HTTP status %s] %s", $response->getStatusCode(), $response->getErrorMsg())
|
sprintf("Orders history error: [HTTP status %s] %s", $response->getStatusCode(), $response->getErrorMsg())
|
||||||
);
|
);
|
||||||
|
|
||||||
if (isset($response['errors'])) {
|
if (isset($response['errors'])) {
|
||||||
Mage::log(implode(' :: ', $response['errors']));
|
Mage::log(implode(' :: ', $response['errors']));
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} catch (Retailcrm_Retailcrm_Model_Exception_CurlException $e) {
|
} catch (Retailcrm_Retailcrm_Model_Exception_CurlException $e) {
|
||||||
Mage::log($e->getMessage());
|
Mage::log($e->getMessage());
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$orderH = isset($response['history']) ? $response['history'] : array();
|
$orderH = isset($response['history']) ? $response['history'] : array();
|
||||||
if(count($orderH) == 0) {
|
if (count($orderH) == 0) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
$historiOrder = array_merge($historiOrder, $orderH);
|
$historiOrder = array_merge($historiOrder, $orderH);
|
||||||
$end = array_pop($response->history);
|
$end = array_pop($response->history);
|
||||||
$historyFilter['sinceId'] = $end['id'];
|
$historyFilter['sinceId'] = $end['id'];
|
||||||
|
|
||||||
if($response['pagination']['totalPageCount'] == 1) {
|
if($response['pagination']['totalPageCount'] == 1) {
|
||||||
Mage::getModel('core/config')->saveConfig('retailcrm/general/fhistory', $historyFilter['sinceId']);
|
Mage::getModel('core/config')->saveConfig('retailcrm/general/fhistory', $historyFilter['sinceId']);
|
||||||
$orders = self::assemblyOrder($historiOrder);
|
$orders = self::assemblyOrder($historiOrder);
|
||||||
$this->processOrders($orders, $nowTime);
|
$this->processOrders($orders, $nowTime);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}//endwhile
|
}//endwhile
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param array $orders
|
* @param array $orders
|
||||||
*/
|
*/
|
||||||
|
@ -87,27 +89,27 @@ class Retailcrm_Retailcrm_Model_Exchange
|
||||||
);
|
);
|
||||||
|
|
||||||
foreach ($orders as $order) {
|
foreach ($orders as $order) {
|
||||||
if(!empty($order['externalId'])) {
|
if(!empty($order['externalId'])) {
|
||||||
$this->doUpdate($order);
|
$this->doUpdate($order);
|
||||||
} else {
|
} else {
|
||||||
$this->doCreate($order);
|
$this->doCreate($order);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
die();
|
die();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param array $order
|
* @param array $order
|
||||||
*/
|
*/
|
||||||
private function doCreate($order)
|
private function doCreate($order)
|
||||||
{
|
{
|
||||||
Mage::log($order, null, 'retailcrmHistoriCreate.log', true);
|
Mage::log($order, null, 'retailcrmHistoriCreate.log', true);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$response = $this->_api->ordersGet($order['id'], $by = 'id');
|
$response = $this->_api->ordersGet($order['id'], $by = 'id');
|
||||||
|
|
||||||
if ($response->isSuccessful() && 200 === $response->getStatusCode()) {
|
if ($response->isSuccessful() && 200 === $response->getStatusCode()) {
|
||||||
$order = $response->order;
|
$order = $response->order;
|
||||||
} else {
|
} else {
|
||||||
|
@ -126,33 +128,44 @@ class Retailcrm_Retailcrm_Model_Exchange
|
||||||
} catch (Retailcrm_Retailcrm_Model_Exception_CurlException $e) {
|
} catch (Retailcrm_Retailcrm_Model_Exception_CurlException $e) {
|
||||||
Mage::log($e->getMessage());
|
Mage::log($e->getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
// get references
|
// get references
|
||||||
$this->_config = Mage::getStoreConfig('retailcrm');
|
$this->_config = Mage::getStoreConfig('retailcrm');
|
||||||
$payments = array_flip(array_filter($this->_config['payment']));
|
$payments = array_flip(array_filter($this->_config['payment']));
|
||||||
$shippings = array_flip(array_filter($this->_config['shipping']));
|
$shippings = array_flip(array_filter($this->_config['shipping']));
|
||||||
|
|
||||||
// get store
|
// get store
|
||||||
$_sendConfirmation = '0';
|
$_sendConfirmation = '0';
|
||||||
$storeId = Mage::app()->getStore()->getId();
|
$sitesConfig = $this->_helper->getMappingSites();
|
||||||
|
|
||||||
|
if (!$sitesConfig) {
|
||||||
|
$storeId = Mage::app()
|
||||||
|
->getWebsite(true)
|
||||||
|
->getDefaultGroup()
|
||||||
|
->getDefaultStoreId();
|
||||||
|
} else {
|
||||||
|
$storeId = Mage::app()->getStore()->load($sitesConfig[$order['site']])->getId();
|
||||||
|
}
|
||||||
|
|
||||||
$siteid = Mage::getModel('core/store')->load($storeId)->getWebsiteId();
|
$siteid = Mage::getModel('core/store')->load($storeId)->getWebsiteId();
|
||||||
|
|
||||||
// search or create customer
|
// search or create customer
|
||||||
$customer = Mage::getSingleton('customer/customer');
|
$customer = Mage::getSingleton('customer/customer');
|
||||||
$customer->setWebsiteId($siteid);
|
$customer->setWebsiteId($siteid);
|
||||||
$customer->loadByEmail($order['email']);
|
$customer->loadByEmail($order['email']);
|
||||||
|
|
||||||
if (!is_numeric($customer->getId())) {
|
|
||||||
|
if (!is_numeric($customer->getId())) {
|
||||||
$customer
|
$customer
|
||||||
->setGropuId(1)
|
->setGroupId(1)
|
||||||
->setWebsiteId($siteid)
|
->setWebsiteId($siteid)
|
||||||
->setStore($storeId)
|
->setStoreId($storeId)
|
||||||
->setEmail($order['email'])
|
->setEmail($order['email'])
|
||||||
->setFirstname($order['firstName'])
|
->setFirstname($order['firstName'])
|
||||||
->setLastname($order['lastName'])
|
->setLastname($order['lastName'])
|
||||||
->setMiddleName($order['patronymic'])
|
->setMiddleName($order['patronymic'])
|
||||||
->setPassword(uniqid());
|
->setPassword(uniqid());
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$customer->save();
|
$customer->save();
|
||||||
$customer->setConfirmation(null);
|
$customer->setConfirmation(null);
|
||||||
|
@ -212,7 +225,7 @@ class Retailcrm_Retailcrm_Model_Exchange
|
||||||
foreach ($order['items'] as $item) {
|
foreach ($order['items'] as $item) {
|
||||||
$products[$item['offer']['externalId']] = array('qty' => $item['quantity']);
|
$products[$item['offer']['externalId']] = array('qty' => $item['quantity']);
|
||||||
}
|
}
|
||||||
|
|
||||||
$orderData = array(
|
$orderData = array(
|
||||||
'session' => array(
|
'session' => array(
|
||||||
'customer_id' => $customer->getId(),
|
'customer_id' => $customer->getId(),
|
||||||
|
@ -263,45 +276,45 @@ class Retailcrm_Retailcrm_Model_Exchange
|
||||||
$quote = Mage::getModel('sales/quote')->setStoreId($storeId);
|
$quote = Mage::getModel('sales/quote')->setStoreId($storeId);
|
||||||
$quote->assignCustomer($customer);
|
$quote->assignCustomer($customer);
|
||||||
$quote->setSendCconfirmation($_sendConfirmation);
|
$quote->setSendCconfirmation($_sendConfirmation);
|
||||||
|
|
||||||
foreach($products as $idx => $val) {
|
foreach($products as $idx => $val) {
|
||||||
$product = Mage::getModel('catalog/product')->load($idx);
|
$product = Mage::getModel('catalog/product')->load($idx);
|
||||||
$quote->addProduct($product, new Varien_Object($val));
|
$quote->addProduct($product, new Varien_Object($val));
|
||||||
}
|
}
|
||||||
|
|
||||||
$shipping_method = self::getAllShippingMethodsCode($orderData['order']['shipping_method']);
|
$shipping_method = self::getAllShippingMethodsCode($orderData['order']['shipping_method']);
|
||||||
$billingAddress = $quote->getBillingAddress()->addData($orderData['order']['billing_address']);
|
$billingAddress = $quote->getBillingAddress()->addData($orderData['order']['billing_address']);
|
||||||
$shippingAddress = $quote->getShippingAddress()->addData($orderData['order']['shipping_address']);
|
$shippingAddress = $quote->getShippingAddress()->addData($orderData['order']['shipping_address']);
|
||||||
|
|
||||||
$shippingAddress->setCollectShippingRates(true)
|
$shippingAddress->setCollectShippingRates(true)
|
||||||
->collectShippingRates()
|
->collectShippingRates()
|
||||||
->setShippingMethod($shipping_method)
|
->setShippingMethod($shipping_method)
|
||||||
->setPaymentMethod($orderData['payment']['method']);
|
->setPaymentMethod($orderData['payment']['method']);
|
||||||
|
|
||||||
$quote->getPayment()->importData($orderData['payment']);
|
$quote->getPayment()->importData($orderData['payment']);
|
||||||
$quote->collectTotals();
|
$quote->collectTotals();
|
||||||
$quote->reserveOrderId();
|
$quote->reserveOrderId();
|
||||||
$quote->save();
|
$quote->save();
|
||||||
|
|
||||||
$service = Mage::getModel('sales/service_quote', $quote);
|
$service = Mage::getModel('sales/service_quote', $quote);
|
||||||
|
|
||||||
try{
|
try{
|
||||||
$service->submitAll();
|
$service->submitAll();
|
||||||
}
|
}
|
||||||
catch (Exception $e) {
|
catch (Exception $e) {
|
||||||
Mage::log($e->getMessage());
|
Mage::log($e->getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$response = $this->_api->ordersFixExternalIds(
|
$response = $this->_api->ordersFixExternalIds(
|
||||||
array(
|
array(
|
||||||
array(
|
array(
|
||||||
'id' => $order['id'],
|
'id' => $order['id'],
|
||||||
'externalId' =>$service->getOrder()->getRealOrderId()
|
'externalId' =>$service->getOrder()->getRealOrderId()
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!$response->isSuccessful() || 200 !== $response->getStatusCode()) {
|
if (!$response->isSuccessful() || 200 !== $response->getStatusCode()) {
|
||||||
Mage::log(
|
Mage::log(
|
||||||
sprintf(
|
sprintf(
|
||||||
|
@ -317,7 +330,7 @@ class Retailcrm_Retailcrm_Model_Exchange
|
||||||
}
|
}
|
||||||
} catch (Retailcrm_Retailcrm_Model_Exception_CurlException $e) {
|
} catch (Retailcrm_Retailcrm_Model_Exception_CurlException $e) {
|
||||||
Mage::log($e->getMessage());
|
Mage::log($e->getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -326,12 +339,12 @@ class Retailcrm_Retailcrm_Model_Exchange
|
||||||
private function doCreateUp($order)
|
private function doCreateUp($order)
|
||||||
{
|
{
|
||||||
Mage::log($order, null, 'retailcrmHistoriCreateUp.log', true);
|
Mage::log($order, null, 'retailcrmHistoriCreateUp.log', true);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$response = $this->_api->ordersGet($order['id'], $by = 'id');
|
$response = $this->_api->ordersGet($order['id'], $by = 'id');
|
||||||
|
|
||||||
if ($response->isSuccessful() && 200 === $response->getStatusCode()) {
|
if ($response->isSuccessful() && 200 === $response->getStatusCode()) {
|
||||||
$order = $response->order;
|
$order = $response->order;
|
||||||
} else {
|
} else {
|
||||||
Mage::log(
|
Mage::log(
|
||||||
sprintf(
|
sprintf(
|
||||||
|
@ -340,7 +353,7 @@ class Retailcrm_Retailcrm_Model_Exchange
|
||||||
$response->getErrorMsg()
|
$response->getErrorMsg()
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
if (isset($response['errors'])) {
|
if (isset($response['errors'])) {
|
||||||
Mage::log(implode(' :: ', $response['errors']));
|
Mage::log(implode(' :: ', $response['errors']));
|
||||||
}
|
}
|
||||||
|
@ -348,33 +361,43 @@ class Retailcrm_Retailcrm_Model_Exchange
|
||||||
} catch (Retailcrm_Retailcrm_Model_Exception_CurlException $e) {
|
} catch (Retailcrm_Retailcrm_Model_Exception_CurlException $e) {
|
||||||
Mage::log($e->getMessage());
|
Mage::log($e->getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
// get references
|
// get references
|
||||||
$this->_config = Mage::getStoreConfig('retailcrm');
|
$this->_config = Mage::getStoreConfig('retailcrm');
|
||||||
$payments = array_flip(array_filter($this->_config['payment']));
|
$payments = array_flip(array_filter($this->_config['payment']));
|
||||||
$shippings = array_flip(array_filter($this->_config['shipping']));
|
$shippings = array_flip(array_filter($this->_config['shipping']));
|
||||||
|
|
||||||
// get store
|
// get store
|
||||||
$_sendConfirmation = '0';
|
$_sendConfirmation = '0';
|
||||||
$storeId = Mage::app()->getStore()->getId();
|
$sitesConfig = $this->_helper->getMappingSites();
|
||||||
|
|
||||||
|
if (!$sitesConfig) {
|
||||||
|
$storeId = Mage::app()
|
||||||
|
->getWebsite(true)
|
||||||
|
->getDefaultGroup()
|
||||||
|
->getDefaultStoreId();
|
||||||
|
} else {
|
||||||
|
$storeId = Mage::app()->getStore()->load($sitesConfig[$order['site']])->getId();
|
||||||
|
}
|
||||||
|
|
||||||
$siteid = Mage::getModel('core/store')->load($storeId)->getWebsiteId();
|
$siteid = Mage::getModel('core/store')->load($storeId)->getWebsiteId();
|
||||||
|
|
||||||
// search or create customer
|
// search or create customer
|
||||||
$customer = Mage::getSingleton('customer/customer');
|
$customer = Mage::getSingleton('customer/customer');
|
||||||
$customer->setWebsiteId($siteid);
|
$customer->setWebsiteId($siteid);
|
||||||
$customer->loadByEmail($order['email']);
|
$customer->loadByEmail($order['email']);
|
||||||
|
|
||||||
if (!is_numeric($customer->getId())) {
|
if (!is_numeric($customer->getId())) {
|
||||||
$customer
|
$customer
|
||||||
->setGropuId(1)
|
->setGropuId(1)
|
||||||
->setWebsiteId($siteid)
|
->setWebsiteId($siteid)
|
||||||
->setStore($storeId)
|
->setStoreId($storeId)
|
||||||
->setEmail($order['email'])
|
->setEmail($order['email'])
|
||||||
->setFirstname($order['firstName'])
|
->setFirstname($order['firstName'])
|
||||||
->setLastname($order['lastName'])
|
->setLastname($order['lastName'])
|
||||||
->setMiddleName($order['patronymic'])
|
->setMiddleName($order['patronymic'])
|
||||||
->setPassword(uniqid());
|
->setPassword(uniqid());
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$customer->save();
|
$customer->save();
|
||||||
$customer->setConfirmation(null);
|
$customer->setConfirmation(null);
|
||||||
|
@ -382,7 +405,7 @@ class Retailcrm_Retailcrm_Model_Exchange
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
Mage::log($e->getMessage());
|
Mage::log($e->getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
$address = Mage::getModel("customer/address");
|
$address = Mage::getModel("customer/address");
|
||||||
$address->setCustomerId($customer->getId())
|
$address->setCustomerId($customer->getId())
|
||||||
->setFirstname($customer->getFirstname())
|
->setFirstname($customer->getFirstname())
|
||||||
|
@ -397,14 +420,14 @@ class Retailcrm_Retailcrm_Model_Exchange
|
||||||
->setIsDefaultBilling('1')
|
->setIsDefaultBilling('1')
|
||||||
->setIsDefaultShipping('1')
|
->setIsDefaultShipping('1')
|
||||||
->setSaveInAddressBook('1');
|
->setSaveInAddressBook('1');
|
||||||
|
|
||||||
try{
|
try{
|
||||||
$address->save();
|
$address->save();
|
||||||
}
|
}
|
||||||
catch (Exception $e) {
|
catch (Exception $e) {
|
||||||
Mage::log($e->getMessage());
|
Mage::log($e->getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$response = $this->_api->customersFixExternalIds(
|
$response = $this->_api->customersFixExternalIds(
|
||||||
array(
|
array(
|
||||||
|
@ -420,7 +443,7 @@ class Retailcrm_Retailcrm_Model_Exchange
|
||||||
$response->getErrorMsg()
|
$response->getErrorMsg()
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
if (isset($response['errors'])) {
|
if (isset($response['errors'])) {
|
||||||
Mage::log(implode(' :: ', $response['errors']));
|
Mage::log(implode(' :: ', $response['errors']));
|
||||||
}
|
}
|
||||||
|
@ -429,12 +452,12 @@ class Retailcrm_Retailcrm_Model_Exchange
|
||||||
Mage::log($e->getMessage());
|
Mage::log($e->getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$products = array();
|
$products = array();
|
||||||
foreach ($order['items'] as $item) {
|
foreach ($order['items'] as $item) {
|
||||||
$products[$item['offer']['externalId']] = array('qty' => $item['quantity']);
|
$products[$item['offer']['externalId']] = array('qty' => $item['quantity']);
|
||||||
}
|
}
|
||||||
|
|
||||||
$orderData = array(
|
$orderData = array(
|
||||||
'session' => array(
|
'session' => array(
|
||||||
'customer_id' => $customer->getId(),
|
'customer_id' => $customer->getId(),
|
||||||
|
@ -478,11 +501,11 @@ class Retailcrm_Retailcrm_Model_Exchange
|
||||||
'send_confirmation' => $_sendConfirmation
|
'send_confirmation' => $_sendConfirmation
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
$quote = Mage::getModel('sales/quote')->setStoreId($storeId);
|
$quote = Mage::getModel('sales/quote')->setStoreId($storeId);
|
||||||
$quote->assignCustomer($customer);
|
$quote->assignCustomer($customer);
|
||||||
$quote->setSendCconfirmation($_sendConfirmation);
|
$quote->setSendCconfirmation($_sendConfirmation);
|
||||||
|
|
||||||
foreach($products as $idx => $val) {
|
foreach($products as $idx => $val) {
|
||||||
$product = Mage::getModel('catalog/product')->load($idx);
|
$product = Mage::getModel('catalog/product')->load($idx);
|
||||||
$quote->addProduct($product, new Varien_Object($val));
|
$quote->addProduct($product, new Varien_Object($val));
|
||||||
|
@ -491,23 +514,23 @@ class Retailcrm_Retailcrm_Model_Exchange
|
||||||
$shipping_method = self::getAllShippingMethodsCode($orderData['order']['shipping_method']);
|
$shipping_method = self::getAllShippingMethodsCode($orderData['order']['shipping_method']);
|
||||||
$billingAddress = $quote->getBillingAddress()->addData($orderData['order']['billing_address']);
|
$billingAddress = $quote->getBillingAddress()->addData($orderData['order']['billing_address']);
|
||||||
$shippingAddress = $quote->getShippingAddress()->addData($orderData['order']['shipping_address']);
|
$shippingAddress = $quote->getShippingAddress()->addData($orderData['order']['shipping_address']);
|
||||||
|
|
||||||
$shippingAddress->setCollectShippingRates(true)
|
$shippingAddress->setCollectShippingRates(true)
|
||||||
->collectShippingRates()
|
->collectShippingRates()
|
||||||
->setShippingMethod($shipping_method)
|
->setShippingMethod($shipping_method)
|
||||||
->setPaymentMethod($orderData['payment']['method']);
|
->setPaymentMethod($orderData['payment']['method']);
|
||||||
|
|
||||||
$quote->getPayment()->importData($orderData['payment']);
|
$quote->getPayment()->importData($orderData['payment']);
|
||||||
$quote->collectTotals();
|
$quote->collectTotals();
|
||||||
|
|
||||||
$originalId = $order['externalId'];
|
$originalId = $order['externalId'];
|
||||||
$oldOrder = Mage::getModel('sales/order')->loadByIncrementId($originalId);
|
$oldOrder = Mage::getModel('sales/order')->loadByIncrementId($originalId);
|
||||||
$oldOrderArr = $oldOrder->getData();
|
$oldOrderArr = $oldOrder->getData();
|
||||||
|
|
||||||
if(!empty($oldOrderArr['original_increment_id'])) {
|
if (!empty($oldOrderArr['original_increment_id'])) {
|
||||||
$originalId = $oldOrderArr['original_increment_id'];
|
$originalId = $oldOrderArr['original_increment_id'];
|
||||||
}
|
}
|
||||||
|
|
||||||
$orderDataUp = array(
|
$orderDataUp = array(
|
||||||
'original_increment_id' => $originalId,
|
'original_increment_id' => $originalId,
|
||||||
'relation_parent_id' => $oldOrder->getId(),
|
'relation_parent_id' => $oldOrder->getId(),
|
||||||
|
@ -515,23 +538,23 @@ class Retailcrm_Retailcrm_Model_Exchange
|
||||||
'edit_increment' => $oldOrder->getEditIncrement()+1,
|
'edit_increment' => $oldOrder->getEditIncrement()+1,
|
||||||
'increment_id' => $originalId.'-'.($oldOrder->getEditIncrement()+1)
|
'increment_id' => $originalId.'-'.($oldOrder->getEditIncrement()+1)
|
||||||
);
|
);
|
||||||
|
|
||||||
$quote->setReservedOrderId($orderDataUp['increment_id']);
|
$quote->setReservedOrderId($orderDataUp['increment_id']);
|
||||||
$quote->save();
|
$quote->save();
|
||||||
|
|
||||||
$service = Mage::getModel('sales/service_quote', $quote);
|
$service = Mage::getModel('sales/service_quote', $quote);
|
||||||
$service->setOrderData($orderDataUp);
|
$service->setOrderData($orderDataUp);
|
||||||
|
|
||||||
try{
|
try{
|
||||||
$service->submitAll();
|
$service->submitAll();
|
||||||
}
|
}
|
||||||
catch (Exception $e) {
|
catch (Exception $e) {
|
||||||
Mage::log($e->getMessage());
|
Mage::log($e->getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
$magentoOrder = Mage::getModel('sales/order')->loadByIncrementId($orderDataUp['relation_parent_real_id']);
|
$magentoOrder = Mage::getModel('sales/order')->loadByIncrementId($orderDataUp['relation_parent_real_id']);
|
||||||
$magentoOrder->setState(Mage_Sales_Model_Order::STATE_CANCELED, true)->save();
|
$magentoOrder->setState(Mage_Sales_Model_Order::STATE_CANCELED, true)->save();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$response = $this->_api->ordersFixExternalIds(
|
$response = $this->_api->ordersFixExternalIds(
|
||||||
array(
|
array(
|
||||||
|
@ -541,7 +564,7 @@ class Retailcrm_Retailcrm_Model_Exchange
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!$response->isSuccessful() || 200 !== $response->getStatusCode()) {
|
if (!$response->isSuccessful() || 200 !== $response->getStatusCode()) {
|
||||||
Mage::log(
|
Mage::log(
|
||||||
sprintf(
|
sprintf(
|
||||||
|
@ -550,7 +573,7 @@ class Retailcrm_Retailcrm_Model_Exchange
|
||||||
$response->getErrorMsg()
|
$response->getErrorMsg()
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
if (isset($response['errors'])) {
|
if (isset($response['errors'])) {
|
||||||
Mage::log(implode(' :: ', $response['errors']));
|
Mage::log(implode(' :: ', $response['errors']));
|
||||||
}
|
}
|
||||||
|
@ -558,58 +581,58 @@ class Retailcrm_Retailcrm_Model_Exchange
|
||||||
} catch (Retailcrm_Retailcrm_Model_Exception_CurlException $e) {
|
} catch (Retailcrm_Retailcrm_Model_Exception_CurlException $e) {
|
||||||
Mage::log($e->getMessage());
|
Mage::log($e->getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param array $order
|
* @param array $order
|
||||||
*/
|
*/
|
||||||
private function doUpdate($order)
|
private function doUpdate($order)
|
||||||
{
|
{
|
||||||
$magentoOrder = Mage::getModel('sales/order')->loadByIncrementId($order['externalId']);
|
$magentoOrder = Mage::getModel('sales/order')->loadByIncrementId($order['externalId']);
|
||||||
$magentoOrderArr = $magentoOrder->getData();
|
$magentoOrderArr = $magentoOrder->getData();
|
||||||
$config = Mage::getStoreConfig('retailcrm');
|
$config = Mage::getStoreConfig('retailcrm');
|
||||||
|
|
||||||
Mage::log($order, null, 'retailcrmHistoriUpdate.log', true);
|
Mage::log($order, null, 'retailcrmHistoriUpdate.log', true);
|
||||||
|
|
||||||
if((!empty($order['order_edit']))&&($order['order_edit'] == 1)) {
|
if((!empty($order['order_edit']))&&($order['order_edit'] == 1)) {
|
||||||
$this->doCreateUp($order);
|
$this->doCreateUp($order);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($order['status'])) {
|
if (!empty($order['status'])) {
|
||||||
try {
|
try {
|
||||||
$response = $this->_api->statusesList();
|
$response = $this->_api->statusesList();
|
||||||
|
|
||||||
if ($response->isSuccessful() && 200 === $response->getStatusCode()) {
|
if ($response->isSuccessful() && 200 === $response->getStatusCode()) {
|
||||||
$code = $order['status'];
|
$code = $order['status'];
|
||||||
$group = $response->statuses[$code]['group'];
|
$group = $response->statuses[$code]['group'];
|
||||||
|
|
||||||
if ($magentoOrder->hasInvoices()) {
|
if ($magentoOrder->hasInvoices()) {
|
||||||
$invIncrementIDs = array();
|
$invIncrementIDs = array();
|
||||||
foreach ($magentoOrder->getInvoiceCollection() as $inv) {
|
foreach ($magentoOrder->getInvoiceCollection() as $inv) {
|
||||||
$invIncrementIDs[] = $inv->getIncrementId();
|
$invIncrementIDs[] = $inv->getIncrementId();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (in_array($group, array('approval', 'assembling', 'delivery'))) {
|
if (in_array($group, array('approval', 'assembling', 'delivery'))) {
|
||||||
if(empty($invIncrementIDs)) {
|
if(empty($invIncrementIDs)) {
|
||||||
$magentoOrder->setState(Mage_Sales_Model_Order::STATE_PROCESSING, true);
|
$magentoOrder->setState(Mage_Sales_Model_Order::STATE_PROCESSING, true);
|
||||||
$magentoOrder->save();
|
$magentoOrder->save();
|
||||||
|
|
||||||
$invoice = $magentoOrder->prepareInvoice()
|
$invoice = $magentoOrder->prepareInvoice()
|
||||||
->setTransactionId($magentoOrder->getRealOrderId())
|
->setTransactionId($magentoOrder->getRealOrderId())
|
||||||
->addComment("Add status on CRM")
|
->addComment("Add status on CRM")
|
||||||
->register()
|
->register()
|
||||||
->pay();
|
->pay();
|
||||||
|
|
||||||
$transaction_save = Mage::getModel('core/resource_transaction')
|
$transaction_save = Mage::getModel('core/resource_transaction')
|
||||||
->addObject($invoice)
|
->addObject($invoice)
|
||||||
->addObject($invoice->getOrder());
|
->addObject($invoice->getOrder());
|
||||||
|
|
||||||
$transaction_save->save();
|
$transaction_save->save();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (in_array($group, array('complete'))) {
|
if (in_array($group, array('complete'))) {
|
||||||
if(empty($invIncrementIDs)){
|
if(empty($invIncrementIDs)){
|
||||||
$invoice = $magentoOrder->prepareInvoice()
|
$invoice = $magentoOrder->prepareInvoice()
|
||||||
|
@ -617,15 +640,15 @@ class Retailcrm_Retailcrm_Model_Exchange
|
||||||
->addComment("Add status on CRM")
|
->addComment("Add status on CRM")
|
||||||
->register()
|
->register()
|
||||||
->pay();
|
->pay();
|
||||||
|
|
||||||
$transaction_save = Mage::getModel('core/resource_transaction')
|
$transaction_save = Mage::getModel('core/resource_transaction')
|
||||||
->addObject($invoice)
|
->addObject($invoice)
|
||||||
->addObject($invoice->getOrder());
|
->addObject($invoice->getOrder());
|
||||||
|
|
||||||
$transaction_save->save();
|
$transaction_save->save();
|
||||||
$magentoOrder->setState(Mage_Sales_Model_Order::STATE_PROCESSING, true)->save();
|
$magentoOrder->setState(Mage_Sales_Model_Order::STATE_PROCESSING, true)->save();
|
||||||
}
|
}
|
||||||
|
|
||||||
if($magentoOrder->canShip()) {
|
if($magentoOrder->canShip()) {
|
||||||
$itemQty = $magentoOrder->getItemsCollection()->count();
|
$itemQty = $magentoOrder->getItemsCollection()->count();
|
||||||
$shipment = Mage::getModel('sales/service_order', $magentoOrder)->prepareShipment($itemQty);
|
$shipment = Mage::getModel('sales/service_order', $magentoOrder)->prepareShipment($itemQty);
|
||||||
|
@ -634,36 +657,36 @@ class Retailcrm_Retailcrm_Model_Exchange
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if($code == $config['status']['canceled']) {
|
if($code == $config['status']['canceled']) {
|
||||||
$magentoOrder->setState(Mage_Sales_Model_Order::STATE_CANCELED, true)->save();
|
$magentoOrder->setState(Mage_Sales_Model_Order::STATE_CANCELED, true)->save();
|
||||||
}
|
}
|
||||||
|
|
||||||
if($code == $config['status']['holded']) {
|
if($code == $config['status']['holded']) {
|
||||||
if($magentoOrder->canHold()){
|
if($magentoOrder->canHold()){
|
||||||
$magentoOrder->hold()->save();
|
$magentoOrder->hold()->save();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if($code == $config['status']['unhold']) {
|
if($code == $config['status']['unhold']) {
|
||||||
if($magentoOrder->canUnhold()) {
|
if($magentoOrder->canUnhold()) {
|
||||||
$magentoOrder->unhold()->save();
|
$magentoOrder->unhold()->save();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if($code == $config['status']['closed']) {
|
if($code == $config['status']['closed']) {
|
||||||
if($magentoOrder->canCreditmemo()) {
|
if($magentoOrder->canCreditmemo()) {
|
||||||
$orderItem = $magentoOrder->getItemsCollection();
|
$orderItem = $magentoOrder->getItemsCollection();
|
||||||
foreach ($orderItem as $item) {
|
foreach ($orderItem as $item) {
|
||||||
$data['qtys'][$item->getid()] = $item->getQtyOrdered();
|
$data['qtys'][$item->getid()] = $item->getQtyOrdered();
|
||||||
}
|
}
|
||||||
|
|
||||||
$service = Mage::getModel('sales/service_order', $magentoOrder);
|
$service = Mage::getModel('sales/service_order', $magentoOrder);
|
||||||
$creditMemo = $service->prepareCreditmemo($data)->register()->save();
|
$creditMemo = $service->prepareCreditmemo($data)->register()->save();
|
||||||
$magentoOrder->addStatusToHistory(Mage_Sales_Model_Order::STATE_CLOSED, 'Add status on CRM', false);
|
$magentoOrder->addStatusToHistory(Mage_Sales_Model_Order::STATE_CLOSED, 'Add status on CRM', false);
|
||||||
$magentoOrder->save();
|
$magentoOrder->save();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Mage::log("Update: " . $order['externalId'], null, 'history.log');
|
Mage::log("Update: " . $order['externalId'], null, 'history.log');
|
||||||
} else {
|
} else {
|
||||||
Mage::log(
|
Mage::log(
|
||||||
|
@ -680,14 +703,14 @@ class Retailcrm_Retailcrm_Model_Exchange
|
||||||
}
|
}
|
||||||
} catch (Retailcrm_Retailcrm_Model_Exception_CurlException $e) {
|
} catch (Retailcrm_Retailcrm_Model_Exception_CurlException $e) {
|
||||||
Mage::log($e->getMessage());
|
Mage::log($e->getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!empty($order['manager_comment'])) {
|
if(!empty($order['manager_comment'])) {
|
||||||
$magentoOrder->addStatusHistoryComment($order['manager_comment']);
|
$magentoOrder->addStatusHistoryComment($order['manager_comment']);
|
||||||
$magentoOrder->save();
|
$magentoOrder->save();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -820,8 +843,8 @@ class Retailcrm_Retailcrm_Model_Exchange
|
||||||
|
|
||||||
return (string) $country;
|
return (string) $country;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static function assemblyOrder($orderHistory)
|
public static function assemblyOrder($orderHistory)
|
||||||
{
|
{
|
||||||
$orders = array();
|
$orders = array();
|
||||||
|
@ -833,32 +856,32 @@ class Retailcrm_Retailcrm_Model_Exchange
|
||||||
if(isset($change['created'])) {
|
if(isset($change['created'])) {
|
||||||
$item['create'] = 1;
|
$item['create'] = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
$items[$item['id']] = $item;
|
$items[$item['id']] = $item;
|
||||||
}
|
}
|
||||||
|
|
||||||
$change['order']['items'] = $items;
|
$change['order']['items'] = $items;
|
||||||
}
|
}
|
||||||
|
|
||||||
Mage::log($change, null, 'retailcrmHistoryAssemblyOrder.log', true);
|
Mage::log($change, null, 'retailcrmHistoryAssemblyOrder.log', true);
|
||||||
|
|
||||||
if($change['order']['contragent']['contragentType']) {
|
if($change['order']['contragent']['contragentType']) {
|
||||||
$change['order']['contragentType'] = self::newValue($change['order']['contragent']['contragentType']);
|
$change['order']['contragentType'] = self::newValue($change['order']['contragent']['contragentType']);
|
||||||
unset($change['order']['contragent']);
|
unset($change['order']['contragent']);
|
||||||
}
|
}
|
||||||
|
|
||||||
if($orders[$change['order']['id']]) {
|
if($orders[$change['order']['id']]) {
|
||||||
$orders[$change['order']['id']] = array_merge($orders[$change['order']['id']], $change['order']);
|
$orders[$change['order']['id']] = array_merge($orders[$change['order']['id']], $change['order']);
|
||||||
}
|
}
|
||||||
|
|
||||||
else {
|
else {
|
||||||
$orders[$change['order']['id']] = $change['order'];
|
$orders[$change['order']['id']] = $change['order'];
|
||||||
}
|
}
|
||||||
|
|
||||||
if($change['field'] == 'manager_comment'){
|
if($change['field'] == 'manager_comment'){
|
||||||
$orders[$change['order']['id']][$change['field']] = $change['newValue'];
|
$orders[$change['order']['id']][$change['field']] = $change['newValue'];
|
||||||
}
|
}
|
||||||
|
|
||||||
if(($change['field'] != 'status')&&
|
if(($change['field'] != 'status')&&
|
||||||
($change['field'] != 'country')&&
|
($change['field'] != 'country')&&
|
||||||
($change['field'] != 'manager_comment')&&
|
($change['field'] != 'manager_comment')&&
|
||||||
|
@ -868,31 +891,31 @@ class Retailcrm_Retailcrm_Model_Exchange
|
||||||
) {
|
) {
|
||||||
$orders[$change['order']['id']]['order_edit'] = 1;
|
$orders[$change['order']['id']]['order_edit'] = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if($change['item']) {
|
if($change['item']) {
|
||||||
if($orders[$change['order']['id']]['items'][$change['item']['id']]) {
|
if($orders[$change['order']['id']]['items'][$change['item']['id']]) {
|
||||||
$orders[$change['order']['id']]['items'][$change['item']['id']] = array_merge($orders[$change['order']['id']]['items'][$change['item']['id']], $change['item']);
|
$orders[$change['order']['id']]['items'][$change['item']['id']] = array_merge($orders[$change['order']['id']]['items'][$change['item']['id']], $change['item']);
|
||||||
}
|
}
|
||||||
|
|
||||||
else{
|
else{
|
||||||
$orders[$change['order']['id']]['items'][$change['item']['id']] = $change['item'];
|
$orders[$change['order']['id']]['items'][$change['item']['id']] = $change['item'];
|
||||||
}
|
}
|
||||||
|
|
||||||
if(empty($change['oldValue']) && $change['field'] == 'order_product') {
|
if(empty($change['oldValue']) && $change['field'] == 'order_product') {
|
||||||
$orders[$change['order']['id']]['items'][$change['item']['id']]['create'] = 1;
|
$orders[$change['order']['id']]['items'][$change['item']['id']]['create'] = 1;
|
||||||
$orders[$change['order']['id']]['order_edit'] = 1;
|
$orders[$change['order']['id']]['order_edit'] = 1;
|
||||||
unset($orders[$change['order']['id']]['items'][$change['item']['id']]['delete']);
|
unset($orders[$change['order']['id']]['items'][$change['item']['id']]['delete']);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(empty($change['newValue']) && $change['field'] == 'order_product') {
|
if(empty($change['newValue']) && $change['field'] == 'order_product') {
|
||||||
$orders[$change['order']['id']]['items'][$change['item']['id']]['delete'] = 1;
|
$orders[$change['order']['id']]['items'][$change['item']['id']]['delete'] = 1;
|
||||||
$orders[$change['order']['id']]['order_edit'] = 1;
|
$orders[$change['order']['id']]['order_edit'] = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!empty($change['newValue']) && $change['field'] == 'order_product.quantity') {
|
if(!empty($change['newValue']) && $change['field'] == 'order_product.quantity') {
|
||||||
$orders[$change['order']['id']]['order_edit'] = 1;
|
$orders[$change['order']['id']]['order_edit'] = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!$orders[$change['order']['id']]['items'][$change['item']['id']]['create'] && $fields['item'][$change['field']]) {
|
if(!$orders[$change['order']['id']]['items'][$change['item']['id']]['create'] && $fields['item'][$change['field']]) {
|
||||||
$orders[$change['order']['id']]['items'][$change['item']['id']][$fields['item'][$change['field']]] = $change['newValue'];
|
$orders[$change['order']['id']]['items'][$change['item']['id']][$fields['item'][$change['field']]] = $change['newValue'];
|
||||||
}
|
}
|
||||||
|
@ -919,11 +942,11 @@ class Retailcrm_Retailcrm_Model_Exchange
|
||||||
elseif($fields['order'][$change['field']]) {
|
elseif($fields['order'][$change['field']]) {
|
||||||
$orders[$change['order']['id']][$fields['order'][$change['field']]] = self::newValue($change['newValue']);
|
$orders[$change['order']['id']][$fields['order'][$change['field']]] = self::newValue($change['newValue']);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(isset($change['created'])) {
|
if(isset($change['created'])) {
|
||||||
$orders[$change['order']['id']]['create'] = 1;
|
$orders[$change['order']['id']]['create'] = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(isset($change['deleted'])) {
|
if(isset($change['deleted'])) {
|
||||||
$orders[$change['order']['id']]['deleted'] = 1;
|
$orders[$change['order']['id']]['deleted'] = 1;
|
||||||
}
|
}
|
||||||
|
@ -932,7 +955,7 @@ class Retailcrm_Retailcrm_Model_Exchange
|
||||||
|
|
||||||
return $orders;
|
return $orders;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function removeEmpty($inputArray)
|
public static function removeEmpty($inputArray)
|
||||||
{
|
{
|
||||||
$outputArray = array();
|
$outputArray = array();
|
||||||
|
@ -942,15 +965,15 @@ class Retailcrm_Retailcrm_Model_Exchange
|
||||||
if (is_array($element)) {
|
if (is_array($element)) {
|
||||||
$element = self::removeEmpty($element);
|
$element = self::removeEmpty($element);
|
||||||
}
|
}
|
||||||
|
|
||||||
$outputArray[$key] = $element;
|
$outputArray[$key] = $element;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $outputArray;
|
return $outputArray;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function newValue($value)
|
public static function newValue($value)
|
||||||
{
|
{
|
||||||
if(isset($value['code'])) {
|
if(isset($value['code'])) {
|
||||||
|
@ -959,7 +982,7 @@ class Retailcrm_Retailcrm_Model_Exchange
|
||||||
return $value;
|
return $value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function getAllShippingMethodsCode($code)
|
public static function getAllShippingMethodsCode($code)
|
||||||
{
|
{
|
||||||
$methods = Mage::getSingleton('shipping/config')->getActiveCarriers();
|
$methods = Mage::getSingleton('shipping/config')->getActiveCarriers();
|
||||||
|
@ -970,12 +993,12 @@ class Retailcrm_Retailcrm_Model_Exchange
|
||||||
$_code = $_ccode . '_' . $_mcode;
|
$_code = $_ccode . '_' . $_mcode;
|
||||||
$options[$_ccode] = $_code;
|
$options[$_ccode] = $_code;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $options[$code];
|
return $options[$code];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ class Retailcrm_Retailcrm_Model_Icml
|
||||||
$string = '<?xml version="1.0" encoding="UTF-8"?>
|
$string = '<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<yml_catalog date="'.date('Y-m-d H:i:s').'">
|
<yml_catalog date="'.date('Y-m-d H:i:s').'">
|
||||||
<shop>
|
<shop>
|
||||||
<name>'.Mage::app()->getStore($shop)->getName().'</name>
|
<name>'.$shop->getName().'</name>
|
||||||
<categories/>
|
<categories/>
|
||||||
<offers/>
|
<offers/>
|
||||||
</shop>
|
</shop>
|
||||||
|
@ -41,9 +41,8 @@ class Retailcrm_Retailcrm_Model_Icml
|
||||||
|
|
||||||
$this->_dd->saveXML();
|
$this->_dd->saveXML();
|
||||||
$baseDir = Mage::getBaseDir();
|
$baseDir = Mage::getBaseDir();
|
||||||
$shopCode = Mage::app()->getStore($shop)->getCode();
|
$shopCode = $shop->getCode();
|
||||||
$this->_dd->save($baseDir . DS . 'retailcrm_' . $shopCode . '.xml');
|
$this->_dd->save($baseDir . DS . 'retailcrm_' . $shopCode . '.xml');
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private function addCategories()
|
private function addCategories()
|
||||||
|
@ -102,7 +101,6 @@ class Retailcrm_Retailcrm_Model_Icml
|
||||||
|
|
||||||
$collection->addFieldToFilter('status', Mage_Catalog_Model_Product_Status::STATUS_ENABLED);
|
$collection->addFieldToFilter('status', Mage_Catalog_Model_Product_Status::STATUS_ENABLED);
|
||||||
$collection->addFieldToFilter('visibility', Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH);
|
$collection->addFieldToFilter('visibility', Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH);
|
||||||
$collection->addAttributeToFilter('type_id', array('eq' => 'simple'));
|
|
||||||
|
|
||||||
foreach ($collection as $product) {
|
foreach ($collection as $product) {
|
||||||
/** @var Mage_Catalog_Model_Product $product */
|
/** @var Mage_Catalog_Model_Product $product */
|
||||||
|
@ -174,6 +172,7 @@ class Retailcrm_Retailcrm_Model_Icml
|
||||||
$offers[] = $offer;
|
$offers[] = $offer;
|
||||||
|
|
||||||
if($product->getTypeId() == 'configurable') {
|
if($product->getTypeId() == 'configurable') {
|
||||||
|
|
||||||
/** @var Mage_Catalog_Model_Product_Type_Configurable $product */
|
/** @var Mage_Catalog_Model_Product_Type_Configurable $product */
|
||||||
$associatedProducts = Mage::getModel('catalog/product_type_configurable')->getUsedProducts(null, $product);
|
$associatedProducts = Mage::getModel('catalog/product_type_configurable')->getUsedProducts(null, $product);
|
||||||
|
|
||||||
|
|
|
@ -59,8 +59,8 @@ class Retailcrm_Retailcrm_Model_Observer
|
||||||
public function exportCatalog()
|
public function exportCatalog()
|
||||||
{
|
{
|
||||||
foreach (Mage::app()->getWebsites() as $website) {
|
foreach (Mage::app()->getWebsites() as $website) {
|
||||||
foreach ($website->getGroups() as $group) {
|
foreach ($website->getStores() as $store) {
|
||||||
Mage::getModel('retailcrm/icml')->generate((int)$group->getId());
|
Mage::getModel('retailcrm/icml')->generate($store);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,17 +25,20 @@ class Retailcrm_Retailcrm_Model_Order extends Retailcrm_Retailcrm_Model_Exchange
|
||||||
public function orderPay($orderId)
|
public function orderPay($orderId)
|
||||||
{
|
{
|
||||||
$order = Mage::getModel('sales/order')->load($orderId);
|
$order = Mage::getModel('sales/order')->load($orderId);
|
||||||
|
|
||||||
if((string)$order->getBaseGrandTotal() == (string)$order->getTotalPaid()){
|
if ((string)$order->getBaseGrandTotal() == (string)$order->getTotalPaid()) {
|
||||||
$preparedOrder = array(
|
$preparedOrder = array(
|
||||||
'externalId' => $order->getRealOrderId(),//getId(),
|
'externalId' => $order->getRealOrderId(),//getId(),
|
||||||
'paymentStatus' => 'paid',
|
'paymentStatus' => 'paid',
|
||||||
);
|
);
|
||||||
$preparedOrder = Mage::helper('retailcrm')->filterRecursive($preparedOrder);
|
|
||||||
|
$helper = Mage::helper('retailcrm');
|
||||||
|
$preparedOrder = $helper->filterRecursive($preparedOrder);
|
||||||
|
$this->_api->setSite($helper->getSite($order->getStore()));
|
||||||
$this->_api->ordersEdit($preparedOrder);
|
$this->_api->ordersEdit($preparedOrder);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function orderStatusHistoryCheck($order)
|
public function orderStatusHistoryCheck($order)
|
||||||
{
|
{
|
||||||
$config = Mage::getModel(
|
$config = Mage::getModel(
|
||||||
|
@ -48,19 +51,19 @@ class Retailcrm_Retailcrm_Model_Order extends Retailcrm_Retailcrm_Model_Exchange
|
||||||
'externalId' => $order->getRealOrderId(),//getId(),
|
'externalId' => $order->getRealOrderId(),//getId(),
|
||||||
'status' => $config->getMapping($order->getStatus(), 'status'),
|
'status' => $config->getMapping($order->getStatus(), 'status'),
|
||||||
);
|
);
|
||||||
|
|
||||||
$comment = $order->getStatusHistoryCollection()->getData();
|
$comment = $order->getStatusHistoryCollection()->getData();
|
||||||
|
|
||||||
if(!empty($comment[0]['comment'])) {
|
if(!empty($comment[0]['comment'])) {
|
||||||
$preparedOrder['managerComment'] = $comment[0]['comment'];
|
$preparedOrder['managerComment'] = $comment[0]['comment'];
|
||||||
}
|
}
|
||||||
|
|
||||||
$preparedOrder = Mage::helper('retailcrm')->filterRecursive($preparedOrder);
|
$helper = Mage::helper('retailcrm');
|
||||||
$this->_api->ordersEdit($preparedOrder);
|
$preparedOrder = $helper->filterRecursive($preparedOrder);
|
||||||
|
$this->_api->setSite($helper->getSite($order->getStore()));
|
||||||
|
$this->_api->ordersEdit($preparedOrder);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public function orderUpdate($order)
|
public function orderUpdate($order)
|
||||||
{
|
{
|
||||||
$config = Mage::getModel(
|
$config = Mage::getModel(
|
||||||
|
@ -73,16 +76,18 @@ class Retailcrm_Retailcrm_Model_Order extends Retailcrm_Retailcrm_Model_Exchange
|
||||||
'externalId' => $order->getRealOrderId(),//getId(),
|
'externalId' => $order->getRealOrderId(),//getId(),
|
||||||
'status' => $config->getMapping($order->getStatus(), 'status'),
|
'status' => $config->getMapping($order->getStatus(), 'status'),
|
||||||
);
|
);
|
||||||
if((float)$order->getBaseGrandTotal() == (float)$order->getTotalPaid()) {
|
if ((float)$order->getBaseGrandTotal() == (float)$order->getTotalPaid()) {
|
||||||
$preparedOrder['paymentStatus'] = 'paid';
|
$preparedOrder['paymentStatus'] = 'paid';
|
||||||
$preparedOrder = Mage::helper('retailcrm')->filterRecursive($preparedOrder);
|
$helper = Mage::helper('retailcrm');
|
||||||
|
$preparedOrder = $helper->filterRecursive($preparedOrder);
|
||||||
|
$this->_api->setSite($helper->getSite($order->getStore()));
|
||||||
$this->_api->ordersEdit($preparedOrder);
|
$this->_api->ordersEdit($preparedOrder);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function orderCreate($order)
|
public function orderCreate($order)
|
||||||
{
|
{
|
||||||
|
$helper = Mage::helper('retailcrm');
|
||||||
$config = Mage::getModel('retailcrm/settings', ['storeId' => $order->getStoreId()]);
|
$config = Mage::getModel('retailcrm/settings', ['storeId' => $order->getStoreId()]);
|
||||||
$address = $order->getShippingAddress()->getData();
|
$address = $order->getShippingAddress()->getData();
|
||||||
$orderItems = $order->getItemsCollection()
|
$orderItems = $order->getItemsCollection()
|
||||||
|
@ -98,25 +103,23 @@ class Retailcrm_Retailcrm_Model_Order extends Retailcrm_Retailcrm_Model_Exchange
|
||||||
}
|
}
|
||||||
|
|
||||||
$product = array(
|
$product = array(
|
||||||
'productId' => $item->getProductId(),
|
|
||||||
'productName' => !isset($parent) ? $item->getName() : $parent->getName(),
|
'productName' => !isset($parent) ? $item->getName() : $parent->getName(),
|
||||||
'quantity' => !isset($parent) ? intval($item->getQtyOrdered()) : intval($parent->getQtyOrdered()),
|
'quantity' => !isset($parent) ? intval($item->getQtyOrdered()) : intval($parent->getQtyOrdered()),
|
||||||
'initialPrice' => !isset($parent) ? $item->getPrice() : $parent->getPrice(),
|
'initialPrice' => !isset($parent) ? $item->getPrice() : $parent->getPrice(),
|
||||||
'offer'=>array(
|
'offer' => array(
|
||||||
'externalId'=>$item->getProductId()
|
'externalId' => $item->getProductId()
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
unset($parent);
|
unset($parent);
|
||||||
$items[] = $product;
|
$items[] = $product;
|
||||||
} elseif($item->getProductType() == "grouped") {
|
} elseif ($item->getProductType() == "grouped") {
|
||||||
$product = array(
|
$product = array(
|
||||||
'productId' => $item->getProductId(),
|
|
||||||
'productName' => $item->getName(),
|
'productName' => $item->getName(),
|
||||||
'quantity' => $item->getQtyOrdered(),
|
'quantity' => $item->getQtyOrdered(),
|
||||||
'initialPrice' => $item->getPrice(),
|
'initialPrice' => $item->getPrice(),
|
||||||
'offer'=>array(
|
'offer' => array(
|
||||||
'externalId'=>$item->getProductId()
|
'externalId '=> $item->getProductId()
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -127,7 +130,6 @@ class Retailcrm_Retailcrm_Model_Order extends Retailcrm_Retailcrm_Model_Exchange
|
||||||
$shipping = $this->getShippingCode($order->getShippingMethod());
|
$shipping = $this->getShippingCode($order->getShippingMethod());
|
||||||
|
|
||||||
$preparedOrder = array(
|
$preparedOrder = array(
|
||||||
'site' => $order->getStore()->getCode(),
|
|
||||||
'externalId' => $order->getRealOrderId(),
|
'externalId' => $order->getRealOrderId(),
|
||||||
'number' => $order->getRealOrderId(),
|
'number' => $order->getRealOrderId(),
|
||||||
'createdAt' => Mage::getModel('core/date')->date(),
|
'createdAt' => Mage::getModel('core/date')->date(),
|
||||||
|
@ -164,36 +166,35 @@ class Retailcrm_Retailcrm_Model_Order extends Retailcrm_Retailcrm_Model_Exchange
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if (trim($preparedOrder['delivery']['code']) == ''){
|
||||||
if(trim($preparedOrder['delivery']['code']) == ''){
|
|
||||||
unset($preparedOrder['delivery']['code']);
|
unset($preparedOrder['delivery']['code']);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(trim($preparedOrder['paymentType']) == ''){
|
if (trim($preparedOrder['paymentType']) == ''){
|
||||||
unset($preparedOrder['paymentType']);
|
unset($preparedOrder['paymentType']);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(trim($preparedOrder['status']) == ''){
|
if (trim($preparedOrder['status']) == ''){
|
||||||
unset($preparedOrder['status']);
|
unset($preparedOrder['status']);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($order->getCustomerIsGuest() == 0) {
|
if ($order->getCustomerIsGuest() == 0) {
|
||||||
$preparedCustomer = array(
|
$preparedCustomer = array(
|
||||||
'externalId' => $order->getCustomerId()
|
'externalId' => $order->getCustomerId()
|
||||||
);
|
);
|
||||||
|
|
||||||
if ($this->_api->customersCreate($preparedCustomer)) {
|
if ($this->_api->customersCreate($preparedCustomer)) {
|
||||||
$preparedOrder['customer']['externalId'] = $order->getCustomerId();
|
$preparedOrder['customer']['externalId'] = $order->getCustomerId();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$preparedOrder = Mage::helper('retailcrm')->filterRecursive($preparedOrder);
|
$preparedOrder = $helper->filterRecursive($preparedOrder);
|
||||||
|
|
||||||
Mage::log($preparedOrder, null, 'retailcrmCreatePreparedOrder.log', true);
|
Mage::log($preparedOrder, null, 'retailcrmCreatePreparedOrder.log', true);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$response = $this->_api->ordersCreate($preparedOrder);
|
$response = $this->_api->ordersCreate($preparedOrder, $helper->getSite($order->getStore()));
|
||||||
if ($response->isSuccessful() && 201 === $response->getStatusCode()) {
|
if ($response->isSuccessful() && 201 === $response->getStatusCode()) {
|
||||||
Mage::log($response->id);
|
Mage::log($response->id);
|
||||||
} else {
|
} else {
|
||||||
|
@ -218,8 +219,8 @@ class Retailcrm_Retailcrm_Model_Order extends Retailcrm_Retailcrm_Model_Exchange
|
||||||
{
|
{
|
||||||
$config = Mage::getStoreConfig('retailcrm');
|
$config = Mage::getStoreConfig('retailcrm');
|
||||||
$ordersId = explode(",", $config['load_order']['numberOrder']);
|
$ordersId = explode(",", $config['load_order']['numberOrder']);
|
||||||
$orders = array();
|
$ordersSites = array();
|
||||||
|
|
||||||
$ordersList = Mage::getResourceModel('sales/order_collection')
|
$ordersList = Mage::getResourceModel('sales/order_collection')
|
||||||
->addAttributeToSelect('*')
|
->addAttributeToSelect('*')
|
||||||
->joinAttribute('billing_firstname', 'order_address/firstname', 'billing_address_id', null, 'left')
|
->joinAttribute('billing_firstname', 'order_address/firstname', 'billing_address_id', null, 'left')
|
||||||
|
@ -247,24 +248,26 @@ class Retailcrm_Retailcrm_Model_Order extends Retailcrm_Retailcrm_Model_Exchange
|
||||||
->setCurPage(1)
|
->setCurPage(1)
|
||||||
->addAttributeToFilter('increment_id', $ordersId)
|
->addAttributeToFilter('increment_id', $ordersId)
|
||||||
->load();
|
->load();
|
||||||
|
|
||||||
foreach ($ordersList as $order) {
|
foreach ($ordersList as $order) {
|
||||||
$orders[] = $this->prepareOrder($order);
|
$ordersSites[$order->getStore()->getId()][] = $this->prepareOrder($order);
|
||||||
}
|
}
|
||||||
|
|
||||||
$chunked = array_chunk($orders, 50);
|
foreach ($ordersSites as $storeId => $orders) {
|
||||||
unset($orders);
|
$chunked = array_chunk($orders, 50);
|
||||||
foreach ($chunked as $chunk) {
|
unset($orders);
|
||||||
$this->_api->ordersUpload($chunk);
|
foreach ($chunked as $chunk) {
|
||||||
time_nanosleep(0, 250000000);
|
$this->_api->ordersUpload($chunk, Mage::helper('retailcrm')->getSite($storeId));
|
||||||
|
time_nanosleep(0, 250000000);
|
||||||
|
}
|
||||||
|
|
||||||
|
unset($chunked);
|
||||||
}
|
}
|
||||||
|
|
||||||
unset($chunked);
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Orders export
|
* Orders export
|
||||||
*
|
*
|
||||||
|
@ -275,7 +278,7 @@ class Retailcrm_Retailcrm_Model_Order extends Retailcrm_Retailcrm_Model_Exchange
|
||||||
*/
|
*/
|
||||||
public function ordersExport()
|
public function ordersExport()
|
||||||
{
|
{
|
||||||
$orders = array();
|
$ordersSites = array();
|
||||||
$ordersList = Mage::getResourceModel('sales/order_collection')
|
$ordersList = Mage::getResourceModel('sales/order_collection')
|
||||||
->addAttributeToSelect('*')
|
->addAttributeToSelect('*')
|
||||||
->joinAttribute('billing_firstname', 'order_address/firstname', 'billing_address_id', null, 'left')
|
->joinAttribute('billing_firstname', 'order_address/firstname', 'billing_address_id', null, 'left')
|
||||||
|
@ -302,20 +305,22 @@ class Retailcrm_Retailcrm_Model_Order extends Retailcrm_Retailcrm_Model_Exchange
|
||||||
->setPageSize(1000)
|
->setPageSize(1000)
|
||||||
->setCurPage(1)
|
->setCurPage(1)
|
||||||
->load();
|
->load();
|
||||||
|
|
||||||
foreach ($ordersList as $order) {
|
foreach ($ordersList as $order) {
|
||||||
$orders[] = $this->prepareOrder($order);
|
$ordersSites[$order->getStore()->getId()][] = $this->prepareOrder($order);
|
||||||
}
|
}
|
||||||
|
|
||||||
$chunked = array_chunk($orders, 50);
|
foreach ($ordersSites as $storeId => $orders) {
|
||||||
unset($orders);
|
$chunked = array_chunk($orders, 50);
|
||||||
foreach ($chunked as $chunk) {
|
unset($orders);
|
||||||
$this->_api->ordersUpload($chunk);
|
foreach ($chunked as $chunk) {
|
||||||
time_nanosleep(0, 250000000);
|
$this->_api->ordersUpload($chunk, Mage::helper('retailcrm')->getSite($storeId));
|
||||||
|
time_nanosleep(0, 250000000);
|
||||||
|
}
|
||||||
|
|
||||||
|
unset($chunked);
|
||||||
}
|
}
|
||||||
|
|
||||||
unset($chunked);
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -323,7 +328,7 @@ class Retailcrm_Retailcrm_Model_Order extends Retailcrm_Retailcrm_Model_Exchange
|
||||||
{
|
{
|
||||||
$config = Mage::getModel('retailcrm/settings', ['storeId' => $order->getStoreId()]);
|
$config = Mage::getModel('retailcrm/settings', ['storeId' => $order->getStoreId()]);
|
||||||
$address = $order->getShippingAddress();
|
$address = $order->getShippingAddress();
|
||||||
|
|
||||||
$orderItems = $order->getItemsCollection()
|
$orderItems = $order->getItemsCollection()
|
||||||
->addAttributeToSelect('*')
|
->addAttributeToSelect('*')
|
||||||
->addAttributeToFilter('product_type', array('eq'=>'simple'))
|
->addAttributeToFilter('product_type', array('eq'=>'simple'))
|
||||||
|
@ -334,18 +339,20 @@ class Retailcrm_Retailcrm_Model_Order extends Retailcrm_Retailcrm_Model_Exchange
|
||||||
if ($item->getParentItemId()) {
|
if ($item->getParentItemId()) {
|
||||||
$parent = Mage::getModel('sales/order_item')->load($item->getParentItemId());
|
$parent = Mage::getModel('sales/order_item')->load($item->getParentItemId());
|
||||||
}
|
}
|
||||||
|
|
||||||
$product = array(
|
$product = array(
|
||||||
'productId' => $item->getProductId(),
|
|
||||||
'productName' => !isset($parent) ? $item->getName() : $parent->getName(),
|
'productName' => !isset($parent) ? $item->getName() : $parent->getName(),
|
||||||
'quantity' => !isset($parent) ? intval($item->getQtyOrdered()) : intval($parent->getQtyOrdered()),
|
'quantity' => !isset($parent) ? intval($item->getQtyOrdered()) : intval($parent->getQtyOrdered()),
|
||||||
'initialPrice' => !isset($parent) ? $item->getPrice() : $parent->getPrice()
|
'initialPrice' => !isset($parent) ? $item->getPrice() : $parent->getPrice(),
|
||||||
|
'offer' => array(
|
||||||
|
'externalId' => $item->getProductId()
|
||||||
|
)
|
||||||
);
|
);
|
||||||
unset($parent);
|
unset($parent);
|
||||||
$items[] = $product;
|
$items[] = $product;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$shipping = $this->getShippingCode($order->getShippingMethod());
|
$shipping = $this->getShippingCode($order->getShippingMethod());
|
||||||
$preparedOrder = array(
|
$preparedOrder = array(
|
||||||
'externalId' => $order->getRealOrderId(),
|
'externalId' => $order->getRealOrderId(),
|
||||||
|
@ -384,23 +391,23 @@ class Retailcrm_Retailcrm_Model_Order extends Retailcrm_Retailcrm_Model_Exchange
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
if(trim($preparedOrder['delivery']['code']) == ''){
|
if(trim($preparedOrder['delivery']['code']) == ''){
|
||||||
unset($preparedOrder['delivery']['code']);
|
unset($preparedOrder['delivery']['code']);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(trim($preparedOrder['paymentType']) == ''){
|
if(trim($preparedOrder['paymentType']) == ''){
|
||||||
unset($preparedOrder['paymentType']);
|
unset($preparedOrder['paymentType']);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(trim($preparedOrder['status']) == ''){
|
if(trim($preparedOrder['status']) == ''){
|
||||||
unset($preparedOrder['status']);
|
unset($preparedOrder['status']);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($order->getCustomerIsGuest() != 0) {
|
if ($order->getCustomerIsGuest() != 0) {
|
||||||
$preparedOrder['customer']['externalId'] = $order->getCustomerId();
|
$preparedOrder['customer']['externalId'] = $order->getCustomerId();
|
||||||
}
|
}
|
||||||
|
|
||||||
return Mage::helper('retailcrm')->filterRecursive($preparedOrder);
|
return Mage::helper('retailcrm')->filterRecursive($preparedOrder);
|
||||||
}
|
}
|
||||||
|
|
|
@ -57,6 +57,7 @@ SOFTWARE.
|
||||||
<show_in_website>1</show_in_website>
|
<show_in_website>1</show_in_website>
|
||||||
<show_in_store>1</show_in_store>
|
<show_in_store>1</show_in_store>
|
||||||
<tooltip><![CDATA[https://<i><b>YourCrmName</b></i>.retailcrm.ru]]></tooltip>
|
<tooltip><![CDATA[https://<i><b>YourCrmName</b></i>.retailcrm.ru]]></tooltip>
|
||||||
|
<backend_model>retailcrm_retailcrm_block_adminhtml_system_config_backend_api_url</backend_model>
|
||||||
</api_url>
|
</api_url>
|
||||||
<api_key translate="label comment">
|
<api_key translate="label comment">
|
||||||
<label>API Key</label>
|
<label>API Key</label>
|
||||||
|
@ -66,6 +67,7 @@ SOFTWARE.
|
||||||
<show_in_website>1</show_in_website>
|
<show_in_website>1</show_in_website>
|
||||||
<show_in_store>1</show_in_store>
|
<show_in_store>1</show_in_store>
|
||||||
<tooltip><![CDATA[To generate an API Key, log in to RetailCRM then select Admin > Integration > API Keys]]></tooltip>
|
<tooltip><![CDATA[To generate an API Key, log in to RetailCRM then select Admin > Integration > API Keys]]></tooltip>
|
||||||
|
<backend_model>retailcrm_retailcrm_block_adminhtml_system_config_backend_api_key</backend_model>
|
||||||
</api_key>
|
</api_key>
|
||||||
</fields>
|
</fields>
|
||||||
</general>
|
</general>
|
||||||
|
@ -153,7 +155,26 @@ SOFTWARE.
|
||||||
|
|
||||||
</fields>
|
</fields>
|
||||||
</load_order>
|
</load_order>
|
||||||
|
<site translate="label comment" module="retailcrm">
|
||||||
|
<expanded>1</expanded>
|
||||||
|
<label>Site</label>
|
||||||
|
<frontend_type>text</frontend_type>
|
||||||
|
<show_in_default>1</show_in_default>
|
||||||
|
<show_in_website>0</show_in_website>
|
||||||
|
<show_in_store>0</show_in_store>
|
||||||
|
<sort_order>16</sort_order>
|
||||||
|
<frontend_model>retailcrm/adminhtml_system_config_form_fieldset_site</frontend_model>
|
||||||
|
</site>
|
||||||
|
<sites translate="label comment" module="retailcrm">
|
||||||
|
<expanded>1</expanded>
|
||||||
|
<label>Sites</label>
|
||||||
|
<frontend_type>text</frontend_type>
|
||||||
|
<show_in_default>0</show_in_default>
|
||||||
|
<show_in_website>1</show_in_website>
|
||||||
|
<show_in_store>1</show_in_store>
|
||||||
|
<sort_order>17</sort_order>
|
||||||
|
<frontend_model>retailcrm/adminhtml_system_config_form_fieldset_sites</frontend_model>
|
||||||
|
</sites>
|
||||||
</groups>
|
</groups>
|
||||||
</retailcrm>
|
</retailcrm>
|
||||||
</sections>
|
</sections>
|
||||||
|
|
Loading…
Add table
Reference in a new issue