From 1895ec873182e2d27d49219d17ba2da5fe1ed458 Mon Sep 17 00:00:00 2001 From: Madman Date: Fri, 26 Jul 2013 15:30:54 +0200 Subject: [PATCH 1/4] // Begining of Support for Advanved Stock Managment in CSV Import --- controllers/admin/AdminImportController.php | 28 +++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/controllers/admin/AdminImportController.php b/controllers/admin/AdminImportController.php index 81723c4fc..5f500accd 100644 --- a/controllers/admin/AdminImportController.php +++ b/controllers/admin/AdminImportController.php @@ -1477,6 +1477,34 @@ class AdminImportControllerCore extends AdminController // clean feature positions to avoid conflict Feature::cleanPositions(); } + + // set advanced stock managment + if($product->advanced_stock_managment) { + $product->setAdvancedStockManagement($product->advanced_stock_managment); + } + +/* + Add these checks andd also create a warning messeage + case 'advanced_stock_management' : + if (Tools::getValue('value') === false) + die (Tools::jsonEncode(array('error' => $this->l('Undefined value')))); + if ((int)Tools::getValue('value') != 1 && (int)Tools::getValue('value') != 0) + die (Tools::jsonEncode(array('error' => $this->l('Uncorrect value')))); + if (!Configuration::get('PS_ADVANCED_STOCK_MANAGEMENT') && (int)Tools::getValue('value') == 1) + die (Tools::jsonEncode(array('error' => $this->l('Not possible if advanced stock management is disabled. ')))); + if (Configuration::get('PS_ADVANCED_STOCK_MANAGEMENT') && Pack::isPack($product->id)) + die (Tools::jsonEncode(array('error' => $this->l('Not possible if the product is a pack.')))); + + $product->setAdvancedStockManagement((int)Tools::getValue('value')); + if (StockAvailable::dependsOnStock($product->id) == 1 && (int)Tools::getValue('value') == 0) + StockAvailable::setProductDependsOnStock($product->id, 0); + break; + + } +*/ +// if (StockAvailable::dependsOnStock($product->id) == 1 && (int)Tools::getValue('value') == 0) +// StockAvailable::setProductDependsOnStock($product->id, 0); +// break; // stock available if (Shop::isFeatureActive()) From 4857c8c7889149c7ad314cce684c20f20f5dce47 Mon Sep 17 00:00:00 2001 From: PhpMadman Date: Mon, 29 Jul 2013 09:35:39 +0200 Subject: [PATCH 2/4] [+] BO: Added support for Advanced Stock Management [*] BO: Fixed typos [*] BO: Auto remove product from DependsOnStock of Advanced Stock Management is disabled [*] BO: Added id to warehouse controller --- controllers/admin/AdminImportController.php | 42 ++++++++----------- .../admin/AdminWarehousesController.php | 4 ++ 2 files changed, 21 insertions(+), 25 deletions(-) diff --git a/controllers/admin/AdminImportController.php b/controllers/admin/AdminImportController.php index 5f500accd..c2361ffc3 100644 --- a/controllers/admin/AdminImportController.php +++ b/controllers/admin/AdminImportController.php @@ -243,7 +243,11 @@ class AdminImportControllerCore extends AdminController 'shop' => array( 'label' => $this->l('ID / Name of shop'), 'help' => $this->l('Ignore this field if you don\'t use the Multistore tool. If you leave this field empty, the default shop will be used.'), - ) + ), + 'advanced_stock_management' => array( + 'label' => $this->l('Advanced Stock Management'), + 'help' => $this->l('Enable Advanced Stock Management on product (0 = No, 1 = Yes)') + ), ); self::$default_values = array( @@ -1479,32 +1483,20 @@ class AdminImportControllerCore extends AdminController } // set advanced stock managment - if($product->advanced_stock_managment) { - $product->setAdvancedStockManagement($product->advanced_stock_managment); + if($product->advanced_stock_management) { + if($product->advanced_stock_management != 1 || $product->advanced_stock_management != 0) { + $this->warnings[] = Tools::displayError('Advanced stock management has incorrect value. Not set'); + } elseif(!Configuration::get('PS_ADVANCED_STOCK_MANAGEMENT') && $product->advanced_stock_management == 1) { + $this->warnings[] = Tools::displayError('Advanced stock management is not enabled, can not enable on product '); + } else { + $product->setAdvancedStockManagement($product->advanced_stock_management); + } + // automaticly disable depends on stock, if a_s_m set to disabled + if (StockAvailable::dependsOnStock($product->id) == 1 && $product->advanced_stock_management == 0) { + StockAvailable::setProductDependsOnStock($product->id, 0); + } } -/* - Add these checks andd also create a warning messeage - case 'advanced_stock_management' : - if (Tools::getValue('value') === false) - die (Tools::jsonEncode(array('error' => $this->l('Undefined value')))); - if ((int)Tools::getValue('value') != 1 && (int)Tools::getValue('value') != 0) - die (Tools::jsonEncode(array('error' => $this->l('Uncorrect value')))); - if (!Configuration::get('PS_ADVANCED_STOCK_MANAGEMENT') && (int)Tools::getValue('value') == 1) - die (Tools::jsonEncode(array('error' => $this->l('Not possible if advanced stock management is disabled. ')))); - if (Configuration::get('PS_ADVANCED_STOCK_MANAGEMENT') && Pack::isPack($product->id)) - die (Tools::jsonEncode(array('error' => $this->l('Not possible if the product is a pack.')))); - - $product->setAdvancedStockManagement((int)Tools::getValue('value')); - if (StockAvailable::dependsOnStock($product->id) == 1 && (int)Tools::getValue('value') == 0) - StockAvailable::setProductDependsOnStock($product->id, 0); - break; - - } -*/ -// if (StockAvailable::dependsOnStock($product->id) == 1 && (int)Tools::getValue('value') == 0) -// StockAvailable::setProductDependsOnStock($product->id, 0); -// break; // stock available if (Shop::isFeatureActive()) diff --git a/controllers/admin/AdminWarehousesController.php b/controllers/admin/AdminWarehousesController.php index 8628f1f52..99e1371cc 100644 --- a/controllers/admin/AdminWarehousesController.php +++ b/controllers/admin/AdminWarehousesController.php @@ -38,6 +38,10 @@ class AdminWarehousesControllerCore extends AdminController $this->multishop_context = Shop::CONTEXT_ALL; $this->fields_list = array( + 'id_warehouse' => array( + 'title' => $this->l('ID'), + 'width' => 50, + ), 'reference' => array( 'title' => $this->l('Reference'), 'width' => 150, From 909948bfb950d5d7a29d9a14179de162644265c1 Mon Sep 17 00:00:00 2001 From: PhpMadman Date: Mon, 29 Jul 2013 10:27:31 +0200 Subject: [PATCH 3/4] [+] BO : Added support to set A warehouse by id [*] BO : Import will clear any warehouses allready set --- controllers/admin/AdminImportController.php | 25 +++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/controllers/admin/AdminImportController.php b/controllers/admin/AdminImportController.php index c2361ffc3..17621d2bd 100644 --- a/controllers/admin/AdminImportController.php +++ b/controllers/admin/AdminImportController.php @@ -248,6 +248,7 @@ class AdminImportControllerCore extends AdminController 'label' => $this->l('Advanced Stock Management'), 'help' => $this->l('Enable Advanced Stock Management on product (0 = No, 1 = Yes)') ), + 'warehouse' => array('label' => $this->l('Warehouse')), ); self::$default_values = array( @@ -1484,10 +1485,10 @@ class AdminImportControllerCore extends AdminController // set advanced stock managment if($product->advanced_stock_management) { - if($product->advanced_stock_management != 1 || $product->advanced_stock_management != 0) { + if($product->advanced_stock_management != 1 && $product->advanced_stock_management != 0) { $this->warnings[] = Tools::displayError('Advanced stock management has incorrect value. Not set'); } elseif(!Configuration::get('PS_ADVANCED_STOCK_MANAGEMENT') && $product->advanced_stock_management == 1) { - $this->warnings[] = Tools::displayError('Advanced stock management is not enabled, can not enable on product '); + $this->warnings[] = sprintf(Tools::displayError('Advanced stock management is not enabled, can not enable on product %1$s '),$product->name[$default_language_id]); } else { $product->setAdvancedStockManagement($product->advanced_stock_management); } @@ -1497,6 +1498,26 @@ class AdminImportControllerCore extends AdminController } } + // Check if warehouse exists + if(Warehouse::exists($product->warehouse)) { + // Get already associated warehouses + $associated_warehouses_collection = WarehouseProductLocation::getCollection($product->id); + + // Delete any entry in warehouse for this product + foreach ($associated_warehouses_collection as $awc) + { + $awc->delete(); + } + $warehouse_location_entity = new WarehouseProductLocation(); + $warehouse_location_entity->id_product = $product->id; + $warehouse_location_entity->id_product_attribute = 0; + $warehouse_location_entity->id_warehouse = $product->warehouse; + $warehouse_location_entity->save(); + + StockAvailable::synchronize($product->id); // Don't know if it is needed, but it can't hurt + } else { + $this->warnings[] = sprintf(Tools::displayError('Warehouse did not exists, can not set on product %1$s '),$product->name[$default_language_id]); + } // stock available if (Shop::isFeatureActive()) From 1dd7d6afcc0b42b6baebe10fc38924a73714ac16 Mon Sep 17 00:00:00 2001 From: PhpMadman Date: Mon, 29 Jul 2013 11:54:15 +0200 Subject: [PATCH 4/4] [-] BO : Fixed incorrect error message in a_s_m [+] BO : Added support for Depends On Stock [-] BO : Added missing check if warehouse is set in csv --- controllers/admin/AdminImportController.php | 77 ++++++++++++++------- 1 file changed, 51 insertions(+), 26 deletions(-) diff --git a/controllers/admin/AdminImportController.php b/controllers/admin/AdminImportController.php index 17621d2bd..c323eeea0 100644 --- a/controllers/admin/AdminImportController.php +++ b/controllers/admin/AdminImportController.php @@ -248,7 +248,14 @@ class AdminImportControllerCore extends AdminController 'label' => $this->l('Advanced Stock Management'), 'help' => $this->l('Enable Advanced Stock Management on product (0 = No, 1 = Yes)') ), - 'warehouse' => array('label' => $this->l('Warehouse')), + 'depends_on_stock' => array( + 'label' => $this->l('Depends On Stock'), + 'help' => $this->l('0 = Use quantity set in product, 1 = Use quantity from Warehouse') + ), + 'warehouse' => array( + 'label' => $this->l('Warehouse'), + 'help' => $this->l('ID of the warehouse to set as storeage') + ), ); self::$default_values = array( @@ -1486,7 +1493,7 @@ class AdminImportControllerCore extends AdminController // set advanced stock managment if($product->advanced_stock_management) { if($product->advanced_stock_management != 1 && $product->advanced_stock_management != 0) { - $this->warnings[] = Tools::displayError('Advanced stock management has incorrect value. Not set'); + $this->warnings[] = sprintf(Tools::displayError('Advanced stock management has incorrect value. Not set for product %1$s '),$product->name[$default_language_id]); } elseif(!Configuration::get('PS_ADVANCED_STOCK_MANAGEMENT') && $product->advanced_stock_management == 1) { $this->warnings[] = sprintf(Tools::displayError('Advanced stock management is not enabled, can not enable on product %1$s '),$product->name[$default_language_id]); } else { @@ -1499,34 +1506,52 @@ class AdminImportControllerCore extends AdminController } // Check if warehouse exists - if(Warehouse::exists($product->warehouse)) { - // Get already associated warehouses - $associated_warehouses_collection = WarehouseProductLocation::getCollection($product->id); - - // Delete any entry in warehouse for this product - foreach ($associated_warehouses_collection as $awc) - { - $awc->delete(); + if($product->warehouse) { + if(!Configuration::get('PS_ADVANCED_STOCK_MANAGEMENT')) { + $this->warnings[] = sprintf(Tools::displayError('Advanced stock management is not enabled, warehouse not set on product %1$s '),$product->name[$default_language_id]); + } else { + if(Warehouse::exists($product->warehouse)) { + // Get already associated warehouses + $associated_warehouses_collection = WarehouseProductLocation::getCollection($product->id); + + // Delete any entry in warehouse for this product + foreach ($associated_warehouses_collection as $awc) + { + $awc->delete(); + } + $warehouse_location_entity = new WarehouseProductLocation(); + $warehouse_location_entity->id_product = $product->id; + $warehouse_location_entity->id_product_attribute = 0; + $warehouse_location_entity->id_warehouse = $product->warehouse; + $warehouse_location_entity->save(); + + StockAvailable::synchronize($product->id); // Don't know if it is needed, but it can't hurt + } else { + $this->warnings[] = sprintf(Tools::displayError('Warehouse did not exists, can not set on product %1$s '),$product->name[$default_language_id]); + } } - $warehouse_location_entity = new WarehouseProductLocation(); - $warehouse_location_entity->id_product = $product->id; - $warehouse_location_entity->id_product_attribute = 0; - $warehouse_location_entity->id_warehouse = $product->warehouse; - $warehouse_location_entity->save(); - - StockAvailable::synchronize($product->id); // Don't know if it is needed, but it can't hurt - } else { - $this->warnings[] = sprintf(Tools::displayError('Warehouse did not exists, can not set on product %1$s '),$product->name[$default_language_id]); } - + // stock available - if (Shop::isFeatureActive()) - { - foreach ($shops as $shop) - StockAvailable::setQuantity((int)$product->id, 0, $product->quantity, (int)$shop); + if($product->depends_on_stock) { // if not set + if($product->depends_on_stock != 0 && $product->depends_on_stock != 1) { + $this->warnings[] = sprintf(Tools::displayError('Incorrect value for depends on stock for product %1$s '),$product->name[$default_language_id]); + } elseif((!$product->advanced_stock_management || $product->advanced_stock_management == 0) && $product->depends_on_stock == 1) { + $this->warnings[] = sprintf(Tools::displayError('Advanced stock management not enabled, can not set depends on stock %1$s '),$product->name[$default_language_id]); + } else { + StockAvailable::setProductDependsOnStock($product->id, $product->depends_on_stock); + } + } else { // if not depends_on_stock set, use normal qty + if (Shop::isFeatureActive()) + { + foreach ($shops as $shop) + StockAvailable::setQuantity((int)$product->id, 0, $product->quantity, (int)$shop); + } + else + { + StockAvailable::setQuantity((int)$product->id, 0, $product->quantity, $this->context->shop->id); + } } - else - StockAvailable::setQuantity((int)$product->id, 0, $product->quantity, $this->context->shop->id); }