package br.com.doctors.converters.agendamento; import java.util.List; import org.joda.time.LocalDate; import org.joda.time.LocalTime; import br.com.doctors.dao.agendamento.AgendamentoDao; import br.com.doctors.modelo.agendamento.Agendamento; import br.com.doctors.modelo.util.ParametrosAgendamento; public class HorarioConverter { private ParametrosAgendamento parametros; private AgendamentoDao daoAgendamento; private LocalTime horarioInicial; private LocalTime horarioFinal; public HorarioConverter(ParametrosAgendamento parametros, AgendamentoDao daoAgendamento) { this.parametros = parametros; this.daoAgendamento = daoAgendamento; this.horarioInicial = parametros.getHoraInicioAtendimento(); this.horarioFinal = parametros.getHoraFimAtendimento(); } @SuppressWarnings("unchecked") public List<HorarioJsonImpl> getAgenda(Long idMedico, LocalDate data){ List<Agendamento> listAgendamentos = getAgendamentos(idMedico, data); AgendaDoDia agenda = new AgendaDoDia(listAgendamentos, data); AgendaJson agendaJson = preencheAgendaJson(agenda, new AgendaJsonImpl(parametros, data)); return (List<HorarioJsonImpl>) agendaJson.getHorariosJSON(); } @SuppressWarnings("unchecked") public List<HorarioJsonSimples> getHorariosLivres(Long idMedico, LocalDate data){ List<Agendamento> listAgendamentos = getAgendamentos(idMedico, data); AgendaDoDia agenda = new AgendaDoDia(listAgendamentos,data); AgendaJson agendaLivres = preencheAgendaJson(agenda, new AgendaJsonHorariosLivres(parametros, data)); return (List<HorarioJsonSimples>) agendaLivres.getHorariosJSON(); } private AgendaJson preencheAgendaJson(AgendaDoDia agenda, AgendaJson agendaJson) { LocalTime horaAtual = getHoraInicioExpediente(); while(estiverNoExpediente(horaAtual)){ if (!estaNoHorarioAlmoco(horaAtual)){ agendaJson.addHorario(agenda, horaAtual); } horaAtual = proximoHorario(horaAtual); } return agendaJson; } private List<Agendamento> getAgendamentos(Long idMedico, LocalDate data) { return daoAgendamento.agendamentosPara(idMedico, data); } private LocalTime proximoHorario(LocalTime horaAtual) { return parametros.proximaConsultaApos(horaAtual); } private boolean estiverNoExpediente(LocalTime horaAtual) { return !horaAtual.isAfter(horarioFinal); } private LocalTime getHoraInicioExpediente() { return new LocalTime(horarioInicial); } private boolean estaNoHorarioAlmoco(LocalTime horaAtual) { return parametros.estaNoHorarioAlmoco(horaAtual); } }