public IActionResult Delete(int id, PesquisaExameViewModel pesquisaExame, IFormCollection collection)
        {
            var exame = _exameContext.GetById(id);

            try
            {
                _exameContext.Delete(id);

                var situacoes               = _situacaoPessoaContext.GetByIdPaciente(exame.Paciente.Idpessoa);
                var exames                  = _exameContext.GetByIdPaciente(exame.Paciente.Idpessoa);
                var pessoaTrabalhaEstado    = _pessoaTrabalhaEstadoContext.GetByIdPessoa(exame.Paciente.Idpessoa);
                var pessoaTrabalhaMunicipio = _pessoaTrabalhaMunicipioContext.GetByIdPessoa(exame.Paciente.Idpessoa);
                var examesPaciente          = _exameContext.GetByIdPaciente(exame.Paciente.Idpessoa);
                var examesNotificados       = _exameContext.GetByIdAgente(exame.Paciente.Idpessoa, DateTime.MinValue, DateTime.MaxValue);
                if (situacoes.Count == 1 && pessoaTrabalhaEstado == null && pessoaTrabalhaMunicipio == null &&
                    examesPaciente.Count == 0 && examesNotificados.Count == 0)
                {
                    var situacao = situacoes.First();
                    _situacaoPessoaContext.Delete(situacao.Idpessoa, situacao.IdVirusBacteria);
                    _pessoaContext.Delete(exame.Paciente.Idpessoa);
                }
            }
            catch
            {
                TempData["mensagemErro"] = "Houve problemas na exclusão do exame. Tente novamente em alguns minutos." +
                                           " Se o erro persistir, entre em contato com a Fábrica de Software da UFS pelo email [email protected]";
                return(RedirectToAction("Index", "Exame", pesquisaExame));
            }

            TempData["mensagemSucesso"] = "O Exame foi removido com sucesso!";
            return(RedirectToAction("Index", "Exame", pesquisaExame));
        }
        public async Task <IActionResult> EnviarSMS(int id, PesquisaExameViewModel pesquisaExame, IFormCollection collection)
        {
            ExameViewModel exameView         = _exameContext.GetById(id);
            var            usuario           = _usuarioContext.RetornLoggedUser((ClaimsIdentity)User.Identity);
            var            trabalhaMunicipio = _pessoaTrabalhaMunicipioContext.GetByIdPessoa(usuario.UsuarioModel.IdPessoa);
            var            trabalhaEstado    = _pessoaTrabalhaEstadoContext.GetByIdPessoa(usuario.UsuarioModel.IdPessoa);

            try
            {
                string     statusAnteriorSMS = exameView.Exame.StatusNotificacao;
                ExameModel exame             = exameView.Exame;
                if (new Util.TelefoneCelularAttribute().IsValid(exameView.Paciente.FoneCelular))
                {
                    if (exame.StatusNotificacao.Equals(ExameModel.NOTIFICADO_ENVIADO))
                    {
                        exame = await _smsService.ConsultarSMSExameAsync(trabalhaEstado, trabalhaMunicipio, exame);
                    }
                    else if (exame.StatusNotificacao.Equals(ExameModel.NOTIFICADO_NAO) || exame.StatusNotificacao.Equals(ExameModel.NOTIFICADO_PROBLEMAS))
                    {
                        exame = await _smsService.EnviarSMSResultadoExameAsync(trabalhaEstado, trabalhaMunicipio, exame, exameView.Paciente);
                    }
                }
                if (statusAnteriorSMS.Equals(ExameModel.NOTIFICADO_ENVIADO) && exame.StatusNotificacao.Equals(ExameModel.NOTIFICADO_SIM))
                {
                    TempData["mensagemSucesso"] = "SMS foi entregue com SUCESSO!";
                }
                else if (statusAnteriorSMS.Equals(ExameModel.NOTIFICADO_NAO) && exame.StatusNotificacao.Equals(ExameModel.NOTIFICADO_ENVIADO))
                {
                    TempData["mensagemSucesso"] = "SMS enviado com SUCESSO!";
                }
                else if (statusAnteriorSMS.Equals(ExameModel.NOTIFICADO_NAO) && exame.StatusNotificacao.Equals(ExameModel.NOTIFICADO_NAO))
                {
                    TempData["mensagemErro"] = "Ocorreram problemas no envio do SMS. Favor conferir telefone e repetir operação em alguns minutos.";
                }
                else if (statusAnteriorSMS.Equals(ExameModel.NOTIFICADO_ENVIADO) && exame.StatusNotificacao.Equals(ExameModel.NOTIFICADO_ENVIADO))
                {
                    TempData["mensagemErro"] = "Ainda aguardando resposta da operadora. Favor repetir a consulta em alguns minutos.";
                }
                else if (statusAnteriorSMS.Equals(ExameModel.NOTIFICADO_ENVIADO) && exame.StatusNotificacao.Equals(ExameModel.NOTIFICADO_PROBLEMAS))
                {
                    TempData["mensagemErro"] = "Operadora não conseguiu entregar o SMS. Favor conferir telefone e repetir envio em alguns minutos.";
                }
            } catch (ServiceException se)
            {
                TempData["mensagemErro"] = se.Message;
            }

            return(RedirectToAction("Notificate", "Exame", pesquisaExame));
        }
        public PesquisaExameViewModel PreencheTotalizadores(PesquisaExameViewModel examesTotalizados)
        {
            foreach (var item in examesTotalizados.Exames)
            {
                switch (item.Exame.Resultado)
                {
                case ExameModel.RESULTADO_POSITIVO: examesTotalizados.Positivos++; break;

                case ExameModel.RESULTADO_NEGATIVO: examesTotalizados.Negativos++; break;

                case ExameModel.RESULTADO_INDETERMINADO: examesTotalizados.Indeterminados++; break;

                case ExameModel.RESULTADO_RECUPERADO: examesTotalizados.Recuperados++; break;

                case ExameModel.RESULTADO_AGUARDANDO: examesTotalizados.Aguardando++; break;

                case ExameModel.RESULTADO_IGMIGG: examesTotalizados.IgMIgGs++; break;
                }
            }
            return(examesTotalizados);
        }
 public IActionResult Notificate(PesquisaExameViewModel pesquisaExame)
 {
     return(View(BuscaExamesViewModel(pesquisaExame)));
 }
 public IActionResult Index(PesquisaExameViewModel pesquisaExame)
 {
     return(View(BuscaExamesViewModel(pesquisaExame)));
 }
        public PesquisaExameViewModel BuscaExamesViewModel(PesquisaExameViewModel pesquisaExame)
        {
            var usuario = _usuarioContext.RetornLoggedUser((ClaimsIdentity)User.Identity);
            var pessoaTrabalhaMunicipio = _pessoaTrabalhaMunicipioContext.GetByIdPessoa(usuario.UsuarioModel.IdPessoa);

            bool dataInicialIndeterminada = pesquisaExame.DataInicial.Equals(DateTime.MinValue);
            var  exames = new List <ExameBuscaModel>();

            if (usuario.RoleUsuario.Equals("AGENTE") || usuario.RoleUsuario.Equals("ADM"))
            {
                if (dataInicialIndeterminada)
                {
                    exames = _exameContext.GetByIdAgente(usuario.UsuarioModel.IdPessoa, 15);
                }
                else
                {
                    exames = _exameContext.GetByIdAgente(usuario.UsuarioModel.IdPessoa, pesquisaExame.DataInicial, pesquisaExame.DataFinal);
                }
            }
            else if (usuario.RoleUsuario.Equals("GESTOR") || usuario.RoleUsuario.Equals("SECRETARIO"))
            {
                if (pessoaTrabalhaMunicipio != null)
                {
                    if (dataInicialIndeterminada)
                    {
                        exames = _exameContext.GetByIdMunicipio(pessoaTrabalhaMunicipio.IdMunicipio, 15);
                    }
                    else
                    {
                        exames = _exameContext.GetByIdMunicipio(pessoaTrabalhaMunicipio.IdMunicipio, pesquisaExame.DataInicial, pesquisaExame.DataFinal);
                    }
                }
                else
                {
                    var pessoaTrabalhaEstado = _pessoaTrabalhaEstadoContext.GetByIdPessoa(usuario.UsuarioModel.IdPessoa);
                    if (pessoaTrabalhaEstado != null)
                    {
                        if (pessoaTrabalhaEstado.IdEmpresaExame != EmpresaExameModel.EMPRESA_ESTADO_MUNICIPIO)
                        {
                            if (dataInicialIndeterminada)
                            {
                                exames = _exameContext.GetByIdEmpresa(pessoaTrabalhaEstado.IdEmpresaExame, 15);
                            }
                            else
                            {
                                exames = _exameContext.GetByIdEmpresa(pessoaTrabalhaEstado.IdEmpresaExame, pesquisaExame.DataInicial, pesquisaExame.DataFinal);
                            }
                        }
                        else
                        {
                            if (dataInicialIndeterminada)
                            {
                                exames = _exameContext.GetByIdEstado(pessoaTrabalhaEstado.IdEstado, 15);
                            }
                            else
                            {
                                exames = _exameContext.GetByIdEstado(pessoaTrabalhaEstado.IdEstado, pesquisaExame.DataInicial, pesquisaExame.DataFinal);
                            }
                        }
                    }
                }
            }
            pesquisaExame.Exames = exames;

            /*
             * 2º Filtro - filtrando ViewModel por nome ou cpf e resultado
             */
            pesquisaExame.Pesquisa  = pesquisaExame.Pesquisa ?? "";
            pesquisaExame.Resultado = pesquisaExame.Resultado ?? "";
            pesquisaExame.Cidade    = pesquisaExame.Cidade ?? "";

            if (!pesquisaExame.Pesquisa.Equals(""))
            {
                if (Methods.SoContemLetras(pesquisaExame.Pesquisa))
                {
                    pesquisaExame.Exames = pesquisaExame.Exames.Where(exameViewModel => exameViewModel.NomePaciente.ToUpper().Contains(pesquisaExame.Pesquisa.ToUpper())).ToList();
                }
                else
                {
                    pesquisaExame.Exames = pesquisaExame.Exames.Where(exameViewModel => exameViewModel.Cpf.ToUpper().Contains(pesquisaExame.Pesquisa.ToUpper())).ToList();
                }
            }

            if (!pesquisaExame.Resultado.Equals("") && !pesquisaExame.Resultado.Equals("Todas as Opçoes"))
            {
                pesquisaExame.Exames = pesquisaExame.Exames.Where(exameViewModel => exameViewModel.Exame.Resultado.ToUpper().Equals(pesquisaExame.Resultado.ToUpper())).ToList();
            }

            if (!pesquisaExame.Cidade.Equals(""))
            {
                pesquisaExame.Exames = pesquisaExame.Exames.Where(exameViewModel => exameViewModel.Cidade.ToUpper().Contains(pesquisaExame.Cidade.ToUpper())).ToList();
            }

            /*
             * Ordenando lista por data e pegando maior e menor datas...
             */
            if (pesquisaExame.Exames.Count > 0)
            {
                pesquisaExame.Exames      = pesquisaExame.Exames.OrderByDescending(ex => ex.Exame.DataExame).ToList();
                pesquisaExame.DataFinal   = pesquisaExame.Exames[0].Exame.DataExame;
                pesquisaExame.DataInicial = pesquisaExame.Exames[pesquisaExame.Exames.Count - 1].Exame.DataExame;
            }

            pesquisaExame.Exames = pesquisaExame.Exames.OrderBy(ex => ex.Exame.CodigoColeta).ToList();
            return(PreencheTotalizadores(pesquisaExame));
        }
        public async Task <IActionResult> ConsultarSMSEnviados(List <ExameViewModel> exames, PesquisaExameViewModel pesquisaExame)
        {
            var usuario           = _usuarioContext.RetornLoggedUser((ClaimsIdentity)User.Identity);
            var trabalhaMunicipio = _pessoaTrabalhaMunicipioContext.GetByIdPessoa(usuario.UsuarioModel.IdPessoa);
            var trabalhaEstado    = _pessoaTrabalhaEstadoContext.GetByIdPessoa(usuario.UsuarioModel.IdPessoa);

            try
            {
                int entregasSucesso    = 0;
                int entregasFalhas     = 0;
                int entregasAguardando = 0;
                foreach (ExameViewModel exame in exames)
                {
                    ExameViewModel exameView = _exameContext.GetById(exame.Exame.IdExame);
                    if (new Util.TelefoneCelularAttribute().IsValid(exameView.Paciente.FoneCelular))
                    {
                        if (exameView.Exame.StatusNotificacao.Equals(ExameModel.NOTIFICADO_ENVIADO))
                        {
                            var exameNotificado = await _smsService.ConsultarSMSExameAsync(trabalhaEstado, trabalhaMunicipio, exameView.Exame);

                            if (exameNotificado.StatusNotificacao.Equals(ExameModel.NOTIFICADO_SIM))
                            {
                                entregasSucesso++;
                            }
                            else if (exameNotificado.StatusNotificacao.Equals(ExameModel.NOTIFICADO_PROBLEMAS))
                            {
                                entregasFalhas++;
                            }
                            else
                            {
                                entregasAguardando++;
                            }
                        }
                    }
                }
                string mensagem = "";
                mensagem += (entregasSucesso > 0) ? "Foram entregues " + entregasSucesso + " SMS com SUCESSO. " : "";
                mensagem += (entregasFalhas > 0) ? "Ocorreram problemas no envio de " + entregasFalhas + " SMS. " : "";
                mensagem += (entregasAguardando > 0) ? "Aguardando resposta da operadora de " + entregasAguardando + " SMS." : "";

                TempData["mensagemSucesso"] = "Consultas aos SMS enviadas com sucesso! " + mensagem;
            } catch (ServiceException se)
            {
                TempData["mensagemErro"] = se.Message;
            }
            return(RedirectToAction("Notificate", "Exame", pesquisaExame));
        }