=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/program/ProgramStageInstanceService.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/program/ProgramStageInstanceService.java 2012-04-17 03:46:23 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/program/ProgramStageInstanceService.java 2012-04-17 04:30:42 +0000 @@ -98,4 +98,6 @@ int countProgramStageInstances( ProgramStage programStage, Map searchingIdenKeys, Map searchingAttrKeys, Map searchingDEKeys, Collection orgunitIds, Date startDate, Date endDate ); List getProgramStageInstancesReport( ProgramInstance programInstance, I18nFormat format, I18n i18n ); + + List getProgramStages( OrganisationUnit orgunit, Program program, Date startDate, Date endDate ); } === modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/program/ProgramStageInstanceStore.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/program/ProgramStageInstanceStore.java 2012-04-11 06:25:02 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/program/ProgramStageInstanceStore.java 2012-04-17 04:30:42 +0000 @@ -77,4 +77,5 @@ int count( ProgramStage programStage, Map searchingIdenKeys, Map searchingAttrKeys, Map searchingKeys, Collection orgunitIds, Date startDate, Date endDate ); + List get( OrganisationUnit orgunit, Program program, Date startDate, Date endDate ); } === modified file 'dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/program/DefaultProgramStageInstanceService.java' --- dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/program/DefaultProgramStageInstanceService.java 2012-04-17 03:46:23 +0000 +++ dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/program/DefaultProgramStageInstanceService.java 2012-04-17 04:30:42 +0000 @@ -336,6 +336,12 @@ return grids; } + public List getProgramStages( OrganisationUnit orgunit, Program program, Date startDate, + Date endDate ) + { + return programStageInstanceStore.get( orgunit, program, startDate, endDate ); + } + // ------------------------------------------------------------------------- // Supportive methods // ------------------------------------------------------------------------- === modified file 'dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/program/hibernate/HibernateProgramStageInstanceStore.java' --- dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/program/hibernate/HibernateProgramStageInstanceStore.java 2012-04-17 03:46:23 +0000 +++ dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/program/hibernate/HibernateProgramStageInstanceStore.java 2012-04-17 04:30:42 +0000 @@ -44,6 +44,7 @@ import org.hisp.dhis.jdbc.StatementBuilder; import org.hisp.dhis.organisationunit.OrganisationUnit; import org.hisp.dhis.patient.Patient; +import org.hisp.dhis.program.Program; import org.hisp.dhis.program.ProgramInstance; import org.hisp.dhis.program.ProgramStage; import org.hisp.dhis.program.ProgramStageInstance; @@ -189,52 +190,61 @@ Map searchingAttrKeys, Map searchingDEKeys, Collection orgunitIds, Date startDate, Date endDate, boolean orderByOrgunitAsc, boolean orderByExecutionDateByAsc, int min, int max ) { - String sql = getTabularReportStatement( false, programStage, searchingIdenKeys, searchingAttrKeys, - searchingDEKeys, orgunitIds, startDate, endDate, orderByOrgunitAsc, orderByExecutionDateByAsc ) - + statementBuilder.limitRecord( min, max ); - - List ids = executeSQL( sql ); - - List programStageInstances = new ArrayList(); - - for ( Integer id : ids ) - { - programStageInstances.add( get( id ) ); - } - - return programStageInstances; + String sql = getTabularReportStatement( false, programStage, searchingIdenKeys, searchingAttrKeys, + searchingDEKeys, orgunitIds, startDate, endDate, orderByOrgunitAsc, orderByExecutionDateByAsc ) + + statementBuilder.limitRecord( min, max ); + + List ids = executeSQL( sql ); + + List programStageInstances = new ArrayList(); + + for ( Integer id : ids ) + { + programStageInstances.add( get( id ) ); + } + + return programStageInstances; } public List get( ProgramStage programStage, Map searchingIdenKeys, Map searchingAttrKeys, Map searchingDEKeys, Collection orgunitIds, Date startDate, Date endDate, boolean orderByOrgunitAsc, boolean orderByExecutionDateByAsc ) { - String sql = getTabularReportStatement( false, programStage, searchingIdenKeys, searchingAttrKeys, - searchingDEKeys, orgunitIds, startDate, endDate, orderByOrgunitAsc, orderByExecutionDateByAsc ); - - List ids = executeSQL( sql ); - - List programStageInstances = new ArrayList(); - - for ( Integer id : ids ) - { - programStageInstances.add( get( id ) ); - } - - return programStageInstances; + String sql = getTabularReportStatement( false, programStage, searchingIdenKeys, searchingAttrKeys, + searchingDEKeys, orgunitIds, startDate, endDate, orderByOrgunitAsc, orderByExecutionDateByAsc ); + + List ids = executeSQL( sql ); + + List programStageInstances = new ArrayList(); + + for ( Integer id : ids ) + { + programStageInstances.add( get( id ) ); + } + + return programStageInstances; } public int count( ProgramStage programStage, Map searchingIdenKeys, Map searchingAttrKeys, Map searchingDEKeys, Collection orgunitIds, Date startDate, Date endDate ) { - String sql = getTabularReportStatement( true, programStage, searchingIdenKeys, searchingAttrKeys, - searchingDEKeys, orgunitIds, startDate, endDate, true, true ); - List countRow = executeSQL( sql ); - - return (countRow != null && countRow.size() > 0) ? countRow.get( 0 ) : 0; - } - + String sql = getTabularReportStatement( true, programStage, searchingIdenKeys, searchingAttrKeys, + searchingDEKeys, orgunitIds, startDate, endDate, true, true ); + List countRow = executeSQL( sql ); + + return (countRow != null && countRow.size() > 0) ? countRow.get( 0 ) : 0; + } + + @SuppressWarnings( "unchecked" ) + public List get( OrganisationUnit orgunit, Program program, Date startDate, Date endDate ) + { + return getCriteria().createAlias( "programStage", "programStage" ).add( + Restrictions.eq( "programStage.program", program ) ).add( Restrictions.eq( "organisationUnit", orgunit ) ) + .add( Restrictions.between( "dueDate", startDate, endDate ) ).list(); + } + + // ------------------------------------------------------------------------- private String getTabularReportStatement( boolean isCount, ProgramStage programStage, Map searchingIdenKeys, Map searchingAttrKeys, Map searchingDEKeys, Collection orgunitIds, Date startDate, Date endDate, @@ -272,8 +282,8 @@ condition += " WHERE psi.executiondate >= '" + DateUtils.getMediumDateString( startDate ) + "' AND psi.executiondate <= '" + DateUtils.getMediumDateString( endDate ) + "' " - + " AND psi.organisationunitid in " + splitListHelper( orgunitIds ) - + " AND psi.programstageid = " + programStage.getId() + " "; + + " AND psi.organisationunitid in " + splitListHelper( orgunitIds ) + " AND psi.programstageid = " + + programStage.getId() + " "; // --------------------------------------------------------------------- // Searching program-stage-instances by patient-identifiers @@ -287,7 +297,8 @@ if ( index ) { - condition += " AND psi.programstageinstanceid in ( " + sqlID + " WHERE psi.programstageid = " + programStage.getId() + " "; + condition += " AND psi.programstageinstanceid in ( " + sqlID + " WHERE psi.programstageid = " + + programStage.getId() + " "; } condition += " AND pid.patientidentifierTypeid=" + attributeId + " AND lower(pid.identifier) "; @@ -355,7 +366,7 @@ Integer dataElementId = deKeys.next(); condition += " AND psi.programstageinstanceid in ( " + sqlDE + " WHERE 1=1 "; - + condition += " AND pdv.dataElementid=" + dataElementId + " AND lower(pdv.value) "; String compareValue = searchingDEKeys.get( dataElementId ).toLowerCase();