dhis2-devs team mailing list archive
-
dhis2-devs team
-
Mailing list archive
-
Message #22606
[Branch ~dhis2-devs-core/dhis2/trunk] Rev 10911: wip, optionset for aggregated reporting
------------------------------------------------------------
revno: 10911
committer: Morten Olav Hansen <mortenoh@xxxxxxxxx>
branch nick: dhis2
timestamp: Tue 2013-05-21 13:03:05 +0700
message:
wip, optionset for aggregated reporting
modified:
dhis-2/dhis-web/dhis-web-dataentry/src/main/java/org/hisp/dhis/de/action/GetMetaDataAction.java
dhis-2/dhis-web/dhis-web-dataentry/src/main/webapp/dhis-web-dataentry/javascript/entry.js
dhis-2/dhis-web/dhis-web-dataentry/src/main/webapp/dhis-web-dataentry/javascript/form.js
dhis-2/dhis-web/dhis-web-dataentry/src/main/webapp/dhis-web-dataentry/responseMetaData.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-dataentry/src/main/java/org/hisp/dhis/de/action/GetMetaDataAction.java'
--- dhis-2/dhis-web/dhis-web-dataentry/src/main/java/org/hisp/dhis/de/action/GetMetaDataAction.java 2012-02-16 19:58:55 +0000
+++ dhis-2/dhis-web/dhis-web-dataentry/src/main/java/org/hisp/dhis/de/action/GetMetaDataAction.java 2013-05-21 06:03:05 +0000
@@ -38,6 +38,7 @@
import org.hisp.dhis.organisationunit.OrganisationUnitDataSetAssociationSet;
import org.hisp.dhis.organisationunit.OrganisationUnitService;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
@@ -106,6 +107,13 @@
return dataElements;
}
+ private List<DataElement> dataElementsWithOptionSet = new ArrayList<DataElement>();
+
+ public List<DataElement> getDataElementsWithOptionSet()
+ {
+ return dataElementsWithOptionSet;
+ }
+
private Collection<Indicator> indicators;
public Collection<Indicator> getIndicators()
@@ -144,6 +152,14 @@
dataElements = dataElementService.getDataElementsWithDataSets();
+ for ( DataElement dataElement : dataElements )
+ {
+ if ( dataElement.getOptionSet() != null )
+ {
+ dataElementsWithOptionSet.add( dataElement );
+ }
+ }
+
indicators = indicatorService.getIndicatorsWithDataSets();
expressionService.explodeAndSubstituteExpressions( indicators, null );
=== modified file 'dhis-2/dhis-web/dhis-web-dataentry/src/main/webapp/dhis-web-dataentry/javascript/entry.js'
--- dhis-2/dhis-web/dhis-web-dataentry/src/main/webapp/dhis-web-dataentry/javascript/entry.js 2013-04-19 13:42:19 +0000
+++ dhis-2/dhis-web/dhis-web-dataentry/src/main/webapp/dhis-web-dataentry/javascript/entry.js 2013-05-21 06:03:05 +0000
@@ -127,14 +127,14 @@
function saveVal( dataElementId, optionComboId, fieldId )
{
var fieldIds = fieldId.split( "-" );
-
+
if ( fieldIds.length > 3 )
{
currentOrganisationUnitId = fieldIds[0];
}
fieldId = '#' + fieldId;
-
+
var dataElementName = getDataElementName( dataElementId );
var value = $( fieldId ).val();
var type = getDataElementType( dataElementId );
=== modified file 'dhis-2/dhis-web/dhis-web-dataentry/src/main/webapp/dhis-web-dataentry/javascript/form.js'
--- dhis-2/dhis-web/dhis-web-dataentry/src/main/webapp/dhis-web-dataentry/javascript/form.js 2013-05-18 04:54:10 +0000
+++ dhis-2/dhis-web/dhis-web-dataentry/src/main/webapp/dhis-web-dataentry/javascript/form.js 2013-05-21 06:03:05 +0000
@@ -11,6 +11,9 @@
// Array with associative arrays for each data set, populated in select.vm
var dataSets = [];
+// Maps input field to optionSet
+var optionSets = {};
+
// Associative array with identifier and array of assigned data sets
var dataSetAssociationSets = [];
@@ -70,6 +73,16 @@
var EVENT_FORM_LOADED = "dhis-web-dataentry-form-loaded";
+var MAX_DROPDOWN_DISPLAYED = 30;
+
+var DAO = DAO || {};
+
+DAO.store = new dhis2.storage.Store( {
+ name: 'dhis2',
+ adapters: [ dhis2.storage.DomSessionStorageAdapter, dhis2.storage.InMemoryAdapter ],
+ objectStores: [ 'optionSets' ]
+} );
+
( function( $ ) {
$.safeEach = function( arr, fn )
{
@@ -187,6 +200,7 @@
dataElements = metaData.dataElements;
indicatorFormulas = metaData.indicatorFormulas;
dataSets = metaData.dataSets;
+ optionSets = metaData.optionSets;
dataSetAssociationSets = metaData.dataSetAssociationSets;
organisationUnitAssociationSetMap = metaData.organisationUnitAssociationSetMap;
@@ -371,7 +385,7 @@
if ( type == 'date' )
{
- $( this ).css( 'width', '80%' );
+ $( this ).css( 'width', '100%' );
datePicker( id );
}
} );
@@ -396,7 +410,7 @@
saveBoolean( dataElementId, optionComboId, id );
} );
- $( this ).css( 'width', '100%' );
+ $( this ).css( 'width', '90%' );
} );
$( '[name="commentlink"]' ).each( function( i )
@@ -507,6 +521,7 @@
}
loadDataValues();
+ insertOptionSets();
}
else
{
@@ -531,7 +546,8 @@
$( '#currentOrganisationUnit' ).html( i18n_no_organisationunit_selected );
}
- loadDataValues()
+ loadDataValues();
+ insertOptionSets();
} );
}
}
@@ -1613,6 +1629,10 @@
purgeLocalForms();
updateExistingLocalForms();
downloadRemoteForms();
+
+ DAO.store.open().done(function() {
+ loadOptionSets();
+ });
}
function purgeLocalForms()
@@ -2171,3 +2191,142 @@
return true;
};
}
+
+// -----------------------------------------------------------------------------
+// OptionSet
+// -----------------------------------------------------------------------------
+
+function searchOptionSet( uid, query, success ) {
+ if(window.DAO !== undefined && window.DAO.store !== undefined ) {
+ DAO.store.get( 'optionSets', uid ).done( function ( obj ) {
+ if(obj) {
+ var options = [];
+
+ if(query == null || query == "") {
+ options = obj.optionSet.options.slice(0, MAX_DROPDOWN_DISPLAYED-1);
+ } else {
+ query = query.toLowerCase();
+
+ _.each(obj.optionSet.options, function(item, idx) {
+ if ( item.toLowerCase().indexOf( query ) != -1 ) {
+ options.push(item);
+ }
+ });
+ }
+
+ success( $.map( options, function ( item ) {
+ return {
+ label: item,
+ id: item
+ };
+ } ) );
+ } else {
+ getOptions( uid, query, success );
+ }
+ } );
+ } else {
+ getOptions( uid, query, success );
+ }
+}
+
+function getOptions( uid, query, success ) {
+ $.ajax( {
+ url: '../api/optionSets/' + uid + '.json?links=false&q=' + query,
+ dataType: "json",
+ cache: false,
+ type: 'GET',
+ success: function ( data ) {
+ success( $.map( data.options, function ( item ) {
+ return {
+ label: item,
+ id: item
+ };
+ } ) );
+ }
+ } );
+}
+
+function loadOptionSets() {
+ var optionSetUids = _.values( optionSets );
+ optionSetUids = _.union(optionSetUids);
+
+ var deferred = $.Deferred();
+ var promise = deferred.promise();
+
+ _.each( optionSetUids, function ( item, idx ) {
+ promise = promise.then( function () {
+ return $.ajax( {
+ url: '../api/optionSets/' + item + '.json?links=false',
+ type: 'GET',
+ cache: false
+ } ).done( function ( data ) {
+ log( 'Successfully stored optionSet: ' + item );
+
+ var obj = {};
+ obj.id = item;
+ obj.optionSet = data;
+ DAO.store.set( 'optionSets', obj );
+ } );
+ } );
+ } );
+
+ promise = promise.then( function () {
+ } );
+
+ deferred.resolve();
+}
+
+function insertOptionSets() {
+ $.each( _.keys(optionSets), function(idx, item) {
+ autocompleteOptionSetField( item + '-val', optionSets[item] );
+ });
+}
+
+function autocompleteOptionSetField( idField, optionSetUid ) {
+ var input = jQuery( "#" + idField );
+ input.css( "width", "85%" );
+ input.autocomplete( {
+ delay: 0,
+ minLength: 0,
+ source: function ( request, response ) {
+ searchOptionSet( optionSetUid, input.val(), response );
+ },
+ select: function ( event, ui ) {
+ input.val( ui.item.value );
+ input.autocomplete( "close" );
+ input.change();
+ }
+ } ).addClass( "ui-widget" );
+
+ input.data( "autocomplete" )._renderItem = function ( ul, item ) {
+ return $( "<li></li>" )
+ .data( "item.autocomplete", item )
+ .append( "<a>" + item.label + "</a>" )
+ .appendTo( ul );
+ };
+
+ var wrapper = this.wrapper = $( "<span style='width:200px'>" )
+ .addClass( "ui-combobox" )
+ .insertAfter( input );
+
+ var button = $( "<a style='width:20px; margin-bottom:-5px;height:20px;'>" )
+ .attr( "tabIndex", -1 )
+ .attr( "title", 'i18n_show_all_items' )
+ .appendTo( wrapper )
+ .button( {
+ icons: {
+ primary: "ui-icon-triangle-1-s"
+ },
+ text: false
+ } )
+ .addClass( 'small-button' )
+ .click( function () {
+ if ( input.autocomplete( "widget" ).is( ":visible" ) ) {
+ input.autocomplete( "close" );
+ return;
+ }
+ $( this ).blur();
+ input.autocomplete( "search", "" );
+ input.focus();
+ } );
+}
=== modified file 'dhis-2/dhis-web/dhis-web-dataentry/src/main/webapp/dhis-web-dataentry/responseMetaData.vm'
--- dhis-2/dhis-web/dhis-web-dataentry/src/main/webapp/dhis-web-dataentry/responseMetaData.vm 2013-01-16 10:42:27 +0000
+++ dhis-2/dhis-web/dhis-web-dataentry/src/main/webapp/dhis-web-dataentry/responseMetaData.vm 2013-05-21 06:03:05 +0000
@@ -13,6 +13,13 @@
#if( $velocityCount < $size ),#end
#end },
+"optionSets": {
+#set( $size = $dataElementsWithOptionSet.size() )
+#foreach( $dataElement in $dataElementsWithOptionSet )
+"${dataElement.uid}-${dataElement.categoryCombo.getSortedOptionCombos().get(0).uid}":"$encoder.jsonEncode( ${dataElement.optionSet.uid} )"
+#if( $velocityCount < $size ),#end
+#end },
+
"indicatorFormulas": {
#set( $size = $indicators.size() )
#foreach( $indicator in $indicators )