### Eclipse Workspace Patch 1.0 #P openmrs Index: api/src/test/java/org/openmrs/api/PatientSetServiceTest.java =================================================================== --- api/src/test/java/org/openmrs/api/PatientSetServiceTest.java (revision 28561) +++ api/src/test/java/org/openmrs/api/PatientSetServiceTest.java (working copy) @@ -38,8 +38,10 @@ import org.openmrs.Location; import org.openmrs.Obs; import org.openmrs.PatientProgram; +import org.openmrs.PatientState; import org.openmrs.Person; import org.openmrs.Program; +import org.openmrs.ProgramWorkflow; import org.openmrs.ProgramWorkflowState; import org.openmrs.Relationship; import org.openmrs.RelationshipType; @@ -382,4 +384,18 @@ Assert.assertEquals("Xanadu", ret.get(7)); Assert.assertEquals("Xanadu", ret.get(8)); } + + /** + * @see {@link PatientSetService#getCurrentStates(Cohort, ProgramWorkflow)} + */ + @Test + @Verifies(value = "should return an empty list if cohort is empty", method = "getCurrentStates(Cohort, ProgramWorkflow)") + public void getCurrentStates_shouldReturnAnEmptyListIfCohortIsEmpty() throws Exception { + Cohort nobody = new Cohort(); + ProgramWorkflowService pws = Context.getProgramWorkflowService(); + ProgramWorkflow one = pws.getWorkflow(1); + + Map results = Context.getPatientSetService().getCurrentStates(nobody, one); + Assert.assertEquals(results.size(), 0); + } } Index: api/src/main/java/org/openmrs/api/db/hibernate/HibernatePatientSetDAO.java =================================================================== --- api/src/main/java/org/openmrs/api/db/hibernate/HibernatePatientSetDAO.java (revision 28561) +++ api/src/main/java/org/openmrs/api/db/hibernate/HibernatePatientSetDAO.java (working copy) @@ -1762,27 +1762,29 @@ public Map getCurrentStates(Cohort ps, ProgramWorkflow wf) throws DAOException { Map ret = new HashMap(); - Date now = new Date(); - - Criteria criteria = sessionFactory.getCurrentSession().createCriteria(PatientState.class); - criteria.setFetchMode("patient", FetchMode.JOIN); - criteria.setCacheMode(CacheMode.IGNORE); - //criteria.add(Restrictions.in("patientProgram.patient.personId", ids)); - - // only include this where clause if patients were passed in - if (ps != null) - criteria.createCriteria("patientProgram").add(Restrictions.in("patient.personId", ps.getMemberIds())); - - //criteria.add(Restrictions.eq("state.programWorkflow", wf)); - criteria.createCriteria("state").add(Restrictions.eq("programWorkflow", wf)); - criteria.add(Restrictions.eq("voided", false)); - criteria.add(Restrictions.or(Restrictions.isNull("startDate"), Restrictions.le("startDate", now))); - criteria.add(Restrictions.or(Restrictions.isNull("endDate"), Restrictions.ge("endDate", now))); - log.debug("criteria: " + criteria); - List temp = criteria.list(); - for (PatientState state : temp) { - Integer ptId = state.getPatientProgram().getPatient().getPatientId(); - ret.put(ptId, state); + if ((ps != null && ps.getMemberIds().size() > 0) || ps == null) { + Date now = new Date(); + + Criteria criteria = sessionFactory.getCurrentSession().createCriteria(PatientState.class); + criteria.setFetchMode("patient", FetchMode.JOIN); + criteria.setCacheMode(CacheMode.IGNORE); + //criteria.add(Restrictions.in("patientProgram.patient.personId", ids)); + + // only include this where clause if patients were passed in + if (ps != null) + criteria.createCriteria("patientProgram").add(Restrictions.in("patient.personId", ps.getMemberIds())); + + //criteria.add(Restrictions.eq("state.programWorkflow", wf)); + criteria.createCriteria("state").add(Restrictions.eq("programWorkflow", wf)); + criteria.add(Restrictions.eq("voided", false)); + criteria.add(Restrictions.or(Restrictions.isNull("startDate"), Restrictions.le("startDate", now))); + criteria.add(Restrictions.or(Restrictions.isNull("endDate"), Restrictions.ge("endDate", now))); + log.debug("criteria: " + criteria); + List temp = criteria.list(); + for (PatientState state : temp) { + Integer ptId = state.getPatientProgram().getPatient().getPatientId(); + ret.put(ptId, state); + } } return ret;