← Back to team overview

dhis2-devs team mailing list archive

[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>&nbsp;&nbsp;<span style="color:#606060">|</span>&nbsp;
+					<button type="button" id="indicatorsButton">$i18n.getString( "indicators" )</button>
+					<button type="button" id="dynamicElementsButton">$i18n.getString( "dynamic_elements" )</button>&nbsp;&nbsp;<span style="color:#606060">|</span>&nbsp;
 					<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>