ordersHistory (partial)
This commit is contained in:
parent
febee5c279
commit
a0305e202e
@ -3,6 +3,7 @@ class Retailcrm_Retailcrm_Block_Adminhtml_System_Config_Form_Fieldset_Shipping e
|
|||||||
{
|
{
|
||||||
public function render(Varien_Data_Form_Element_Abstract $element)
|
public function render(Varien_Data_Form_Element_Abstract $element)
|
||||||
{
|
{
|
||||||
|
Mage::getModel( "retailcrm/exchange" )->ordersHistory();
|
||||||
$html = $this->_getHeaderHtml($element);
|
$html = $this->_getHeaderHtml($element);
|
||||||
|
|
||||||
if(!empty($this->_apiUrl) && !empty($this->_apiKey) && $this->_isCredentialCorrect) {
|
if(!empty($this->_apiUrl) && !empty($this->_apiKey) && $this->_isCredentialCorrect) {
|
||||||
|
@ -163,9 +163,9 @@ class Retailcrm_Retailcrm_Model_Exchange
|
|||||||
private function processOrders($orders, $time)
|
private function processOrders($orders, $time)
|
||||||
{
|
{
|
||||||
if(!empty($orders)) {
|
if(!empty($orders)) {
|
||||||
/*Mage::getModel('core/config')->saveConfig(
|
Mage::getModel('core/config')->saveConfig(
|
||||||
'retailcrm/general/history', $time
|
'retailcrm/general/history', $time
|
||||||
);*/
|
);
|
||||||
|
|
||||||
foreach ($orders as $order) {
|
foreach ($orders as $order) {
|
||||||
if(!empty($order['externalId'])) {
|
if(!empty($order['externalId'])) {
|
||||||
@ -174,6 +174,7 @@ class Retailcrm_Retailcrm_Model_Exchange
|
|||||||
$this->doCreate($order);
|
$this->doCreate($order);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
die();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -182,15 +183,224 @@ class Retailcrm_Retailcrm_Model_Exchange
|
|||||||
*/
|
*/
|
||||||
private function doCreate($order)
|
private function doCreate($order)
|
||||||
{
|
{
|
||||||
|
try {
|
||||||
|
$response = $this->_api->ordersGet($order['id'], $by = 'id');
|
||||||
|
if (
|
||||||
|
$response->isSuccessful()
|
||||||
|
&&
|
||||||
|
200 === $response->getStatusCode()
|
||||||
|
) {
|
||||||
|
$order = $response->order;
|
||||||
|
} else {
|
||||||
|
Mage::log(
|
||||||
|
sprintf(
|
||||||
|
"Orders get error: [HTTP status %s] %s",
|
||||||
|
$response->getStatusCode(),
|
||||||
|
$response->getErrorMsg()
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
if (isset($response['errors'])) {
|
||||||
|
Mage::log(implode(' :: ', $response['errors']));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Retailcrm_Retailcrm_Model_Exception_CurlException $e) {
|
||||||
|
Mage::log($e->getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
// get references
|
||||||
$this->_config = Mage::getStoreConfig('retailcrm');
|
$this->_config = Mage::getStoreConfig('retailcrm');
|
||||||
$statuses = array_flip(array_filter($this->_config['status']));
|
|
||||||
$paymentsStatuses = array_filter($this->_config['paymentstatus']);
|
|
||||||
$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']));
|
||||||
|
|
||||||
// create new order & fix externalId
|
// get store
|
||||||
|
$_store = Mage::getModel("core/store")->load($order['site']);
|
||||||
|
$_siteId = Mage::getModel('core/store')->load($_store->getId())->getWebsiteId();
|
||||||
|
$_sendConfirmation = '0';
|
||||||
|
|
||||||
Mage::log("Create: ", null, 'history.log');
|
// search or create customer
|
||||||
|
$customer = Mage::getSingleton('customer/customer');
|
||||||
|
$customer->setWebsiteId($_siteId);
|
||||||
|
$customer->loadByEmail($order['email']);
|
||||||
|
|
||||||
|
if (!is_numeric($customer->getId())) {
|
||||||
|
$customer
|
||||||
|
->setGropuId(1)
|
||||||
|
->setWebsiteId($_siteId)
|
||||||
|
->setStore($_store)
|
||||||
|
->setEmail($order['email'])
|
||||||
|
->setFirstname($order['firstName'])
|
||||||
|
->setLastname($order['lastName'])
|
||||||
|
->setMiddleName($order['patronymic'])
|
||||||
|
->setPassword(uniqid())
|
||||||
|
;
|
||||||
|
|
||||||
|
try {
|
||||||
|
$customer->save();
|
||||||
|
$customer->setConfirmation(null);
|
||||||
|
$customer->save();
|
||||||
|
} catch (Exception $e) {
|
||||||
|
Mage::log($e->getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
$address = Mage::getModel("customer/address");
|
||||||
|
$address->setCustomerId($customer->getId())
|
||||||
|
->setFirstname($customer->getFirstname())
|
||||||
|
->setMiddleName($customer->getMiddlename())
|
||||||
|
->setLastname($customer->getLastname())
|
||||||
|
->setCountryId($this->getCountryCode($order['customer']['address']['country']))
|
||||||
|
->setPostcode($order['delivery']['address']['index'])
|
||||||
|
->setCity($order['delivery']['address']['city'])
|
||||||
|
->setTelephone($order['phone'])
|
||||||
|
->setStreet($order['delivery']['address']['street'])
|
||||||
|
->setIsDefaultBilling('1')
|
||||||
|
->setIsDefaultShipping('1')
|
||||||
|
->setSaveInAddressBook('1');
|
||||||
|
|
||||||
|
try{
|
||||||
|
$address->save();
|
||||||
|
}
|
||||||
|
catch (Exception $e) {
|
||||||
|
Mage::log($e->getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
$response = $this->_api->customersFixExternalIds(
|
||||||
|
array(
|
||||||
|
'id' => $order['customer']['id'],
|
||||||
|
'externalId' => $customer->getId()
|
||||||
|
)
|
||||||
|
);
|
||||||
|
if (
|
||||||
|
!$response->isSuccessful()
|
||||||
|
||
|
||||||
|
200 !== $response->getStatusCode()
|
||||||
|
) {
|
||||||
|
Mage::log(
|
||||||
|
sprintf(
|
||||||
|
"Orders fix error: [HTTP status %s] %s",
|
||||||
|
$response->getStatusCode(),
|
||||||
|
$response->getErrorMsg()
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
if (isset($response['errors'])) {
|
||||||
|
Mage::log(implode(' :: ', $response['errors']));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Retailcrm_Retailcrm_Model_Exception_CurlException $e) {
|
||||||
|
Mage::log($e->getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
$products = array();
|
||||||
|
foreach ($order['items'] as $item) {
|
||||||
|
$products[$item['offer']['externalId']] = array('qty' => $item['quantity']);
|
||||||
|
}
|
||||||
|
|
||||||
|
$orderData = array(
|
||||||
|
'session' => array(
|
||||||
|
'customer_id' => $customer->getId(),
|
||||||
|
'store_id' => $_store->getId(),
|
||||||
|
),
|
||||||
|
'payment' => array(
|
||||||
|
'method' => $payments[$order['paymentType']],
|
||||||
|
),
|
||||||
|
'add_products' => $products,
|
||||||
|
'order' => array(
|
||||||
|
'account' => array(
|
||||||
|
'group_id' => $customer->getGroupId(),
|
||||||
|
'email' => $order['email']
|
||||||
|
),
|
||||||
|
'billing_address' => array(
|
||||||
|
'firstname' => $order['firstName'],
|
||||||
|
'middlename' => $order['patronymic'],
|
||||||
|
'lastname' => $order['lastName'],
|
||||||
|
'street' => $order['customer']['address']['street'],
|
||||||
|
'city' => $order['customer']['address']['city'],
|
||||||
|
'country_id' => $this->getCountryCode($order['customer']['address']['country']),
|
||||||
|
'region' => $order['customer']['address']['region'],
|
||||||
|
'postcode' => $order['customer']['address']['index'],
|
||||||
|
'telephone' => $order['phone'],
|
||||||
|
),
|
||||||
|
'shipping_address' => array(
|
||||||
|
'firstname' => $order['firstName'],
|
||||||
|
'middlename' => $order['patronymic'],
|
||||||
|
'lastname' => $order['lastName'],
|
||||||
|
'street' => $order['delivery']['address']['street'],
|
||||||
|
'city' => $order['delivery']['address']['city'],
|
||||||
|
'country_id' => $this->getCountryCode($order['customer']['address']['country']),
|
||||||
|
'region' => $order['delivery']['address']['region'],
|
||||||
|
'postcode' => $order['delivery']['address']['index'],
|
||||||
|
'telephone' => $order['phone'],
|
||||||
|
),
|
||||||
|
'shipping_method' => $shippings[$order['delivery']['code']],
|
||||||
|
'comment' => array(
|
||||||
|
'customer_note' => $order['customerComment'],
|
||||||
|
),
|
||||||
|
'send_confirmation' => $_sendConfirmation
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
Mage::unregister('sales_order_place_after');
|
||||||
|
Mage::register('sales_order_place_after', 1);
|
||||||
|
|
||||||
|
$quote = Mage::getModel('sales/quote')->setStoreId($_store->getId());
|
||||||
|
$quote->assignCustomer($customer);
|
||||||
|
$quote->setSendCconfirmation($_sendConfirmation);
|
||||||
|
|
||||||
|
foreach($_products as $idx => $val) {
|
||||||
|
$product = Mage::getModel('catalog/product')->load($idx);
|
||||||
|
$quote->addProduct($product, new Varien_Object($val));
|
||||||
|
}
|
||||||
|
|
||||||
|
$quote->getBillingAddress()->addData($orderData['order']['billing_address']);
|
||||||
|
|
||||||
|
$shippingAddress = $quote->getShippingAddress()->addData($orderData['order']['shipping_address']);
|
||||||
|
$shippingAddress
|
||||||
|
->collectTotals()
|
||||||
|
->setCollectShippingRates(true)
|
||||||
|
->collectShippingRates()
|
||||||
|
->setShippingMethod($orderData['order']['shipping_method'])
|
||||||
|
->setpaymentMethod($orderData['payment']['method'])
|
||||||
|
;
|
||||||
|
|
||||||
|
$quote->getPayment()->importData($orderData['payment']);
|
||||||
|
$quote->setTotalsCollectedFlag(false)->collectTotals()->save();
|
||||||
|
|
||||||
|
$service = Mage::getModel('sales/service_quote', $quote);
|
||||||
|
$service->submitAll();
|
||||||
|
|
||||||
|
try {
|
||||||
|
$response = $this->_api->ordersFixExternalIds(
|
||||||
|
array(
|
||||||
|
'id' => $order['id'],
|
||||||
|
'externalId' => $service->getOrder()->getId()
|
||||||
|
)
|
||||||
|
);
|
||||||
|
if (
|
||||||
|
!$response->isSuccessful()
|
||||||
|
||
|
||||||
|
200 !== $response->getStatusCode()
|
||||||
|
) {
|
||||||
|
Mage::log(
|
||||||
|
sprintf(
|
||||||
|
"Orders fix error: [HTTP status %s] %s",
|
||||||
|
$response->getStatusCode(),
|
||||||
|
$response->getErrorMsg()
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
if (isset($response['errors'])) {
|
||||||
|
Mage::log(implode(' :: ', $response['errors']));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Retailcrm_Retailcrm_Model_Exception_CurlException $e) {
|
||||||
|
Mage::log($e->getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
Mage::log("Create: " . $order['externalId'], null, 'history.log');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -235,7 +445,7 @@ class Retailcrm_Retailcrm_Model_Exchange
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (in_array($group, array('cancel'))) {
|
if (in_array($group, array('cancel'))) {
|
||||||
$magentoOrder->cancel();
|
$magentoOrder->setState(Mage_Sales_Model_Order::STATE_CANCELED, true);
|
||||||
$magentoOrder->save();
|
$magentoOrder->save();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -371,4 +581,22 @@ class Retailcrm_Retailcrm_Model_Exchange
|
|||||||
|
|
||||||
return $datetime;
|
return $datetime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function getCountryCode($string)
|
||||||
|
{
|
||||||
|
$country = empty($string) ? 'RU' : $string;
|
||||||
|
$xmlObj = new Varien_Simplexml_Config(Mage::getModuleDir('etc', 'Retailcrm_Retailcrm').DS.'country.xml');
|
||||||
|
$xmlData = $xmlObj->getNode();
|
||||||
|
|
||||||
|
if ($country != 'RU') {
|
||||||
|
foreach ($xmlData as $elem) {
|
||||||
|
if ($elem->name == $country || $elem->english == $country) {
|
||||||
|
$country = $elem->alpha2;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return (string) $country;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,8 +14,10 @@ class Retailcrm_Retailcrm_Model_Observer
|
|||||||
*/
|
*/
|
||||||
public function orderCreate(Varien_Event_Observer $observer)
|
public function orderCreate(Varien_Event_Observer $observer)
|
||||||
{
|
{
|
||||||
$order = $observer->getEvent()->getOrder();
|
if (Mage::registry('sales_order_place_after') != 1){//do nothing if the event was dispatched
|
||||||
Mage::getModel('retailcrm/exchange')->ordersCreate($order);
|
$order = $observer->getEvent()->getOrder();
|
||||||
|
Mage::getModel('retailcrm/exchange')->ordersCreate($order);
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
2774
app/code/community/Retailcrm/Retailcrm/etc/country.xml
Normal file
2774
app/code/community/Retailcrm/Retailcrm/etc/country.xml
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user