diff --git a/CHANGELOG.md b/CHANGELOG.md index 00f8428..cd7b29b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +## v4.1.20 +* Added option to upload inventories + ## v4.1.19 * Added option to round order amount diff --git a/README.md b/README.md index f89e03d..79f6c99 100644 --- a/README.md +++ b/README.md @@ -72,3 +72,11 @@ Run this command (replace `/path/to/your/site` with the actual path to your site ``` You should run this command only once. + +#### Setting inventories export + +Add to cron (replace `/path/to/your/site` with the actual path to your site): + +``` +*/15 * * * * /usr/bin/php /path/to/your/site/system/library/retailcrm/cron/inventories.php >> /path/to/your/site/system/storage/logs/cronjob_inventories.log 2>&1 +``` \ No newline at end of file diff --git a/VERSION b/VERSION index 3cee4a0..b76ffaa 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -4.1.19 +4.1.20 diff --git a/src/upload/admin/controller/extension/module/retailcrm.php b/src/upload/admin/controller/extension/module/retailcrm.php index 8a47d52..bb3f524 100644 --- a/src/upload/admin/controller/extension/module/retailcrm.php +++ b/src/upload/admin/controller/extension/module/retailcrm.php @@ -303,6 +303,9 @@ class ControllerExtensionModuleRetailcrm extends Controller 'text_order_number', 'summ_around', 'text_summ_around', + 'stock_upload', + 'text_stock_upload', + 'store_select', 'icml_settings', 'icml_service_enabled_label', 'icml_service_description', @@ -358,6 +361,7 @@ class ControllerExtensionModuleRetailcrm extends Controller $_data['priceTypes'] = $this->model_extension_retailcrm_references ->getPriceTypes(); $_data['customerGroups'] = $this->model_customer_customer_group->getCustomerGroups(); + $_data['crmStocks'] = $this->model_extension_retailcrm_references->getApiStores(); } $config_data = [$this->moduleTitle . '_status']; @@ -484,6 +488,17 @@ class ControllerExtensionModuleRetailcrm extends Controller } } + /** + * Inventories upload + * + * @return void + */ + public function inventories() + { + $this->load->model('extension/retailcrm/inventories'); + $this->model_extension_retailcrm_inventories->uploadInventories(); + } + /** * ICML generation * diff --git a/src/upload/admin/language/en-gb/extension/module/retailcrm.php b/src/upload/admin/language/en-gb/extension/module/retailcrm.php index 8e16810..6ebc904 100644 --- a/src/upload/admin/language/en-gb/extension/module/retailcrm.php +++ b/src/upload/admin/language/en-gb/extension/module/retailcrm.php @@ -74,6 +74,8 @@ $_['order_number'] = 'Order number'; $_['text_order_number'] = 'Upload the order number to RetailCRM'; $_['summ_around'] = 'Around total summ'; $_['text_summ_around'] = 'Around the order total summ'; +$_['stock_upload'] = 'Inventories uploading'; +$_['text_stock_upload'] = 'Upload inventories'; $_['icml_settings'] = 'ICML settings'; $_['icml_service_enabled_label'] = 'Upload services in ICML'; $_['icml_service_description'] = 'When the option is enabled, all products for which delivery is disabled will be considered as services and uploaded to CRM as services'; @@ -98,6 +100,12 @@ $_['color'] = 'Color'; $_['weight'] = 'Weight'; $_['size'] = 'Size'; +$_['stock_from_crm'] = 'From CRM in Opencart'; +$_['stock_from_cms'] = 'From Opencart in CRM'; +$_['stock_not_upload'] = 'Do not upload inventories'; +$_['store_select'] = 'Store for upload inventories'; +$_['text_store'] = 'Store: '; + $_['text_yes'] = 'Yes'; $_['text_no'] = 'No'; diff --git a/src/upload/admin/language/es-es/extension/module/retailcrm.php b/src/upload/admin/language/es-es/extension/module/retailcrm.php index dad0cf8..1f25bc8 100644 --- a/src/upload/admin/language/es-es/extension/module/retailcrm.php +++ b/src/upload/admin/language/es-es/extension/module/retailcrm.php @@ -74,6 +74,8 @@ $_['order_number'] = 'Número de pedido'; $_['text_order_number'] = 'Transferir número de pedido a RetailCRM'; $_['summ_around'] = 'Redondeo del costo del pedido'; $_['text_summ_around'] = 'Redondear los costos del pedido a RetailCRM'; +$_['stock_upload'] = 'Descarga de residuos'; +$_['text_stock_upload'] = 'Descargar las sobras'; $_['icml_settings'] = 'Ajustes de ICML'; $_['icml_service_enabled_label'] = 'Subir servicios de ICML'; $_['icml_service_description'] = 'Si habilita la opción, todos los productos para los que la entrega está desactivada se tratarán como servicios y se cargarán en CRM como servicios'; @@ -99,6 +101,12 @@ $_['color'] = 'Color'; $_['weight'] = 'Peso'; $_['size'] = 'Tamaño'; +$_['stock_from_crm'] = 'De CRM a Opencart'; +$_['stock_from_cms'] = 'De Opencart a CRM'; +$_['stock_not_upload'] = 'No descargues las sobras'; +$_['store_select'] = 'Almacén de descarga'; +$_['text_store'] = 'Depósito: '; + $_['text_yes'] = 'Sí'; $_['text_no'] = 'No'; diff --git a/src/upload/admin/language/ru-ru/extension/module/retailcrm.php b/src/upload/admin/language/ru-ru/extension/module/retailcrm.php index 51ca02b..12a8363 100644 --- a/src/upload/admin/language/ru-ru/extension/module/retailcrm.php +++ b/src/upload/admin/language/ru-ru/extension/module/retailcrm.php @@ -72,8 +72,10 @@ $_['retailcrm_missing_status'] = 'Статус пропавших заказо $_['order_number'] = 'Номер заказа'; $_['text_order_number'] = 'Передавать номер заказа в RetailCRM'; -$_['summ_around'] = 'Округление суммы заказа'; -$_['text_summ_around'] = 'Округлять сумму заказа'; +$_['summ_around'] = 'Округление суммы заказа'; +$_['text_summ_around'] = 'Округлять сумму заказа'; +$_['stock_upload'] = 'Выгрузка остатков'; +$_['text_stock_upload'] = 'Выгружать остатки'; $_['icml_settings'] = 'Настройки ICML'; $_['icml_service_enabled_label'] = 'Выгружать услуги в ICML'; $_['icml_service_description'] = 'При включении опции все товары, для которых отключена доставка, будут рассматриваться как услуги и загружаться в CRM как услуги'; @@ -100,6 +102,12 @@ $_['size'] = 'Размер'; $_['text_yes'] = 'Да'; $_['text_no'] = 'Нет'; + +$_['stock_from_crm'] = 'Из CRM в Opencart'; +$_['stock_from_cms'] = 'Из Opencart в CRM'; +$_['stock_not_upload'] = 'Не выгружать остатки'; +$_['store_select'] = 'Склад для выгрузки остатков в CRM'; +$_['text_store'] = 'Склад: '; // Errors $_['error_permission'] = 'У вас недостаточно прав на изменение настроек модуля'; diff --git a/src/upload/admin/model/extension/retailcrm/inventories.php b/src/upload/admin/model/extension/retailcrm/inventories.php new file mode 100644 index 0000000..d8fd818 --- /dev/null +++ b/src/upload/admin/model/extension/retailcrm/inventories.php @@ -0,0 +1,42 @@ +load->model('setting/setting'); + + $module_setting = $this->model_setting_setting->getSetting('module_retailcrm'); + $uploadType = $module_setting['module_retailcrm_stock_upload']; + $store = $module_setting['module_retailcrm_store_select']; + + if ($uploadType === '1') { + $this->toCrmUpload($store); + } + } + + public function toCrmUpload($store) { + $products = $this->model_catalog_product->getProducts([]); + $offers = []; + + foreach ($products as $product) { + $offers[] = [ + 'externalId' => $product['product_id'], + 'stores' => [['code' => $store, 'available' => $product['quantity']]] + ]; + } + + $packs = array_chunk($offers, 50); + + foreach ($packs as $pack) { + $this->sendToCrm($pack); + } + } + + public function sendToCrm($pack) { + $inventory_manager = $this->retailcrm->getInventoryManager(); + + return $inventory_manager->storeInventoriesUpload($pack); + } +} + diff --git a/src/upload/admin/model/extension/retailcrm/references.php b/src/upload/admin/model/extension/retailcrm/references.php index fe76a77..18f4803 100644 --- a/src/upload/admin/model/extension/retailcrm/references.php +++ b/src/upload/admin/model/extension/retailcrm/references.php @@ -40,10 +40,10 @@ class ModelExtensionRetailcrmReferences extends Model { $this->load->model('setting/store'); - return array( + return [ 'opencart' => $this->getOpercartDeliveryTypes(), 'retailcrm' => $this->getApiDeliveryTypes() - ); + ]; } /** @@ -53,10 +53,10 @@ class ModelExtensionRetailcrmReferences extends Model */ public function getOrderStatuses() { - return array( + return [ 'opencart' => $this->getOpercartOrderStatuses(), 'retailcrm' => $this->getApiOrderStatuses() - ); + ]; } /** @@ -66,10 +66,10 @@ class ModelExtensionRetailcrmReferences extends Model */ public function getPaymentTypes() { - return array( + return [ 'opencart' => $this->getOpercartPaymentTypes(), 'retailcrm' => $this->getApiPaymentTypes() - ); + ]; } /** @@ -79,10 +79,10 @@ class ModelExtensionRetailcrmReferences extends Model */ public function getCustomFields() { - return array( + return [ 'opencart' => $this->getOpencartCustomFields(), 'retailcrm' => $this->getApiCustomFields() - ); + ]; } /** @@ -95,7 +95,7 @@ class ModelExtensionRetailcrmReferences extends Model $this->load->model('localisation/order_status'); return $this->model_localisation_order_status - ->getOrderStatuses(array()); + ->getOrderStatuses([]); } /** @@ -105,7 +105,7 @@ class ModelExtensionRetailcrmReferences extends Model */ public function getOpercartPaymentTypes() { - $paymentTypes = array(); + $paymentTypes = []; $files = glob(DIR_APPLICATION . 'controller/extension/payment/*.php'); if ($files) { @@ -151,11 +151,12 @@ class ModelExtensionRetailcrmReferences extends Model public function getApiDeliveryTypes() { $response = $this->retailcrmApiClient->deliveryTypesList(); + if (!$response) { - return array(); + return []; } - return (!$response->isSuccessful()) ? array() : $response->deliveryTypes; + return (!$response->isSuccessful()) ? [] : $response->deliveryTypes; } /** @@ -182,11 +183,12 @@ class ModelExtensionRetailcrmReferences extends Model public function getApiOrderStatuses() { $response = $this->retailcrmApiClient->statusesList(); + if (!$response) { - return array(); + return []; } - return (!$response->isSuccessful()) ? array() : $response->statuses; + return (!$response->isSuccessful()) ? [] : $response->statuses; } /** @@ -197,11 +199,28 @@ class ModelExtensionRetailcrmReferences extends Model public function getApiPaymentTypes() { $response = $this->retailcrmApiClient->paymentTypesList(); + if (!$response) { - return array(); + return []; } - return (!$response->isSuccessful()) ? array() : $response->paymentTypes; + return (!$response->isSuccessful()) ? [] : $response->paymentTypes; + } + + /** + * Get RetailCRM stores + * + * @return array + */ + public function getApiStores() + { + $response = $this->retailcrmApiClient->StoresList(); + + if (!$response) { + return []; + } + + return (!$response->isSuccessful()) ? [] : $response->stores; } /** @@ -211,20 +230,21 @@ class ModelExtensionRetailcrmReferences extends Model */ public function getApiCustomFields() { - $customers = $this->retailcrmApiClient->customFieldsList(array('entity' => 'customer')); - $orders = $this->retailcrmApiClient->customFieldsList(array('entity' => 'order')); + $customers = $this->retailcrmApiClient->customFieldsList(['entity' => 'customer']); + $orders = $this->retailcrmApiClient->customFieldsList(['entity' => 'order']); + if (!$customers || !$orders) { - return array(); + return []; } - $customFieldsCustomers = (!$customers->isSuccessful()) ? array() : $customers->customFields; - $customFieldsOrders = (!$orders->isSuccessful()) ? array() : $orders->customFields; + $customFieldsCustomers = (!$customers->isSuccessful()) ? [] : $customers->customFields; + $customFieldsOrders = (!$orders->isSuccessful()) ? [] : $orders->customFields; if (!$customFieldsCustomers && !$customFieldsOrders) { - return array(); + return []; } - return array('customers' => $customFieldsCustomers, 'orders' => $customFieldsOrders); + return ['customers' => $customFieldsCustomers, 'orders' => $customFieldsOrders]; } /** @@ -235,10 +255,11 @@ class ModelExtensionRetailcrmReferences extends Model public function getPriceTypes() { $response = $this->retailcrmApiClient->priceTypesList(); + if (!$response) { - return array(); + return []; } - return (!$response->isSuccessful()) ? array() : $response->priceTypes; + return (!$response->isSuccessful()) ? [] : $response->priceTypes; } } diff --git a/src/upload/admin/view/template/extension/module/retailcrm.tpl b/src/upload/admin/view/template/extension/module/retailcrm.tpl index 3b6808d..a168ccb 100644 --- a/src/upload/admin/view/template/extension/module/retailcrm.tpl +++ b/src/upload/admin/view/template/extension/module/retailcrm.tpl @@ -245,6 +245,51 @@ +
+ + +