Jump to content

Módulo para actualizar stock y precio?


DropNix.com

Recommended Posts

hola yo he modificado el siguiente script y funciona (no me responsabilizo)

 

 

<?php

 

// este php necesita en entrada un fichero update.csv con 4 campos

// Referencia producto; Precio Mayorista (costo); Stock; Precio de venta sin iva (PVP)

// los numero en formado ingles (ej 2.55)

// el programa funciona así:

// lee el fichero y accede a la base de datos con la REFERENCIA del producto y recupera la ID del producto

// actualiza stock, precio mayorista, precio de venta sin iva.

 

 

$dir = opendir('.'); //$dir = opendir('./updater');

echo "Conectamos a la bb.dd." . '<br>'; flush();

mysql_connect("dirección servidor", "xxxxxxx_bbdd", "password") or die(mysql_error());

mysql_select_db("nombre database") or die(mysql_error());

 

// Como la primera fila son los nombres de las columnas:

$fila = 1;

// Tenemos que actualizar en dos tablas:

$update_table = "ps_product inner join ps_stock_available on (ps_product.id_product =

 

ps_stock_available.id_product)";

//antes que nada, stock de todo a 0 para no tener descatalogados con stock:

mysql_query ("UPDATE $update_table SET ps_stock_available.quantity=0");

echo "Abrimos el fichero." . '<br>'; flush();

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

$falta = fopen("falta.txt", "w");

echo "Recorremos el CSV..." . '<br>'; flush();

while (($data = fgetcsv($handle, 0, ";")) !== FALSE) {

$num = count($data);

echo "<p>" . '<br>'; flush();

echo "( $fila )" . '<br>'; flush();

$fila++;

for ($c=0; $c < $num; $c++) {

if ($c = 1) { //Referencia producto

$reference = $data[($c - 1)];

 

$row = mysql_query("SELECT * FROM ps_product WHERE reference='$reference'") or die (mysql_error()); //

$existe = mysql_num_rows($row); //

 

 

if ($existe == 0) {fwrite ($falta, "La referencia $reference no existe en bb.dd." . PHP_EOL);} //

 

echo $reference . " - Referencia Producto" . '<br>'; flush();

$buscaid = mysql_query("SELECT id_product FROM ps_product WHERE reference='$reference'") or

 

die (mysql_error()); //

$id_product = mysql_result($buscaid, 0);

echo $id_product . " - Referencia Producto" . '<br>'; flush();

}

 

if ($c = 2) { //precio de compra

$compra = $data[($c - 1)];

mysql_query("UPDATE $update_table SET wholesale_price='$compra' WHERE reference='$reference'")

or die(mysql_error());

echo $compra . " - Coste actualizado tabla ps:_product" . '<br>'; flush();

 

mysql_query("UPDATE ps_product_shop SET wholesale_price='$compra' WHERE

 

id_product='$id_product'")

or die(mysql_error());

echo $compra . " - Coste actualizado tabla ps:_product_shop" . '<br>'; flush();

}

 

if ($c = 3) { //Precio PVP

$price = $data[($c - 1)];

mysql_query("UPDATE $update_table SET price='$price' WHERE reference='$reference'")

or die(mysql_error());

echo $price . " - PVP tabla ps_product actualizado" . '<br>'; flush();

mysql_query("UPDATE ps_product_shop SET price='$price' WHERE id_product='$id_product'")

or die(mysql_error());

echo $price . " - PVP tabla ps_product.shop actualizado" . '<br>'; flush();

}

 

if ($c = 4) { //Stock

$quantity = $data[($c - 1)];

mysql_query("UPDATE $update_table SET ps_stock_available.quantity='$quantity' WHERE

 

reference='$reference'")

or die(mysql_error());

echo $quantity . " - stock actualizado" . '<br>'; flush();

}

 

 

echo "_____________________________________________________<p>";

}

}

fclose($handle);

fclose($falta);

//mandamos el archivo por mail

# Leer el contenido del archivo

$archivo = file_get_contents("falta.txt");

# De quien

$nombre_from = 'Nombre de quien envia'; $email_from = "[email protected]";

# Para quien

$email_to = "[email protected]";

# Asunto

$asunto = "Articulos faltantes";

# Encabezado del E-mail

$header = "From: ".$nombre_from." <".$email_from.">\r\n";

# Envio del email

$ok = mail($email_to,$asunto,$archivo,$header);

# Si el email se envío, se imprime...

echo ($ok) ? "Enviado..." : "Falló el envío";

 

echo " <p>" . '<br>'; flush();

echo " - - - ACTUALIZACION COMPLETADA - - - <p>" . '<br>'; flush();

//Borro los archivos viejos para no tener problema al renombrar o descargar

//unlink('update.csv');

 

echo "Archivos temporales eliminados" . '<br>'; flush();

echo "Todo hecho" . '<br>'; flush();

?>

Edited by donpablito (see edit history)
  • Like 3
Link to comment
Share on other sites

hola yo he modificado el siguiente script y funciona (no me responsabilizo)

 

 

<?php

 

// este php necesita en entrada un fichero update.csv con 4 campos

// Referencia producto, Precio Mayorista (costo), Stock, Precio de venta sin iva (PVP)

// los numero en formado ingles (ej 2.55)

// el programa funciona así:

// lee el fichero y accede a la base de datos con la REFERENCIA del producto y recupera la ID del producto

// actualiza stock, precio mayorista, precio de venta sin iva.

 

 

$dir = opendir('.'); //$dir = opendir('./updater');

echo "Conectamos a la bb.dd." . '<br>'; flush();

mysql_connect("dirección servidor", "xxxxxxx_bbdd", "password") or die(mysql_error());

mysql_select_db("nombre database") or die(mysql_error());

 

// Como la primera fila son los nombres de las columnas:

$fila = 1;

// Tenemos que actualizar en dos tablas:

$update_table = "ps_product inner join ps_stock_available on (ps_product.id_product =

 

ps_stock_available.id_product)";

//antes que nada, stock de todo a 0 para no tener descatalogados con stock:

mysql_query ("UPDATE $update_table SET ps_stock_available.quantity=0");

echo "Abrimos el fichero." . '<br>'; flush();

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

$falta = fopen("falta.txt", "w");

echo "Recorremos el CSV..." . '<br>'; flush();

while (($data = fgetcsv($handle, 0, ";")) !== FALSE) {

$num = count($data);

echo "<p>" . '<br>'; flush();

echo "( $fila )" . '<br>'; flush();

$fila++;

for ($c=0; $c < $num; $c++) {

if ($c = 1) { //Referencia producto

$reference = $data[($c - 1)];

 

$row = mysql_query("SELECT * FROM ps_product WHERE reference='$reference'") or die (mysql_error()); //

$existe = mysql_num_rows($row); //

 

 

if ($existe == 0) {fwrite ($falta, "La referencia $reference no existe en bb.dd." . PHP_EOL);} //

 

echo $reference . " - Referencia Producto" . '<br>'; flush();

$buscaid = mysql_query("SELECT id_product FROM ps_product WHERE reference='$reference'") or

 

die (mysql_error()); //

$id_product = mysql_result($buscaid, 0);

echo $id_product . " - Referencia Producto" . '<br>'; flush();

}

 

if ($c = 2) { //precio de compra

$compra = $data[($c - 1)];

mysql_query("UPDATE $update_table SET wholesale_price='$compra' WHERE reference='$reference'")

or die(mysql_error());

echo $compra . " - Coste actualizado tabla ps:_product" . '<br>'; flush();

 

mysql_query("UPDATE ps_product_shop SET wholesale_price='$compra' WHERE

 

id_product='$id_product'")

or die(mysql_error());

echo $compra . " - Coste actualizado tabla ps:_product_shop" . '<br>'; flush();

}

 

if ($c = 3) { //Precio PVP

$price = $data[($c - 1)];

mysql_query("UPDATE $update_table SET price='$price' WHERE reference='$reference'")

or die(mysql_error());

echo $price . " - PVP tabla ps_product actualizado" . '<br>'; flush();

mysql_query("UPDATE ps_product_shop SET price='$price' WHERE id_product='$id_product'")

or die(mysql_error());

echo $price . " - PVP tabla ps_product.shop actualizado" . '<br>'; flush();

}

 

if ($c = 4) { //Stock

$quantity = $data[($c - 1)];

mysql_query("UPDATE $update_table SET ps_stock_available.quantity='$quantity' WHERE

 

reference='$reference'")

or die(mysql_error());

echo $quantity . " - stock actualizado" . '<br>'; flush();

}

 

 

echo "_____________________________________________________<p>";

}

}

fclose($handle);

fclose($falta);

//mandamos el archivo por mail

# Leer el contenido del archivo

$archivo = file_get_contents("falta.txt");

# De quien

$nombre_from = 'Nombre de quien envia'; $email_from = "[email protected]";

# Para quien

$email_to = "[email protected]";

# Asunto

$asunto = "Articulos faltantes";

# Encabezado del E-mail

$header = "From: ".$nombre_from." <".$email_from.">\r\n";

# Envio del email

$ok = mail($email_to,$asunto,$archivo,$header);

# Si el email se envío, se imprime...

echo ($ok) ? "Enviado..." : "Falló el envío";

 

echo " <p>" . '<br>'; flush();

echo " - - - ACTUALIZACION COMPLETADA - - - <p>" . '<br>'; flush();

//Borro los archivos viejos para no tener problema al renombrar o descargar

//unlink('update.csv');

 

echo "Archivos temporales eliminados" . '<br>'; flush();

echo "Todo hecho" . '<br>'; flush();

?>

 

Hola,

 

Voy a probarlo.

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

Ojala hayas podido probarlo Rubalcaba y puedas decirme algo, llevo un monton de días buscando esta solución.

 

Espero tu respuesta pronto Rubal por favor.

 

Saludos

Gracias a todos

 

PD: A ver si tengo suerte y el gran Victor ha podido probar el modulo o ese gran Script.

 

Saludos Y Gracias de nuevo chicos

Edited by Informaticaelec.com (see edit history)
Link to comment
Share on other sites

hola este script funciona perfectamente.

 

lo utilizo yo desde una semana con 850 productos.....

 

Antes hacer la prueba con 1 solo articulo.

 

Ejemplo del fichero update.csv

Acc001;3.500000;4.000000;8.000000

 

Prestashop utiliza 6 decimales así yo preparo un csv igual.

Acc001 = referencia producto

3.50 = costo mayorista

4 = stock

8 = venta sin iva!

Edited by donpablito (see edit history)
  • Like 1
Link to comment
Share on other sites

hola este script funciona perfectamente.

 

lo utilizo yo desde una semana con 850 productos.....

 

Antes hacer la prueba con 1 solo articulo.

 

Ejemplo del fichero update.csv

Acc001,3.500000,4.000000,8.000000

 

Prestashop utiliza 6 decimales así yo preparo un csv igual.

Acc001 = referencia producto

3.50 = costo mayorista

4 = stock

8 = venta sin iva!

Gracias compañero, es que no tengo muchos conocimientos para todo esto, me puedes enviar un CSV de prueba para que pueda intentar hacerlo?

 

Gracias donpablito

Link to comment
Share on other sites

ok,,

 

con el block de notas, creas un fichero .php y lo pegas tal como esta!

imaginate que lo llamas actualiza.php

 

Lo sube en tu servidor ejemplo www.tuservidor.com

sube tambien el fichero update.csv en la misma carpeta del programa...

 

despues vas al explorer o otro browser y escribes: www.tuservidor.com/actualiza.php y va....

 

AH. no te olvides modificar los parametros iniciales del script para acceder a tus bade de datos!

  • Like 1
Link to comment
Share on other sites

ok,,

 

con el block de notas, creas un fichero .php y lo pegas tal como esta!

imaginate que lo llamas actualiza.php

 

Lo sube en tu servidor ejemplo www.tuservidor.com

sube tambien el fichero update.csv en la misma carpeta del programa...

 

despues vas al explorer o otro browser y escribes: www.tuservidor.com/actualiza.php y va....

 

AH. no te olvides modificar los parametros iniciales del script para acceder a tus bade de datos!

Voy a intentarlo a ver si funciona, sería mi salvación la verdad...

 

Muchas gracias por todo Pablo. :)

Link to comment
Share on other sites

Vale, ya está creado todo, ahora como creo exactamente un CSV? Porque querría actualizar de 500 en 500, tengo 5380 productos y si creo unos 6 o 7 CSV, cada vez que actualice del 1 al 2 por ejemplo se pondrá todos los del 1 en 0 no? Espero vuestra ayuda chicos, muchísimas gracias pablo, parece que funciona lo que nos has puesto mas arriba, lo que pasa que hasta que no me quede claro lo de los CSV no me puedo arriesgar a meterlos... :(

 

Gracias por todo

Link to comment
Share on other sites

efectivamente es como tu dices.......

 

no puedes hacerlo en 5-6 veces.... tiene que ser de golpe.

 

Si no tienes que COMENTAR el comando que pone stock = 0

es decir

ponle // delante de

mysql_query ("UPDATE $update_table SET ps_stock_available.quantity=0");

 

es decir

// mysql_query ("UPDATE $update_table SET ps_stock_available.quantity=0");

 

así ya nunca te limpia el stock.

 

Para crear un CSV, yo por ejemplo que utilizo FACTUSOL, hago la exportación de datos en excel, y despues Guardo como .CSV

 

Saludos

  • Like 1
Link to comment
Share on other sites

efectivamente es como tu dices.......

 

no puedes hacerlo en 5-6 veces.... tiene que ser de golpe.

 

Si no tienes que COMENTAR el comando que pone stock = 0

es decir

ponle // delante de

mysql_query ("UPDATE $update_table SET ps_stock_available.quantity=0");

 

es decir

// mysql_query ("UPDATE $update_table SET ps_stock_available.quantity=0");

 

así ya nunca te limpia el stock.

 

Para crear un CSV, yo por ejemplo que utilizo FACTUSOL, hago la exportación de datos en excel, y despues Guardo como .CSV

 

Saludos

Estupendo compañero, muchísimas gracias, factusol es un software de windows, pero en mi caso... yo tengo un CSV ya echo por otro proveedor, por lo cual no está en el mismo formato que lo que exige prestashop, podría valer igualmente? O tiene que cumplir lo que dijistes anteriormente:

Ejemplo del fichero update.csv

Acc001,3.500000,4.000000,8.000000

 

Prestashop utiliza 6 decimales así yo preparo un csv igual.

Acc001 = referencia producto

3.50 = costo mayorista

4 = stock

8 = venta sin iva!

 

Saludos muchísimas gracias Pablo, me estás ayudando muchísimo :)

Link to comment
Share on other sites

Hola gente!

Estoy siguiendo este tema porque la verdad que me urge lograr actualizar los 4230 articulos que tengo en la tienda de una manera mas agil...

El tema es que copio el script en un php, lo subo a una carpeta del servidor con el archivo csv segun las indicaciones y me tira un hermoso error 500...

Alguien pudo avanzar un poco mas?

Uso la version 1.5.1

Link to comment
Share on other sites

Quizá me perdí algo de la conversación pero ¿el módulo normal de prestashop para importar no te funciona para lo que necesitas? Te permite elegir qué columnas importar, actualiza los datos según el ID del producto... Requiere importar en dos pasadas, pero es casi mejor si después tienes que ir actualizando solo stocks y precios una vez subidos todos los artículos.

 

En prestashop lo encontrarás en "Importar", y lo que quieres importar son "combinaciones".

En tu CSV indica el ID del artículo, la talla-medida-color, el precio si varía respecto del artículo normal...

 

No es complicado pero piensa que lo que pretendes es el tiempo de ahorrarte tener que introducir todo eso a mano. Requiere el esfuerzo de aprender a hacer importaciones correctamente (nosotros realizamos formaciones sobre esto a nuestros clientes y necesitamos habitualmente 2 días para que dominen cómo hacerlo... y la clave está en el excel más que en el prestashop).

Link to comment
Share on other sites

Quizá me perdí algo de la conversación pero ¿el módulo normal de prestashop para importar no te funciona para lo que necesitas? Te permite elegir qué columnas importar, actualiza los datos según el ID del producto... Requiere importar en dos pasadas, pero es casi mejor si después tienes que ir actualizando solo stocks y precios una vez subidos todos los artículos.

 

En prestashop lo encontrarás en "Importar", y lo que quieres importar son "combinaciones".

En tu CSV indica el ID del artículo, la talla-medida-color, el precio si varía respecto del artículo normal...

 

No es complicado pero piensa que lo que pretendes es el tiempo de ahorrarte tener que introducir todo eso a mano. Requiere el esfuerzo de aprender a hacer importaciones correctamente (nosotros realizamos formaciones sobre esto a nuestros clientes y necesitamos habitualmente 2 días para que dominen cómo hacerlo... y la clave está en el excel más que en el prestashop).

 

Volvi para decir exactamente lo que acabas de escribir...

Cree otro dominio de prueba en el servidor, otra tienda de presta e importe 99 articulos desde el archivo excel guardado como csv.

Luego modifique groseramente precios y stock de 3 productos salteados en el mismo archivo y lo guarde con otro nombre,

Volvi a la seccion de "importar csv" de los parametros avanzados y lo subi al servidor.

Deje tildado "Usar la referencia como key" y "Forzar all ID durante la importacion"

Cuando se abre la ventana con las columnas del archivo csv, seleccione "Referencia#" "Nombre" "Cantidad" "Precio"

Y volvi a subir el archivo con los 99 articulos originales, pero con solo 3 productos modificados como escribi anteriormente.

Todo OK.

Voy a la solapa de catalogo, voy a productos y alli estaban todos mis 99 articulos intactos, a excepcion de los 3 que modifique adrede para chequear todo esto.

La verdad que me saque un peso de encima con esta forma de importar productos o modificaciones. Tengo que seguir haciendo pruebas pero creo que encontre el camino.

Lo unico que me asusta un poco (y parte desde que no hice nunca una restauracion de la dB) es como estar seguro de que un backup de la dB esta bien hecho...

 

Saludos!

Link to comment
Share on other sites

hola comunidad, la verdad compañeros, veo que unos saben, otros no sabemos, pero veo que falta información para novatos, alguien con idea de esto, puede hacer un tutorial de como actualizar los productos, el stock, el precio y las cantidades a poder ser?

 

Por favor, porque unos saben y otros no, ( yo entre ellos ) y me imagino que muchos mas como yo, hacer un tutorial por favor.

 

Saludos

Esperamos con paciencia todo esto...

Link to comment
Share on other sites

Gracias por contestar compañero, pongo los datos como indicas pero nada... no hay suerte :(

 

lo he puesto así, porque es para una prueba.

 

51079,3.500000,4.000000,8.000000

 

Esa es la referencia de un producto de mi web, lo pongo en un archivo de notepad, y luego al guardar lo pongo como:

update.csv, lo meto a la carpeta del modulo, voy a la dirección en el navegador de actualizar.php y pone que lo ha echo correctamente pero no hay cambios...

 

Espero ver luz a este asunto... porque estoy a 2 días de abrir la tienda y lo mas importante... no lo tengo.

 

Gracias de veras compañero

 

Saludos

Link to comment
Share on other sites

Conectamos a la bb.dd.

Abrimos el fichero.

Recorremos el CSV...

 

( 1 )

51079,106.61,25,129 - Referencia Producto

 

Warning: mysql_result() [function.mysql-result]: Unable to jump to row 0 on MySQL result index 7 in /home3/informa2/public_html/actualiza/actualiza.php on line 47

- Referencia Producto

- Coste actualizado tabla ps:_product

- Coste actualizado tabla ps:_product_shop

- PVP tabla ps_product actualizado

- PVP tabla ps_product.shop actualizado

- stock actualizado

_____________________________________________________

Enviado...

 

- - - ACTUALIZACION COMPLETADA - - -

 

Archivos temporales eliminados

Todo hecho

 

 

Esto me indica compañero.

Saludos

Gracias

Link to comment
Share on other sites

Se que no te puedes gastar pasta y tal, pero sabías que este programa es gratis y te sube los precios masivamente ya sea mediante porcentaje o precio fijo?

 

http://www.storecommander.com/

 

De nada

Gracias Guindos, pero esto es un modulo? Porque me he bajado el zip y lo he metido para instalarlo en modulos y me da error....

Espero pronto terminar esta pesadilla...

 

Gracias a todos

Link to comment
Share on other sites

Ahhh!! Jeje vale, voy a ver si ahora funciona, pero una pregunta Pablo, la hago por aquí porque podrá ayudar a muchos.

 

En mi caso yo quiero hacer lo siguiente:

 

1- Referencia del producto

2- Precio Neto del producto con Iva

3- Precio Sin Iva

4- Stock

 

Eso es lo que querría modificar, aunque sería genial tambien poder modificar el texto de mostrar cuando un articulo está disponible o sin stock.

 

Es posible por lo menos los 4 puntos que necesito hacer?

 

Gracias Pablo no sabes cuanto te lo agradezco, es el ultimo paso para abrir la web.

Link to comment
Share on other sites

1) ha funcionado?

 

2) con este programa tu modificas el precios de compra y precio de venta (ambos sin iva). pero el prestashop automaticamente te mostrará tambien el precio de venta con iva actualizado!

 

saludos

entonces podría valer para poner los nuevos precios sin iva, ya que el prestashop lo pondrá mas tarde, en ese aspecto genial.

 

Entonces como habrá que dejar el CSV si no quiero poner precio de mayorista?

 

Solo referencia del producto, precio y stock?

 

Gracias de antemano Pablo

 

PD: No me ha funcionado... el mismo error ;(

Edited by Informaticaelec.com (see edit history)
Link to comment
Share on other sites

  • 4 weeks later...

hola yo he modificado el siguiente script y funciona (no me responsabilizo)

 

 

<?php

 

// este php necesita en entrada un fichero update.csv con 4 campos

// Referencia producto; Precio Mayorista (costo); Stock; Precio de venta sin iva (PVP)

// los numero en formado ingles (ej 2.55)

// el programa funciona así:

// lee el fichero y accede a la base de datos con la REFERENCIA del producto y recupera la ID del producto

// actualiza stock, precio mayorista, precio de venta sin iva.

 

 

$dir = opendir('.'); //$dir = opendir('./updater');

echo "Conectamos a la bb.dd." . '<br>'; flush();

mysql_connect("dirección servidor", "xxxxxxx_bbdd", "password") or die(mysql_error());

mysql_select_db("nombre database") or die(mysql_error());

 

// Como la primera fila son los nombres de las columnas:

$fila = 1;

// Tenemos que actualizar en dos tablas:

$update_table = "ps_product inner join ps_stock_available on (ps_product.id_product =

 

ps_stock_available.id_product)";

//antes que nada, stock de todo a 0 para no tener descatalogados con stock:

mysql_query ("UPDATE $update_table SET ps_stock_available.quantity=0");

echo "Abrimos el fichero." . '<br>'; flush();

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

$falta = fopen("falta.txt", "w");

echo "Recorremos el CSV..." . '<br>'; flush();

while (($data = fgetcsv($handle, 0, ";")) !== FALSE) {

$num = count($data);

echo "<p>" . '<br>'; flush();

echo "( $fila )" . '<br>'; flush();

$fila++;

for ($c=0; $c < $num; $c++) {

if ($c = 1) { //Referencia producto

$reference = $data[($c - 1)];

 

$row = mysql_query("SELECT * FROM ps_product WHERE reference='$reference'") or die (mysql_error()); //

$existe = mysql_num_rows($row); //

 

 

if ($existe == 0) {fwrite ($falta, "La referencia $reference no existe en bb.dd." . PHP_EOL);} //

 

echo $reference . " - Referencia Producto" . '<br>'; flush();

$buscaid = mysql_query("SELECT id_product FROM ps_product WHERE reference='$reference'") or

 

die (mysql_error()); //

$id_product = mysql_result($buscaid, 0);

echo $id_product . " - Referencia Producto" . '<br>'; flush();

}

 

if ($c = 2) { //precio de compra

$compra = $data[($c - 1)];

mysql_query("UPDATE $update_table SET wholesale_price='$compra' WHERE reference='$reference'")

or die(mysql_error());

echo $compra . " - Coste actualizado tabla ps:_product" . '<br>'; flush();

 

mysql_query("UPDATE ps_product_shop SET wholesale_price='$compra' WHERE

 

id_product='$id_product'")

or die(mysql_error());

echo $compra . " - Coste actualizado tabla ps:_product_shop" . '<br>'; flush();

}

 

if ($c = 3) { //Precio PVP

$price = $data[($c - 1)];

mysql_query("UPDATE $update_table SET price='$price' WHERE reference='$reference'")

or die(mysql_error());

echo $price . " - PVP tabla ps_product actualizado" . '<br>'; flush();

mysql_query("UPDATE ps_product_shop SET price='$price' WHERE id_product='$id_product'")

or die(mysql_error());

echo $price . " - PVP tabla ps_product.shop actualizado" . '<br>'; flush();

}

 

if ($c = 4) { //Stock

$quantity = $data[($c - 1)];

mysql_query("UPDATE $update_table SET ps_stock_available.quantity='$quantity' WHERE

 

reference='$reference'")

or die(mysql_error());

echo $quantity . " - stock actualizado" . '<br>'; flush();

}

 

 

echo "_____________________________________________________<p>";

}

}

fclose($handle);

fclose($falta);

//mandamos el archivo por mail

# Leer el contenido del archivo

$archivo = file_get_contents("falta.txt");

# De quien

$nombre_from = 'Nombre de quien envia'; $email_from = "[email protected]";

# Para quien

$email_to = "[email protected]";

# Asunto

$asunto = "Articulos faltantes";

# Encabezado del E-mail

$header = "From: ".$nombre_from." <".$email_from.">\r\n";

# Envio del email

$ok = mail($email_to,$asunto,$archivo,$header);

# Si el email se envío, se imprime...

echo ($ok) ? "Enviado..." : "Falló el envío";

 

echo " <p>" . '<br>'; flush();

echo " - - - ACTUALIZACION COMPLETADA - - - <p>" . '<br>'; flush();

//Borro los archivos viejos para no tener problema al renombrar o descargar

//unlink('update.csv');

 

echo "Archivos temporales eliminados" . '<br>'; flush();

echo "Todo hecho" . '<br>'; flush();

?>

 

Modulo estupendo , ¿pero habría la posibilidad de que este escript se ejecutase solo todos los dias dos veces? De esa manera mantendría el stock de la tienda fisica con el de la web actualizado sin necesidad de tener que estar ejecutando el escript , un saludo y gracias

Link to comment
Share on other sites

Hola buenos dias he encontrado este tema, estoy interesado en aprender sobre esto y poder hacerlo realidad...

Quisiera pedir su ayuda para hacerlo bien... entonces acorde a lo que leo aqui intento hacer lo que indican...

 

1. Crear un Archivo (lo he hecho con Notepad++) y lo he llamado Actualizar.php

Con el siguiente Codigo

 

<?php

 

// este php necesita en entrada un fichero update.csv con 4 campos

// Referencia producto; Precio Mayorista (costo); Stock; Precio de venta sin iva (PVP)

// los numero en formado ingles (ej 2.55)

// el programa funciona así:

// lee el fichero y accede a la base de datos con la REFERENCIA del producto y recupera la ID del producto

// actualiza stock, precio mayorista, precio de venta sin iva.

 

 

$dir = opendir('.'); //$dir = opendir('./updater');

echo "Conectamos a la bb.dd." . '<br>'; flush();

mysql_connect("dirección servidor", "xxxxxxx_bbdd", "password") or die(mysql_error());

mysql_select_db("nombre database") or die(mysql_error());

 

// Como la primera fila son los nombres de las columnas:

$fila = 1;

// Tenemos que actualizar en dos tablas:

$update_table = "ps_product inner join ps_stock_available on (ps_product.id_product =

 

ps_stock_available.id_product)";

//antes que nada, stock de todo a 0 para no tener descatalogados con stock:

mysql_query ("UPDATE $update_table SET ps_stock_available.quantity=0");

echo "Abrimos el fichero." . '<br>'; flush();

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

$falta = fopen("falta.txt", "w");

echo "Recorremos el CSV..." . '<br>'; flush();

while (($data = fgetcsv($handle, 0, ";")) !== FALSE) {

$num = count($data);

echo "<p>" . '<br>'; flush();

echo "( $fila )" . '<br>'; flush();

$fila++;

for ($c=0; $c < $num; $c++) {

if ($c = 1) { //Referencia producto

$reference = $data[($c - 1)];

 

$row = mysql_query("SELECT * FROM ps_product WHERE reference='$reference'") or die (mysql_error()); //

$existe = mysql_num_rows($row); //

 

 

if ($existe == 0) {fwrite ($falta, "La referencia $reference no existe en bb.dd." . PHP_EOL);} //

 

echo $reference . " - Referencia Producto" . '<br>'; flush();

$buscaid = mysql_query("SELECT id_product FROM ps_product WHERE reference='$reference'") or

 

die (mysql_error()); //

$id_product = mysql_result($buscaid, 0);

echo $id_product . " - Referencia Producto" . '<br>'; flush();

}

 

if ($c = 2) { //precio de compra

$compra = $data[($c - 1)];

mysql_query("UPDATE $update_table SET wholesale_price='$compra' WHERE reference='$reference'")

or die(mysql_error());

echo $compra . " - Coste actualizado tabla ps:_product" . '<br>'; flush();

 

mysql_query("UPDATE ps_product_shop SET wholesale_price='$compra' WHERE

 

id_product='$id_product'")

or die(mysql_error());

echo $compra . " - Coste actualizado tabla ps:_product_shop" . '<br>'; flush();

}

 

if ($c = 3) { //Precio PVP

$price = $data[($c - 1)];

mysql_query("UPDATE $update_table SET price='$price' WHERE reference='$reference'")

or die(mysql_error());

echo $price . " - PVP tabla ps_product actualizado" . '<br>'; flush();

mysql_query("UPDATE ps_product_shop SET price='$price' WHERE id_product='$id_product'")

or die(mysql_error());

echo $price . " - PVP tabla ps_product.shop actualizado" . '<br>'; flush();

}

 

if ($c = 4) { //Stock

$quantity = $data[($c - 1)];

mysql_query("UPDATE $update_table SET ps_stock_available.quantity='$quantity' WHERE

 

reference='$reference'")

or die(mysql_error());

echo $quantity . " - stock actualizado" . '<br>'; flush();

}

 

 

echo "_____________________________________________________<p>";

}

}

fclose($handle);

fclose($falta);

//mandamos el archivo por mail

# Leer el contenido del archivo

$archivo = file_get_contents("falta.txt");

# De quien

$nombre_from = 'Nombre de quien envia'; $email_from = "[email protected]";

# Para quien

$email_to = "[email protected]";

# Asunto

$asunto = "Articulos faltantes";

# Encabezado del E-mail

$header = "From: ".$nombre_from." <".$email_from.">\r\n";

# Envio del email

$ok = mail($email_to,$asunto,$archivo,$header);

# Si el email se envío, se imprime...

echo ($ok) ? "Enviado..." : "Falló el envío";

 

echo " <p>" . '<br>'; flush();

echo " - - - ACTUALIZACION COMPLETADA - - - <p>" . '<br>'; flush();

//Borro los archivos viejos para no tener problema al renombrar o descargar

//unlink('update.csv');

 

echo "Archivos temporales eliminados" . '<br>'; flush();

echo "Todo hecho" . '<br>'; flush();

?>

 

En este espacio entiendo que deberia poner los datos del sitio en el que trabajo (cambios en rojo)

 

$dir = opendir('.'); //$dir = opendir('./updater');

echo "Conectamos a la bb.dd." . '<br>'; flush();

mysql_connect("http://americas.gratishosting.cl/", "xxxxxxx_bbdd", "12345qwerty") or die(mysql_error());

mysql_select_db("grati_13156476_Americas") or die(mysql_error());

 

Esto es correcto ? he colocado los cambios bien de la informacion ?

 

2. Luego he creado otro archivo llamado Update.csv (En notepad regular)

con la siguiente informacion

FNEONO4;0.000000;5.000000;470.000000

FNEONG4;0.000000;10.000000;470.000000

 

FNEONO4 <--- Codigo/Referencia

0.000000 <--- Precio Mayorista (no tengo por eso 0)

5.000000 <--- Stock

470.000000 <--- Precio PvP

 

Entonces he subido ambos archivos en htdocs/ (he subido los archivos a la carpeta correcta ?)

 

Al intentar abrir http://americas.gratishosting.cl/Actualizar.php post-570993-0-12267300-1370102796_thumb.jpg

 

Porfavor Solicito su ayuda seguramente he cometido algun error colocando la informacion o siguiendo los pasos espero puedan ayudarme.

 

Saludos y Gracias

Link to comment
Share on other sites

Hola a todos,

Gracias por el aporte, va de lujo, lo unico que le veo es que no actualiza las referencias de cada combinacion.

Mi ejemplo es una tienda de gafas y cada modelo de gafa tiene mas o menos 3 o 4 tallas, cada talla con su referencia (el modelo en si tiene una referencia mas corta), el script va de lujo para los modelos que no tienen tallas diferentes, es decir que no tienen otras combinaciones, por que si le pongo en la columna la referencia de la combinacion dice que no encuentra la fila...

 

salu2

Link to comment
Share on other sites

  • 3 weeks later...

Hola a todos,

Gracias por tu post Pablo, he probado la consulta del UPDATE en la base de datos MySQL de Prestashop, y lo que es relacionar las dos tablas mediante el INNER JOIN no me lo realiza dado que no actualiza ningun dato. Mi Prestashop es el 1.5.4.1 Si puedes aclararme un poco como funciona las consultas y actualizaciones de este script te estaría muy agradecido.

 

Un saludo. Pedro.

Link to comment
Share on other sites

Bueno yo también estuve días pensando en una solución para actualizar el precio y el stock en presta shop y trabajar con CSV no me pareció muy seguro en cuanto a la errores de importación, por otro lado una solución a nivel de programador no parecía ser razonable para un cliente final. Así que analice las tablas de productos y desdí desarrollarme un aplicativo, que sea seguro y de fácil uso para poder actualizar el stock y precio.

 

updateprestashopjpg.jpg

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

Es cierto que tienes que codificar y manipular la base de datos, pero para un operador de PC, ellos no deben saber estos temas, es mejor para ellos que una solución.

 

It is true that you have to encode and manipulate the database, but for a PC operator, they should not know these issues, it is better for them than a solution.

Link to comment
Share on other sites

Hola a todos ante todo comentar que veo que aquí en el foro habéis miembros con mucho nivel, yo acabo de empezar con la tienda de prestashop 1.5.4.1 apenas tengo conocimientos de informática mas que como usuario y me cuesta mucho trabajo entender lo que ponéis en el foro hasta el punto de que no se por donde meterle mano, lo poco que se lo he aprendido en plan autodidacta he estado leyendo muchos tutoriales de los que los miembros del foro han ido haciendo para conseguir que mi tienda este en funcionamiento, dispongo de aproximadamente unos 700 productos que he insertado manualmente uno a uno con sus correspondientes fotos y combinaciones de tallas en el caso de la ropa.

Ahora me veo impotente para gestionar los stocks y los precios de la tienda, el proveedor que me sirve me facilita diferentes archivos en varios formatos .txt, .mdb, .xml, .csv, .jpg, .flv, .swf,con datos de stock, productos descatalogados, precios, etc.

Pero yo he intentando meterlos en prestashop y me da siempre error, agradecería que si alguien de los presentes a conseguido poder solucionar estos problemas o como he leído a conseguido hacer algún programa que facilite este asunto, lo pusiese a disposición de los miembros, con un tutorial para gente inexperta como yo, que nos hemos embarcado en este tema para salir adelante en estos tiempos difíciles que corren.

Gracias.

Link to comment
Share on other sites

Hola mch46025, me llamo Hugo Bonilla de www.2aswebperu.com.

me podrias enviar tu correo.

Estoy desarrollando un programa para esta funcionalidad y me esta dando resultado, es un entorno desktop y maneja los acceso a la base de datos más algunos registros en el server y DB.

 

Aquí los datos:

http://guiachimbote....Inversiones.air

user: [email protected]

pass: 123456789

Archivo a subir: http://guiachimbote....a/productos.xls

 

y la tienda de prueba donde actualiza es http://guiachimbote.com/tienda/

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

Guest
This topic is now closed to further replies.
×
×
  • Create New...