Как программно изменить состояние запаса товара, если товарный номер не отображается в фиде провайдера?


8

Я использую Magento CE 1.9.1.
Я создал скрипт импорта для импорта продуктов из xml-ленты провайдера.
Этот канал обновляется каждый день в 3 часа ночи. Мой профайдер отправляет мне в своем XML только продукты, которые есть на складе в его магазине.

Итак, как я могу обновить статус моего запаса товара на складе (по артикулу товара), если артикула товара нет в канале xml?

Я положил пример, чтобы объяснить, что я хочу, данные представлены в XML:

Monday :        Tuesday :

Sku   qty       Sku    qty

ABC   22        ABC    12
BDE   30        FGH    4
FGH   15

Что я должен сделать: во вторник я должен программно установить для моего продукта BDE «нет в наличии», потому что он не отображается в xml.

Вот мой скрипт импорта:

    $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 варианта здесь. Либо сохраните оба сценария (на двухдневной основе), сравните их и уберите отсутствующие продукты. Или попросите вашего поставщика данных предоставить вам тот же файл с запасов = 0 для продуктов, которых нет в наличии (на мой взгляд, это самый чистый метод).
Жюльен Лахаль

Извините за задержку с ответом. Очевидно, с контрактом, заключенным с нашим провайдером, он не может предоставить нам товары со склада, поэтому мне нужно использовать ваш 1-й вариант
JayD

Что ж, удачи тебе, это не будет легкой задачей.
Жюльен Лахаль

Ответы:


0

Вы можете создать одну таблицу в своей базе данных со всей записью продукта.

После обновления в понедельник состав БД.

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

Во вторник установите флаг 1 для доступного номера. Так что после этого во вторник структура БД.

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

извлеките все sku с флагом = 0 и установите их is_in_stock на 0. После этого обновите свою таблицу с доступными sku во вторник и установите их флаг на 0 на следующий день.

После обновления во вторник состав БД.

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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.