=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/caseaggregation/CaseAggregationCondition.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/caseaggregation/CaseAggregationCondition.java 2013-02-07 13:44:38 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/caseaggregation/CaseAggregationCondition.java 2013-02-07 14:28:18 +0000 @@ -56,7 +56,7 @@ public static final String AGGRERATION_AVG_MIN = "min"; public static final String AGGRERATION_AVG_MAX = "max"; - + public static final String OPERATOR_AND = "AND"; public static final String OPERATOR_OR = "OR"; === modified file 'dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/caseaggregation/DefaultCaseAggregationConditionService.java' --- dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/caseaggregation/DefaultCaseAggregationConditionService.java 2013-02-07 14:02:41 +0000 +++ dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/caseaggregation/DefaultCaseAggregationConditionService.java 2013-02-07 14:28:18 +0000 @@ -249,7 +249,7 @@ sql = sql + " AND pdv.programstageinstanceid in ( " + convertCondition( aggregationCondition, orgunit, period ) + " ) "; } -System.out.println("\n\n --- \n " + sql ); + Collection ids = aggregationConditionStore.executeSQL( sql ); return (ids == null) ? null : ids.iterator().next(); } @@ -313,16 +313,39 @@ OrganisationUnit orgunit, Period period ) { Collection result = new HashSet(); - aggregationCondition.setOperator( AGGRERATION_SUM ); // get params int orgunitId = orgunit.getId(); String startDate = DateUtils.getMediumDateString( period.getStartDate() ); String endDate = DateUtils.getMediumDateString( period.getEndDate() ); - String sql = createSQL( aggregationCondition.getAggregationExpression(), aggregationCondition.getOperator(), - orgunitId, startDate, endDate ); + String operator = aggregationCondition.getOperator(); + String sql = ""; + if ( operator.equals( CaseAggregationCondition.AGGRERATION_COUNT ) + || operator.equals( CaseAggregationCondition.AGGRERATION_SUM ) ) + { + aggregationCondition.setOperator( AGGRERATION_SUM ); + sql = createSQL( aggregationCondition.getAggregationExpression(), + aggregationCondition.getOperator(), orgunitId, startDate, endDate ); + } + else + { + sql = "SELECT psi.programstageinstanceid "; + sql += "FROM patientdatavalue pdv "; + sql += " INNER JOIN programstageinstance psi "; + sql += " ON psi.programstageinstanceid = pdv.programstageinstanceid "; + sql += "WHERE executiondate >='" + DateUtils.getMediumDateString( period.getStartDate() ) + "' "; + sql += " AND executiondate <='" + DateUtils.getMediumDateString( period.getEndDate() ) + + "' AND pdv.dataelementid=" + aggregationCondition.getDeSum().getId(); + if ( aggregationCondition.getAggregationExpression() != null + && !aggregationCondition.getAggregationExpression().isEmpty() ) + { + sql = sql + " AND pdv.programstageinstanceid in ( " + + convertCondition( aggregationCondition, orgunit, period ) + " ) "; + } + } + Collection stageInstanceIds = aggregationConditionStore.executeSQL( sql ); for ( Integer stageInstanceId : stageInstanceIds ) === modified file 'dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/caseaggregation/CaseAggregationResultDetailsAction.java' --- dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/caseaggregation/CaseAggregationResultDetailsAction.java 2012-02-27 06:09:39 +0000 +++ dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/caseaggregation/CaseAggregationResultDetailsAction.java 2013-02-07 14:28:18 +0000 @@ -160,7 +160,29 @@ CaseAggregationCondition aggCondition = aggregationConditionService .getCaseAggregationCondition( aggregationConditionId ); - if ( aggCondition.getOperator().equals( CaseAggregationCondition.AGGRERATION_SUM ) ) + if ( aggCondition.getOperator().equals( CaseAggregationCondition.AGGRERATION_COUNT ) ) + { + mapPatients = new HashMap>(); + + Collection patients = aggregationConditionService.getPatients( aggCondition, orgunit, period ); + + for ( Patient patient : patients ) + { + Collection dataElements = aggregationConditionService + .getDataElementsInCondition( aggCondition.getAggregationExpression() ); + + Collection dataValues = new HashSet(); + + if ( dataElements.size() > 0 ) + { + dataValues = patientDataValueService.getPatientDataValues( patient, dataElements, period + .getStartDate(), period.getEndDate() ); + } + + mapPatients.put( patient, dataValues ); + } + } + else { mapEvents = new HashMap>(); @@ -182,28 +204,6 @@ mapEvents.put( programStageInstance, dataValues ); } } - else - { - mapPatients = new HashMap>(); - - Collection patients = aggregationConditionService.getPatients( aggCondition, orgunit, period ); - - for ( Patient patient : patients ) - { - Collection dataElements = aggregationConditionService - .getDataElementsInCondition( aggCondition.getAggregationExpression() ); - - Collection dataValues = new HashSet(); - - if ( dataElements.size() > 0 ) - { - dataValues = patientDataValueService.getPatientDataValues( patient, dataElements, period - .getStartDate(), period.getEndDate() ); - } - - mapPatients.put( patient, dataValues ); - } - } return SUCCESS; }