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)); }