=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/caseaggregation/CaseAggregationConditionService.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/caseaggregation/CaseAggregationConditionService.java 2011-06-24 07:55:22 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/caseaggregation/CaseAggregationConditionService.java 2011-07-01 07:26:42 +0000 @@ -66,5 +66,7 @@ Collection getDataElementsInCondition( String aggregationExpression ); + Collection getOptionCombosInCondition( String aggregationExpression ); + String getConditionDescription( String condition ); } === modified file 'dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/caseaggregation/CaseAggregationConditionDeletionHandler.java' --- dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/caseaggregation/CaseAggregationConditionDeletionHandler.java 2011-06-24 07:55:22 +0000 +++ dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/caseaggregation/CaseAggregationConditionDeletionHandler.java 2011-07-01 07:26:42 +0000 @@ -30,6 +30,8 @@ import java.util.Collection; import org.hisp.dhis.dataelement.DataElement; +import org.hisp.dhis.dataelement.DataElementCategoryCombo; +import org.hisp.dhis.dataelement.DataElementCategoryOptionCombo; import org.hisp.dhis.system.deletion.DeletionHandler; /** @@ -75,16 +77,43 @@ conditions = aggregationConditionService.getAllCaseAggregationCondition(); - for( CaseAggregationCondition condition : conditions ) - { - Collection dataElements = aggregationConditionService.getDataElementsInCondition( condition.getAggregationExpression() ); + for ( CaseAggregationCondition condition : conditions ) + { + Collection dataElements = aggregationConditionService.getDataElementsInCondition( condition + .getAggregationExpression() ); + + if ( dataElements != null && dataElements.contains( dataElement ) ) + { + return false; + } + } + + return true; + } + + @Override + public boolean allowDeleteDataElementCategoryCombo( DataElementCategoryCombo categoryCombo ) + { + Collection conditions = aggregationConditionService.getAllCaseAggregationCondition(); + + for ( CaseAggregationCondition condition : conditions ) + { + if( categoryCombo.getOptionCombos().contains( condition.getOptionCombo() ) ) + { + return false; + } - if ( dataElements != null && dataElements.contains( dataElement ) ) + Collection optionCombos = aggregationConditionService + .getOptionCombosInCondition( condition.getAggregationExpression() ); + + optionCombos.retainAll( categoryCombo.getOptionCombos() ); + + if ( optionCombos != null && optionCombos.size() > 0 ) { return false; } } - + return true; } === 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 2011-06-24 07:55:22 +0000 +++ dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/caseaggregation/DefaultCaseAggregationConditionService.java 2011-07-01 07:26:42 +0000 @@ -167,7 +167,7 @@ { return aggregationConditionStore.get( dataElement, optionCombo ); } - + @Override public Collection getCaseAggregationCondition( DataElement dataElement ) { @@ -301,6 +301,39 @@ return dataElements; } + @Override + public Collection getOptionCombosInCondition( String aggregationExpression ) + { + String regExp = "\\[" + OBJECT_PROGRAM_STAGE_DATAELEMENT + SEPARATOR_OBJECT + "[0-9]+" + SEPARATOR_ID + + "[0-9]+" + SEPARATOR_ID + "[0-9]+" + "\\]"; + + Collection optionCombos = new HashSet(); + + // --------------------------------------------------------------------- + // parse expressions + // --------------------------------------------------------------------- + + Pattern pattern = Pattern.compile( regExp ); + + Matcher matcher = pattern.matcher( aggregationExpression ); + + while ( matcher.find() ) + { + String match = matcher.group(); + match = match.replaceAll( "[\\[\\]]", "" ); + + String[] info = match.split( SEPARATOR_OBJECT ); + String[] ids = info[1].split( SEPARATOR_ID ); + + int optionComboId = Integer.parseInt( ids[2] ); + DataElementCategoryOptionCombo optionCombo = categoryService.getDataElementCategoryOptionCombo( optionComboId ); + + optionCombos.add( optionCombo ); + } + + return optionCombos; + } + // ------------------------------------------------------------------------- // Support Methods // ------------------------------------------------------------------------- @@ -499,8 +532,8 @@ + "INNER JOIN patientdatavalue as pd ON psi.programstageinstanceid = pd.programstageinstanceid " + "INNER JOIN programinstance as pi ON pi.programinstanceid = psi.programinstanceid " + "INNER JOIN patientattributevalue as pav ON pav.patientid = pi.patientid " - + "WHERE pav.patientattributeid = " + attributeId + " " + " AND pd.organisationunitid = " + orgunitId - + " " + " AND psi.executionDate >= '" + startDate + "' AND psi.executionDate <= '" + endDate + "' " + + "WHERE pav.patientattributeid = " + attributeId + " " + " AND pd.organisationunitid = " + orgunitId + " " + + " AND psi.executionDate >= '" + startDate + "' AND psi.executionDate <= '" + endDate + "' " + "AND pav.value "; }