2011-08-23 11 views
7

Así que he estado buscando una manera de cambiar la Disponibilidad de stock de nuevo a En Stock cuando el campo de cantidad es mayor que 0. El sistema ya cambia automáticamente la Disponibilidad de stock a Fuera de stock cuando establece la cantidad en 0 y guarda el producto. Me gustaría una forma de volver a configurarlo en Stock cuando establezca una cantidad mayor que 0 y guarde el producto.Magento: cambio automático de la "Disponibilidad de stock" de "Agotado" a "En stock" (y viceversa) en el Cambio de cantidad

Bueno, creo que encontré una manera simple, lo que en sí mismo me pone nervioso. Así que quise publicarles gurús para ver si esto es seguro, correcto y está bien.

En app/design/adminhtml/default/default/template/catalog/producto/pestaña/inventory.phtml

He cambiado esto:

<?php foreach ($this->getStockOption() as $option): ?> 
     <?php $_selected = ($option['value'] == $this->getFieldValue('is_in_stock')) ? 'selected="selected"' : '' ?> 
     <option value="<?php echo $option['value'] ?>" <?php echo $_selected ?>><?php echo $option['label'] ?></option> 
<?php endforeach; ?> 

A esto:

<?php if(($this->getFieldValue('qty')*1) > 0): ?> 
     <option selected="selected" value="1">In Stock</option> 
<?php else: ?> 
    <option selected="selected" value="0">Out of Stock</option> 
<?php endif; ?> 

Todo lo que tengo que trabajar en este punto es un sitio en vivo, para que pueda entender mi preocupación ...

Por favor, hágame saber si esto tendrá el efecto deseado (parece que sí, pero parece simplista ....)

+0

Esto sólo funciona en la superficie y no elimina por completo hacer lo que quiera que lo haga. Todavía estoy buscando una respuesta ... – Geoff

Respuesta

0

El texto de disponibilidad de stock se puede manejar en la pestaña Inventario de la configuración del Producto, misma pestaña que el campo de cantidad de stock. Como debe ingresar su cantidad de stock manualmente de todos modos, le sugiero que simplemente cambie la configuración de Disponibilidad de stock a 'En Stock' cuando ingrese el nuevo QTY de su producto.

+0

Eso no es verdad tomakun, ya probé usando magento EE 1.9. Además, debe pensar de inmediato, el inventario en mi caso es actualizado por un programa ya que tengo miles de productos. Todavía estoy buscando algo que actualice la disponibilidad de stock de nuevo en stock cuando el qty es mayor que qty para agotar existencias. Tal vez voy a tener que hacer algo dentro de mi programa. –

6

Creo que puede usar el evento Magento catalog_product_save_after. Cree un método de observación que haga lo siguiente en el evento catalog_product_save_after.

public function catalog_product_save_after($observer) { 
    $product = $observer->getProduct(); 
    $stockData = $product->getStockData(); 

    if ($product && $stockData['qty']) { 
     $stock = Mage::getModel('cataloginventory/stock_item')->loadByProduct($product->getEntityId()); // Load the stock for this product 
     $stock->setData('is_in_stock', 1); // Set the Product to InStock        
     $stock->save(); // Save 
    } 
} 
+0

woohoo gracias por esto! – givemesnacks

+0

Esto no parece funcionar cuando el sistema actualiza la acción, por ejemplo, si se crea una nota de crédito y los artículos se devuelven a la acción.Supongo que en ese caso el sistema no guarda el producto en sí, solo el artículo en stock, y por lo tanto el observador sugerido arriba no se dispara. –

1

Basta con crear trabajo cron con ese fragmento de código:

public function setBackInStock() 
{ 
    $collection = Mage::getResourceModel('cataloginventory/stock_item_collection'); 
    $outQty = Mage::getStoreConfig('cataloginventory/item/options_min_qty'); 
    $collection->addFieldToFilter('qty', array('gt' => $outQty)); 
    $collection->addFieldToFilter('is_in_stock', 0); 

    foreach($collection as $item) { 
     $item->setData('is_in_stock', 1); 
    } 
    $collection->save(); 
} 

pequeña nota, puede configurar tarea cron cada minuto, porque si no hay resultados trabajo no se consume tiempo/recursos

0

Esto es lo que tenía que hacer

 var stock_data = new catalogInventoryStockItemUpdateEntity() 
     { 
      qty = quantity, 
      is_in_stock = inStock, 
      manage_stock = stockManaged, 
      is_in_stockSpecified = true, 
     }; 

is_in_stockSpecified es importante

Utilicé SOAP API para actualizar el stock.

enter image description here

Cuestiones relacionadas