Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   PHP (http://www.forosdelweb.com/f18/)
-   -   repetir un registro en base a una fecha delimitada. (http://www.forosdelweb.com/f18/repetir-registro-base-fecha-delimitada-665559/)

jetzona 23/01/2009 13:31

repetir un registro en base a una fecha delimitada.
 
estimados en simples palabras tengo un gran dilema, les cuento: me en cuentro desarrollando una aplicacion, en la cual debo repetir un registro en el tiempo, esto aplicando una periocidad a dicho registro, si no se en tiende lo explicare con ejemplos:
registro 1
menu1 : arroz con pollo
menu2 : ravioles
menu3 : vegeterariano

en la parte que corresponde a la periocidad debo repetir dicho registro en el tiempo
tengo una fecha de inicio, fecha de termino, la cantidad de semanas a repetir, y los dias en los que se repetira

para el menu 1

fech_ inicio : 2008-01-23
cant_semanas: 3
fecha de termino:2008-02-13
dias en que se repetira: lunes - jueves(de lunes a jueves)


como repetir este registro o cualquier otro durante tres semanas y solo de lunes a jueves?????

a proposito dentro de los dias de repeticion a corde a las necesidades mias son:

lunes a jueves
viernes
sabados
domingos

estos varian acorde a mis afluencias de publico, sin desbiarme del tema principal,
alguna idea de como hacer esto????

Triby 23/01/2009 14:16

Respuesta: repetir un registro en base a una fecha delimitada.
 
No necesitas repetir el registro, solamente recuperarlo en las fechas y dias indicados.

Para esto, tal vez necesites crear un campo para cada dia de la semana o guardar los dias con algun tipo de codificacion, yo me inclino mas por la segunda opcion, ya que es mas facil comprobar con 1 solo campo. Ejemplo, puesto que los valores son de 0 (domingo) a 6 (sabado) puedes separarlos por comas.

"1,2,3,4" En esta cadena estan los numeros correspondientes para lunes a jueves.

Tu codigo PHP seria:
Código PHP:

// 1- Detecta la fecha actual y el dia de la semana
$hoy time();
$dia intval(date('w'$hoy));

// 2- Genera la fecha de comparacion de acuerdo al formato en que las guardas en tu base de datos
// Yo uso timestamp para las fechas y no se si esto sea suficiente:
$hoy_sql date('Y-m-d'$hoy);

// 3- Lee el menu del dia, obteniendo solo lo que este dentro de los rangos permitidos:
$query "SELECT FROM f.*, m.* FROM menu m, fechas f WHERE f.fech_inicio => $hoy_sql AND f.fech_termino <= $hoy_sql AND f.dias LIKE '%$dia%' AND m.id = f.id"

Edito: estoy suponiendo que usas dos tablas, de cualquier forma, solo adapta el codigo a tus necesidades.

jetzona 26/01/2009 07:27

Respuesta: repetir un registro en base a una fecha delimitada.
 
no, no me explique bien, paso a aexpicar con lujo de detalles, me encuentro relaizando un sistema de venta de pasajes, y resulta que una ves creeadas las planillas de horarios para los buses, existen muchas de estas que se repetin durante lagunos dias e incluso se mantienen durante semanas es por eso la nececidad de crear una periocidad, para estas que significa INSERTAR NUEVAMENTE LOS REGISTROS de las planillas ya creadas, pero modificando acorde a las nuevas fechas., la periocidad diaria es facil ya que son dias de corrido, pero la periocidad semanal no lo es, ya que aca existen algunas limitantes, por ejemplo repetir una planilla durante 4 semanas, pero solo de lunes a jueves, o repetir esta palnilla por 4 semanas pero solo lpos viernes o solo los sabados, pondre el codigo completo para ves si me pueden ayudar.

Código PHP:

    $flag $_POST['bandera'];//ESTE ES UN MARCADOR
    
if ($flag == "diaria"){
        
//HAGO LA PERIOCIDAD DIARIA SIMILAR A LA SEMANAL ACA ABAJO SOLO SUMO UN DIA EN VES DE UNA SEMANA
    
}//cierre if2
    
else{
        
$indice3 $_POST['semanas'];
        
$f_mov date('Y-m-d',strtotime ($_POST['fecha_inicio']));
        for (
$indice 1$indice <= $indice3$indice++){
            
$horario $_POST['horario'];
            
$hr_time explode(":"$horario);
                  
$insertSQL sprintf("INSERT INTO planillas (origen_c, ori, id_origen, destino_c, des, id_destino, horario, hr_hr, hr_min, hrdescripcion, fecha, id_ruta, desc_ruta, unidad_zn, tipo_serv, configuracion, status, cadena, dominio, n_asientos, bano) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)",
                                       
GetSQLValueString($_POST['origen_c'], "text"),
                                       
GetSQLValueString($_POST['ori'], "text"),
                                       
GetSQLValueString($_POST['id_origen'], "text"),
                                       
GetSQLValueString($_POST['destino_c'], "text"),
                                       
GetSQLValueString($_POST['des'], "text"),
                                       
GetSQLValueString($_POST['id_destino'], "text"),
                                       
GetSQLValueString($_POST['horario'], "text"),
                                       
GetSQLValueString($hr_time[0], "text"),
                                       
GetSQLValueString($hr_time[1], "text"),
                                       
GetSQLValueString($_POST['hrdescripcion'], "text"),
                                       
GetSQLValueString($f_mov"date"),
                                       
GetSQLValueString($_POST['id_ruta'], "int"),
                                       
GetSQLValueString($_POST['desc_ruta'], "text"),
                                       
GetSQLValueString($_POST['unidad_zn'], "text"),
                                       
GetSQLValueString($_POST['tipo_serv'], "text"),
                                       
GetSQLValueString($_POST['configuracion'], "text"),
                                       
GetSQLValueString($_POST['status'], "text"),
                                       
GetSQLValueString($_POST['cadena'], "int"),
                                       
GetSQLValueString($_POST['dominio'], "text"),
                                       
GetSQLValueString($_POST['n_asientos'], "int"),
                                       
GetSQLValueString($_POST['bano'], "text"));
                
                  
mysql_select_db($database_lfox3$lfox3);
                  
$Result1 mysql_query($insertSQL$lfox3) or die(mysql_error());
                
//rescato el idnum insertado
                  
$colname_rs1mysql_insert_id();
                
//actualizo el campo cadena    
                  
$updateSQL sprintf("UPDATE planillas SET cadena=%s WHERE idnum=%s",
                                           
GetSQLValueString($colname_rs1"int"),
                                           
GetSQLValueString($colname_rs1"int"));
                  
mysql_select_db($database_lfox3$lfox3);
                  
$Result2 mysql_query($updateSQL$lfox3) or die(mysql_error());
                
                
//rescato los intermedios de la ruta
                    
$id_ruta $_POST['id_ruta'];
                    
mysql_select_db($database_SFox3$SFox3);
                    
$query_rs4 sprintf("select fox3.rutas_det.id_ruta, fox3.rutas_det.cod_of, fox3.rutas_det.agencia, fox3.rutas_det.agencia_c, fox3.distancias.ciudad, fox3.distancias.km, fox3.distancias.tiempo_hr, fox3.distancias.tiempo_min from fox3.rutas_det, fox3.distancias where ((fox3.rutas_det.cod_of = fox3.distancias.cod_of2) and (fox3.rutas_det.cod_origen = fox3.distancias.cod_of1) and (fox3.rutas_det.id_ruta = %s)) order by fox3.distancias.km asc"$id_ruta);
                    
$rs4 mysql_query($query_rs4$SFox3) or die(mysql_error());
                    
$row_rs4 mysql_fetch_assoc($rs4);
                    
$totalRows_rs4 mysql_num_rows($rs4);
                
//while ($row_rs4 = mysql_fetch_assoc($rs4)){ // gererar ciclo de insert
                
do {
                        
//Asigna datos de planillas intermedias
                        
$iorigen $row_rs4['agencia'];
                        
$iorigen_c $row_rs4['agencia_c'];
                        
$iorigen_id $row_rs4['cod_of'];
                        
$thrs_p2 $row_rs4['tiempo_hr'];
                        
$tmin_p2 $row_rs4['tiempo_min'];
                        
$hora_inter $thrs_p2.":".$tmin_p2
                        
//tratamiento de fecha y hora para las planillas intermedias
                        // Convertimos fecha y hora en timestamps
                        // Creamos la fecha inicial con su hora correspondiente
                        
$fecha $f_mov;
                        
$hora_ini $horario;
                        
$hora_ter $hora_inter;
                        
$inicial strtotime("$fecha $hora_ini");


                        
// Obtenemos hora y minutos en base a la hora final hh:mm
                        
list($hr,$min) = explode(':'$hora_ter);
                        
// Convertimos la hora final en segundos
                        
$agregar = ($hr 3600) + ($min 60);
                        
// Obtenemos la fecha final agregando las horas transcurridas
                        // de esta forma, la fecha tambien se actualiza
                        
$fecha_final $inicial $agregar;
                        
// Ahora puedes obtener la fecha y hora final
                        
list($dia$mes$anio$hr$min) = explode('-'date('d-m-Y-H-i'$fecha_final));
                        
$hora_final "$hr:$min";
                        
$fecha_f "$anio-$mes-$dia";  
                        
//insert
                        
$insertSQL sprintf("INSERT INTO planillas (origen_c, ori, id_origen, destino_c, des, id_destino, horario, hr_hr, hr_min, hrdescripcion, fecha, id_ruta, desc_ruta, unidad_zn, tipo_serv, configuracion, status, cadena, dominio, n_asientos, bano) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)",
                                               
GetSQLValueString($iorigen"text"),
                                               
GetSQLValueString($iorigen_c"text"),
                                               
GetSQLValueString($iorigen_id "text"),
                                               
GetSQLValueString($_POST['destino_c'], "text"),
                                               
GetSQLValueString($_POST['des'], "text"),
                                               
GetSQLValueString($_POST['id_destino'], "text"),
                                               
GetSQLValueString($hora_final"text"),
                                               
GetSQLValueString($hr"text"),
                                               
GetSQLValueString($min"text"),                                              
                                               
GetSQLValueString($_POST['hrdescripcion'], "text"),
                                               
GetSQLValueString($fecha_f "date"),
                                               
GetSQLValueString($_POST['id_ruta'], "int"),
                                               
GetSQLValueString($_POST['desc_ruta'], "text"),
                                               
GetSQLValueString($_POST['unidad_zn'], "text"),                       
                                               
GetSQLValueString($_POST['tipo_serv'], "text"),
                                               
GetSQLValueString($_POST['configuracion'], "text"),                       
                                               
GetSQLValueString($_POST['status'], "text"),
                                               
GetSQLValueString($colname_rs1"int"),                       
                                               
GetSQLValueString($_POST['dominio'], "text"),
                                               
GetSQLValueString($_POST['n_asientos'], "int"),
                                               
GetSQLValueString($_POST['bano'], "text"));
                                               
                          
mysql_select_db($database_lfox3$lfox3);
                          
$Result1 mysql_query($insertSQL$lfox3) or die(mysql_error());
                    
                  } while (
$row_rs4 mysql_fetch_assoc($rs4));
                  
$ma&#241;ana = strtotime("+".$indice." week",strtotime($_POST['fecha_inicio']));//ACA DEBERIA IR LA DE LAS SEMANAS
                  
$f_mov date('Y-m-d',$ma&#241;ana);
            
}//cierre for
                  
          
$insertGoTo "planillas.php";
          if (isset(
$_SERVER['QUERY_STRING'])) {
            
$insertGoTo .= (strpos($insertGoTo'?')) ? "&" "?";
            
$insertGoTo .= $_SERVER['QUERY_STRING'];
          }
          
header(sprintf("Location: %s"$insertGoTo));
    }      
}
//cierre if1    
//Periocidad semanal
$colname_rs1 "1";
if (isset(
$_GET['key'])) {
  
$colname_rs1 = (get_magic_quotes_gpc()) ? $_GET['key'] : addslashes($_GET['key']);
}
mysql_select_db($database_lfox3$lfox3);
$query_rs1 sprintf("SELECT * FROM planillas WHERE idnum = %s"$colname_rs1);
$rs1 mysql_query($query_rs1$lfox3) or die(mysql_error());
$row_rs1 mysql_fetch_assoc($rs1);
$totalRows_rs1 mysql_num_rows($rs1);
$dominio $_GET['kdominio']; 


Triby 26/01/2009 13:20

Respuesta: repetir un registro en base a una fecha delimitada.
 
Crea una funcion para insertar los datos, te resultara mas facil para no duplicar codigo de insercion.

$dias_salida debe ser una matriz con los dias en que habra salidas, 0=domingo, 6=sabado.

Código PHP:

if($flag == 'diaria') {
    
// Aqui haces un for donde incluyas todos los dias
    
$dia_inicial strtotime($_POST['fecha_inicio']);
    
$dia_final strtotime($_POST['fecha_fin']);
    for(
$f_mov $dia_inicial$f_mov <= $dia_final$fmov += 86400) {
        
inserta($f_mov$datos); // Los parametros dependen de como hagas la funcion
    
}
} else {
    
$dia_inicial strtotime($_POST['fecha_inicio']);
    
$dia_semana intval(date('w'$dia_inicial));
    
// Obtenemos el domingo de la primera semana
    
$inicio_semana $dia_inicial - ($dia_semana 86400);
    
// For para las semanas
    
for($i 1$i <= $indice3$i++) {
        foreach(
$dias_salida as $salida) {
              
$f_mov $inicio_semana + ($salida 86400);
              
inserta($f_mov$datos);
              
$inicio_semana += 604800// Agregamos 7 dias
        
}
    }




La zona horaria es GMT -6. Ahora son las 08:08.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2014, Jelsoft Enterprises Ltd.

SEO by vBSEO 3.3.2