JoZu Posted September 17, 2014 Share Posted September 17, 2014 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 More sharing options...
JoZu Posted September 17, 2014 Author Share Posted September 17, 2014 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 More sharing options...
galindogadea Posted September 17, 2014 Share Posted September 17, 2014 (edited) 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 September 17, 2014 by galindogadea (see edit history) Link to comment Share on other sites More sharing options...
JoZu Posted September 17, 2014 Author Share Posted September 17, 2014 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 More sharing options...
JoZu Posted September 18, 2014 Author Share Posted September 18, 2014 Se que el tema es antiguo, pero: Poniendo esta opcion, me ha servido a mi: ¿codificación iso-8859-1 de archivo? = Y Link to comment Share on other sites More sharing options...
olgadrom Posted November 3, 2015 Share Posted November 3, 2015 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 More sharing options...
ken-bcn Posted December 18, 2015 Share Posted December 18, 2015 (edited) Gracias por el aporte! Te funciona? Lo digo por que no declaras la variable $product_quantity Cosmetica Natural Edited September 18, 2018 by ken-bcn (see edit history) Link to comment Share on other sites More sharing options...
Dafne Posted January 21, 2016 Share Posted January 21, 2016 (edited) 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 January 21, 2016 by Dafne (see edit history) Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now