Comment modifier l'état du stock de produits par programme lorsque le SKU du produit n'apparaît pas dans le flux de données du fournisseur?

8

J'utilise Magento CE 1.9.1
J'ai créé un script d'importation pour importer des produits à partir d'un flux xml de fournisseur.
Ce flux est mis à jour tous les jours à 3 heures du matin. Mon profider m'envoie dans son xml uniquement les produits en stock dans sa boutique.

Alors, comment puis-je mettre à jour mon statut de stock de produit en rupture de stock (par référence produit) lorsque la référence produit n'existe pas dans le flux xml?

Je mets un exemple pour expliquer ce que je veux, les données fournies dans le xml:

Monday :        Tuesday :

Sku   qty       Sku    qty

ABC   22        ABC    12
BDE   30        FGH    4
FGH   15

Ce que je dois faire: mardi, je dois définir par programmation mon produit BDE sur "en rupture de stock" car il n'apparaît pas dans le xml.

Il y a mon script d'importation:

    $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();
    }

Merci

JayD
la source
J'ai exactement le même problème. Vous avez 2 options ici. Soit conserver les deux scripts (sur une base de 2 jours) et les comparer et mettre les produits manquants en rupture de stock. Ou dites à votre fournisseur de données de vous fournir le même fichier avec des stocks = 0 pour les produits en rupture de stock (c'est la méthode la plus propre à mon avis).
Julien Lachal
Désolé pour la réponse tardive. Apparemment, avec le contrat que nous avons avec notre fournisseur, il ne peut pas nous fournir de produits en rupture de stock, j'ai donc besoin d'utiliser votre première option
JayD
Eh bien, bonne chance pour vous, ce ne sera pas une tâche facile.
Julien Lachal

Réponses:

0

Vous pouvez créer une table dans votre base de données contenant toutes les entrées de produit.

Après la mise à jour lundi de la structure de 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

Mardi, définissez le drapeau sur 1 pour le sku disponible. Donc, après cela, mardi structure de 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

récupérez tous les sku avec le drapeau = 0 et définissez leur 'is_in_stock' à 0. après cette mise à jour, vous tablez avec le sku disponible le mardi et placez leur drapeau à 0 pour le lendemain.

Après mise à jour mardi de la structure de 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
la source