示例#1
0
        public IList <TimeSpan> ObterHorariosDisponiveis(Guid especialidadeId, DateTime dataDaConsulta, Guid?medicoId = null)
        {
            var medicos = Entidades.Include(_ => _.Medicos)
                          .Include($"{nameof(Especialidade.Medicos)}.{nameof(MedicoEspecialidade.Medico)}")
                          .Include($"{nameof(Especialidade.Medicos)}.{nameof(MedicoEspecialidade.Medico)}.{nameof(Medico.HorariosDeTrabalho)}")
                          .Include($"{nameof(Especialidade.Medicos)}.{nameof(MedicoEspecialidade.Medico)}.{nameof(Medico.Usuario)}")
                          .Where(_ => _.Id == especialidadeId)
                          .Where(_ => _.Medicos.Any(_ => _.Medico.HorariosDeTrabalho.Any(_ => _.DiaDaSemana == dataDaConsulta.DayOfWeek)))
                          .Where(_ => _.Medicos.Any(_ => _.Ativo) && _.Medicos.Any(_ => _.Medico.Usuario.Ativo))
                          .SelectMany(_ => _.Medicos);
            var consultas = _consultaServico.ObterTudoComFiltros(dataDaConsulta, dataDaConsulta.AddMinutes(1439), null, new[] { EStatusConsulta.Agendada, EStatusConsulta.Reagendada }, medicoId);

            if (medicoId.HasValue && medicoId != Guid.Empty)
            {
                medicos = medicos.Where(_ => _.MedicoId == medicoId.GetValueOrDefault() || _.Medico.Usuario.Id == medicoId.GetValueOrDefault());
            }

            var horarios = medicos.SelectMany(_ => _.Medico.HorariosDeTrabalho)
                           .Where(_ => _.DiaDaSemana == dataDaConsulta.DayOfWeek && _.Ativo);
            var horariosDisponiveis = HorariosDisponiveis(horarios).ToList();

            RemoveHorariosIndisponiveis(ref horariosDisponiveis, horarios, consultas);

            return(horariosDisponiveis);
        }
        public IList <ConsultaDTO> ObterTudo(DateTime dataInicio, DateTime dataFim, string busca, string status, Guid?medicoId = null)
        {
            List <Consulta> entidades;

            if (!string.IsNullOrEmpty(status))
            {
                var listaEStatusConsulta = status.StringParaListaDeStatusConsulta();
                entidades = _consultaServico.ObterTudoComFiltros(dataInicio, dataFim, busca, listaEStatusConsulta, medicoId).ToList();
            }
            else
            {
                entidades = _consultaServico.ObterTudoComFiltros(dataInicio, dataFim, busca, null, medicoId).ToList();
            }

            return(_mapper.Map <List <ConsultaDTO> >(entidades));
        }