dhis2-devs team mailing list archive
-
dhis2-devs team
-
Mailing list archive
-
Message #05293
Re: [Branch ~dhis2-devs-core/dhis2/trunk] Rev 1739: Fixed bug <Data browser does not use period names>
Reverted reversion to Rev 1738
On Tue, Apr 6, 2010 at 5:09 PM, <noreply@xxxxxxxxxxxxx> wrote:
> ------------------------------------------------------------
> revno: 1739
> committer: hieu <hieu.hispvietnam@xxxxxxxxx>
> branch nick: trunk
> timestamp: Tue 2010-04-06 17:05:28 +0700
> message:
> Fixed bug <Data browser does not use period names>
> - Added new resource bundle key 'format.date.custome' which is used for
> defined the format date in data browser output.
> Fixed bug <Data browser drilldown>
> - Working on process and still have a long discussion with Jason about
> re-solving this one
> modified:
> dhis-2/dhis-api/src/main/java/org/hisp/dhis/i18n/I18nFormat.java
>
> dhis-2/dhis-services/dhis-service-administration/src/main/java/org/hisp/dhis/databrowser/jdbc/StatementManagerDataBrowserStore.java
>
> dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java
> dhis-2/dhis-web/dhis-web-commons/src/main/resources/i18n_global.properties
>
> dhis-2/dhis-web/dhis-web-commons/src/main/resources/i18n_global_vi_VN.properties
>
> dhis-2/dhis-web/dhis-web-excel-reporting/src/main/resources/org/hisp/dhis/reportexcel/i18n_module.properties
>
> dhis-2/dhis-web/dhis-web-excel-reporting/src/main/resources/org/hisp/dhis/reportexcel/i18n_module_vi_VN.properties
>
> dhis-2/dhis-web/dhis-web-excel-reporting/src/main/webapp/dhis-web-excel-reporting/excelTemplateList.vm
>
> dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/java/org/hisp/dhis/dataadmin/action/databrowser/SearchAction.java
>
> dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/webapp/dhis-web-maintenance-dataadmin/dataBrowserResult.vm
>
> dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-datadictionary/src/main/resources/org/hisp/dhis/dd/i18n_module.properties
>
>
> --
> lp:dhis2
> https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk<https://code.launchpad.net/%7Edhis2-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<https://code.launchpad.net/%7Edhis2-devs-core/dhis2/trunk/+edit-subscription>
>
> === modified file
> 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/i18n/I18nFormat.java'
> --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/i18n/I18nFormat.java
> 2009-03-03 16:46:36 +0000
> +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/i18n/I18nFormat.java
> 2010-04-06 10:05:28 +0000
> @@ -51,13 +51,13 @@
> }
>
> /**
> - * Constructor should only be used for testing purposes. Use
> + * Constructor should only be used for testing purposes. Use
> * I18nManager.getI18nFormat for normal use.
> */
> public I18nFormat()
> - {
> + {
> }
> -
> +
> //
> -------------------------------------------------------------------------
> // Init
> //
> -------------------------------------------------------------------------
> @@ -141,6 +141,16 @@
> return commonFormatting( date, resourceBundle.getString(
> "format.date" ) );
> }
>
> + public String formatDateByCustome( Date date )
> + {
> + if ( date == null )
> + {
> + return null;
> + }
> +
> + return commonFormatting( date, resourceBundle.getString(
> "format.date.custome" ) );
> + }
> +
> public String formatTime( Date date )
> {
> if ( date == null )
>
> === modified file
> 'dhis-2/dhis-services/dhis-service-administration/src/main/java/org/hisp/dhis/databrowser/jdbc/StatementManagerDataBrowserStore.java'
> ---
> dhis-2/dhis-services/dhis-service-administration/src/main/java/org/hisp/dhis/databrowser/jdbc/StatementManagerDataBrowserStore.java
> 2009-08-24 13:55:25 +0000
> +++
> dhis-2/dhis-services/dhis-service-administration/src/main/java/org/hisp/dhis/databrowser/jdbc/StatementManagerDataBrowserStore.java
> 2010-04-06 10:05:28 +0000
> @@ -15,6 +15,8 @@
> /**
> * @author joakibj, martinwa, briane, eivinhb
> * @version $Id$
> + * @modifier Dang Duy Hieu
> + * @since 2010-04-06
> */
> public class StatementManagerDataBrowserStore
> implements DataBrowserStore
> @@ -22,7 +24,7 @@
> //
> -------------------------------------------------------------------------
> // Dependencies
> //
> -------------------------------------------------------------------------
> -
> +
> private StatementManager statementManager;
>
> public void setStatementManager( StatementManager statementManager )
> @@ -33,7 +35,7 @@
> //
> -------------------------------------------------------------------------
> // DataBrowserStore implementation
> //
> -------------------------------------------------------------------------
> -
> +
> public DataBrowserTable getDataSetsBetweenPeriods( List<Integer>
> betweenPeriodIds )
> {
> StatementHolder holder = statementManager.getHolder();
> @@ -46,13 +48,13 @@
> try
> {
> StringBuffer sqlsb = new StringBuffer();
> - sqlsb.append( "SELECT d.datasetid AS ID, d.name AS DataSet,
> count(*) AS Count " );
> + sqlsb.append( "(SELECT d.datasetid AS ID, d.name AS DataSet,
> count(*) AS Counts_of_aggregated_values " );
> sqlsb.append( "FROM datavalue dv " );
> sqlsb.append( "JOIN datasetmembers dsm ON (dv.dataelementid =
> dsm.dataelementid) " );
> sqlsb.append( "JOIN dataset d ON (d.datasetid = dsm.datasetid)
> " );
> sqlsb.append( "WHERE dv.periodid IN " + splitListHelper(
> betweenPeriodIds ) + " " );
> sqlsb.append( "GROUP BY d.datasetid, d.name " );
> - sqlsb.append( "ORDER BY Count DESC" );
> + sqlsb.append( "ORDER BY Counts_of_aggregated_values DESC)" );
>
> String sql = sqlsb.toString();
>
> @@ -78,9 +80,9 @@
> {
> holder.close();
> }
> -
> +
> return table;
> - }
> + }
>
> public DataBrowserTable getDataElementGroupsBetweenPeriods(
> List<Integer> betweenPeriodIds )
> {
> @@ -91,13 +93,14 @@
> try
> {
> StringBuffer sqlsb = new StringBuffer();
> - sqlsb.append( "SELECT d.dataelementgroupid AS ID, d.name AS
> DataElementGroup, count(*) AS Count " );
> + sqlsb
> + .append( "(SELECT d.dataelementgroupid AS ID, d.name AS
> DataElementGroup, count(*) AS Counts_of_aggregated_values " );
> sqlsb.append( "FROM datavalue dv " );
> - sqlsb
> - .append( "JOIN dataelementgroupmembers degm ON
> (dv.dataelementid = degm.dataelementid) JOIN dataelementgroup d ON
> (d.dataelementgroupid = degm.dataelementgroupid) " );
> + sqlsb.append( "JOIN dataelementgroupmembers degm ON
> (dv.dataelementid = degm.dataelementid)" );
> + sqlsb.append( "JOIN dataelementgroup d ON
> (d.dataelementgroupid = degm.dataelementgroupid) " );
> sqlsb.append( "WHERE dv.periodid IN " + splitListHelper(
> betweenPeriodIds ) + " " );
> sqlsb.append( "GROUP BY d.dataelementgroupid, d.name " );
> - sqlsb.append( "ORDER BY Count DESC;" );
> + sqlsb.append( "ORDER BY Count DESC)" );
>
> String sql = sqlsb.toString();
>
> @@ -122,7 +125,7 @@
> {
> holder.close();
> }
> -
> +
> return table;
> }
>
> @@ -132,18 +135,18 @@
>
> DataBrowserTable table = null;
> String sql = "";
> -
> +
> try
> {
> StringBuffer sqlsb = new StringBuffer();
>
> - sqlsb.append( "SELECT oug.orgunitgroupid, oug.name, Count(*)
> as ant " );
> - sqlsb.append( "FROM orgunitgroup oug " );
> - sqlsb.append( "Join orgunitgroupmembers ougm ON
> oug.orgunitgroupid = ougm.orgunitgroupid " );
> - sqlsb.append( "Join organisationunit ou ON
> ougm.organisationunitid = ou.organisationunitid " );
> - sqlsb.append( "Join datavalue dv ON ou.organisationunitid =
> dv.sourceid " );
> + sqlsb.append( "(SELECT oug.orgunitgroupid, oug.name, Count(*)
> as Counts_of_aggregated_values " );
> + sqlsb.append( "FROM orgunitgroup oug " );
> + sqlsb.append( "JOIN orgunitgroupmembers ougm ON
> oug.orgunitgroupid = ougm.orgunitgroupid " );
> + sqlsb.append( "JOIN organisationunit ou ON
> ougm.organisationunitid = ou.organisationunitid " );
> + sqlsb.append( "JOIN datavalue dv ON ou.organisationunitid =
> dv.sourceid " );
> sqlsb.append( "WHERE dv.periodid IN " + splitListHelper(
> betweenPeriodIds ) + " " );
> - sqlsb.append( "GROUP BY oug.orgunitgroupid, oug.name ORDER BY
> ant desc " );
> + sqlsb.append( "GROUP BY oug.orgunitgroupid, oug.name ORDER BY
> Counts_of_aggregated_values DESC) " );
>
> sql = sqlsb.toString();
>
> @@ -168,7 +171,7 @@
> {
> holder.close();
> }
> -
> +
> return table;
> }
>
> @@ -180,13 +183,13 @@
> try
> {
> StringBuffer sqlsb = new StringBuffer();
> - sqlsb.append( "SELECT de.dataelementid, de.name AS Name " );
> + sqlsb.append( "(SELECT de.dataelementid, de.name AS Name " );
> sqlsb.append( "FROM dataelement de JOIN datavalue dv ON
> (de.dataelementid = dv.dataelementid) " );
> sqlsb.append( "JOIN datasetmembers dsm ON (de.dataelementid =
> dsm.dataelementid) " );
> - sqlsb.append( "WHERE dsm.datasetid = " + dataSetId + " AND
> dv.periodid IN "
> - + splitListHelper( betweenPeriods ) + " " );
> + sqlsb.append( "WHERE dsm.datasetid = '" + dataSetId + "' " );
> + sqlsb.append( "AND dv.periodid IN " + splitListHelper(
> betweenPeriods ) + " " );
> sqlsb.append( "GROUP BY de.dataelementid, de.name " );
> - sqlsb.append( "ORDER BY de.name " );
> + sqlsb.append( "ORDER BY de.name) " );
>
> String sql = sqlsb.toString();
>
> @@ -215,20 +218,20 @@
> StatementHolder holder = statementManager.getHolder();
>
> StringBuffer sqlsb = new StringBuffer();
> - String sql = "";
> -
> + String sql = "";
> +
> try
> {
> - sqlsb.append( "SELECT deg.dataelementgroupid, deg.name AS
> DataElementGroup " );
> + sqlsb.append( "(SELECT deg.dataelementgroupid, deg.name AS
> DataElementGroup " );
> sqlsb.append( "FROM dataelementgroup deg " );
> - sqlsb.append( "Join dataelementgroupmembers degm ON
> deg.dataelementgroupid = degm.dataelementgroupid " );
> - sqlsb.append( "Join datavalue dv ON degm.dataelementid =
> dv.dataelementid " );
> - sqlsb.append( "Join organisationunit ou ON dv.sourceid =
> ou.organisationunitid " );
> - sqlsb.append( "Join orgunitgroupmembers ougm ON
> ou.organisationunitid = ougm.organisationunitid " );
> - sqlsb.append( "WHERE ougm.orgunitgroupid = '" +
> orgUnitGroupId + "' AND dv.periodid IN "
> - + splitListHelper( betweenPeriods ) + " " );
> + sqlsb.append( "JOIN dataelementgroupmembers degm ON
> deg.dataelementgroupid = degm.dataelementgroupid " );
> + sqlsb.append( "JOIN datavalue dv ON degm.dataelementid =
> dv.dataelementid " );
> + sqlsb.append( "JOIN organisationunit ou ON dv.sourceid =
> ou.organisationunitid " );
> + sqlsb.append( "JOIN orgunitgroupmembers ougm ON
> ou.organisationunitid = ougm.organisationunitid " );
> + sqlsb.append( "WHERE ougm.orgunitgroupid = '" + orgUnitGroupId
> + "' " );
> + sqlsb.append( "AND dv.periodid IN " + splitListHelper(
> betweenPeriods ) + " " );
> sqlsb.append( "GROUP BY deg.dataelementgroupid, deg.name " );
> - sqlsb.append( "ORDER BY deg.name ASC " );
> + sqlsb.append( "ORDER BY deg.name ASC) " );
>
> sql = sqlsb.toString();
>
> @@ -259,13 +262,13 @@
> try
> {
> StringBuffer sqlsb = new StringBuffer();
> - sqlsb.append( "SELECT de.dataelementid, de.name AS Name " );
> + sqlsb.append( "(SELECT de.dataelementid, de.name AS Name " );
> sqlsb.append( "FROM dataelement de JOIN datavalue dv ON
> (de.dataelementid = dv.dataelementid) " );
> sqlsb.append( "JOIN dataelementgroupmembers degm ON
> (de.dataelementid = degm.dataelementid) " );
> - sqlsb.append( "WHERE degm.dataelementgroupid = " +
> dataElementGroupId + " AND dv.periodid IN "
> - + splitListHelper( betweenPeriods ) + " " );
> + sqlsb.append( "WHERE degm.dataelementgroupid = '" +
> dataElementGroupId + "' " );
> + sqlsb.append( "AND dv.periodid IN " + splitListHelper(
> betweenPeriods ) + " " );
> sqlsb.append( "GROUP BY de.dataelementid, de.name " );
> - sqlsb.append( "ORDER BY de.name " );
> + sqlsb.append( "ORDER BY de.name) " );
>
> String sql = sqlsb.toString();
>
> @@ -289,6 +292,7 @@
> }
> }
>
> + // THE PROBLEM IS HERE >>> STILL WORKING
> public void setStructureForOrgUnitBetweenPeriods( DataBrowserTable
> table, Integer orgUnitParent,
> List<Integer> betweenPeriods )
> {
> @@ -297,9 +301,13 @@
> try
> {
> StringBuffer sqlsb = new StringBuffer();
> - sqlsb.append( "SELECT o.organisationunitid, o.name AS
> OrganisationUnit " );
> + sqlsb.append( "(SELECT o.organisationunitid, o.name AS
> OrganisationUnit " );
> sqlsb.append( "FROM organisationunit o " );
> - sqlsb.append( "WHERE o.parentid = " + orgUnitParent + "" );
> + sqlsb.append( "JOIN datavalue as dv ON (o.organisationunitid =
> dv.sourceid) " );
> + sqlsb.append( "WHERE o.parentid = '" + orgUnitParent + "' " );
> + sqlsb.append( "AND dv.periodid IN " + splitListHelper(
> betweenPeriods ) + " " );
> + sqlsb.append( "GROUP BY o.organisationunitid, o.name " );
> + sqlsb.append( "ORDER BY o.name)" );
>
> String sql = sqlsb.toString();
>
> @@ -324,21 +332,26 @@
> }
> }
>
> - public void setDataElementStructureForOrgUnitBetweenPeriods(
> DataBrowserTable table, Integer orgUnitId, List<Integer> betweenPeriods)
> + public void setDataElementStructureForOrgUnitBetweenPeriods(
> DataBrowserTable table, Integer orgUnitId,
> + List<Integer> betweenPeriods )
> {
> + // Please do not delete this testing ...
> + System.out.println( "\n\n\n TESTING IN
> [setDataElementStructureForOrgUnitBetweenPeriods] :: " );
> +
> StatementHolder holder = statementManager.getHolder();
> -
> +
> try
> {
> StringBuffer sqlsb = new StringBuffer();
> - sqlsb.append( "SELECT de.dataelementid, de.name AS
> DataElementGroup " );
> + sqlsb.append( "(SELECT de.dataelementid, de.name AS
> DataElement " );
> sqlsb.append( "FROM dataelement AS de " );
> - sqlsb.append( "Inner Join datavalue AS dv ON (de.dataelementid
> = dv.dataelementid) " );
> - sqlsb.append( "Inner Join datasetmembers AS dsm ON
> (de.dataelementid = dsm.dataelementid) " );
> - sqlsb.append( "Inner Join organisationunit ON dv.sourceid =
> organisationunit.organisationunitid " );
> - sqlsb.append( "WHERE organisationunit.organisationunitid = " +
> orgUnitId + " " );
> + sqlsb.append( "INNER JOIN datavalue AS dv ON (de.dataelementid
> = dv.dataelementid) " );
> + sqlsb.append( "INNER JOIN datasetmembers AS dsm ON
> (de.dataelementid = dsm.dataelementid) " );
> + sqlsb.append( "INNER JOIN organisationunit AS o ON
> (dv.sourceid = o.organisationunitid) " );
> + sqlsb.append( "WHERE o.organisationunitid = '" + orgUnitId +
> "' " );
> + sqlsb.append( "AND dv.periodid IN " + splitListHelper(
> betweenPeriods ) + " " );
> sqlsb.append( "GROUP BY de.dataelementid, de.name " );
> - sqlsb.append( "ORDER BY de.name " );
> + sqlsb.append( "ORDER BY de.name) " );
>
> String sql = sqlsb.toString();
>
> @@ -348,8 +361,12 @@
> TimeUtils.stop();
>
> table.incrementQueryCount();
> - table.addColumnName("DataElement");
> + table.addColumnName( "DataElement" );
> table.createStructure( resultSet );
> +
> + // TEST TABLE
> + // Please do not delete this testing ...
> + System.out.println( "\nTABLE For OrgUnit option:= " + table );
> }
> catch ( SQLException e )
> {
> @@ -360,11 +377,12 @@
> holder.close();
> }
> }
> -
> - public Integer setCountDataElementsForDataSetBetweenPeriods(
> DataBrowserTable table, Integer dataSetId, List<Integer> betweenPeriodIds)
> +
> + public Integer setCountDataElementsForDataSetBetweenPeriods(
> DataBrowserTable table, Integer dataSetId,
> + List<Integer> betweenPeriodIds )
> {
> StatementHolder holder = statementManager.getHolder();
> -
> +
> // Here we uses a for loop to create one big sql statement using
> UNION.
> // This is done because the count and GROUP BY parts of this query
> can't
> // be done in another way. The alternative to this method is to
> actually
> @@ -375,23 +393,24 @@
> StringBuffer sqlsb = new StringBuffer();
>
> int i = 0;
> - for ( Integer periodid : betweenPeriodIds )
> + for ( Integer periodId : betweenPeriodIds )
> {
> i++;
>
> - sqlsb.append( "(SELECT de.dataelementid, de.name AS
> DataElement, count(*) AS Count, p.periodid AS PeriodId, p.startDate AS
> ColumnHeader " );
> + sqlsb
> + .append( "(SELECT de.dataelementid, de.name AS
> DataElement, Count(dv.value) AS Counts_of_aggregated_values, p.periodid AS
> PeriodId, p.startDate AS ColumnHeader " );
> sqlsb.append( "FROM dataelement de JOIN datavalue dv ON
> (de.dataelementid = dv.dataelementid) " );
> sqlsb.append( "JOIN datasetmembers dsm ON (de.dataelementid =
> dsm.dataelementid) " );
> sqlsb.append( "JOIN period p ON (dv.periodid = p.periodid) " );
> - sqlsb.append( "WHERE dsm.datasetid = " + dataSetId + " AND
> dv.periodid = " + periodid + " " );
> - sqlsb.append( "GROUP BY de.dataelementid, de.name,
> p.periodid, p.startDate )" );
> + sqlsb.append( "WHERE dsm.datasetid = '" + dataSetId + "' AND
> dv.periodid = '" + periodId + "' " );
> + sqlsb.append( "GROUP BY de.dataelementid, de.name,
> p.periodid, p.startDate)" );
>
> if ( i == betweenPeriodIds.size() )
> - sqlsb.append( "ORDER BY PeriodId ");
> + sqlsb.append( "ORDER BY PeriodId " );
> else
> - sqlsb.append( " UNION ");
> + sqlsb.append( " UNION " );
> }
> -
> +
> try
> {
> TimeUtils.start();
> @@ -401,7 +420,7 @@
>
> table.incrementQueryCount();
>
> - numResults = table.addColumnToAllRows( resultSet );
> + numResults = table.addColumnToAllRows( resultSet );
> }
> catch ( SQLException e )
> {
> @@ -427,16 +446,16 @@
> for ( Integer periodid : betweenPeriodIds )
> {
> i++;
> -
> +
> sqlsb
> - .append( "(SELECT de.dataelementid, de.name AS
> DataElement, count(*) AS Count, p.periodid AS PeriodId, p.startDate AS
> ColumnHeader " );
> + .append( "(SELECT de.dataelementid, de.name AS
> DataElement, count(dv.value) AS Counts_of_aggregated_values, p.periodid AS
> PeriodId, p.startDate AS ColumnHeader " );
> sqlsb.append( "FROM dataelement de JOIN datavalue dv ON
> (de.dataelementid = dv.dataelementid) " );
> sqlsb.append( "JOIN dataelementgroupmembers degm ON
> (de.dataelementid = degm.dataelementid) " );
> sqlsb.append( "JOIN period p ON (dv.periodid = p.periodid) " );
> - sqlsb.append( "WHERE degm.dataelementgroupid = " +
> dataElementGroupId + " AND dv.periodid = " + periodid
> - + " " );
> + sqlsb.append( "WHERE degm.dataelementgroupid = '" +
> dataElementGroupId + "' " );
> + sqlsb.append( "AND dv.periodid = '" + periodid + "' " );
> sqlsb.append( "GROUP BY de.dataelementid, de.name, p.periodid,
> p.startDate) " );
> -
> +
> if ( i == betweenPeriodIds.size() )
> sqlsb.append( "ORDER BY PeriodId " );
> else
> @@ -465,7 +484,7 @@
>
> return numResults;
> }
> -
> +
> public Integer setCountDataElementGroupsForOrgUnitGroupBetweenPeriods(
> DataBrowserTable table,
> Integer orgUnitGroupId, List<Integer> betweenPeriodIds )
> {
> @@ -473,21 +492,21 @@
>
> Integer numResults = 0;
> StringBuffer sqlsb = new StringBuffer();
> -
> +
> int i = 0;
> for ( Integer periodid : betweenPeriodIds )
> {
> i++;
>
> sqlsb
> - .append( " (SELECT deg.dataelementgroupid, deg.name,
> Count(*) AS Count, p.periodid AS PeriodId, p.startdate AS ColumnHeader " );
> + .append( " (SELECT deg.dataelementgroupid, deg.name,
> Count(dv.value) AS Counts_of_aggregated_values, p.periodid AS PeriodId,
> p.startdate AS ColumnHeader " );
> sqlsb.append( "FROM dataelementgroup AS deg " );
> sqlsb
> - .append( "Inner Join dataelementgroupmembers AS degm ON
> deg.dataelementgroupid = degm.dataelementgroupid " );
> - sqlsb.append( "Inner Join datavalue AS dv ON
> degm.dataelementid = dv.dataelementid " );
> - sqlsb.append( "Inner Join period AS p ON dv.periodid =
> p.periodid " );
> - sqlsb.append( "Inner Join organisationunit AS ou ON
> dv.sourceid = ou.organisationunitid " );
> - sqlsb.append( "Inner Join orgunitgroupmembers AS ougm ON
> ou.organisationunitid = ougm.organisationunitid " );
> + .append( "INNER JOIN dataelementgroupmembers AS degm ON
> deg.dataelementgroupid = degm.dataelementgroupid " );
> + sqlsb.append( "INNER JOIN datavalue AS dv ON
> degm.dataelementid = dv.dataelementid " );
> + sqlsb.append( "INNER JOIN period AS p ON dv.periodid =
> p.periodid " );
> + sqlsb.append( "INNER JOIN organisationunit AS ou ON
> dv.sourceid = ou.organisationunitid " );
> + sqlsb.append( "INNER JOIN orgunitgroupmembers AS ougm ON
> ou.organisationunitid = ougm.organisationunitid " );
> sqlsb
> .append( "WHERE p.periodid = '" + periodid + "' AND
> ougm.orgunitgroupid = '" + orgUnitGroupId + "' " );
> sqlsb.append( "GROUP BY deg.dataelementgroupid,deg.name,p.periodid,p.startdate)
> " );
> @@ -534,14 +553,14 @@
> for ( Integer periodid : betweenPeriodIds )
> {
> i++;
> -
> +
> sqlsb
> - .append( "(SELECT o.organisationunitid, o.name AS
> OrganisationUnit, count(*) AS Count, p.periodid AS PeriodId, p.startDate AS
> ColumnHeader " );
> + .append( "(SELECT o.organisationunitid, o.name AS
> OrganisationUnit, Count(dv.value) AS Counts_of_aggregated_values, p.periodid
> AS PeriodId, p.startDate AS ColumnHeader " );
> sqlsb.append( "FROM organisationunit o JOIN datavalue dv ON
> (o.organisationunitid = dv.sourceid) " );
> sqlsb.append( "JOIN period p ON (dv.periodid = p.periodid) " );
> - sqlsb.append( "WHERE o.parentid = " + orgUnitParent + " AND
> dv.periodid = " + periodid + " " );
> - sqlsb.append( "GROUP BY o.organisationunitid, o.name,
> p.periodid, p.startDate ) " );
> -
> + sqlsb.append( "WHERE o.parentid = '" + orgUnitParent + "' AND
> dv.periodid = '" + periodid + "' " );
> + sqlsb.append( "GROUP BY o.organisationunitid, o.name,
> p.periodid, p.startDate) " );
> +
> if ( i == betweenPeriodIds.size() )
> sqlsb.append( "ORDER BY PeriodId " );
> else
> @@ -570,32 +589,35 @@
> }
>
> return numResults;
> - }
> + }
>
> public Integer setCountDataElementsForOrgUnitBetweenPeriods(
> DataBrowserTable table, Integer orgUnitId,
> List<Integer> betweenPeriodIds )
> {
> + // Please do not delete this testing ...
> + System.out.println( "\n\n\n TESTING IN
> [setCountDataElementsForOrgUnitBetweenPeriods] :: " );
> +
> StatementHolder holder = statementManager.getHolder();
>
> Integer numResults = 0;
> StringBuffer sqlsb = new StringBuffer();
>
> int i = 0;
> - for ( Integer periodid : betweenPeriodIds )
> + for ( Integer periodId : betweenPeriodIds )
> {
> i++;
> -
> +
> sqlsb
> - .append( "(SELECT de.dataelementid, de.name AS
> DataElementGroup, count(*) AS Count, p.periodid AS PeriodId, p.startDate AS
> ColumnHeader " );
> + .append( "(SELECT de.dataelementid, de.name AS
> DataElementGroup, Count(dv.value) AS Counts_of_aggregated_values, p.periodid
> AS PeriodId, p.startDate AS ColumnHeader " );
> sqlsb.append( "FROM dataelement AS de " );
> - sqlsb.append( "Inner Join datavalue AS dv ON (de.dataelementid
> = dv.dataelementid) " );
> - sqlsb.append( "Inner Join datasetmembers AS dsm ON
> (de.dataelementid = dsm.dataelementid) " );
> - sqlsb.append( "Inner Join organisationunit ON dv.sourceid =
> organisationunit.organisationunitid " );
> + sqlsb.append( "INNER JOIN datavalue AS dv ON (de.dataelementid
> = dv.dataelementid) " );
> + sqlsb.append( "INNER JOIN datasetmembers AS dsm ON
> (de.dataelementid = dsm.dataelementid) " );
> + sqlsb.append( "INNER JOIN organisationunit As o ON
> (dv.sourceid = o.organisationunitid) " );
> sqlsb.append( "JOIN period p ON (dv.periodid = p.periodid) " );
> - sqlsb.append( "WHERE organisationunit.organisationunitid = " +
> orgUnitId + " AND " );
> - sqlsb.append( "dv.periodid = " + periodid + " " );
> - sqlsb.append( "GROUP BY de.dataelementid, de.name,
> p.periodid, p.startDate ) " );
> -
> + sqlsb.append( "WHERE o.organisationunitid = '" + orgUnitId +
> "' " );
> + sqlsb.append( "AND dv.periodid = '" + periodId + "' " );
> + sqlsb.append( "GROUP BY de.dataelementid, de.name,
> p.periodid, p.startDate)" );
> +
> if ( i == betweenPeriodIds.size() )
> sqlsb.append( "ORDER BY PeriodId " );
> else
> @@ -623,18 +645,18 @@
> }
>
> return numResults;
> - }
> -
> + }
> +
> //
> -------------------------------------------------------------------------
> // Supportive methods
> //
> -------------------------------------------------------------------------
>
> /**
> - * Splits a list of integers by by comma. Use this method if you have
> a
> - * list that will be used in f.ins. a WHERE xxx IN (list) clause in
> SQL.
> + * Splits a list of integers by by comma. Use this method if you have
> a list
> + * that will be used in f.ins. a WHERE xxx IN (list) clause in SQL.
> *
> - * @param List<Integer> list of Integers
> - * @return the list as a string splitted by a comma.
> + * @param List<Integer> list of Integers
> + * @return the list as a string splitted by a comma.
> */
> private String splitListHelper( List<Integer> list )
> {
>
> === modified file
> 'dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java'
> ---
> dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java
> 2010-02-08 10:56:08 +0000
> +++
> dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java
> 2010-04-06 10:05:28 +0000
> @@ -33,6 +33,7 @@
> import java.util.Date;
>
> import org.apache.commons.validator.DateValidator;
> +import org.hisp.dhis.i18n.I18nFormat;
> import org.joda.time.DateTime;
> import org.joda.time.Days;
>
> @@ -351,6 +352,35 @@
> }
>
> /**
> + * This method converts a string from the date format "yyyy-MM-dd" to
> + * "MMM-yy" of any format which belongs to each locale.
> + *
> + * @param date is the string to be converted.
> + * @return converted string if the date is valid, else the original
> string
> + * is returned
> + */
> + public static String convertDate( String dateString, I18nFormat
> i18nFormat )
> + {
> + if ( !dateIsValid( dateString ) )
> + {
> + return dateString;
> + }
> +
> + SimpleDateFormat dateFormat = new SimpleDateFormat(
> DEFAULT_DATE_FORMAT );
> +
> + try
> + {
> + Date date = dateFormat.parse( dateString );
> +
> + return i18nFormat.formatDateByCustome( date );
> + }
> + catch ( ParseException pe )
> + {
> + throw new RuntimeException( "Date string could not be parsed:
> " + dateString );
> + }
> + }
> +
> + /**
> * This method adds days to a date
> *
> * @param date the date.
>
> === modified file
> 'dhis-2/dhis-web/dhis-web-commons/src/main/resources/i18n_global.properties'
> ---
> dhis-2/dhis-web/dhis-web-commons/src/main/resources/i18n_global.properties
> 2010-04-01 09:31:33 +0000
> +++
> dhis-2/dhis-web/dhis-web-commons/src/main/resources/i18n_global.properties
> 2010-04-06 10:05:28 +0000
> @@ -1,13 +1,14 @@
>
> #-- Date Formats
> --------------------------------------------------------------#
>
> -format.date = yyyy-MM-dd
> -format.date.label = yyyy-mm-dd
> -format.time = HH:mm
> -format.time.label = hh:mm
> -format.datetime = yyyy-MM-dd HH:mm
> -format.datetime.label = yyyy-mm-dd hh:mm
> -format.date.label.jquery = yy-mm-dd
> +format.date = yyyy-MM-dd
> +format.date.label = yyyy-mm-dd
> +format.date.custome = MMM-yy
> +format.time = HH:mm
> +format.time.label = hh:mm
> +format.datetime = yyyy-MM-dd HH:mm
> +format.datetime.label = yyyy-mm-dd hh:mm
> +format.date.label.jquery = yy-mm-dd
>
> #-- dhis-wp
> -------------------------------------------------------------------#
>
>
> === 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
> 2010-04-01 09:31:33 +0000
> +++
> dhis-2/dhis-web/dhis-web-commons/src/main/resources/i18n_global_vi_VN.properties
> 2010-04-06 10:05:28 +0000
> @@ -2,6 +2,7 @@
>
> format.date = dd-MM-yyyy
> format.date.label = dd-mm-yyyy
> +format.date.custome = MMM-yy
> format.time = HH:mm
> format.time.label = hh:mm
> format.datetime = dd-MM-yyyy HH:mm
>
> === modified file
> 'dhis-2/dhis-web/dhis-web-excel-reporting/src/main/resources/org/hisp/dhis/reportexcel/i18n_module.properties'
> ---
> dhis-2/dhis-web/dhis-web-excel-reporting/src/main/resources/org/hisp/dhis/reportexcel/i18n_module.properties
> 2010-03-25 08:15:35 +0000
> +++
> dhis-2/dhis-web/dhis-web-excel-reporting/src/main/resources/org/hisp/dhis/reportexcel/i18n_module.properties
> 2010-04-06 10:05:28 +0000
> @@ -200,7 +200,6 @@
> use_only_letters_numbers_dot_only = Please enter Letters, Numbers for
> file's name and Dot for extension only
> cell_exist = Exist one cell same
> sheet, row and column with this.
> update_successful = Updating is success !
> -cell_exist = Exist one cell same
> sheet, row and column with this.
> download = Download
> upload_file_null = Upload file null
> file_type_not_supported = File type not supported
> @@ -217,4 +216,4 @@
> translation_translate = Translate
> template_using = File is using
> template_pending = File is pending
> -expression_not_well_formed = Expression is not well formed
> \ No newline at end of file
> +expression_not_well_formed = Expression is not well-formed
> \ No newline at end of file
>
> === modified file
> 'dhis-2/dhis-web/dhis-web-excel-reporting/src/main/resources/org/hisp/dhis/reportexcel/i18n_module_vi_VN.properties'
> ---
> dhis-2/dhis-web/dhis-web-excel-reporting/src/main/resources/org/hisp/dhis/reportexcel/i18n_module_vi_VN.properties
> 2010-03-24 02:56:06 +0000
> +++
> dhis-2/dhis-web/dhis-web-excel-reporting/src/main/resources/org/hisp/dhis/reportexcel/i18n_module_vi_VN.properties
> 2010-04-06 10:05:28 +0000
> @@ -202,12 +202,13 @@
> cell_exist = \u0110\u00e3 t\u1ed3n
> t\u1ea1i m\u1ed9t excel item c\u00f3 c\u00f9ng d\u00f2ng, c\u1ed9t v\u00e0
> sheet.
> update_successful = C\u1eadp nh\u1eadt th\u00e0nh c\u00f4ng !
> download = T\u1ea3i v\u1ec1
> -override_confirm = File template n\u00e0y
> \u0111\u00e3 t\u1ed3n t\u1ea1i. B\u1ea1n c\u00f3 mu\u1ed1n ghi \u0111\u00e8
> hay ko ?
> -template_using = \u0110ANG s\u1eed d\u1ee5ng
> t\u1eadp tin n\u00e0y
> -template_pending = CH\u01afA s\u1eed d\u1ee5ng t\u1eadp tin
> n\u00e0y
> +override_confirm = B\u1ea1n c\u00f3 mu\u1ed1n ghi
> \u0111\u00e8 t\u1eadp tin m\u1eabu n\u00e0y kh\u00f4ng?
> +template_using = \u0110ANG s\u1eed d\u1ee5ng
> +template_pending = CH\u01afA s\u1eed d\u1ee5ng
> intro_configuration = Thi\u1ebft l\u1eadp \u0111\u01b0\u1eddng
> d\u1eabn ch\u1ec9 t\u1edbi thu m\u1ee5c l\u01b0u tr\u1eef c\u00e1c t\u1eadp
> tin excel m\u1eabu. V\u00ed d\u1ee5: C:\\ABC
> intro_reports = T\u1ea1o m\u1edbi, c\u1eadp nh\u1eadt, xem
> v\u00e0 x\u00f3a c\u00e1c B\u00e1o c\u00e1o excel. M\u1ed9t b\u00e1o
> c\u00e1o excel ch\u1ee9a nhi\u1ec1u ph\u1ea7n t\u1eed excel. B\u00e1o
> c\u00e1o excel c\u00f3 th\u1ec3 thu\u1ed9c nhi\u1ec1u lo\u1ea1i b\u00e1o
> c\u00e1o kh\u00e1c nhau. Cho ph\u00e9p g\u00e1n b\u00e1o c\u00e1o excel cho
> m\u1ed9t hay nhi\u1ec1u \u0111\u01a1n v\u1ecb ho\u1eb7c nh\u00f3m
> \u0111\u01a1n v\u1ecb v\u00e0 m\u1ed9t s\u1ed1 t\u00f9y ch\u1ecdn kh\u00e1c.
> intro_data_status = Ch\u1ee9c n\u0103ng n\u00e0y d\u00f9ng
> \u0111\u1ec3 xem tr\u1ea1ng th\u00e1i nh\u1eadp d\u1eef li\u1ec7u (D\u1eef
> li\u1ec7u \u0111\u01b0\u1ee3c nh\u1eadp xong hay ch\u01b0a ho\u1eb7c s\u1ed1
> li\u1ec7u n\u00e0o c\u00f2n thi\u1ebfu v.v...).
> intro_clean_up = Ch\u1ee9c n\u0103ng n\u00e0y cho ph\u00e9p
> ng\u01b0\u1eddi d\u00f9ng x\u00f3a c\u00e1c t\u1eadp tin t\u1ea1m sinh ra
> trong qu\u00e1 tr\u00ecnh sinh b\u00e1o c\u00e1o ho\u1eb7c xem
> tr\u01b0\u1edbc b\u00e1o c\u00e1o.
> intro_excel_item = T\u1ea1o m\u1edbi, c\u1eadp nh\u1eadt, xem
> v\u00e0o x\u00f3a c\u00e1c ph\u1ea7n t\u1eed excel cho qu\u00e1 tr\u00ecnh
> import d\u1eef li\u1ec7u t\u1eeb t\u1eadp tin excel. Ph\u1ea7n t\u1eed excel
> n\u00e0y c\u00f3 ch\u1ee9c n\u0103ng g\u1ea7n gi\u1ed1ng v\u1edbi ph\u1ea7n
> t\u1eed excel trong m\u1ed9t b\u00e1o c\u00e1o excel.
> -intro_excel_template_management = T\u1ea3i ,\u0111\u1ed5i t\u00ean,
> t\u00ecm ki\u1ebfm, t\u1ea3i v\u1ec1 v\u00e0 x\u00f3a c\u00e1c t\u1eadp tin
> c\u00f3 \u0111u\u00f4i m\u1edf r\u1ed9ng .xls ho\u1eb7c .xlsx.
> Ng\u01b0\u1eddi d\u00f9ng c\u00f3 th\u1ec3 nh\u1eadn bi\u1ebft t\u1eadp tin
> n\u00e0o \u0111ang \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng v\u00e0 t\u1eadp
> tin n\u00e0o ch\u01b0a d\u00f9ng \u0111\u1ebfn. Cho ph\u00e9p t\u1ef1
> \u0111\u1ed9ng c\u1eadp nh\u1eadt l\u1ea1i h\u1ec7 th\u1ed1ng b\u00e1o
> c\u00e1o excel khi t\u00ean t\u1eadp tin \u0111ang s\u1eed d\u1ee5ng thay
> \u0111\u1ed5i.
> \ No newline at end of file
> +intro_excel_template_management = T\u1ea3i ,\u0111\u1ed5i t\u00ean,
> t\u00ecm ki\u1ebfm, t\u1ea3i v\u1ec1 v\u00e0 x\u00f3a c\u00e1c t\u1eadp tin
> c\u00f3 \u0111u\u00f4i m\u1edf r\u1ed9ng .xls ho\u1eb7c .xlsx.
> Ng\u01b0\u1eddi d\u00f9ng c\u00f3 th\u1ec3 nh\u1eadn bi\u1ebft t\u1eadp tin
> n\u00e0o \u0111ang \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng v\u00e0 t\u1eadp
> tin n\u00e0o ch\u01b0a d\u00f9ng \u0111\u1ebfn. Cho ph\u00e9p t\u1ef1
> \u0111\u1ed9ng c\u1eadp nh\u1eadt l\u1ea1i h\u1ec7 th\u1ed1ng b\u00e1o
> c\u00e1o excel khi t\u00ean t\u1eadp tin \u0111ang s\u1eed d\u1ee5ng thay
> \u0111\u1ed5i.
> +expression_not_well_formed = Bi\u1ec3u th\u1ee9c kh\u00f4ng
> \u0111\u00fang/ch\u01b0a h\u1ee3p l\u1ec7
> \ No newline at end of file
>
> === modified file
> 'dhis-2/dhis-web/dhis-web-excel-reporting/src/main/webapp/dhis-web-excel-reporting/excelTemplateList.vm'
> ---
> dhis-2/dhis-web/dhis-web-excel-reporting/src/main/webapp/dhis-web-excel-reporting/excelTemplateList.vm
> 2010-03-10 10:28:44 +0000
> +++
> dhis-2/dhis-web/dhis-web-excel-reporting/src/main/webapp/dhis-web-excel-reporting/excelTemplateList.vm
> 2010-04-06 10:05:28 +0000
> @@ -45,11 +45,12 @@
> #end
> </td>
> <td align="left">
> + <a href="javascript:mode = 'edit';
> openEditExcelTemplate( '$templateFileName' );" title="$i18n.getString(
> 'edit' )"><img src="../images/edit.png" alt="$i18n.getString( 'edit' )"></a>
> + <a
> href="downloadExcelTemplate.action?fileName=$templateFileName"
> title="$i18n.getString( 'download' )"><img src="images/download.png"
> alt="$i18n.getString( 'download' )"></a>
> #if( $encoder.htmlEncode( $value ) ==
> 'false' )
> <a
> href="javascript:deleteExcelTemplate('$templateFileName');"
> title="$i18n.getString( 'remove' )"><img src="../images/delete.png"
> alt="$i18n.getString( 'remove' )"></a>
> #end
> - <a href="javascript:mode = 'edit';
> openEditExcelTemplate( '$templateFileName' );" title="$i18n.getString(
> 'edit' )"><img src="../images/edit.png" alt="$i18n.getString( 'edit' )"></a>
> - <a
> href="downloadExcelTemplate.action?fileName=$templateFileName"
> title="$i18n.getString( 'download' )"><img src="images/download.png"
> alt="$i18n.getString( 'download' )"></a>
> +
> </td>
> </tr>
> #end
>
> === modified file
> 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/java/org/hisp/dhis/dataadmin/action/databrowser/SearchAction.java'
> ---
> dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/java/org/hisp/dhis/dataadmin/action/databrowser/SearchAction.java
> 2010-04-03 09:35:43 +0000
> +++
> dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/java/org/hisp/dhis/dataadmin/action/databrowser/SearchAction.java
> 2010-04-06 10:05:28 +0000
> @@ -52,6 +52,7 @@
> import org.hisp.dhis.period.Period;
> import org.hisp.dhis.period.PeriodService;
> import org.hisp.dhis.period.PeriodType;
> +import org.hisp.dhis.period.comparator.AscendingPeriodComparator;
> import org.hisp.dhis.system.util.DateUtils;
> import org.hisp.dhis.util.SessionUtils;
>
> @@ -62,6 +63,8 @@
> /**
> * @author espenjac, joakibj, briane, eivinhb
> * @version $Id$
> + * @modifier Dang Duy Hieu
> + * @since 2010-04-06
> */
> public class SearchAction
> implements Action
> @@ -78,7 +81,7 @@
>
> private static final String KEY_DATABROWSERTABLE =
> "dataBrowserTableResults";
>
> - private static final String HYPHEN = " - ";
> + private static final String DASH = " - ";
>
> //
> -------------------------------------------------------------------------
> // Dependencies
> @@ -462,7 +465,6 @@
> }
> else
> {
> -
> dataBrowserTable =
> dataBrowserService.getDataElementGroupsInPeriod( fromDate, toDate,
> periodType );
> }
> }
> @@ -503,7 +505,8 @@
> // Set DataBrowserTable variable for PDF export
> setExportPDFVariables();
>
> - // Get format standard for periods which appropriate with from
> date, to date and period type
> + // Get format standard for periods which appropriate with from
> date, to
> + // date and period type
> fromToDate = getFromToDateFormat( periodType, fromDate, toDate );
>
> if ( fromToDate == null )
> @@ -577,7 +580,8 @@
>
> for ( MetaValue col : allColumnsConverted )
> {
> - col.setName( DateUtils.convertDate( col.getName() ) );
> + //col.setName( DateUtils.convertDate( col.getName() ) );
> + col.setName( DateUtils.convertDate( col.getName(), format ) );
> }
> }
>
> @@ -605,6 +609,9 @@
> List<Period> periods = new ArrayList<Period>(
> periodService.getPeriodsBetweenDates( periodType, date1,
> date2 ) );
>
> + // Please do not delete this testing ...
> + System.out.println( "\n\nFIRST Periods:: " + periods );
> +
> if ( periods.isEmpty() )
> {
> CalendarPeriodType calendarPeriodType =
> (CalendarPeriodType) periodType;
> @@ -613,6 +620,11 @@
> periods.add( calendarPeriodType.createPeriod( date2 ) );
> }
>
> + Collections.sort( periods, new AscendingPeriodComparator() );
> +
> + // Please do not delete this testing ...
> + System.out.println( "\n\nTHEN Periods:: " + periods );
> +
> return periods;
> }
> catch ( ParseException e )
> @@ -630,10 +642,10 @@
> for ( Period period : periods )
> {
> String sTemp = format.formatPeriod( period );
> -
> +
> if ( !stringFormatDate.contains( sTemp ) )
> {
> - stringFormatDate += HYPHEN + sTemp;
> + stringFormatDate += DASH + sTemp;
> }
> }
>
>
> === modified file
> 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/webapp/dhis-web-maintenance-dataadmin/dataBrowserResult.vm'
> ---
> dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/webapp/dhis-web-maintenance-dataadmin/dataBrowserResult.vm
> 2010-03-17 06:07:42 +0000
> +++
> dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/webapp/dhis-web-maintenance-dataadmin/dataBrowserResult.vm
> 2010-04-06 10:05:28 +0000
> @@ -119,6 +119,7 @@
> <strong>$i18n.getString( "period_type" ):</strong> $periodTypeId
> #elseif ( $fromToDate != "" )
> <strong>$i18n.getString( "from_date" ):</strong> $fromToDate
> + <br/>
> <strong>$i18n.getString( "period_type" ):</strong>
> $periodTypeId
> #else
> <strong>$i18n.getString( "from_date" ):</strong> $fromDate
>
> === modified file
> 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-datadictionary/src/main/resources/org/hisp/dhis/dd/i18n_module.properties'
> ---
> dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-datadictionary/src/main/resources/org/hisp/dhis/dd/i18n_module.properties
> 2010-03-30 04:36:31 +0000
> +++
> dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-datadictionary/src/main/resources/org/hisp/dhis/dd/i18n_module.properties
> 2010-04-06 10:05:28 +0000
> @@ -303,7 +303,7 @@
> select_indicator
> = Please select indicator
> annualized
> = Annualized
> could_not_save
> = Could not save
> -object_not_deleted_associated_by_objects = Object not
> deleted becuause it is associated by objects of type
> +object_not_deleted_associated_by_objects = Object not
> deleted because it is associated by objects of type
> hide_warning
> = Hide warning
> please_enter_name
> = Please enter name !
> group_ready_exist
> = Group ready exist
>
>
> _______________________________________________
> Mailing list: https://launchpad.net/~dhis2-devs<https://launchpad.net/%7Edhis2-devs>
> Post to : dhis2-devs@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~dhis2-devs<https://launchpad.net/%7Edhis2-devs>
> More help : https://help.launchpad.net/ListHelp
>
>
--
Hieu.HISPVietnam
Good Health !
Follow ups
References