¿Cómo cambiar programáticamente el estado del stock del producto cuando el sku del producto no aparece en el feed de datos del proveedor?

8

Estoy usando Magento CE 1.9.1.
Hice una secuencia de comandos de importación para importar productos de un proveedor de alimentación XML.
Este feed se actualiza todos los días a las 3 a.m. Mi profider me envía en su xml solo productos que están en stock en su tienda.

Entonces, ¿cómo puedo actualizar el estado de mi stock de producto a agotado (por sku de producto) cuando el sku de producto no existe en el feed xml?

Pongo un ejemplo para explicar lo que quiero, datos proporcionados en el xml:

Monday :        Tuesday :

Sku   qty       Sku    qty

ABC   22        ABC    12
BDE   30        FGH    4
FGH   15

Lo que tengo que hacer: el martes tengo que configurar programáticamente mi producto BDE a "agotado" porque no aparece en el xml.

Ahí está mi script de importación:

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

Gracias

JayD
fuente
Tengo exactamente el mismo problema. Tienes 2 opciones aquí. Mantenga ambos scripts (2 días) y compárelos y agote los productos que faltan. O dígale a su proveedor de datos que le proporcione el mismo archivo con existencias = 0 para los productos que están agotados (en mi opinión, este es el método más limpio).
Julien Lachal
Lo siento por la respuesta tardía. Aparentemente con el contrato que tenemos con nuestro proveedor, él no puede proporcionarnos productos agotados, así que necesito usar su primera opción
JayD
Bueno, buena suerte para ti, no será una tarea fácil.
Julien Lachal

Respuestas:

0

Puede crear una tabla en su base de datos con toda la entrada del producto.

Después de actualizar el lunes la estructura 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

El martes establezca la bandera en 1 para el sku disponible. Entonces, después de eso, el martes estructura 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

recupere todos los sku con el flag = 0 y establezca su 'is_in_stock' en 0. después de eso, actualice su tabla con el sku disponible el martes y establezca su flag en 0 para el día siguiente.

Después de actualizar el martes la estructura 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
fuente