Prestashop 1.6的CSV库存导入

时间:2018-03-27 12:35:42

标签: php mysql prestashop

我想创建一个简单的PHP脚本,我可以在Prestashop 1.6中对我的产品进行库存覆盖。它需要参考"产品参考"在我的文件中是" SKU"然后更新"数量"在Prestashop,这是"可用库存"在我的电子表格中。

目前我每天都会手动更新,因为我收到了来自供应商的实时库存更新的csv文件。我已经看过模块,但它们似乎都没有为我们工作,所以希望有人创建一个简单的PHP脚本,只会覆盖数据库中的数据。

提前致谢

2 个答案:

答案 0 :(得分:0)

这是我在PS 1.6上用于"产品"的更新库存的脚本。或" product_attribute"由UPC。

库存/文件夹中的CSV文件如下所示:

产品参考;库存移动; ID商店 4443601522; 0; 1

您可以更改此scrit以使用SKU而不是UPC

<?php
include(dirname(__FILE__) . '/config/config.inc.php');
include(dirname(__FILE__) . '/init.php');

$id_shop     = 1;
$id_lang     = 1;
$ligne       = 0; 
$dossier_csv = "/home/mywebsite/public_html/stock/"; 

echo '<H1>MAJ PS STOCK PAR UPC</h1>';

if (($fic = fopen($dossier_csv . "stock.csv", "a+")) == FALSE) {
    echo '<br>Erreur ouverture fichier stock !<br>';
} else {
    echo '<h2><u>Traitement des stocks :</u></h2>';
}


while ($tab = fgetcsv($fic, 1024, ';')) {
    $champs = count($tab);

    $ligne++;

    for ($i = 0; $i < $champs; $i++) {

        if ($i == 0)
            $reference = $tab[$i];

        if ($i == 1 && $reference != '' && $ligne != 1) {
            $quantity  = $tab[$i];
            $productId = getIdProductByUPC($reference);

            if ($productId != false) {

                $idProductAttribute = getIdByUPC($productId, $reference);
                $newStock           = $quantity;

                StockAvailable::setQuantity($productId, $idProductAttribute, $newStock, $id_shop);


                echo '<br>(' . $reference . ')  : OK qte : <b>' . $quantity . '</b><br>';
            } else {
                $productId = Product::getIdByUPC($reference);

                $product     = new Product($productId);
                $combination = $product->getAttributeCombinations($id_lang);

                if ($productId != false && count($combination) == 0) {
                    $newStock = $quantity;
                    StockAvailable::setQuantity($productId, 0, $newStock, $id_shop);
                    echo '<br>(' . $reference . ')  : OK qte : <b>' . $quantity . '</b><br>';
                } else {
                    echo '<br>(' . $reference . '-' . $productId . ')  : Erreur enregistrement stock <br>';
                }
            }  
        }

    }   
}

echo '<br><br><br><br>---MAJ TERMINEE---';

function getIdByUPC($id_product, $reference)
{
    if (empty($reference)) {
        return 0;
    }

    $query = new DbQuery();
    $query->select('pa.id_product_attribute');
    $query->from('product_attribute', 'pa');
    $query->where('pa.upc LIKE \'%' . pSQL($reference) . '%\'');
    $query->where('pa.id_product = ' . (int) $id_product);

    return Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($query);
}

function getIdProductByUPC($reference)
{
    if (empty($reference))
        return 0;
    $query = new DbQuery();
    $query->select('pa.id_product');
    $query->from('product_attribute', 'pa');
    $query->where('pa.upc = \'' . pSQL($reference) . '\'');
    return Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($query);
}
?>

答案 1 :(得分:-1)

我认为,行 $productId = Product::getIdByUPC($reference) 是错误的。 正确的:$productId = getIdProductByUPC($reference)