製品SKUがプロバイダーのデータフィードに表示されない場合に、プログラムで製品の在庫状況を変更する方法


8

Magento CE 1.9.1
を使用しています。プロバイダーのXMLフィードから製品をインポートするためのインポートスクリプトを作成しました。
このフィードは毎日午前3時に更新されます。私のプロフィーダーは、自分のショップに在庫がある商品のみをxmlで送ってくれます。

では、製品skuがxmlフィードに存在しない場合、どうすれば製品の在庫状況を在庫切れ(製品skuごと)に更新できますか?

私が何をしたいかを説明するために例を置き、データはxmlで提供されます:

Monday :        Tuesday :

Sku   qty       Sku    qty

ABC   22        ABC    12
BDE   30        FGH    4
FGH   15

私がしなければならないこと:火曜日xmlに表示されないため、プログラムで製品のBDEを「在庫なし」に設定する必要があります。

私のインポートスクリプトがあります:

    $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つのオプションがあります。両方のスクリプトを(2日ベースで)保持して比較し、不足している製品の在庫をなくします。または、在庫切れの製品について、stocks = 0と同じファイルを提供するようにデータプロバイダーに指示してください(これは私の意見では最もクリーンな方法です)。
Julien Lachal

返事が遅れて申し訳ありません。どうやら私たちのプロバイダーとの契約では、彼は私たちに在庫切れの製品を提供できないので、最初のオプションを使用する必要があります
JayD

さて、あなたに幸運は、簡単な作業ではありません。
Julien Lachal 16

回答:


0

データベースに1つのテーブルを作成し、その中にすべての製品エントリを含めることができます。

月曜日の更新後の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

火曜日に、使用可能なSKUのフラグを1に設定します。それで、火曜日に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

flag = 0ですべてのskuを取得し、 'is_in_stock'を0に設定します。その後、火曜日に利用可能なskuでテーブルを更新し、翌日のフラグを0に設定します。

火曜日の更新後の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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.