Guía para armar lista de turnos

¿Cómo andas?
Tengo problemas para armar una lista de turnos... La misma se arma en base a una fecha que selecciono de un calendario y de un profesional que selecciono de un combobox.
Partiendo de la base, yo puedo guardar turnos en la BD...
Lo que no se como hacer es armar la lista de acuerdo a los turnos que tengo en la BD.
La idea es armarlo de acuerdo a la hora, pero no se como hacer para situar cada turno en su hora correspondiente.
Ademas necesito que los intervalos de hora de los turnos puedan modificarse, por ejemplo que se den cada 10 0 15 min, etc.
Así que no se si hacer que la lista de turnos quede fija o se arme con algún ciclo for parecido al que he realizado...
-------------------------------------
<?php
  $hora=10;
for ($i=1; $i<=15; $i++)
 {
  $hora= $hora  + 15;
  echo " 
<tr>
";
  echo " 
<td nowrap='nowrap'><a href=\"javascript:popUp('nuevo_turno.php?hora=$hora')\">Nuevo Turno</a></td>
";
  echo " 
<td width='1%'>$hora</td>
";
  echo " 
<td></td>
";
  echo " 
<td> </td>
";
  echo " 
<td> </td>
";
  echo " 
<td> </td>
";
  echo " 
<td> </td>
";
  echo " 
</tr>
";
 }
 ?>
-------------------------------------
La variable $hora lo he puesto para probar nada más, pero en realidad lo que necesito es que inicie a las 9am y termine a las 12 y luego de 16hs a 20hs, el cual es el horario del consultorio.
Entonces lo que realmente necesito es armar la tabla en base a los turnos almacenados en la bd pero situados cada uno en su horario correspondiente.
Respuesta
1
Si he entendido bien, tu problema es que no sabes dibujar la tabla.
Lo que yo haría sería algo así:
1) Obtener los turnos de la base de datos.
2) Separar los turnos por día de la semana.
3) Para cada columna de la tabla, un pseudocódigo algo así:
intervalo = 0:15
for (hora = 0:00; hora < 23:59; hora += intervalo) {
   Buscar en array de turnos si hay alguno que empiece entre hora y hora + intervalo - 0:01.
   Si lo hay dibujar el td con la información correspondiente
   Si no lo hay dibujar el td en blanco
}
El cambiar entre 10 o 15 minutos se podría hacer cambiando "intervalo".
Avísame si la pregunta no va por ahí.
¿Hola Jariza, como andas? Sinceramente con lo que me pusiste me has ayudado un montón y eh avanzado bastante pero me quedan algunas dudas en el punto 3) con el ciclo for, principalmente en esta parte:
-Buscar en array de turnos si hay alguno que empiece entre hora y hora + intervalo - 0:01.
Acá te paso lo que eh hecho hasta ahora si me puedes ayudar un poco más te lo voy agradecer:
----------------------------------------
<?php
require_once "/../../includes/cnx.php";
$doctor4= $_GET['doctor'];
$fecha4=$_GET['f_date'];
if ($fecha4!=""){
$fech=explode('-',$fecha4);
$fecha4=$fech[2].'-'.$fech[1].'-'.$fech[0];
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sin t&iacute;tulo</title>
</head>
<body>
<table width="700" border="1" bordercolorlight="#666666" align="center" bgcolor="#FFFFFF">
<tr class="cabecera">
<td align="center" width="1%">Acci&oacute;n</td>
<td align="center">Hora</td>
<td nowrap="nowrap" align="center">Apellido</td>
<td nowrap="nowrap" align="center">Nombre</td>
<td align="center">Motivo</td>
<td align="center">Tipo</td>
<td nowrap="nowrap" align="center" width="1%">Primer visita?</td>
</tr>
<?php
 if($doctor4!="" && $fecha4!=""){
 if($doctor4 && $fecha4){
  $consulta="SELECT * FROM agenda_turno WHERE cod_prof=$doctor4 and fecha='$fecha4'";
  $turnos=mysql_query($consulta,$con);
 while($fila = mysql_fetch_array($turnos)){
  $cod_turno=$fila['cod_turno'];
  $cod_prof=$fila['cod_prof'];
  $nombre=$fila['nombre'];
  $apellido=$fila['apellido'];
  $fecha=$fila['fecha'];
  $fech=explode('-',$fecha);
  $fecha=$fech[2].'-'.$fech[1].'-'.$fech[0];
  $hora=$fila['hora'];
  $motivo=$fila['motivo'];
  $tipo=$fila['tipo'];
  $visita=$fila['visita'];
  echo " 
<tr>
";
  echo " 
<td nowrap='nowrap'><a href=\"javascript:popUp('nuevo_turno.php?hora=$hora')\">Nuevo Turno</a></td>
";
  echo " 
<td width='1%'>$hora</td>
";
  echo " 
<td>$apellido</td>
";
  echo " 
<td>$nombre</td>
";
  echo " 
<td>$motivo</td>
";
  echo " 
<td>$tipo</td>
";
  echo " 
<td>$visita</td>
";
  echo " 
</tr>
";
}
}
}
 ?>
</table>
</body>
</html>
-----------------------------------------------------------
Con esto eh logrado que me muestre el turno guardado de acuerdo al doctor y la fecha, el tema es cuando tengo varios turnos en el mismo día y ademas ver que los turnos se dan de 8:00 a 12:30 y de 16:00 a 20:00 hs...
Desde ya muchísimas gracias por tu ayuda, me ha sido de mucha utilidad.
Emanuel...
El tema de las dos franjas horarios (8:00-12:30 y 16:00-20:00) se podría solucionar con dos bucles.
En el código que me has mandado pondría un "ORDER BY hora_de_cita" en la consulta SQL.
Veo que en el código que me pasas has usado distinto, en lugar de recorrer las horas e ir consultando la base de datos dibujas lo que hay en la base de datos, ¿quiere decir esto que los turnos en blanco también se almacenan?
En cuanto a los turnos múltiples, entiendo que el problema es que se dibujan varios, hay que acumular todos los turnos de una hora antes de escribirlos, sobre el código que te propuse no debería haber problema ya que la hacer la búsqueda de "buscar en array de turnos si hay alguno que empiece entre hora y hora + intervalo - 0:01." deberían salir todos los turnos.
Para solucionar esto sobre tu código creo que lo más fácil sería recorrer la base de datos metiendo los datos en un array usando como key la hora de inicio del turno y luego recorrer este array montando la tabla.
Si el problema no va por ahí, explícamelo un poco más (estoy un poco espeso hoy XD).
Hola Jariza, gracias por contestarme!
Los turnos en blanco no se almacenan... solo que no se sinceramente como hacer eso de recorrer las horas e ir consultando la base de datos.
Vos decis de insertar el for que me propusiste adentro del while que yo hice?
La verdad que estoy un poco trabado como veras!
Agradecería tu ayuda, gracias!
Emanuel.
Hola Jariza, te pido disculpas por volver a molestarte pero estoy trabadisimo con esto...
$intervalo = "0:15";
for ($hora = "9:00"; $hora < "11:59"; $hora += $intervalo) {
Sé que no se puede trabajar así con los valores pero los estuve trabajando con explode()
Y no logro que funcione agradecería tu ayuda...
Emanuel.
Todo el código que te he puesto hasta ahora es psudocódigo, es decir, no es para escribir directamente sino para poder explicarme.
Yo no haría un bucle while como has hecho tu sino lo siguiente:
for ($hora = 9:00;...) {
    $res = mysql_query("SELECT consulta FROM... WHERE hora = $hora);
    echo "
<td>";
    while ($row = mysql_fetch_assoc($res)) {
        echo $row['dato'];
        echo $row['otrodato'];
    }
    echo "</td>
";
}
El tratamiento de la variable $hora y resto de tiempos lo haría expresando el valor en minutos, es decir, donde pone 9:00 sería 540 (9*60), donde pone 9:15 sería 555 (9*60 + 15) etc...
Dime si te vas aclarando, si no, seguimos dándole vueltas :D
Hola Jariza, muchísimas gracias por todas tus respuestas! Me fueron muy útiles gracias a ti eh avanzado muchísimo...
Voy a seguir trabajando en el tema y cualquier cosa si no te molesta te vuelvo a contactar...
Gracias nuevamente
Emanuel

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas