Posting in the Magento forums has been disabled pending the implementation of a new and improved forum solution which should better serve the community.

For new questions please post at magento.stackexchange.com, the community-run support site for the Magento community. We will be providing updates on the new forum solution soon. For questions or concerns please email community@magento.com.

Magento Forum

Spostare un prodotto in una categoria quando diventa out of stock
 
matteoweb
Member
 
Total Posts:  55
Joined:  2008-07-14
 

Sto cercando di spostare in automatico un prodotto da una categoria all’altra quando diventa “out of stock”.

Sto cercando di farlo nel metodo registerItemSale() in /app/code/local/Mage/CatalogInventory/Model/Stock.php (ch\’è quello dove viene scalata effettivamente la quantità rimanente in magazzino):

/**
     * Subtract ordered qty for product
     *
     * @param   Varien_Object $item
     * @return  Mage_CatalogInventory_Model_Stock
     */
    public function registerItemSale(Varien_Object $item)
    
{
        
        
if ($productId $item->getProductId()) {
            $stockItem 
Mage::getModel('cataloginventory/stock_item')->loadByProduct($productId);
            if (
Mage::helper('catalogInventory')->isQty($stockItem->getTypeId())) {
                
if ($item->getStoreId()) {
                    $stockItem
->setStoreId($item->getStoreId());
                
}
                
if ($stockItem->checkQty($item->getQtyOrdered()) || Mage::app()->getStore()->isAdmin()) {
                    
                    $stockItem
->subtractQty($item->getQtyOrdered());
                    
$stockItem->save();
                    
                    
//MP - Lo sposto di categoria se sotto quantità minima
                    
if ($stockItem->getQty() <= $stockItem->getMinQty()) {
                        $productIds2 
= array(2,7);
                        
$product Mage::getModel('catalog/product')->load($productId);
                        
$product->setStoreId($item->getStoreId());
                        
$product->setCategoryIds($productIds2);
                        
Mage::register('isSecureArea'true);
                        
//$product->_prepareDataForSave($product, $product->getData());
                        //$product->update();
                        
$product->save();
                        
Mage::unregister('isSecureArea');
                        
                        
                        die(
'Non va.');
                    
}
                }
            }
        }
        
else {
            Mage
::throwException(Mage::helper('cataloginventory')->__('Can not specify product identifier for order item'));
        
}
        
return $this;
    
}

La linea che dà errore è $product->save(). Se la commento non dà errori e il checkout procede correttamente. Essendo una chiamata ajax non so come intercettare l\’output dell\’errore, dice solo che \"c\’è stato un errore\"…

Qualcuno sa darmi un aiuto?

Grazie.

 
Magento Community Magento Community
Magento Community
Magento Community
 
matteoweb
Member
 
Total Posts:  55
Joined:  2008-07-14
 

ho trovato l’errore ma non so come correggere:

a:5:{i:0;s:140:"Warning: Invalid argument supplied for foreach() in /home/********/public_html/app/code/core/Mage/Eav/Model/Entity/Abstract.php on line 995

a quella riga del file abstract c’è…

foreach ($origData as $k => $v{
                
if (!array_key_exists($k$newData)) {
                    
unset($origData[$k]);
                
}
            }
Come se non riuscisse a prendere l’origData, che infatti debuggando è vuota.

Suggerimenti?

 
Magento Community Magento Community
Magento Community
Magento Community
 
StudioZeroPixel
Sr. Member
 
Avatar
Total Posts:  154
Joined:  2010-02-01
Italy
 
matteoweb - 13 August 2010 06:33 AM

Suggerimenti?

Ciao,
il codice sembra corretto è molto simile a quello che ho usato anche io in qualche occasione…

A volte in questi casi può essere utile “cambiare approccio”, in alcuni casi le funzioni API (che puoi
creare tranquillamente con la GetModel(....) aiutano a sbloccare situazioni apparentemente semplici.

Pensavo all catalogo_product_update ed anche alla
catalog_category.removeProduct (lo togli da quella originale) e
catalog_category.assignProduct (lo assegni a quella nuova).

fa sapere come procede che magari approfondiamo....

ciao

 
Magento Community Magento Community
Magento Community
Magento Community
Magento Community
Magento Community
Back to top