dhis2-devs team mailing list archive
-
dhis2-devs team
-
Mailing list archive
-
Message #18937
[Branch ~dhis2-devs-core/dhis2/trunk] Rev 8058: WIP dynamic elements in custom forms
------------------------------------------------------------
revno: 8058
committer: Lars Helge Øverland <larshelge@xxxxxxxxx>
branch nick: dhis2
timestamp: Wed 2012-09-12 22:07:46 +0200
message:
WIP dynamic elements in custom forms
modified:
dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataset/src/main/java/org/hisp/dhis/dataset/action/dataentryform/ViewDataEntryFormAction.java
dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataset/src/main/resources/META-INF/dhis/beans.xml
dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataset/src/main/resources/org/hisp/dhis/dataset/i18n_module.properties
dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataset/src/main/webapp/dhis-web-maintenance-dataset/javascript/viewDataEntryForm.js
dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataset/src/main/webapp/dhis-web-maintenance-dataset/viewDataEntryForm.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-maintenance/dhis-web-maintenance-dataset/src/main/java/org/hisp/dhis/dataset/action/dataentryform/ViewDataEntryFormAction.java'
--- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataset/src/main/java/org/hisp/dhis/dataset/action/dataentryform/ViewDataEntryFormAction.java 2012-04-23 20:19:49 +0000
+++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataset/src/main/java/org/hisp/dhis/dataset/action/dataentryform/ViewDataEntryFormAction.java 2012-09-12 20:07:46 +0000
@@ -33,6 +33,8 @@
import org.hisp.dhis.common.comparator.IdentifiableObjectNameComparator;
import org.hisp.dhis.dataelement.DataElement;
+import org.hisp.dhis.dataelement.DataElementCategoryCombo;
+import org.hisp.dhis.dataelement.DataElementCategoryService;
import org.hisp.dhis.dataentryform.DataEntryForm;
import org.hisp.dhis.dataentryform.DataEntryFormService;
import org.hisp.dhis.dataset.DataSet;
@@ -74,6 +76,13 @@
this.dataEntryFormService = dataEntryFormService;
}
+ private DataElementCategoryService categoryService;
+
+ public void setCategoryService( DataElementCategoryService categoryService )
+ {
+ this.categoryService = categoryService;
+ }
+
private I18n i18n;
public void setI18n( I18n i18n )
@@ -127,6 +136,13 @@
return dataElementList;
}
+ private List<DataElementCategoryCombo> categoryCombos;
+
+ public List<DataElementCategoryCombo> getCategoryCombos()
+ {
+ return categoryCombos;
+ }
+
// -------------------------------------------------------------------------
// Execute
// -------------------------------------------------------------------------
@@ -145,8 +161,12 @@
dataElementList = new ArrayList<DataElement>( dataSet.getDataElements() );
- Collections.sort( dataElementList, new IdentifiableObjectNameComparator() );
+ Collections.sort( dataElementList, IdentifiableObjectNameComparator.INSTANCE );
+ categoryCombos = new ArrayList<DataElementCategoryCombo>( categoryService.getAllDataElementCategoryCombos() );
+
+ Collections.sort( categoryCombos, IdentifiableObjectNameComparator.INSTANCE );
+
return SUCCESS;
}
}
=== modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataset/src/main/resources/META-INF/dhis/beans.xml'
--- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataset/src/main/resources/META-INF/dhis/beans.xml 2012-07-20 07:04:42 +0000
+++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataset/src/main/resources/META-INF/dhis/beans.xml 2012-09-12 20:07:46 +0000
@@ -262,6 +262,9 @@
<property name="dataEntryFormService">
<ref bean="org.hisp.dhis.dataentryform.DataEntryFormService" />
</property>
+ <property name="categoryService">
+ <ref bean="org.hisp.dhis.dataelement.DataElementCategoryService" />
+ </property>
</bean>
<bean id="org.hisp.dhis.dataset.action.dataentryform.SaveDataEntryFormAction" class="org.hisp.dhis.dataset.action.dataentryform.SaveDataEntryFormAction"
=== modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataset/src/main/resources/org/hisp/dhis/dataset/i18n_module.properties'
--- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataset/src/main/resources/org/hisp/dhis/dataset/i18n_module.properties 2012-09-12 15:48:31 +0000
+++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataset/src/main/resources/org/hisp/dhis/dataset/i18n_module.properties 2012-09-12 20:07:46 +0000
@@ -89,4 +89,9 @@
none=None
allow_future_periods=Allow future periods
skip_aggregation=Skip aggregation
-insert_data_elements=Insert data elements
\ No newline at end of file
+insert_data_elements=Insert data elements
+dynamic_elements=Dynamic elements
+select_category_combo=Select category combination
+start=Start
+insert_data_element_drop_down=Insert data element drop-down
+select_category_combo_for_which_to_insert=Select category combination for which to insert dynamic fields
\ No newline at end of file
=== modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataset/src/main/webapp/dhis-web-maintenance-dataset/javascript/viewDataEntryForm.js'
--- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataset/src/main/webapp/dhis-web-maintenance-dataset/javascript/viewDataEntryForm.js 2012-09-12 15:23:57 +0000
+++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataset/src/main/webapp/dhis-web-maintenance-dataset/javascript/viewDataEntryForm.js 2012-09-12 20:07:46 +0000
@@ -1,9 +1,12 @@
+
+var currentDynamicElementCode = "";
+
$( document ).ready( function() {
leftBar.hideAnimated();
$("#selectionDialog").dialog({
- minWidth: 555,
+ minWidth: 595,
minHeight: 263,
position: [($("body").width() - 555) - 50, 50],
zIndex: 10000
@@ -14,18 +17,20 @@
var dataElementSelector = $("#dataElementSelector");
var totalSelector = $("#totalSelector");
var indicatorSelector = $("#indicatorSelector");
+ var dynamicElementSelector = $("#dynamicElementSelector");
dataElementSelector.height( dialog.height() - 97 );
totalSelector.height( dialog.height() - 97 );
indicatorSelector.height( dialog.height() - 97 );
+ dynamicElementSelector.height( dialog.height() - 97 );
});
$(":button").button();
$(":submit").button();
- $("#dataElementInsertButton").click(insertDataElement);
- $("#totalInsertButton").click(insertTotal);
- $("#indicatorInsertButton").click(insertIndicator);
+ //$("#dataElementInsertButton").click(insertDataElement); //TODO remove?
+ //$("#totalInsertButton").click(insertTotal); //TODO remove?
+ //$("#indicatorInsertButton").click(insertIndicator); //TODO remove?
$("#selectionDialog").bind("dialogopen", function(event, ui) {
$("#insertDataElementsButton").button("disable");
@@ -41,6 +46,11 @@
$("#selectionDialog").dialog("open");
});
+ $("#startButton").button("option", "icons", { primary: "ui-icon-triangle-1-e" });
+ $("#startButton").click( showDynamicElementInsert );
+ $("#doneButton").click( showDynamicElementSelect );
+ $("#insertDynamicElementButton").button("option", "icons", { primary: "ui-icon-plusthick" });
+
showDataElements();
$("#dataElementsButton").addClass("ui-state-active2");
@@ -49,6 +59,7 @@
$("#dataElementsButton").addClass("ui-state-active2");
$("#totalsButton").removeClass("ui-state-active2");
$("#indicatorsButton").removeClass("ui-state-active2");
+ $("#dynamicElementsButton").removeClass("ui-state-active2");
showDataElements();
});
@@ -57,6 +68,7 @@
$("#dataElementsButton").removeClass("ui-state-active2");
$("#totalsButton").addClass("ui-state-active2");
$("#indicatorsButton").removeClass("ui-state-active2");
+ $("#dynamicElementsButton").removeClass("ui-state-active2");
showTotals();
});
@@ -65,10 +77,20 @@
$("#dataElementsButton").removeClass("ui-state-active2");
$("#totalsButton").removeClass("ui-state-active2");
$("#indicatorsButton").addClass("ui-state-active2");
+ $("#dynamicElementsButton").removeClass("ui-state-active2");
showIndicators();
});
+ $("#dynamicElementsButton").click(function() {
+ $("#dataElementsButton").removeClass("ui-state-active2");
+ $("#totalsButton").removeClass("ui-state-active2");
+ $("#indicatorsButton").removeClass("ui-state-active2");
+ $("#dynamicElementsButton").addClass("ui-state-active2");
+
+ showDynamicElements();
+ });
+
$("#insertButton").click(function() {
if( $("#dataElementsTab").is(":visible") ) {
insertDataElement();
@@ -76,9 +98,12 @@
else if( $("#totalsTab").is(":visible") ) {
insertTotal();
}
- else {
+ else if( $("#indicatorsTab").is(":visible") ) {
insertIndicator();
}
+ else if( $("#dynamicElementsTab").is(":visible") ) {
+ insertDynamicElement();
+ }
});
$("#insertButton").button("option", "icons", { primary: "ui-icon-plusthick" });
@@ -166,7 +191,9 @@
dataSetId: dataSetId
}
});
-
+
+ $("#dynamicElementSelector").dblclick(insertDynamicElement);
+
if( autoSave == 'true' )
{
window.setTimeout( "validateDataEntryFormTimeout( false );", 60000 );
@@ -180,6 +207,7 @@
$("#totalsFilter").hide();
$("#indicatorsTab").hide();
$("#indicatorsFilter").hide();
+ $("#dynamicElementsTab").hide();
}
function showTotals() {
@@ -189,6 +217,7 @@
$("#totalsFilter").show();
$("#indicatorsTab").hide();
$("#indicatorsFilter").hide();
+ $("#dynamicElementsTab").hide();
}
function showIndicators() {
@@ -198,6 +227,17 @@
$("#totalsFilter").hide();
$("#indicatorsTab").show();
$("#indicatorsFilter").show();
+ $("#dynamicElementsTab").hide();
+}
+
+function showDynamicElements() {
+ $("#dataElementsTab").hide();
+ $("#dataElementsFilter").hide();
+ $("#totalsTab").hide();
+ $("#totalsFilter").hide();
+ $("#indicatorsTab").hide();
+ $("#indicatorsFilter").hide();
+ $("#dynamicElementsTab").show();
}
function filterSelectList( select_id, filter )
@@ -327,6 +367,48 @@
}
}
+function insertDynamicElement() {
+ var oEditor = $("#designTextarea").ckeditorGet();
+ var $option = $("#dynamicElementSelector option:selected");
+
+ if( $option.length !== 0 ) {
+ var categoryOptionComboId = $option.val();
+ var categoryOptionComboName = $option.text();
+ var id = currentDynamicElementCode + "-dynamic";
+
+ var template = '<input id="' + id + '" categoryoptioncomboid="' + categoryOptionComboId + '" value="[ ' + categoryOptionComboName + ' ]" style="width:7em;text-align:center;" />';
+ oEditor.insertHtml( template );
+ }
+}
+
+function showDynamicElementSelect() {
+ $("#dynamicElementSelect").show();
+ $("#dynamicElementInsert").hide();
+}
+
+/**
+ * A unique code is used to associate the data element drop down with the input
+ * fields for each category option combo. The format for input field keys is:
+ *
+ * <unique code>-<category option combo uid>-dynamic
+ */
+function showDynamicElementInsert() {
+ $("#dynamicElementSelect").hide();
+ $("#dynamicElementInsert").show();
+
+ currentDynamicElementCode = getRandomCode();
+
+ var categoryComboUid = $("#categoryComboSelect").val();
+
+ clearListById( "dynamicElementSelector" );
+
+ var optionCombos = $.getJSON( "../api/categoryCombos/" + categoryComboUid + ".json", function( json ) {
+ $.each( json.categoryOptionCombo, function( index, value ) {
+ addOptionById( "dynamicElementSelector", value.id, value.name );
+ } );
+ } );
+}
+
function checkExisted(id) {
var result = false;
var html = $("#designTextarea").ckeditorGet().getData();
=== modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataset/src/main/webapp/dhis-web-maintenance-dataset/viewDataEntryForm.vm'
--- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataset/src/main/webapp/dhis-web-maintenance-dataset/viewDataEntryForm.vm 2012-09-12 15:36:17 +0000
+++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataset/src/main/webapp/dhis-web-maintenance-dataset/viewDataEntryForm.vm 2012-09-12 20:07:46 +0000
@@ -12,7 +12,6 @@
var selected = null;
var autoSave = ${autoSave};
var dataSetId = ${dataSet.id};
- var currentDynamicElementCode = "";
#if( $dataEntryForm )
stat = "EDIT";
@@ -129,16 +128,35 @@
<select id="indicatorSelector" multiple="multiple" style="height: 200px; width: 100%;"></select>
</td>
</tr>
+ <tr id="dynamicElementsTab">
+ <td>
+ <div id="dynamicElementSelect">
+ <span style="color:#555;">$i18n.getString( "select_category_combo_for_which_to_insert" )</span>
+ <select id="categoryComboSelect" style="width: 100%; margin-bottom: 10px;">
+ #foreach( $categoryCombo in $categoryCombos )
+ <option value="$categoryCombo.uid">$encoder.htmlEncode( $categoryCombo.name )</option>
+ #end
+ </select><br>
+ <button type="button" id="startButton">$i18n.getString( "start" )</button>
+ </div>
+ <div id="dynamicElementInsert" style="margin-bottom: 10px; display:none;">
+ <select id="dynamicElementSelector" multiple="multiple" style="height: 150px; margin-bottom: 10px; width: 100%;"></select><br>
+ <button type="button" id="insertDynamicElementButton">$i18n.getString( "insert_data_element_drop_down" )</button>
+ <button type="button" id="doneButton">$i18n.getString( "done" )</button>
+ </div>
+ </td>
+ </tr>
<tr>
<td>
<button type="button" id="dataElementsButton">$i18n.getString( "data_elements" )</button>
<button type="button" id="totalsButton">$i18n.getString( "totals" )</button>
- <button type="button" id="indicatorsButton">$i18n.getString( "indicators" )</button> <span style="color:#606060">|</span>
+ <button type="button" id="indicatorsButton">$i18n.getString( "indicators" )</button>
+ <button type="button" id="dynamicElementsButton">$i18n.getString( "dynamic_elements" )</button> <span style="color:#606060">|</span>
<button type="button" id="insertButton">$i18n.getString( "insert" )</button>
<input type="checkbox" id="greyedField"><label for="greyedField">$i18n.getString( "grey_field" )</label>
</td>
</tr>
- </table>
+ </table>
</div>
</div>