=== modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/ChartPluginController.java' --- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/ChartPluginController.java 2012-07-02 11:46:10 +0000 +++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/ChartPluginController.java 2012-07-10 11:50:19 +0000 @@ -50,6 +50,7 @@ import org.hisp.dhis.organisationunit.OrganisationUnitService; import org.hisp.dhis.period.Period; import org.hisp.dhis.period.PeriodService; +import org.hisp.dhis.period.PeriodType; import org.hisp.dhis.period.RelativePeriods; import org.hisp.dhis.user.CurrentUserService; import org.springframework.beans.factory.annotation.Autowired; @@ -63,6 +64,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; +import java.util.HashSet; import java.util.List; import java.util.Set; @@ -113,6 +115,7 @@ public String getChartValues( @RequestParam( required = false ) Set in, @RequestParam( required = false ) Set de, @RequestParam( required = false ) Set ds, + @RequestParam( required = false ) Set p, @RequestParam Set ou, @RequestParam( required = false ) boolean orgUnitIsParent, @RequestParam( required = false ) String organisationUnitGroupSetId, @@ -128,8 +131,23 @@ // --------------------------------------------------------------------- // Periods // --------------------------------------------------------------------- - - List periods = periodService.reloadPeriods( setNames( relativePeriods.getRelativePeriods(), format ) ); + + List periods = relativePeriods.getRelativePeriods(); + + if ( p != null && p.size() > 0 ) + { + for ( String iso : p ) + { + Period period = PeriodType.getPeriodFromIsoString( iso ); + + if ( !periods.contains( period ) ) + { + periods.add( period ); + } + } + } + + periods = periodService.reloadPeriods( setNames( periods, format ) ); if ( periodIsFilter ) { @@ -305,7 +323,12 @@ if ( ds != null ) { - List dataSets = dataSetService.getDataSetsByUid( ds ); + Set dataSets = new HashSet(); + + for ( String id : ds ) + { + dataSets.add( dataSetService.getDataSet( id ) ); + } if ( dataSets.isEmpty() ) { === modified file 'dhis-2/dhis-web/dhis-web-visualizer/src/main/java/org/hisp/dhis/visualizer/action/AddOrUpdateChartAction.java' --- dhis-2/dhis-web/dhis-web-visualizer/src/main/java/org/hisp/dhis/visualizer/action/AddOrUpdateChartAction.java 2012-06-12 12:45:33 +0000 +++ dhis-2/dhis-web/dhis-web-visualizer/src/main/java/org/hisp/dhis/visualizer/action/AddOrUpdateChartAction.java 2012-07-10 20:17:04 +0000 @@ -27,15 +27,22 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +import static org.hisp.dhis.system.util.DateUtils.setNames; + +import java.util.ArrayList; import java.util.List; import org.hisp.dhis.chart.Chart; import org.hisp.dhis.chart.ChartService; import org.hisp.dhis.dataelement.DataElementService; import org.hisp.dhis.dataset.DataSetService; +import org.hisp.dhis.i18n.I18nManager; import org.hisp.dhis.indicator.IndicatorService; import org.hisp.dhis.organisationunit.OrganisationUnitGroupService; import org.hisp.dhis.organisationunit.OrganisationUnitService; +import org.hisp.dhis.period.Period; +import org.hisp.dhis.period.PeriodService; +import org.hisp.dhis.period.PeriodType; import org.hisp.dhis.period.RelativePeriods; import org.hisp.dhis.user.CurrentUserService; @@ -78,6 +85,13 @@ { this.dataSetService = dataSetService; } + + private PeriodService periodService; + + public void setPeriodService( PeriodService periodService ) + { + this.periodService = periodService; + } private OrganisationUnitService organisationUnitService; @@ -99,6 +113,13 @@ { this.currentUserService = currentUserService; } + + private I18nManager i18nManager; + + public void setI18nManager( I18nManager i18nManager ) + { + this.i18nManager = i18nManager; + } // ------------------------------------------------------------------------- // Input @@ -229,6 +250,13 @@ { this.last5Years = last5Years; } + + private List periodIds; + + public void setPeriodIds( List periodIds ) + { + this.periodIds = periodIds; + } private List organisationUnitIds; @@ -417,6 +445,18 @@ chart.setRelatives( rp ); } + + if ( periodIds != null ) + { + List periods = new ArrayList(); + + for ( String id : periodIds ) + { + periods.add( PeriodType.getPeriodFromIsoString( id ) ); + } + + chart.getPeriods().addAll( periodService.reloadPeriods( setNames( periods, i18nManager.getI18nFormat() ) ) ); + } chart.getOrganisationUnits().clear(); === modified file 'dhis-2/dhis-web/dhis-web-visualizer/src/main/resources/META-INF/dhis/beans.xml' --- dhis-2/dhis-web/dhis-web-visualizer/src/main/resources/META-INF/dhis/beans.xml 2012-06-28 17:04:59 +0000 +++ dhis-2/dhis-web/dhis-web-visualizer/src/main/resources/META-INF/dhis/beans.xml 2012-07-10 20:17:04 +0000 @@ -71,9 +71,11 @@ + + 1) { + if (isFilter && DV.c.data.records.length > 1) { DV.chart.warnings.push(DV.i18n.wm_multiple_filter_ind_de_ds + ' ' + DV.i18n.wm_first_filter_used); - DV.c.data.objects = DV.c.data.objects.slice(0,1); } }, period: function(isFilter) { - if (isFilter && DV.c.period.objects.length > 1) { + if (isFilter && DV.c.period.records.length > 1) { DV.chart.warnings.push(DV.i18n.wm_multiple_filter_period + ' ' + DV.i18n.wm_first_filter_used); - DV.c.period.objects = DV.c.period.objects.slice(0,1); } }, organisationunit: function(isFilter) { - if (isFilter && DV.c.organisationunit.names.length > 1) { - var msg = DV.c.organisationunit.groupsetid ? DV.i18n.wm_multiple_filter_groups : DV.i18n.wm_multiple_filter_orgunit; - DV.chart.warnings.push(msg + ' ' + DV.i18n.wm_first_filter_used); - DV.c.organisationunit.names = DV.c.organisationunit.names.slice(0,1); + if (isFilter) { + if (DV.c.organisationunit.groupsetid) { + if (DV.init.system.ougs[DV.c.organisationunit.groupsetid]) { + if (DV.init.system.ougs[DV.c.organisationunit.groupsetid].length > 1) { + DV.chart.warnings.push(DV.i18n.wm_multiple_filter_groups + ' ' + DV.i18n.wm_first_filter_used); + } + } + } + else { + if (DV.c.userorganisationunit || DV.c.userorganisationunitchildren) { + var i = 0; + i += DV.c.userorganisationunit ? 1 : 0; + i += DV.c.userorganisationunitchildren && DV.init.user.ouc ? DV.init.user.ouc.length : 0; + if (i > 1) { + DV.chart.warnings.push(DV.i18n.wm_multiple_filter_orgunit + ' ' + DV.i18n.wm_first_filter_used); + } + } + else if (DV.c.organisationunit.records.length > 1) { + DV.chart.warnings.push(DV.i18n.wm_multiple_filter_orgunit + ' ' + DV.i18n.wm_first_filter_used); + } + } } } }, @@ -1964,21 +2051,19 @@ } DV.value.values = DV.util.value.jsonfy(r.v); - + DV.c.data.names = DV.conf.util.jsonEncodeArray(r.d); DV.c.period.names = DV.conf.util.jsonEncodeArray(r.p); DV.c.organisationunit.names = DV.conf.util.jsonEncodeArray(r.o); - - DV.state.validation.objects[DV.c.dimension.series](); - DV.state.validation.objects[DV.c.dimension.category](); - DV.state.validation.objects[DV.c.dimension.filter](true); if (!DV.state.validation.categories()) { return; } - DV.state.validation.trendline(); - DV.state.validation.targetline(); + DV.state.validation.trendline(); + + DV.state.validation.targetline(); + DV.state.validation.baseline(); DV.state.validation.render(); @@ -2001,7 +2086,8 @@ indicator: {}, dataelement: {}, dataset: {}, - period: {}, + relativeperiod: {}, + fixedperiod: {}, organisationunit: {}, hidesubtitle: false, hidelegend: false, @@ -3049,7 +3135,7 @@ } }, { - title: '
' + DV.i18n.periods + '
', + title: '
' + DV.i18n.relative_periods + '
', hideCollapseTool: true, autoScroll: true, items: [ @@ -3067,7 +3153,7 @@ listeners: { added: function(chb) { if (chb.xtype === 'checkbox') { - DV.cmp.dimension.period.checkbox.push(chb); + DV.cmp.dimension.relativeperiod.checkbox.push(chb); } } } @@ -3100,7 +3186,7 @@ listeners: { added: function(chb) { if (chb.xtype === 'checkbox') { - DV.cmp.dimension.period.checkbox.push(chb); + DV.cmp.dimension.relativeperiod.checkbox.push(chb); } } } @@ -3132,7 +3218,7 @@ listeners: { added: function(chb) { if (chb.xtype === 'checkbox') { - DV.cmp.dimension.period.checkbox.push(chb); + DV.cmp.dimension.relativeperiod.checkbox.push(chb); } } } @@ -3171,7 +3257,7 @@ listeners: { added: function(chb) { if (chb.xtype === 'checkbox') { - DV.cmp.dimension.period.checkbox.push(chb); + DV.cmp.dimension.relativeperiod.checkbox.push(chb); } } } @@ -3204,10 +3290,149 @@ ], listeners: { added: function() { - DV.cmp.dimension.period.panel = this; - }, - expand: function() { - DV.util.dimension.panel.setHeight(DV.conf.layout.west_maxheight_accordion_period); + DV.cmp.dimension.relativeperiod.panel = this; + }, + expand: function() { + DV.util.dimension.panel.setHeight(DV.conf.layout.west_maxheight_accordion_relativeperiod); + } + } + }, + { + title: '
' + DV.i18n.fixed_periods + '
', + hideCollapseTool: true, + items: [ + { + xtype: 'combobox', + cls: 'dv-combo', + style: 'margin-bottom:8px', + width: DV.conf.layout.west_fieldset_width - DV.conf.layout.west_width_subtractor, + valueField: 'id', + displayField: 'name', + fieldLabel: DV.i18n.select_type, + labelStyle: 'padding-left:7px;', + labelWidth: 90, + editable: false, + queryMode: 'remote', + store: DV.store.periodtype, + listeners: { + select: function(cb) { + var pt = new PeriodType(); + var periods = pt.reverse( pt.filterFuturePeriods( pt.get(cb.getValue()).generatePeriods(0) ) ); + DV.store.fixedperiod.available.setIndex(periods); + DV.store.fixedperiod.available.loadData(periods); + DV.util.multiselect.filterAvailable(DV.cmp.dimension.fixedperiod.available, DV.cmp.dimension.fixedperiod.selected); + } + } + }, + { + xtype: 'panel', + layout: 'column', + bodyStyle: 'border-style:none', + items: [ + { + xtype: 'multiselect', + name: 'availableFixedPeriods', + cls: 'dv-toolbar-multiselect-left', + width: (DV.conf.layout.west_fieldset_width - DV.conf.layout.west_width_subtractor) / 2, + valueField: 'id', + displayField: 'name', + store: DV.store.fixedperiod.available, + tbar: [ + { + xtype: 'label', + text: DV.i18n.available, + cls: 'dv-toolbar-multiselect-left-label' + }, + '->', + { + xtype: 'button', + icon: 'images/arrowright.png', + width: 22, + handler: function() { + DV.util.multiselect.select(DV.cmp.dimension.fixedperiod.available, DV.cmp.dimension.fixedperiod.selected); + } + }, + { + xtype: 'button', + icon: 'images/arrowrightdouble.png', + width: 22, + handler: function() { + DV.util.multiselect.selectAll(DV.cmp.dimension.fixedperiod.available, DV.cmp.dimension.fixedperiod.selected); + } + }, + ' ' + ], + listeners: { + added: function() { + DV.cmp.dimension.fixedperiod.available = this; + }, + afterrender: function() { + this.boundList.on('itemdblclick', function() { + DV.util.multiselect.select(this, DV.cmp.dimension.fixedperiod.selected); + }, this); + } + } + }, + { + xtype: 'multiselect', + name: 'selectedFixedPeriods', + cls: 'dv-toolbar-multiselect-right', + width: (DV.conf.layout.west_fieldset_width - DV.conf.layout.west_width_subtractor) / 2, + displayField: 'name', + valueField: 'id', + ddReorder: true, + queryMode: 'local', + store: DV.store.fixedperiod.selected, + tbar: [ + ' ', + { + xtype: 'button', + icon: 'images/arrowleftdouble.png', + width: 22, + handler: function() { + DV.util.multiselect.unselectAll(DV.cmp.dimension.fixedperiod.available, DV.cmp.dimension.fixedperiod.selected); + } + }, + { + xtype: 'button', + icon: 'images/arrowleft.png', + width: 22, + handler: function() { + DV.util.multiselect.unselect(DV.cmp.dimension.fixedperiod.available, DV.cmp.dimension.fixedperiod.selected); + } + }, + '->', + { + xtype: 'label', + text: DV.i18n.selected, + cls: 'dv-toolbar-multiselect-right-label' + } + ], + listeners: { + added: function() { + DV.cmp.dimension.fixedperiod.selected = this; + }, + afterrender: function() { + this.boundList.on('itemdblclick', function() { + DV.util.multiselect.unselect(DV.cmp.dimension.fixedperiod.available, this); + }, this); + } + } + } + ] + } + ], + listeners: { + added: function() { + DV.cmp.dimension.fixedperiod.panel = this; + }, + expand: function() { + DV.util.dimension.panel.setHeight(DV.conf.layout.west_maxheight_accordion_fixedperiod); + DV.util.multiselect.setHeight( + [DV.cmp.dimension.fixedperiod.available, DV.cmp.dimension.fixedperiod.selected], + DV.cmp.dimension.fixedperiod.panel, + DV.conf.layout.west_fill_accordion_fixedperiod + ); } } }, @@ -4410,13 +4635,18 @@ this.setTooltip(DV.i18n.save_load_favorite_before_sharing); } }, + getTitle: function() { + return DV.i18n.share + ' ' + DV.i18n.interpretation + + ': ' + DV.c.currentFavorite.name + ''; + }, handler: function() { if (DV.cmp.share.window) { + DV.cmp.share.window.setTitle(this.getTitle()); DV.cmp.share.window.show(); } else { DV.cmp.share.window = Ext.create('Ext.window.Window', { - title: DV.i18n.share + ' ' + DV.i18n.interpretation + ': ' + DV.c.currentFavorite.name + '', + title: this.getTitle(), iconCls: 'dv-window-title-interpretation', layout: 'fit', bodyStyle: 'padding:8px 8px 3px; background-color:#fff', @@ -4443,9 +4673,9 @@ } ], bbar: { - cls: 'dv-toolbar-1', + cls: 'dv-toolbar-bbar', defaults: { - height: 30 + height: 28 }, items: [ '->', === 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-06-25 13:42:13 +0000 +++ dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/app/index.html 2012-07-04 13:49:13 +0000 @@ -16,6 +16,7 @@ + === added file 'dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/app/pt.js' --- dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/app/pt.js 1970-01-01 00:00:00 +0000 +++ dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/app/pt.js 2012-07-09 13:13:31 +0000 @@ -0,0 +1,350 @@ +function PeriodType() +{ + var monthNames = ['January', 'February', 'March', 'April', 'May', 'June', + 'July', 'August', 'September', 'October', 'November', 'December']; + + var format_yyyymmdd = function(date) { + var y = date.getFullYear(), + m = new String(date.getMonth() + 1), + d = new String(date.getDate()); + m = m.length < 2 ? '0' + m : m; + d = d.length < 2 ? '0' + d : d; + return y + '-' + m + '-' + d; + }; + + this.reverse = function( array ) + { + var reversed = []; + var i = 0; + + for ( var j = array.length - 1; j >= 0; j-- ) + { + reversed[i++] = array[j]; + } + + return reversed; + }; + + this.filterFuturePeriods = function( periods ) + { + var array = [], + now = new Date(); + + for ( var i = 0; i < periods.length; i++ ) + { + if ( new Date( periods[i]['startDate'] ) <= now ) + { + array[i] = periods[i]; + } + } + + return array; + }; + + var periodTypes = []; + periodTypes['Daily'] = new DailyPeriodType( format_yyyymmdd ); + periodTypes['Weekly'] = new WeeklyPeriodType( format_yyyymmdd ); + periodTypes['Monthly'] = new MonthlyPeriodType( format_yyyymmdd, monthNames, this.reverse ); + periodTypes['BiMonthly'] = new BiMonthlyPeriodType( format_yyyymmdd, monthNames, this.reverse ); + periodTypes['Quarterly'] = new QuarterlyPeriodType( format_yyyymmdd, monthNames, this.reverse ); + periodTypes['SixMonthly'] = new SixMonthlyPeriodType( monthNames ); + periodTypes['Yearly'] = new YearlyPeriodType( format_yyyymmdd, this.reverse ); + periodTypes['FinancialOct'] = new FinancialOctoberPeriodType( format_yyyymmdd, monthNames, this.reverse ); + periodTypes['FinancialJuly'] = new FinancialJulyPeriodType( format_yyyymmdd, monthNames, this.reverse ); + periodTypes['FinancialApril'] = new FinancialAprilPeriodType( format_yyyymmdd, monthNames, this.reverse ); + + this.get = function( key ) + { + return periodTypes[key]; + }; +} + +function DailyPeriodType( format_yyyymmdd ) +{ + this.generatePeriods = function( offset ) + { + var periods = []; + var year = new Date().getFullYear() + offset; + var date = new Date( '01 Jan ' + year ); + + while ( date.getFullYear() === year ) + { + var period = {}; + period['startDate'] = format_yyyymmdd( date ); + period['endDate'] = period['startDate']; + period['name'] = period['startDate']; + //period['id'] = 'Daily_' + period['startDate']; + period['iso'] = period['startDate'].replace( /-/g, '' ); + period['id'] = period['iso']; + periods.push( period ); + date.setDate( date.getDate() + 1 ); + } + + return periods; + }; +} + +function WeeklyPeriodType( format_yyyymmdd ) +{ + this.generatePeriods = function( offset ) + { + var periods = []; + var year = new Date().getFullYear() + offset; + var date = new Date( '01 Jan ' + year ); + var day = date.getDay(); + var week = 1; + + if ( day <= 4 ) + { + date.setDate( date.getDate() - ( day - 1 ) ); + } + else + { + date.setDate( date.getDate() + ( 8 - day ) ); + } + + while ( date.getFullYear() === year ) + { + var period = {}; + period['startDate'] = format_yyyymmdd( date ); + //period['id'] = 'Weekly_' + period['startDate']; + period['iso'] = year + 'W' + week; + period['id'] = period['iso']; + date.setDate( date.getDate() + 6 ); + period['endDate'] = format_yyyymmdd( date ); + period['name'] = 'W' + week + ' - ' + period['startDate'] + ' - ' + period['endDate']; + periods.push( period ); + date.setDate( date.getDate() + 1 ); + week++; + } + + return periods; + }; +} + +function MonthlyPeriodType( format_yyyymmdd, monthNames, rev ) +{ + var format_iso = function(date) { + var y = date.getFullYear(), + m = new String(date.getMonth() + 1); + m = m.length < 2 ? '0' + m : m; + return y + m; + }; + + this.generatePeriods = function( offset ) + { + var periods = []; + var year = new Date().getFullYear() + offset; + var date = new Date( '31 Dec ' + year ); + + while ( date.getFullYear() === year ) + { + var period = {}; + period['endDate'] = format_yyyymmdd( date ); + date.setDate( 1 ); + period['startDate'] = format_yyyymmdd( date ); + period['name'] = monthNames[date.getMonth()] + ' ' + date.getFullYear(); + //period['id'] = 'Monthly_' + period['startDate']; + period['iso'] = format_iso( date ); + period['id'] = period['iso']; + periods.push( period ); + date.setDate( 0 ); + } + + return rev(periods); + }; +} + +function BiMonthlyPeriodType( format_yyyymmdd, monthNames, rev ) +{ + var format_iso = function( date ) { + var y = date.getFullYear(), + m = new String(date.getMonth() + 1); + m = m.length < 2 ? '0' + m : m; + return y + m + 'B'; + }; + + this.generatePeriods = function( offset ) + { + var periods = []; + var year = new Date().getFullYear() + offset; + var date = new Date( '31 Dec ' + year ); + + while ( date.getFullYear() === year ) + { + var period = {}; + period['endDate'] = format_yyyymmdd( date ); + date.setDate( 0 ); + date.setDate( 1 ); + period['startDate'] = format_yyyymmdd( date ); + period['name'] = monthNames[date.getMonth()] + ' - ' + monthNames[date.getMonth() + 1] + ' ' + date.getFullYear(); + //period['id'] = 'BiMonthly_' + period['startDate']; + period['iso'] = format_iso( date ); + period['id'] = period['iso']; + periods.push(period); + date.setDate( 0 ); + } + + return rev(periods); + }; +} + +function QuarterlyPeriodType( format_yyyymmdd, monthNames, rev ) +{ + this.generatePeriods = function( offset ) + { + var periods = []; + var year = new Date().getFullYear() + offset; + var date = new Date( '31 Dec ' + year ); + var quarter = 4; + + while ( date.getFullYear() === year ) + { + var period = {}; + period['endDate'] = format_yyyymmdd( date ); + date.setDate( 0 ); + date.setDate( 0 ); + date.setDate( 1 ); + period['startDate'] = format_yyyymmdd( date ); + period['name'] = monthNames[date.getMonth()] + ' - ' + monthNames[date.getMonth() + 2] + ' ' + date.getFullYear(); + //period['id'] = 'Quarterly_' + period['startDate']; + period['iso'] = year + 'Q' + quarter; + period['id'] = period['iso']; + periods.push(period); + date.setDate( 0 ); + quarter--; + } + + return rev(periods); + }; +} + +function SixMonthlyPeriodType( monthNames ) +{ + this.generatePeriods = function( offset ) + { + var periods = []; + var year = new Date().getFullYear() + offset; + + var period = {}; + period['startDate'] = year + '-01-01'; + period['endDate'] = year + '-06-30'; + period['name'] = monthNames[0] + ' - ' + monthNames[5] + ' ' + year; + //period['id'] = 'SixMonthly_' + period['startDate']; + period['iso'] = year + 'S1'; + period['id'] = period['iso']; + periods.push(period); + + period = []; + period['startDate'] = year + '-07-01'; + period['endDate'] = year + '-12-31'; + period['name'] = monthNames[6] + ' - ' + monthNames[11] + ' ' + year; + //period['id'] = 'SixMonthly_' + period['startDate']; + period['iso'] = year + 'S2'; + period['id'] = period['iso']; + periods.push(period); + + return periods; + }; +} + +function YearlyPeriodType( format_yyyymmdd, rev ) +{ + this.generatePeriods = function( offset ) + { + var periods = []; + var year = new Date().getFullYear() + offset; + var date = new Date( '31 Dec ' + year ); + + while ( ( year - date.getFullYear() ) < 10 ) + { + var period = {}; + period['endDate'] = format_yyyymmdd( date ); + date.setMonth( 0, 1 ); + period['startDate'] = format_yyyymmdd( date ); + period['name'] = date.getFullYear(); + //period['id'] = 'Yearly_' + period['startDate']; + period['iso'] = date.getFullYear(); + period['id'] = period['iso']; + periods.push(period); + date.setDate(0); + } + + return rev( periods ); + }; +} + +function FinancialOctoberPeriodType( format_yyyymmdd, monthNames, rev ) +{ + this.generatePeriods = function( offset ) + { + var periods = []; + var year = new Date().getFullYear() + offset; + var date = new Date( '30 Sep ' + ( year + 1 ) ); + + for ( var i = 0; i < 10; i++ ) + { + var period = {}; + period['endDate'] = format_yyyymmdd( date ); + date.setYear( date.getFullYear() - 1 ); + date.setDate( date.getDate() + 1 ); + period['startDate'] = format_yyyymmdd( date ); + period['name'] = monthNames[9] + ' ' + date.getFullYear() + ' - ' + monthNames[8] + ' ' + ( date.getFullYear() + 1 ); + period['id'] = 'FinancialOct_' + period['startDate']; + periods.push( period ); + date.setDate( date.getDate() - 1 ); + } + + return rev( periods ); + }; +} + +function FinancialJulyPeriodType( format_yyyymmdd, monthNames, rev ) +{ + this.generatePeriods = function( offset ) + { + var periods = []; + var year = new Date().getFullYear() + offset; + var date = new Date( '30 Jun ' + ( year + 1 ) ); + + for ( var i = 0; i < 10; i++ ) + { + var period = {}; + period['endDate'] = format_yyyymmdd( date ); + date.setYear( date.getFullYear() - 1 ); + date.setDate( date.getDate() + 1 ); + period['startDate'] = format_yyyymmdd( date ); + period['name'] = monthNames[6] + ' ' + date.getFullYear() + ' - ' + monthNames[5] + ' ' + ( date.getFullYear() + 1 ); + period['id'] = 'FinancialJuly_' + period['startDate']; + periods.push( period ); + date.setDate( date.getDate() - 1 ); + } + + return rev( periods ); + }; +} + +function FinancialAprilPeriodType( format_yyyymmdd, monthNames, rev ) +{ + this.generatePeriods = function( offset ) + { + var periods = []; + var year = new Date().getFullYear() + offset; + var date = new Date( '31 Mar ' + ( year + 1 ) ); + + for ( var i = 0; i < 10; i++ ) + { + var period = {}; + period['endDate'] = format_yyyymmdd( date ); + date.setYear( date.getFullYear() - 1 ); + date.setDate( date.getDate() + 1 ); + period['startDate'] = format_yyyymmdd( date ); + period['name'] = monthNames[3] + ' ' + date.getFullYear() + ' - ' + monthNames[2] + ' ' + ( date.getFullYear() + 1 ); + period['id'] = 'FinancialApril_' + period['startDate']; + periods.push( period ); + date.setDate( date.getDate() - 1 ); + } + + return rev( periods ); + }; +} === 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-06-29 13:13:31 +0000 +++ dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/i18n.vm 2012-07-10 20:17:04 +0000 @@ -102,6 +102,8 @@ em_no_periods:'$encoder.jsEscape($i18n.getString( 'em_no_periods' ) , "'")', et_no_orgunits:'$encoder.jsEscape($i18n.getString( 'et_no_orgunits' ) , "'")', em_no_orgunits:'$encoder.jsEscape($i18n.getString( 'em_no_orgunits' ) , "'")', +et_no_orgunitgroups:'$encoder.jsEscape($i18n.getString( 'et_no_orgunits' ) , "'")', +em_no_orgunitgroups:'$encoder.jsEscape($i18n.getString( 'em_no_orgunits' ) , "'")', et_line_area_categories:'$encoder.jsEscape($i18n.getString( 'et_line_area_categories' ) , "'")', em_line_area_categories:'$encoder.jsEscape($i18n.getString( 'em_line_area_categories' ) , "'")', et_invalid_uid:'$encoder.jsEscape($i18n.getString( 'et_invalid_uid' ) , "'")', @@ -129,6 +131,9 @@ save_load_favorite_before_sharing:'$encoder.jsEscape($i18n.getString( 'save_load_favorite_before_sharing' ) , "'")', create_chart_before_datatable:'$encoder.jsEscape($i18n.getString( 'create_chart_before_datatable' ) , "'")', organisation_unit_groups:'$encoder.jsEscape($i18n.getString( 'organisation_unit_groups' ) , "'")', -groups_replace_orgunits:'$encoder.jsEscape($i18n.getString( 'groups_replace_orgunits' ) , "'")' +groups_replace_orgunits:'$encoder.jsEscape($i18n.getString( 'groups_replace_orgunits' ) , "'")', +fixed_periods:'$encoder.jsEscape($i18n.getString( 'fixed_periods' ) , "'")', +relative_periods:'$encoder.jsEscape($i18n.getString( 'relative_periods' ) , "'")', +select_type:'$encoder.jsEscape($i18n.getString( 'select_type' ) , "'")' }; === 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-07-10 15:01:35 +0000 +++ dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/jsonInitialize.vm 2012-07-10 17:15:05 +0000 @@ -1,2 +1,2 @@ -#set($oucSize = $currentUser.getOrganisationUnit().getSortedChildren().size()){"user":{"id":"$!currentUser.id","isAdmin":$auth.hasAccess( "dhis-web-visualizer", "addOrUpdateSystemChart" ),"ou":{"id":"$currentUser.getOrganisationUnit().uid","name":"$currentUser.getOrganisationUnit().name"},"ouc":[#foreach($ou in $currentUser.getOrganisationUnit().getSortedChildren()){"id":"$ou.uid","name":"$ou.name"}#if($velocityCount < $oucSize),#end#end]},"rn":[#foreach($rn in $rootNodes)["$!{rn.uid}","$!encoder.jsonEncode(${rn.name})"]#if($velocityCount<$rootNodes.size()),#end#end]} +#set($oucSize = $currentUser.getOrganisationUnit().getSortedChildren().size()){"user":{"id":"$!currentUser.id","isAdmin":$auth.hasAccess( "dhis-web-visualizer", "addOrUpdateSystemChart" ),"ou":{"id":"$currentUser.getOrganisationUnit().uid","name":"$currentUser.getOrganisationUnit().name"},"ouc":[#foreach($ou in $currentUser.getOrganisationUnit().getSortedChildren()){"id":"$ou.uid","name":"$ou.name"}#if($velocityCount < $oucSize),#end#end]},"system":{"rn":[#foreach($rn in $rootNodes)["$!{rn.uid}","$!encoder.jsonEncode(${rn.name})"]#if($velocityCount<$rootNodes.size()),#end#end],"ougs":{#foreach($ougs in $organisationUnitGroupSets)"$!{ougs.uid}":[#foreach($oug in $ougs.getSortedGroups()){"id":"$!{oug.uid}","name":"$!encoder.jsonEncode($!{oug.name})"}#if($velocityCount<$ougs.getSortedGroups().size()),#end#end]#if($velocityCount<$organisationUnitGroupSets.size()),#end#end}}}