Ir al contenido


Foto

problemas rango de fechas en agenda médica


  • Por favor identifícate para responder
6 respuestas en este tema

#1 luky

luky

    Member

  • Miembros
  • PipPip
  • 13 mensajes

Escrito 27 abril 2012 - 08:47

:cry:
Hola amigos.
Muy buenos dias.
Estoy desarrollando un sistema de atención médica y estoy creando el módulo de asignación de citas médicas.

Los datos para generar la agenda son
Fecha y hora inicial
Fecha y hora final
intervalo: corresponde al numero de minutos que se le asignara a cada atención, si digito 15, significa que se asignara una cita cada 15 minutos

Otro campo muy importante es la seleccion de un dia de la semana.

todo esta funcionando, faltan algunas validaciones, pero quiero solucionar primero lo de la insección a la tabla.

en mi tabla tengo 2 campos
fecha y ffinal
sus valores correspondientes podrian ser 10:00:00 10:15:00
EL PROBLEMA RADICA EN:
si quiero insertar una cita que va desde las 10:05:00 hasta las 10:10:00 el sistema NO DEBE DEJAR HACERLO ya que ese rango de tiempo esta ocupado por la cita 10:00:00 10:15:00

************************************************** ************

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR...nsitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Crear Calendario</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script language="javascript" type="text/javascript" src="js/functiones.js"></script>
<link href="css/calendario.css" type="text/css" rel="stylesheet">
<script src="js/calendar.js" type="text/javascript"></script>
<script src="js/calendar-es.js" type="text/javascript"></script>
<script src="js/calendar-setup.js" type="text/javascript"></script>
</head>

<body>
<form name="form" method="post" action="">

<!--****************************************-->
</script>
Fecha Inicial &nbsp;<input type="text" size="8" name="fi" id="ingreso" value="<?php echo date("Y-m-d") ?>" />
<img s src="ima/calendario.png" width="16" height="16" border="0" title="Fecha Inicial" id="lanzador">
<!-- script que define y configura el calendario-->
<script type="text/javascript">
Calendar.setup({
inputField : "ingreso", // id del campo de texto
ifFormat : "%Y-%m-%d", // formato de la fecha que se escriba en el campo de texto
button : "lanzador" // el id del botón que lanzará el calendario
});
</script>
<!--****************************************-->
&nbsp;&nbsp;&nbsp;&nbsp
</script>
Fecha Final &nbsp;<input type="text" size="8" name="ff" id="ingreso_2" value="<?php echo date("Y-m-d") ?>" />
<img src="ima/calendario.png" " width="16" height="16" border="0" title="Fecha Final" id="lanzador_2">
<!-- script que define y configura el calendario-->
<script type="text/javascript">
Calendar.setup({
inputField : "ingreso_2", // id del campo de texto
ifFormat : "%Y-%m-%d", // formato de la fecha que se escriba en el campo de texto
button : "lanzador_2" // el id del botón que lanzará el calendario
});
</script>
<!--****************************************-->
&nbsp;&nbsp;&nbsp;&nbsp<br /><br />
Hora Inicial &nbsp;<input type="text" name="hi" size="2" />
<input type="text" name="mi" size="2" />
Hora Final &nbsp;<input type="text" name="hf" size="2" />
<input type="text" name="mf" size="2"/>
<input type="hidden" value="si" name="grabar">
<br /><br />
&nbsp;&nbsp;&nbsp;&nbsp<input type="text" name="int" size="2" /><br /><br />
<input name="dias[]" type="checkbox" value="Monday">lun-Monday<br />
<input name="dias[]" type="checkbox" value="Tuesday">mar-Tuesday<br />
<input name="dias[]" type="checkbox" value="Wednesday">mir-Wednesday<br />
<input name="dias[]" type="checkbox" value="Thursday">jue-Thursday<br />
<input name="dias[]" type="checkbox" value="Friday">vie-Friday<br />
<input name="dias[]" type="checkbox" value="Saturday">sab-Saturday<br />
<input name="dias[]" type="checkbox" value="Friday">dom-Friday<br />
<input name="send" type="submit" id="send" value="Enviar!">
</form>
<?php
if (isset($_POST["grabar"]) and $_POST["grabar"] = "s")
{
$fechaInicio = strtotime($_POST["fi"]);
$fechaFin= strtotime($_POST["ff"]);
$hi= ($_POST["hi"]);
$mi= ($_POST["mi"]);
$horaInicio = strtotime($hi. ":" .$mi);
$hf= ($_POST["hf"]);
$mf= ($_POST["mf"]);
$horaFin = strtotime($hf. ":" .$mf);
$intervalo = $_POST["int"] * 60;

for ($i=$horaInicio;$i<$horaFin;$i =$intervalo) {
for ($j=$fechaInicio;$j<=$fechaFin;$j =86400)
{
/****************************************/
$ndia = date('l', $j);
if (isset($_POST['dias']))
{
for($k=0; $k<count($_POST['dias']); $k  )
{
if($ndia == $_POST['dias'][$k])
{

($_POST['dias'][$k] . "<Br>") ;
$l = $i;


echo $datot = date('Y-m-d', $j). " " .date('H:i:s', $i). "<br>";
echo $df1 = date('Y-m-d', $j). " " .date('H:i:s', $l =$intervalo) ."<br><br>";
//************************************************** *********************
$con=mysql_connect("localhost","root","");
$bd="bd_siips";

$sql = "select fecha from calendario where fecha = '$datot' and ffinal = '$df1'";
$res = mysql_db_query($bd,$sql,$con);
if(mysql_num_rows($res)==0)
{
$query="insert into calendario values ('null','$datot','$df1')";
$resp = mysql_db_query($bd,$query,$con);

}else
{
echo "Horario no disponible";
exit;
}
}
}
}
}
/*******************************************/

}
}
?>
</body>
</html>


************************************************** ************


dejo el codigo por si alguien me puede colaborar

de antemano muchas gracias
  • 0

#2 Garada

Garada

    Newbie

  • Miembros
  • Pip
  • 4 mensajes

Escrito 27 abril 2012 - 09:47

Haz la consulta al revés que es más simple y niégala:

COUNT (*) FROM Tabla WHERE (FechaFinal < $FechaInicial) OR ($FechaFinal < FechaInicial) -> Devuelve líneas completamente FUERA del rango

Se niega la condición y devuelve si hay líneas que coincidan con el rango.
COUNT (*) FROM Tabla WHERE NOT (FechaFinal < $FechaInicial) OR ($FechaFinal < FechaInicial)

Me surgió algo similar hace unas semanas y encontré esa solución en stackoverflow

Un saludo.
  • 0

#3 luky

luky

    Member

  • Miembros
  • PipPip
  • 13 mensajes

Escrito 27 abril 2012 - 03:02

:cheesy:
hola Garada.
Queria darte las gracias por tu aporte, fue excelente.
el codigo quedo asi
$sql = "select * from calendario where not (ffinal < '$df1') or ('$datot' < fecha)";

ya hice varias pruebas y quedo funcionado bien, te agradezco mucho la ayuda.

necesito hacer la validacion de los dias de la semana que selecciono.
Puedo hacerlo aqui o lo lo hago en el foro de php?
  • 0

#4 luky

luky

    Member

  • Miembros
  • PipPip
  • 13 mensajes

Escrito 02 mayo 2012 - 02:05

:cry:

Hola

:cry:
hice las pruebas insertando varios días y no hace la inserción correctamente.

escogí el horario para 3 días

FECHA INCIAL
2012-05-02 10:00:00

FECHA FINAL
2012-05-04 11:00:00
con un intervalo de 20 minutos

solo me inserta esta información
2012-05-02 10:00:00 2012-05-02 10:20:00
2012-05-03 10:00:00 2012-05-03 10:20:00 
2012-05-04 10:00:00 2012-05-04 10:20:00

el resto de horas no me las inserta

cuando lo hago para un sólo día, me inserta bien los datos.  El problema es cuando es más de un día

DE ANTEMANO MUCHAS GRACIAS....

el CÓDIGO QUEDO ASÍ

$sql = "select count(*) as cuantos from calendario where not (ffinal < '$datot') and ('$df1' < fecha) order by fecha asc";
$res = mysql_query($sql,Conectar::con());
if($reg=mysql_fetch_array($res))
{
$total=$reg["cuantos"];
//echo $total ."<br>";
if ($total == 0)
{
echo "Este SI.........."  ."<br>";
echo $sql ."<br>";

                $query="insert into calendario values ('null','$datot','$df1')";
$resp = mysql_query($query,Conectar::con());
}
else
{
echo "Este NO..........HORARIO NO DISPONIBLE";
}


  • 0

#5 Garada

Garada

    Newbie

  • Miembros
  • Pip
  • 4 mensajes

Escrito 02 mayo 2012 - 02:41

Uhm, creo que se te fue un AND en vez de un OR en la consulta y revisa que las variables que usas son las fechas correctas.

  • 0

#6 luky

luky

    Member

  • Miembros
  • PipPip
  • 13 mensajes

Escrito 02 mayo 2012 - 03:50

hola
lo intente con el OR y sigue con problemas

$sql = "select count(*) as cuantos from calendario where not (ffinal < '$datot') or ('$df1' < fecha) order by fecha asc";

si hago las pruebas del select internamente en sql funciona perfectamente, el problema es con el insert.
hice una impresión de la consulta, y me genera la información bien, el problema es al insertar.

Agradezco mucho tu atención

  • 0

#7 Garada

Garada

    Newbie

  • Miembros
  • Pip
  • 4 mensajes

Escrito 03 mayo 2012 - 03:06

Entonces,  ¿cuál sería el error?

Entiendo que averiguar si el registro se puede insertar o colisiona con otra fecha funciona (el SELECT).

¿Da algún mensaje de error el INSERT?
¿No es obligatorio poner el nombre de las columnas antes de VALUES?
  • 0




IP.Board spam blocked by CleanTalk.