=== modified file 'dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/event/BaseEventService.java' --- dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/event/BaseEventService.java 2013-09-02 17:02:33 +0000 +++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/event/BaseEventService.java 2013-09-03 08:42:56 +0000 @@ -355,18 +355,10 @@ @Override public Events getEvents( Program program, OrganisationUnit organisationUnit ) { + ProgramStage programStage = program.getProgramStageByStage( 1 ); + List eventList = eventStore.getAll( program, programStage, organisationUnit ); Events events = new Events(); - - ProgramStage programStage = program.getProgramStageByStage( 1 ); - - List programStageInstances; - - programStageInstances = new ArrayList( - programStageInstanceService.getProgramStageInstances( programStage, organisationUnit ) ); - - List convertedEvents = convertProgramStageInstances( programStageInstances ); - - events.setEvents( convertedEvents ); + events.setEvents( eventList ); return events; } @@ -379,13 +371,6 @@ Events events = new Events(); events.setEvents( eventList ); - /* - List programStageInstances = new ArrayList( - programStageInstanceService.getProgramStageInstances( programStage, organisationUnit, start, end ) ); - - List convertedEvents = convertProgramStageInstances( programStageInstances ); - */ - return events; } @@ -412,7 +397,7 @@ return; } - OrganisationUnit organisationUnit = null; + OrganisationUnit organisationUnit; if ( event.getOrgUnit() != null ) { === modified file 'dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/event/DefaultEventStore.java' --- dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/event/DefaultEventStore.java 2013-09-02 17:02:33 +0000 +++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/event/DefaultEventStore.java 2013-09-03 08:42:56 +0000 @@ -28,14 +28,17 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +import org.hisp.dhis.common.IdentifiableObject; import org.hisp.dhis.organisationunit.OrganisationUnit; import org.hisp.dhis.program.Program; import org.hisp.dhis.program.ProgramStage; +import org.hisp.dhis.system.util.TextUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.support.rowset.SqlRowSet; import java.util.ArrayList; +import java.util.Arrays; import java.util.Date; import java.util.List; @@ -48,10 +51,29 @@ private JdbcTemplate jdbcTemplate; @Override + public List getAll( Program program, OrganisationUnit organisationUnit ) + { + return getAll( Arrays.asList( program ), new ArrayList(), Arrays.asList( organisationUnit ), null, null ); + } + + @Override + public List getAll( Program program, ProgramStage programStage, OrganisationUnit organisationUnit ) + { + return getAll( Arrays.asList( program ), Arrays.asList( programStage ), Arrays.asList( organisationUnit ), null, null ); + } + + @Override public List getAll( Program program, ProgramStage programStage, OrganisationUnit organisationUnit, Date startDate, Date endDate ) { + return getAll( Arrays.asList( program ), Arrays.asList( programStage ), Arrays.asList( organisationUnit ), startDate, endDate ); + } + + @Override + public List getAll( List programs, List programStages, List organisationUnits, Date startDate, Date endDate ) + { List events = new ArrayList(); - String sql = buildSql( programStage.getId(), organisationUnit.getId(), startDate.toString(), endDate.toString() ); + String sql = buildSql( getIdList( programs ), getIdList( programStages ), getIdList( organisationUnits ), + startDate, endDate ); SqlRowSet rowSet = jdbcTemplate.queryForRowSet( sql ); @@ -66,8 +88,8 @@ event.setCompleted( rowSet.getBoolean( "psi_completed" ) ); event.setEvent( rowSet.getString( "psi_uid" ) ); - event.setProgram( program.getUid() ); - event.setProgramStage( programStage.getUid() ); + event.setProgram( rowSet.getString( "p_uid" ) ); + event.setProgramStage( rowSet.getString( "ps_uid" ) ); event.setStoredBy( rowSet.getString( "psi_completeduser" ) ); event.setOrgUnit( rowSet.getString( "ou_uid" ) ); event.setEventDate( rowSet.getString( "psi_executiondate" ) ); @@ -86,17 +108,87 @@ return events; } - private String buildSql( int programStageId, int orgUnitId, String startDate, String endDate ) - { - String sql = "select psi.uid as psi_uid, ou.uid as ou_uid, psi.executiondate as psi_executiondate," + + private List getIdList( IdentifiableObject identifiableObject ) + { + if ( identifiableObject != null ) + { + return Arrays.asList( identifiableObject.getId() ); + } + + return new ArrayList(); + } + + private List getIdList( List identifiableObjects ) + { + List integers = new ArrayList(); + + for ( IdentifiableObject identifiableObject : identifiableObjects ) + { + integers.add( identifiableObject.getId() ); + } + + return integers; + } + + private String buildSql( List programIds, List programStageIds, List orgUnitIds, Date startDate, Date endDate ) + { + String sql = "select p.uid as p_uid, ps.uid as ps_uid, psi.uid as psi_uid, ou.uid as ou_uid, psi.executiondate as psi_executiondate," + " psi.completeduser as psi_completeduser, psi.completed as psi_completed," + " pdv.value as pdv_value, pdv.providedelsewhere as pdv_providedelsewhere, de.uid as de_uid" + - " from programstageinstance psi" + - " left join organisationunit ou on (psi.organisationunitid=ou.organisationunitid and ou.organisationunitid=" + orgUnitId + ")" + + " from program p" + + " left join programstage ps on ps.programid=p.programid" + + " left join programstageinstance psi on ps.programstageid=psi.programstageid" + + " left join organisationunit ou on (psi.organisationunitid=ou.organisationunitid)" + " left join patientdatavalue pdv on psi.programstageinstanceid=pdv.programstageinstanceid" + - " left join dataelement de on pdv.dataelementid=de.dataelementid" + - " where psi.programstageid=" + programStageId + - " and (psi.executiondate >= '" + startDate + "' and psi.executiondate <= '" + endDate + "') order by psi_uid"; + " left join dataelement de on pdv.dataelementid=de.dataelementid "; + + boolean startedWhere = false; + + if ( !programIds.isEmpty() ) + { + if ( startedWhere ) + { + sql += " and p.programid in (" + TextUtils.getCommaDelimitedString( programIds ) + ") "; + } + else + { + sql += " where p.programid in (" + TextUtils.getCommaDelimitedString( programIds ) + ") "; + startedWhere = true; + } + } + + if ( !programStageIds.isEmpty() ) + { + if ( startedWhere ) + { + sql += " and ps.programstageid in (" + TextUtils.getCommaDelimitedString( programStageIds ) + ") "; + } + else + { + sql += " where ps.programstageid in (" + TextUtils.getCommaDelimitedString( programStageIds ) + ") "; + startedWhere = true; + } + } + + if ( !orgUnitIds.isEmpty() ) + { + if ( startedWhere ) + { + sql += " and ou.organisationunitid in (" + TextUtils.getCommaDelimitedString( orgUnitIds ) + ") "; + } + else + { + sql += " where ou.organisationunitid in (" + TextUtils.getCommaDelimitedString( orgUnitIds ) + ") "; + startedWhere = true; + } + } + + if ( startDate != null && endDate != null ) + { + sql += " and (psi.executiondate >= '" + startDate.toString() + "' and psi.executiondate <= '" + endDate.toString() + "') "; + } + + sql += " order by psi_uid;"; return sql; } === modified file 'dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/event/EventStore.java' --- dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/event/EventStore.java 2013-09-02 17:02:33 +0000 +++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/event/EventStore.java 2013-09-03 08:42:56 +0000 @@ -40,5 +40,12 @@ */ public interface EventStore { + List getAll( Program program, OrganisationUnit organisationUnit ); + + List getAll( Program program, ProgramStage programStage, OrganisationUnit organisationUnit ); + List getAll( Program program, ProgramStage programStage, OrganisationUnit organisationUnit, Date startDate, Date endDate ); + + List getAll( List programs, List programStages, List organisationUnits, + Date startDate, Date endDate ); }