Jump to content

Actualizar precio y stock basandose en la referencia del producto (csv,php,sql)


JoZu

Recommended Posts

Hola a todos,

Tengo el siguiente codigo que sirve para que a través de un archivo csv creado por nosotros se actualicen los precios y el stock de nuestros productos BASANDONOS en la referencia del mismo.

<?php
//*1st column reference-2nd column price-3rd column wholesale price-4th column quantity!//*

mysql_connect("localhost", "usuario", "contraseña") or die(mysql_error());
mysql_select_db("nombrebbdd") or die(mysql_error());


$row = 0;

$update_table = "ps_product";



$handle = fopen("your.csv", "r");


while (($data = fgetcsv($handle, 100000, ";")) !== FALSE) {
    $num = count($data);
    echo "<p> $num fields to update in line $row: <br /></p>\n";
    $row++;
    for ($c=0; $c < $num; $c++) {
        if ($c = 1) {
        $reference = $data[($c - 1)];
        echo $reference . " reference Assigned <br />\n";
        }
        if ($c = 2) {
        $price = $data[($c - 1)];
        mysql_query("UPDATE $update_table SET price='$price' WHERE reference='$reference'")
        or die(mysql_error());
        echo $price . " Imported to <b>$row</b> in product <b>$reference</b><br />\n";
        }
		 if ($c = 3) {
        $wholesale_price = $data[($c - 1)];
        mysql_query("UPDATE $update_table SET wholesale_price='$wholesale_price' WHERE reference='$reference'")
        or die(mysql_error());
        echo $wholesale_price . " Imported to <b>$row</b> in product <b>$reference</b><br />\n";
        }
        if ($c = 4) {
        $quantity = $data[($c - 1)];
        mysql_query("UPDATE $update_table SET quantity='$quantity' WHERE reference='$reference'")
        or die(mysql_error());
        echo $product_quantity . " Imported to <b>$row</b> in product <b>$reference</b> <br />\n";
        }

    }
}

fclose($handle);
echo "<h1>Ready.</h1>";
?>

Existen 2 probleamas a solucionar:

El codigo actua sobre la tabla ps_product y por lo que he leido deberíamos hacer lo mismo en ps_product_shop para que la actualizacion del precio funcione.

Problema 1:

La tabla ps_product_shop carece de campo "referencia" de los productos por lo que tenemos que guiarnos por un campo compartido como "id_product" mi idea es esta:

 mysql_query("UPDATE ps_product_shop SET ps_product.price=ps_product_shop.price FROM ps_product.price INNER JOIN ps_product_shop .price ON ps_product.id_product=ps_product_shop.id_product)    

Pero esto se escapa a mis conocimientos, me da error de sintaxis aunque ponga variables, etc.

En este punto necesito vuestra ayuda.

El siguiente problema es que el stock no se si va en esa tabla.

El formato del csv que teneis que crear es el siguiente:

referencia | precio | precio mayorista | cantidad

Espero vuestra ayuda, un saludo.

Link to comment
Share on other sites

Despues de varias horas y días os pongo algo que servira:

}
 mysql_query ("UPDATE ps_product_shop JOIN ps_product ON ps_product.id_product=ps_product_shop.id_product SET ps_product_shop.price=ps_product.price")
        or die(mysql_error());
fclose($handle);
echo "<h1>Ready.</h1>";

Con esa linea de codigo, al final de pasar el csv y updatear ps_product también lo hará ps_product_shop y los precios ya se actualizan!!

En mi caso me falta el stock y el activo 0/1 para meter en el csv.

Por cierto, alguien sabe porque el campo price es precio sin iva incluido?

Un saludo, si quereis que siga posteando y terminar el codigo, solo teneis que avisar.

Link to comment
Share on other sites

Despues de varias horas y días os pongo algo que servira:

}
 mysql_query ("UPDATE ps_product_shop JOIN ps_product ON ps_product.id_product=ps_product_shop.id_product SET ps_product_shop.price=ps_product.price")
        or die(mysql_error());
fclose($handle);
echo "<h1>Ready.</h1>";

Con esa linea de codigo, al final de pasar el csv y updatear ps_product también lo hará ps_product_shop y los precios ya se actualizan!!

En mi caso me falta el stock y el activo 0/1 para meter en el csv.

Por cierto, alguien sabe porque el campo price es precio sin iva incluido?

Un saludo, si quereis que siga posteando y terminar el codigo, solo teneis que avisar.

 

Gracias por el script.

 

Referente a tu pregunta:

 

Por cierto, alguien sabe porque el campo price es precio sin iva incluido?
 
Es el precio sin iva, porque el precio final se calcula en base al precio sin iva + el iva configurado en la regla de impuestos (id_tax_rules_group (campo que tienes disponible en la base de datos para la tabla de los productos y tambien disponible para la importacion de un csv) dentro de la ficha del producto. (El precio final no se almacena, se almacena solo el precio base, para que el calculo del precio final pueda ser variable)
 
Y si tuvieras el precio final en un csv  y supieras la regla de impuestos aplicadas, haciendo el tipico calculo matematico, se podria calcular el precio base (sin iva) a insertar en la base de datos.
 
Si dejas el script completo en el foro, cuando lo acabes, vendra de perlas para todo el mundo (me incluyo yo tambien)
 
Gracias !
Edited by galindogadea (see edit history)
Link to comment
Share on other sites

Gracias galindogadea por la explicacion de price.

Intentaré terminar el script, lo que si que os pido es paciencia y mucho cuidado al tocar la BBDD de vuestro prestashop con el script yo no soy ningun experto en SQL.

Un saludo.

Link to comment
Share on other sites

  • 1 year later...

Hola! Estoy muy contenta por que por fin he conseguido hacerlo funcionar! El tema es que me soluciona a medias la actualización del stock, puesto que gran parte de mis productos tienen múltiples combinaciones, y estos no se actualizan a pesar de haber introducido en el csv la referencia de cada uno de ellos...

¿Alguien tiene alguna solución?

Yo he encontrado un post en el que por lo visto se pueden actualizar las combinaciones por referencia, pero no yo no entiendo de programación y no sé si sería posible fusionarlo con lo aquí expuesto...

 

http://evamariamontero.com/como-actualizar-un-stock-con-combinaciones-en-prestashop-1-5-6-a-partir-de-un-excel/

Link to comment
Share on other sites

  • 1 month later...
  • 1 month later...

Hola a todos,

Tengo el siguiente codigo que sirve para que a través de un archivo csv creado por nosotros se actualicen los precios y el stock de nuestros productos BASANDONOS en la referencia del mismo.

<?php
//*1st column reference-2nd column price-3rd column wholesale price-4th column quantity!//*

mysql_connect("localhost", "usuario", "contraseña") or die(mysql_error());
mysql_select_db("nombrebbdd") or die(mysql_error());


$row = 0;

$update_table = "ps_product";



$handle = fopen("your.csv", "r");


while (($data = fgetcsv($handle, 100000, ";")) !== FALSE) {
    $num = count($data);
    echo "<p> $num fields to update in line $row: <br /></p>\n";
    $row++;
    for ($c=0; $c < $num; $c++) {
        if ($c = 1) {
        $reference = $data[($c - 1)];
        echo $reference . " reference Assigned <br />\n";
        }
        if ($c = 2) {
        $price = $data[($c - 1)];
        mysql_query("UPDATE $update_table SET price='$price' WHERE reference='$reference'")
        or die(mysql_error());
        echo $price . " Imported to <b>$row</b> in product <b>$reference</b><br />\n";
        }
		 if ($c = 3) {
        $wholesale_price = $data[($c - 1)];
        mysql_query("UPDATE $update_table SET wholesale_price='$wholesale_price' WHERE reference='$reference'")
        or die(mysql_error());
        echo $wholesale_price . " Imported to <b>$row</b> in product <b>$reference</b><br />\n";
        }
        if ($c = 4) {
        $quantity = $data[($c - 1)];
        mysql_query("UPDATE $update_table SET quantity='$quantity' WHERE reference='$reference'")
        or die(mysql_error());
        echo $product_quantity . " Imported to <b>$row</b> in product <b>$reference</b> <br />\n";
        }

    }
}

fclose($handle);
echo "<h1>Ready.</h1>";
?>

Existen 2 probleamas a solucionar:

El codigo actua sobre la tabla ps_product y por lo que he leido deberíamos hacer lo mismo en ps_product_shop para que la actualizacion del precio funcione.

Problema 1:

La tabla ps_product_shop carece de campo "referencia" de los productos por lo que tenemos que guiarnos por un campo compartido como "id_product" mi idea es esta:

 mysql_query("UPDATE ps_product_shop SET ps_product.price=ps_product_shop.price FROM ps_product.price INNER JOIN ps_product_shop .price ON ps_product.id_product=ps_product_shop.id_product)    

Pero esto se escapa a mis conocimientos, me da error de sintaxis aunque ponga variables, etc.

En este punto necesito vuestra ayuda.

El siguiente problema es que el stock no se si va en esa tabla.

El formato del csv que teneis que crear es el siguiente:

referencia | precio | precio mayorista | cantidad

Espero vuestra ayuda, un saludo.

 

Hola a todos,

Tengo el siguiente codigo que sirve para que a través de un archivo csv creado por nosotros se actualicen los precios y el stock de nuestros productos BASANDONOS en la referencia del mismo.

<?php
//*1st column reference-2nd column price-3rd column wholesale price-4th column quantity!//*

mysql_connect("localhost", "usuario", "contraseña") or die(mysql_error());
mysql_select_db("nombrebbdd") or die(mysql_error());


$row = 0;

$update_table = "ps_product";



$handle = fopen("your.csv", "r");


while (($data = fgetcsv($handle, 100000, ";")) !== FALSE) {
    $num = count($data);
    echo "<p> $num fields to update in line $row: <br /></p>\n";
    $row++;
    for ($c=0; $c < $num; $c++) {
        if ($c = 1) {
        $reference = $data[($c - 1)];
        echo $reference . " reference Assigned <br />\n";
        }
        if ($c = 2) {
        $price = $data[($c - 1)];
        mysql_query("UPDATE $update_table SET price='$price' WHERE reference='$reference'")
        or die(mysql_error());
        echo $price . " Imported to <b>$row</b> in product <b>$reference</b><br />\n";
        }
		 if ($c = 3) {
        $wholesale_price = $data[($c - 1)];
        mysql_query("UPDATE $update_table SET wholesale_price='$wholesale_price' WHERE reference='$reference'")
        or die(mysql_error());
        echo $wholesale_price . " Imported to <b>$row</b> in product <b>$reference</b><br />\n";
        }
        if ($c = 4) {
        $quantity = $data[($c - 1)];
        mysql_query("UPDATE $update_table SET quantity='$quantity' WHERE reference='$reference'")
        or die(mysql_error());
        echo $product_quantity . " Imported to <b>$row</b> in product <b>$reference</b> <br />\n";
        }

    }
}

fclose($handle);
echo "<h1>Ready.</h1>";
?>

Existen 2 probleamas a solucionar:

El codigo actua sobre la tabla ps_product y por lo que he leido deberíamos hacer lo mismo en ps_product_shop para que la actualizacion del precio funcione.

Problema 1:

La tabla ps_product_shop carece de campo "referencia" de los productos por lo que tenemos que guiarnos por un campo compartido como "id_product" mi idea es esta:

 mysql_query("UPDATE ps_product_shop SET ps_product.price=ps_product_shop.price FROM ps_product.price INNER JOIN ps_product_shop .price ON ps_product.id_product=ps_product_shop.id_product)    

Pero esto se escapa a mis conocimientos, me da error de sintaxis aunque ponga variables, etc.

En este punto necesito vuestra ayuda.

El siguiente problema es que el stock no se si va en esa tabla.

El formato del csv que teneis que crear es el siguiente:

referencia | precio | precio mayorista | cantidad

Espero vuestra ayuda, un saludo.

 

Despues de varias horas y días os pongo algo que servira:

}
 mysql_query ("UPDATE ps_product_shop JOIN ps_product ON ps_product.id_product=ps_product_shop.id_product SET ps_product_shop.price=ps_product.price")
        or die(mysql_error());
fclose($handle);
echo "<h1>Ready.</h1>";

Con esa linea de codigo, al final de pasar el csv y updatear ps_product también lo hará ps_product_shop y los precios ya se actualizan!!

En mi caso me falta el stock y el activo 0/1 para meter en el csv.

Por cierto, alguien sabe porque el campo price es precio sin iva incluido?

Un saludo, si quereis que siga posteando y terminar el codigo, solo teneis que avisar.

 

Hola! Estoy muy contenta por que por fin he conseguido hacerlo funcionar! El tema es que me soluciona a medias la actualización del stock, puesto que gran parte de mis productos tienen múltiples combinaciones, y estos no se actualizan a pesar de haber introducido en el csv la referencia de cada uno de ellos...

¿Alguien tiene alguna solución?

Yo he encontrado un post en el que por lo visto se pueden actualizar las combinaciones por referencia, pero no yo no entiendo de programación y no sé si sería posible fusionarlo con lo aquí expuesto...

 

http://evamariamontero.com/como-actualizar-un-stock-con-combinaciones-en-prestashop-1-5-6-a-partir-de-un-excel/

 

gracias por el script,

 

 

 

Se actualizan por referencia,

 

eso es justo lo que estoy buscando,

 

 

en realidad sería genial que funcionase por referencia de proveedor,

 

 

pero

 

disculpad,

 

yo no entiendo de programación,

 

 

¿ funciona en PS 1.6 ?

 

 

¿Cómo lo guardo?

 

¿en php ?

 

¿o modificando el index.php de la carpeta import?

 

 

y ¿en qué carpeta?

 

public_html / admin / import

 

 

y luego

 

¿cómo le hago la llamada para que funcione?

 

¿aparece algún "botón" en importar csv ?

 

 

tengo que actualizar el precio a alrededor de 3500 referencias,

 

si alguien me puede ayudar,

 

gracias,

Edited by Dafne (see edit history)
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...