Как обновить продукт.количество в PrestaShop с PrestaSharp?

Как обновить продукт.количество в PrestaShop с PrestaSharp?

30.01.2020 09:04:26 Просмотров 24 Источник

Я использую prestaSharp для C#. Мне нужно обновить количество продукта, но свойство product.quantity равно readonly.

var ProductFactory = new Bukimedia.PrestaSharp.Factories.ProductFactory(BaseUrl, Account, Password);
List<Bukimedia.PrestaSharp.Entities.product> products = ProductFactory.GetAll();
foreach (var item in myItems)
{
    var productToUpdate = products.First(x => x.reference == item.Ref);
    // update the quantities
    if (productToUpdate != null)
    {
        productToUpdate.quantity = item.Quantity;
    }
}
await ProductFactory.UpdateListAsync(products);

Как же мне действовать дальше? Заранее спасибо

У вопроса есть решение - Посмотреть?

Ответы - Как обновить продукт.количество в PrestaShop с PrestaSharp? / How to update product.quantity in PrestaShop with PrestaSharp?

Mahdi Shad

31.01.2020 12:19:52

У Prestashop есть еще одна таблица для количеств: "запас"

Вы должны использовать эту таблицу и связанные с ней классы. Что-то вроде этого:

StockAvailable::setQuantity($id_product, $id_product_attribute, $quantity);
Является ответом!
Biiz

31.01.2020 12:39:17

основываясь на этом ответе github, я смог преобразовать код VB и обновить все акции за один вызов

var ProductFactory = new Bukimedia.PrestaSharp.Factories.ProductFactory(BaseUrl, Account, Password);
var StockAvailableFactory = new Bukimedia.PrestaSharp.Factories.StockAvailableFactory(BaseUrl, Account, Password);

// call prestasharp/api/Products to get the products
List<Bukimedia.PrestaSharp.Entities.product> products = ProductFactory.GetAll();

var stocksToUpdate = new List<Bukimedia.PrestaSharp.Entities.stock_available>();
foreach (var itemQ in itemsQuantity)
{
    var productToUpdate = products.First(x => x.reference == itemQ.Ref);
    // update the quantities
    if (productToUpdate != null)
    {
        var dtnSearch = new Dictionary<string, string>();
        dtnSearch.Add("id_product", productToUpdate.id.ToString());
        var currentStock = await StockAvailableFactory.GetByFilterAsync(dtnSearch, null, null);
        if(0 < currentStock.Count())
        {
            currentStock[0].quantity = Decimal.ToInt32(itemQ.Quantity);
            stocksToUpdate.Add(currentStock[0]);
        }
    }
}
await StockAvailableFactory.UpdateListAsync(stocksToUpdate);
Закрыть X