Bagaimana cara mengubah status stok produk saat sku produk tidak muncul di umpan data penyedia?

8

Saya menggunakan Magento CE 1.9.1
Saya membuat skrip impor untuk mengimpor produk dari penyedia xml feed.
Umpan ini diperbarui setiap hari pada jam 3 pagi. Profider saya mengirimi saya produk xml-nya saja di mana stoknya ada di tokonya.

Jadi bagaimana saya bisa memperbarui statut stok produk saya menjadi kehabisan stok (dengan sku produk) ketika sku produk tidak ada dalam umpan xml?

Saya memberi contoh untuk menjelaskan apa yang saya inginkan, data yang disediakan di xml:

Monday :        Tuesday :

Sku   qty       Sku    qty

ABC   22        ABC    12
BDE   30        FGH    4
FGH   15

Apa yang harus saya lakukan: Selasa saya harus mengatur secara program BDE produk saya menjadi "kehabisan stok" karena tidak muncul di xml.

Ada skrip impor saya:

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

Terima kasih

JayD
sumber
Saya memiliki masalah yang sama persis. Anda memiliki 2 opsi di sini. Simpan kedua skrip (berdasarkan 2 hari) dan bandingkan dan simpan produk yang hilang. Atau beri tahu penyedia data Anda untuk menyediakan file yang sama dengan stok = 0 untuk produk yang kehabisan stok (ini adalah metode terbersih menurut saya).
Julien Lachal
Maaf atas jawaban yang terlambat. Rupanya dengan kontrak yang ada dengan penyedia kami, ia tidak dapat menyediakan kami dari stok produk jadi saya perlu menggunakan opsi 1 Anda
JayD
Well, semoga sukses untukmu, tidak akan menjadi tugas yang mudah.
Julien Lachal

Jawaban:

0

Anda dapat membuat satu tabel di database Anda dengan semua entri produk di dalamnya.

Setelah pembaruan pada hari Senin struktur 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

Pada hari Selasa tetapkan bendera ke 1 untuk sku yang tersedia. Jadi setelah itu pada hari Selasa struktur 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

ambil semua sku dengan flag = 0 dan atur 'is_in_stock' menjadi 0. setelah itu perbarui tabel Anda dengan sku yang tersedia pada hari Selasa dan atur benderanya menjadi 0 untuk hari berikutnya.

Setelah pembaruan pada hari Selasa struktur 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
sumber