=== modified file 'dhis-2/dhis-web/dhis-web-light/src/main/java/org/hisp/dhis/light/dataentry/action/GetSectionFormAction.java' --- dhis-2/dhis-web/dhis-web-light/src/main/java/org/hisp/dhis/light/dataentry/action/GetSectionFormAction.java 2011-09-29 10:23:26 +0000 +++ dhis-2/dhis-web/dhis-web-light/src/main/java/org/hisp/dhis/light/dataentry/action/GetSectionFormAction.java 2011-09-30 10:39:41 +0000 @@ -27,7 +27,9 @@ package org.hisp.dhis.light.dataentry.action; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; import org.hisp.dhis.dataset.CompleteDataSetRegistration; @@ -147,11 +149,18 @@ return dataValues; } - private Map validationErrors = new HashMap(); - - public Map getValidationErrors() - { - return validationErrors; + private Map validationViolations = new HashMap(); + + public Map getValidationViolations() + { + return validationViolations; + } + + private List validationRuleViolations = new ArrayList(); + + public List getValidationRuleViolations() + { + return validationRuleViolations; } private Boolean complete = false; @@ -188,7 +197,9 @@ dataValues = sectionFormUtils.getDataValueMap( organisationUnit, dataSet, period ); - validationErrors = sectionFormUtils.getValidationErrorMap( organisationUnit, dataSet, period ); + validationViolations = sectionFormUtils.getValidationErrorMap( organisationUnit, dataSet, period ); + + validationRuleViolations = sectionFormUtils.getValidationRuleViolations( organisationUnit, dataSet, period ); CompleteDataSetRegistration registration = registrationService.getCompleteDataSetRegistration( dataSet, period, organisationUnit ); === modified file 'dhis-2/dhis-web/dhis-web-light/src/main/java/org/hisp/dhis/light/dataentry/action/SaveSectionFormAction.java' --- dhis-2/dhis-web/dhis-web-light/src/main/java/org/hisp/dhis/light/dataentry/action/SaveSectionFormAction.java 2011-09-29 12:27:42 +0000 +++ dhis-2/dhis-web/dhis-web-light/src/main/java/org/hisp/dhis/light/dataentry/action/SaveSectionFormAction.java 2011-09-30 10:39:41 +0000 @@ -27,8 +27,10 @@ package org.hisp.dhis.light.dataentry.action; +import java.util.ArrayList; import java.util.Date; import java.util.HashMap; +import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; @@ -188,11 +190,18 @@ return dataValues; } - private Map validationErrors = new HashMap(); - - public Map getValidationErrors() - { - return validationErrors; + private Map validationViolations = new HashMap(); + + public Map getValidationViolations() + { + return validationViolations; + } + + private List validationRuleViolations = new ArrayList(); + + public List getValidationRuleViolations() + { + return validationRuleViolations; } private Boolean complete = false; @@ -263,9 +272,9 @@ value = value.trim(); - if( dataValue == null ) + if ( dataValue == null ) { - if( value != null && value.length() > 0 ) + if ( value != null && value.length() > 0 ) { needsValidation = true; @@ -276,7 +285,7 @@ } else { - if( !dataValue.getValue().equals( value ) ) + if ( !dataValue.getValue().equals( value ) ) { needsValidation = true; @@ -310,9 +319,11 @@ dataValues = sectionFormUtils.getDataValueMap( organisationUnit, dataSet, period ); - validationErrors = sectionFormUtils.getValidationErrorMap( organisationUnit, dataSet, period ); - - if ( needsValidation && validationErrors.size() > 0 ) + validationViolations = sectionFormUtils.getValidationErrorMap( organisationUnit, dataSet, period ); + + validationRuleViolations = sectionFormUtils.getValidationRuleViolations( organisationUnit, dataSet, period ); + + if ( needsValidation && validationViolations.size() > 0 ) { return ERROR; } === modified file 'dhis-2/dhis-web/dhis-web-light/src/main/java/org/hisp/dhis/light/dataentry/utils/SectionFormUtils.java' --- dhis-2/dhis-web/dhis-web-light/src/main/java/org/hisp/dhis/light/dataentry/utils/SectionFormUtils.java 2011-09-29 10:23:26 +0000 +++ dhis-2/dhis-web/dhis-web-light/src/main/java/org/hisp/dhis/light/dataentry/utils/SectionFormUtils.java 2011-09-30 10:39:41 +0000 @@ -42,6 +42,7 @@ import org.hisp.dhis.datavalue.DataValue; import org.hisp.dhis.datavalue.DataValueService; import org.hisp.dhis.datavalue.DeflatedDataValue; +import org.hisp.dhis.expression.ExpressionService; import org.hisp.dhis.minmax.MinMaxDataElement; import org.hisp.dhis.minmax.MinMaxDataElementService; import org.hisp.dhis.minmax.validation.MinMaxValuesGenerationService; @@ -49,6 +50,9 @@ import org.hisp.dhis.organisationunit.OrganisationUnit; import org.hisp.dhis.period.Period; import org.hisp.dhis.system.util.ListUtils; +import org.hisp.dhis.validation.ValidationResult; +import org.hisp.dhis.validation.ValidationRule; +import org.hisp.dhis.validation.ValidationRuleService; /** * @author mortenoh @@ -101,6 +105,20 @@ this.minMaxDataElementService = minMaxDataElementService; } + private ValidationRuleService validationRuleService; + + public void setValidationRuleService( ValidationRuleService validationRuleService ) + { + this.validationRuleService = validationRuleService; + } + + private ExpressionService expressionService; + + public void setExpressionService( ExpressionService expressionService ) + { + this.expressionService = expressionService; + } + // ------------------------------------------------------------------------- // Utils // ------------------------------------------------------------------------- @@ -145,6 +163,28 @@ return validationErrorMap; } + public List getValidationRuleViolations( OrganisationUnit organisationUnit, DataSet dataSet, Period period ) + { + List validationRuleResults = new ArrayList( validationRuleService.validate( + dataSet, period, organisationUnit ) ); + + List validationRuleViolations = new ArrayList( validationRuleResults.size() ); + + for ( ValidationResult result : validationRuleResults ) + { + ValidationRule rule = result.getValidationRule(); + + StringBuffer sb = new StringBuffer(); + sb.append( expressionService.getExpressionDescription( rule.getLeftSide().getExpression() ) ); + sb.append( " " + rule.getOperator().getMathematicalOperator() + " " ); + sb.append( expressionService.getExpressionDescription( rule.getRightSide().getExpression() ) ); + + validationRuleViolations.add( sb.toString() ); + } + + return validationRuleViolations; + } + public Map getDataValueMap( OrganisationUnit organisationUnit, DataSet dataSet, Period period ) { Map dataValueMap = new HashMap(); @@ -177,12 +217,14 @@ { integerValue = Integer.parseInt( value ); - if(integerValue > max) + if ( integerValue > max ) { return true; } - } catch ( NumberFormatException e ) - { } + } + catch ( NumberFormatException e ) + { + } return false; } @@ -195,12 +237,14 @@ { integerValue = Integer.parseInt( value ); - if(integerValue < min) + if ( integerValue < min ) { return true; } - } catch ( NumberFormatException e ) - { } + } + catch ( NumberFormatException e ) + { + } return false; } === modified file 'dhis-2/dhis-web/dhis-web-light/src/main/resources/META-INF/dhis/beans.xml' --- dhis-2/dhis-web/dhis-web-light/src/main/resources/META-INF/dhis/beans.xml 2011-09-29 08:14:40 +0000 +++ dhis-2/dhis-web/dhis-web-light/src/main/resources/META-INF/dhis/beans.xml 2011-09-30 10:39:41 +0000 @@ -14,6 +14,8 @@ + + === modified file 'dhis-2/dhis-web/dhis-web-light/src/main/webapp/dhis-web-light/dataEntry.vm' --- dhis-2/dhis-web/dhis-web-light/src/main/webapp/dhis-web-light/dataEntry.vm 2011-09-29 10:23:26 +0000 +++ dhis-2/dhis-web/dhis-web-light/src/main/webapp/dhis-web-light/dataEntry.vm 2011-09-30 10:39:41 +0000 @@ -3,6 +3,17 @@

$dataSet.name

+#if( $validationRuleViolations.size() > 0 ) +
+

Validation Rule Violations

+

+ #foreach( $validationRuleViolation in $validationRuleViolations ) + $validationRuleViolation
+ #end +

+
+#end +
@@ -19,13 +30,13 @@ #set( $key = "DE${dataElement.id}OC${optionCombo.id}" ) - #if( $validationErrors.get( $key ) ) - #set( $validationError = $validationErrors.get( $key ) ) + #if( $validationViolations.get( $key ) ) + #set( $validationViolation = $validationViolations.get( $key ) ) - #if( $sectionFormUtils.valueHigher( $validationError.value, $validationError.max ) ) -
Too high (max $validationError.max) - #elseif( $sectionFormUtils.valueLower( $validationError.value, $validationError.min ) ) -
Too low (min $validationError.min) + #if( $sectionFormUtils.valueHigher( $validationViolation.value, $validationViolation.max ) ) +
Too high (max $validationViolation.max) + #elseif( $sectionFormUtils.valueLower( $validationViolation.value, $validationViolation.min ) ) +
Too low (min $validationViolation.min) #else
Not a number #end