dhis2-devs team mailing list archive
-
dhis2-devs team
-
Mailing list archive
-
Message #20723
[Branch ~dhis2-devs-core/dhis2/trunk] Rev 9615: Add ad-hoc aggregated reports in Tabular reports (WIP).
------------------------------------------------------------
revno: 9615
committer: Tran Chau <tran.hispvietnam@xxxxxxxxx>
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",