当供应商数据Feed中未出现产品sku时,如何以编程方式更改产品库存状态?


8

我使用的是Magento CE 1.9.1,
我制作了一个导入脚本以从提供程序xml提要中导入产品。
该提要每天凌晨3点更新。我的教授将他的XML产品发送给我,而这是他的商店中有库存的产品。

因此,当xml feed中不存在产品sku时,如何将我的产品库存状态更新为缺货(按产品sku)?

我举了一个例子来解释我想要的,xml中提供的数据:

Monday :        Tuesday :

Sku   qty       Sku    qty

ABC   22        ABC    12
BDE   30        FGH    4
FGH   15

我必须做的:星期二,我必须以编程方式将我的产品BDE设置为“无货”,因为它没有出现在xml中。

有我的导入脚本:

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

谢谢


我有完全一样的问题。您在这里有2个选项。保留两个脚本(每两天一次)并进行比较,然后将缺少的产品缺货。或者告诉您的数据提供者为您提供的库存相同产品的库存= 0的同一文件(我认为这是最干净的方法)。
Julien Lachal '16

这么晚才回复很抱歉。显然,与我们的提供商签订了合同,他无法为我们提供缺货的产品,因此我需要使用您的第一种选择
JayD

好吧,祝您好运,绝非易事。
Julien Lachal

Answers:


0

您可以在数据库中创建一个包含所有产品条目的表。

在星期一的数据库结构更新之后。

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

在星期二,将可用sku的标志设置为1。因此,在此之后的星期二,数据库的结构。

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

检索带有标志= 0的所有sku,并将其“ is_in_stock”设置为0。之后,在星期二使用可用sku更新表,并将其标志设置为第二天的0。

在更新星期二的数据库结构之后。

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.