=== modified file 'dhis-2/dhis-web/dhis-web-visualizer/src/main/resources/org/hisp/dhis/visualizer/i18n_module.properties' --- dhis-2/dhis-web/dhis-web-visualizer/src/main/resources/org/hisp/dhis/visualizer/i18n_module.properties 2012-02-13 10:37:38 +0000 +++ dhis-2/dhis-web/dhis-web-visualizer/src/main/resources/org/hisp/dhis/visualizer/i18n_module.properties 2012-02-16 16:52:38 +0000 @@ -43,7 +43,7 @@ trend_line=Trend line hide_subtitle=Hide subtitle hide_legend=Hide legend -user_orgunit=User orgunit +user_orgunit=User org unit domain_axis_label=Domain axis label range_axis_label=Range axis label target_line=Target line @@ -88,4 +88,7 @@ invalid_uid=Invalid uid system_favorite_overwrite_not_allowed=* You are not allowed to overwrite a system favorite favorite_no_orgunits=Favorite has no organisation units -this_year=This year \ No newline at end of file +this_year=This year +trend=Trend +min_two_categories=Minimum two categories needed +chart_options=Chart options \ No newline at end of file === modified file 'dhis-2/dhis-web/dhis-web-visualizer/src/main/resources/org/hisp/dhis/visualizer/i18n_module_fr_FR.properties' --- dhis-2/dhis-web/dhis-web-visualizer/src/main/resources/org/hisp/dhis/visualizer/i18n_module_fr_FR.properties 2012-02-13 10:47:38 +0000 +++ dhis-2/dhis-web/dhis-web-visualizer/src/main/resources/org/hisp/dhis/visualizer/i18n_module_fr_FR.properties 2012-02-16 16:52:38 +0000 @@ -88,4 +88,7 @@ invalid_uid=uid invalide system_favorite_overwrite_not_allowed=* Vous n'\u00eates pas autoris\u00e9 \u00e0 \u00e9craser un favori du syst\u00e8me favorite_no_orgunits=Favoris n'a pas d'unit\u00e8s d'organisation -this_year=Ann\u00e9e en cours \ No newline at end of file +this_year=Ann\u00e9e en cours +trend=Tendance +min_two_categories=Minimum de deux cat\u00e9gories est n\u00e9cessaire +chart_options=Options graphiques \ No newline at end of file === modified file 'dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/app/app.js' --- dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/app/app.js 2012-02-13 10:37:38 +0000 +++ dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/app/app.js 2012-02-16 18:09:21 +0000 @@ -11,6 +11,7 @@ DV.state.series.names = DV.conf.init.example.series; DV.state.category.dimension = DV.conf.finals.dimension.period.value; DV.state.category.names = DV.conf.init.example.category; + DV.state.filter.dimension = DV.conf.finals.dimension.organisationunit.value; DV.state.filter.names = DV.conf.init.example.filter; DV.state.targetLineValue = 80; DV.state.targetLineLabel = 'Target line label'; @@ -61,7 +62,7 @@ ajax: { jsonfy: function(r) { r = Ext.JSON.decode(r.responseText); - var obj = {system: {rootNode: {id: r.rn[0], name: r.rn[1], level: 1}, periods: {}, user: {id: r.user.id, isAdmin: r.user.isAdmin}}}; + var obj = {system: {rootNode: {id: r.rn[0], name: r.rn[1], level: 1}, periods: {}, user: {id: r.user.id, isAdmin: r.user.isAdmin, organisationUnit: {id: r.user.ou[0], name: r.user.ou[1]}}}}; for (var relative in r.p) { obj.system.periods[relative] = []; for (var i = 0; i < r.p[relative].length; i++) { @@ -146,7 +147,7 @@ font: 'arial,sans-serif,ubuntu,consolas' }, theme: { - dv1: ['#94ae0a', '#115fa6', '#a61120', '#ff8809', '#7c7474', '#a61187', '#ffd13e', '#24ad9a', '#a66111', '#414141', '#4500c4', '#1d5700'] + dv1: ['#94ae0a', '#0c4375', '#a61120', '#ff8809', '#7c7474', '#a61187', '#ffd13e', '#24ad9a', '#a66111', '#414141', '#4500c4', '#1d5700'] } }, layout: { @@ -169,15 +170,7 @@ Ext.onReady( function() { Ext.override(Ext.form.FieldSet,{setExpanded:function(a){var b=this,c=b.checkboxCmp,d=b.toggleCmp,e;a=!!a;if(c){c.setValue(a)}if(d){d.setType(a?"up":"down")}if(a){e="expand";b.removeCls(b.baseCls+"-collapsed")}else{e="collapse";b.addCls(b.baseCls+"-collapsed")}b.collapsed=!a;b.doComponentLayout();b.fireEvent(e,b);return b}}); Ext.QuickTips.init(); - document.body.oncontextmenu = function(){return false;}; - Ext.chart.theme.dv1 = Ext.extend(Ext.chart.theme.Base, { - constructor: function(config) { - Ext.chart.theme.Base.prototype.constructor.call(this, Ext.apply({ - seriesThemes: DV.conf.chart.theme.dv1, - colors: DV.conf.chart.theme.dv1 - }, config)); - } - }); + document.body.oncontextmenu = function(){return false;}; Ext.Ajax.request({ url: DV.conf.finals.ajax.path_visualizer + DV.conf.finals.ajax.initialize, @@ -218,16 +211,16 @@ getCmp: function(q) { return DV.viewport.query(q)[0]; }, - getUrlParam: function(strParam) { + getUrlParam: function(s) { var output = ''; - var strHref = window.location.href; - if (strHref.indexOf('?') > -1 ) { - var strQueryString = strHref.substr(strHref.indexOf('?')); - var aQueryString = strQueryString.split('&'); - for (var iParam = 0; iParam < aQueryString.length; iParam++) { - if (aQueryString[iParam].indexOf(strParam + '=') > -1) { - var aParam = aQueryString[iParam].split('='); - output = aParam[1]; + var href = window.location.href; + if (href.indexOf('?') > -1 ) { + var query = href.substr(href.indexOf('?')); + var query = query.split('&'); + for (var i = 0; i < query.length; i++) { + if (query[i].indexOf(s + '=') > -1) { + var a = query[i].split('='); + output = a[1]; break; } } @@ -370,7 +363,7 @@ } } return false; - } + } }, dimension: { indicator: { @@ -413,7 +406,7 @@ }); return (isFilter && a.length > 1) ? a.slice(0,1) : a; }, - getNames: function(exception) { + getNames: function(exception, isFilter) { var a = []; DV.cmp.dimension.indicator.selected.store.each( function(r) { a.push(DV.util.string.getEncodedString(r.data.s)); @@ -426,7 +419,7 @@ if (exception && !a.length) { alert(DV.i18n.alert_no_indicators_selected); } - return a; + return (isFilter && a.length > 1) ? a.slice(0,1) : a; } }, period: { @@ -441,7 +434,7 @@ } return (isFilter && a.length > 1) ? a.slice(0,1) : a; }, - getNames: function(exception) { + getNames: function(exception, isFilter) { var a = [], cmp = DV.cmp.dimension.period; Ext.Array.each(cmp, function(item) { @@ -454,7 +447,7 @@ if (exception && !a.length) { alert(DV.i18n.no_periods_selected); } - return a; + return (isFilter && a.length > 1) ? a.slice(0,1) : a; }, getNamesByRelativePeriodsObject: function(rp) { var relatives = [], @@ -512,42 +505,42 @@ organisationunit: { getUrl: function(isFilter) { var a = []; - Ext.Array.each(DV.state.organisationunitIds, function(item) { - a.push('organisationUnitIds=' + item); - }); + Ext.Array.each(DV.state.organisationunitIds, function(item) { + a.push('organisationUnitIds=' + item); + }); return (isFilter && a.length > 1) ? a.slice(0,1) : a; }, - getNames: function(exception) { + getNames: function(exception, isFilter) { var a = [], tp = DV.cmp.dimension.organisationunit.treepanel, selection = tp.getSelectionModel().getSelection(); - if (!selection.length) { - selection = [tp.getRootNode()]; - tp.selectRoot(); - } - Ext.Array.each(selection, function(r) { - a.push(DV.util.string.getEncodedString(r.data.text)); - }); - if (exception && !a.length) { - alert(DV.i18n.no_orgunits_selected); - } - return a; + if (!selection.length) { + selection = [tp.getRootNode()]; + tp.selectRoot(); + } + Ext.Array.each(selection, function(r) { + a.push(DV.util.string.getEncodedString(r.data.text)); + }); + if (exception && !a.length) { + alert(DV.i18n.no_orgunits_selected); + } + return DV.state.userOrganisationUnit ? [DV.init.system.user.organisationUnit.name] : (isFilter && a.length > 1) ? a.slice(0,1) : a; }, getIds: function(exception) { var a = [], tp = DV.cmp.dimension.organisationunit.treepanel, selection = tp.getSelectionModel().getSelection(); - if (!selection.length) { - selection = [tp.getRootNode()]; - tp.selectRoot(); - } - Ext.Array.each(selection, function(r) { - a.push(DV.util.string.getEncodedString(r.data.id)); - }); - if (exception && !a.length) { - alert(DV.i18n.no_orgunits_selected); - } - return a; + if (!selection.length) { + selection = [tp.getRootNode()]; + tp.selectRoot(); + } + Ext.Array.each(selection, function(r) { + a.push(r.data.id); + }); + if (exception && !a.length) { + alert(DV.i18n.no_orgunits_selected); + } + return DV.state.userOrganisationUnit ? [DV.init.system.user.organisationUnit.id] : a; } } }, @@ -678,7 +671,8 @@ yField: DV.conf.finals.data.targetline, style: { opacity: 1, - lineWidth: 2 + lineWidth: 3, + stroke: '#051a2e' }, markerConfig: { type: 'circle', @@ -687,22 +681,41 @@ title: title }; }, - getTrendLine: function() { - return { - type: 'line', - axis: 'left', - xField: DV.conf.finals.data.domain, - yField: DV.conf.finals.data.trendline, - style: { - opacity: 1, - lineWidth: 2 - }, - markerConfig: { - type: 'circle', - radius: 0 - }, - title: DV.i18n.trend_line + ' (' + DV.value.trendLine[0] + ' - ' + DV.value.trendLine[DV.value.trendLine.length - 1] + ')' - }; + getTrendLineArray: function() { + var a = []; + for (var i = 0; i < DV.chart.trendLine.length; i++) { + a.push({ + type: 'line', + axis: 'left', + xField: DV.conf.finals.data.domain, + yField: DV.chart.trendLine[i].key, + style: { + opacity: 0.8, + lineWidth: 3 + }, + markerConfig: { + type: 'circle', + radius: 4 + }, + tips: DV.util.chart.default.series.getTips(), + title: DV.chart.trendLine[i].name + }); + } + return a; + }, + setTheme: function() { + var colors = DV.conf.chart.theme.dv1.slice(0, DV.state.series.names.length); + if (DV.state.targetLineValue) { + colors.push('051a2e', '#051a2e'); + } + Ext.chart.theme.dv1 = Ext.extend(Ext.chart.theme.Base, { + constructor: function(config) { + Ext.chart.theme.Base.prototype.constructor.call(this, Ext.apply({ + seriesThemes: colors, + colors: colors + }, config)); + } + }); } } }, @@ -728,6 +741,15 @@ } }, series: { + getTips: function() { + return { + trackMouse: true, + cls: 'dv-chart-tips', + renderer: function(si, item) { + this.update('' + item.value[0]); + } + }; + }, getTargetLine: function() { var tl = DV.util.chart.default.series.getTargetLine(); tl.axis = 'bottom'; @@ -735,12 +757,27 @@ tl.yField = DV.conf.finals.data.domain; return tl; }, - getTrendLine: function() { - var tl = DV.util.chart.default.series.getTrendLine(); - tl.axis = 'bottom'; - tl.xField = DV.conf.finals.data.trendline; - tl.yField = DV.conf.finals.data.domain; - return tl; + getTrendLineArray: function() { + var a = []; + for (var i = 0; i < DV.chart.trendLine.length; i++) { + a.push({ + type: 'line', + axis: 'bottom', + xField: DV.chart.trendLine[i].key, + yField: DV.conf.finals.data.domain, + style: { + opacity: 0.8, + lineWidth: 3 + }, + markerConfig: { + type: 'circle', + radius: 4 + }, + tips: DV.util.chart.bar.series.getTips(), + title: DV.chart.trendLine[i].name + }); + } + return a; } } }, @@ -766,6 +803,21 @@ }); } return a; + }, + setTheme: function() { + var colors = DV.conf.chart.theme.dv1.slice(0, DV.state.series.names.length); + colors = colors.concat(colors); + if (DV.state.targetLineValue) { + colors.push('051a2e', '#051a2e'); + } + Ext.chart.theme.dv1 = Ext.extend(Ext.chart.theme.Base, { + constructor: function(config) { + Ext.chart.theme.Base.prototype.constructor.call(this, Ext.apply({ + seriesThemes: colors, + colors: colors + }, config)); + } + }); } } }, @@ -803,6 +855,17 @@ this.update(item.data[DV.conf.finals.data.domain] + '
' + item.data[DV.state.series.names[0]] + ''); } }; + }, + setTheme: function() { + var colors = DV.conf.chart.theme.dv1.slice(0, DV.state.category.names.length); + Ext.chart.theme.dv1 = Ext.extend(Ext.chart.theme.Base, { + constructor: function(config) { + Ext.chart.theme.Base.prototype.constructor.call(this, Ext.apply({ + seriesThemes: colors, + colors: colors + }, config)); + } + }); } } } @@ -895,16 +958,12 @@ }, value: { jsonfy: function(r) { - r = Ext.JSON.decode(r.responseText); - var obj = { - values: [], - trendline: [] - }; + r = Ext.JSON.decode(r.responseText), + values = []; for (var i = 0; i < r.length; i++) { - obj.values.push({v: r[i][0], d: r[i][1], p: r[i][2], o: r[i][3]}); + values.push({d: r[i][0], p: r[i][1], o: r[i][2], v: r[i][3]}); } - obj.trendline = [40,45,50,55,60,65,70,75,80,85,90,95]; - return obj; + return values; } }, crud: { @@ -914,14 +973,6 @@ var params = DV.state.getParams(); params.name = DV.cmp.favorite.name.getValue(); - params.trendLine = DV.cmp.favorite.trendline.getValue(); - params.hideSubtitle = DV.cmp.favorite.hidesubtitle.getValue(); - params.hideLegend = DV.cmp.favorite.hidelegend.getValue(); - params.userOrganisationUnit = DV.cmp.favorite.userorganisationunit.getValue(); - params.domainAxisLabel = DV.cmp.favorite.domainaxislabel.getValue(); - params.rangeAxisLabel = DV.cmp.favorite.rangeaxislabel.getValue(); - params.targetLineValue = DV.cmp.favorite.targetlinevalue.getValue(); - params.targetLineLabel = (params.targetLineValue && !DV.cmp.favorite.targetlinelabel.isDisabled()) ? DV.cmp.favorite.targetlinelabel.getValue() : null; if (isUpdate) { params.uid = DV.store.favorite.getAt(DV.store.favorite.findExact('name', params.name)).data.id; @@ -987,7 +1038,7 @@ } }, favorite: { - validate: function(f) { + validate: function(f) { if (!f.organisationUnits || !f.organisationUnits.length) { alert(DV.i18n.favorite_no_orgunits); return false; @@ -1159,47 +1210,52 @@ targetLineValue: 70, targetLineLabel: null, trendLine: null, + userOrganisationUnit: false, isRendered: false, getState: function(exe) { this.resetState(); - var tmp_series_dimension = DV.cmp.settings.series.getValue(); - var tmp_series_names = DV.util.dimension[tmp_series_dimension].getNames(true); - - var tmp_category_dimension = DV.cmp.settings.category.getValue(); - var tmp_category_names = DV.util.dimension[tmp_category_dimension].getNames(true); - - var tmp_filter_dimension = DV.cmp.settings.filter.getValue(); - var tmp_filter_names = DV.util.dimension[tmp_filter_dimension].getNames(true).slice(0,1); - - if (!tmp_series_names.length || !tmp_category_names.length || !tmp_filter_names.length) { - return; - } - this.type = DV.util.button.type.getValue(); - this.series.dimension = tmp_series_dimension; - this.series.names = tmp_series_names; - - this.category.dimension = tmp_category_dimension; - this.category.names = tmp_category_names; - - this.filter.dimension = tmp_filter_dimension; - this.filter.names = tmp_filter_names; - - this.indicatorIds = DV.util.dimension.indicator.getIds(); - this.dataelementIds = DV.util.dimension.dataelement.getIds(); - this.relativePeriods = DV.util.dimension.period.getRelativePeriodObject(); - this.organisationunitIds = DV.util.dimension.organisationunit.getIds(); - this.hideSubtitle = DV.cmp.favorite.hidesubtitle.getValue(); this.hideLegend = DV.cmp.favorite.hidelegend.getValue(); this.trendLine = DV.cmp.favorite.trendline.getValue(); + this.userOrganisationUnit = DV.cmp.favorite.userorganisationunit.getValue(); this.domainAxisLabel = DV.cmp.favorite.domainaxislabel.getValue(); this.rangeAxisLabel = DV.cmp.favorite.rangeaxislabel.getValue(); this.targetLineValue = parseFloat(DV.cmp.favorite.targetlinevalue.getValue()); this.targetLineLabel = DV.cmp.favorite.targetlinelabel.getValue(); + this.series.dimension = DV.cmp.settings.series.getValue(); + this.series.names = DV.util.dimension[this.series.dimension].getNames(true); + + this.category.dimension = DV.cmp.settings.category.getValue(); + this.category.names = DV.util.dimension[this.category.dimension].getNames(true); + + this.filter.dimension = DV.cmp.settings.filter.getValue(); + this.filter.names = DV.util.dimension[this.filter.dimension].getNames(true, true); + + if (!this.series.names.length || !this.category.names.length || !this.filter.names.length) { + this.resetState(); + return; + } + + if (this.type == DV.conf.finals.chart.line && this.category.names.length < 2) { + this.resetState(); + alert(DV.i18n.line_chart + ': ' + DV.i18n.min_two_categories); + return; + } + if (this.type == DV.conf.finals.chart.area && this.category.names.length < 2) { + this.resetState(); + alert(DV.i18n.area_chart + ': ' + DV.i18n.min_two_categories); + return; + } + + this.indicatorIds = DV.util.dimension.indicator.getIds(); + this.dataelementIds = DV.util.dimension.dataelement.getIds(); + this.relativePeriods = DV.util.dimension.period.getRelativePeriodObject(); + this.organisationunitIds = DV.util.dimension.organisationunit.getIds(); + if (!this.isRendered) { DV.cmp.toolbar.datatable.enable(); this.isRendered = true; @@ -1213,13 +1269,25 @@ this.getState(); var obj = {}; obj.type = this.type.toUpperCase(); + + obj.hideSubtitle = DV.cmp.favorite.hidesubtitle.getValue(); + obj.hideLegend = DV.cmp.favorite.hidelegend.getValue(); + obj.trendLine = DV.cmp.favorite.trendline.getValue(); + obj.userOrganisationUnit = DV.cmp.favorite.userorganisationunit.getValue(); + obj.domainAxisLabel = DV.cmp.favorite.domainaxislabel.getValue(); + obj.rangeAxisLabel = DV.cmp.favorite.rangeaxislabel.getValue(); + obj.targetLineValue = DV.cmp.favorite.targetlinevalue.getValue(); + obj.targetLineLabel = (obj.targetLineValue && !DV.cmp.favorite.targetlinelabel.isDisabled()) ? DV.cmp.favorite.targetlinelabel.getValue() : null; + obj.series = this.series.dimension.toUpperCase(); obj.category = this.category.dimension.toUpperCase(); obj.filter = this.filter.dimension.toUpperCase(); + obj.indicatorIds = this.indicatorIds; obj.dataElementIds = this.dataelementIds; + obj = Ext.Object.merge(obj, this.relativePeriods); obj.organisationUnitIds = this.organisationunitIds; - obj = Ext.Object.merge(obj, this.relativePeriods); + return obj; }, setFavorite: function(exe, uid) { @@ -1230,10 +1298,13 @@ scope: this, success: function(r) { if (!r.responseText) { - DV.mask.hide(); + if (DV.mask) { + DV.mask.hide(); + } alert(DV.i18n.invalid_uid); return; } + var f = Ext.JSON.decode(r.responseText), indiment = []; @@ -1255,6 +1326,25 @@ this.type = f.type; DV.util.button.type.setValue(this.type); + this.trendLine = f.regression; + DV.cmp.favorite.trendline.setValue(f.regression); + this.hideSubtitle = f.hideSubtitle; + DV.cmp.favorite.hidesubtitle.setValue(f.hideSubtitle); + this.hideLegend = f.hideLegend; + DV.cmp.favorite.hidelegend.setValue(f.hideLegend); + DV.cmp.favorite.userorganisationunit.setValue(f.userOrganisationUnit); + this.domainAxisLabel = f.domainAxisLabel; + DV.cmp.favorite.domainaxislabel.setValue(f.domainAxisLabel); + this.rangeAxisLabel = f.rangeAxisLabel; + DV.cmp.favorite.rangeaxislabel.setValue(f.rangeAxisLabel); + this.targetLineValue = f.targetLineValue ? parseFloat(f.targetLineValue) : null; + DV.cmp.favorite.targetlinevalue.setValue(f.targetLineValue); + DV.cmp.favorite.targetlinelabel.xable(); + this.targetLineLabel = f.targetLineLabel ? f.targetLineLabel : null; + DV.cmp.favorite.targetlinelabel.setValue(f.targetLineLabel); + this.userOrganisationUnit = f.userOrganisationUnit; + DV.cmp.favorite.userorganisationunit.setValue(f.userOrganisationUnit); + this.series.dimension = f.series; DV.cmp.settings.series.setValue(DV.conf.finals.dimension[this.series.dimension].value); DV.util.combobox.filter.category(); @@ -1308,23 +1398,6 @@ this.series.names = f.names[this.series.dimension]; this.category.names = f.names[this.category.dimension]; this.filter.names = f.names[this.filter.dimension]; - - this.trendLine = f.regression; - DV.cmp.favorite.trendline.setValue(f.regression); - this.hideSubtitle = f.hideSubtitle; - DV.cmp.favorite.hidesubtitle.setValue(f.hideSubtitle); - this.hideLegend = f.hideLegend; - DV.cmp.favorite.hidelegend.setValue(f.hideLegend); - DV.cmp.favorite.userorganisationunit.setValue(f.userOrganisationUnit); - this.domainAxisLabel = f.domainAxisLabel; - DV.cmp.favorite.domainaxislabel.setValue(f.domainAxisLabel); - this.rangeAxisLabel = f.rangeAxisLabel; - DV.cmp.favorite.rangeaxislabel.setValue(f.rangeAxisLabel); - this.targetLineValue = f.targetLineValue ? parseFloat(f.targetLineValue) : null; - DV.cmp.favorite.targetlinevalue.setValue(f.targetLineValue); - DV.cmp.favorite.targetlinelabel.xable(); - this.targetLineLabel = f.targetLineLabel ? f.targetLineLabel : null; - DV.cmp.favorite.targetlinelabel.setValue(f.targetLineLabel); if (!this.isRendered) { DV.cmp.toolbar.datatable.enable(); @@ -1357,6 +1430,7 @@ this.rangeAxisLabel = null; this.targetLineValue = null; this.targetLineLabel = null; + this.userOrganisationUnit = false; } }; @@ -1364,10 +1438,8 @@ values: [], getValues: function(exe) { DV.util.mask.setMask(DV.cmp.region.center, DV.i18n.loading); - var params = [], - i = DV.conf.finals.dimension.indicator.value, - d = DV.conf.finals.dimension.dataelement.value; - + + var params = []; params = params.concat(DV.util.dimension[DV.state.series.dimension].getUrl()); params = params.concat(DV.util.dimension[DV.state.category.dimension].getUrl()); params = params.concat(DV.util.dimension[DV.state.filter.dimension].getUrl(true)); @@ -1379,17 +1451,15 @@ Ext.Ajax.request({ url: baseurl, - success: function(r) { - var json = DV.util.value.jsonfy(r); - DV.value.values = json.values; - DV.value.trendLine = json.trendline; + success: function(r) { + DV.value.values = DV.util.value.jsonfy(r); if (!DV.value.values.length) { DV.mask.hide(); alert(DV.i18n.no_data); return; } - var storage = Ext.Object.merge(DV.store[i].available.storage, DV.store[d].available.storage); + var storage = Ext.Object.merge(DV.store[DV.conf.finals.dimension.indicator.value].available.storage, DV.store[DV.conf.finals.dimension.dataelement.value].available.storage); Ext.Array.each(DV.value.values, function(item) { item[DV.conf.finals.dimension.data.value] = DV.util.string.getEncodedString(storage[item.d].name); item[DV.conf.finals.dimension.period.value] = DV.util.string.getEncodedString(DV.util.dimension.period.getNameById(item.p)); @@ -1405,12 +1475,11 @@ } } }); - }, - trendLine: [] + } }; DV.chart = { - data: [], + data: [], getData: function(exe) { this.data = []; @@ -1436,16 +1505,40 @@ } } }); - - if (DV.state.targetLineValue) { - Ext.Array.each(DV.chart.data, function(item) { - item[DV.conf.finals.data.targetline] = DV.state.targetLineValue; - }); - } - - if (DV.state.trendLine) { - for (var i = 0; i < DV.chart.data.length; i++) { - DV.chart.data[i][DV.conf.finals.data.trendline] = DV.value.trendLine[i]; + + if (DV.state.type === DV.conf.finals.chart.column || + DV.state.type === DV.conf.finals.chart.bar || + DV.state.type === DV.conf.finals.chart.line) { + if (DV.state.trendLine) { + if (DV.state.category.names.length < 2) { + DV.state.trendLine = false; + alert(DV.i18n.trend_line + ': ' + DV.i18n.min_two_categories); + } + else { + this.trendLine = []; + for (var i = 0; i < DV.state.series.names.length; i++) { + var s = DV.state.series.names[i], + reg = new SimpleRegression(); + for (var j = 0; j < DV.chart.data.length; j++) { + reg.addData(j, DV.chart.data[j][s]); + } + var key = DV.conf.finals.data.trendline + s; + for (var j = 0; j < DV.chart.data.length; j++) { + var n = reg.predict(j); + DV.chart.data[j][key] = parseFloat(reg.predict(j).toFixed(1)); + } + this.trendLine.push({ + key: key, + name: DV.i18n.trend + ' (' + s + ')' + }); + } + } + } + + if (DV.state.targetLineValue) { + Ext.Array.each(DV.chart.data, function(item) { + item[DV.conf.finals.data.targetline] = DV.state.targetLineValue; + }); } } @@ -1455,9 +1548,9 @@ else { return this.data; } - }, + }, chart: null, - getChart: function(exe) { + getChart: function(exe) { this[DV.state.type](); if (exe) { this.reload(); @@ -1468,6 +1561,12 @@ }, column: function(stacked) { var series = []; + if (DV.state.trendLine && !stacked) { + var a = DV.util.chart.default.series.getTrendLineArray(); + for (var i = 0; i < a.length; i++) { + series.push(a[i]); + } + } series.push({ type: 'column', axis: 'left', @@ -1477,21 +1576,19 @@ style: { opacity: 0.8, stroke: '#333' - }, + }, tips: DV.util.chart.default.series.getTips() }); if (DV.state.targetLineValue && !stacked) { series.push(DV.util.chart.default.series.getTargetLine()); } - if (DV.state.trendLine && !stacked) { - series.push(DV.util.chart.default.series.getTrendLine()); - } var axes = []; var numeric = DV.util.chart.default.axis.getNumeric(stacked); axes.push(numeric); axes.push(DV.util.chart.default.axis.getCategory()); + DV.util.chart.default.series.setTheme(); this.chart = DV.util.chart.default.getChart(axes, series); }, stackedcolumn: function() { @@ -1499,6 +1596,12 @@ }, bar: function(stacked) { var series = []; + if (DV.state.trendLine && !stacked) { + var a = DV.util.chart.bar.series.getTrendLineArray(); + for (var i = 0; i < a.length; i++) { + series.push(a[i]); + } + } series.push({ type: 'bar', axis: 'bottom', @@ -1514,34 +1617,37 @@ if (DV.state.targetLineValue && !stacked) { series.push(DV.util.chart.bar.series.getTargetLine()); } - if (DV.state.trendLine && !stacked) { - series.push(DV.util.chart.bar.series.getTrendLine()); - } var axes = []; var numeric = DV.util.chart.bar.axis.getNumeric(stacked); axes.push(numeric); axes.push(DV.util.chart.bar.axis.getCategory()); + DV.util.chart.default.series.setTheme(); this.chart = DV.util.chart.default.getChart(axes, series); }, stackedbar: function() { this.bar(true); }, line: function() { - var series = DV.util.chart.line.series.getArray(); + var series = []; + if (DV.state.trendLine) { + var a = DV.util.chart.default.series.getTrendLineArray(); + for (var i = 0; i < a.length; i++) { + series.push(a[i]); + } + } + series = series.concat(DV.util.chart.line.series.getArray()); if (DV.state.targetLineValue) { series.push(DV.util.chart.default.series.getTargetLine()); } - if (DV.state.trendLine) { - series.push(DV.util.chart.default.series.getTrendLine()); - } var axes = []; var numeric = DV.util.chart.default.axis.getNumeric(); axes.push(numeric); axes.push(DV.util.chart.default.axis.getCategory()); + DV.util.chart.line.series.setTheme(); this.chart = DV.util.chart.default.getChart(axes, series); }, area: function() { @@ -1562,9 +1668,11 @@ axes.push(numeric); axes.push(DV.util.chart.default.axis.getCategory()); + DV.util.chart.line.series.setTheme(); this.chart = DV.util.chart.default.getChart(axes, series); }, pie: function() { + DV.util.chart.pie.series.setTheme(); this.chart = Ext.create('Ext.chart.Chart', { animate: true, shadow: true, @@ -1868,7 +1976,7 @@ }, { xtype: 'panel', - bodyStyle: 'border-style:none; border-top:2px groove #eee; padding:10px;', + bodyStyle: 'border-style:none; border-top:2px groove #eee; padding:10px 10px 0 10px;', items: [ { xtype: 'fieldset', @@ -2028,7 +2136,7 @@ DV.cmp.fieldset.indicator = this; }, expand: function() { - DV.util.fieldset.collapseFieldsets([DV.cmp.fieldset.dataelement, DV.cmp.fieldset.period, DV.cmp.fieldset.organisationunit, DV.cmp.fieldset.options]); + DV.util.fieldset.collapseFieldsets([DV.cmp.fieldset.dataelement, DV.cmp.fieldset.period, DV.cmp.fieldset.organisationunit]); } } }, @@ -2189,7 +2297,7 @@ DV.cmp.fieldset.dataelement = this; }, expand: function() { - DV.util.fieldset.collapseFieldsets([DV.cmp.fieldset.indicator, DV.cmp.fieldset.period, DV.cmp.fieldset.organisationunit, DV.cmp.fieldset.options]); + DV.util.fieldset.collapseFieldsets([DV.cmp.fieldset.indicator, DV.cmp.fieldset.period, DV.cmp.fieldset.organisationunit]); } } }, @@ -2356,7 +2464,7 @@ DV.cmp.fieldset.period = this; }, expand: function() { - DV.util.fieldset.collapseFieldsets([DV.cmp.fieldset.indicator, DV.cmp.fieldset.dataelement, DV.cmp.fieldset.organisationunit, DV.cmp.fieldset.options]); + DV.util.fieldset.collapseFieldsets([DV.cmp.fieldset.indicator, DV.cmp.fieldset.dataelement, DV.cmp.fieldset.organisationunit]); } } }, @@ -2371,7 +2479,7 @@ { xtype: 'treepanel', cls: 'dv-tree', - height: 300, + height: 260, width: DV.conf.layout.west_fieldset_width - 22, autoScroll: true, multiSelect: true, @@ -2443,8 +2551,17 @@ afterrender: function() { DV.cmp.fieldset.organisationunit = this; }, + collapse: function(fs) { + if (DV.cmp.fieldset.organisationunit) { + DV.cmp.fieldset.organisationunit.setHeight(25); + } + }, expand: function(fs) { - DV.util.fieldset.collapseFieldsets([DV.cmp.fieldset.indicator, DV.cmp.fieldset.dataelement, DV.cmp.fieldset.period, DV.cmp.fieldset.options]); + var h = DV.cmp.region.west.getHeight() - 395; + DV.cmp.fieldset.organisationunit.setHeight(h); + DV.cmp.dimension.organisationunit.treepanel.setHeight(h - 30); + + DV.util.fieldset.collapseFieldsets([DV.cmp.fieldset.indicator, DV.cmp.fieldset.dataelement, DV.cmp.fieldset.period]); var tp = DV.cmp.dimension.organisationunit.treepanel; if (!tp.isRendered) { tp.isRendered = true; @@ -2453,177 +2570,174 @@ } } } - }, - { - xtype: 'fieldset', - cls: 'dv-fieldset', - name: 'options', - title: '' + DV.i18n.chart_options +'', - collapsed: true, - collapsible: true, - items: [ - { - html: '* ' + DV.i18n.png_only, - bodyStyle: 'border:0 none; color:#555; font-style:italic; padding-bottom:10px' - }, - { - xtype: 'panel', - layout: 'column', - bodyStyle: 'border-style:none; padding-bottom:10px', - items: [ - { - xtype: 'checkbox', - cls: 'dv-checkbox-alt1', - style: 'margin-right:20px', - boxLabel: DV.i18n.hide_subtitle, - labelWidth: DV.conf.layout.form_label_width, - listeners: { - added: function() { - DV.cmp.favorite.hidesubtitle = this; - } - } - }, - { - xtype: 'checkbox', - cls: 'dv-checkbox-alt1', - style: 'margin-right:20px', - boxLabel: DV.i18n.hide_legend, - labelWidth: DV.conf.layout.form_label_width, - listeners: { - added: function() { - DV.cmp.favorite.hidelegend = this; - } - } - }, - { - xtype: 'checkbox', - cls: 'dv-checkbox-alt1', - style: 'margin-right:21px', - boxLabel: '* ' + DV.i18n.trend_line + '', - labelWidth: DV.conf.layout.form_label_width, - listeners: { - added: function() { - DV.cmp.favorite.trendline = this; - } - } - }, - { - xtype: 'checkbox', - cls: 'dv-checkbox-alt1', - boxLabel: '* ' + DV.i18n.user_orgunit + '', - labelWidth: DV.conf.layout.form_label_width, - listeners: { - added: function() { - DV.cmp.favorite.userorganisationunit = this; - } - } - } - ] - }, - { - xtype: 'panel', - layout: 'column', - bodyStyle: 'border:0 none; padding-bottom:8px', - items: [ - { - xtype: 'textfield', - cls: 'dv-textfield-alt1', - style: 'margin-right:4px', - fieldLabel: DV.i18n.domain_axis_label, - labelAlign: 'top', - labelSeparator: '', - maxLength: 100, - enforceMaxLength: true, - labelWidth: DV.conf.layout.form_label_width, - width: 188, - listeners: { - added: function() { - DV.cmp.favorite.domainaxislabel = this; - } - } - }, - { - xtype: 'textfield', - cls: 'dv-textfield-alt1', - fieldLabel: DV.i18n.range_axis_label, - labelAlign: 'top', - labelSeparator: '', - maxLength: 100, - enforceMaxLength: true, - labelWidth: DV.conf.layout.form_label_width, - width: 187, - listeners: { - added: function() { - DV.cmp.favorite.rangeaxislabel = this; - } - } - } - ] - }, - { - xtype: 'panel', - layout: 'column', - bodyStyle: 'border:0 none', - items: [ - { - xtype: 'numberfield', - cls: 'dv-textfield-alt1', - style: 'margin-right:4px', - hideTrigger: true, - fieldLabel: DV.i18n.target_line_value, - labelAlign: 'top', - labelSeparator: '', - maxLength: 100, - enforceMaxLength: true, - width: 188, - listeners: { - added: function() { - DV.cmp.favorite.targetlinevalue = this; - }, - change: function() { - DV.cmp.favorite.targetlinelabel.xable(); - } - } - }, - { - xtype: 'textfield', - cls: 'dv-textfield-alt1', - fieldLabel: DV.i18n.target_line_label, - labelAlign: 'top', - labelSeparator: '', - maxLength: 100, - enforceMaxLength: true, - width: 187, - disabled: true, - xable: function() { - if (DV.cmp.favorite.targetlinevalue.getValue()) { - this.enable(); - } - else { - this.disable(); - } - }, - listeners: { - added: function() { - DV.cmp.favorite.targetlinelabel = this; - } - } - } - ] - } - ], - listeners: { - afterrender: function() { - DV.cmp.fieldset.options = this; - }, - expand: function() { - DV.util.fieldset.collapseFieldsets([DV.cmp.fieldset.indicator, DV.cmp.fieldset.dataelement, DV.cmp.fieldset.period, DV.cmp.fieldset.organisationunit]); - } - } } ] - } - ], + }, + { + xtype: 'toolbar', + id: 'chartoptions_tb', + layout: 'fit', + items: [ + { + xtype: 'panel', + bodyStyle: 'border-style:none; background-color:transparent; padding:0 2px', + items: [ + { + bodyStyle: 'border-style:none; background-color:transparent; padding:0 0 10px 3px; font-size:11px; font-weight:bold', + html: DV.i18n.chart_options + }, + { + xtype: 'panel', + layout: 'column', + bodyStyle: 'border-style:none; background-color:transparent; padding-bottom:15px', + items: [ + { + xtype: 'checkbox', + cls: 'dv-checkbox-alt1', + style: 'margin-right:26px', + boxLabel: DV.i18n.hide_subtitle, + labelWidth: DV.conf.layout.form_label_width, + listeners: { + added: function() { + DV.cmp.favorite.hidesubtitle = this; + } + } + }, + { + xtype: 'checkbox', + cls: 'dv-checkbox-alt1', + style: 'margin-right:25px', + boxLabel: DV.i18n.hide_legend, + labelWidth: DV.conf.layout.form_label_width, + listeners: { + added: function() { + DV.cmp.favorite.hidelegend = this; + } + } + }, + { + xtype: 'checkbox', + cls: 'dv-checkbox-alt1', + style: 'margin-right:26px', + boxLabel: DV.i18n.trend_line, + labelWidth: DV.conf.layout.form_label_width, + listeners: { + added: function() { + DV.cmp.favorite.trendline = this; + } + } + }, + { + xtype: 'checkbox', + cls: 'dv-checkbox-alt1', + boxLabel: DV.i18n.user_orgunit, + labelWidth: DV.conf.layout.form_label_width, + listeners: { + added: function() { + DV.cmp.favorite.userorganisationunit = this; + } + } + } + ] + }, + { + xtype: 'panel', + layout: 'column', + bodyStyle: 'border:0 none; background-color:transparent; padding-bottom:8px', + items: [ + { + xtype: 'textfield', + cls: 'dv-textfield-alt1', + style: 'margin-right:4px', + fieldLabel: DV.i18n.domain_axis_label, + labelAlign: 'top', + labelSeparator: '', + maxLength: 100, + enforceMaxLength: true, + labelWidth: DV.conf.layout.form_label_width, + width: 199, + listeners: { + added: function() { + DV.cmp.favorite.domainaxislabel = this; + } + } + }, + { + xtype: 'textfield', + cls: 'dv-textfield-alt1', + fieldLabel: DV.i18n.range_axis_label, + labelAlign: 'top', + labelSeparator: '', + maxLength: 100, + enforceMaxLength: true, + labelWidth: DV.conf.layout.form_label_width, + width: 199, + listeners: { + added: function() { + DV.cmp.favorite.rangeaxislabel = this; + } + } + } + ] + }, + { + xtype: 'panel', + layout: 'column', + bodyStyle: 'border:0 none; background-color:transparent; padding-bottom:5px', + items: [ + { + xtype: 'numberfield', + cls: 'dv-textfield-alt1', + style: 'margin-right:5px', + hideTrigger: true, + fieldLabel: DV.i18n.target_line_value, + labelAlign: 'top', + labelSeparator: '', + maxLength: 100, + enforceMaxLength: true, + width: 199, + spinUpEnabled: true, + spinDownEnabled: true, + listeners: { + added: function() { + DV.cmp.favorite.targetlinevalue = this; + }, + change: function() { + DV.cmp.favorite.targetlinelabel.xable(); + } + } + }, + { + xtype: 'textfield', + cls: 'dv-textfield-alt1', + fieldLabel: DV.i18n.target_line_label, + labelAlign: 'top', + labelSeparator: '', + maxLength: 100, + enforceMaxLength: true, + width: 199, + disabled: true, + xable: function() { + if (DV.cmp.favorite.targetlinevalue.getValue()) { + this.enable(); + } + else { + this.disable(); + } + }, + listeners: { + added: function() { + DV.cmp.favorite.targetlinelabel = this; + } + } + } + ] + } + ] + } + ] + } + ], listeners: { afterrender: function() { DV.cmp.region.west = this; === modified file 'dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/app/css/style.css' --- dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/app/css/style.css 2012-02-10 13:12:36 +0000 +++ dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/app/css/style.css 2012-02-16 16:52:38 +0000 @@ -382,6 +382,16 @@ border-top: 1px dashed #ccc; } +#chartoptions_tb { + background: #f5f5f5; + height: 100%; + padding: 6px 0 0 8px; + border-top: 2px ridge #e1e1e1; + border-right: 0 none; + border-bottom: 1px solid #ccc; + border-left: 0 none; +} + /* Toolbar favorites */ #favorite_t { border-bottom-width: 1px !important; === modified file 'dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/app/index.html' --- dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/app/index.html 2012-01-18 13:51:31 +0000 +++ dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/app/index.html 2012-02-15 13:26:17 +0000 @@ -15,6 +15,7 @@ + === modified file 'dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/i18n.vm' --- dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/i18n.vm 2012-02-13 10:37:38 +0000 +++ dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/i18n.vm 2012-02-16 16:52:38 +0000 @@ -6,7 +6,7 @@ bar_chart:'$encoder.jsEscape($i18n.getString( 'bar_chart' ) , "'")', stacked_bar_chart: '$encoder.jsEscape($i18n.getString( 'stacked_bar_chart' ) , "'")', line_chart:'$encoder.jsEscape($i18n.getString( 'line_chart' ) , "'")', -area_chart:'$encoder.jsEscape($i18n.getString( 'line_chart' ) , "'")', +area_chart:'$encoder.jsEscape($i18n.getString( 'area_chart' ) , "'")', pie_chart:'$encoder.jsEscape($i18n.getString( 'pie_chart' ) , "'")', series: '$encoder.jsEscape($i18n.getString( 'series' ) , "'")' , category:'$encoder.jsEscape($i18n.getString( 'category' ) , "'")', @@ -87,6 +87,8 @@ invalid_uid:'$encoder.jsEscape($i18n.getString( 'invalid_uid' ) , "'")', system_favorite_overwrite_not_allowed:'$encoder.jsEscape($i18n.getString( 'system_favorite_overwrite_not_allowed' ) , "'")', favorite_no_orgunits:'$encoder.jsEscape($i18n.getString( 'favorite_no_orgunits' ) , "'")', -this_year:'$encoder.jsEscape($i18n.getString( 'this_year' ) , "'")' - +this_year:'$encoder.jsEscape($i18n.getString( 'this_year' ) , "'")', +trend:'$encoder.jsEscape($i18n.getString( 'trend' ) , "'")', +min_two_categories:'$encoder.jsEscape($i18n.getString( 'min_two_categories' ) , "'")', +chart_options:'$encoder.jsEscape($i18n.getString( 'chart_options' ) , "'")' }; \ No newline at end of file === modified file 'dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/jsonInitialize.vm' --- dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/jsonInitialize.vm 2012-02-13 10:37:38 +0000 +++ dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/jsonInitialize.vm 2012-02-13 13:28:53 +0000 @@ -1,1 +1,1 @@ -{"user":{"id":"$!currentUser.id","isAdmin":$auth.hasAccess( "dhis-web-visualizer", "addOrUpdateSystemChart" )},"rn":["$!{rootNode.id}","$!encoder.jsonEncode(${rootNode.name})"],"p":{"lastMonth":[#foreach($p in $lastMonth)["$!{p.id}","$!encoder.jsonEncode(${p.name})"]#if($velocityCount<$lastMonth.size()),#end#end],"last12Months":[#foreach($p in $last12Months)["$!{p.id}","$!encoder.jsonEncode(${p.name})"]#if($velocityCount<$last12Months.size()),#end#end],"lastQuarter":[#foreach($p in $lastQuarter)["$!{p.id}","$!encoder.jsonEncode(${p.name})"]#if($velocityCount<$lastQuarter.size()),#end#end],"last4Quarters":[#foreach($p in $last4Quarters)["$!{p.id}","$!encoder.jsonEncode(${p.name})"]#if($velocityCount<$last4Quarters.size()),#end#end],"lastSixMonth":[#foreach($p in $lastSixMonth)["$!{p.id}","$!encoder.jsonEncode(${p.name})"]#if($velocityCount<$lastSixMonth.size()),#end#end],"last2SixMonths":[#foreach($p in $last2SixMonths)["$!{p.id}","$!encoder.jsonEncode(${p.name})"]#if($velocityCount<$last2SixMonths.size()),#end#end],"lastYear":[#foreach($p in $lastYear)["$!{p.id}","$!encoder.jsonEncode(${p.name})"]#if($velocityCount<$lastYear.size()),#end#end],"thisYear":[#foreach($p in $thisYear)["$!{p.id}","$!encoder.jsonEncode(${p.name})"]#if($velocityCount<$thisYear.size()),#end#end],"last5Years":[#foreach($p in $last5Years)["$!{p.id}","$!encoder.jsonEncode(${p.name})"]#if($velocityCount<$last5Years.size()),#end#end]}} \ No newline at end of file +{"user":{"id":"$!currentUser.id","isAdmin":$auth.hasAccess( "dhis-web-visualizer", "addOrUpdateSystemChart" ),"ou":["$!currentUser.organisationUnit.id","$!encoder.jsonEncode(${currentUser.organisationUnit.name})"]},"rn":["$!{rootNode.id}","$!encoder.jsonEncode(${rootNode.name})"],"p":{"lastMonth":[#foreach($p in $lastMonth)["$!{p.id}","$!encoder.jsonEncode(${p.name})"]#if($velocityCount<$lastMonth.size()),#end#end],"last12Months":[#foreach($p in $last12Months)["$!{p.id}","$!encoder.jsonEncode(${p.name})"]#if($velocityCount<$last12Months.size()),#end#end],"lastQuarter":[#foreach($p in $lastQuarter)["$!{p.id}","$!encoder.jsonEncode(${p.name})"]#if($velocityCount<$lastQuarter.size()),#end#end],"last4Quarters":[#foreach($p in $last4Quarters)["$!{p.id}","$!encoder.jsonEncode(${p.name})"]#if($velocityCount<$last4Quarters.size()),#end#end],"lastSixMonth":[#foreach($p in $lastSixMonth)["$!{p.id}","$!encoder.jsonEncode(${p.name})"]#if($velocityCount<$lastSixMonth.size()),#end#end],"last2SixMonths":[#foreach($p in $last2SixMonths)["$!{p.id}","$!encoder.jsonEncode(${p.name})"]#if($velocityCount<$last2SixMonths.size()),#end#end],"lastYear":[#foreach($p in $lastYear)["$!{p.id}","$!encoder.jsonEncode(${p.name})"]#if($velocityCount<$lastYear.size()),#end#end],"thisYear":[#foreach($p in $thisYear)["$!{p.id}","$!encoder.jsonEncode(${p.name})"]#if($velocityCount<$thisYear.size()),#end#end],"last5Years":[#foreach($p in $last5Years)["$!{p.id}","$!encoder.jsonEncode(${p.name})"]#if($velocityCount<$last5Years.size()),#end#end]}} \ No newline at end of file === modified file 'dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/jsonminAggregatedValues.vm' --- dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/jsonminAggregatedValues.vm 2011-12-06 10:53:15 +0000 +++ dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/jsonminAggregatedValues.vm 2012-02-13 16:05:35 +0000 @@ -1,1 +1,1 @@ -#set( $indicatorSize = $indicatorValues.size() )#set( $dataSize = $dataValues.size() )[#if( $indicatorSize > 0 )#foreach( $iv in $indicatorValues )["$!{iv.value}","$!{iv.indicatorId}","$!{iv.periodId}","$!{iv.organisationUnitId}"]#if( $velocityCount < $indicatorSize ),#end#end#end#if( $dataSize > 0 )#if( $indicatorSize > 0 ),#end#foreach( $dv in $dataValues )["$!{dv.value}","$!{dv.dataElementId}","$!{dv.periodId}","$!{dv.organisationUnitId}"]#if( $velocityCount < $dataSize ),#end#end#end] \ No newline at end of file +#set( $indicatorSize = $indicatorValues.size() )#set( $dataSize = $dataValues.size() )[#if( $indicatorSize > 0 )#foreach( $iv in $indicatorValues )["$!{iv.indicatorId}","$!{iv.periodId}","$!{iv.organisationUnitId}","$!{iv.value}",]#if( $velocityCount < $indicatorSize ),#end#end#end#if( $dataSize > 0 )#if( $indicatorSize > 0 ),#end#foreach( $dv in $dataValues )["$!{dv.dataElementId}","$!{dv.periodId}","$!{dv.organisationUnitId}","$!{dv.value}"]#if( $velocityCount < $dataSize ),#end#end#end] \ No newline at end of file