Como alterar programaticamente o status do estoque de produtos quando o sku do produto não aparece no feed de dados do provedor?

8

Estou usando o Magento CE 1.9.1
. Criei um script de importação para importar produtos de um feed xml de provedor.
Este feed é atualizado todos os dias às 3 da manhã. Meu profider me envia em seu xml apenas produtos que estão em estoque em sua loja.

Então, como posso atualizar o status do meu estoque de produtos para fora de estoque (por sku do produto) quando o sku do produto não existe no feed xml?

Eu coloquei um exemplo para explicar o que eu quero, dados fornecidos no xml:

Monday :        Tuesday :

Sku   qty       Sku    qty

ABC   22        ABC    12
BDE   30        FGH    4
FGH   15

O que tenho que fazer: terça-feira, tenho que definir programaticamente o BDE do meu produto como "fora de estoque", porque ele não aparece no xml.

Aqui está o meu script de importação:

    $file = 'feed.xml'; 

    $feed = simplexml_load_file($file);

    foreach($feed as $product){

        //some datas in xml feed
        $sku = $product->identifiant_unique;
        $prix = $product->prix;
        $titre = $product->categorie3;
        $quantiteStock = $product->quantiteStock;
        $poid = $product->poids_net;

        //Setters 
        $produit = Mage::getModel('catalog/product');
        $produit->setName($titre.' '.$sku);
        $produit->setSku($sku);
        $produit->setWeight($poid);
        $produit->setAttributeSetId(4);
        $produit->setDescription($titre.' '.$sku);
        $produit->setShortDescription($titre.' '.$sku);
        $produit->setTypeId($product['type_id'])->setWebsiteIds(array(1))->setStatus(Mage_Catalog_Model_Product_Status::STATUS_ENABLED)->setVisibility(Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH);
        $produit->setPrice($prix);

        $produit->setIsMassupdate(true);
        $produit->setExcludeUrlRewrite(true);
        $produit->save();

        // For Inventory Management
        $stockItem = Mage::getModel('cataloginventory/stock_item');
        $stockItem->assignProduct($produit);
        $stockItem->setData('is_in_stock', 1);
        $stockItem->setData('stock_id', 1);
        $stockItem->setData('store_id', 1);
        $stockItem->setData('manage_stock', 1);
        $stockItem->setData('use_config_manage_stock', 0);
        $stockItem->setData('min_sale_qty', 1);
        $stockItem->setData('use_config_min_sale_qty', 0);
        $stockItem->setData('max_sale_qty', 1000);
        $stockItem->setData('use_config_max_sale_qty', 0);
        $stockItem->setData('qty', $quantiteStock);
        $stockItem->save();
    }

obrigado

JayD
fonte
Tenho exatamente o mesmo problema. Você tem 2 opções aqui. Mantenha os dois scripts (em dois dias) e compare-os e coloque os produtos ausentes em estoque. Ou diga ao seu provedor de dados para fornecer o mesmo arquivo com estoques = 0 para os produtos que estão fora de estoque (esse é o método mais limpo na minha opinião).
precisa saber é o seguinte
Desculpe pelo atraso na resposta. Aparentemente com o contrato whe temos com o nosso provedor, ele não pode fornecer-nos fora de stock assim que eu preciso para usar o seu 1ª opção
Jayd
Bem, boa sorte para você, não será uma tarefa fácil.
Julien Lachal

Respostas:

0

Você pode criar uma tabela no seu banco de dados com toda a entrada do produto.

Após atualização na estrutura de segunda-feira do DB.

sku   qty   created_at            flag

ABC   22    date("Y-m-d H:i:s")    0
BDE   13    date("Y-m-d H:i:s")    0
FGH   15    date("Y-m-d H:i:s")    0

Na terça-feira, defina o sinalizador como 1 para o sku disponível. Então, depois disso, na terça-feira, a estrutura do DB.

sku   qty   created_at            flag

ABC   12    date("Y-m-d H:i:s")    1
BDE   13    date("Y-m-d H:i:s")    0
FGH    4    date("Y-m-d H:i:s")    1

recupere todo o sku com a bandeira = 0 e defina 'is_in_stock' como 0. Depois disso, atualize sua tabela com o sku disponível na terça-feira e defina sua bandeira como 0 para o dia seguinte.

Após atualização na estrutura de terça-feira do DB.

sku   qty   created_at            flag

ABC   12    date("Y-m-d H:i:s")    0
BDE   13    date("Y-m-d H:i:s")    0 (You can remove old entry as per you logic)
FGH   04    date("Y-m-d H:i:s")    0
Gopal Patel
fonte