E-mails de notificação de estoque para produtos configuráveis

8

Recentemente, tive um problema com uma loja, quando comecei a perceber que certos emails de notificação de ações não estavam sendo enviados. Todos os e-mails de produtos simples são bons, mas quando se trata de produtos configuráveis, eis o meu problema:

No momento, os clientes podem se inscrever nos e-mails de notificação de estoque. O trabalho cron funciona bem, e o sistema logicamente apenas os envia quando estão realmente em estoque e não está definido como 0. Os produtos configuráveis ​​são, no entanto, sempre definidos como 0, e os produtos simples que pertencem a este configurável alteram o estoque. Então, o que acontece agora é que as pessoas só podem se inscrever em um produto quando TODOS os tamanhos estão fora de estoque (para que nem sequer possam selecionar um tamanho sobre o qual desejam receber informações), mas quando os sapatos, por exemplo, são reabastecidos , eles não recebem uma notificação porque o configurável (que é o produto em que se inscreveu) ainda está em 0.

Tenho certeza de que não sou a primeira pessoa a enfrentar esse problema, por isso fiquei pensando se alguém conseguirá solucionar o problema ou encontrar uma solução?

magin
fonte

Respostas:

1

Parece que você precisará ajustar seu código em dois lugares. Primeiro, onde seu código verifica cada produto se os clientes têm permissão para assiná-lo. Segundo, onde seu código (o trabalho cron que eu assumo) verifica as alterações de estoque dos produtos.

Na primeira instância, você pode permitir a assinatura se algum dos produtos filhos estiver fora de estoque:

    $allowSubscriptionForProduct = false;
    if ($product->getData('type_id') == 'configurable') {
        $childProductIds = Mage::getModel('catalog/product_type_configurable')
            ->getChildrenIds($product->getId())
        foreach ($childProductIds[0] as $childProductId) {
            $stock = Mage::getModel('cataloginventory/stock_item')->loadByProduct($childProductId);
            if ($stock->getData('is_in_stock') == 1) {
                $allowSubscriptionForProduct = true;
                break;
            }
        }
    }
    if ($allowSubscriptionForProduct === true) {
        // change a product attribute to let customers subscribe to this product. 
    }

NB: $ childProductIds tem uma estrutura estranha. Eu esperaria uma matriz de IDs, mas getChildrenIds () agrupa essa matriz em outra matriz. Daí o [0] no loop foreach.

Na segunda instância, você precisa ir do produto filho para o produto configurável pai.

    foreach ($simpleProductThatWasOutOfStock as $outOfStockSimpleProduct) {
        $stock = Mage::getModel('cataloginventory/stock_item')->loadByProduct($outOfStockSimpleProduct->getId());
        if ($stock->getData('is_in_stock') == 1) {
            $configurableProductIds = Mage::getModel('catalog/product_type_configurable')->getParentIdsByChild($outOfStockSimpleProduct->getId())
            foreach ($configurableProductIds as $configurableProductId) {
                // use the code that schedules/sends the email notifications 
            }
        }
    }

Sem o código real que você está usando, é difícil ser mais preciso. Espero que isso o coloque no caminho certo, pelo menos.

Essas entradas também podem ser úteis. Para verificar o status do estoque:

https://stackoverflow.com/a/2703800

https://stackoverflow.com/a/31612963

Indo do produto filho para o pai configurável:

https://stackoverflow.com/a/1706297

https://magento.stackexchange.com/a/30245

Vincent_v_E
fonte
0

Pode ser necessário customizar o código ou usar qualquer extensão que forneça funcionalidades como o trabalho configurável do produto com base no produto principal e não no produto simples.

MageComp
fonte