Grouped Product Display a sum of all associated products stock
-
10-03-2021 - |
Domanda
I search everywhere but cannot find a good answer.
In my 1.9 magento rwd theme, I set for single product to display the stock qty after stock status, but when i put some simple products to a grouped product type then in the table of grouped products I can see the correct stock qty and in main window i see and is display for total group stock qty = 0
This is my code:
rwd\default\template\catalog\product\view\addtocart.phtml
<?php if($_product->isSaleable()): ?>
<br></br>
<?php if ($this->displayProductStockStatus()): ?>
<?php if ($_product->isAvailable()): ?>
<p class="availability in-stock"><?php echo $this->__('Cantitate disponibila :') ?> <span><!--<?php echo $this->__('In stock') ?>--><?= (int) Mage::getModel('cataloginventory/stock_item')->loadByProduct($_product)->getQty()?></span> <?php echo $this->__('buc.') ?></p>
<?php else: ?>
<p class="availability out-of-stock"><?php echo $this->__('Cantitate disponibila :') ?> <span><!--<?php echo $this->__('In stock') ?>--><?= (int) Mage::getModel('cataloginventory/stock_item')->loadByProduct($_product)->getQty()?></span> <?php echo $this->__('buc.') ?>
</p>
<?php echo $this->__('Availability:') ?> <span><?php echo $this->__('Out of stock') ?></span></p>
<p class="availability out-of-stock"><span></br><?php echo $this->__() ?><span style="color:#0b9817;text-align:center;">Stoc Furnizor</span></br><span style="color:#de4231;text-align:center;">Comanda telefonic 0785.737.227</span></p>
<?php endif; ?>
<?php endif; ?>
<?php echo $this->__('COD PRODUS: ') ?><?php echo $_product->getSku() ?><br/>
<?php echo $_product->getAttributeText('transport_01') ?>
Can someone help me or to display total stock of asociated products or to hide only the main stock code.???
Soluzione
the configurable product in Magento doesn't store the sum of all the stocks related to its simple associated products.
A quick win solution could be to hide the main stock qty by changing the initial condition from:
<?php if ($this->displayProductStockStatus()): ?>
to
<?php if ($this->displayProductStockStatus() && ($_product-> getTypeId() != Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE)): ?>
Alternatively, you should sum all the stock quantities for every simple product
This for configurable products
$totalStock = 0;
foreach ($_product->getTypeInstance(true)->getUsedProducts(null, $_product) as $simpleProduct) {
$simpleStock = Mage::getModel('cataloginventory/stock_item')->loadByProduct($simpleProduct)->getQty();
$totalStock += $simpleStock;
}
This for grouped products
$totalStock = 0;
foreach ($_product->getTypeInstance(true)->getAssociatedProducts($_product) as $simpleProduct) {
$simpleStock = Mage::getModel('cataloginventory/stock_item')->loadByProduct($simpleProduct)->getQty();
$totalStock += $simpleStock;
}
But performance-wise this is not optimal, as it loads a product model for each associated product.
So, your final code could be
<?php if($_product->isSaleable()): ?>
<?php if ($this->displayProductStockStatus()): ?>
<?php
$productStock = 0;
if ($_product->getTypeId() == Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE) {
foreach ($_product->getTypeInstance(true)->getUsedProducts(null, $_product) as $simpleProduct) {
$simpleStock = Mage::getModel('cataloginventory/stock_item')->loadByProduct($simpleProduct)->getQty();
$productStock += $simpleStock;
}
} elseif ($_product->getTypeId() == Mage_Catalog_Model_Product_Type::TYPE_GROUPED) {
foreach ($_product->getTypeInstance(true)->getAssociatedProducts($_product) as $simpleProduct) {
$simpleStock = Mage::getModel('cataloginventory/stock_item')->loadByProduct($simpleProduct)->getQty();
$productStock += $simpleStock;
}
} else {
$productStock = (int)Mage::getModel('cataloginventory/stock_item')->loadByProduct($_product)->getQty();
}
?>
<?php if ($_product->isAvailable()): ?>
<p class="availability in-stock"><?php echo $this->__('Cantitate disponibila :') ?> <span><!--<?php echo $this->__('In stock') ?>--><?= $productStock ?></span> <?php echo $this->__('buc.') ?></p>
<?php else: ?>
<p class="availability out-of-stock"><?php echo $this->__('Cantitate disponibila :') ?> <span><!--<?php echo $this->__('In stock') ?>--><?= $productStock?></span> <?php echo $this->__('buc.') ?></p>
<?php echo $this->__('Availability:') ?> <span><?php echo $this->__('Out of stock') ?></span></p>
<p class="availability out-of-stock"><span></br><?php echo $this->__() ?><span style="color:#0b9817;text-align:center;">Stoc Furnizor</span></br><span style="color:#de4231;text-align:center;">Comanda telefonic 0785.737.227</span></p>
<?php endif; ?>
<?php endif; ?>
<?php echo $this->__('COD PRODUS: ') ?><?php echo $_product->getSku() ?><br/>
<?php echo $_product->getAttributeText('transport_01') ?>