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/system/library/retailcrm/lib/service/InventoryManager.php b/src/upload/system/library/retailcrm/lib/service/InventoryManager.php new file mode 100644 index 0000000..1654cc4 --- /dev/null +++ b/src/upload/system/library/retailcrm/lib/service/InventoryManager.php @@ -0,0 +1,16 @@ +api = $api; + } + + public function storeInventoriesUpload($pack) { + return $this->api->storeInventoriesUpload($pack); + } +} diff --git a/src/upload/system/library/retailcrm/retailcrm.php b/src/upload/system/library/retailcrm/retailcrm.php index c4ce323..7ecb0d4 100644 --- a/src/upload/system/library/retailcrm/retailcrm.php +++ b/src/upload/system/library/retailcrm/retailcrm.php @@ -9,6 +9,7 @@ use retailcrm\service\OrderManager; use retailcrm\factory\OrderConverterFactory; use retailcrm\factory\CustomerConverterFactory; use retailcrm\service\SettingsManager; +use retailcrm\service\InventoryManager; require_once DIR_SYSTEM . 'library/retailcrm/bootstrap.php'; @@ -54,6 +55,10 @@ class Retailcrm { return new CorporateCustomer($this->getApiClient(), new CustomerRepository($this->registry)); } + public function getInventoryManager() { + return new InventoryManager($this->getApiClient()); + } + /** * Get api client object * diff --git a/tests/admin/ModelRetailcrmInventoryAdminTest.php b/tests/admin/ModelRetailcrmInventoryAdminTest.php new file mode 100644 index 0000000..5b14eed --- /dev/null +++ b/tests/admin/ModelRetailcrmInventoryAdminTest.php @@ -0,0 +1,37 @@ +inventoriesModel = $this->loadModel('extension/retailcrm/inventories'); + + $this->apiClientMock = $this->getMockBuilder(\RetailcrmProxy::class) + ->disableOriginalConstructor() + ->setMethods(array( + 'storeInventoriesUpload', + )) + ->getMock(); + + self::$registry->set(\RetailcrmProxy::class, $this->apiClientMock); + } + + public function testUploadToCrm() + { + $productModel = $this->loadModel('catalog/product'); + $product = $productModel->getProducts([]); + $productSend = $this->inventoriesModel->uploadToCrm($product, $this->apiClientMock); + $product= $productSend[0][0]; + + $this->assertInternalType('array', $productSend); + $this->assertArrayHasKey('externalId', $product); + $this->assertArrayHasKey('stores', $product); + } +}