Merge authors: Lars Helge Ă˜verland (larshelge) ------------------------------------------------------------ revno: 19264 [merge] committer: Lars Helge Overland <larshe...@gmail.com> branch nick: dhis2 timestamp: Tue 2015-06-02 20:23:24 +0200 message: Program indicator add/edit screen. Included filter. modified: dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/css/widgets.css dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-program/src/main/java/org/hisp/dhis/trackedentity/action/programindicator/GetProgramIndicatorAction.java dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-program/src/main/resources/org/hisp/dhis/trackedentity/i18n_module.properties dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-program/src/main/webapp/dhis-web-maintenance-program/addProgramIndicator.vm dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-program/src/main/webapp/dhis-web-maintenance-program/javascript/programIndicator.js dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-program/src/main/webapp/dhis-web-maintenance-program/programIndicatorForm.vm dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-program/src/main/webapp/dhis-web-maintenance-program/updateProgramIndicator.vm
-- lp:dhis2 https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk Your team DHIS 2 developers is subscribed to branch lp:dhis2. To unsubscribe from this branch go to https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+edit-subscription
=== modified file 'dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/css/widgets.css' --- dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/css/widgets.css 2015-06-02 12:31:34 +0000 +++ dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/css/widgets.css 2015-06-02 18:23:24 +0000 @@ -906,7 +906,7 @@ .message { - border: 1px solid #ccc; + border: 1px solid #ddd; border-radius: 3px; width: 450px; padding: 9px; === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-program/src/main/java/org/hisp/dhis/trackedentity/action/programindicator/GetProgramIndicatorAction.java' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-program/src/main/java/org/hisp/dhis/trackedentity/action/programindicator/GetProgramIndicatorAction.java 2015-03-29 20:22:47 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-program/src/main/java/org/hisp/dhis/trackedentity/action/programindicator/GetProgramIndicatorAction.java 2015-06-02 18:23:24 +0000 @@ -86,6 +86,13 @@ { return description; } + + private String filter; + + public String getFilter() + { + return filter; + } private List<Constant> constants; @@ -105,6 +112,8 @@ programIndicator = programIndicatorService.getProgramIndicator( id ); description = programIndicatorService.getExpressionDescription( programIndicator.getExpression() ); + + filter = programIndicatorService.getExpressionDescription( programIndicator.getFilter() ); constants = new ArrayList<>( constantService.getAllConstants() ); === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-program/src/main/resources/org/hisp/dhis/trackedentity/i18n_module.properties' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-program/src/main/resources/org/hisp/dhis/trackedentity/i18n_module.properties 2015-06-02 12:18:46 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-program/src/main/resources/org/hisp/dhis/trackedentity/i18n_module.properties 2015-06-02 18:23:24 +0000 @@ -547,4 +547,7 @@ hide_section = Hide section template_reminder_message_management=Template reminder message management expression_description=Expression description -expression_items=Expression items \ No newline at end of file +expression_items=Expression items +filter_items=Filter items +filter_description=Filter description +select_program_stage=Select program stage \ No newline at end of file === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-program/src/main/webapp/dhis-web-maintenance-program/addProgramIndicator.vm' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-program/src/main/webapp/dhis-web-maintenance-program/addProgramIndicator.vm 2015-02-16 11:46:32 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-program/src/main/webapp/dhis-web-maintenance-program/addProgramIndicator.vm 2015-06-02 18:23:24 +0000 @@ -73,18 +73,6 @@ </td> <td></td> </tr> - <tr> - <td><label for="programStageId">$i18n.getString( "program_stage" ) </label></td> - <td> - <select id="programStageId" name="programStageId" onChange="getTrackedEntityDataElements();"> - <option value=''>[$i18n.getString('please_select')]</option> - #foreach( $programStage in $program.programStages ) - <option value='$programStage.uid'>$programStage.displayName</option> - #end - </select> - </td> - <td></td> - </tr> </table> <br> === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-program/src/main/webapp/dhis-web-maintenance-program/javascript/programIndicator.js' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-program/src/main/webapp/dhis-web-maintenance-program/javascript/programIndicator.js 2015-06-02 15:46:55 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-program/src/main/webapp/dhis-web-maintenance-program/javascript/programIndicator.js 2015-06-02 18:23:24 +0000 @@ -57,9 +57,9 @@ } } -function getTrackedEntityDataElements() { - clearListById('dataElements'); - clearListById('deSumId'); +function getTrackedEntityDataElements( type ) { + var fieldId = type + '-data-elements'; + clearListById(fieldId); var programStageId = getFieldValue('programStageId'); jQuery.getJSON('getTrackedEntityDataElements.action', @@ -68,7 +68,7 @@ programStageId: programStageId } , function( json ) { - var dataElements = jQuery('#dataElements'); + var dataElements = jQuery('#' + fieldId); for( i in json.dataElements ) { if( json.dataElements[i].type == 'int' || json.dataElements[i].type == 'date' ) { dataElements.append("<option value='" + json.dataElements[i].id + "' title='" + json.dataElements[i].name + "' suggested='" + json.dataElements[i].optionset + "'>" + json.dataElements[i].name + "</option>"); @@ -77,45 +77,55 @@ }); } -function insertDataElement( element ) { - var programStageId = getFieldValue('programStageId'); - var dataElementId = element.options[element.selectedIndex].value; - - insertTextCommon('expression', "#{" + programStageId + "." + dataElementId + "}"); - getConditionDescription(); -} - -function insertData( element, key ){ - var attributeId = element.options[element.selectedIndex].value; - - insertTextCommon('expression', key + "{" + attributeId + "}"); - getConditionDescription(); -} - -function insertInfo( element, isProgramStageProperty ) { - var id = ""; - if( isProgramStageProperty ) { - id = getFieldValue('programStageId'); - } - else { - id = getFieldValue('programId'); - } - - value = element.options[element.selectedIndex].value.replace('*', id); - insertTextCommon('expression', value); - getConditionDescription(); -} - -function insertOperator( value ) { - insertTextCommon('expression', ' ' + value + ' '); +function insertDataElement( type ) { + var psFieldId = type + '-program-stage', + deFieldId = type + '-data-elements', + areaId = type, + programStageId = getFieldValue(psFieldId), + dataElementId = getFieldValue(deFieldId); + + insertTextCommon(areaId, "#{" + programStageId + "." + dataElementId + "}"); + getConditionDescription(); +} + +function insertAttribute( type ){ + var atFieldId = type + '-attributes', + areaId = type, + attributeId = getFieldValue(atFieldId); + + insertTextCommon(areaId, "A{" + attributeId + "}"); + getConditionDescription(); +} + +function insertVariable( type ){ + var varFieldId = type + '-variables', + areaId = type, + variableId = getFieldValue(varFieldId); + + insertTextCommon(areaId, "V{" + variableId + "}"); + getConditionDescription(); +} + +function insertConstant( type ){ + var coFieldId = type + '-constants', + areaId = type, + constantId = getFieldValue(coFieldId); + + insertTextCommon(areaId, "C{" + constantId + "}"); + getConditionDescription(); +} + +function insertOperator( type, value ) { + insertTextCommon(type, ' ' + value + ' '); getConditionDescription(); } function getConditionDescription() { var expression = getFieldValue('expression'); + if( expression == '' ) { - setInnerHTML('aggregationDescription', ''); + setInnerHTML('expression-description', ''); } else { @@ -124,11 +134,11 @@ }, function( json ) { if( json.valid ){ setFieldValue('checkExpression', json.message); - setInnerHTML('aggregationDescription', json.description); + setInnerHTML('expression-description', json.description); } else { setFieldValue('checkExpression',''); - setInnerHTML('aggregationDescription', json.message); + setInnerHTML('expression-description', json.message); } }); } === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-program/src/main/webapp/dhis-web-maintenance-program/programIndicatorForm.vm' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-program/src/main/webapp/dhis-web-maintenance-program/programIndicatorForm.vm 2015-06-02 15:46:55 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-program/src/main/webapp/dhis-web-maintenance-program/programIndicatorForm.vm 2015-06-02 18:23:24 +0000 @@ -1,7 +1,12 @@ -<table> +<!-- Expression --> + +<table style="margin-top:10px"> + <tr> + <td><div class="message message-info">The expression defines how the indicator is calculated</div></td> + </tr> <tr> <th>$i18n.getString( "expression_items" )</th> - </tr> + </tr> <tr> <td> @@ -19,13 +24,20 @@ <table style="width:100%"> <tr> <td> - <input type='text' id='txtSearchValue' name='txtSearchValue' onKeyUp="filterExpressionSelect(event, this.value, 'dataElements');" placeholder="$i18n.getString('filter')" /> - <input type='button' value='$i18n.getString("clear")' onClick="setFieldValue('txtSearchValue', '');" /> + <select id="expression-program-stage" onChange="getTrackedEntityDataElements('expression');" style="width:35%;margin-right:20px;"> + <option value=''>[ $i18n.getString('select_program_stage') ]</option> + #foreach( $programStage in $program.programStages ) + <option value='$programStage.uid'>$programStage.displayName</option> + #end + </select> + <input type='text' id='expression-de-search' onKeyUp="filterExpressionSelect(event, this.value, 'expression-data-elements');" placeholder="$i18n.getString('filter')" /> + <input type='button' value='$i18n.getString("clear")' onClick="setFieldValue('expression-de-search', '');" /> + </td> </tr> <tr> <td> - <select multiple id="dataElements" name="dataElements" size="7" style="width:100%" ondblclick="insertDataElement(this);"></select> + <select multiple id="expression-data-elements" name="expression-data-elements" size="7" style="width:100%" ondblclick="insertDataElement('expression');"></select> </td> </tr> </table> @@ -37,13 +49,13 @@ <table style="width:100%"> <tr> <td> - <input type='text' id='txtSearchAttrValue' name='txtSearchAttrValue' onKeyUp="filterExpressionSelect(event, this.value, 'attributes');" placeholder="$i18n.getString('filter')" /> - <input type='button' value='$i18n.getString("clear")' onClick="setFieldValue('txtSearchAttrValue', '');" /> + <input type='text' id='expression-attr-search' onKeyUp="filterExpressionSelect(event, this.value, 'expression-attributes');" placeholder="$i18n.getString('filter')" /> + <input type='button' value='$i18n.getString("clear")' onClick="setFieldValue('expression-attr-search', '');" /> </td> </tr> <tr> <td> - <select multiple id="attributes" name="attributes" size="7" style="width:100%" ondblclick="insertData(this,'A');"> + <select multiple id="expression-attributes" name="expression-attributes" size="7" style="width:100%" ondblclick="insertAttribute(this,'A');"> #foreach( $programAttribute in $program.programAttributes ) #if( $programAttribute.attribute.valueType=='number' ) <option value='$programAttribute.attribute.uid'>$encoder.htmlEncode($programAttribute.attribute.displayName)</option> @@ -59,18 +71,18 @@ <table style="width:100%"> <tr> <td> - <input type='text' id='txtSearchPropertyValue' name='txtSearchValue' onKeyUp="filterExpressionSelect(event, this.value, 'programProperty');" placeholder="$i18n.getString('filter')" /> - <input type='button' value='$i18n.getString("clear")' onClick="setFieldValue('txtSearchPropertyValue', '');" /> + <input type='text' id='expression-var-search' onKeyUp="filterExpressionSelect(event, this.value, 'expression-variables');" placeholder="$i18n.getString('filter')" /> + <input type='button' value='$i18n.getString("clear")' onClick="setFieldValue('expression-var-search', '');" /> </td> </tr> <tr> <td> - <select multiple id="programProperty" name="programProperty" size="7" style="width:100%" ondblclick="insertInfo(this, false);" > - <option value="V{incident_date}">$i18n.getString( "incident_date" )</option> - <option value="V{enrollment_date}">$i18n.getString( "date_of_enrollment" )</option> - <option value="V{current_date}">$i18n.getString( "current_date" )</option> - <option value="V{value_count}">$i18n.getString( "value_count" )</option> - <option value="V{zero_pos_value_count}">$i18n.getString( "zero_pos_value_count" )</option> + <select multiple id="expression-variables" name="expression-variables" size="7" style="width:100%" ondblclick="insertVariable('expression');" > + <option value="incident_date">$i18n.getString( "incident_date" )</option> + <option value="enrollment_date">$i18n.getString( "date_of_enrollment" )</option> + <option value="current_date">$i18n.getString( "current_date" )</option> + <option value="value_count">$i18n.getString( "value_count" )</option> + <option value="zero_pos_value_count">$i18n.getString( "zero_pos_value_count" )</option> </select> </td> </tr> @@ -83,13 +95,13 @@ <table style="width:100%"> <tr> <td> - <input type='text' id='txtSearchContsValue' name='txtSearchAttrValue' onKeyUp="filterExpressionSelect(event, this.value, 'constants');" placeholder="$i18n.getString('filter')" /> - <input type='button' value='$i18n.getString("clear")' onClick="setFieldValue('txtSearchContsValue', '');" /> + <input type='text' id='expression-const-search' onKeyUp="filterExpressionSelect(event, this.value, 'expression-constants');" placeholder="$i18n.getString('filter')" /> + <input type='button' value='$i18n.getString("clear")' onClick="setFieldValue('expression-const-search', '');" /> </td> </tr> <tr> <td> - <select multiple id="constants" name="constants" size="7" style="width:100%" ondblclick="insertData(this,'C');"> + <select multiple id="expression-constants" name="expression-constants" size="7" style="width:100%" ondblclick="insertConstant('expression');"> #foreach( $constant in $constants ) <option value='$constant.uid'>$encoder.htmlEncode($constant.displayName)</option> #end @@ -112,13 +124,13 @@ </td> </tr> <tr> - <td> - <a class="greyButtonLink" href="javascript:insertOperator( '(' )" title="$i18n.getString( 'left_brackets' )">(</a> - <a class="greyButtonLink" href="javascript:insertOperator( ')' )" title="$i18n.getString( 'right_brackets' )">)</a> - <a class="greyButtonLink" href="javascript:insertOperator( '*' )" title="$i18n.getString( 'multiply' )">*</a> - <a class="greyButtonLink" href="javascript:insertOperator( '/' )" title="$i18n.getString( 'divide' )">/</a> - <a class="greyButtonLink" href="javascript:insertOperator( '+' )" title="$i18n.getString( 'plus' )">+</a> - <a class="greyButtonLink" href="javascript:insertOperator( '-' )" title="$i18n.getString( 'minus' )">-</a><br><br> + <td style="padding-top:4px"> + <a class="greyButtonLink" href="javascript:insertOperator( 'expression', '(' )" title="$i18n.getString( 'left_brackets' )">(</a> + <a class="greyButtonLink" href="javascript:insertOperator( 'expression', ')' )" title="$i18n.getString( 'right_brackets' )">)</a> + <a class="greyButtonLink" href="javascript:insertOperator( 'expression', '*' )" title="$i18n.getString( 'multiply' )">*</a> + <a class="greyButtonLink" href="javascript:insertOperator( 'expression', '/' )" title="$i18n.getString( 'divide' )">/</a> + <a class="greyButtonLink" href="javascript:insertOperator( 'expression', '+' )" title="$i18n.getString( 'plus' )">+</a> + <a class="greyButtonLink" href="javascript:insertOperator( 'expression', '-' )" title="$i18n.getString( 'minus' )">-</a><br><br> </td> </tr> <tr> @@ -126,12 +138,135 @@ </tr> <tr> <td> - <div id='aggregationDescription' style="padding: 5px 0 20px 0">$!encoder.htmlEncode($!description)</div> - <input type="hidden" id="checkExpression" name="checkExpression" title="$i18n.getString('expression_is_not_well_formed')" class="{validate:{required:true}}" /> - </td> - </tr> -</table> + <div id='expression-description' style="padding: 5px 0 20px 0">$!encoder.htmlEncode($!description)</div> + <input type="hidden" id="checkExpression" name="checkExpression" title="$i18n.getString('expression_is_not_well_formed')" class="{validate:{required:true}}" /> + </td> + </tr> +</table> + +<!-- Filter --> + +<table style="margin-top:30px"> + <tr> + <td><div class="message message-info">The filter is applied to events and filters the data source used for the calculation</div></td> + </tr> + <tr> + <th>$i18n.getString( "filter_items" )</th> + </tr> + <tr> + <td> + + <div id="filter-tabs" style="width:670px; margin: 1px 0;"> + <ul> + <li><a href="#filter-tab1">$i18n.getString("data_elements")</a></li> + #if($program.type!='3') + <li><a href="#filter-tab2">$i18n.getString("attributes")</a></li> + #end + <li><a href="#filter-tab4">$i18n.getString("constants")</a></li> + </ul> + + <div id="filter-tab1"> + <table style="width:100%"> + <tr> + <td> + <select id="filter-program-stage" onChange="getTrackedEntityDataElements('filter');" style="width:35%;margin-right:20px;"> + <option value=''>[ $i18n.getString('select_program_stage') ]</option> + #foreach( $programStage in $program.programStages ) + <option value='$programStage.uid'>$programStage.displayName</option> + #end + </select> + <input type='text' id='filter-de-search' onKeyUp="filterExpressionSelect(event, this.value, 'filter-data-elements');" placeholder="$i18n.getString('filter')" /> + <input type='button' value='$i18n.getString("clear")' onClick="setFieldValue('filter-de-search', '');" /> + </td> + </tr> + <tr> + <td> + <select multiple id="filter-data-elements" name="filter-data-elements" size="7" style="width:100%" ondblclick="insertDataElement('filter');"></select> + </td> + </tr> + </table> + </div> + + #if($program.type!='3') + + <div id="filter-tab2"> + <table style="width:100%"> + <tr> + <td> + <input type='text' id='filter-attr-search' onKeyUp="filterExpressionSelect(event, this.value, 'filter-attributes');" placeholder="$i18n.getString('filter')" /> + <input type='button' value='$i18n.getString("clear")' onClick="setFieldValue('filter-attr-search', '');" /> + </td> + </tr> + <tr> + <td> + <select multiple id="filter-attributes" name="filter-attributes" size="7" style="width:100%" ondblclick="insertAttribute('filter');"> + #foreach( $programAttribute in $program.programAttributes ) + #if( $programAttribute.attribute.valueType=='number' ) + <option value='$programAttribute.attribute.uid'>$encoder.htmlEncode($programAttribute.attribute.displayName)</option> + #end + #end + </select> + </td> + </tr> + </table> + </div> + + #end + + <div id="filter-tab4"> + <table style="width:100%"> + <tr> + <td> + <input type='text' id='filter-const-search' onKeyUp="filterExpressionSelect(event, this.value, 'filter-constants');" placeholder="$i18n.getString('filter')" /> + <input type='button' value='$i18n.getString("clear")' onClick="setFieldValue('filter-const-search', '');" /> + </td> + </tr> + <tr> + <td> + <select multiple id="filter-constants" name="filter-constants" size="7" style="width:100%" ondblclick="insertConstant('filter')"> + #foreach( $constant in $constants ) + <option value='$constant.uid'>$encoder.htmlEncode($constant.displayName)</option> + #end + </select> + </td> + </tr> + </table> + </div> + + </div> + + </td> + </tr> + <tr> + <th style="padding-top:15px">$i18n.getString( "filter" ) <span class="tipText">Tip: use abs(x) sin(x) cos(x) tan(x) ln(x) log(x) sqrt(x) mod(x,y) oizp(x) zing(x)</span></th> + </tr> + <tr> + <td> + <textarea style="width:665px" id="filter" name="filter" onkeyup='getConditionDescription();' >$!encoder.htmlEncode($!programIndicator.filter)</textarea> + </td> + </tr> + <tr> + <td style="padding-top:4px"> + <a class="greyButtonLink" href="javascript:insertOperator( 'filter', '(' )" title="$i18n.getString( 'left_brackets' )">(</a> + <a class="greyButtonLink" href="javascript:insertOperator( 'filter', ')' )" title="$i18n.getString( 'right_brackets' )">)</a> + <a class="greyButtonLink" href="javascript:insertOperator( 'filter', '*' )" title="$i18n.getString( 'multiply' )">*</a> + <a class="greyButtonLink" href="javascript:insertOperator( 'filter', '/' )" title="$i18n.getString( 'divide' )">/</a> + <a class="greyButtonLink" href="javascript:insertOperator( 'filter', '+' )" title="$i18n.getString( 'plus' )">+</a> + <a class="greyButtonLink" href="javascript:insertOperator( 'filter', '-' )" title="$i18n.getString( 'minus' )">-</a><br><br> + </td> + </tr> + <tr> + <th style="padding-top:4px">$i18n.getString( "filter_description" )</th> + </tr> + <tr> + <td> + <div id='filter-description' style="padding: 5px 0 20px 0">$!encoder.htmlEncode($!description)</div> + <input type="hidden" id="checkExpression" name="checkExpression" title="$i18n.getString('expression_is_not_well_formed')" class="{validate:{required:true}}" /> + </td> + </tr> +</table> <script type="text/javascript"> $('#expression-tabs').tabs(); + $('#filter-tabs').tabs(); </script> === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-program/src/main/webapp/dhis-web-maintenance-program/updateProgramIndicator.vm' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-program/src/main/webapp/dhis-web-maintenance-program/updateProgramIndicator.vm 2015-03-31 16:25:10 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-program/src/main/webapp/dhis-web-maintenance-program/updateProgramIndicator.vm 2015-06-02 18:23:24 +0000 @@ -77,18 +77,6 @@ </td> <td></td> </tr> - <tr> - <td><label for="programStageId">$i18n.getString( "program_stage" ) </label></td> - <td> - <select id="programStageId" name="programStageId" onChange="getTrackedEntityDataElements();"> - <option value=''>[$i18n.getString('please_select')]</option> - #foreach( $programStage in $programIndicator.program.programStages ) - <option value='$programStage.uid'>$encoder.htmlEncode($programStage.displayName)</option> - #end - </select> - </td> - <td></td> - </tr> </table> <br>
_______________________________________________ Mailing list: https://launchpad.net/~dhis2-devs Post to : dhis2-devs@lists.launchpad.net Unsubscribe : https://launchpad.net/~dhis2-devs More help : https://help.launchpad.net/ListHelp