Wie kann der programmgesteuerte Produktbestandsstatus geändert werden, wenn die Produkt-SKU nicht im Anbieter-Datenfeed angezeigt wird?

8

Ich verwende Magento CE 1.9.1.
Ich habe ein Importskript erstellt, um Produkte aus einem XML-Feed eines Anbieters zu importieren.
Dieser Feed wird täglich um 3 Uhr morgens aktualisiert. Mein Professor schickt mir in seiner XML nur Produkte, die in seinem Shop auf Lager sind.

Wie kann ich mein Produktbestandsstatut auf "Nicht vorrätig" (nach Produkt-Sku) aktualisieren, wenn das Produkt-Sku nicht im XML-Feed vorhanden ist?

Ich habe ein Beispiel gegeben, um zu erklären, was ich will, Daten in der XML bereitgestellt:

Monday :        Tuesday :

Sku   qty       Sku    qty

ABC   22        ABC    12
BDE   30        FGH    4
FGH   15

Was ich tun muss: Dienstag muss ich mein Produkt BDE programmgesteuert auf "nicht vorrätig" setzen, da es nicht in der XML erscheint.

Es gibt mein Importskript:

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

Vielen Dank

JayD
quelle
Ich habe genau das gleiche Problem. Sie haben hier 2 Möglichkeiten. Bewahren Sie entweder beide Skripte (2 Tage lang) auf, vergleichen Sie sie und setzen Sie die fehlenden Produkte aus. Oder fordern Sie Ihren Datenprovider auf, Ihnen dieselbe Datei mit Lagerbeständen = 0 für die nicht vorrätigen Produkte zur Verfügung zu stellen (dies ist meiner Meinung nach die sauberste Methode).
Julien Lachal
Entschuldigung für die späte Antwort. Anscheinend kann er uns mit dem Vertrag, den wir mit unserem Anbieter haben, keine nicht vorrätigen Produkte anbieten, daher muss ich Ihre erste Option verwenden
JayD
Nun, viel Glück für Sie, wird keine leichte Aufgabe sein.
Julien Lachal

Antworten:

0

Sie können eine Tabelle in Ihrer Datenbank mit allen Produkteinträgen erstellen.

Nach dem Update am Montag Struktur der 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

Setzen Sie am Dienstag die Flagge für den verfügbaren Sku auf 1. Also danach am Dienstag Struktur der 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

Rufen Sie alle Sku mit dem Flag = 0 ab und setzen Sie deren 'is_in_stock' auf 0. Nach dieser Aktualisierung stellen Sie Ihre Tabelle mit dem verfügbaren Sku am Dienstag auf und setzen ihr Flag für den nächsten Tag auf 0.

Nach dem Update am Dienstag Struktur der 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
quelle