package br.com.doctors.dao.agendamento;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Restrictions;
import org.joda.time.LocalDate;
import br.com.caelum.vraptor.ioc.Component;
import br.com.doctors.dao.util.DaoImpl;
import br.com.doctors.modelo.agendamento.Agendamento;
import br.com.doctors.modelo.consultas.Consulta;
@Component
public class AgendamentoDao extends DaoImpl<Agendamento>{
public AgendamentoDao(Session session) {
super(session, Agendamento.class);
}
/***
* Carrega agendamentos entre [amanh� - +2 meses pra frente]
* @param idMedico
* @return
*/
public List<Agendamento> agendamentosPara(Long idMedico, LocalDate dataAgendamentos){
Criteria criteria = getSession().createCriteria(Agendamento.class)
.add(Restrictions.eq("dataAgendamento", dataAgendamentos))
.createCriteria("medico").add(Restrictions.idEq(idMedico))
.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
return criteria.list();
}
// pesquisa por m�dico
// pesquisa por paciente
public List<Agendamento> agendamentosPara(Long idMedico, Long idPaciente,
LocalDate dataInicial, LocalDate dataFinal) {
// Criteria criteria = getSession().createCriteria(Agendamento.class)
// .add(Restrictions.between("dataAgendamento", dataInicial, dataFinal))
// .createCriteria("medico").add(Restrictions.idEq(idMedico))
// .createCriteria("paciente").add(Restrictions.idEq(idPaciente))
// .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
// return criteria.list();
Query q = getSession().
createQuery("from Agendamento a where a.dataAgendamento>=:dataInicial and a.dataAgendamento <=:dataFinal " +
"and a.medico.id=:idMedico and a.paciente.id=:idPaciente and a.consulta is not null");
q.setParameter("dataInicial", dataInicial);
q.setParameter("dataFinal", dataFinal);
q.setParameter("idMedico", idMedico);
q.setParameter("idPaciente", idPaciente);
return q.list();
}
public List<Agendamento> agendamentosPara(Long idPaciente, LocalDate dataInicial, LocalDate dataFinal) {
Criteria criteria = getSession().createCriteria(Agendamento.class)
.add(Restrictions.between("dataAgendamento", dataInicial, dataFinal))
.add(Restrictions.isNotNull("consulta"))
.createCriteria("paciente").add(Restrictions.idEq(idPaciente))
.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
return criteria.list();
}
}