------------------------------------------------------------ revno: 16889 committer: Morten Olav Hansen <morte...@gmail.com> branch nick: dhis2 timestamp: Wed 2014-10-01 14:52:56 +0700 message: support for local calendar in html report modified: dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/report/impl/DefaultReportService.java dhis-2/dhis-services/dhis-service-reporting/src/main/resources/html-report.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-reporting/src/main/java/org/hisp/dhis/report/impl/DefaultReportService.java' --- dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/report/impl/DefaultReportService.java 2014-09-08 13:02:43 +0000 +++ dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/report/impl/DefaultReportService.java 2014-10-01 07:52:56 +0000 @@ -28,27 +28,12 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -import static org.hisp.dhis.system.util.ConversionUtils.getIdentifiers; -import static org.hisp.dhis.system.util.TextUtils.getCommaDelimitedString; - -import java.io.OutputStream; -import java.io.Writer; -import java.sql.Connection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.sql.DataSource; - import net.sf.jasperreports.engine.JasperCompileManager; import net.sf.jasperreports.engine.JasperFillManager; import net.sf.jasperreports.engine.JasperPrint; import net.sf.jasperreports.engine.JasperReport; - import org.apache.velocity.VelocityContext; +import org.hisp.dhis.calendar.Calendar; import org.hisp.dhis.common.GenericIdentifiableObjectStore; import org.hisp.dhis.common.Grid; import org.hisp.dhis.common.IdentifiableObjectUtils; @@ -58,6 +43,7 @@ import org.hisp.dhis.organisationunit.OrganisationUnitService; import org.hisp.dhis.period.Period; import org.hisp.dhis.period.PeriodService; +import org.hisp.dhis.period.PeriodType; import org.hisp.dhis.report.Report; import org.hisp.dhis.report.ReportService; import org.hisp.dhis.reporttable.ReportTable; @@ -72,6 +58,20 @@ import org.springframework.jdbc.datasource.DataSourceUtils; import org.springframework.transaction.annotation.Transactional; +import javax.sql.DataSource; +import java.io.OutputStream; +import java.io.Writer; +import java.sql.Connection; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static org.hisp.dhis.system.util.ConversionUtils.getIdentifiers; +import static org.hisp.dhis.system.util.TextUtils.getCommaDelimitedString; + /** * @author Lars Helge Overland * @version $Id$ @@ -84,7 +84,7 @@ public static final String ORGUNIT_UID_LEVEL_COLUMN_PREFIX = "uidlevel"; private static final Encoder ENCODER = new Encoder(); - + // ------------------------------------------------------------------------- // Dependencies // ------------------------------------------------------------------------- @@ -109,14 +109,14 @@ { this.constantService = constantService; } - + private OrganisationUnitService organisationUnitService; - + public void setOrganisationUnitService( OrganisationUnitService organisationUnitService ) { this.organisationUnitService = organisationUnitService; } - + private PeriodService periodService; public void setPeriodService( PeriodService periodService ) @@ -139,26 +139,26 @@ String organisationUnitUid, String type, I18nFormat format ) { Report report = getReport( reportUid ); - + Map<String, Object> params = new HashMap<>(); params.putAll( constantService.getConstantParameterMap() ); Date reportDate = new Date(); - + if ( period != null ) { params.put( PARAM_PERIOD_NAME, format.formatPeriod( period ) ); - + reportDate = period.getStartDate(); } - + OrganisationUnit orgUnit = organisationUnitService.getOrganisationUnit( organisationUnitUid ); - + if ( orgUnit != null ) { int level = organisationUnitService.getLevelOfOrganisationUnit( orgUnit.getId() ); - + params.put( PARAM_ORGANISATIONUNIT_COLUMN_NAME, orgUnit.getName() ); params.put( PARAM_ORGANISATIONUNIT_LEVEL, level ); params.put( PARAM_ORGANISATIONUNIT_LEVEL_COLUMN, ORGUNIT_LEVEL_COLUMN_PREFIX + level ); @@ -184,14 +184,14 @@ if ( report.hasRelativePeriods() ) { List<Period> relativePeriods = report.getRelatives().getRelativePeriods( reportDate, null, false ); - + String periodString = getCommaDelimitedString( getIdentifiers( Period.class, periodService.reloadPeriods( relativePeriods ) ) ); String isoPeriodString = getCommaDelimitedString( IdentifiableObjectUtils.getUids( relativePeriods ) ); - - params.put( PARAM_RELATIVE_PERIODS, periodString ); + + params.put( PARAM_RELATIVE_PERIODS, periodString ); params.put( PARAM_RELATIVE_ISO_PERIODS, isoPeriodString ); } - + if ( report.hasReportParams() && report.getReportParams().isParamOrganisationUnit() && orgUnit != null ) { params.put( PARAM_ORG_UNITS, String.valueOf( orgUnit.getId() ) ); @@ -205,7 +205,7 @@ print = JasperFillManager.fillReport( jasperReport, params, connection ); } finally - { + { DataSourceUtils.releaseConnection( connection, dataSource ); } } @@ -219,53 +219,72 @@ { throw new RuntimeException( "Failed to render report", ex ); } - + return print; } - + public void renderHtmlReport( Writer writer, String uid, Date date, String ou, I18nFormat format ) { - Report report = getReport( uid ); + Report report = getReport( uid ); OrganisationUnit organisationUnit = null; List<OrganisationUnit> organisationUnitHierarchy = new ArrayList<>(); List<OrganisationUnit> organisationUnitChildren = new ArrayList<>(); - List<Period> periods = new ArrayList<>(); - + List<String> periods = new ArrayList<>(); + if ( ou != null ) { organisationUnit = organisationUnitService.getOrganisationUnit( ou ); - + if ( organisationUnit != null ) { organisationUnitHierarchy.add( organisationUnit ); - + OrganisationUnit parent = organisationUnit; - + while ( parent.getParent() != null ) { parent = parent.getParent(); organisationUnitHierarchy.add( parent ); } - + organisationUnitChildren.addAll( organisationUnit.getChildren() ); } } - + + Calendar calendar = PeriodType.getCalendar(); + if ( report != null && report.hasRelativePeriods() ) { - periods = report.getRelatives().getRelativePeriods( date, format, true ); - } - + if ( calendar.isIso8601() ) + { + for ( Period period : report.getRelatives().getRelativePeriods( date, format, true ) ) + { + periods.add( period.getIsoDate() ); + } + } + else + { + periods = IdentifiableObjectUtils.getIsoPeriods( report.getRelatives().getRelativePeriods( date, format, true ), calendar ); + } + } + + String dateString = DateUtils.getMediumDateString( date ); + + if ( date != null && !calendar.isIso8601() ) + { + dateString = calendar.formattedDate( calendar.fromIso( date ) ); + } + final VelocityContext context = new VelocityContext(); context.put( "report", report ); context.put( "organisationUnit", organisationUnit ); context.put( "organisationUnitHierarchy", organisationUnitHierarchy ); context.put( "organisationUnitChildren", organisationUnitChildren ); - context.put( "date", DateUtils.getMediumDateString( date ) ); + context.put( "date", dateString ); context.put( "periods", periods ); context.put( "format", format ); context.put( "encoder", ENCODER ); - + new VelocityManager().getEngine().getTemplate( "html-report.vm" ).merge( context, writer ); } @@ -305,7 +324,7 @@ { return reportStore.getCountLikeName( name ); } - + @Override public List<Report> getReportsBetween( int first, int max ) { @@ -335,7 +354,7 @@ } } ); } - + public List<Report> getReportsByUid( List<String> uids ) { return reportStore.getByUid( uids ); === modified file 'dhis-2/dhis-services/dhis-service-reporting/src/main/resources/html-report.vm' --- dhis-2/dhis-services/dhis-service-reporting/src/main/resources/html-report.vm 2013-11-07 11:52:20 +0000 +++ dhis-2/dhis-services/dhis-service-reporting/src/main/resources/html-report.vm 2014-10-01 07:52:56 +0000 @@ -18,8 +18,8 @@ "id": "$!encoder.htmlEncode( ${ou.uid} )", "name": "$!encoder.htmlEncode( ${ou.name} )", "code": "$!encoder.htmlEncode( ${ou.code} )" -}#if( $velocityCount < $size ),#end -#end +}#if( $velocityCount < $size ),#end +#end #end ]; @@ -42,11 +42,11 @@ #if( $periods ) #set( $size = $periods.size() ) #foreach( $period in $periods ) -"$period.getIsoDate()"#if( $velocityCount < $size ),#end +"$period"#if( $velocityCount < $size ),#end #end #end ]; - + </script> <div>
_______________________________________________ Mailing list: https://launchpad.net/~dhis2-devs Post to : dhis2-devs@lists.launchpad.net Unsubscribe : https://launchpad.net/~dhis2-devs More help : https://help.launchpad.net/ListHelp