diff --git a/classes/stock/StockAvailable.php b/classes/stock/StockAvailable.php index d9f16ed81..3947e3bac 100644 --- a/classes/stock/StockAvailable.php +++ b/classes/stock/StockAvailable.php @@ -26,8 +26,8 @@ */ /** - * Object to manage sto - * + * StockAvailable : represents the products kept in warehouses + * * @since 1.5.0 */ class StockAvailableCore extends ObjectModel @@ -37,7 +37,10 @@ class StockAvailableCore extends ObjectModel public $id_shop; public $quantity; public $depends_on_stock; - /** @var integer Out of stock behavior */ + + /* + * @var bool it was previously in Product class + */ public $out_of_stock; protected $fieldsRequired = array( @@ -70,15 +73,18 @@ class StockAvailableCore extends ObjectModel $fields['id_product_attribute'] = (int)$this->id_product_attribute; $fields['id_shop'] = (int)$this->id_shop; $fields['quantity'] = (int)$this->quantity; - $fields['depends_on_stocks'] = (boolean)$this->depends_on_stocks; - $fields['out_of_stock'] = (boolean)$this->out_of_stock; + $fields['depends_on_stocks'] = (bool)$this->depends_on_stocks; + $fields['out_of_stock'] = (bool)$this->out_of_stock; return $fields; } /** - * For a given id_product, id_product_attribute and id_shop, get the stock id + * For a given {id_product, id_product_attribute and id_shop}, gets the stock id associated * - * @return int id_stock_available + * @param int $id_product + * @param int $id_product_attribute default null + * @param int $id_shop + * @return int */ public static function getIdStockAvailable($id_product, $id_product_attribute = null, $id_shop) { @@ -89,59 +95,63 @@ class StockAvailableCore extends ObjectModel if (!is_null($id_product_attribute)) $query->where('id_product_attribute = '.(int)$id_product_attribute); $query->where('id_shop = '.(int)$id_shop); + return (int)Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($query); } - + /** - * For a given product, refresh stock available + * For a given id_product, synchronizes StockAvailable.quantity with Stock.usable_quantity + * + * @param int $id_product */ - public static function refreshStockAvailable($id_product) + public static function synchronize($id_product) { $query = new DbQuery(); - $query->select('id_wherehouse, id_shop'); + $query->select('id_warehouse, id_shop'); $query->from('warehouse_shop'); $query->orderBy('id_shop'); - - // Gat all warehouse id group by shop id - $warehouse_id_list_list = array(); - foreach (Db::getInstance()->ExecuteS($query) as $row) - { - if (!isset($warehouse_id_list_list[$row['id_shop']])) - $warehouse_id_list_list[$row['id_shop']] = array(); - $warehouse_id_list_list[$row['id_shop']][] = $row['id_warehouse']; - } - - // Get all id product attribute - $id_product_attribute_list = array(); + + // gets warehouses id group by shop id + $ids_warehouse = array(); + foreach (Db::getInstance()->executeS($query) as $row) + $ids_warehouse[$row['id_shop']][] = $row['id_warehouse']; + + // gets all id_product_atribute + $ids_product_attribute = array(); foreach (Product::getProductAttributesIds($id_product) as $id_product_attribute) - $id_product_attribute_list[] = $id_product_attribute['id_product_attribute']; - - foreach ($warehouse_id_list_list as $id_shop => $warehouse_id_list) + $ids_product_attribute[] = $id_product_attribute['id_product_attribute']; + + foreach ($ids_warehouse as $id_shop => $warehouses) { - $totalQuantity = 0; - // Saving qunatity of all product combination - foreach ($id_product_attribute_list as $id_product_attribute) + $total_quantity = 0; + + // saves quantities for all products combinations + foreach ($ids_product_attribute as $id_product_attribute) { - $quantity = StockManagerFactory::getManager()->getProductRealQuantities($id_product, $id_product_attribute, $warehouse_id_list, true); + $quantity = StockManagerFactory::getManager()->getProductRealQuantities($id_product, $id_product_attribute, $warehouses, true); + Db::getInstance()->autoExecute( 'stock_available', array('quantity' => $quantity), 'UPDATE', - 'id_product = '.(int)$id_product.' AND id_product_attribute = '.(int)$id_product_attribute.' AND id_shop = '.(int)$id_shop); - $totalQuantity += $quantity; + 'id_product = '.(int)$id_product.' AND id_product_attribute = '.(int)$id_product_attribute.' AND id_shop = '.(int)$id_shop + ); + $total_quantity += $quantity; } - - if (empty($id_product_attribute_list)) - $totalQuantity = StockManagerFactory::getManager()->getProductRealQuantities($id_product, null, $warehouse_id_list, true); - - // Saving the total quantity of stock available for a product with all all of its combinations + + if (empty($ids_product_attribute)) + $total_quantity = StockManagerFactory::getManager()->getProductRealQuantities($id_product, null, $warehouses, true); + + // saves quantities Db::getInstance()->autoExecute( 'stock_available', - array('quantity' => $totalQuantity), + array('quantity' => $total_quantity), 'UPDATE', - 'id_product = '.(int)$id_product.' AND id_product_attribute = 0 AND id_shop = '.(int)$id_shop); - $totalQuantity += $quantity; + 'id_product = '.(int)$id_product.' AND id_product_attribute = 0 AND id_shop = '.(int)$id_shop + ); + + $total_quantity += $quantity; } } } \ No newline at end of file