← Back to team overview

dhis2-devs team mailing list archive

[Branch ~dhis2-devs-core/dhis2/trunk] Rev 11825: Add sortable functionality for columns in Tabular report.

 

------------------------------------------------------------
revno: 11825
committer: Tran Chau <tran.hispvietnam@xxxxxxxxx>
branch nick: dhis2
timestamp: Wed 2013-08-28 15:42:25 +0700
message:
  Add sortable functionality for columns in Tabular report.
modified:
  dhis-2/dhis-web/dhis-web-caseentry/src/main/webapp/dhis-web-caseentry/app/app.js


--
lp:dhis2
https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk

Your team DHIS 2 developers is subscribed to branch lp:dhis2.
To unsubscribe from this branch go to https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+edit-subscription
=== modified file 'dhis-2/dhis-web/dhis-web-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-08-28 06:43:27 +0000
+++ dhis-2/dhis-web/dhis-web-caseentry/src/main/webapp/dhis-web-caseentry/app/app.js	2013-08-28 08:42:25 +0000
@@ -375,7 +375,7 @@
 				for( var i=0; i< elements.length; i++ )
 				{
 					if( elements[i].style.display != 'none' )
-					{
+					{		
 						var localid = a.store.getAt(i).data.localid;
 						var name = a.store.getAt(i).data.name;
 						var valueType = a.store.getAt(i).data.valueType;
@@ -383,7 +383,7 @@
 						array.push({id: a.store.getAt(i).data.id, localid:localid, name: name, valueType: valueType});
 						if(f!=undefined)
 						{
-							TR.util.multiselect.addFilterField( f, localid, name, valueType );
+							TR.util.multiselect.addFilterField( f, a.store.getAt(i).data.id, name, valueType );
 						}
 					}
 				}
@@ -1854,13 +1854,13 @@
 		total: 1,
 		totalRecords: 0,
 		isFilter:false,
-		orderByOrgunitAsc: true,
-		orderByExecutionDateByAsc: true,
+		asc: "",
+		desc: "",
 		orgunitIds: [],
-		generateReport: function( type, isSorted ) {
+		generateReport: function( type ) {
 			if(Ext.getCmp('reportTypeGroup').getValue().reportType=='true')
 			{
-				this.caseBasedReport.generate( type, isSorted );
+				this.caseBasedReport.generate( type );
 			}
 			else
 			{
@@ -1873,16 +1873,16 @@
 				this.caseBasedReport.generate();
 			}
 		},
-		getParams: function(isSorted){
+		getParams: function(){
 			if(Ext.getCmp('reportTypeGroup').getValue().reportType=='true')
 			{
-				return this.caseBasedReport.getParams(isSorted);
+				return this.caseBasedReport.getParams();
 			}
 			return this.aggregateReport.getParams();
 		},
-		getURLParams: function( type, isSorted ){
+		getURLParams: function( type ){
 			if(Ext.getCmp('reportTypeGroup').getValue().reportType=='true'){
-				this.caseBasedReport.getURLParams( type, isSorted );
+				this.caseBasedReport.getURLParams( type );
 			}
 			else{
 				this.aggregateReport.getURLParams( type );
@@ -1890,7 +1890,7 @@
 		},
 		
 		caseBasedReport: {
-			generate: function( type, isSorted ) {
+			generate: function( type ) {
 				
 				// Validation
 				
@@ -1934,11 +1934,11 @@
 						url: url,
 						method: "GET",
 						scope: this,
-						params: this.getParams(isSorted),
+						params: this.getParams(),
 						success: function(r) {
 							var json = Ext.JSON.decode(r.responseText);
 							
-							if( isSorted ){
+							if( TR.state.asc != "" || TR.state.desc != "" ){
 								TR.store.datatable.loadData(TR.value.values,false);
 							}
 							else{
@@ -1946,21 +1946,18 @@
 								TR.value.values = json.rows;
 								
 								// Get fields
+								
 								var fields = [];
 								for( var index=0; index < TR.value.columns.length; index++ )
 								{
-									fields[index] = 'col' + TR.value.columns[index].column;
+									fields[index] = TR.value.columns[index].column;
 								}
 								TR.value.fields = fields;
 								
 								// Set data for grid
+								
 								TR.store.getDataTableStore();
 								TR.datatable.getDataTable();
-								
-								if( json.rows.length>1 )
-								{
-									Ext.getCmp('btnSortBy').enable();
-								}
 							}
 							TR.util.mask.hideMask();
 						}
@@ -1968,21 +1965,27 @@
 				}
 				TR.util.notification.ok();
 			},
-			getParams: function(isSorted) {
+			getParams: function() {
 				var p = {};
 				p.startDate = TR.cmp.settings.startDate.rawValue;
 				p.endDate = TR.cmp.settings.endDate.rawValue;
 				p.facilityLB = TR.cmp.settings.facilityLB.getValue();
 				p.level = Ext.getCmp('levelCombobox').getValue();
 				
-				// orders
-				p.asc = TR.state.asc;
-				p.desc= TR.state.desc;
+				// order-by
+				
+				if(TR.state.asc!=""){				
+					p.asc = TR.state.asc;
+				}
+				else{
+					p.desc= TR.state.desc;
+				}
 				
 				p.programStageId = TR.cmp.params.programStage.getValue();
 				p.currentPage = TR.state.currentPage;
 				
 				// organisation unit
+				
 				p.ou = "";
 				for( var i in TR.state.orgunitIds){
 					p.ou += TR.state.orgunitIds[i];
@@ -2107,7 +2110,7 @@
 					
 				return p;
 			},
-			getURLParams: function( isSorted ) {
+			getURLParams: function() {
 				
 				document.getElementById('startDate').value = TR.cmp.settings.startDate.rawValue;
 				document.getElementById('endDate').value = TR.cmp.settings.endDate.rawValue;
@@ -2116,7 +2119,9 @@
 				document.getElementById('programStageId').value = TR.cmp.params.programStage.getValue();				
 				document.getElementById('userOrganisationUnit').value = Ext.getCmp('userOrgunit').getValue();
 				document.getElementById('userOrganisationUnitChildren').value = Ext.getCmp('userOrgunitChildren').getValue();
-
+				document.getElementById('desc').value = TR.state.desc;
+				document.getElementById('asc').value = TR.state.asc;
+				
 				if( Ext.getCmp('useFormNameDataElementOpt').getValue()== true )
 				{
 					document.getElementById('useFormNameDataElement').value = Ext.getCmp('useFormNameDataElementOpt').getValue();
@@ -2358,7 +2363,7 @@
 								var fields = [];
 								for( var index=0; index < TR.value.columns.length; index++ )
 								{
-									fields[index] = 'col' + index;
+									fields[index] = index;
 								}
 								TR.value.fields = fields;
 								
@@ -2962,7 +2967,25 @@
 			this.datatable = Ext.create('Ext.grid.Panel', {
                 height: TR.util.viewport.getSize().y - 58,
 				id: 'gridTable',
-				columns: cols,
+				columns: {
+					items: cols,
+					listeners: {
+						headerclick: function(container, column, e) {
+							if( column.sortable )
+							{
+								if(column.sortState=='ASC'){
+									TR.state.asc = column.dataIndex;
+									TR.state.desc = "";
+								}
+								else{
+									TR.state.asc = "";
+									TR.state.desc = column.dataIndex;
+								}
+								TR.exe.execute(false, true );
+							}
+						}
+					}
+				},
 				scroll: 'both',
 				title: title,
 				selType: 'cellmodel',
@@ -3065,29 +3088,52 @@
 		createColTable: function(){
 			var cols = [];
 			
-			cols[0] = {
-				header: TR.value.columns[0].name, 
-				dataIndex: 'col' + TR.value.columns[0].column,
-				height: TR.conf.layout.east_gridcolumn_height,
-				name: 'meta_' + TR.value.columns[0].column,
-				sortable: false,
-				draggable: false,
-				hidden: true,
-				hideable: true,
-				menuDisabled: true
-			}
-			
-			for( var i = 1; i <TR.value.columns.length; i++ )
+			for( var i =0; i <TR.value.columns.length; i++ )
 			{
-				cols[i] = {
-					header: TR.value.columns[i].name, 
-					dataIndex: 'col' + TR.value.columns[i].column,
-					height: TR.conf.layout.east_gridcolumn_height,
-					name: 'meta_' + TR.value.columns[i].column,
-					sortable: false,
-					draggable: false,
-					hideable: false,
-					menuDisabled: true
+				// Hiden event UID column and programstage UID column
+				
+				if( i==0 || i==1 || i ==3 ){
+					cols[i] = {
+						header: TR.value.columns[i].name, 
+						dataIndex: TR.value.columns[i].column,
+						height: TR.conf.layout.east_gridcolumn_height,
+						name: TR.value.columns[i].column,
+						sortable: false,
+						draggable: false,
+						hidden: true,
+						hideable: true,
+						menuDisabled: false
+					}
+				}
+				
+				// don't sort by orgunit name column
+				
+				else if( i ==4){
+					cols[i] = {
+						header: TR.value.columns[i].name, 
+						dataIndex: TR.value.columns[i].column,
+						height: TR.conf.layout.east_gridcolumn_height,
+						name: TR.value.columns[i].column,
+						sortable: false,
+						draggable: false,
+						hideable: false,
+						menuDisabled: true
+					}
+				}
+				
+				// Sortable columns
+				
+				else if( i==2 || i> 3 ){
+					cols[i] = {
+						header: TR.value.columns[i].name, 
+						dataIndex: TR.value.columns[i].column,
+						height: TR.conf.layout.east_gridcolumn_height,
+						name: TR.value.columns[i].column,
+						sortable: true,
+						draggable: false,
+						hideable: false,
+						menuDisabled: true
+					}
 				}
 			}
 				
@@ -3099,7 +3145,7 @@
 			
 			var params = {};
 			params.header = colname;
-			params.dataIndex = 'col' + index;
+			params.dataIndex = index;
 			params.name = id;
 			params.hidden = eval(TR.value.columns[index].hidden );
 			params.menuFilterText = TR.value.filter;
@@ -3135,12 +3181,10 @@
 				Ext.getCmp('lastPageBtn').disable();
 	
 				Ext.getCmp('btnClean').disable();
-				Ext.getCmp('btnSortBy').disable();
 			}
 			else
 			{
 				Ext.getCmp('btnClean').enable();
-				Ext.getCmp('btnSortBy').enable();
 				Ext.getCmp('currentPage').setValue(TR.state.currentPage);
 				
 				if( TR.state.currentPage == TR.state.total 
@@ -3209,8 +3253,8 @@
     };
         
 	TR.exe = {
-		execute: function( type, isSorted ) {
-			TR.state.generateReport( type, isSorted );
+		execute: function( type) {
+			TR.state.generateReport( type );
 		},
 		paging: function( currentPage )
 		{
@@ -5019,7 +5063,6 @@
 													{
 														Ext.getCmp('patientPropertiesDiv').setVisible(false);
 													}
-													Ext.getCmp('btnSortBy').setVisible(true);
 													Ext.getCmp('relativePeriodsDiv').setVisible(false); 
 													Ext.getCmp('fixedPeriodsDiv').setVisible(false);
 													Ext.getCmp('dateRangeDiv').expand();
@@ -5049,7 +5092,6 @@
 													Ext.getCmp('dateRangeDiv').setVisible(false);
 													Ext.getCmp('levelCombobox').setVisible(false);
 													Ext.getCmp('caseBasedFavoriteBtn').setVisible(false);
-													Ext.getCmp('btnSortBy').setVisible(false);
 													Ext.getCmp('patientPropertiesDiv').setVisible(false);
 													Ext.getCmp('displayOrgunitCode').setVisible(false);
 													
@@ -6753,44 +6795,6 @@
 					},
 					{
 						xtype: 'button',
-						text: TR.i18n.sort_by,
-						id: 'btnSortBy',
-						disabled: true,
-						menu: {},
-						listeners: {
-							afterrender: function(b) {
-								this.menu = Ext.create('Ext.menu.Menu', {
-									margin: '2 0 0 0',
-									shadow: false,
-									showSeparator: false,
-									items: [
-										{
-											text: TR.i18n.asc,
-											iconCls: 'tr-menu-item-asc',
-											minWidth: 105,
-											handler: function() {
-												TR.state.desc = "";
-												TR.state.asc = "executiondate";
-												TR.exe.execute(false, true );
-											}
-										},
-										{
-											text: TR.i18n.desc,
-											iconCls: 'tr-menu-item-desc',
-											minWidth: 105,
-											handler: function() {
-												TR.state.asc = "";
-												TR.state.desc = "executiondate";
-												TR.exe.execute(false, true );
-											}
-										}
-									]                                            
-								});
-							}
-						}
-					},
-					{
-						xtype: 'button',
 						cls: 'tr-toolbar-btn-2',
 						id: 'caseBasedFavoriteBtn',
 						text: TR.i18n.favorites,