Làm cách nào để thay đổi trạng thái tồn kho sản phẩm theo chương trình khi sku sản phẩm không xuất hiện trong nguồn cấp dữ liệu của nhà cung cấp?


8

Tôi đang sử dụng Magento CE 1.9.1
Tôi đã tạo một tập lệnh nhập để nhập sản phẩm từ nguồn cấp dữ liệu xml của nhà cung cấp.
Nguồn cấp dữ liệu này được cập nhật hàng ngày lúc 3 giờ sáng. Chuyên gia của tôi gửi cho tôi trong các sản phẩm chỉ xml của anh ấy có trong kho trong cửa hàng của anh ấy.

Vậy làm cách nào tôi có thể cập nhật trạng thái tồn kho sản phẩm của mình thành hết hàng (theo sản phẩm sku) khi sản phẩm sku không tồn tại trong nguồn cấp dữ liệu xml?

Tôi đặt một ví dụ để giải thích những gì tôi muốn, dữ liệu được cung cấp trong xml:

Monday :        Tuesday :

Sku   qty       Sku    qty

ABC   22        ABC    12
BDE   30        FGH    4
FGH   15

Những gì tôi phải làm: Thứ ba, tôi phải lập trình BDE sản phẩm của mình thành "hết hàng" vì nó không xuất hiện trong xml.

Có tập lệnh nhập của tôi:

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

Cảm ơn


Tôi có chung vấn đề đó. Bạn có 2 lựa chọn ở đây. Hoặc giữ cả hai tập lệnh (trên cơ sở 2 ngày) và so sánh chúng và đưa các sản phẩm còn thiếu ra khỏi kho. Hoặc nói với nhà cung cấp dữ liệu của bạn để cung cấp cho bạn cùng một tệp với stock = 0 cho các sản phẩm hết hàng (theo tôi đây là phương pháp sạch nhất).
Julien Lachal

Xin lỗi vì hồi âm muộn. Rõ ràng với hợp đồng mà nhà cung cấp của chúng tôi có, anh ta không thể cung cấp cho chúng tôi hết sản phẩm chứng khoán nên tôi cần sử dụng tùy chọn thứ nhất của bạn
JayD

Chà, chúc may mắn cho bạn, sẽ không phải là một nhiệm vụ dễ dàng.
Julien Lachal

Câu trả lời:


0

Bạn có thể tạo một bảng trong cơ sở dữ liệu của mình với tất cả các mục sản phẩm trong đó.

Sau khi cập nhật cấu trúc thứ hai của 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

Vào thứ ba, đặt cờ thành 1 cho sku có sẵn. Vì vậy, sau đó vào thứ ba cấu trúc của 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

lấy tất cả sku với cờ = 0 và đặt 'is_in_stock' của chúng thành 0. sau đó cập nhật bảng của bạn với sku có sẵn vào thứ ba và đặt cờ của chúng thành 0 cho ngày hôm sau.

Sau khi cập nhật cấu trúc thứ ba của 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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.