BITácora de Software: .net framework

Bitacora de software: Programación web, programación de escritorio, programación de servicios, configuración de servidores, IIS, lenguajes de programación C++, C#, PHP, trinity core, unity, jquery, arduino, etc.

 

Mostrando entradas con la etiqueta .net framework. Mostrar todas las entradas
Mostrando entradas con la etiqueta .net framework. Mostrar todas las entradas

martes, 8 de septiembre de 2020

Sistema Gestión de Citas Parte 10: Registrar Cita Médica

septiembre 08, 2020 0
Sistema Gestión de Citas Parte 10: Registrar Cita Médica
Imagen 1: Relación entre tabla médicos, citas y pacientes. (Fuente: propia)

Procedimientos Almacenados

Buscar el horario de atención de un médico en una fecha de atención ya sea por el nombre y apellidos del médico o por la especialidad (tipo de búsqueda). Registrar cita de atención para un paciente indicando el médico, la fecha de atención y la hora inicio y fin. Editar un cita de atención de un médico y paciente en una determinada fecha de atención. Listar citas de un médico en una fecha de atención determinada. Obtener información de una cita seleccionada.

Capa de Datos

En la capa de datos tenemos que modificar la clase MedicoDAL y agregar la clase CitaDAL, esta última clase contendrá los respectivos llamados a los procedimientos almacenados para el core registrar cita médica.
Imagen 2: clase MedicoDAL modificada en la capa de datos.(Fuente propia)

Imagen 3: Nueva método ListarMedicosPorHorario agregado en la clase MedicoDAL.(Fuente propia)

código fuente de la clase:
Imagen 4: Nueva clase agregada en la capa de datos.(Fuente propia)

Contenido de la clase CitaDAL:

Capa Base Comunes

En esta capa vamos a modificar las clases MensajeSistema.cs y RespuestaSistema.cs.

Imagen 5: Modificación de clase RespuestaSistema.(Fuente propia)

Imagen 6: Propiedades agregadas a la clase RespuestaSistema.(Fuente propia)

El código:

Imagen 7: Modificación de clase MensajeSistema.(Fuente propia)

Imagen 8: Propiedades agregadas a la clase RespuestaSistema.(Fuente propia)

El código:

Capa Negocio

Agregamos el método ListarMedicosPorHorario en la capa lógica.
Imagen 9: clase MedicoBLL modificada en la capa de datos.(Fuente propia)


Imagen 10: Nueva método ListarMedicosPorHorario agregado en la clase MedicoBLL.(Fuente propia)

código fuente:

Imagen 11: Nueva clase agregada en la capa de negocio.(Fuente propia)


Respecto a esta clase, lo más resaltante es lo siguiente:
  • Función Valida: La función Valida (valga la redundancia), lo siguiente:
    • El campo que contiene el ID del médico y paciente debe tener asignado un valor.
    • La fecha de atención debe tener asignado un valor.
    • La hora inicio y hora fin de atención debe tener asignado un valor. además la hora de inicio no puede ser mayor o igual a la hora fin (línea 50 y 51).
    • Se válida que el médico tenga horario disponible en la fecha de atención (hora inicio y fin)(Línea 57 a 60).
    •  Una vez que se válida que el médico tiene horario disponible se procede a validar que no exista cruce con otra cita médica (Línea 62 a 68).
  • Función GrabarCita: Al igual que con las funciones de registrar/editar de los cruds, la función registra la cita, simplemente hace un llamado a la función valida y realiza las verificaciones explicadas líneas arriba, una vez que se haya pasado dicha verificación se realiza la acción de registrar/editar según corresponda (si el id de la cita tiene como valor "-1" significa que la acción a tomar es registrar, en caso contrario se realiza la acción de editar)


Capa Presentación: RouteConfig

Agregamos el nuevo mapeo de ruta para la pantalla del listado de cita y horario del médico seleccionado.
Imagen 12: Clase modificada.(Fuente propia)

Imagen 13: Nuevo contenido.(Fuente propia)

Modificamos el archivo RouteConfig.cs con el siguiente contenido:

Capa Presentación: Controlador

En la presentación creamos el controlador Cita. 
Imagen 14:  Agregar nuevo controlador.(Fuente propia)


Imagen 15: Seleccionar controlador en blanco.(Fuente propia)

Imagen 16: Nueva clase agregada en la capa de negocio.(Fuente propia)

código fuente:


Capa Presentación: Vista

Agregamos la vista Index y Horario desde el controlador Cita.
Imagen 17: Agregar vista Index. (Fuente: propia)

Imagen 18: Ventana Agregar Vista Index. (Fuente: propia)

Imagen 19: Agregar vista Horario. (Fuente: propia)

Imagen 20: Ventana agregar vista Horario. (Fuente: propia)

El código de la vista Index.cshtml es:
El código html contiene dos controles radio button para elegir el tipo de búsqueda, fecha de atención y el filtro como tal que puede ser el nombre de la especialidad o el nombre del médico.

El código de la vista Horario.cshtml es:
En esta vista se visualizará el horario del médico (fondo melón) y sus citas registradas (color celeste) en una fecha de atención especifica.

Capa Presentación: Funcionalidad JS

Creamos el archivo Index.js en la ruta App_CodeJS/Cita.
Imagen 21: Archivo Index.js. (Fuente: propia)

Respecto al archivo Index.js, todo el código esta contenido dentro de una función anónima, la cuál contiene tres variables: opcionBusqueda, fechaAtencion, fechaConsulta, filtro y model:
  • opcionBusqueda: Almacena el tipo de búsqueda que se debe realizar: por especialidad o por nombre de médico.
  • fechaAtencion: Sirve para buscar buscar los médicos que tengan horario programado en una fecha en especifico.
  • fechaConsulta: Almacena la fecha de atención en formato en formato DD/MM/AAAA.
  • filtro: Almacena el texto que servirá como filtro para buscar la especialidad o el nombre del médico.
  • model: contiene las funciones que permiten interactuar al usuario con la vista.

Las funciones que contiene model,  son las siguiente:

  1. Buscar: Esta función toma los datos de la vista y los envía a la función ListarMedicosPorHorario ubicada en el controlador cita, los datos obtenidas se imprimen en la grilla de la vista.
  2. ConfigurarGrilla: Esta función permite asignar la cantidad de columnas que tendrá el data grid.
  3. MostrarHorario: sirve para re-direccionar a la vista donde se muestra el horario y citas registradas para un médico en una fecha de atención especifico.
  4. MarcarMenu: Sirve para mantener seleccionado las opciones en el menú principal del sistema.
  5. Inicio: Invoca a función MarcarMenu, asigna las funciones a los eventos de los botones, asigna el plugin datepicker a la caja de texto de fecha de atención.

A continuación, creamos el archivo Horario.js en la ruta App_CodeJS/Cita.
Imagen 22: Archivo Horario.js. (Fuente: propia)

Respecto al archivo Horario.js, todo el código esta contenido dentro de una función anónima, la cuál contiene tres variables: medicoId, fechaAtencion, cita y model:
  • medicoId: Almacena el Identificador (PK) del médico, con este dato podemos obtener su horario y citas de una fecha especifica (fecha de atención).
  • fechaAtencion: Sirve para indicar la fecha de atención del horario y citas que tiene asignado el médico.
  • cita : Sirve para contener la información que se enviará y/o traerá de la cita a registrar/editar.
  • model: Contiene las funciones que permiten interactuar al usuario con la vista.

Las funciones que contiene model,  son las siguiente:

  1. ObtenerParametros: Leer el valor del input hidden medicoId y lo almacena en la variable global que tiene el mismo nombre. Además, hace lo mismo con el input hidden fechaAtencion como el dato esta en formato AAAAMMDD, al almacenarlo en la variable global lo guarda en formato DD/MM/AAAA.
  2. ListarDatos: Sirve para invocar al web method que traer el horario y citas registradas para el médico en la fecha de atención indicada.
  3. ObtenerCita: Recibe como parámetro el id de la cita a buscar, dicho parámetro es enviado a la función "ObtenerCita" del controlador y carga la información obtenida en el modal de la Cita.
  4. ConfigurarCalendario: Esta función permite configurar el plugin fullcalendar. Asignamos la fecha actual al plugin para que cuando se dibuje el calendario muestre el mes/semana/día actual además se configura los botones que se van a mostrar y  por último se asigna la función que será invocada cuando se haga click en las celdas del calendario (línea 81). el objeto calEvent es el encargado de llevar la información del horario por ello accedemos a la propiedad calEvent.citaId con el fin de obtener el ID de la cita a modificar.
  5. LimpiarDatosFormulario: Limpia los valores ingresados en los controles de la ventana modal.
  6. NuevaCita: Invoca a la función LimpiarDatosFormulario y muestra el modal para ingresar la información de la cita.
  7. Cancelar: Oculta el modal de Horario.
  8. RecogerDatosFormulario: Esta función recoge los datos escritos en el formulario modal y lo inserta dentro de la variable cita.
  9. Guardar: Invoca a la función RecogerDatosFormulario y luego envía la información de la cita a la función "GrabarCita" del controlador, al final la función retornará un objeto del tipo RespuestaSistema el cual contiene la propiedad Correcto, si esa propiedad es devuelta en true, entonces quiere decir que se ha grabado o modificado con éxito la cita.
  10. AutocompletarPaciente: Esta función permite mostrar una lista con los pacientes que coinciden con el texto ingresado en la caja de texto (txtDni) que invoca a la función. Esta función tiene dos parámetros de entrada el primero es "control" que hace referencia al textbox que invoca la función y el segundo parámetro es la cantidad minima de caracteres que se necesitan para invocar a la función de búsqueda interna. La lista se arma dependiendo de los valores que devuelva la función "BuscarPaciente" del controlador cita.
  11. MarcarMenu: Sirve para mantener seleccionado las opciones en el menú principal del sistema.
  12. Inicio: Invoca a función MarcarMenu y ObtenerParametros, asigna las funciones a los eventos de los botones, asigna el plugin datepicker a la caja de texto de fecha del modal cita, crea el modal de la cita, configura el calendario, obtiene el el horario y las citas programadas del médico (para una fecha de atención) y finalmente muestra el contenido de la página. 
Imagen 23: Pantalla buscar médico disponible por nombres y fecha de atención (listado de médicos). (Fuente: propia)

Imagen 24: Pantalla Horario y citas de médico seleccionado - Vista Por Día. (Fuente: propia).

Imagen 25: Error al registrar una cita fuera del horario del médico. (Fuente: propia)

Imagen 26: Registrar nueva cita válida. (Fuente: propia)

Imagen 27: Mensaje de Registro correcto. (Fuente: propia)

Imagen 28: Error al registrar una cita en una horario ocupado por otro paciente. (Fuente: propia)

Imagen 29: Editar Cita. (Fuente: propia)

Imagen 30: Cambio de horario para la cita. (Fuente: propia)

[Repositorio]


lunes, 6 de mayo de 2019

Sistema Gestión de Citas Parte 9: Registrar Horario Atención Médico

mayo 06, 2019 9
Sistema Gestión de Citas Parte 9: Registrar Horario Atención Médico
Imagen 1: Relación entre tabla medicos y horarios. (Fuente: propia)

Procedimientos Almacenados

Registrar horario de atención de un médico en una fecha especifica (hora inicio y hora fin). Editar un horario de atención del médico. Listar los horario de atención de un médico seleccionado. Obtener información de un horario seleccionado.

Capa de Datos

En la capa de datos tenemos que agregar la clase HorarioDAL, esta clase contendrá los respectivos llamados a los procedimientos almacenados para el core registrar horarios de médicos.

Imagen 2: Nueva clase agregada en la capa de datos.(Fuente propia)

Contenido de la clase HorarioDAL:

Capa Lógica de Negocio

Respecto a esta clase, lo más resaltante es lo siguiente:
  • Función Valida: La función Valida (valga la redundancia), lo siguiente:
    • El campo que contiene el ID del médico debe tener asignado un valor, no se puede registrar un horario si no se tiene seleccionado un médico.
    • La fecha de atención debe tener asignado un valor.
    • La hora inicio y hora fin de atención debe tener asignado un valor. además la hora de inicio no puede ser mayor o igual a la hora fin (línea 41 y 42).
    • Por otro lado, también se valida que no exista cruces con los horarios asignado al médico (línea 44 a 55).
  • Función GrabarHorario: Al igual que con las funciones de registrar/editar de los cruds, la función registrar horario simplemente hace un llamado a la función valida y realiza las verificaciones explicadas líneas arriba, una vez que se haya pasado dicha verificación se realiza la acción de registrar/editar según corresponda (si el id del horario tiene como valor "-1" significa que la acción a tomar es registrar, en caso contrario se realiza la acción de editar)

Capa Presentación: RouteConfig

Actualizamos el archivo RouteConfig.cs, con el siguiente contenido:

Capa Presentación: Controlador

En la presentación actualizamos el contenido del controlador Medico.

Capa Presentación: Vista

Agregamos la vista VisualizarMedicos y Horario desde el controlador Medico.
Imagen 3: Agregar vista VisualizarMedicos. (Fuente: propia)

Imagen 4: Ventana Agregar Vista VisualizarMedicos. (Fuente: propia)

Imagen 5: Agregar vista Horario. (Fuente: propia)

Imagen 6: Ventana agregar vista Horario. (Fuente: propia)
El código de la vista VisualizarMedicos.cshtml es:
Como pueden observan el código de esta vista solo contiene la invocación a su respectivo archivo JS y un div que será la grilla dónde se mostrarán todos los médicos registrados y una opción por cada médico para poder visualizar sus horarios.

El código de la vista Horario.cshtml es:
Para esta vista lo nuevo es la invocación del plugin calendar del cual nos apoyaremos para dibujar el calendario y el horario de los médicos, más adelante detallaré los eventos que utilizaremos para agregar la funcionalidad a la pantalla.

Capa Presentación: Funcionalidad JS

Creamos el archivo VisualizarMedicos.js en la ruta App_CodeJS/Medicos.
Imagen 7: Archivo VisualizarMedicos.js. (Fuente: propia)

Este Script solo contiene a la variable model porque en esta pantalla no vamos a trabajar información del médico. La pantalla sólo servirá para listar los médicos registrados (activos) para ello reutilizamos la función que definimos en la entrada CRUD Médicos (ListarMedicosActivos). La función VerHorario esta asignada al icono del ojo que se encuentra en la columna Acciones, sirve para redireccionar a la vista Horario y enviar el ID del médico seleccionado para poder visualizar su horario de atención en el mes/semana/día.

A continuación, creamos el archivo Horario.js en la ruta App_CodeJS/Medicos.
Imagen 8: Archivo Horario.js. (Fuente: propia)
Respecto al archivo Horario.js, todo el código esta contenido dentro de una función anónima, la cuál contiene tres variables: medicoId, horario y model:
  • medicoId: Almacena el Identificador (PK) del médico, con este dato podemos obtener su información (nombres y apellidos), además de su horario de atención que será mostrado en el calendario.
  • horario: sirve para contener la información que se enviará y/o traerá del horario a registrar/editar. Para este caso el horario se registra por día, es decir que si se desea registrar el horario del médico para toda una semana (Lunes - Viernes) se tiene que realizar 5 registros.
  • model: contiene las funciones que permiten interactuar al usuario con la vista.

Las funciones que contiene model,  son las siguiente:

  1. ObtenerParametros: Leer el valor del input hidden medicoId y lo almacena en la variable global que tiene el mismo nombre.
  2. ObtenerHorario: Recibe como parámetro el id del horario a buscar, dicho parámetro es enviado a la función "ObtenerHorario" del controlador y carga la información obtenida en el modal del Horario.
  3. ConfigurarCalendario: Esta función permite configurar el plugin fullcalendar. Asignamos la fecha actual al plugin para que cuando se dibuje el calendario muestre el mes/semana/día actual además se configura los botones que se van a mostrar y  por último se asigna la función que será invocada cuando se haga click en las celdas del calendario (línea 70). el objeto calEvent es el encargado de llevar la información del horario por ello accedemos a la propiedad calEvent.horarioId con el fin de obtener el ID del horario a modificar.
  4. RecogerDatosFormulario: Esta función recoge los datos escritos en el formulario modal y lo inserta dentro de la variable horario.
  5. LimpiarDatosFormulario: Limpia los valores ingresados en los controles de la ventana modal.
  6. Guardar: Invoca a la función RecogerDatosFormulario y luego envía la información del hoario a la función "GrabarHorario" del controlador, al final la función retornará un objeto del tipo RespuestaSistema el cual contiene la propiedad Correcto, si esa propiedad es devuelta en true, entonces quiere decir que se ha grabado o modificado con éxito el horario.
  7. NuevoHorario: Invoca a la función LimpiarDatosFormulario y muestra el modal para ingresar la información del horario.
  8. Cancelar: Oculta el modal de Horario.
  9. MarcarMenu: Sirve para mantener seleccionado las opciones en el menú principal del sistema.
  10. Inicio: Invoca a función MarcarMenu y ObtenerParametros, asigna las funciones a los eventos de los botones, asigna el plugin datepicker a la caja de texto de fecha del modal horario, crea el modal del horario, configura el calendario, obtiene la información de los horarios del médico y finalmente muestra el contenido de la página. 
Imagen 9: Pantalla Horario de médicos (listado de médicos). (Fuente: propia)

Imagen 10: Pantalla Horario de médico seleccionado - Vista Por Mes. (Fuente: propia).

Imagen 11: Pantalla Horario de médico seleccionado - Vista Por Semana. (Fuente: propia)

Imagen 12: Registrar nuevo horario. (Fuente: propia)

Imagen 13: Mensaje de Registro exitoso. (Fuente: propia)

[Descargar Código Fuente / Download Source Code]

sábado, 17 de noviembre de 2018

Sistema Gestión de Citas Parte 8: CRUD Médicos

noviembre 17, 2018 0
Sistema Gestión de Citas Parte 8: CRUD Médicos
Continuando con el sistema de gestión de citas, ahora explicaré la construcción del CRUD de médicos, el cual es el mas extenso de los 3 CRUD realizados hasta el momento. Sin nada más que agregar vamos al tutorial en si :).
Imagen 1: Tabla medicos (cabecera) y medicos_especialidades (detalle).

Procedimientos Almacenados

Listar todos los médicos (sólo activos). Obtener un médico en especifico. Registrar un médico. Editar un médico. Listar todas las especialidades que tienen un médico (activas e inactivas). Registrar una especialidad asignada a un médico. Editar una especialidad asignada a un médico, como la tabla MEDICOS_ESPECIALIDADES tiene un PK (ID), hago uso de ese campo para actualizar el registro.

Capa de Datos

En la capa de datos tenemos que agregar la clase MedicoDAL y MedicoEspecialidadDAL. Estas clases contendrán los respectivos llamados a los procedimientos almacenados para el crud de médicos.
Imagen 2: Nuevas clases agregadas en la capa de datos.(Fuente propia)

Contenido de la clase MedicoDAL: Contenido de la clase MedicoEspecialidadDAL:

Capa Lógica de Negocio

Respecto a esta clase, lo más resaltante es lo siguiente:
  • Función Valida: Internamente invoca a la función ListarMedicos (línea 54) que devuelve el listado de médicos registrados activos, a dicha lista se le aplica linq para filtrar aquellos médicos que tengan el mismo DNI e ID distinto del médico a registrar o modificar, si se obtiene un registro que cumpla esas condiciones (línea 55) entonces quiere decir que el DNI ya fue asignado a otro médico por lo que se le notifica por medio del un mensaje de error (línea 56). Por otro lado, se tiene la validación de la lista de especialidades (línea 62) del médico, esta lista debe contar con al menos 1 registro, en caso no tenga datos asignado se mostrará un mensaje de error (línea 98). Si la lista de especialidades cuenta con registros, por cada registro de la lista (línea 66) se valida que el objeto contenga un ID (línea 70) y nombre (línea 75), además que dicha especialidad no se repita en la lista (línea 86).
  • Función GrabarMedico: Esta función contiene un bloque transaccional para la inserción del detalle por médico (lista de especialidades) realizando un registro a la vez, en caso exista un error se realizará un rollback a todas las operaciones. Lo primero a realizar es la acción de validación del objeto (línea 127) una vez pase esta validación lo que continua es verificar su ID, si dicho ID contiene el valor -1 esto significa que es un registro nuevo por lo que se procede a registrar los datos del médico en la base de datos (línea 133), la función GrabarMedico devuelve el ID del registro insertado en la base de datos, en caso este valor devuelto es mayor a 0 quiere decir que el registro se realizó correctamente, luego se procederá con el registro de la lista de especialidades del médico recorriendo la lista de especialidades (línea 136), registrando la relación del médico - especialidad a través de la función GrabarEspecialidadDeMedico (línea 138), esta función recibe como parámetro los datos de especialidad, el ID del médico y el nombre del usuario que realiza la acción. Una vez registrado todo correctamente (línea 146), se procede a finalizar todas las operaciones (línea 149).
    Por otro lado, si el ID del objeto es diferente a -1 quiere decir que es un médico que ya se encuentra registrado en la base de datos, por lo que se realiza la acción de modificar (línea 164).
    La función EditarMedico devuelve true cuando la modificación se realizó correctamente. A continuación, se procede a registrar/modificar la lista de especialidades del médico, al igual que con el bloque de registrar médico aquí se valida el ID de la relación médico - especialidad (OJO el campo Id es el PK que identifica la relación del médico con la especialidad, mientras que el campo EspecialidadId contiene el ID de la especialidad), si el ID de la relación es 0, significa que es una relación que fue agregada recientemente al médico por lo que se debe registrar en la base de datos (línea 170), caso contrario se modificar los datos de la relación (línea 172).
    Finalmente una vez que se registró todo correctamente (línea 180) se procede a finalizar todas las operaciones (línea 183).

Capa Presentación: Controlador

En la presentación agregamos el controlador Medico e invocamos las funciones de la capa lógica de negocio.

Capa Presentación: Vista

Agregamos la vista Index desde el controlador Medico.
Imagen 2: Agregar vista. (Fuente propia)

Imagen 3: Creación de vista Index. (Fuente propia)

A continuación, insertamos el siguiente código a la vista.

Capa Presentación: Funcionalidad JS

Creamos el archivo MantenedorMedicos.js en la ruta App_CodeJS/Medicos.
Imagen 4: archivo MantenedorMedicos.js
el código del archivo es:

Todo el código esta contenido dentro de una función anónima, la cuál contiene siete variables: medico, EliminarFilaSeleccionada, indiceEspecialidad, medicoIdEliminar, listaEspecialidades, listaEspecialidadesEliminadas y model, a continuación se describe la información que almacena cada variable:
  • medico: sirve para contener la información que se enviará y/o traerá del médico a registrar/editar.
  • EliminarFilaSeleccionada: contiene la información de la especialidad que se desea eliminar al momento de pulsar sobre el icono eliminar que tiene cada fila de la tabla lista de especialidades del médico.
  • indiceEspecialidad: sirve para identificar la última fila en la lista de especialidades ya que cada vez que se agrega una especialidad al médico se genera dinámicamente la caja de texto el cuál contiene una función de autocompletar.
  • medicoIdEliminar: sirve para identificar a qué médico se desea eliminar al momento de pulsar sobre el icono eliminar que tendrá cada fila de la tabla donde se lista los médicos.
  • listaEspecialidades: contiene la información de las especialidades que conoce el médico.
  • listaEspecialidadesEliminadas: contiene la lista de especialidades que fueron eliminadas del médico, esta información se almacena en memoria porque la eliminación lógica (actualización de estados en la base de datos) se realiza cuando el usuario presiona el botón guardar.
  • model: contiene las funciones que permiten interactuar al usuario con la vista.

Las funciones que contiene model,  son las siguiente:

  1. ConfigurarGrilla: Esta función permite asignar la cantidad de columnas que tendrá el data grid y sus respectivos campos.
  2. RecogerDatosFormulario: Esta función recoge los datos escritos en el formulario modal y lo inserta dentro de la variable médico.
  3. CargarLista: invoca a la función "ListarMedicos" del controlador y carga la información en el data grid.
  4. LimpiarDatosFormulario: Limpia los valores ingresados en los controles de la ventana modal.
  5. Guardar: Invoca a la función RecogerDatosFormulario y luego envía la información del médico a la función "GrabarMedico", al final la función retornará un objeto del tipo RespuestaSistema el cual contiene la propiedad Correcto, si esa propiedad es devuelta en true, entonces quiere decir que se ha grabado o modificado con éxito el médico.
  6. Nuevo: Invoca a la función LimpiarDatosFormulario y muestra el modal para ingresar la información del médico.
  7. Cancelar: Oculta el modal de médico.
  8. EliminarMedico: Muestra el modal de pregunta para eliminar el médico y asigna el id del médico a eliminar a la variable global medicoIdEliminar.
  9. Eliminar: envía el id del médico a eliminar mediante la función "EliminarMedico" del controlador medico, la función retornará un objeto del tipo RespuestaSistema el cual contiene la propiedad Correcto, si esa propiedad es devuelta en true, entonces quiere decir que se ha eliminado con éxito el médico.
  10. CancelarEliminarMedico: reinicia el valor de la variable medicoIdEliminar a 0 y cierra el modal para eliminar el médico.
  11. Obtener: Recibe como parámetro el id del médico a buscar, luego invoca a la función "ObtenerMedico" y carga la información del médico encontrado.
  12. LimpiarListaEspecialidad: Genera la primera fila de la tabla que contiene el listado de especialidades del médico. (ahora que lo pienso debí asignar otro nombre a dicha función :P)
  13. AgregarEspecialidad: Agrega una fila a la tabla que contiene el listado de especialidades del médico.
  14. ImprimirListaEspecialidades: Dibuja las filas y controles html de la tabla que contiene el listado de especialidades del médico.
  15. AutocompletarEspecialidad: esta función permite mostrar una lista con las especialidades que coinciden con el texto ingresado en la caja de texto que invoca a la función. Esta función tiene dos parámetros de entrada el primero es "control" que hace referencia al textbox que invoca la función y el segundo parámetro es "fila" que hace referencia a la posición (tr) del textbox en la tabla. La lista se arma dependiendo de los valores que devuelva la función "BuscarEspecialidad" del controlador medico.
  16. EliminarFilaEspecialidad: esta función elimina una fila de la tabla que contien el listado de especialidades del médico, internamente realiza una verificación si especialidad vinculada al médico no tiene un ID de base de datos elimina dicha fila sin pedir confirmación, en caso contrario abre un modal que solicita la confirmación de la acción de eliminar.
  17. OrdenarCorrelativo: esta función es invocada cuando se elimina una fila de la tabla especialidades y sirve para ordenar los números de la columna de "N°".
  18. OrdenarControlesEspecialidades: esta función renombra los identificadores de los textbox de la tabla especialidades porque cada textbox debe tener un nombre único, recuerden que cada vez que se agrega una nueva fila esta dibuja el textbox con un identificador único a la vez que se le asigna el evento AutocompletarEspecialidad.
  19. EliminarEspecialidad: obtiene la información de la fila a eliminar de la tabla especialidad y la almacena en la variable listaEspecialidadesEliminadas, luego elimina la fila y cierra el modal de confirmación.
  20. CancelarEliminarEspecialidad: Oculta el modal de confirmación de acción eliminar especialidad.
  21. MarcarMenu: Sirve para mantener seleccionado las opciones en el menú principal del sistema.
  22. Inicio: Invoca a función MarcarMenu, asigna las funciones a los eventos de los botones, crea el modal del médico, configura la grilla, obtiene la información de los médicos registrados y finalmente muestra el contenido de la página.
Imagen 5: Listado de médicos. (Fuente propia)


Imagen 6: Modificar médico. (Fuente propia)


Imagen 7: Mensaje de alerta al momento de ingresar un médico con DNI ya existente en la base de datos. (Fuente propia)

Imagen 8: Mensaje de confirmación para la acción eliminar. (Fuente propia)


Imagen 9: Mensaje de éxito para la acción de eliminar. (Fuente propia)

[Descargar Código Fuente / Download Source Code]