Ejemplo n.º 1
0
 public HttpResponseMessage GerarAgenda(GerarAgendaViewModel model)
 {
     try
     {
         _serviceAgenda.GerarAgenda(model, base.GetUsuarioLogado().IdClinica, base.GetUsuarioLogado());
         return(Request.CreateResponse(HttpStatusCode.OK));
     }
     catch (Exception ex)
     {
         return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ex.Message));
     }
 }
Ejemplo n.º 2
0
        public void GerarAgenda(GerarAgendaViewModel model, int idClinica, Usuario usuario)
        {
            TimeSpan ts = (model.DataFim - model.DataInicio);

            if (ts.Days > 365)
            {
                throw new Exception(" Somente permitido informar períodos menores ou igual a um ano!");
            }

            if (ts.Days <= 0)
            {
                throw new Exception(" Período inválido ");
            }

            //verifica se tem bloqueio de data para gerar a agenda
            // _repository.ObterBloqueioAgenda()

            //verifico se tem agenda cadastrada no periodo selecionado
            var agenda = _repository.PesquisarAgenda(null, model.IdProfissional, string.Empty, model.DataInicio, model.DataFim, idClinica, model.IdUnidadeAtendimento, string.Empty).ToList();

            if (agenda.Count > 0)
            {
                var aguardando = agenda.Where(x => x.Situacao == "Marcado" && x.Situacao == "Realizado");
                //excluo a agenda e crio novamente, depois marco os horários que já estavam selecionado
                _repository.ExcluirAgenda(agenda);

                var datasSemana = new List <DateTime>();
                while (model.DataInicio <= model.DataFim)
                {
                    datasSemana.Add(model.DataInicio);
                    model.DataInicio = model.DataInicio.AddDays(1);
                }

                //obtem o profissional da agenda
                var profissional = _caRepository.ObterFuncionarioById(model.IdProfissional);
                //obtem a clinica da agenda
                var clinica = _caRepository.ObterClinicaById(idClinica);

                var novo = new List <Agenda>();

                foreach (var item in model.AgendaMedica)
                {
                    var HoraInicio  = item.HoraInicio.ToString().Split(':');
                    var HoraTermino = item.HoraTermino.ToString().Split(':');

                    DateTime TempoInicio  = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, Convert.ToInt32(HoraInicio[0]), Convert.ToInt32(HoraInicio[1]), 00);
                    DateTime TempoTermino = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, Convert.ToInt32(HoraTermino[0]), Convert.ToInt32(HoraTermino[1]), 00);

                    double intervaloMinutos = item.IntervaloMinutos;

                    List <DateTime> arrHorario = new List <DateTime>();
                    while (TempoInicio <= TempoTermino)
                    {
                        arrHorario.Add(TempoInicio);
                        TempoInicio = TempoInicio.AddHours(0).AddMinutes(intervaloMinutos).AddSeconds(0);
                    }

                    if (item.IntervaloInicio != null && item.IntervaloTermino != null)
                    {
                        var      IntInicio        = item.IntervaloInicio.ToString().Split(':');
                        var      Inttermino       = item.IntervaloTermino.ToString().Split(':');
                        DateTime IntervaloInicio  = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, Convert.ToInt32(IntInicio[0]), Convert.ToInt32(IntInicio[1]), 00);
                        DateTime IntervaloTermino = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, Convert.ToInt32(Inttermino[0]), Convert.ToInt32(Inttermino[1]), 00);

                        List <DateTime> arrIntervalo = new List <DateTime>();
                        while (IntervaloInicio < IntervaloTermino)
                        {
                            arrIntervalo.Add(IntervaloInicio);
                            IntervaloInicio = IntervaloInicio.AddHours(0).AddMinutes(intervaloMinutos).AddSeconds(0);
                        }
                        var listaAgendaAguardando = arrHorario.Where(x => !arrIntervalo.Contains(x)).ToList();

                        //aqui só pego as datas(ex: somentes as segundas entre as datas selecionadas) referentes ao dia da semana escolhido
                        var datadodia = datasSemana.Where(s => s.DayOfWeek == RetornaDiaSemana(item.Dia));

                        if (model.IdUnidadeAtendimento > 0)
                        {
                            var unidade = _caRepository.ObterUnidadeAtendimentoPorId(model.IdUnidadeAtendimento);

                            foreach (var data in datadodia)
                            {
                                foreach (var _item in listaAgendaAguardando)
                                {
                                    novo.Add(new Agenda(data, _item.TimeOfDay, profissional, clinica, usuario, unidade));
                                }
                            }
                        }
                        else
                        {
                            foreach (var data in datadodia)
                            {
                                foreach (var _item in listaAgendaAguardando)
                                {
                                    novo.Add(new Agenda(data, _item.TimeOfDay, profissional, clinica, usuario));
                                }
                            }
                        }
                    }
                    else
                    {
                        var listaAgendaAguardando = arrHorario.ToList();

                        var datadodia = datasSemana.Where(s => s.DayOfWeek == RetornaDiaSemana(item.Dia));

                        if (model.IdUnidadeAtendimento > 0)
                        {
                            var unidade = _caRepository.ObterUnidadeAtendimentoPorId(model.IdUnidadeAtendimento);
                            foreach (var data in datadodia)
                            {
                                foreach (var _item in listaAgendaAguardando)
                                {
                                    novo.Add(new Agenda(data, _item.TimeOfDay, profissional, clinica, usuario, unidade));
                                }
                            }
                        }
                        else
                        {
                            foreach (var data in datadodia)
                            {
                                foreach (var _item in listaAgendaAguardando)
                                {
                                    novo.Add(new Agenda(data, _item.TimeOfDay, profissional, clinica, usuario));
                                }
                            }
                        }
                    }
                }
                //agora pego a nova agenda e coloco os horarios que estavam marcados anteriormente
                foreach (var item in aguardando)
                {
                    var horariomarcado = novo.Where(x => x.Data == item.Data && x.Hora == item.Hora).FirstOrDefault();
                    if (horariomarcado != null)
                    {
                        horariomarcado.SetSituacao("Marcado");
                        horariomarcado.SetUsuarioMarcado(item.UsuarioMarcado);
                        horariomarcado.DataMarcado = DateTime.Now;
                        horariomarcado.SetPaciente(item.Paciente);
                        horariomarcado.SetProfissionalSaude(item.ProfissionalSaude);
                        horariomarcado.SetEspecialidade(item.Especialidade);
                        horariomarcado.SetProcedimento(item.Procedimento);
                        horariomarcado.SetValor((decimal)item.Valor);
                        horariomarcado.SetTipoAgendamento(item.Tipo);
                        horariomarcado.SetValorProfissional((decimal)item.ValorProfissional);
                        horariomarcado.SetTipoAtendimento(item.TipoAtendimento);
                        horariomarcado.SetObservacao(item.Observacao);
                        horariomarcado.SetConvenio(item.Convenio);
                        horariomarcado.SetSalaEspera("Nao");
                    }
                }
                _repository.SalvarAgendaCompleta(novo);
            }
            else
            {
                var datasSemana = new List <DateTime>();
                while (model.DataInicio <= model.DataFim)
                {
                    datasSemana.Add(model.DataInicio);
                    model.DataInicio = model.DataInicio.AddDays(1);
                }

                //obtem o profissional da agenda
                var profissional = _caRepository.ObterFuncionarioById(model.IdProfissional);
                //obtem a clinica da agenda
                var clinica = _caRepository.ObterClinicaById(idClinica);

                var novo = new List <Agenda>();

                foreach (var item in model.AgendaMedica)
                {
                    var HoraInicio  = item.HoraInicio.ToString().Split(':');
                    var HoraTermino = item.HoraTermino.ToString().Split(':');

                    DateTime TempoInicio  = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, Convert.ToInt32(HoraInicio[0]), Convert.ToInt32(HoraInicio[1]), 00);
                    DateTime TempoTermino = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, Convert.ToInt32(HoraTermino[0]), Convert.ToInt32(HoraTermino[1]), 00);

                    double intervaloMinutos = item.IntervaloMinutos;

                    List <DateTime> arrHorario = new List <DateTime>();
                    while (TempoInicio <= TempoTermino)
                    {
                        arrHorario.Add(TempoInicio);
                        TempoInicio = TempoInicio.AddHours(0).AddMinutes(intervaloMinutos).AddSeconds(0);
                    }

                    if (item.IntervaloInicio != null && item.IntervaloTermino != null)
                    {
                        var      IntInicio        = item.IntervaloInicio.ToString().Split(':');
                        var      Inttermino       = item.IntervaloTermino.ToString().Split(':');
                        DateTime IntervaloInicio  = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, Convert.ToInt32(IntInicio[0]), Convert.ToInt32(IntInicio[1]), 00);
                        DateTime IntervaloTermino = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, Convert.ToInt32(Inttermino[0]), Convert.ToInt32(Inttermino[1]), 00);

                        List <DateTime> arrIntervalo = new List <DateTime>();
                        while (IntervaloInicio < IntervaloTermino)
                        {
                            arrIntervalo.Add(IntervaloInicio);
                            IntervaloInicio = IntervaloInicio.AddHours(0).AddMinutes(intervaloMinutos).AddSeconds(0);
                        }
                        var listaAgendaAguardando = arrHorario.Where(x => !arrIntervalo.Contains(x)).ToList();

                        //aqui só pego as datas(ex: somentes as segundas entre as datas selecionadas) referentes ao dia da semana escolhido
                        var datadodia = datasSemana.Where(s => s.DayOfWeek == RetornaDiaSemana(item.Dia)).ToList();
                        if (model.IdUnidadeAtendimento > 0)
                        {
                            var unidade = _caRepository.ObterUnidadeAtendimentoPorId(model.IdUnidadeAtendimento);

                            foreach (var data in datadodia)
                            {
                                foreach (var _item in listaAgendaAguardando)
                                {
                                    novo.Add(new Agenda(data, _item.TimeOfDay, profissional, clinica, usuario, unidade));
                                }
                            }
                        }
                        else
                        {
                            foreach (var data in datadodia)
                            {
                                foreach (var _item in listaAgendaAguardando)
                                {
                                    novo.Add(new Agenda(data, _item.TimeOfDay, profissional, clinica, usuario));
                                }
                            }
                        }
                    }
                    else
                    {
                        var listaAgendaAguardando = arrHorario.ToList();

                        var datadodia = datasSemana.Where(s => s.DayOfWeek == RetornaDiaSemana(item.Dia));

                        if (model.IdUnidadeAtendimento > 0)
                        {
                            var unidade = _caRepository.ObterUnidadeAtendimentoPorId(model.IdUnidadeAtendimento);

                            foreach (var data in datadodia)
                            {
                                foreach (var _item in listaAgendaAguardando)
                                {
                                    novo.Add(new Agenda(data, _item.TimeOfDay, profissional, clinica, usuario, unidade));
                                }
                            }
                        }
                        else
                        {
                            foreach (var data in datadodia)
                            {
                                foreach (var _item in listaAgendaAguardando)
                                {
                                    novo.Add(new Agenda(data, _item.TimeOfDay, profissional, clinica, usuario));
                                }
                            }
                        }
                    }
                    //_repository.SalvarAgendaCompleta(novo);
                }
                _repository.SalvarAgendaCompleta(novo);
            }
        }