/// <summary> /// Consulta si existe una sala de colaborador disponible /// </summary> /// <param name="bAgendada"></param> /// <param name="iIdUsuario"></param> /// <param name="dtFechaConsulta"></param> /// <returns></returns> public IMDResponse <EntColaborador> BObtenerSala(bool?bAgendada = null, int?iIdUsuario = null, DateTime?dtFechaConsulta = null) { IMDResponse <EntColaborador> response = new IMDResponse <EntColaborador>(); EntColaborador oColaborador = new EntColaborador(); string metodo = nameof(this.BObtenerSala); logger.Info(IMDSerialize.Serialize(67823458591441, $"Inicia {metodo}(int? iIdTipoProducto = null, int? iIdUsuario = null, DateTime? dtFechaConsulta = null)")); try { IMDResponse <DataTable> dtColaborador = datColaborador.DObtenerSala(bAgendada, iIdUsuario, dtFechaConsulta); if (dtColaborador.Code != 0) { return(dtColaborador.GetResponse <EntColaborador>()); } foreach (DataRow item in dtColaborador.Result.Rows) { IMDDataRow rows = new IMDDataRow(item); oColaborador = new EntColaborador { iIdColaborador = rows.ConvertTo <int>("iIdColaborador"), iNumSala = rows.ConvertTo <int?>("iNumSala") }; } //Verificar si se ha encontrado una sala disponible string medicosOcupados = "Todos los médicos se encuentran ocupados en este momento."; if (oColaborador.iNumSala == null) { response.Code = -7262876723423; response.Message = medicosOcupados; return(response); } response.Code = 0; response.Message = dtColaborador.Result.Rows.Count > 0 ? "Se ha encontrado un sala disponible." : medicosOcupados; response.Result = oColaborador; } catch (Exception ex) { response.Code = 67823458592218; response.Message = "Ocurrió un error inesperado al obtener la sala del colaborador."; logger.Error(IMDSerialize.Serialize(67823458592218, $"Error en {metodo}(int? iIdTipoProducto = null, int? iIdUsuario = null, DateTime? dtFechaConsulta = null): {ex.Message}", ex, response)); } return(response); }
/// <summary> /// Guarda un colaborador y sus respectivas cuentas en el CGU /// </summary> /// <param name="entCreateColaborador"></param> /// <returns></returns> public IMDResponse <bool> BSaveColaborador(EntCreateColaborador entCreateColaborador) { IMDResponse <bool> response = new IMDResponse <bool>(); string metodo = nameof(this.BSaveColaborador); logger.Info(IMDSerialize.Serialize(67823458457797, $"Inicia {metodo}(EntCreateColaborador entCreateColaborador)", entCreateColaborador)); try { if (entCreateColaborador == null) { response.Code = 76823456345; response.Message = "No se ingresó información del colaborador."; return(response); } if (entCreateColaborador.iIdTipoDoctor == (int)EnumTipoDoctor.MedicoCallCenter || entCreateColaborador.iIdTipoDoctor == (int)EnumTipoDoctor.MedicoAdministrativo) { EntUsuario entUsuario = new EntUsuario { bActivo = entCreateColaborador.bActivo, bBaja = entCreateColaborador.bBaja, dtFechaNacimiento = entCreateColaborador.dtFechaNacimientoDoctor, iIdPerfil = entCreateColaborador.bAdministrador ? (int)EnumPerfilPrincipal.DoctorAdministrador : (int)EnumPerfilPrincipal.DoctorCallCenter, iIdTipoCuenta = (int)EnumTipoCuenta.Titular, iIdUsuario = entCreateColaborador.iIdUsuarioCGU, iIdUsuarioMod = entCreateColaborador.iIdUsuarioMod, sApellidoMaterno = entCreateColaborador.sApellidoMaternoDoctor, sApellidoPaterno = entCreateColaborador.sApellidoPaternoDoctor, sCorreo = entCreateColaborador.sCorreoDoctor, sDomicilio = entCreateColaborador.sDomicilioDoctor, sNombres = entCreateColaborador.sNombresDoctor, sPassword = entCreateColaborador.sPasswordTitular, sTelefono = entCreateColaborador.sTelefonoDoctor, sUsuario = entCreateColaborador.sUsuarioTitular, bAcceso = entCreateColaborador.bAcceso }; //Doctores callcenter o administrativos, sólo guardar usuario y colaborador IMDResponse <EntUsuario> respuestaGuardarUsuarioCGU = busUsuario.BSaveUsuario(entUsuario, true); if (respuestaGuardarUsuarioCGU.Code != 0) { return(respuestaGuardarUsuarioCGU.GetResponse <bool>()); } entCreateColaborador.iIdEspecialidad = (int)EnumEspecialidadPrincipal.MedicinaGeneral; entCreateColaborador.iIdUsuarioCGU = (int)respuestaGuardarUsuarioCGU.Result.iIdUsuario; entCreateColaborador.iIdTipoCuenta = (int)EnumTipoCuenta.Titular; entCreateColaborador.iIdTipoDoctor = entCreateColaborador.bAdministrador ? (int)EnumTipoDoctor.MedicoAdministrativo : entCreateColaborador.iIdTipoDoctor; IMDResponse <bool> respuestaGuardarColaborador = datColaborador.DSaveColaborador(entCreateColaborador); if (respuestaGuardarColaborador.Code != 0) { return(respuestaGuardarColaborador); } } else if (entCreateColaborador.iIdTipoDoctor == (int)EnumTipoDoctor.MedicoEspecialista) { if (entCreateColaborador.bActivo && !entCreateColaborador.bBaja) { if (entCreateColaborador.iIdEspecialidad == 0) { response.Code = -876862348762374; response.Message = "No se ha especificado la especialidad del médico colaborador."; return(response); } if (string.IsNullOrWhiteSpace(entCreateColaborador.sUsuarioAdministrativo) && entCreateColaborador.bAcceso) { response.Code = -7234869627782; response.Message = "No se han especificado los datos de cuenta administrativa."; return(response); } if (entCreateColaborador.iIdColaborador == 0 && string.IsNullOrWhiteSpace(entCreateColaborador.sPasswordAdministrativo) && entCreateColaborador.bAcceso) { response.Code = -324778287623; response.Message = "No se han especificado los datos de cuenta administrativa."; return(response); } } //Generar usuario titular y administrativo EntUsuario entUsuarioTitular = new EntUsuario { bActivo = entCreateColaborador.bActivo, bBaja = entCreateColaborador.bBaja, dtFechaNacimiento = entCreateColaborador.dtFechaNacimientoDoctor, iIdPerfil = (int)EnumPerfilPrincipal.DoctorEspecialista, iIdTipoCuenta = (int)EnumTipoCuenta.Titular, iIdUsuario = entCreateColaborador.iIdUsuarioCGU, iIdUsuarioMod = entCreateColaborador.iIdUsuarioMod, sApellidoMaterno = entCreateColaborador.sApellidoMaternoDoctor, sApellidoPaterno = entCreateColaborador.sApellidoPaternoDoctor, sCorreo = entCreateColaborador.sCorreoDoctor, sDomicilio = entCreateColaborador.sDomicilioDoctor, sNombres = entCreateColaborador.sNombresDoctor, sPassword = entCreateColaborador.sPasswordTitular, sTelefono = entCreateColaborador.sTelefonoDoctor, sUsuario = entCreateColaborador.sUsuarioTitular, bAcceso = entCreateColaborador.bAcceso }; EntUsuario entUsuarioAdministrativo = new EntUsuario { bActivo = entCreateColaborador.bActivo, bBaja = entCreateColaborador.bBaja, dtFechaNacimiento = entCreateColaborador.dtFechaNacimientoDoctor, iIdPerfil = (int)EnumPerfilPrincipal.AdministradorEspecialista, iIdTipoCuenta = (int)EnumTipoCuenta.Administrativa, iIdUsuario = entCreateColaborador.iIdUsuarioCGU, iIdUsuarioMod = entCreateColaborador.iIdUsuarioMod, sApellidoMaterno = entCreateColaborador.sApellidoMaternoDoctor, sApellidoPaterno = entCreateColaborador.sApellidoPaternoDoctor, sCorreo = entCreateColaborador.sCorreoDoctor, sDomicilio = entCreateColaborador.sDomicilioDoctor, sNombres = entCreateColaborador.sNombresDoctor, sPassword = entCreateColaborador.sPasswordAdministrativo, sTelefono = entCreateColaborador.sTelefonoDoctor, sUsuario = entCreateColaborador.sUsuarioAdministrativo, bAcceso = entCreateColaborador.bAcceso }; if (entUsuarioTitular.sUsuario == entUsuarioAdministrativo.sUsuario && !string.IsNullOrWhiteSpace(entUsuarioTitular.sUsuario) && !string.IsNullOrWhiteSpace(entUsuarioAdministrativo.sUsuario)) { response.Code = -2345674657; response.Message = "El usuario titular no puede ser el mismo que el usuario administrativo."; return(response); } //Validar que los datos y disponibilidad de nombre de usuario de ambas cuentas antes de guardar if (entCreateColaborador.bActivo && !entCreateColaborador.bBaja) { IMDResponse <bool> resValidacionTitular = busUsuario.BValidaDatos(entUsuarioTitular); if (resValidacionTitular.Code != 0) { return(resValidacionTitular); } IMDResponse <bool> resValidacionAdministrativo = busUsuario.BValidaDatos(entUsuarioAdministrativo); if (resValidacionAdministrativo.Code != 0) { return(resValidacionAdministrativo); } } //Verificar si hay que enviar las credenciales por correo de ambas cuentas bool activacionUsuario = false; if (entCreateColaborador.bAcceso) { if (entCreateColaborador.iIdColaborador != 0) { IMDResponse <List <EntColaborador> > resGetColaborador = this.BGetColaborador(entCreateColaborador.iIdColaborador); if (resGetColaborador.Code == 0) { if (resGetColaborador.Result.Count == 1) { EntColaborador colaborador = resGetColaborador.Result.First(); if (!colaborador.bAcceso) { activacionUsuario = true; } } } } } //Guardar para obtener el id de usuario de ambas cuentas en el CGU IMDResponse <EntUsuario> respuestaGuardarUsuarioCGU = busUsuario.BSaveUsuario(entUsuarioTitular); if (respuestaGuardarUsuarioCGU.Code != 0) { return(respuestaGuardarUsuarioCGU.GetResponse <bool>()); } entCreateColaborador.iIdUsuarioCGU = (int)respuestaGuardarUsuarioCGU.Result.iIdUsuario; entCreateColaborador.iIdTipoCuenta = (int)EnumTipoCuenta.Titular; entUsuarioAdministrativo.iIdUsuario = respuestaGuardarUsuarioCGU.Result.iIdUsuario; respuestaGuardarUsuarioCGU = busUsuario.BSaveUsuario(entUsuarioAdministrativo); if (respuestaGuardarUsuarioCGU.Code != 0) { return(respuestaGuardarUsuarioCGU.GetResponse <bool>()); } //Guardar la cueta de colaborador IMDResponse <bool> respuestaGuardarColaborador = datColaborador.DSaveColaborador(entCreateColaborador); if (respuestaGuardarColaborador.Code != 0) { return(respuestaGuardarColaborador); } if (entCreateColaborador.bAcceso) { if ((entCreateColaborador.bActivo && !entCreateColaborador.bBaja && (!string.IsNullOrWhiteSpace(entCreateColaborador.sPasswordTitular) || !string.IsNullOrWhiteSpace(entCreateColaborador.sPasswordAdministrativo))) || activacionUsuario) { List <string> users = new List <string> { entCreateColaborador.sUsuarioTitular, entCreateColaborador.sUsuarioAdministrativo }; IMDResponse <bool> resEnviarCredenciales = busUsuario.BEnviarCredenciales(entCreateColaborador.sCorreoDoctor, entCreateColaborador.iIdColaborador == 0 || activacionUsuario ? EnumEmailActionPass.Crear : EnumEmailActionPass.Modificar, users); } } } else { response.Code = -72348767232323; response.Message = "No se ha especificado el tipo de médico colaborador."; return(response); } response.Code = 0; response.Message = "El colaborador ha sido guardado correctamente."; response.Result = true; } catch (Exception ex) { response.Code = 67823458458574; response.Message = "Ocurrió un error inesperado al guardar el colaborador."; logger.Error(IMDSerialize.Serialize(67823458458574, $"Error en {metodo}(EntCreateColaborador entCreateColaborador): {ex.Message}", entCreateColaborador, ex, response)); } return(response); }
/// <summary> /// Obtiene o filtra la lista de colaboradores /// </summary> /// <param name="piIdColaborador"></param> /// <param name="piIdTipoDoctor"></param> /// <param name="piIdEspecialidad"></param> /// <param name="piIdUsuarioCGU"></param> /// <returns></returns> public IMDResponse <List <EntColaborador> > BGetColaborador(int?piIdColaborador = null, int?piIdTipoDoctor = null, int?piIdEspecialidad = null, int?piIdUsuarioCGU = null) { IMDResponse <List <EntColaborador> > response = new IMDResponse <List <EntColaborador> >(); string metodo = nameof(this.BGetColaborador); logger.Info(IMDSerialize.Serialize(67823458474891, $"Inicia {metodo}(int? piIdColaborador = null, int? piIdTipoDoctor = null, int? piIdEspecialidad = null, int? piIdUsuarioCGU = null)", piIdColaborador, piIdTipoDoctor, piIdEspecialidad, piIdUsuarioCGU)); try { IMDResponse <DataTable> resGetColaboradores = datColaborador.DGetColaborador(piIdColaborador, piIdTipoDoctor, piIdEspecialidad, piIdUsuarioCGU); if (resGetColaboradores.Code != 0) { return(resGetColaboradores.GetResponse <List <EntColaborador> >()); } List <EntColaborador> lstColaboradores = new List <EntColaborador>(); foreach (DataRow drColaborador in resGetColaboradores.Result.Rows) { IMDDataRow dr = new IMDDataRow(drColaborador); EntColaborador colaborador = new EntColaborador { bActivo = Convert.ToBoolean(dr.ConvertTo <int>("bActivo")), bBaja = Convert.ToBoolean(dr.ConvertTo <int>("bBaja")), bAcceso = Convert.ToBoolean(dr.ConvertTo <int>("bAcceso")), bOcupado = Convert.ToBoolean(dr.ConvertTo <int>("bOcupado")), bOnline = Convert.ToBoolean(dr.ConvertTo <int>("bOnline")), dtFechaCreacion = dr.ConvertTo <DateTime>("dtFechaCreacion"), dtFechaNacimientoDoctor = dr.ConvertTo <DateTime>("dtFechaNacimientoDoctor"), iIdColaborador = dr.ConvertTo <int>("iIdColaborador"), iIdEspecialidad = dr.ConvertTo <int>("iIdEspecialidad"), iIdTipoCuenta = dr.ConvertTo <int>("iIdTipoCuenta"), iIdTipoDoctor = dr.ConvertTo <int>("iIdTipoDoctor"), iIdUsuarioCGU = dr.ConvertTo <int>("iIdUsuarioCGU"), iNumSala = dr.ConvertTo <int?>("iNumSala"), sApellidoMaternoDoctor = dr.ConvertTo <string>("sApellidoMaternoDoctor"), sApellidoPaternoDoctor = dr.ConvertTo <string>("sApellidoPaternoDoctor"), sCedulaProfecional = dr.ConvertTo <string>("sCedulaProfecional"), sCorreoDirectorio = dr.ConvertTo <string>("sCorreo"), sCorreoDoctor = dr.ConvertTo <string>("sCorreoDoctor"), sDireccionConsultorio = dr.ConvertTo <string>("sDireccionConsultorio"), sDomicilioDoctor = dr.ConvertTo <string>("sDomicilioDoctor"), sEspecialidad = dr.ConvertTo <string>("sEspecialidad"), sFechaCreacion = string.Empty, sFechaNacimientoDoctor = string.Empty, sMaps = dr.ConvertTo <string>("sMaps"), sNombreDirectorio = dr.ConvertTo <string>("sNombre"), sNombreConsultorio = dr.ConvertTo <string>("sNombreConsultorio"), sNombresDoctor = dr.ConvertTo <string>("sNombresDoctor"), sPasswordAdministrativo = dr.ConvertTo <string>("sPasswordAdministrativo"), sPasswordTitular = dr.ConvertTo <string>("sPasswordTitular"), sRFC = dr.ConvertTo <string>("sRFC"), sTelefonoDirectorio = dr.ConvertTo <string>("sTelefono"), sTelefonoDoctor = dr.ConvertTo <string>("sTelefonoDoctor"), sTipoCuenta = dr.ConvertTo <string>("sTipoCuenta"), sTipoDoctor = dr.ConvertTo <string>("sTipoDoctor"), sURL = dr.ConvertTo <string>("sURL"), sUsuarioAdministrativo = dr.ConvertTo <string>("sUsuarioAdministrativo"), sUsuarioTitular = dr.ConvertTo <string>("sUsuarioTitular"), sWhatsApp = dr.ConvertTo <string>("sWhatsApp"), }; colaborador.sFechaCreacion = colaborador.dtFechaCreacion.ToString("dd/MM/yyyy HH:mm"); colaborador.sFechaNacimientoDoctor = colaborador.dtFechaNacimientoDoctor.ToString("dd/MM/yyyy"); colaborador.sAcceso = colaborador.bAcceso ? "SI" : "NO"; colaborador.bAdministrador = colaborador.iIdTipoDoctor == (int)EnumTipoDoctor.MedicoAdministrativo; lstColaboradores.Add(colaborador); } response.Code = 0; response.Message = "Se han obtenido los colaboradores del sistema."; response.Result = lstColaboradores; } catch (Exception ex) { response.Code = 67823458475668; response.Message = "Ocurrió un error inesperado al consultar los colaboradores del sistema."; logger.Error(IMDSerialize.Serialize(67823458475668, $"Error en {metodo}(int? piIdColaborador = null, int? piIdTipoDoctor = null, int? piIdEspecialidad = null, int? piIdUsuarioCGU = null): {ex.Message}", piIdColaborador, piIdTipoDoctor, piIdEspecialidad, piIdUsuarioCGU, ex, response)); } return(response); }