=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/program/ProgramValidation.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/program/ProgramValidation.java 2012-01-13 04:29:08 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/program/ProgramValidation.java 2012-01-15 14:53:46 +0000 @@ -48,24 +48,24 @@ public static String OBJECT_PROGRAM_STAGE_DATAELEMENT = "DE"; - public int BEFORE_CURRENT_DATE = 1; - - public int BEFORE_OR_EQUALS_TO_CURRENT_DATE = 2; - - public int AFTER_CURRENT_DATE = 3; - - public int AFTER_OR_EQUALS_TO_CURRENT_DATE = 4; - - - public int BEFORE_DUE_DATE = -1; - - public int BEFORE_OR_EQUALS_TO_DUE_DATE = -2; - - public int AFTER_DUE_DATE = -3; - - public int AFTER_OR_EQUALS_TO_DUE_DATE = -4; - - public int BEFORE_DUE_DATE_PULS_MAX_DAYS_OF_DATA_ENTRY = -5; + public static final int BEFORE_CURRENT_DATE = 1; + + public static final int BEFORE_OR_EQUALS_TO_CURRENT_DATE = 2; + + public static final int AFTER_CURRENT_DATE = 3; + + public static final int AFTER_OR_EQUALS_TO_CURRENT_DATE = 4; + + + public static final int BEFORE_DUE_DATE = -1; + + public static final int BEFORE_OR_EQUALS_TO_DUE_DATE = -2; + + public static final int AFTER_DUE_DATE = -3; + + public static final int AFTER_OR_EQUALS_TO_DUE_DATE = -4; + + public static final int BEFORE_DUE_DATE_PLUS_OR_MINUS_MAX_DAYS = -5; // ------------------------------------------------------------------------- // Fields === modified file 'dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/program/DefaultProgramValidationService.java' --- dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/program/DefaultProgramValidationService.java 2012-01-13 04:29:08 +0000 +++ dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/program/DefaultProgramValidationService.java 2012-01-15 14:53:46 +0000 @@ -30,6 +30,15 @@ import static org.hisp.dhis.program.ProgramValidation.OBJECT_PROGRAM_STAGE_DATAELEMENT; import static org.hisp.dhis.program.ProgramValidation.SEPARATOR_ID; import static org.hisp.dhis.program.ProgramValidation.SEPARATOR_OBJECT; +import static org.hisp.dhis.program.ProgramValidation.BEFORE_CURRENT_DATE; +import static org.hisp.dhis.program.ProgramValidation.BEFORE_OR_EQUALS_TO_CURRENT_DATE; +import static org.hisp.dhis.program.ProgramValidation.AFTER_CURRENT_DATE; +import static org.hisp.dhis.program.ProgramValidation.AFTER_OR_EQUALS_TO_CURRENT_DATE; +import static org.hisp.dhis.program.ProgramValidation.BEFORE_DUE_DATE; +import static org.hisp.dhis.program.ProgramValidation.BEFORE_OR_EQUALS_TO_DUE_DATE; +import static org.hisp.dhis.program.ProgramValidation.AFTER_DUE_DATE; +import static org.hisp.dhis.program.ProgramValidation.AFTER_OR_EQUALS_TO_DUE_DATE; +import static org.hisp.dhis.program.ProgramValidation.BEFORE_DUE_DATE_PLUS_OR_MINUS_MAX_DAYS; import java.util.Collection; import java.util.Date; @@ -242,40 +251,51 @@ return true; } - int rightSide = Integer.parseInt( programValidation.getRightSide() ); + String rightSide = programValidation.getRightSide(); Date dueDate = dataValue.getProgramStageInstance().getDueDate(); Date currentDate = dataValue.getTimestamp(); Date value = format.parseDate( dataValue.getValue() ); - switch ( rightSide ) - { - case 1: - return value.before( currentDate ); - case 2: - return (value.before( currentDate ) || value.equals( currentDate )); - case 3: - return value.after( currentDate ); - case 4: - return (value.after( currentDate ) || value.equals( currentDate )); - case -1: - return value.before( dueDate ); - case -2: - return (value.before( dueDate ) || value.equals( dueDate )); - case -3: - return value.after( dueDate ); - case -4: - return (value.after( dueDate ) || value.equals( dueDate )); - case -5: - Integer maxDaysInProgram = programStageInstance.getProgramStage().getProgram().getMaxDaysAllowedInputData(); - long maxDays = dueDate.getTime() / 86400000 + maxDaysInProgram ; - long minDays = dueDate.getTime() / 86400000 - maxDaysInProgram ; + int index = rightSide.indexOf( 'D' ); + if ( index < 0 ) + { + int rightValidation = Integer.parseInt( rightSide ); + + switch ( rightValidation ) + { + case BEFORE_CURRENT_DATE: + return value.before( currentDate ); + case BEFORE_OR_EQUALS_TO_CURRENT_DATE: + return (value.before( currentDate ) || value.equals( currentDate )); + case AFTER_CURRENT_DATE: + return value.after( currentDate ); + case AFTER_OR_EQUALS_TO_CURRENT_DATE: + return (value.after( currentDate ) || value.equals( currentDate )); + case BEFORE_DUE_DATE: + return value.before( dueDate ); + case BEFORE_OR_EQUALS_TO_DUE_DATE: + return (value.before( dueDate ) || value.equals( dueDate )); + case AFTER_DUE_DATE: + return value.after( dueDate ); + case AFTER_OR_EQUALS_TO_DUE_DATE: + return (value.after( dueDate ) || value.equals( dueDate )); + default: + return true; + } + } + + int rightValidation = Integer.parseInt( rightSide.substring( 0, index ) ); + + int daysValue = Integer.parseInt( rightSide.substring( index + 1, rightSide.length() ) ); + + if ( rightValidation == BEFORE_DUE_DATE_PLUS_OR_MINUS_MAX_DAYS ) + { + long maxDays = dueDate.getTime() / 86400000 + daysValue; + long minDays = dueDate.getTime() / 86400000 - daysValue; long valueDays = value.getTime() / 86400000; - return ( valueDays <= maxDays && valueDays >= minDays ); - default: - return true; + return (valueDays <= maxDays && valueDays >= minDays); } } - return true; } === modified file 'dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/caseentry/ValidateProgramInstanceAction.java' --- dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/caseentry/ValidateProgramInstanceAction.java 2012-01-13 04:29:08 +0000 +++ dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/caseentry/ValidateProgramInstanceAction.java 2012-01-15 14:53:46 +0000 @@ -27,6 +27,16 @@ package org.hisp.dhis.caseentry.action.caseentry; +import static org.hisp.dhis.program.ProgramValidation.AFTER_OR_EQUALS_TO_CURRENT_DATE; +import static org.hisp.dhis.program.ProgramValidation.BEFORE_DUE_DATE_PLUS_OR_MINUS_MAX_DAYS; +import static org.hisp.dhis.program.ProgramValidation.BEFORE_OR_EQUALS_TO_CURRENT_DATE; +import static org.hisp.dhis.program.ProgramValidation.BEFORE_CURRENT_DATE; +import static org.hisp.dhis.program.ProgramValidation.AFTER_CURRENT_DATE; +import static org.hisp.dhis.program.ProgramValidation.BEFORE_DUE_DATE; +import static org.hisp.dhis.program.ProgramValidation.BEFORE_OR_EQUALS_TO_DUE_DATE; +import static org.hisp.dhis.program.ProgramValidation.AFTER_DUE_DATE; +import static org.hisp.dhis.program.ProgramValidation.AFTER_OR_EQUALS_TO_DUE_DATE; + import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -258,7 +268,7 @@ } } } - + if ( !programValidations.isEmpty() ) { leftsideFormulaMap = new HashMap( programValidations.size() ); @@ -271,42 +281,61 @@ if ( validation.getDateType() ) { - int rightSide = Integer.parseInt( validation.getRightSide() ); - - switch ( rightSide ) - { - case 1: - rightsideFormulaMap.put( validation.getId(), i18n.getString( "before_current_date" ) ); - break; - case 2: - rightsideFormulaMap.put( validation.getId(), i18n - .getString( "before_or_equals_to_current_date" ) ); - break; - case 3: - rightsideFormulaMap.put( validation.getId(), i18n.getString( "after_current_date" ) ); - break; - case 4: - rightsideFormulaMap - .put( validation.getId(), i18n.getString( "after_or_equals_to_current_date" ) ); - break; - case -1: - rightsideFormulaMap.put( validation.getId(), i18n.getString( "before_due_date" ) ); - break; - case -2: - rightsideFormulaMap.put( validation.getId(), i18n.getString( "before_or_equals_to_due_date" ) ); - break; - case -3: - rightsideFormulaMap.put( validation.getId(), i18n.getString( "after_due_date" ) ); - break; - case -4: - rightsideFormulaMap.put( validation.getId(), i18n.getString( "after_or_equals_to_due_date" ) ); - break; - case -5: - rightsideFormulaMap.put( validation.getId(), i18n.getString( "due_date_with_max_number_of_days_of_data_entry" ) ); - break; - default: - rightsideFormulaMap.put( validation.getId(), "" ); - break; + String rightSide = validation.getRightSide(); + int index = rightSide.indexOf( 'D' ); + if ( index < 0 ) + { + int rightValidation = Integer.parseInt( rightSide ); + + switch ( rightValidation ) + { + case BEFORE_CURRENT_DATE: + rightsideFormulaMap.put( validation.getId(), i18n.getString( "before_current_date" ) ); + break; + case BEFORE_OR_EQUALS_TO_CURRENT_DATE: + rightsideFormulaMap.put( validation.getId(), i18n + .getString( "before_or_equals_to_current_date" ) ); + break; + case AFTER_CURRENT_DATE: + rightsideFormulaMap.put( validation.getId(), i18n.getString( "after_current_date" ) ); + break; + case AFTER_OR_EQUALS_TO_CURRENT_DATE: + rightsideFormulaMap.put( validation.getId(), i18n + .getString( "after_or_equals_to_current_date" ) ); + break; + case BEFORE_DUE_DATE: + rightsideFormulaMap.put( validation.getId(), i18n.getString( "before_due_date" ) ); + break; + case BEFORE_OR_EQUALS_TO_DUE_DATE: + rightsideFormulaMap.put( validation.getId(), i18n + .getString( "before_or_equals_to_due_date" ) ); + break; + case AFTER_DUE_DATE: + rightsideFormulaMap.put( validation.getId(), i18n.getString( "after_due_date" ) ); + break; + case AFTER_OR_EQUALS_TO_DUE_DATE: + rightsideFormulaMap + .put( validation.getId(), i18n.getString( "after_or_equals_to_due_date" ) ); + break; + default: + rightsideFormulaMap.put( validation.getId(), "" ); + break; + + } + } + else + { + + int rightValidation = Integer.parseInt( rightSide.substring( 0, index ) ); + + int daysValue = Integer.parseInt( rightSide.substring( index + 1, rightSide.length() ) ); + + if ( rightValidation == BEFORE_DUE_DATE_PLUS_OR_MINUS_MAX_DAYS ) + { + rightsideFormulaMap.put( validation.getId(), i18n + .getString( "in_range_due_date_plus_or_minus" ) + + " " + daysValue + i18n.getString( "days" ) ); + } } } else if ( validation.getRightSide().equals( "1==1" ) ) === modified file 'dhis-2/dhis-web/dhis-web-caseentry/src/main/resources/org/hisp/dhis/caseentry/i18n_module.properties' --- dhis-2/dhis-web/dhis-web-caseentry/src/main/resources/org/hisp/dhis/caseentry/i18n_module.properties 2012-01-15 02:14:29 +0000 +++ dhis-2/dhis-web/dhis-web-caseentry/src/main/resources/org/hisp/dhis/caseentry/i18n_module.properties 2012-01-15 14:53:46 +0000 @@ -267,10 +267,6 @@ to=To ga_orgunit=OrganisationUnit ga_facilityby=OrganisationUnit By -date_is_greater_then_or_equals_due_date=Date inputed >= Due date -date_is_less_then_or_equals_plus_no_max_days=Date inputed <= ( Due Date + Number of max days allowed to input data ) -min_days=Min days -max_days=Max days value_must_number=Value must be an number value_must_positive_integer=Value must be an positive integer value_must_negative_integer=Value must be an negative integer @@ -466,5 +462,5 @@ after_or_equals_to_due_date = After or equals to due date leftSide = Left Side rightSide = Right Side -due_date_with_max_number_of_days_of_data_entry = Due date +/- Max number of days of data entry +in_range_due_date_plus_or_minus = In range Due date +/- single_event_report = Single Event Report \ No newline at end of file === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/resources/org/hisp/dhis/patient/i18n_module.properties' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/resources/org/hisp/dhis/patient/i18n_module.properties 2012-01-15 02:14:29 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/resources/org/hisp/dhis/patient/i18n_module.properties 2012-01-15 14:53:46 +0000 @@ -276,7 +276,7 @@ design_data_entry_form=Design data entry form no_of_char=Number of characters letter=Letter -no_max_days_allowed_input_data=Maximum number of days allowed to input data +no_max_days_allowed_input_data=Date range for activities program_attribute=Program Attribute program_attribute_management=Program attribute management create_new_program_attribute=Create new program attribute @@ -397,7 +397,7 @@ before_or_equals_to_due_date = Before or equals to due date after_due_date = After due date after_or_equals_to_due_date = After or equals to due date -due_date_with_max_number_of_days_of_data_entry = Due date +/- Max number of days of data entry +in_range_due_date = In range Due date data_element = Data element condition = Condition no_date_data_element_in_selected_program_stage = No data elements with date-type in the selected program stage === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/webapp/dhis-web-maintenance-patient/dateProgramValidationForm.vm' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/webapp/dhis-web-maintenance-patient/dateProgramValidationForm.vm 2012-01-13 05:22:06 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/webapp/dhis-web-maintenance-patient/dateProgramValidationForm.vm 2012-01-15 14:53:46 +0000 @@ -2,7 +2,7 @@ #if( $dataElementList.size() > 0 ) - + $i18n.getString('#') @@ -20,18 +20,28 @@ $index $dataElement.name - + + + + + + + + + + +