¿Cómo hacer una agenda de citas médicas?

Me piden, como es una agenda de citas, aquí actualmente hay 20 médicos, a todos se le asigna cita, me plantearon este problema, poder bloquear fechas en las cuales los médicos no asistirán por motivos diversos (permisos, vacaciones, etc.), ademas de no citar pacientes en días festivos, también no citar pacientes a los médicos en su horario de alimentos. Esto es debido a que en estos días que han utilizado la base de datos dan citas en fechas y horarios que no se debería, no se si puedas ayudarme. O sea necesito bloquear fechas y horas determinadas para todos los médicos.
Yo me imaginaba crear un formulario para en el capturar las fechas y horas en que los médicos no asistirán o tendrán alguna actividad y guardarlos en una tabla y al momento de capturar una cita me verificara esta tabla para checar dichas fechas, no se si me expliqué bien.

2 respuestas

Respuesta
2
Entiendo perfectamente el problema, pero tengo que pensar cual sería la forma más sencilla de resolverlo.
Me tienes que decir primero ¿el horario es para todos los médicos igual? Es decir quitando permisos o vacaciones que serian personalizados ¿todos trabajan por ejemplo de 9 a 2 y de 4 a 7? Es por donde debemos empezar, por tener unos intervalos de tiempo digamos hábiles. Después ¿con qué intervalo se dan las citas? ¿15 minutos, media hora...? Para que cuando demos una cita tengamos que respetar el intervalo de tiempo necesario para dar otra.
Me cuentas.
Ok Angeles:
Mira 14 médicos tienes horario de 8:00 a 14:00 y de 15:00 a 18:00 horas., las citas son con intervalo de 15 minutos, 3 psicólogas con el mismo horario pero las citas con intervalo de 30 minutos.
Dime se podría por ejemplo bloquear fechas y horarios, que no estuvieran establecidos, por ejemplo, un medico tiene que dar una platica un día determinado, se podría bloquear esa fecha y hora digamos uno o dos dis antes
Espero me haya explicado y gracias
Atentamente
Adrian Morales
Ya tengo algo. Te cuento como lo he planteado para que me digas si te parece bien.
Tabla Médicos:
Campos:
Código (Un código para cada médico que puede ser por ej. el dni) texto
Nombre texto
HoraIniM (Hora inicio de jornada mañana) Fecha/Hora
HoraFinM (Hora fin de jornada mañana)
HoraIniT (Hora inicio de jornada tarde)
HoraFinT (HoraFin de jornada tarde)
IntervaloCita (Intervalo de las citas en Minutos) Numérico
Después una tabla por médico que llamaremos AgendaMedico+Código.
Por ejemplo, si el código de un médico es el 001 su agenda se llamará AgendaMedico001. Luego verás la razón.
Campos:
Código
FechaIni (Fecha Inicio del bloqueo) (Formato fecha larga, es decir con la hora)
FechaFin
Motivo (Motivo del bloqueo. Yo he puesto 4: V ---> Vacaciones P---> Permiso (total de la jornada) A ----> Ausente (parcial de la jornada C---> Cita
He construido el formulario de las citas, después haremos el del bloqueo por vacaciones, permisos o ausencias.
Formulario Citas:
Cuadro Combinado selMedico:
Origen de la fila: SELECT [Codigo], nombre FROM medicos ORDER BY nombre;
Nº de columnas: 2
Columna Dependiente: 1
Al hacer clic ---> Procedimiento de evento ---> Me. Refresh
Control Calendar nombre:Calendario (este control lo tienes en el botón Más controles ---> control calendar) Para formatearlo ---> botón derecho ---> objeto calendar ---> propiedades.
Cuadro de Lista ListaCitas (No pongas nada ni en origen del registro ni en origen de la fila, pero si pon Visible=No y Punto de tabulación: No)
Cuadro de texto independiente txtHora (el código en este cuadro de texto lo pongo al recibir el enfoque)
Botón Enviar que hará las comprobaciones y si es válido insertará la cita.
El código de todo esto es:
Option Compare Database
'Declaro como pública una variable que nos dará el nombre de la agenda de cada médico. Es pública para que nos valga en todo el proceso
Public vTabla As String
Private Sub Form_Load()
'al cargar el formulario que el control calendario tome el valor de la fecha del día
Form!Calendario.Value = Date
End Sub
Private Sub selMedico_Click()
'Cuando seleccionas el médico en el combox actualizamos
Me.Refresh
End Sub
Private Sub txtHora_GotFocus()
'Primero hemos seleccionado el médico, después la fecha en el calendario y ahora vamos a meter la hora
Dim db As Database
Dim rs As Recordset
Dim vsql As String
Dim var As Integer
Set db = CurrentDb
If IsNull(Form!selMedico) = True Then
'Si no hemos seleccionado el médico ---> Mensaje de error
MsgBox ("Seleccionar médico")
Form!selMedico.SetFocus
Else
'Si hemos seleccionado el médico llamamos a su agenda y lo igualamos a la variable vTabla
vTabla = "AgendaMedico" & Form!selMedico.Value
'Seleccionamos en la tabla correspondiente (vTabla) los registros que tengan V o P (vacaciones o permiso) es decir los que tengan bloqueados la jornada entera
vsql = "Select * from " & vTabla & " where FechaFin>cdate('" & Form!Calendario.Value & "') and (Motivo='V' or Motivo='P')"
Set rs = db.OpenRecordset(vsql)
var = 1
Do While Not rs.EOF
'Vemos si la fecha elegida en el calendario está entre las V o las P
If Form!Calendario.Value >= rs!fechaini And Form!Calendario.Value <= rs!fechafin Then
MsgBox ("Fecha ocupada")
Form!Calendario!.SetFocus
var = 2
Exit Do
End If
rs.MoveNext
Loop
'Si no esta bloqueada activamos el cuadro de Lista ListaCitas y le damos el valor del origen de la fila, con ello veremos ordenadas todas las citas que tiene ese médico en 'su agenda
If var = 1 Then
Form!ListaCitas.RowSource = "SELECT FechaIni, FechaFin FROM " & vTabla & " WHERE Mid(str(FechaIni),1,10)='" & Form!Calendario.Value & "' and Motivo='C' order by FechaIni"
Form!ListaCitas.Visible = True
Me.Refresh
End If
End If
End Sub
'Metemos la hora y hacemos clic en el botón Enviar (me doy ahora cuenta que no he controlado el que la hora no sea nulo, habrá que hacerlo
Private Sub Enviar_Click()
Dim db As Database
Dim rs As Recordset
Dim vFecha As Date
Set db = CurrentDb
'Vemos en la tabla Medicos las características del seleccionado
Set rs = db.OpenRecordset("Select * from Medicos where Codigo='" & Form!selMedico.Value & "'")
'Vemos si la hora está dentro de jornada
If DateDiff("n", Form!txtHora.Value, rs!HoraIniM) > 0 Or (DateDiff("n", Form!txtHora.Value, rs!HoraFinM) <= 0 And (DateDiff("n", Form!txtHora.Value, rs!HoraIniT) > 0)) Or DateDiff("n", Form!txtHora.Value, rs!HoraFinT) <= 0 Then
MsgBox ("Hora fuera de jornada")
Form!txtHora.SetFocus
Else
'Insertamos el registro
DoCmd.RunSQL "Insert into " & vTabla & " (Codigo, FechaIni, FechaFin, Motivo)" _
& "Values ('" & Form!selMedico.Value & "', cDate('" & Form!Calendario.Value & " " & Form!txtHora.Value & "'), cdate(dateadd('n',val('" & rs!IntervaloCita & "'),cDate('" & Form!Calendario.Value & " " & Form!txtHora.Value & "'))),'C')"
Form!selMedico.SetFocus
Form!ListaCitas.Visible = False
End If
End Sub
Buenos creo que para empezar a trabajar ya tienes... Yo seguramente hasta el lunes no podré seguir con esto.
Cuando tengamos claro el formulario Citas, haremos otro para bloquear Ausencias, Permisos y Vacaciones.
Me cuentas.
Muchas gracias ángeles, trabajare con esto que me diste el fin de semana y te cuento el lunes como me fue, cualquier cosa te aviso, oye por si las dudas te parecería si intercambiamos correo.
Bueno hasta pronto bonito fin de semana
Atentamente
Adrian Morales
Hola ángeles Buen inicio de Semana
Te comento ya cheque el código que me enviaste y funciona bien, solo tengo algunas dudas, ademas a querer ingresar otra fecha a la agenda del medico, manda un error, que dice que no se pudo guardar el registro.
Ahora me manda un error que dice así
"Error de sintaxis en clausula FROM"
Es en esta linea
'Seleccionamos en la tabla correspondiente (vTabla) los registros que tengan V o P (vacaciones o permiso) es decir los que tengan bloqueados la jornada entera
vsql = "Select * from " & vTabla & " where FechaFin>cdate('" & Form!Calendario.Value & "') and (Motivo='V' or Motivo='P')"
Set rs = db.OpenRecordset(vsql)

No le cambie nada lo escribí tal y como me lo enviaste tu, espero tu respuesta y gracias por toda tu ayuda
Atentamente
Adrian Morales
Si quieres me das tú correo y te mando la BD en la que lo hice, de este modo podríamos hablar sobre una base.
Te aconsejo que no copies y pegues, intenta hacerlo tú... es mejor saber pescar a que te den un pez.
Hola
Ok ángeles tienes razón, pero coo estoy apurado se me hizo más fácil, te mando mi correo te parece
es: [email protected]
Gracias por todo y disculpa, ya que este más desestresado con esta base de datos, podre analizare cada linea del código, para verificar bien todo el proceso
Atentamente
Adrian Morales
Ya te la he mandado.
Gracias
Ya la checo, lo recibí pero el correo me lo bloqueo y no puedo abrirlo, intentare desbloquearlo
Un saludo
Te la mando comprimida, siempre se me olvida y si no la mandas así suele dar problemas.
Respuesta

Estoy trabajando en un proyecto similar me interesaría saber si me pueden pasar el archivo a: [email protected] para que me ayude de guía!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas