From 43b173ace5108d6e86b87ce8818fb0e3b999bb87 Mon Sep 17 00:00:00 2001 From: Alex Lushpai Date: Tue, 9 Feb 2016 04:22:06 +0300 Subject: [PATCH] history --- admin/controller/module/retailcrm.php | 47 ++- admin/model/retailcrm/history.php | 515 ++++++++++++++------------ admin/model/retailcrm/references.php | 12 +- 3 files changed, 321 insertions(+), 253 deletions(-) diff --git a/admin/controller/module/retailcrm.php b/admin/controller/module/retailcrm.php index 8bbe1b0..f03525f 100644 --- a/admin/controller/module/retailcrm.php +++ b/admin/controller/module/retailcrm.php @@ -2,24 +2,42 @@ require_once DIR_SYSTEM . 'library/retailcrm/bootstrap.php'; +/** + * Class ControllerModule + */ class ControllerModuleRetailcrm extends Controller { - private $error = array(); + private $_error = array(); protected $log, $statuses, $payments, $deliveryTypes, $retailcrm; public $children, $template; + /** + * Install method + * + * @return void + */ public function install() { $this->load->model('setting/setting'); - $this->model_setting_setting->editSetting('retailcrm', array('retailcrm_status' => 1)); + $this->model_setting_setting + ->editSetting('retailcrm', array('retailcrm_status' => 1)); } + /** + * Uninstall method + * + * @return void + */ public function uninstall() { $this->load->model('setting/setting'); - $this->model_setting_setting->editSetting('retailcrm', array('retailcrm_status' => 0)); + $this->model_setting_setting + ->editSetting('retailcrm', array('retailcrm_status' => 0)); } + /** + * Setup page + */ public function index() { @@ -59,8 +77,12 @@ class ControllerModuleRetailcrm extends Controller $this->data['retailcrm_errors'] = array(); $this->data['saved_settings'] = $this->model_setting_setting->getSetting('retailcrm'); - $url = $this->data['saved_settings']['retailcrm_url']; - $key = $this->data['saved_settings']['retailcrm_apikey']; + $url = isset($this->data['saved_settings']['retailcrm_url']) + ? $this->data['saved_settings']['retailcrm_url'] + : null; + $key = isset($this->data['saved_settings']['retailcrm_apikey']) + ? $this->data['saved_settings']['retailcrm_apikey'] + : null; if (!empty($url) && !empty($key)) { @@ -151,6 +173,9 @@ class ControllerModuleRetailcrm extends Controller $this->response->setOutput($this->render()); } + /** + * History method + */ public function history() { if (file_exists(DIR_APPLICATION . 'model/retailcrm/custom/history.php')) { @@ -162,6 +187,9 @@ class ControllerModuleRetailcrm extends Controller } } + /** + * ICML generation + */ public function icml() { if (file_exists(DIR_APPLICATION . 'model/retailcrm/custom/icml.php')) { @@ -173,13 +201,18 @@ class ControllerModuleRetailcrm extends Controller } } + /** + * Validate + * + * @return bool + */ private function validate() { if (!$this->user->hasPermission('modify', 'module/retailcrm')) { - $this->error['warning'] = $this->language->get('error_permission'); + $this->_error['warning'] = $this->language->get('error_permission'); } - if (!$this->error) { + if (!$this->_error) { return TRUE; } else { return FALSE; diff --git a/admin/model/retailcrm/history.php b/admin/model/retailcrm/history.php index b8a2afa..105c341 100644 --- a/admin/model/retailcrm/history.php +++ b/admin/model/retailcrm/history.php @@ -8,7 +8,7 @@ class ModelRetailcrmHistory extends Model $this->load->model('setting/store'); $this->load->model('sale/order'); $this->load->model('sale/customer'); - $this->load->model('retailcrm/tools'); + $this->load->model('retailcrm/references'); $this->load->model('catalog/product'); $this->load->model('localisation/zone'); @@ -17,7 +17,9 @@ class ModelRetailcrmHistory extends Model $settings = $this->model_setting_setting->getSetting('retailcrm'); $settings['domain'] = parse_url(HTTP_SERVER, PHP_URL_HOST); - if (!empty($settings['retailcrm_url']) && !empty($settings['retailcrm_apikey'])) { + if (!empty($settings['retailcrm_url']) + && !empty($settings['retailcrm_apikey']) + ) { $crm = new RetailcrmProxy( $settings['retailcrm_url'], $settings['retailcrm_apikey'], @@ -25,6 +27,7 @@ class ModelRetailcrmHistory extends Model ); $orders = $crm->ordersHistory(); + $ordersIdsFix = array(); $customersIdsFix = array(); $subtotalSettings = $this->model_setting_setting->getSetting('sub_total'); @@ -35,260 +38,292 @@ class ModelRetailcrmHistory extends Model $payment = array_flip($settings['retailcrm_payment']); $status = array_flip($settings['retailcrm_status']); - $ocPayment = $this->model_retailcrm_tools->getOpercartPaymentTypes(); - $ocDelivery = $this->model_retailcrm_tools->getOpercartDeliveryMethods(); + $ocPayment = $this->model_retailcrm_references + ->getOpercartPaymentTypes(); + + $ocDelivery = $this->model_retailcrm_references + ->getOpercartDeliveryTypes(); $zones = $this->model_localisation_zone->getZones(); - foreach ($orders as $order) { + foreach ($orders['orders'] as $order) { - if (empty($order['deleted'])) { + if (isset($order['deleted'])) continue; - $data = array(); + if (isset($order['externalId'])) { + $order = $crm->ordersGet($order['externalId']); + } - $customer_id = (!empty($order['customer']['externalId'])) - ? $order['customer']['externalId'] - : '' - ; + $data = array(); - if (isset($order['externalId'])) { - /* - * opercart developers believe that to remove all - * products from the order during the editing is a good - * idea... - * - * so we have to get order data from crm - * - */ - $order = $crm->getOrder($order['externalId']); - } else { - if ($customer_id == '') { - $cData = array( - 'customer_group_id' => '1', - 'firstname' => $order['customer']['firstName'], - 'lastname' => (isset($order['customer']['lastName'])) - ? $order['customer']['lastName'] - : ' ' - , - 'email' => $order['customer']['email'], - 'telephone' => (isset($order['customer']['phones'][0]['number'])) - ? $order['customer']['phones'][0]['number'] - : ' ' - , - 'newsletter' => 0, - 'password' => 'tmppass', - 'status' => 1, - 'address' => array( - 'firstname' => $order['customer']['firstName'], - 'lastname' => (isset($order['customer']['lastName'])) - ? $order['customer']['lastName'] - : ' ' - , - 'address_1' => $order['customer']['address']['text'], - 'city' => isset($order['customer']['address']['city']) - ? $order['customer']['address']['city'] - : $order['delivery']['address']['city'] - , - 'postcode' => isset($order['customer']['address']['index']) - ? $order['customer']['address']['index'] - : $order['delivery']['address']['index'] - , - ), - 'tax_id' => '', - 'zone_id' => '', - ); + $customer_id = (!empty($order['customer']['externalId'])) + ? $order['customer']['externalId'] + : ''; - $this->model_sale_customer->addCustomer($cData); - if (isset($order['customer']['email']) && $order['customer']['email'] != '') { - $tryToFind = $this->model_sale_customer->getCustomerByEmail($order['customer']['email']); - $customer_id = $tryToFind['customer_id']; - } else { - $last = $this->model_sale_customer->getCustomers( - $data = array('order' => 'DESC', 'limit' => 1) - ); - $customer_id = $last[0]['customer_id']; - } - - $customersIdsFix[] = array('id' => $order['customer']['id'], 'externalId' => (int)$customer_id); - } - } - - /* - * Build order data - */ - - $data['store_id'] = ($this->config->get('config_store_id') == null) - ? 0 - : $this->config->get('config_store_id') - ; - $data['customer'] = $order['customer']['firstName']; - $data['customer_id'] = $customer_id; - $data['customer_group_id'] = 1; - $data['firstname'] = $order['firstName']; - $data['lastname'] = (isset($order['lastName'])) ? $order['lastName'] : ' '; - $data['email'] = $order['customer']['email']; - $data['telephone'] = (isset($order['customer']['phones'][0]['number'])) - ? $order['customer']['phones'][0]['number'] - : ' ' - ; - - $data['comment'] = isset($order['customerComment']) ? $order['customerComment'] : ''; - $data['fax'] = ''; - - $data['payment_address'] = '0'; - $data['payment_firstname'] = $order['firstName']; - $data['payment_lastname'] = (isset($order['lastName'])) ? $order['lastName'] : ' '; - $data['payment_address_1'] = $order['customer']['address']['text']; - $data['payment_address_2'] = ''; - $data['payment_company'] = ''; - $data['payment_company_id'] = ''; - $data['payment_city'] = isset($order['customer']['address']['city']) - ? $order['customer']['address']['city'] - : $order['delivery']['address']['city'] - ; - $data['payment_postcode'] = isset($order['customer']['address']['index']) - ? $order['customer']['address']['index'] - : $order['delivery']['address']['index'] - ; - - /* - * Country & zone id detection - */ - - $country = 0; - $region = ''; - - if(is_int($order['delivery']['address']['region'])) { - $region = $order['delivery']['address']['region']; - } else { - foreach($zones as $zone) { - if($order['delivery']['address']['region'] == $zone['name']) { - $region = $zone['zone_id']; - } - } - - } - - $data['payment_country_id'] = isset($order['customer']['address']['country']) - ? $order['customer']['address']['country'] - : $order['delivery']['address']['country'] - ; - $data['payment_zone_id'] = isset($order['customer']['address']['region']) - ? $order['customer']['address']['region'] - : $region - ; - - $data['shipping_country_id'] = $order['delivery']['address']['country']; - $data['shipping_zone_id'] = $region; - - $data['shipping_address'] = '0'; - $data['shipping_firstname'] = $order['customer']['firstName']; - $data['shipping_lastname'] = (isset($order['customer']['lastName'])) - ? $order['customer']['lastName'] - : ' ' - ; - $data['shipping_address_1'] = $order['delivery']['address']['text']; - $data['shipping_address_2'] = ''; - $data['shipping_company'] = ''; - $data['shipping_company_id'] = ''; - $data['shipping_city'] = $order['delivery']['address']['city']; - $data['shipping_postcode'] = $order['delivery']['address']['index']; - - $data['shipping'] = $delivery[$order['delivery']['code']]; - $data['shipping_method'] = $ocDelivery[$data['shipping']]; - $data['shipping_code'] = $delivery[$order['delivery']['code']]; - $data['payment'] = $payment[$order['paymentType']]; - $data['payment_method'] = $ocPayment[$data['payment']]; - $data['payment_code'] = $payment[$order['paymentType']]; - - // this data will not retrive from crm for now - $data['tax'] = ''; - $data['tax_id'] = ''; - $data['product'] = ''; - $data['product_id'] = ''; - $data['reward'] = ''; - $data['affiliate'] = ''; - $data['affiliate_id'] = ''; - $data['payment_tax_id'] = ''; - $data['order_product_id'] = ''; - $data['payment_company'] = ''; - $data['payment_company_id'] = ''; - $data['company'] = ''; - $data['company_id'] = ''; - - $data['order_product'] = array(); - - foreach($order['items'] as $item) { - $p = $this->model_catalog_product->getProduct($item['offer']['externalId']); - $data['order_product'][] = array( - 'product_id' => $item['offer']['externalId'], - 'name' => $item['offer']['name'], - 'quantity' => $item['quantity'], - 'price' => $item['initialPrice'], - 'total' => $item['initialPrice'] * $item['quantity'], - 'model' => $p['model'], - - // this data will not retrive from crm - 'order_product_id' => '', - 'tax' => 0, - 'reward' => 0 - ); - } - - $deliveryCost = isset($order['delivery']['cost']) ? $order['delivery']['cost'] : 0; - - $data['order_total'] = array( - array( - 'order_total_id' => '', - 'code' => 'sub_total', - 'title' => $this->language->get('product_summ'), - 'value' => $order['summ'], - 'text' => $order['summ'], - 'sort_order' => $subtotalSettings['sub_total_sort_order'] - ), - array( - 'order_total_id' => '', - 'code' => 'shipping', - 'title' => $ocDelivery[$data['shipping_code']], - 'value' => $deliveryCost, - 'text' => $deliveryCost, - 'sort_order' => $shippingSettings['shipping_sort_order'] - ), - array( - 'order_total_id' => '', - 'code' => 'total', - 'title' => $this->language->get('column_total'), - 'value' => isset($order['totalSumm']) - ? $order['totalSumm'] - : $order['summ'] + $deliveryCost - , - 'text' => isset($order['totalSumm']) - ? $order['totalSumm'] - : $order['summ'] + $deliveryCost - , - 'sort_order' => $totalSettings['total_sort_order'] + if ($customer_id == '') { + $cData = array( + 'customer_group_id' => '1', + 'firstname' => $order['customer']['firstName'], + 'lastname' => (isset($order['customer']['lastName'])) + ? $order['customer']['lastName'] + : ' ', + 'email' => $order['customer']['email'], + 'telephone' => ( + isset($order['customer']['phones'][0]['number']) ) + ? $order['customer']['phones'][0]['number'] + : ' ', + 'newsletter' => 0, + 'password' => 'tmppass', + 'status' => 1, + 'address' => array( + 'firstname' => $order['customer']['firstName'], + 'lastname' => ( + isset($order['customer']['lastName']) + ) + ? $order['customer']['lastName'] + : ' ', + 'address_1' => $order['customer']['address']['text'], + 'city' => isset( + $order['customer']['address']['city'] + ) + ? $order['customer']['address']['city'] + : $order['delivery']['address']['city'], + 'postcode' => isset( + $order['customer']['address']['index'] + ) + ? $order['customer']['address']['index'] + : $order['delivery']['address']['index'], + ), + 'tax_id' => '', + 'zone_id' => '', ); - $data['fromApi'] = true; + $this->model_sale_customer->addCustomer($cData); - if (isset($order['externalId'])) { - if(array_key_exists($order['status'], $status)) { - $data['order_status_id'] = $status[$order['status']]; - } else { - $tmpOrder = $this->model_sale_order->getOrder($order['externalId']); - $data['order_status_id'] = $tmpOrder['order_status_id']; - } - - $this->model_sale_order->editOrder($order['externalId'], $data); + if (isset($order['customer']['email']) + && $order['customer']['email'] != '' + ) { + $tryToFind = $this->model_sale_customer + ->getCustomerByEmail( + $order['customer']['email'] + ); + $customer_id = $tryToFind['customer_id']; } else { - $data['order_status_id'] = 1; - $this->model_sale_order->addOrder($data); - $last = $this->model_sale_order->getOrders($data = array('order' => 'DESC', 'limit' => 1)); - $ordersIdsFix[] = array('id' => $order['id'], 'externalId' => (int) $last[0]['order_id']); + $last = $this->model_sale_customer->getCustomers( + $data = array('order' => 'DESC', 'limit' => 1) + ); + $customer_id = $last[0]['customer_id']; } + $customersIdsFix[] = array( + 'id' => $order['customer']['id'], + 'externalId' => (int)$customer_id + ); + } + + /* + * Build order data + */ + + $data['store_id'] = ( + $this->config->get('config_store_id') == null + ) + ? 0 + : $this->config->get('config_store_id'); + $data['customer'] = $order['customer']['firstName']; + $data['customer_id'] = $customer_id; + $data['customer_group_id'] = 1; + $data['firstname'] = $order['firstName']; + $data['lastname'] = (isset($order['lastName'])) + ? $order['lastName'] + : ' '; + $data['email'] = $order['customer']['email']; + $data['telephone'] = ( + isset($order['customer']['phones'][0]['number']) + ) + ? $order['customer']['phones'][0]['number'] + : ' '; + + $data['comment'] = isset( + $order['customerComment'] + ) + ? $order['customerComment'] + : ''; + $data['fax'] = ''; + + $data['payment_address'] = '0'; + $data['payment_firstname'] = $order['firstName']; + $data['payment_lastname'] = ( + isset($order['lastName']) + ) ? $order['lastName'] : ' '; + $data['payment_address_1'] = $order['customer']['address']['text']; + $data['payment_address_2'] = ''; + $data['payment_company'] = ''; + $data['payment_company_id'] = ''; + $data['payment_city'] = isset( + $order['customer']['address']['city'] + ) + ? $order['customer']['address']['city'] + : $order['delivery']['address']['city']; + $data['payment_postcode'] = isset( + $order['customer']['address']['index'] + ) + ? $order['customer']['address']['index'] + : $order['delivery']['address']['index']; + + /* + * Country & zone id detection + */ + + $country = 0; + $region = ''; + + if (is_int($order['delivery']['address']['region'])) { + $region = $order['delivery']['address']['region']; + } else { + foreach ($zones as $zone) { + if ($order['delivery']['address']['region'] == $zone['name']) { + $region = $zone['zone_id']; + } + } + } + + $data['payment_country_id'] = isset( + $order['customer']['address']['country'] + ) + ? $order['customer']['address']['country'] + : $order['delivery']['address']['country']; + $data['payment_zone_id'] = isset( + $order['customer']['address']['region'] + ) + ? $order['customer']['address']['region'] + : $region; + + $data['shipping_country_id'] = $order['delivery']['address']['country']; + $data['shipping_zone_id'] = $region; + + $data['shipping_address'] = '0'; + $data['shipping_firstname'] = $order['customer']['firstName']; + $data['shipping_lastname'] = ( + isset($order['customer']['lastName']) + ) + ? $order['customer']['lastName'] + : ' '; + $data['shipping_address_1'] = $order['delivery']['address']['text']; + $data['shipping_address_2'] = ''; + $data['shipping_company'] = ''; + $data['shipping_company_id'] = ''; + $data['shipping_city'] = $order['delivery']['address']['city']; + $data['shipping_postcode'] = $order['delivery']['address']['index']; + + $data['shipping'] = $delivery[$order['delivery']['code']]; + $data['shipping_method'] = $ocDelivery[$data['shipping']]; + $data['shipping_code'] = $delivery[$order['delivery']['code']]; + $data['payment'] = $payment[$order['paymentType']]; + $data['payment_method'] = $ocPayment[$data['payment']]; + $data['payment_code'] = $payment[$order['paymentType']]; + + // this data will not retrive from crm for now + $data['tax'] = ''; + $data['tax_id'] = ''; + $data['product'] = ''; + $data['product_id'] = ''; + $data['reward'] = ''; + $data['affiliate'] = ''; + $data['affiliate_id'] = ''; + $data['payment_tax_id'] = ''; + $data['order_product_id'] = ''; + $data['payment_company'] = ''; + $data['payment_company_id'] = ''; + $data['company'] = ''; + $data['company_id'] = ''; + + $data['order_product'] = array(); + + foreach ($order['items'] as $item) { + $p = $this->model_catalog_product + ->getProduct($item['offer']['externalId']); + $data['order_product'][] = array( + 'product_id' => $item['offer']['externalId'], + 'name' => $item['offer']['name'], + 'quantity' => $item['quantity'], + 'price' => $item['initialPrice'], + 'total' => $item['initialPrice'] * $item['quantity'], + 'model' => $p['model'], + + // this data will not retrive from crm + 'order_product_id' => '', + 'tax' => 0, + 'reward' => 0 + ); + } + + $deliveryCost = isset( + $order['delivery']['cost'] + ) + ? $order['delivery']['cost'] + : 0; + + $data['order_total'] = array( + array( + 'order_total_id' => '', + 'code' => 'sub_total', + 'title' => $this->language->get('product_summ'), + 'value' => $order['summ'], + 'text' => $order['summ'], + 'sort_order' => $subtotalSettings['sub_total_sort_order'] + ), + array( + 'order_total_id' => '', + 'code' => 'shipping', + 'title' => $ocDelivery[$data['shipping_code']], + 'value' => $deliveryCost, + 'text' => $deliveryCost, + 'sort_order' => $shippingSettings['shipping_sort_order'] + ), + array( + 'order_total_id' => '', + 'code' => 'total', + 'title' => $this->language->get('column_total'), + 'value' => isset($order['totalSumm']) + ? $order['totalSumm'] + : $order['summ'] + $deliveryCost, + 'text' => isset($order['totalSumm']) + ? $order['totalSumm'] + : $order['summ'] + $deliveryCost, + 'sort_order' => $totalSettings['total_sort_order'] + ) + ); + + $data['fromApi'] = true; + + + if (isset($order['externalId'])) { + if (array_key_exists($order['status'], $status)) { + $data['order_status_id'] = $status[$order['status']]; + } else { + $tmpOrder = $this->model_sale_order + ->getOrder($order['externalId']); + $data['order_status_id'] = $tmpOrder['order_status_id']; + } + + $this->model_sale_order + ->editOrder($order['externalId'], $data); + } else { + $data['order_status_id'] = 1; + $this->model_sale_order->addOrder($data); + + $last = $this->model_sale_order + ->getOrders( + $data = array('order' => 'DESC', 'limit' => 1) + ); + + $ordersIdsFix[] = array( + 'id' => $order['id'], + 'externalId' => (int) $last[0]['order_id'] + ); } } diff --git a/admin/model/retailcrm/references.php b/admin/model/retailcrm/references.php index d031250..b5aef36 100644 --- a/admin/model/retailcrm/references.php +++ b/admin/model/retailcrm/references.php @@ -30,7 +30,7 @@ class ModelRetailcrmReferences extends Model ); } - protected function getOpercartDeliveryTypes() + public function getOpercartDeliveryTypes() { $deliveryMethods = array(); $files = glob(DIR_APPLICATION . 'controller/shipping/*.php'); @@ -52,7 +52,7 @@ class ModelRetailcrmReferences extends Model return $deliveryMethods; } - protected function getOpercartOrderStatuses() + public function getOpercartOrderStatuses() { $this->load->model('localisation/order_status'); @@ -60,7 +60,7 @@ class ModelRetailcrmReferences extends Model ->getOrderStatuses(array()); } - protected function getOpercartPaymentTypes() + public function getOpercartPaymentTypes() { $paymentTypes = array(); $files = glob(DIR_APPLICATION . 'controller/payment/*.php'); @@ -82,7 +82,7 @@ class ModelRetailcrmReferences extends Model return $paymentTypes; } - protected function getApiDeliveryTypes() + public function getApiDeliveryTypes() { $this->load->model('setting/setting'); $settings = $this->model_setting_setting->getSetting('retailcrm'); @@ -100,7 +100,7 @@ class ModelRetailcrmReferences extends Model } } - protected function getApiOrderStatuses() + public function getApiOrderStatuses() { $this->load->model('setting/setting'); $settings = $this->model_setting_setting->getSetting('retailcrm'); @@ -118,7 +118,7 @@ class ModelRetailcrmReferences extends Model } } - protected function getApiPaymentTypes() + public function getApiPaymentTypes() { $this->load->model('setting/setting'); $settings = $this->model_setting_setting->getSetting('retailcrm');