[-] Project : #PSCFV-2790 - Fix bug with stock synchronization

This commit is contained in:
mDeflotte
2012-06-13 12:18:15 +00:00
parent 6be2eefe97
commit bc5409ceda
+43 -13
View File
@@ -121,6 +121,9 @@ class StockAvailableCore extends ObjectModel
$ids_product_attribute = array(); $ids_product_attribute = array();
foreach (Product::getProductAttributesIds($id_product) as $id_product_attribute) foreach (Product::getProductAttributesIds($id_product) as $id_product_attribute)
$ids_product_attribute[] = $id_product_attribute['id_product_attribute']; $ids_product_attribute[] = $id_product_attribute['id_product_attribute'];
// Allow to order the product when out of stock?
$out_of_stock = StockAvailable::outOfStock($id_product);
$manager = StockManagerFactory::getManager(); $manager = StockManagerFactory::getManager();
// loops on $ids_warehouse to synchronize quantities // loops on $ids_warehouse to synchronize quantities
@@ -140,23 +143,50 @@ class StockAvailableCore extends ObjectModel
foreach ($ids_product_attribute as $id_product_attribute) foreach ($ids_product_attribute as $id_product_attribute)
{ {
$quantity = $manager->getProductRealQuantities($id_product, $id_product_attribute, $warehouses, true); $quantity = $manager->getProductRealQuantities($id_product, $id_product_attribute, $warehouses, true);
$query = array(
'table' => 'stock_available', $query = new DbQuery();
'data' => array('quantity' => $quantity), $query->select('COUNT(*)');
'where' => 'id_product = '.(int)$id_product.' AND id_product_attribute = '.(int)$id_product_attribute. $query->from('stock_available');
StockAvailable::addSqlShopRestriction(null, $id_shop) $query->where('id_product = '.(int)$id_product.' AND id_product_attribute = '.(int)$id_product_attribute);
);
Db::getInstance()->update($query['table'], $query['data'], $query['where']);
if ((int)Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($query))
{
$query = array(
'table' => 'stock_available',
'data' => array('quantity' => $quantity),
'where' => 'id_product = '.(int)$id_product.' AND id_product_attribute = '.(int)$id_product_attribute.
StockAvailable::addSqlShopRestriction(null, $id_shop)
);
Db::getInstance()->update($query['table'], $query['data'], $query['where']);
}
else
{
$shop = new Shop($id_shop);
$query = array(
'table' => 'stock_available',
'data' => array(
'quantity' => $quantity,
'depends_on_stock' => 1,
'out_of_stock' => $out_of_stock,
'id_product' => (int)$id_product,
'id_product_attribute' => (int)$id_product_attribute,
'id_shop' => $id_shop,
'id_shop_group' => $shop->id_shop_group
)
);
Db::getInstance()->insert($query['table'], $query['data']);
}
$product_quantity += $quantity; $product_quantity += $quantity;
Hook::exec('actionUpdateQuantity', Hook::exec('actionUpdateQuantity',
array( array(
'id_product' => $id_product, 'id_product' => $id_product,
'id_product_attribute' => $id_product_attribute, 'id_product_attribute' => $id_product_attribute,
'quantity' => $quantity 'quantity' => $quantity
) )
); );
} }
// updates // updates