¿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


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.