Jump to content

Hora feliz


erty2288

Recommended Posts

Hola buenas tardes.

Alguien sabe si existe manera aunque sea "casera" de poder aplicar una descuento a unos productos en una franja de horas determinada?? Porque prestashop da opcion pero solo en periodos de dias, yo quiero unas horas determinadas, todos los dias.

Un saludo y gracias.

Link to comment
Share on other sites

hola saludos, pudieras crear un script php que se ejecute  todos los dias (cronjobs / tarea programada) por ejemplo a las 4pm de la tarde para activar un descuento que tu crearas con prestashop (no importa que sea de N dias)  y a las 5 de la tarde vuelve a ejecutar el script para desactivar dicho descuento

 

script de las 4pm

 UPDATE PS_CART_RULE set active = 1 WHERE id_cart_rule = 1;  (  en este caso asumimos que el id 1 es para la regla de descuento que acabas de generar)

script de las 4pm

 UPDATE PS_CART_RULE set active = 0  WHERE id_cart_rule = 1;  (  en este caso asumimos que el id 1 es para la regla de descuento que acabas de generar)

esa seria una solucion "CASERA"  para romper con la limitante de que el calendario cuandop creas la regla de descuento es por dia.

 

saludos y cualquier duda estamos a la orden !

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

Perfecto, lo voy a hacer así.

Y otra cosa ya que estamos de las tareas programadas; mi servidor no me permite crear cronjobs mas que dos al día y actualmente necesitaba mas pues abro y cierro la tienda varias veces al día ( es un restaurante de comida a domicilio). Entonces tuve que crear tareas programadas en windows y así voy funcionando. Pero se me ocurrió pensar que igual en internet hubiera algún sitio en donde dieran ese servicio de ejecutar tareas. No se si estoy diciendo tonterías, o si os suena que existiera algo así.

Un saludo y muchas gracias por la solución, cuando lo pruebe daré el tema por solucionado.

Link to comment
Share on other sites

Hola otra vez Apositivo. 

He estado mirando como hacerlo, y la manera perfecta para aplicar el descuento que quiero, es crear una "regla de catalogo" especificando que quiero que se aplique un descuento porcentual en una categoria entera de productos. Programo un inicio y un fin, y ya lo tengo hecho.

Como las reglas de descuento no se pueden activar y desactivar, cuando quiero que la regla este activa, en la fecha de fin pongo una fecha futura, p.e. 2025-03-25 00:00:00, y cuando quiero que no este activa modifico dicha fecha a una pasada, p.e 2015-03-25 00:00:00.

Ahora solo me queda programar un scrip como tu me has mencionado para modificar la fecha de fin de esa regla automaticamente.

El php que he creado es este:

 

<?
$hostname="XXXX.com";
$username="XXXX_tienda";
$password="XXXXXX";
$dbname="XXXXXX_tienda";
//Connect to the database
$connection = mysql_connect($hostname, $username, $password) or die(mysql_error());
mysql_select_db($dbname, $connection)or die(mysql_error()) ;
 
//Setup our query
$query = "UPDATE `ps_specific_price_rule` SET `to` = 2015-03-25 00:00:00 where `id_specific_price_rule` = `5`;";
 
//Run the Query
$result = mysql_query($query);
?>
 
Pero no consigo que funcione al ejecutarlo.
Donde puede estar el error???
Un saludo y muchas gracias por tu ayuda.
Edited by erty2288 (see edit history)
Link to comment
Share on other sites

hola erty2288 saludos.   muy bien lo de las fechas !

 

el query lo tienes errado, te recomiendo siempre usar algun gestor como mysql workbench o navicat para validar los querys antes de copiarlos dentro de php

 

en tu query tienes

$query = "UPDATE `ps_specific_price_rule` SET `to` = 2015-03-25 00:00:00 where `id_specific_price_rule` = `5`;";

ERRORES:

 

 1 - tienes el campo de fecha sin las comillas..,  lo recomendado es    '2015-03-25 00:00:00'

 

 2 - tienes where `id_specific_price_rule` = `5` , de esa manera (con este caracter ` ` ) MYSQL interpreta el 5 como un  campo y no como un valor a asignar/comparar ,  alli tienes    2 opciones, puedes usar o no las comillas para el  5

 

se vale (sin comillas ) --->>  where `id_specific_price_rule` = '5';  o tambien   where `id_specific_price_rule` = 5;

 

aqui tienes los querys de manera valida

UPDATE `ps_specific_price_rule` SET `to` = '2015-03-25 00:00:00' where `id_specific_price_rule` = '5';

o

UPDATE `ps_specific_price_rule` SET `to` = '2015-03-25 00:00:00' where `id_specific_price_rule` = 5;
Link to comment
Share on other sites

Muchas gracias por la explicación apositivo.

Funciona perfectamente, es decir cambia la fecha "to", pero ahora me sucede otra cosa. Me meto en la base de datos una vez ejecutado el php, y efectivamente se ha modificado la fecha. Me meto igualmente en el back office y también esta la fecha modificada en la regla de descuento del catalogo, pero en la tienda no surte efecto los cambios y no se ve la reducción de precio aplicada. Para que surta efecto, tengo que meterme en la regla de catalogo en el back office y simplemente darle a guardar ( sin hacer nada mas pues la fecha ya se había cambiado con el php) así una vez que guarda, refresco la pagina de la tienda y ya aparece el descuento en los productos.

De igual manera al ejecutar el archivo php para "quitar" la oferta; cambia la fecha en la base de datos y en el back office pero hasta que no abro la regla de catalogo y la guardo (en el back) no surte efecto y se siguen viendo los productos ofertados en la tienda.

Igual es algo del rendimiento de la tienda, de cache o algo así???!!!

Un saludo y gracias de nuevo.

Link to comment
Share on other sites

hola erty2288, saludos,  claro el detalle ocurre por que las reglas no tienen un campo de ACTIVE donde se pudiera colocar en 1 o 0 para activarlas o desactivarlas.

 

si miras, cuando llegas a las reglas solo tienes 2 opciones MODIFICAR o ELIMINAR.

 

en ese caso seria un poco mas complejo el script perono dificil.

 

a ver.. te doy una idea..   escenario 1, tienes un sola regla en la tabla  ps_specific_price_rule ,,, supongamos que es la id_specific_price_rule la cual tiene el id 1

 

la logica seria que en el script 1 se ejecute el borrado de  esa regla y todo lo asociado a esa regla que estan enlazados con las tablas  ps_specific_price_rule_condition  y ps_specific_price_rule_condition_group

 

en el script 2 se ejecute un INSERT para esas 3 tablas....

 

una aproximación del script 1  seria

<?

$hostname="XXXX.com";
$username="XXXX_tienda";
$password="XXXXXX";
$dbname="XXXXXX_tienda";
//Connect to the database
$connection = mysql_connect($hostname, $username, $password) or die(mysql_error());
mysql_select_db($dbname, $connection)or die(mysql_error()) ;


//Setup our query
$query = "  SELECT id_specific_price_rule  FROM  ps_specific_price_rule";
/Run the Query
$result = mysql_query($query);
$id_a_borrar = mysql_fetch_row($result);


//-----borrar ese id en las tablas relacionadas
 CON ESE ID vas a la tabla  ps_specific_price_rule_condition_group , obtienes los id_specific_price_rule

realizas otro ciclo y con cada id_specific_price_rule vas a la tabla ps_specific_price_rule_condition y los borras
y luego de finalizado el ciclo  borras  ese id de la tabla  ps_specific_price_rule_condition_group

?>
 
el scrpit 2 empezaria con una insert en la tabla
ps_specific_price_rule , y obtienes con last_insert_id  ese id insertado y es el que vas a ir insertando en las otras 2 tablas
 
logicamente debes conocer los valores que vas a insertar en las tablas si tu regla de descuento es por categorias por ejemplo.
 
ahora si tu regla de descuento es para toda la tienda el script se hace 10 veces mas facil.
 
te lo explique de esa manera por que tengo varios descuentos para varias categorias.
 
si colocas una imagen de tus tablas
ps_specific_price_rule
ps_specific_price_rule_condition
ps_specific_price_rule_condition_group
 
y me detallas si tienes un descuento para toda la tienda y no por categoria te puedo ayudar mejor.
 
 
saludos y disculpa lo extenso jejeje
Link to comment
Share on other sites

Hola apositivo. Gracias por tu mensaje pero no he acabado de entender el procedimiento, bueno mas bien como llevarlo a cabo.

Lo que tengo son 3 reglas para tres grupos distintos de productos aunque el descuento seria igual para las tres y ademas a las mismas horas.

Adjunto subo fotos de las tres tablas tal y como me has comentado a ver si me puedes ir guiando en el proceso...

Muchas gracias.

 

 

post-882921-0-06244700-1430072832_thumb.png

post-882921-0-34870600-1430072838_thumb.png

post-882921-0-11346800-1430072846_thumb.png

Link to comment
Share on other sites

hola, erty2288, saludos.

 

script 1 a ejecutar  < DESABILITAR todas las reglas >

$hostname="";
$username="";
$password="";
$dbname="";

$connection = mysql_connect($hostname, $username, $password) or die(mysql_error());
mysql_select_db($dbname, $connection)or die(mysql_error()) ;
 

$query = "SELECT id_specific_price_rule FROM ps_specific_price_rule";
$result = mysql_query($query);

 while($row=mysql_fetch_array($result))
 {
     $query2 = "DELETE ps_specific_price_rule_condition , ps_specific_price_rule_condition_group
FROM ps_specific_price_rule_condition
INNER JOIN ps_specific_price_rule_condition_group
WHERE ps_specific_price_rule_condition.id_specific_price_rule_condition_group = ps_specific_price_rule_condition_group.id_specific_price_rule_condition_group
AND ps_specific_price_rule_condition_group.id_specific_price_rule = ".$row['id_specific_price_rule']."";
mysql_query($query2);
$query3 = "DELETE FROM ps_specific_price_rule WHERE id_specific_price_rule = ".$row['id_specific_price_rule']."";
mysql_query($query3);


}
$array = array("ps_specific_price_rule","ps_specific_price_rule_condition", "ps_specific_price_rule_condition_group");

foreach($array as $name)
 {
     $query4 = "ALTER TABLE ".$name." AUTO_INCREMENT = 1";
     mysql_query($query4) or die ("Couldn't change table".mysql_error());
     }

script 2 a ejecutar <HABILITA TODAS LAS REGLAS>

$hostname="";
$username="";
$password="";
$dbname="";
$connection = mysql_connect($hostname, $username, $password) or die(mysql_error());
mysql_select_db($dbname, $connection)or die(mysql_error()) ;

 $arrayreglas = array
 (
    array("clasica",1,0,0,0,1,-1,20,"percentage","2015-04-01 00:00:00","2014-03-25 00:00:00"),
    array("fina",1,0,0,0,1,-1,20,"percentage","2015-04-24 00:00:00","2014-03-25 00:00:00"),
    array("celiacos",1,0,0,0,1,-1,20,"percentage","2015-04-25 00:00:00","2014-03-25 00:00:00")
);

 $arrayConditionGroup = array(36,14,15);

foreach($arrayreglas as $reglas)
 {
     $values = "";
     foreach($reglas as $elemento)
         {
            
             $values.= "'$elemento',";
         }
         $values = trim($values, ',');
         $query1 ="INSERT INTO ps_specific_price_rule (`name`,`id_shop`,`id_currency`,`id_country`,`id_group`,`from_quantity`,`price`,`reduction`,`reduction_type`,`from`,`to`) VALUES ($values)";
            mysql_query($query1) or mysql_error();
            $id_specific_price_rule = mysql_insert_id();
        
$query2 ="INSERT INTO ps_specific_price_rule_condition_group (`id_specific_price_rule`) VALUES ($id_specific_price_rule)";
            mysql_query($query2) or mysql_error();
            $id_specific_price_rule_condition_group = mysql_insert_id();
            
            $query3 ="INSERT INTO ps_specific_price_rule_condition (`id_specific_price_rule_condition_group`,`type`, `value`) VALUES ($id_specific_price_rule_condition_group, 'category',".$arrayConditionGroup[$id_specific_price_rule-1].")";
            mysql_query($query3) or mysql_error();

 }

saludos !  espero haberte ayudado. . .

 

cualquier cosa estoy a la orden por whatsapp o skype !

Link to comment
Share on other sites

Hola apositivo. Muchisimas gracias por los script,

Si, efectivamente permite colocar minutos, pero siempre para delimitar una hora concreta de principio y fin de la regla, pero dentro de un día, es decir, p.e desde hoy a las 11:00 hasta pasado mañana a las 16:00, pero no te da la opción de que esa regla se ejecute p.e todos los dia de 11:00 a 16:00, no se si me explico. Puedes delimitar un periodo de tiempo con horas y minutos, pero de un día a otro, una vez cumpla ese día, se caduca la regla y debes ponerla de nuevo.

Mi versión de prestashop es la 1.6.0.9, y si no me equivoco así son las opciones que te permite en cuanto a las reglas de catalogo.

Voy a probar los scipt que me has mandado y te comento.

Muchas gracias de nuevo.

Link to comment
Share on other sites

Bueno, acabo de probar los script y funcionan de lujo, pero prestashop sigue haciendo lo mismo. Las reglas no surten efecto hasta que entro en el back office y me meto una por una en las reglas (que si que aparecen pues en la base de datos estan creadas) y las guardo desde ahi. Sino aunque el script cree las reglas bien, prestashop no las ejecuta en la tienda hasta que no se entra por el back y se abre cada una de ellas dandole a modificar y simplemente se guardan los cambios (aunque no se haga ninguno pues la regla esta ya creada con el script).

Es como si prestashop al abrir la regla por el back y guardar los cambios, entonces diera la orden de ejecutarla y no simplemente cuando las reglas estan creada en las tablas de la base de datos... Tiene que ser algo asi como refrescar la tienda con respecto a la base de datos...

Alguna idea???

Link to comment
Share on other sites

Hola apositivo. Muchisimas gracias por los script,

Si, efectivamente permite colocar minutos, pero siempre para delimitar una hora concreta de principio y fin de la regla, pero dentro de un día, es decir, p.e desde hoy a las 11:00 hasta pasado mañana a las 16:00, pero no te da la opción de que esa regla se ejecute p.e todos los dia de 11:00 a 16:00, no se si me explico. Puedes delimitar un periodo de tiempo con horas y minutos, pero de un día a otro, una vez cumpla ese día, se caduca la regla y debes ponerla de nuevo.

Mi versión de prestashop es la 1.6.0.9, y si no me equivoco así son las opciones que te permite en cuanto a las reglas de catalogo.

Voy a probar los scipt que me has mandado y te comento.

Muchas gracias de nuevo.

 

hola amigo , saludos. comprendo, tienes razon, quieres es que ejecute todos los dias en una hora determinada !

 

entonces si es necesario el script !

Link to comment
Share on other sites

Bueno, acabo de probar los script y funcionan de lujo, pero prestashop sigue haciendo lo mismo. Las reglas no surten efecto hasta que entro en el back office y me meto una por una en las reglas (que si que aparecen pues en la base de datos estan creadas) y las guardo desde ahi. Sino aunque el script cree las reglas bien, prestashop no las ejecuta en la tienda hasta que no se entra por el back y se abre cada una de ellas dandole a modificar y simplemente se guardan los cambios (aunque no se haga ninguno pues la regla esta ya creada con el script).

Es como si prestashop al abrir la regla por el back y guardar los cambios, entonces diera la orden de ejecutarla y no simplemente cuando las reglas estan creada en las tablas de la base de datos... Tiene que ser algo asi como refrescar la tienda con respecto a la base de datos...

Alguna idea???

 

 

que extraño, si ejecutas el primer script no tiene sentido que siga funcionando ya que no existe datos en las tablas.

 

pareciera problemas de cache.

 

revisa como tienes configurado Preferencias / Rendimiento

 

Cache de plantillas / Nunca recompilar los archivos de las plantillas

Cache NO

 

 

adicional presionas CTRL + F5  en tu navegador o inicias una nueva navegacion privada

post-341341-0-65206900-1430133707_thumb.jpg

Link to comment
Share on other sites

Hola apositivo. Pues la verdad es que parece un fenómeno paranormal porque como tu dices, cuando ejecuto el script de borrar todo, en las tablas no hay datos, incluso en el back office tampoco, pero se sigue viendo el descuento en los productos a los que hacia alusión la regla. Es mas, si elimino las reglas por medio del script, luego me es imposible hacer que no aparezca el descuento en los productos porque no tengo de donde borrarlos (la tabla del back office esta vacia), asi que tengo que crearlos otra vez con el segundo scrpt y borrarlos desde el back. Es una cosa super extraña, como si aun estuvieran esos datos en alguna otra tabla...

El cache lo tengo NO y en nunca recompilar los archivos de las plantillas...

No se que puede ser, la verdad.

Link to comment
Share on other sites

Hola apositivo. Pues la verdad es que otra explicacion no encuentro...

Modulos de descuentos no tengo ninguno instalado y reglas de compra y de catalogo, tengo las que estamos intentando configurar de esta manera. Lo que si que me he dado cuenta es de que debe de existir alguna otra tabla en la B.D. en donde se queden registrados datos al respecto de las reglas de descuento que se van creando, porque por ejemplo hemos creado un total de 10 reglas de descuento desde que instalamos prestashop, y las borramos las 10, en las tablas y en back office no hay nada al respecto pues las hemos borrado. Pues si creamos una nueva, automaticamente se le asigna el numero 11 a esa nueva regla de descuento, es decir, de algun sitio prestashop tiene que sacar la informacion de que ha habido un total de 10 reglas antes, y que la siguiente tiene que ser la 11. Es por eso por lo que creo que si se crean o se borran reglas directamente desde las tablas de la B.D. no surten efecto en la tienda aunque en el back office aparezca la modificacion, porque sigue encontrando informacion antigua en ese sitio.

Voy a seguir investigando, sino tendre que amoldarme creando vales de descuento que esos si que se pueden activar y desactivar directamente desde la B.D. con un script y surten efecto al instante en la tienda.

Un saludo y muchas gracias por tu tiempo.

 

Se me olvido comentar que mi version es la 1.6.0.9

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

hemos creado un total de 10 reglas de descuento desde que instalamos prestashop, y las borramos las 10, en las tablas y en back office no hay nada al respecto pues las hemos borrado. Pues si creamos una nueva, automaticamente se le asigna el numero 11 a esa nueva regla de descuento, es decir, de algun sitio prestashop tiene que sacar la informacion de que ha habido un total de 10 reglas antes, y que la siguiente tiene que ser la 11.

 

 

eso ocurre por que en la definicion de ese campo  en la BD es AUTOINCREMENT , el siguiente que se inserta es  uno mas con respecto a la ultima inserccion , asi borres todos los registros.

 

para reiniciar este valor en 1  lo puedes hacer con la senetencia alter tablet o con truncate

Link to comment
Share on other sites

Voy a seguir investigando, sino tendre que amoldarme creando vales de descuento que esos si que se pueden activar y desactivar directamente desde la B.D. con un script y surten efecto al instante en la tienda.

 

 

wow si no te queda de otra ni modo, pero no es la idea, la idea es que te funcione bien lo que quieres ;)

 

bueno, cualquier detalle mis servicios profesionales estan a la orden !

Link to comment
Share on other sites

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