public Resultado ProcesarCitas(int ciudad, string especialidad, string token, string idConv, string numeroCelular, string numDoc, string tipoDoc)
        {
            ISchedulingPetitionsRepository petitionsRepository = new SchedulingPetitionsRepository();
            ISchedulingSaveRepository      saveRepository      = new SchedulingSaveRepository();
            SchedulingPetitionsService     serv = new SchedulingPetitionsService();
            AuthenticationApp aApp = new AuthenticationApp();

            serv.LimpiarTablasFlujo(saveRepository, 0, idConv, "tempInfoAgendamiento");
            string    cc             = serv.ProcesarCitas(petitionsRepository, saveRepository, ciudad, especialidad, token, idConv);
            Resultado res            = new Resultado();
            string    identificacion = tipoDoc + numDoc;

            if (cc == "error_token")
            {
                string nToken = aApp.RefreshToken(numeroCelular, identificacion, idConv);
                if (nToken != "error_credenciales" && nToken != "error_parametros" && nToken != "error_desconocido")
                {
                    res.Result = serv.ProcesarCitas(petitionsRepository, saveRepository, ciudad, especialidad, nToken, idConv);
                }
                else
                {
                    res.Result = nToken;
                }
                res.Token = nToken;
            }
            else
            {
                res.Result = cc;
                res.Token  = token;
            }
            return(res);
        }
        public void ProcesarBeneficiariosCiudades(string numDoc, string tipoDoc, string token, string idConv, string numeroCelular)
        {
            ISchedulingPetitionsRepository petitionsRepository = new SchedulingPetitionsRepository();
            ISchedulingSaveRepository      saveRepository      = new SchedulingSaveRepository();
            SchedulingPetitionsService     serv = new SchedulingPetitionsService();
            AuthenticationApp aApp           = new AuthenticationApp();
            LocalQueriesApp   lApp           = new LocalQueriesApp();
            string            identificacion = tipoDoc + numDoc;

            _ = lApp.LimpiarTablas(idConv);
            List <BeneficiarioContratante> bens = serv.GetBeneficiariosContratante(petitionsRepository, saveRepository, identificacion, token, idConv);

            if (bens[0].Parentesco == "error_token")
            {
                token = aApp.RefreshToken(numeroCelular, identificacion, idConv);
                if (token != "error_credenciales" && token != "error_parametros" && token != "error_desconocido")
                {
                    bens = serv.GetBeneficiariosContratante(petitionsRepository, saveRepository, identificacion, token, idConv);
                }
            }
            if (bens.Count > 0)
            {
                dynamic lBen = bens.GroupBy(elem => elem.IdUsuario).Select(group => group.First());
                foreach (BeneficiarioContratante ben in lBen)
                {
                    string rC = serv.ProcesarCiudadesBeneficiarioBd(petitionsRepository, saveRepository, ben.NumeroIdentificacion, ben.TipoIdentificacion, token, idConv, ben.IdUsuario);
                    if (rC == "error_token")
                    {
                        token = aApp.RefreshToken(numeroCelular, identificacion, idConv);
                        serv.ProcesarCiudadesBeneficiarioBd(petitionsRepository, saveRepository, ben.NumeroIdentificacion, ben.TipoIdentificacion, token, idConv, ben.IdUsuario);
                    }
                }
            }
        }
        public Resultado ValidarUsuario(string numDoc, string tipoDoc, string numeroCelular, string identificacionBene, string token, string idConv)
        {
            ISchedulingPetitionsRepository petitionsRepository = new SchedulingPetitionsRepository();
            SchedulingPetitionsService     serv = new SchedulingPetitionsService();
            AuthenticationApp aApp           = new AuthenticationApp();
            Usuario           us             = serv.ValidarUsuario(petitionsRepository, identificacionBene, token, idConv);
            Resultado         res            = new Resultado();
            string            identificacion = tipoDoc + numDoc;

            if (us.Mensaje == "error_token")
            {
                string nToken = aApp.RefreshToken(numeroCelular, identificacion, idConv);
                if (nToken != "error_credenciales" && nToken != "error_parametros" && nToken != "error_desconocido")
                {
                    Usuario nUs = serv.ValidarUsuario(petitionsRepository, identificacionBene, nToken, idConv);
                    res.Result = nUs;
                }
                else
                {
                    Usuario nUs = new Usuario()
                    {
                        Mensaje = nToken
                    };
                    res.Result = nUs;
                }
                res.Token = nToken;
            }
            else
            {
                res.Result = us;
                res.Token  = token;
            }
            return(res);
        }
        public void CancelarCitaBeneficiario(string idConv, string numDocConv, string tipoDocConv, string identificacionBeneficiario, string identificacionCotizante, int idCita, string numeroCelular, string token)
        {
            ILocalQueriesRepository        repo  = new LocalQueriesRepository();
            ISchedulingPetitionsRepository sRepo = new SchedulingPetitionsRepository();
            LocalQueriesService            serv  = new LocalQueriesService();
            SchedulingPetitionsService     sServ = new SchedulingPetitionsService();
            AuthenticationApp aApp = new AuthenticationApp();
            string            identificacionConv = tipoDocConv + numDocConv;
            string            resultadoCan       = sServ.CancelarCitaBeneficiario(sRepo, token, identificacionCotizante, identificacionBeneficiario, idCita.ToString(), idConv);
            string            estadoCan;

            if (resultadoCan == "error_token")
            {
                string nToken = aApp.RefreshToken(numeroCelular, identificacionConv, idConv);
                if (nToken != "error_credenciales" && nToken != "error_parametros" && nToken != "error_desconocido")
                {
                    string res = sServ.CancelarCitaBeneficiario(sRepo, nToken, identificacionCotizante, identificacionBeneficiario, idCita.ToString(), idConv);
                    serv.UpdateCancelacionCita(repo, idConv, idCita, res);
                    dynamic resV = JToken.Parse(res);
                    if (resV.Resultado == 1)
                    {
                        estadoCan = "cancelada";
                    }
                    else
                    {
                        estadoCan = "error|" + resV.Mensaje;
                    }
                }
                else
                {
                    serv.UpdateCancelacionCita(repo, idConv, idCita, nToken);
                    estadoCan = nToken;
                }
            }
            else
            {
                dynamic res = JToken.Parse(resultadoCan);
                if (res.Resultado == 1)
                {
                    estadoCan = "cancelada";
                }
                else
                {
                    estadoCan = "error|" + res.Mensaje;
                }
                serv.UpdateCancelacionCita(repo, idConv, idCita, resultadoCan);
            }

            serv.SaveCitaNoTemp(repo, idConv, idCita, "cancelacion", estadoCan);
        }
        public void ProcesarCitasBeneficiario(string numDoc, string tipoDoc, string token, string idConv, string numeroCelular, string idUsuario)
        {
            ISchedulingPetitionsRepository petitionsRepository = new SchedulingPetitionsRepository();
            ISchedulingSaveRepository      saveRepository      = new SchedulingSaveRepository();
            SchedulingPetitionsService     serv = new SchedulingPetitionsService();
            AuthenticationApp aApp = new AuthenticationApp();

            serv.LimpiarTablasFlujo(saveRepository, 0, idConv, "tempCitasBeneficiario");
            string identificacion = tipoDoc + numDoc;
            string resp           = serv.ConsultarCitasBeneficiario(petitionsRepository, saveRepository, idConv, token, idUsuario);

            if (resp == "error_token")
            {
                token = aApp.RefreshToken(numeroCelular, identificacion, idConv);
                if (token != "error_credenciales" && token != "error_parametros" && token != "error_desconocido")
                {
                    _ = serv.ConsultarCitasBeneficiario(petitionsRepository, saveRepository, idConv, token, idUsuario);
                }
            }
        }
        public Resultado ProcesarEspecialidadesCiudad(string numDoc, string tipoDoc, int ciudad, string token, string idConv, string numDocChat, string tipoDocChat, string numeroCelular)
        {
            ISchedulingPetitionsRepository petitionsRepository = new SchedulingPetitionsRepository();
            ISchedulingSaveRepository      saveRepository      = new SchedulingSaveRepository();
            SchedulingPetitionsService     serv = new SchedulingPetitionsService();
            AuthenticationApp aApp = new AuthenticationApp();

            serv.LimpiarTablasFlujo(saveRepository, 0, idConv, "tempEspecialidades");
            List <Especialidad> espe  = serv.ProcesarEspecialidadesCiudad(petitionsRepository, saveRepository, numDoc, tipoDoc, ciudad, token, idConv);
            Resultado           res   = new Resultado();
            string identificacionChat = tipoDocChat + numDocChat;

            if (espe.Count == 0)
            {
                res.Result = new List <Especialidad>();
                res.Token  = token;
            }
            else
            {
                if (espe[0].Nombre == "error_token")
                {
                    string nToken = aApp.RefreshToken(numeroCelular, identificacionChat, idConv);
                    if (nToken != "error_credenciales" && nToken != "error_parametros" && nToken != "error_desconocido")
                    {
                        res.Result = serv.ProcesarEspecialidadesCiudad(petitionsRepository, saveRepository, numDoc, tipoDoc, ciudad, nToken, idConv);
                    }
                    else
                    {
                        res.Result = nToken;
                    }
                    res.Token = nToken;
                }
                else
                {
                    res.Result = espe;
                    res.Token  = token;
                }
            }
            return(res);
        }
        public void AsignarCita(string idConv, string numDoc, string tipoDoc, string numeroCelular, string token)
        {
            ILocalQueriesRepository        repo  = new LocalQueriesRepository();
            ISchedulingPetitionsRepository sRepo = new SchedulingPetitionsRepository();
            LocalQueriesService            serv  = new LocalQueriesService();
            SchedulingPetitionsService     sServ = new SchedulingPetitionsService();
            AuthenticationApp aApp           = new AuthenticationApp();
            LogApp            log            = new LogApp();
            string            identificacion = tipoDoc + numDoc;
            dynamic           infoCita       = serv.GetInfoAsignarCita(repo, idConv);
            string            telefono       = String.IsNullOrEmpty(infoCita.telefono) ?"": infoCita.telefono;
            string            celular        = String.IsNullOrEmpty(infoCita.celular)?"": infoCita.celular;
            bool    resultAgendamiento;
            dynamic res;
            string  detalle;
            string  resultadoAsig;
            string  estado;
            Dictionary <string, string> values = new Dictionary <string, string>()
            {
                { "espacioCita", infoCita.numEspacioCita.ToString() },
                { "tipoId", infoCita.tipoIdBeneficiario },
                { "numId", infoCita.numIdBeneficiario.ToString() },
                { "centroMedico", infoCita.centroMedico.ToString() },
                { "medico", infoCita.idMedico.ToString() },
                { "especialidad", infoCita.especialidad.ToString() },
                { "telefono", telefono },
                { "correo", infoCita.correo },
                { "celular", celular },
                { "token", token }
            };

            resultadoAsig = sServ.AsignarCita(sRepo, values, idConv);
            if (resultadoAsig == "error_token")
            {
                string nToken = aApp.RefreshToken(numeroCelular, identificacion, idConv);
                if (nToken != "error_credenciales" && nToken != "error_parametros" && nToken != "error_desconocido")
                {
                    values.Remove("token");
                    values.Add("token", nToken);
                    resultadoAsig = sServ.AsignarCita(sRepo, values, idConv);
                }
                else
                {
                    resultadoAsig = nToken;
                }
            }
            serv.UpdateCitaBd(repo, idConv, "agendamiento", resultadoAsig);
            if (resultadoAsig != "error_credenciales" && resultadoAsig != "error_parametros" && resultadoAsig != "error_desconocido" && resultadoAsig != "error_token")
            {
                res = JToken.Parse(resultadoAsig);
                string msj        = res.Mensaje;
                string numConfirm = res.Numconfirmacion;
                string valorPagar = res.Valor;
                if (!string.IsNullOrEmpty(numConfirm))
                {
                    resultAgendamiento = true;
                    detalle            = "Cita agendada";
                    estado             = "agendada";
                    serv.UpdateCitaBd(repo, idConv, "valorPagar", valorPagar);
                    serv.UpdateCitaBd(repo, idConv, "idCita", numConfirm);
                }
                else if (!string.IsNullOrEmpty(msj))
                {
                    resultAgendamiento = false;
                    estado             = "error_agendamiento";
                    detalle            = res.Mensaje;
                }
                else
                {
                    resultAgendamiento = false;
                    estado             = "error_desconocido";
                    detalle            = resultadoAsig;
                }
            }
            else
            {
                resultAgendamiento = false;
                estado             = resultadoAsig;
                detalle            = resultadoAsig;
            }
            Dictionary <string, object> paramLog = new Dictionary <string, object>()
            {
                { "tipoTransaccion", "agendamiento" },
                { "fechaTransaccion", Convert.ToDateTime(string.Format("{0:yyyy-MM-dd HH:mm:ss}", DateTime.Now)) },
                { "exitoso", resultAgendamiento },
                { "detalle", detalle },
                { "sessionId", idConv },
                { "celular", numeroCelular },
                { "traza", "log" }
            };

            log.GuardarLogCitaAgendada(paramLog);
            serv.SaveCitaNoTemp(repo, idConv, (int)infoCita.numEspacioCita, "agendamiento", estado);
        }