------------------------------------------------------------ revno: 9615 committer: Tran Chau <tran.hispviet...@gmail.com> branch nick: dhis2 timestamp: Sat 2013-01-26 14:07:27 +0700 message: Add ad-hoc aggregated reports in Tabular reports (WIP). modified: dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/program/hibernate/HibernateProgramStageInstanceStore.java dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/report/GenerateAggregateReportAction.java dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/report/GetAggregateReportAction.java dhis-2/dhis-web/dhis-web-caseentry/src/main/webapp/dhis-web-caseentry/app/app.js dhis-2/dhis-web/dhis-web-caseentry/src/main/webapp/dhis-web-caseentry/app/index.html dhis-2/dhis-web/dhis-web-caseentry/src/main/webapp/dhis-web-caseentry/i18n.vm dhis-2/dhis-web/dhis-web-caseentry/src/main/webapp/dhis-web-caseentry/jsonTabularAggregateReport.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-services/dhis-service-patient/src/main/java/org/hisp/dhis/program/hibernate/HibernateProgramStageInstanceStore.java' --- dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/program/hibernate/HibernateProgramStageInstanceStore.java 2013-01-25 10:17:23 +0000 +++ dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/program/hibernate/HibernateProgramStageInstanceStore.java 2013-01-26 07:07:27 +0000 @@ -404,38 +404,13 @@ grid.setTitle( programStage.getProgram().getDisplayName() ); grid.setSubtitle( programStage.getDisplayName() ); + // --------------------------------------------------------------------- + // Get SQL and build grid + // --------------------------------------------------------------------- + // Type = 1 if ( position == PatientAggregateReport.POSITION_ROW_ORGUNIT_COLUMN_PERIOD ) { - // --------------------------------------------------------------------- - // Headers cols - // --------------------------------------------------------------------- - - // grid.addHeader( new GridHeader( i18n.getString( "orgunit" ), - // false, true ) ); - // - // for ( Period period : periods ) - // { - // String periodName = ""; - // if ( period.getPeriodType() != null ) - // { - // periodName = format.formatPeriod( period ); - // } - // else - // { - // String startDate = format.formatDate( period.getStartDate() ); - // String endDate = format.formatDate( period.getEndDate() ); - // periodName = startDate + " -> " + endDate; - // } - // grid.addHeader( new GridHeader( periodName, false, false ) ); - // } - // grid.addHeader( new GridHeader( i18n.getString("total"), false, - // false ) ); - - // --------------------------------------------------------------------- - // Get SQL and build grid - // --------------------------------------------------------------------- - sql = getAggregateReportSQL12( programStage, orgunitIds, facilityLB, filterSQL, deGroupBy, periods, aggregateType, useCompletedEvents, format ); } @@ -453,104 +428,30 @@ // Type = 3 else if ( position == PatientAggregateReport.POSITION_ROW_ORGUNIT_ROW_PERIOD ) { - // --------------------------------------------------------------------- - // Headers cols - // --------------------------------------------------------------------- - // - // grid.addHeader( new GridHeader( i18n.getString( "orgunit" ), - // false, true ) ); - // grid.addHeader( new GridHeader( i18n.getString( "period" ), - // false, true ) ); - // grid.addHeader( new GridHeader( i18n.getString( aggregateType ), - // false, false ) ); - // grid.addHeader( new GridHeader( i18n.getString("total"), false, - // false ) ); - - // --------------------------------------------------------------------- - // Get SQL and build grid - // --------------------------------------------------------------------- - sql = getAggregateReportSQL3( position, programStage, orgunitIds, facilityLB, filterSQL, deGroupBy, periods, aggregateType, useCompletedEvents, format ); - } // Type = 4 else if ( position == PatientAggregateReport.POSITION_ROW_PERIOD ) { - // --------------------------------------------------------------------- - // Headers cols - // --------------------------------------------------------------------- - - // grid.addHeader( new GridHeader( i18n.getString( "period" ), - // false, true ) ); - // grid.addHeader( new GridHeader( i18n.getString( aggregateType ), - // false, false ) ); - // grid.addHeader( new GridHeader( i18n.getString("total"), false, - // false ) ); - - // --------------------------------------------------------------------- - // Get SQL and build grid - // --------------------------------------------------------------------- - sql = getAggregateReportSQL4( position, programStage, orgunitIds, facilityLB, filterSQL, deGroupBy, periods, aggregateType, useCompletedEvents, format ); - } // type = 5 else if ( position == PatientAggregateReport.POSITION_ROW_ORGUNIT ) { - // --------------------------------------------------------------------- - // Headers cols - // --------------------------------------------------------------------- - - // grid.addHeader( new GridHeader( i18n.getString( "orgunit" ), - // false, true ) ); - // grid.addHeader( new GridHeader( i18n.getString( aggregateType ), - // false, false ) ); - // grid.addHeader( new GridHeader( i18n.getString("total"), false, - // false ) ); - - // --------------------------------------------------------------------- - // Get SQL and build grid - // --------------------------------------------------------------------- - List<Period> firstPeriod = new ArrayList<Period>(); firstPeriod.add( periods.iterator().next() ); sql = getAggregateReportSQL5( position, programStage, orgunitIds, facilityLB, filterSQL, deGroupBy, periods .iterator().next(), aggregateType, useCompletedEvents, format ); - } // Type = 6 && With group-by else if ( (position == PatientAggregateReport.POSITION_ROW_PERIOD_COLUMN_DATA || position == PatientAggregateReport.POSITION_ROW_DATA_COLUMN_PERIOD) && deGroupBy != null ) { - deValues = dataElementService.getDataElement( deGroupBy ).getOptionSet().getOptions(); - // --------------------------------------------------------------------- - // Headers cols - // --------------------------------------------------------------------- - - // if ( position == - // PatientAggregateReport.POSITION_ROW_PERIOD_COLUMN_DATA ) - // { - // grid.addHeader( new GridHeader( i18n.getString( "period" ), - // false, true ) ); - // for ( String deValue : deValues ) - // { - // grid.addHeader( new GridHeader( deValue, false, false ) ); - // } - // grid.addHeader( new GridHeader( i18n.getString("total"), false, - // false ) ); - // } - // grid.addHeader( new GridHeader( i18n.getString("total"), false, - // false ) ); - - // --------------------------------------------------------------------- - // Get SQL and build grid - // --------------------------------------------------------------------- - sql = getAggregateReportSQL6( programStage, orgunitIds.iterator().next(), facilityLB, filterSQL, deGroupBy, deValues, periods, aggregateType, useCompletedEvents, format ); } @@ -559,25 +460,6 @@ else if ( (position == PatientAggregateReport.POSITION_ROW_PERIOD_COLUMN_DATA || position == PatientAggregateReport.POSITION_ROW_DATA_COLUMN_PERIOD) && deGroupBy == null ) { - // --------------------------------------------------------------------- - // Headers cols - // --------------------------------------------------------------------- - - // if ( position == - // PatientAggregateReport.POSITION_ROW_PERIOD_COLUMN_DATA ) - // { - // grid.addHeader( new GridHeader( i18n.getString( "period" ), - // false, true ) ); - // grid.addHeader( new GridHeader( i18n.getString( aggregateType ), - // false, false ) ); - // } - // grid.addHeader( new GridHeader( i18n.getString("total"), false, - // false ) ); - - // --------------------------------------------------------------------- - // Get SQL and build grid - // --------------------------------------------------------------------- - sql = getAggregateReportSQL6WithoutGroup( programStage, orgunitIds.iterator().next(), facilityLB, filterSQL, deGroupBy, periods, aggregateType, useCompletedEvents, format ); } @@ -588,56 +470,14 @@ { deValues = dataElementService.getDataElement( deGroupBy ).getOptionSet().getOptions(); - // --------------------------------------------------------------------- - // Headers cols - // --------------------------------------------------------------------- - - // if ( position == - // PatientAggregateReport.POSITION_ROW_ORGUNIT_COLUMN_DATA ) - // { - // grid.addHeader( new GridHeader( i18n.getString( "orgunit" ), - // false, true ) ); - // - // for ( String deValue : deValues ) - // { - // grid.addHeader( new GridHeader( deValue, false, false ) ); - // } - // } - // grid.addHeader( new GridHeader( i18n.getString("total"), false, - // false ) ); - - // --------------------------------------------------------------------- - // Get SQL and build grid - // --------------------------------------------------------------------- - sql = getAggregateReportSQL7( programStage, orgunitIds, facilityLB, filterSQL, deGroupBy, deValues, periods .iterator().next(), aggregateType, useCompletedEvents, format ); - } // Type = 7 && NOT group-by else if ( (position == PatientAggregateReport.POSITION_ROW_ORGUNIT_COLUMN_DATA || position == PatientAggregateReport.POSITION_ROW_DATA_COLUMN_ORGUNIT) && deGroupBy == null ) { - // --------------------------------------------------------------------- - // Headers cols - // --------------------------------------------------------------------- - - // if ( position == - // PatientAggregateReport.POSITION_ROW_ORGUNIT_COLUMN_DATA ) - // { - // grid.addHeader( new GridHeader( i18n.getString( "orgunit" ), - // false, true ) ); - // grid.addHeader( new GridHeader( i18n.getString( aggregateType ), - // false, false ) ); - // } - // grid.addHeader( new GridHeader( i18n.getString("total"), false, - // false ) ); - - // --------------------------------------------------------------------- - // Get SQL and build grid - // --------------------------------------------------------------------- - sql = getAggregateReportSQL7WithoutGroup( programStage, orgunitIds, facilityLB, filterSQL, periods .iterator().next(), aggregateType, useCompletedEvents, format ); @@ -646,28 +486,13 @@ // type = 8 && With group-by else if ( position == PatientAggregateReport.POSITION_ROW_DATA ) { - // --------------------------------------------------------------------- - // Headers cols - // --------------------------------------------------------------------- - - // grid.addHeader( new GridHeader( i18n.getString( "data_element" ), - // false, true ) ); - // grid.addHeader( new GridHeader( i18n.getString( aggregateType ), - // false, false ) ); - // grid.addHeader( new GridHeader( i18n.getString("total"), false, - // false ) ); - - // --------------------------------------------------------------------- - // Get SQL and build grid - // --------------------------------------------------------------------- - sql = getAggregateReportSQL8( programStage, orgunitIds, facilityLB, filterSQL, deGroupBy, periods .iterator().next(), aggregateType, limit, useCompletedEvents, format ); } SqlRowSet rowSet = jdbcTemplate.queryForRowSet( sql ); - // Type != 2 + // Type ==2 && ==9 && ==10 if ( position == PatientAggregateReport.POSITION_ROW_PERIOD_COLUMN_ORGUNIT || position == PatientAggregateReport.POSITION_ROW_DATA_COLUMN_PERIOD || position == PatientAggregateReport.POSITION_ROW_DATA_COLUMN_ORGUNIT ) @@ -934,8 +759,7 @@ } /** - * Generate SQL statement for 3 report type - Aggregate report Position - * Orgunit Rows - Period Rows - Data Filter + * Aggregate report Position Orgunit Rows - Period Rows - Data Filter * **/ private String getAggregateReportSQL3( int position, ProgramStage programStage, Collection<Integer> roots, @@ -964,7 +788,7 @@ sql += "( SELECT "; sql += "( SELECT ou.name FROM organisationunit ou WHERE organisationunitid=" + root + " ) as orgunit, "; - sql += "'" + periodName + "' , "; + sql += "'" + periodName + "' as period, "; sql += " ( SELECT " + aggregateType + "(pdv_1.value) "; sql += "FROM "; @@ -1027,7 +851,7 @@ } sql += "( SELECT "; - sql += "'" + periodName + "' , "; + sql += "'" + periodName + "' as period, "; sql += " ( SELECT " + aggregateType + "(pdv_1.value) "; sql += "FROM "; @@ -1049,7 +873,7 @@ } sql += " psi_1.executiondate >= '" + startDate + "' AND "; sql += " psi_1.executiondate <= '" + endDate + "' "; - sql += filterSQL + " ) ) "; + sql += filterSQL + " ) as " + aggregateType + ") "; sql += " UNION "; } } @@ -1098,7 +922,7 @@ { sql += " AND psi_1.completed = true "; } - sql += " ) ) "; + sql += " ) as " + aggregateType + " ) "; sql += " UNION "; } @@ -1135,7 +959,7 @@ periodName = startDate + " -> " + endDate; } - sql += "(SELECT '" + periodName + "', "; + sql += "(SELECT '" + periodName + "' as period, "; for ( String deValue : deValues ) { sql += "(SELECT " + aggregateType + "(value) "; @@ -1199,7 +1023,7 @@ periodName = startDate + " -> " + endDate; } - sql += "(SELECT '" + periodName + "', "; + sql += "(SELECT '" + periodName + "' as period, "; sql += "(SELECT " + aggregateType + "(value) "; sql += "FROM programstageinstance psi_1 JOIN patientdatavalue pdv_1 "; @@ -1273,7 +1097,7 @@ sql += " WHERE programstageinstanceid=psi_1.programstageinstanceid AND "; sql += " dataelementid= pdv_1.dataelementid AND "; sql += " dataelementid=" + deGroupBy + " ) = '" + deValue + "' "; - sql += ") as \"" + aggregateType + "\","; + sql += ") as \"" + deValue + "\","; } sql = sql.substring( 0, sql.length() - 1 ) + " ) "; @@ -1409,7 +1233,7 @@ for ( int i = 2; i <= cols; i++ ) { grid.addRow(); - column.add( rowSet.getMetaData().getColumnLabel( i ) ); + column.add( i18n.getString( rowSet.getMetaData().getColumnLabel( i ) ) ); } grid.addRow(); column.add( i18n.getString( "total" ) ); @@ -1512,7 +1336,7 @@ // Create column with Total column for ( int i = 1; i <= cols; i++ ) { - grid.addHeader( new GridHeader( rs.getMetaData().getColumnLabel( i ), false, false ) ); + grid.addHeader( new GridHeader( i18n.getString( rs.getMetaData().getColumnLabel( i ) ), false, false ) ); } grid.addHeader( new GridHeader( i18n.getString( "total" ), false, false ) ); === modified file 'dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/report/GenerateAggregateReportAction.java' --- dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/report/GenerateAggregateReportAction.java 2013-01-22 06:42:20 +0000 +++ dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/report/GenerateAggregateReportAction.java 2013-01-26 07:07:27 +0000 @@ -136,11 +136,11 @@ this.deFilters = deFilters; } - private Collection<String> periodIds = new HashSet<String>(); + private Collection<String> fixedPeriods = new HashSet<String>(); - public void setPeriodIds( Collection<String> periodIds ) + public void setFixedPeriods( Collection<String> fixedPeriods ) { - this.periodIds = periodIds; + this.fixedPeriods = fixedPeriods; } private Collection<String> relativePeriods = new HashSet<String>(); @@ -287,7 +287,7 @@ } // Fixed periods - for ( String periodId : periodIds ) + for ( String periodId : fixedPeriods ) { periods.add( PeriodType.getPeriodFromIsoString( periodId ) ); } === modified file 'dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/report/GetAggregateReportAction.java' --- dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/report/GetAggregateReportAction.java 2013-01-16 08:41:28 +0000 +++ dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/report/GetAggregateReportAction.java 2013-01-26 07:07:27 +0000 @@ -27,13 +27,17 @@ package org.hisp.dhis.caseentry.action.report; +import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; +import java.util.List; import org.hisp.dhis.dataelement.DataElement; import org.hisp.dhis.dataelement.DataElementService; +import org.hisp.dhis.i18n.I18nFormat; import org.hisp.dhis.patientreport.PatientAggregateReport; import org.hisp.dhis.patientreport.PatientAggregateReportService; +import org.hisp.dhis.period.PeriodType; import com.opensymphony.xwork2.Action; @@ -63,6 +67,13 @@ this.dataElementService = dataElementService; } + private I18nFormat format; + + public void setFormat( I18nFormat format ) + { + this.format = format; + } + // ------------------------------------------------------------------------- // Input && Output // ------------------------------------------------------------------------- @@ -88,6 +99,13 @@ return selectedDataElements; } + private List<String> fixedPeriodNames = new ArrayList<String>(); + + public List<String> getFixedPeriodNames() + { + return fixedPeriodNames; + } + // ------------------------------------------------------------------------- // Action implementation // ------------------------------------------------------------------------- @@ -98,6 +116,11 @@ { aggregateReport = aggregateReportService.getPatientAggregateReport( id ); + for ( String fixedPeriodId : aggregateReport.getFixedPeriods() ) + { + fixedPeriodNames.add( format.formatPeriod( PeriodType.getPeriodFromIsoString( fixedPeriodId ) ) ); + } + for ( String deFilter : aggregateReport.getFilterValues() ) { int id = Integer.parseInt( deFilter.split( "_" )[0] ); === modified file 'dhis-2/dhis-web/dhis-web-caseentry/src/main/webapp/dhis-web-caseentry/app/app.js' --- dhis-2/dhis-web/dhis-web-caseentry/src/main/webapp/dhis-web-caseentry/app/app.js 2013-01-24 04:56:43 +0000 +++ dhis-2/dhis-web/dhis-web-caseentry/src/main/webapp/dhis-web-caseentry/app/app.js 2013-01-26 07:07:27 +0000 @@ -57,6 +57,7 @@ aggregatefavorite_save: 'saveAggregateReport.action', aggregatefavorite_delete: 'deleteAggregateReport.action', generateaggregatereport_get: 'generateAggregateReport.action', + username_dataelement_get: 'getUsernameList.action', redirect: 'index.action' }, params: { @@ -237,6 +238,18 @@ getCmp: function(q) { return TR.viewport.query(q)[0]; }, + list:{ + addOptionToList: function( list, optionValue, optionText ){ + var option = document.createElement( "option" ); + option.value = optionValue; + option.text = optionText; + option.setAttribute('selected',true) + list.add( option, null ); + }, + clearList: function( list ) { + list.options.length = 0; + } + }, getUrlParam: function(s) { var output = ''; var href = window.location.href; @@ -378,7 +391,6 @@ } }, addFilterField: function( p, id, name, valueType ){ - var xtype = TR.value.covertXType(valueType); var panelid = 'p_' + id; var idx = 0; var subPanel = Ext.getCmp(panelid); @@ -410,7 +422,7 @@ width:(TR.conf.layout.west_fieldset_width - TR.conf.layout.west_width_subtractor) / 2 - 60 }; items[1] = this.createOperatorField(valueType, fieldid); - items[2] = this.createFilterField( xtype, fieldid ); + items[2] = this.createFilterField( valueType, fieldid ); if( idx == 0 ){ items[3] = this.addFieldBtn( panelid, id, name, valueType, idx ); } @@ -437,13 +449,18 @@ params.editable = false; params.value = '='; - if(valueType == 'string' || valueType == 'trueOnly' - || valueType == 'bool' || valueType == 'list' ){ + if(valueType == 'string' || valueType == 'list' || valueType == 'username' ){ params.store = new Ext.data.ArrayStore({ fields: ['value','name'], data: [ ['=','='],['like',TR.i18n.like],['in',TR.i18n.in] ] }); } + else if( valueType == 'trueOnly' || valueType == 'bool' ){ + params.store = new Ext.data.ArrayStore({ + fields: ['value','name'], + data: [ ['=','='] ] + }); + } else { params.store = new Ext.data.ArrayStore({ @@ -459,8 +476,9 @@ return params; }, - createFilterField: function( xtype, id ){ + createFilterField: function( valueType, id ){ var params = {}; + var xtype = TR.value.covertXType(valueType); params.xtype = xtype; params.id = 'filter_' + id; params.cls = 'tr-textfield-alt1'; @@ -471,41 +489,73 @@ { params.format = TR.i18n.format_date; } - else if( xtype == 'bool') - { - params.queryMode = 'local'; - params.editable = false; - params.valueField = 'value'; - params.displayField = 'name'; - params.selectOnFocus = true; - params.store = new Ext.data.ArrayStore({ - fields: ['value', 'name'], - data: [['true', TR.i18n.true_value], ['false', TR.i18n.false_value]] - }); - } else if( xtype == 'combobox' ) { var deId = id.split('_')[1]; params.typeAhead = true; params.forceSelection = true; - params.queryMode = 'remote'; - params.valueField = 'o'; - params.displayField = 'o'; - params.multiSelect = true; - params.delimiter = ';'; - params.store = Ext.create('Ext.data.Store', { - fields: ['o'], - data:[], - proxy: { - type: 'ajax', - url: TR.conf.finals.ajax.path_commons + TR.conf.finals.ajax.suggested_dataelement_get, - extraParams:{id: deId}, - reader: { - type: 'json', - root: 'options' - } - } - }); + if( valueType == 'bool') + { + params.queryMode = 'local'; + params.valueField = 'value'; + params.displayField = 'name'; + params.editable = false; + params.value = 'true'; + params.store = new Ext.data.ArrayStore({ + fields: ['value', 'name'], + data: [['true', TR.i18n.yes], + ['false', TR.i18n.no]] + }); + } + else if( valueType == 'trueOnly') + { + params.queryMode = 'local'; + params.valueField = 'value'; + params.displayField = 'name'; + params.editable = false; + params.value = 'true'; + params.store = new Ext.data.ArrayStore({ + fields: ['value', 'name'], + data: [['true', TR.i18n.yes]] + }); + } + else if(valueType=='username'){ + params.queryMode = 'remote'; + params.valueField = 'u'; + params.displayField = 'u'; + params.store = Ext.create('Ext.data.Store', { + fields: ['u'], + data:[], + proxy: { + type: 'ajax', + url: TR.conf.finals.ajax.path_commons + TR.conf.finals.ajax.username_dataelement_get, + reader: { + type: 'json', + root: 'usernames' + } + } + }); + } + else{ + params.queryMode = 'remote'; + params.valueField = 'o'; + params.displayField = 'o'; + params.multiSelect = true; + params.delimiter = ';'; + params.store = Ext.create('Ext.data.Store', { + fields: ['o'], + data:[], + proxy: { + type: 'ajax', + url: TR.conf.finals.ajax.path_commons + TR.conf.finals.ajax.suggested_dataelement_get, + extraParams:{id: deId}, + reader: { + type: 'json', + root: 'options' + } + } + }); + } } return params; }, @@ -721,7 +771,7 @@ addToStorage: function(s, records) { s.each( function(r) { if (!s.storage[r.data.id]) { - s.storage[r.data.id] = {id: r.data.id, name: TR.util.string.getEncodedString(r.data.name), parent: s.parent}; + s.storage[r.data.id] = {id: r.data.id, name: TR.util.string.getEncodedString(r.data.name), parent: s.parent, compulsory: r.data.compulsory, valueType: r.data.valueType}; } }); if (records) { @@ -1106,12 +1156,15 @@ // Fixed periods + var periods = []; for (var i = 0; i < f.fixedPeriods.length; i++) { - // var cmp = Ext.getCmp(''); - // if (cmp) { - // cmp.setValue(fixedPeriods); - // } + periods[i]={ + id: f.fixedPeriods[i], + name: f.fixedPeriodNames[i] + }; } + TR.store.fixedperiod.selected.loadData(periods); + // Orgunits @@ -1400,7 +1453,7 @@ } else { - this.aggregateReport.generate( type, isSorted ); + this.aggregateReport.generate( type ); } }, filterReport: function() { @@ -1418,16 +1471,16 @@ { return this.caseBasedReport.getParams(isSorted); } - return this.aggregateReport.getParams(isSorted); + return this.aggregateReport.getParams(); }, getURLParams: function( type, isSorted ){ if(Ext.getCmp('reportTypeGroup').getValue().reportType=='true') { - return this.caseBasedReport.getURLParams(type, isSorted ); + return this.caseBasedReport.getURLParams( type, isSorted ); } else { - return this.aggregateReport.getURLParams(type, isSorted ); + return this.aggregateReport.getURLParams( type ); } }, paramChanged: function() { @@ -1744,7 +1797,7 @@ }, aggregateReport: { - generate: function( type, isSorted ) { + generate: function( type ) { // Validation if( !TR.state.aggregateReport.validation.objects() ) { @@ -1755,7 +1808,10 @@ // Export to XLS if( type) { - window.location.href = url + "?type="+ type + "&" + TR.state.aggregateReport.getURLParams(isSorted ); + TR.state.aggregateReport.getURLParams(); + var exportForm = document.getElementById('exportForm'); + exportForm.action = url + "?type=" + type; + exportForm.submit(); } // Show report on grid else @@ -1765,32 +1821,27 @@ url: url, method: "POST", scope: this, - params: this.getParams(isSorted), + params: this.getParams(), success: function(r) { var json = Ext.JSON.decode(r.responseText); if(json.message!=""){ TR.util.notification.error(TR.i18n.error, json.message); } else{ - if( isSorted ){ - TR.store.datatable.loadData(TR.value.values,false); - } - else{ - TR.value.columns = json.columns; - TR.value.values = json.items; - // Get fields - var fields = []; - for( var index=0; index < TR.value.columns.length; index++ ) - { - fields[index] = 'col' + index; - } - TR.value.fields = fields; - - // Set data for grid - TR.store.getDataTableStore(); - TR.datatable.getDataTable(); - TR.datatable.hidePagingBar(); - } + TR.value.columns = json.columns; + TR.value.values = json.items; + // Get fields + var fields = []; + for( var index=0; index < TR.value.columns.length; index++ ) + { + fields[index] = 'col' + index; + } + TR.value.fields = fields; + + // Set data for grid + TR.store.getDataTableStore(); + TR.datatable.getDataTable(); + TR.datatable.hidePagingBar(); } TR.util.mask.hideMask(); } @@ -1861,7 +1912,7 @@ } return ''; }, - getParams: function( isSorted ) { + getParams: function() { var p = {}; p.programStageId = TR.cmp.params.programStage.getValue(); p.aggregateType = Ext.getCmp('aggregateType').getValue().aggregateType; @@ -1945,29 +1996,41 @@ return p; }, - getURLParams: function(isSorted) { - var p = ""; - - p += "programStageId=" + TR.cmp.params.programStage.getValue(); - p += "&aggregateType=" + Ext.getCmp('aggregateType').getValue().aggregateType; + getURLParams: function() { + document.getElementById('programStageId').value = TR.cmp.params.programStage.getValue(); + document.getElementById('aggregateType').value = Ext.getCmp('aggregateType').getValue().aggregateType; + document.getElementById('userOrganisationUnit').value = Ext.getCmp('userOrgunit').getValue(); + document.getElementById('userOrganisationUnitChildren').value = Ext.getCmp('userOrgunitChildren').getValue(); + document.getElementById('facilityLB').value = TR.cmp.settings.facilityLB.getValue(); + document.getElementById('position').value = TR.state.aggregateReport.getPosition(); + document.getElementById('useCompletedEvents').value = Ext.getCmp('completedEventsOpt').getValue(); + if( Ext.getCmp('dataElementGroupByCbx').getValue() != null + && Ext.getCmp('dataElementGroupByCbx').getValue() != '' ){ + document.getElementById('deGroupBy').value = Ext.getCmp('dataElementGroupByCbx').getValue().split('_')[1]; + } + else{ + document.getElementById('deGroupBy').value = ""; + } + if( Ext.getCmp('limitOption').getValue() != null + && Ext.getCmp('limitOption').getValue() != '' ){ + document.getElementById('limitRecords').value = Ext.getCmp('limitOption').getValue(); + } + else{ + document.getElementById('limitRecords').value = ""; + } // orgunits - // p.orgunitIds = TR.state.orgunitIds; - p += "&orgunitIds=" + TR.state.orgunitIds; - - p += "&userOrganisationUnit=" + TR.cmp.aggregateFavorite.userorganisationunit.getValue(); - p += "&userOrganisationUnitChildren=" + TR.cmp.aggregateFavorite.userorganisationunitchildren.getValue(); - - p += "&limitRecords=" + Ext.getCmp('limitOption').getValue(); - - var position = TR.state.aggregateReport.getPosition(); - if( Ext.getCmp('dataElementGroupByCbx').getValue() != null ){ - p += "&deGroupBy=" + Ext.getCmp('dataElementGroupByCbx').getValue().split('_')[1]; + var orgunitIdList = document.getElementById('orgunitIds'); + TR.util.list.clearList(orgunitIdList); + for( var i in TR.state.orgunitIds){ + TR.util.list.addOptionToList(orgunitIdList, TR.state.orgunitIds[i], ''); } // Filter values + var deFiltersList = document.getElementById('deFilters'); + TR.util.list.clearList(deFiltersList); TR.cmp.params.dataelement.selected.store.each( function(r) { var valueType = r.data.valueType; var deId = r.data.id; @@ -1983,50 +2046,50 @@ if( valueType == 'list' ) { var filterValues = filterValue.split(";"); - filter +=" ("; + filter +="("; for(var i=0;i<filterValues.length;i++) { filter += "'"+ filterValues[i] +"',"; } - filter = filter.substr(0,filter.length - 1) + " ) "; + filter = filter.substr(0,filter.length - 1) + ")"; } else { filter += "'" + filterValue + "'"; } - p += "&deFilters=" + filter; + TR.util.list.addOptionToList(deFiltersList, filter, ''); } }); // Period range + var startDateList = document.getElementById('startDates'); + var endDateList = document.getElementById('endDates'); + TR.util.list.clearList(startDateList); + TR.util.list.clearList(endDateList); TR.store.dateRange.data.each( function(r) { - p += "&startDates=" + r.data.startDate; - p += "&endDates=" + r.data.endDate; + TR.util.list.addOptionToList(startDateList, r.data.startDate, ''); + TR.util.list.addOptionToList(endDateList, r.data.endDate, ''); }); // Fixed periods - p.fixedPeriods = []; + var fixedPeriodList = document.getElementById('fixedPeriods'); + TR.util.list.clearList(fixedPeriodList); TR.cmp.params.fixedperiod.selected.store.each( function(r) { - p += "&fixedPeriods=" + r.data.id; + TR.util.list.addOptionToList(fixedPeriodList, r.data.id, ''); }); // Relative periods + var relativePeriodSelect = document.getElementById('relativePeriods'); + TR.util.list.clearList(relativePeriodSelect); var relativePeriodList = TR.cmp.params.relativeperiod.checkbox; - p.relativePeriods = []; Ext.Array.each(relativePeriodList, function(item) { if(item.getValue() && !item.hidden){ - p += "&relativePeriods=" + item.paramName; + TR.util.list.addOptionToList(relativePeriodSelect, item.paramName, ''); } }); - - p += "&facilityLB=" + TR.cmp.settings.facilityLB.getValue(); - p += "&position=" + position; - p += "&useCompletedEvents=" + Ext.getCmp('completedEventsOpt').getValue(); - - return p; }, getFilterValueByColumn: function( colname ) { @@ -2168,7 +2231,7 @@ { return 'boolean'; } - if( type == 'combo') + if( type == 'combo' || type == 'username' ) { return 'list'; } @@ -2184,7 +2247,7 @@ { return 'numberfield'; } - if( type == 'combo' || type == 'list' || type == 'trueOnly' ) + if( type == 'combo' || type == 'list' || type == 'username' || type == 'trueOnly' || type=='bool' ) { return 'combobox'; } @@ -3622,7 +3685,7 @@ var orgunitid = treePanel.getSelectionModel().getSelection()[0].data.localid; if(orgunitid==0){ for( var i in TR.init.system.rootnodes){ - TR.state.orgunitIds.push( TR.init.system.rootnodes[i].id ); + TR.state.orgunitIds.push( TR.init.system.rootnodes[i].localid ); } } else{ === modified file 'dhis-2/dhis-web/dhis-web-caseentry/src/main/webapp/dhis-web-caseentry/app/index.html' --- dhis-2/dhis-web/dhis-web-caseentry/src/main/webapp/dhis-web-caseentry/app/index.html 2013-01-09 09:45:30 +0000 +++ dhis-2/dhis-web/dhis-web-caseentry/src/main/webapp/dhis-web-caseentry/app/index.html 2013-01-26 07:07:27 +0000 @@ -6,8 +6,26 @@ </head> <body> + <form id="exportForm" name='exportForm' method="post"> + <input type="hidden" id="programStageId" name='programStageId' > + <input type="hidden" id="aggregateType" name='aggregateType' > + <select multiple id="deFilters" name="deFilters" class="hidden"></select> + <select multiple id="endDates" name="endDates" class="hidden"></select> + <select multiple id="fixedPeriods" name="fixedPeriods" class="hidden"></select> + <select multiple id="relativePeriods" name="relativePeriods" class="hidden"></select> + <select multiple id="orgunitIds" name="orgunitIds" class="hidden" ></select> + <input type="hidden" id="userOrganisationUnit" name="userOrganisationUnit" > + <input type="hidden" id="userOrganisationUnitChildren" name="userOrganisationUnitChildren"> + <input type="hidden" id="limitRecords" name="limitRecords"> + <input type="hidden" id="deGroupBy" name="deGroupBy" > + <input type="hidden" id="facilityLB" name="facilityLB" > + <input type="hidden" id="position" name="position" > + <input type="hidden" id="useCompletedEvents" name="useCompletedEvents" > + <select multiple id="startDates" name="startDates" class="hidden"></select> + </form> + <script type="text/javascript">TR = {};</script> - <script type="text/javascript" src="i18n.action"></script> + <script type="text/javascript" src="i18n.action"></script> <script type="text/javascript" src="../../dhis-web-commons/javascripts/ext/ext-all.js"></script> <script type="text/javascript" src="../../dhis-web-commons/javascripts/periodTypeNoDep.js"></script> <script type="text/javascript" src="app.js"></script> === modified file 'dhis-2/dhis-web/dhis-web-caseentry/src/main/webapp/dhis-web-caseentry/i18n.vm' --- dhis-2/dhis-web/dhis-web-caseentry/src/main/webapp/dhis-web-caseentry/i18n.vm 2013-01-25 08:32:01 +0000 +++ dhis-2/dhis-web/dhis-web-caseentry/src/main/webapp/dhis-web-caseentry/i18n.vm 2013-01-26 07:07:27 +0000 @@ -86,8 +86,8 @@ deleting:'$encoder.jsEscape($i18n.getString( 'deleting' ) , "'")', saving:'$encoder.jsEscape($i18n.getString( 'saving' ) , "'")', renaming:'$encoder.jsEscape($i18n.getString( 'renaming' ) , "'")', -true_value:'$encoder.jsEscape($i18n.getString( 'true_value' ) , "'")', -false_value:'$encoder.jsEscape($i18n.getString( 'false_value' ) , "'")', +yes:'$encoder.jsEscape($i18n.getString( 'yes' ) , "'")', +no:'$encoder.jsEscape($i18n.getString( 'no' ) , "'")', value_is_invalid:'$encoder.jsEscape($i18n.getString( 'value_is_invalid' ) , "'")', value_is_valid:'$encoder.jsEscape($i18n.getString( 'value_is_valid' ) , "'")', em_no_program_stage: '$encoder.jsEscape($i18n.getString( 'em_no_program_stage' ) , "'")', === modified file 'dhis-2/dhis-web/dhis-web-caseentry/src/main/webapp/dhis-web-caseentry/jsonTabularAggregateReport.vm' --- dhis-2/dhis-web/dhis-web-caseentry/src/main/webapp/dhis-web-caseentry/jsonTabularAggregateReport.vm 2013-01-23 10:27:28 +0000 +++ dhis-2/dhis-web/dhis-web-caseentry/src/main/webapp/dhis-web-caseentry/jsonTabularAggregateReport.vm 2013-01-26 07:07:27 +0000 @@ -12,7 +12,7 @@ #end "type": "${programStage.program.type}", "programStageId": "${programStage.id}", - "programStageName": "${programStage.displayName}", + "programStageName": "$!encoder.jsonEncode( ${programStage.displayName} )", "startDates": [ #set( $size = ${aggregateReport.startDates.size()} ) #foreach( $startDate in $!aggregateReport.startDates ) @@ -37,9 +37,16 @@ ], "fixedPeriods": [ #set( $size = $aggregateReport.fixedPeriods.size() ) - #set( $relativePeriods = ${aggregateReport.fixedPeriods} ) + #set( $fixedPeriods = ${aggregateReport.fixedPeriods} ) #foreach( ${fixedPeriod} in $!{fixedPeriods} ) - '$fixedPeriod' + "$fixedPeriod" + #if( $velocityCount < $size ),#end + #end + ], + "fixedPeriodNames":[ + #set( $size = $fixedPeriodNames.size() ) + #foreach( $fixedPeriodName in $!fixedPeriodNames ) + "$!encoder.jsonEncode( $fixedPeriodName )" #if( $velocityCount < $size ),#end #end ], @@ -59,7 +66,7 @@ #set( $size = $aggregateReport.filterValues.size() ) #set( $filterValues = ${aggregateReport.filterValues} ) #foreach( ${filterValue} in $!{filterValues} ) - "$filterValue" + "$!encoder.jsonEncode( $filterValue )" #if( $velocityCount < $size ),#end #end ], @@ -68,7 +75,7 @@ #foreach( ${dataElement} in $!{selectedDataElements} ) { "id": "de_${dataElement.id}", - "name": "${dataElement.name}", + "name": "$!encoder.jsonEncode( ${dataElement.name} )", "compulsory": "${dataElement.compulsory}", "valueType": #if( $dataElement.optionSet ) "list" @@ -82,7 +89,7 @@ "facilityLB": "${aggregateReport.facilityLB}", "limitRecords": "$!aggregateReport.limitRecords", "position": "${aggregateReport.position}", - "deGroupBy": "$!aggregateReport.deGroupBy.id", + "deGroupBy": #if($!aggregateReport.deGroupBy) "de_$!aggregateReport.deGroupBy.id" #else "" #end, "aggregateType": "${aggregateReport.aggregateType}", "useCompletedEvents": "$!aggregateReport.useCompletedEvents", "userOrganisationUnit": "$!aggregateReport.userOrganisationUnit",
_______________________________________________ Mailing list: https://launchpad.net/~dhis2-devs Post to : dhis2-devs@lists.launchpad.net Unsubscribe : https://launchpad.net/~dhis2-devs More help : https://help.launchpad.net/ListHelp