Alteração automática da “Disponibilidade de estoque” de “Esgotado” para “Em estoque” na alteração da quantidade

magento.stackexchange https://magento.stackexchange.com//questions/89968

Pergunta

assuma que a quantidade do produto é "0", uma vez que editamos a quantidade para "1".novamente temos que mudar de

"esgotado" para "em estoque" para comprar no site

Então, estou procurando uma maneira de alterar a Disponibilidade de estoque de volta para Em estoque quando o campo de quantidade for maior que 0.

aqui alguém postou solução: https://stackoverflow.com/questions/7168295/magento-auto-change-the-stock-availability-from-out-of-stock-to-in-stock

podemos usar o evento Magento catalog_product_save_after.Crie um método observador que faça o seguinte no evento catalog_product_save_after.

alguém pode me explicar em detalhes o que e tudo que precisa ser feito para isso.significa em qual arquivo qual código devemos adicionar?

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
    }
}

como Qaisar Satti disse, estou tentando isso:

app/etc/modules/Froggyline_HappyHour.xml

<?xml version="1.0"?>
<config>
  <modules>
    <Froggyline_HappyHour>
      <active>true</active>
      <codePool>community</codePool>
      <version>0.0.0</version>
    </Froggyline_HappyHour>
  </modules>
</config>

app/code/community/Froggyline/HappyHour/etc/config.xml

    <?xml version="1.0"?>
<config>
  <modules>
    <Froggyline_HappyHour>
      <version>0.0.0</version>
    </Froggyline_HappyHour>
  </modules>
  <adminhtml>  
        <events>

                <cataloginventory_stock_item_save_commit_after>
                    <observers>
                        <happyhour>
                            <type>model</type>
                            <class>happyhour/observer</class>
                            <method>product_save_after</method>
                        </happyhour>
                    </observers>
                </cataloginventory_stock_item_save_commit_after>
        </events>
    </adminhtml> 

</config> 

app/code/community/Froggyline/HappyHour/Model/Observer.php

 <?php
class Froggyline_HappyHour_Model_Observer {
public function 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
    }
}}

?>
Foi útil?

Solução

Solução 1

Adicione isso em config.xml

   <?xml version="1.0"?>
<config>
  <modules>
    <Froggyline_HappyHour>
      <version>0.0.0</version>
    </Froggyline_HappyHour>
  </modules>
  <adminhtml>  
        <events>
     //second event
               <catalog_product_save_after>
                    <observers>
                        <happyhour>
                            <type>model</type>
                            <class>happyhour/observer</class>
                            <method>product_save_after</method>
                        </happyhour>
                    </observers>
                </catalog_product_save_after>
        </events>
    </adminhtml> 

</config> 

app/code/community/Froggyline/HappyHour/Model/Observer.php

   <?php
class Froggyline_HappyHour_Model_Observer {
public function 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 use for 
        $stock->setData('is_in_stock', 1); // Set the Product to InStock                               
        $stock->save(); // Save use for 
    }
}
 }

Solução 2 (Não testado, mas solução melhor)

Adicione isso em config.xml

   <?xml version="1.0"?>
<config>
  <modules>
    <Froggyline_HappyHour>
      <version>0.0.0</version>
    </Froggyline_HappyHour>
  </modules>
  <adminhtml>  
        <events>
     //second event
               <catalog_product_prepare_save>
                <observers>
                    <happyhour>
                        <type>model</type>
                        <class>happyhour/observer</class>
                        <method>product_prepare_save</method>
                    </happyhour>
                </observers>
            </catalog_product_prepare_save>
        </events>
    </adminhtml> 

</config> 

app/code/community/Froggyline/HappyHour/Model/Observer.php

   <?php
class Froggyline_HappyHour_Model_Observer {

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

        if ( $product && $stockData['qty'] ) {

            $stockData->setData('is_in_stock', 1); // Set the Product to InStock                               

        }
    }
 }

Outras dicas

Escrevo aqui apenas os passos principais

1) Escreva um esqueleto de módulo personalizado, você pode usar vários "criadores de módulos", eu pessoalmente uso issohttp://www.silksoftware.com/magento-module-creator/

Você pode definir o nome da sua empresa e do módulo e ativar todas as outras opções como NÃO para criar um módulo esqueleto

2) abra etc/config e adicione sua classe Model Name, finalize declarando os observadores de eventos que você precisa

  <global>
    <models>
        <moduloname>
            <class>company_modulo_Model</class>
        </moduloname>
    </models>
    <events>
       < catalog_product_save_after>
        <observers>
            <moduloname>
                <class>moduloname/observer</class>
                <method>yourFunc</method>
            </moduloname>
        </observers>
    </catalog_product_save_after>

3) crie Model/Observer.php e escreva yourFun dentro

    <?php  
    class company_Modulo_Model_Observer
{

    public function yourFunc(Varien_Event_Observer $observer) {
    }
 }

Para detalhes mais profundos nas etapas acima, existem muitos outros recursos, o acima é apenas um esboço do que você deve fazer

espero que ajude

Em app/design/adminhtml/default/default/template/catalog/product/tab/inventory.phtmlEu mudei isso:

<?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;?>

Para isso:

<?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;?>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a magento.stackexchange
scroll top