← Back to team overview

dhis2-devs team mailing list archive

[Branch ~dhis2-devs-core/dhis2/trunk] Rev 8128: local vn - Supported "Filter on section" when generate report for the Category report

 

------------------------------------------------------------
revno: 8128
committer: Hieu <hieu.hispvietnam@xxxxxxxxx>
branch nick: dhis2
timestamp: Wed 2012-09-19 09:22:55 +0700
message:
  local vn - Supported "Filter on section" when generate report for the Category report
added:
  local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/degroup/action/GetDataElementGroupOrdersByReportAction.java
  local/vn/dhis-web-spreadsheet-reporting/src/main/webapp/dhis-web-spreadsheet-reporting/jsonDataElementGroupOrders.vm
modified:
  dhis-2/dhis-web/dhis-web-commons/src/main/resources/i18n_global_vi_VN.properties
  local/vn/dhis-service-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/DataElementGroupOrderService.java
  local/vn/dhis-service-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/DataElementGroupOrderStore.java
  local/vn/dhis-service-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/hibernate/HibernateDataElementGroupOrderStore.java
  local/vn/dhis-service-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/impl/DefaultDataElementGroupOrderService.java
  local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/exporting/action/GenerateReportCategoryAction.java
  local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/exporting/action/ValidateGenerateExportReportAction.java
  local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/organisationunit/action/AddMultiOrganisationUnitAction.java
  local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/state/DefaultSelectionManager.java
  local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/state/SelectionManager.java
  local/vn/dhis-web-spreadsheet-reporting/src/main/resources/META-INF/dhis/beans.xml
  local/vn/dhis-web-spreadsheet-reporting/src/main/resources/org/hisp/dhis/reportsheet/i18n_module.properties
  local/vn/dhis-web-spreadsheet-reporting/src/main/resources/org/hisp/dhis/reportsheet/i18n_module_vi_VN.properties
  local/vn/dhis-web-spreadsheet-reporting/src/main/resources/struts.xml
  local/vn/dhis-web-spreadsheet-reporting/src/main/webapp/dhis-web-spreadsheet-reporting/generateReportForm.vm
  local/vn/dhis-web-spreadsheet-reporting/src/main/webapp/dhis-web-spreadsheet-reporting/javascript/export.js
  local/vn/dhis-web-spreadsheet-reporting/src/main/webapp/dhis-web-spreadsheet-reporting/javascript/preview.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-commons/src/main/resources/i18n_global_vi_VN.properties'
--- dhis-2/dhis-web/dhis-web-commons/src/main/resources/i18n_global_vi_VN.properties	2012-04-26 18:56:17 +0000
+++ dhis-2/dhis-web/dhis-web-commons/src/main/resources/i18n_global_vi_VN.properties	2012-09-19 02:22:55 +0000
@@ -309,7 +309,7 @@
 address=\u0110\u1ecba ch\u1ec9
 Yearly=H\u00e0ng n\u0103m
 show_menu=Hi\u1ec7n tr\u00ecnh \u0111\u01a1n
-user_account=User Account
+user_account=T\u00e0i kho\u1ea3n ng\u01b0\u1eddi d\u00f9ng
 rows_in_page=S\u1ed1 d\u00f2ng m\u1ed7i trang
 help_contents=N\u1ed9i dung gi\u00fap \u0111\u1ee1
 FinancialJuly=T\u00e0i ch\u00ednh-Th\u00e1ng 7

=== modified file 'local/vn/dhis-service-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/DataElementGroupOrderService.java'
--- local/vn/dhis-service-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/DataElementGroupOrderService.java	2011-08-03 08:38:38 +0000
+++ local/vn/dhis-service-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/DataElementGroupOrderService.java	2012-09-19 02:22:55 +0000
@@ -1,5 +1,7 @@
 package org.hisp.dhis.reportsheet;
 
+import java.util.List;
+
 /*
  * Copyright (c) 2004-2011, University of Oslo
  * All rights reserved.
@@ -40,11 +42,12 @@
     // -------------------------------------------------------------------------
 
     public DataElementGroupOrder getDataElementGroupOrder( Integer id );
-    
+
     public DataElementGroupOrder getDataElementGroupOrder( String name, String clazzName, Integer reportId );
 
     public void updateDataElementGroupOrder( DataElementGroupOrder dataElementGroupOrder );
 
     public void deleteDataElementGroupOrder( Integer id );
 
+    public List<DataElementGroupOrder> getDataElementGroupOrders( List<Integer> ids );
 }
\ No newline at end of file

=== modified file 'local/vn/dhis-service-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/DataElementGroupOrderStore.java'
--- local/vn/dhis-service-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/DataElementGroupOrderStore.java	2011-08-03 08:38:38 +0000
+++ local/vn/dhis-service-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/DataElementGroupOrderStore.java	2012-09-19 02:22:55 +0000
@@ -1,7 +1,9 @@
 package org.hisp.dhis.reportsheet;
 
+import java.util.List;
+
 /*
- * Copyright (c) 2004-2011, University of Oslo
+ * Copyright (c) 2004-2012, University of Oslo
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -47,4 +49,6 @@
 
     public void deleteDataElementGroupOrder( Integer id );
 
+    public List<DataElementGroupOrder> getDataElementGroupOrders( List<Integer> ids );
+
 }

=== modified file 'local/vn/dhis-service-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/hibernate/HibernateDataElementGroupOrderStore.java'
--- local/vn/dhis-service-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/hibernate/HibernateDataElementGroupOrderStore.java	2011-12-13 07:46:57 +0000
+++ local/vn/dhis-service-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/hibernate/HibernateDataElementGroupOrderStore.java	2012-09-19 02:22:55 +0000
@@ -26,6 +26,8 @@
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
+import java.util.List;
+
 import org.hibernate.SQLQuery;
 import org.hibernate.Session;
 import org.hibernate.SessionFactory;
@@ -98,4 +100,12 @@
         Session session = sessionFactory.getCurrentSession();
         session.delete( this.getDataElementGroupOrder( id ) );
     }
+
+    @SuppressWarnings("unchecked")
+    public List<DataElementGroupOrder> getDataElementGroupOrders( List<Integer> ids )
+    {
+        String hql = "select distinct deo from ExportReport e join e.dataElementOrders deo where deo.id in (:ids) order by deo.name";
+
+        return sessionFactory.getCurrentSession().createQuery( hql ).setParameterList( "ids", ids ).list();
+    }
 }

=== modified file 'local/vn/dhis-service-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/impl/DefaultDataElementGroupOrderService.java'
--- local/vn/dhis-service-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/impl/DefaultDataElementGroupOrderService.java	2011-08-03 08:38:38 +0000
+++ local/vn/dhis-service-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/impl/DefaultDataElementGroupOrderService.java	2012-09-19 02:22:55 +0000
@@ -27,6 +27,8 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+import java.util.List;
+
 import org.hisp.dhis.reportsheet.DataElementGroupOrder;
 import org.hisp.dhis.reportsheet.DataElementGroupOrderService;
 import org.hisp.dhis.reportsheet.DataElementGroupOrderStore;
@@ -74,4 +76,9 @@
     {
         return dataElementGroupOrderStore.getDataElementGroupOrder( name, clazzName, reportId );
     }
+
+    public List<DataElementGroupOrder> getDataElementGroupOrders( List<Integer> ids )
+    {
+        return dataElementGroupOrderStore.getDataElementGroupOrders( ids );
+    }
 }

=== added file 'local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/degroup/action/GetDataElementGroupOrdersByReportAction.java'
--- local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/degroup/action/GetDataElementGroupOrdersByReportAction.java	1970-01-01 00:00:00 +0000
+++ local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/degroup/action/GetDataElementGroupOrdersByReportAction.java	2012-09-19 02:22:55 +0000
@@ -0,0 +1,115 @@
+package org.hisp.dhis.reportsheet.degroup.action;
+
+/*
+ * Copyright (c) 2004-2012, University of Oslo
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright notice, this
+ *   list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright notice,
+ *   this list of conditions and the following disclaimer in the documentation
+ *   and/or other materials provided with the distribution.
+ * * Neither the name of the HISP project nor the names of its contributors may
+ *   be used to endorse or promote products derived from this software without
+ *   specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.hisp.dhis.i18n.I18n;
+import org.hisp.dhis.reportsheet.DataElementGroupOrder;
+import org.hisp.dhis.reportsheet.ExportReport;
+import org.hisp.dhis.reportsheet.ExportReportCategory;
+import org.hisp.dhis.reportsheet.ExportReportService;
+
+import com.opensymphony.xwork2.Action;
+
+/**
+ * @author Dang Duy Hieu
+ * @version $Id$
+ */
+
+public class GetDataElementGroupOrdersByReportAction
+    implements Action
+{
+    // -------------------------------------------------------------------------
+    // Dependency
+    // -------------------------------------------------------------------------
+
+    private ExportReportService exportReportService;
+
+    public void setExportReportService( ExportReportService exportReportService )
+    {
+        this.exportReportService = exportReportService;
+    }
+
+    private I18n i18n;
+
+    public void setI18n( I18n i18n )
+    {
+        this.i18n = i18n;
+    }
+
+    // -------------------------------------------------------------------------
+    // Input & Output
+    // -------------------------------------------------------------------------
+
+    private Integer exportReportId;
+
+    public void setExportReportId( Integer exportReportId )
+    {
+        this.exportReportId = exportReportId;
+    }
+
+    private List<DataElementGroupOrder> orderedGroups = new ArrayList<DataElementGroupOrder>();
+
+    public List<DataElementGroupOrder> getOrderedGroups()
+    {
+        return orderedGroups;
+    }
+
+    private String message;
+
+    public String getMessage()
+    {
+        return message;
+    }
+
+    // -------------------------------------------------------------------------
+    // Action implementation
+    // -------------------------------------------------------------------------
+
+    public String execute()
+        throws Exception
+    {
+        ExportReport report = exportReportService.getExportReport( exportReportId );
+
+        if ( report == null )
+        {
+            message = i18n.getString( "the_specified_report_is_not_exist" );
+            
+            return ERROR;
+        }
+
+        if ( report instanceof ExportReportCategory )
+        {
+            orderedGroups = ((ExportReportCategory) report).getDataElementOrders();
+        }
+
+        return SUCCESS;
+    }
+}

=== modified file 'local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/exporting/action/GenerateReportCategoryAction.java'
--- local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/exporting/action/GenerateReportCategoryAction.java	2012-07-11 08:56:27 +0000
+++ local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/exporting/action/GenerateReportCategoryAction.java	2012-09-19 02:22:55 +0000
@@ -28,17 +28,20 @@
  */
 
 import java.util.Collection;
+import java.util.List;
 
 import org.apache.poi.ss.usermodel.Sheet;
 import org.hisp.dhis.dataelement.DataElement;
 import org.hisp.dhis.organisationunit.OrganisationUnit;
 import org.hisp.dhis.period.Period;
 import org.hisp.dhis.reportsheet.DataElementGroupOrder;
+import org.hisp.dhis.reportsheet.DataElementGroupOrderService;
 import org.hisp.dhis.reportsheet.ExportItem;
 import org.hisp.dhis.reportsheet.ExportReport;
 import org.hisp.dhis.reportsheet.ExportReportCategory;
 import org.hisp.dhis.reportsheet.exporting.AbstractGenerateExcelReportSupport;
 import org.hisp.dhis.reportsheet.utils.ExcelUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 
 /**
  * @author Tran Thanh Tri
@@ -49,6 +52,9 @@
 public class GenerateReportCategoryAction
     extends AbstractGenerateExcelReportSupport
 {
+    @Autowired
+    private DataElementGroupOrderService dataElementGroupOrderService;
+
     @Override
     protected void executeGenerateOutputFile( ExportReport exportReport, Period period )
         throws Exception
@@ -60,7 +66,19 @@
         this.installReadTemplateFile( exportReportInstance, period, organisationUnit );
 
         Collection<ExportItem> exportReportItems = null;
-        
+        List<DataElementGroupOrder> orderedGroups = null;
+
+        if ( !selectionManager.getOrderedGroupList().isEmpty() )
+        {
+            orderedGroups = dataElementGroupOrderService.getDataElementGroupOrders( selectionManager
+                .getOrderedGroupList() );
+        }
+
+        if ( orderedGroups == null || orderedGroups.isEmpty() )
+        {
+            orderedGroups = exportReportInstance.getDataElementOrders();
+        }
+
         for ( Integer sheetNo : exportReportService.getSheets( selectionManager.getSelectedReportId() ) )
         {
             Sheet sheet = this.templateWorkbook.getSheetAt( sheetNo - 1 );
@@ -69,17 +87,18 @@
 
             if ( isVerticalCategory( exportReportItems ) )
             {
-                this.generateVerticalOutPutFile( exportReportInstance, exportReportItems, organisationUnit, sheet );
+                this.generateVerticalOutPutFile( orderedGroups, exportReportItems, organisationUnit, sheet );
             }
             else
             {
                 this.generateHorizontalOutPutFile( exportReportInstance, exportReportItems, organisationUnit, sheet );
             }
         }
-        
+
         /**
          * Garbage
          */
+        orderedGroups = null;
         exportReportItems = null;
     }
 
@@ -87,7 +106,7 @@
     // Supportive method
     // -------------------------------------------------------------------------
 
-    private void generateVerticalOutPutFile( ExportReportCategory exportReport,
+    private void generateVerticalOutPutFile( List<DataElementGroupOrder> orderedGroups,
         Collection<ExportItem> exportReportItems, OrganisationUnit organisationUnit, Sheet sheet )
     {
         for ( ExportItem reportItem : exportReportItems )
@@ -95,26 +114,26 @@
             int run = 0;
             int rowBegin = reportItem.getRow();
 
-            for ( DataElementGroupOrder dataElementGroup : exportReport.getDataElementOrders() )
+            for ( DataElementGroupOrder group : orderedGroups )
             {
                 int beginChapter = rowBegin;
 
                 if ( reportItem.getItemType().equalsIgnoreCase( ExportItem.TYPE.DATAELEMENT_NAME ) )
                 {
-                    ExcelUtils.writeValueByPOI( rowBegin, reportItem.getColumn(), dataElementGroup.getName(),
-                        ExcelUtils.TEXT, sheet, this.csText12BoldCenter );
+                    ExcelUtils.writeValueByPOI( rowBegin, reportItem.getColumn(), group.getName(), ExcelUtils.TEXT,
+                        sheet, this.csText12BoldCenter );
                 }
                 else if ( reportItem.getItemType().equalsIgnoreCase( ExportItem.TYPE.DATAELEMENT_CODE ) )
                 {
-                    ExcelUtils.writeValueByPOI( rowBegin, reportItem.getColumn(), dataElementGroup.getCode(),
-                        ExcelUtils.TEXT, sheet, this.csText12BoldCenter );
+                    ExcelUtils.writeValueByPOI( rowBegin, reportItem.getColumn(), group.getCode(), ExcelUtils.TEXT,
+                        sheet, this.csText12BoldCenter );
                 }
 
                 run++;
                 rowBegin++;
                 int serial = 1;
 
-                for ( DataElement dataElement : dataElementGroup.getDataElements() )
+                for ( DataElement dataElement : group.getDataElements() )
                 {
                     if ( reportItem.getItemType().equalsIgnoreCase( ExportItem.TYPE.DATAELEMENT_NAME ) )
                     {
@@ -142,7 +161,7 @@
 
                         String expression = reportItem.getExpression();
                         expression = expression.replace( "*", String.valueOf( dataElement.getId() ) );
-                        
+
                         newReportItem.setPeriodType( reportItem.getPeriodType() );
                         newReportItem.setExpression( expression );
 

=== modified file 'local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/exporting/action/ValidateGenerateExportReportAction.java'
--- local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/exporting/action/ValidateGenerateExportReportAction.java	2012-05-12 19:01:57 +0000
+++ local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/exporting/action/ValidateGenerateExportReportAction.java	2012-09-19 02:22:55 +0000
@@ -28,6 +28,8 @@
  */
 
 import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
 
 import org.hisp.dhis.reportsheet.ExportReport;
 import org.hisp.dhis.reportsheet.ExportReportService;
@@ -78,6 +80,13 @@
         this.exportReportIds = exportReportIds;
     }
 
+    private List<Integer> orderedGroupIds = new ArrayList<Integer>();
+
+    public void setOrderedGroupIds( List<Integer> orderedGroupIds )
+    {
+        this.orderedGroupIds = orderedGroupIds;
+    }
+
     private String periodIndex;
 
     public void setPeriodIndex( String periodIndex )
@@ -150,7 +159,8 @@
             selectionManager.setListObject( exportReportIds );
         }
 
+        selectionManager.setOrderedGroupList( orderedGroupIds );
+
         return SUCCESS;
     }
-
 }

=== modified file 'local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/organisationunit/action/AddMultiOrganisationUnitAction.java'
--- local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/organisationunit/action/AddMultiOrganisationUnitAction.java	2012-08-21 08:32:18 +0000
+++ local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/organisationunit/action/AddMultiOrganisationUnitAction.java	2012-09-19 02:22:55 +0000
@@ -172,7 +172,7 @@
         // Create organization unit
         // ---------------------------------------------------------------------
 
-        String extraName = ( parent.getCode() == null ? String.valueOf( parent.getId() ) : parent.getCode() );
+        String extraName = (parent.getCode() == null ? String.valueOf( parent.getId() ) : parent.getCode());
 
         for ( String id : selectedList )
         {

=== modified file 'local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/state/DefaultSelectionManager.java'
--- local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/state/DefaultSelectionManager.java	2011-10-13 03:03:58 +0000
+++ local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/state/DefaultSelectionManager.java	2012-09-19 02:22:55 +0000
@@ -27,6 +27,7 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+import java.util.List;
 import java.util.Map;
 
 import com.opensymphony.xwork2.ActionContext;
@@ -52,6 +53,8 @@
 
     private static final String SESSION_KEY_LIST_OBJECT = "SESSION_KEY_LIST_OBJECT";
 
+    private static final String SESSION_KEY_LIST_ORDERED_GROUP = "SESSION_KEY_LIST_ORDERED_GROUP";
+
     public String getDownloadFilePath()
     {
         return (String) getSession().get( SESSION_KEY_FILE_DOWNLOAD );
@@ -124,14 +127,26 @@
         getSession().put( SESSION_KEY_LIST_OBJECT, objects );
     }
 
+    @SuppressWarnings("unchecked")
+    public List<Integer> getOrderedGroupList()
+    {
+        return (List<Integer>) getSession().get( SESSION_KEY_LIST_ORDERED_GROUP );
+    }
+
+    @SuppressWarnings( "unchecked" )
+    public void setOrderedGroupList( List<Integer> objects )
+    {
+        getSession().put( SESSION_KEY_LIST_ORDERED_GROUP, objects );
+    }
+
     public String getSelectedPeriodIndex()
     {
         return (String) getSession().get( SESSION_KEY_SELECTED_PERIOD_ID );
     }
 
-    @SuppressWarnings("unchecked")
+    @SuppressWarnings( "unchecked" )
     public void setSelectedPeriodIndex( String periodIndex )
     {
-        getSession().put( SESSION_KEY_SELECTED_PERIOD_ID, periodIndex  );
+        getSession().put( SESSION_KEY_SELECTED_PERIOD_ID, periodIndex );
     }
 }

=== modified file 'local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/state/SelectionManager.java'
--- local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/state/SelectionManager.java	2011-10-13 03:03:58 +0000
+++ local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/state/SelectionManager.java	2012-09-19 02:22:55 +0000
@@ -26,6 +26,8 @@
  */
 package org.hisp.dhis.reportsheet.state;
 
+import java.util.List;
+
 /**
  * @author Tran Thanh Tri
  * @version $Id$
@@ -59,5 +61,8 @@
     public String[] getListObject();
     
     public void setListObject( String[] objects );
+    
+    public List<Integer> getOrderedGroupList();
 
+    public void setOrderedGroupList( List<Integer> objects );
 }

=== modified file 'local/vn/dhis-web-spreadsheet-reporting/src/main/resources/META-INF/dhis/beans.xml'
--- local/vn/dhis-web-spreadsheet-reporting/src/main/resources/META-INF/dhis/beans.xml	2012-08-21 08:32:18 +0000
+++ local/vn/dhis-web-spreadsheet-reporting/src/main/resources/META-INF/dhis/beans.xml	2012-09-19 02:22:55 +0000
@@ -243,6 +243,13 @@
 	</bean>
 
 	<bean
+		id="org.hisp.dhis.reportsheet.degroup.action.GetDataElementGroupOrdersByReportAction"
+		class="org.hisp.dhis.reportsheet.degroup.action.GetDataElementGroupOrdersByReportAction"
+		scope="prototype">
+		<property name="exportReportService" ref="org.hisp.dhis.reportsheet.ExportReportService" />
+	</bean>
+
+	<bean
 		id="org.hisp.dhis.reportsheet.degroup.action.UpdateSortedDataElementGroupOrderAction"
 		class="org.hisp.dhis.reportsheet.degroup.action.UpdateSortedDataElementGroupOrderAction"
 		scope="prototype">

=== modified file 'local/vn/dhis-web-spreadsheet-reporting/src/main/resources/org/hisp/dhis/reportsheet/i18n_module.properties'
--- local/vn/dhis-web-spreadsheet-reporting/src/main/resources/org/hisp/dhis/reportsheet/i18n_module.properties	2012-08-21 08:32:18 +0000
+++ local/vn/dhis-web-spreadsheet-reporting/src/main/resources/org/hisp/dhis/reportsheet/i18n_module.properties	2012-09-19 02:22:55 +0000
@@ -371,4 +371,5 @@
 available_data_sets = Available data sets
 selected_data_sets = Selected data sets
 select_group = Select group of unit
-add_multi_organisation_unit = Add Multi-org-unit
\ No newline at end of file
+add_multi_organisation_unit = Add Multi-org-unit
+filter_on_section=Filter on section
\ No newline at end of file

=== modified file 'local/vn/dhis-web-spreadsheet-reporting/src/main/resources/org/hisp/dhis/reportsheet/i18n_module_vi_VN.properties'
--- local/vn/dhis-web-spreadsheet-reporting/src/main/resources/org/hisp/dhis/reportsheet/i18n_module_vi_VN.properties	2012-08-21 08:32:18 +0000
+++ local/vn/dhis-web-spreadsheet-reporting/src/main/resources/org/hisp/dhis/reportsheet/i18n_module_vi_VN.properties	2012-09-19 02:22:55 +0000
@@ -400,4 +400,5 @@
 available_data_sets = Danh s\u00e1ch t\u1eadp d\u1eef li\u1ec7u hi\u1ec7n c\u00f3
 selected_data_sets = Danh s\u00e1ch t\u1eadp d\u1eef li\u1ec7u \u0111\u01b0\u1ee3c ch\u1ecdn
 select_group = Ch\u1ecdn Nh\u00f3m \u0111\u01a1n v\u1ecb
-add_multi_organisation_unit = T\u1ea1o nhi\u1ec1u \u0111\u01a1n v\u1ecb
\ No newline at end of file
+add_multi_organisation_unit = T\u1ea1o nhi\u1ec1u \u0111\u01a1n v\u1ecb
+filter_on_section=L\u1ecdc theo nh\u00f3m
\ No newline at end of file

=== modified file 'local/vn/dhis-web-spreadsheet-reporting/src/main/resources/struts.xml'
--- local/vn/dhis-web-spreadsheet-reporting/src/main/resources/struts.xml	2012-08-21 08:32:18 +0000
+++ local/vn/dhis-web-spreadsheet-reporting/src/main/resources/struts.xml	2012-09-19 02:22:55 +0000
@@ -405,6 +405,14 @@
 				/dhis-web-spreadsheet-reporting/jsonDataElementGroupOrder.vm</result>
 		</action>
 		
+		<action name="getDataElementGroupOrdersByReport"
+			class="org.hisp.dhis.reportsheet.degroup.action.GetDataElementGroupOrdersByReportAction">
+			<result name="error" type="velocity-json">
+				/dhis-web-commons/ajax/jsonResponseError.vm</result>
+			<result name="success" type="velocity-json">
+				/dhis-web-spreadsheet-reporting/jsonDataElementGroupOrders.vm</result>
+		</action>
+		
 		<action name="openSortDataElement"
 			class="org.hisp.dhis.reportsheet.degroup.action.GetDataElementGroupOrderAction">
 			<result name="success" type="velocity">/main.vm</result>

=== modified file 'local/vn/dhis-web-spreadsheet-reporting/src/main/webapp/dhis-web-spreadsheet-reporting/generateReportForm.vm'
--- local/vn/dhis-web-spreadsheet-reporting/src/main/webapp/dhis-web-spreadsheet-reporting/generateReportForm.vm	2012-06-25 06:46:16 +0000
+++ local/vn/dhis-web-spreadsheet-reporting/src/main/webapp/dhis-web-spreadsheet-reporting/generateReportForm.vm	2012-09-19 02:22:55 +0000
@@ -17,7 +17,7 @@
 	<input type="button" onclick="showExportDiv();" value="$i18n.getString( 'show_export_params' )"/>
 </div>
 
-<div id="exportReportDiv" class="inputCriteria" style="width:680px;height:350px;">
+<div id="exportReportDiv" class="inputCriteria" style="width:640px;height:300px">
 <table>	
 	<tr>
 		<td><label class='bold'>$i18n.getString( 'organisation' )<em title="$i18n.getString( 'required' )" class="required">*</em></label>
@@ -30,7 +30,7 @@
 	</tr>
 	<tr>
 		<td>
-			<select type="text" id="group" name="group" style="width:300px" size="5" onchange="getExportReportsByGroup( currentOrgunitName )" >
+			<select type="text" id="group" name="group" style="width:380px" size="5" onchange="getExportReportsByGroup( currentOrgunitName )" >
 				#foreach($group in $groups)
 					<option value='$group' #if( $group == $exportReportGroup ) selected="selected" #end>$encoder.htmlEncode( $group )</option>				
 				#end
@@ -55,15 +55,23 @@
 	</tr>
 	<tr>
 		<td>
-			<select type="text" id="exportReport" name="exportReport" style="width:400px" size="10" onchange="reportSelected()"></select>
+			<select type="text" id="exportReport" name="exportReport" style="width:380px" size="8" onchange="reportSelected()"></select>
 		</td>
 		<td id="periodCol">
-			<select type="text" id="selectedPeriodId" name="selectedPeriodId" style="width:220px" size="8" onchange="getRelativePeriods( this.value )"></select>
+			<select type="text" id="selectedPeriodId" name="selectedPeriodId" style="width:220px" size="6" onchange="getRelativePeriods( this.value )"></select>
 			<input type="hidden" id="selectedPeriodId2"/><br/>
 			<input type="button" value="&lt;&lt;" onclick="getPreviousPeriod()" id="lastPeriod"/>
 			<input type="button" value="&gt;&gt;" onclick="getNextPeriod()" id="nextPeriod"/>
 		</td>
     </tr>
+	<tr id="orderedGroupLabelTR" style="display:none">
+		<td><label class='bold'>$i18n.getString( 'filter_on_section' )</label></td>
+	</tr>
+	<tr id="orderedGroupSelectTR" style="display:none">
+		<td colspan="2">
+			<select type="text" id="orderedGroups" name="orderedGroups" style="width:610px" multiple="true" size="5"></select>
+		</td>
+    </tr>
     <tr>
 		<td colspan="2" align="right">
 			<a title="$i18n.getString( 'hide_params' )" href="javascript:hideExportDiv();">

=== modified file 'local/vn/dhis-web-spreadsheet-reporting/src/main/webapp/dhis-web-spreadsheet-reporting/javascript/export.js'
--- local/vn/dhis-web-spreadsheet-reporting/src/main/webapp/dhis-web-spreadsheet-reporting/javascript/export.js	2012-06-25 06:46:16 +0000
+++ local/vn/dhis-web-spreadsheet-reporting/src/main/webapp/dhis-web-spreadsheet-reporting/javascript/export.js	2012-09-19 02:22:55 +0000
@@ -90,15 +90,44 @@
 
 			if ( currentReportTypeName == "P" ) {
 				hideById( "periodCol" );
-			}else {
+			} else {
 				showById( "periodCol" );
 			}
 		}
 	}
-
+	
+	displayOrderedGroup();
 	displayPeriodsInternal();
 }
 
+function displayOrderedGroup()
+{
+	if ( currentReportTypeName == "C" )
+	{
+		jQuery.post( "getDataElementGroupOrdersByReport.action",
+		{
+			exportReportId: getFieldValue( 'exportReport' ).split( '_' )[0]
+		},
+		function ( json )
+		{
+			clearListById( 'orderedGroups' );
+
+			jQuery.each( json.dataElementGroupOrders, function( i, item )
+			{
+				addOptionById( 'orderedGroups', item.id, item.name );
+			} );
+			
+			showById( 'orderedGroupLabelTR' );
+			showById( 'orderedGroupSelectTR' );
+			byId( 'exportReportDiv' ).style.height = '410px';
+		} );
+	} else {		
+		hideById( 'orderedGroupLabelTR' );
+		hideById( 'orderedGroupSelectTR' );
+		byId( 'exportReportDiv' ).style.height = '300px';
+	}
+}
+
 function displayPeriodsInternal()
 {
 	if ( currentPeriodTypeName )
@@ -179,6 +208,7 @@
 function validateGenerateReport( isAdvanced )
 {
 	var exportReports = jQuery( 'select[id=exportReport]' ).children( 'option:selected' );
+	var orderedGroups = jQuery( 'select[id=orderedGroups]' ).children( 'option:selected' );
 
 	if ( exportReports.length == 0 )
 	{
@@ -200,6 +230,11 @@
 	{
 		url += 'exportReportIds=' + item.value.split( "_" )[0] + '&';
 	} );
+
+	jQuery.each( orderedGroups, function ( i, item )
+	{
+		url += 'orderedGroupIds=' + item.value + '&';
+	} );
 	
 	url = url.substring( 0, url.length - 1 );
 	

=== modified file 'local/vn/dhis-web-spreadsheet-reporting/src/main/webapp/dhis-web-spreadsheet-reporting/javascript/preview.js'
--- local/vn/dhis-web-spreadsheet-reporting/src/main/webapp/dhis-web-spreadsheet-reporting/javascript/preview.js	2012-05-12 15:59:33 +0000
+++ local/vn/dhis-web-spreadsheet-reporting/src/main/webapp/dhis-web-spreadsheet-reporting/javascript/preview.js	2012-09-19 02:22:55 +0000
@@ -21,6 +21,7 @@
 function validatePreviewReport( isAdvanced )
 {
 	var exportReports = jQuery( 'select[id=exportReport]' ).children( 'option:selected' );
+	var orderedGroups = jQuery( 'select[id=orderedGroups]' ).children( 'option:selected' );
 
 	if ( exportReports.length == 0 )
 	{
@@ -42,6 +43,11 @@
 	{
 		url += 'exportReportIds=' + item.value.split( "_" )[0] + '&';
 	} );
+
+	jQuery.each( orderedGroups, function ( i, item )
+	{
+		url += 'orderedGroupIds=' + item.value + '&';
+	} );
 	
 	url = url.substring( 0, url.length - 1 );
 	

=== added file 'local/vn/dhis-web-spreadsheet-reporting/src/main/webapp/dhis-web-spreadsheet-reporting/jsonDataElementGroupOrders.vm'
--- local/vn/dhis-web-spreadsheet-reporting/src/main/webapp/dhis-web-spreadsheet-reporting/jsonDataElementGroupOrders.vm	1970-01-01 00:00:00 +0000
+++ local/vn/dhis-web-spreadsheet-reporting/src/main/webapp/dhis-web-spreadsheet-reporting/jsonDataElementGroupOrders.vm	2012-09-19 02:22:55 +0000
@@ -0,0 +1,19 @@
+#set( $size = $!orderedGroups.size() )
+{ "dataElementGroupOrders": [
+#foreach( $dataElementGroupOrder in $!orderedGroups )
+#set( $dataElements = $!dataElementGroupOrder.dataElements )
+  {
+    "id": "${dataElementGroupOrder.id}",
+	"name": "$!encoder.jsonEncode( ${dataElementGroupOrder.name} )",
+	"code": "$!encoder.jsonEncode( ${dataElementGroupOrder.code} )",
+	"dataElements": [
+	#foreach( $de in $dataElements )
+	{
+	  "id": "${de.id}",
+	  "name": "$!encoder.jsonEncode( ${de.displayName} )"
+	}#if( $velocityCount < $!dataElements.size() ),#end
+	#end
+	]
+  }#if( $velocityCount < $size ),#end
+#end
+] }
\ No newline at end of file