=== modified file 'local/in/dhis-in-api/src/main/java/org/hisp/dhis/reports/ReportService.java' --- local/in/dhis-in-api/src/main/java/org/hisp/dhis/reports/ReportService.java 2011-03-01 08:17:42 +0000 +++ local/in/dhis-in-api/src/main/java/org/hisp/dhis/reports/ReportService.java 2011-04-19 07:43:37 +0000 @@ -31,6 +31,7 @@ import java.util.Collection; import java.util.Date; import java.util.List; +import java.util.Map; import org.hisp.dhis.dataelement.DataElement; import org.hisp.dhis.organisationunit.OrganisationUnit; @@ -127,4 +128,8 @@ String getAggCountForTextData( String formula, Date startDate, Date endDate, OrganisationUnit organisationUnit ); String getCountForTextData( String formula, Date startDate, Date endDate, OrganisationUnit organisationUnit ); + + String getResultDataValueFromAggregateTable( String formula, String periodIdsByComma, Integer orgunitId ); + + Map getResultDataValueFromAggregateTable( Integer orgunitId, String dataElmentIdsByComma, String periodIdsByComma ); } === modified file 'local/in/dhis-in-api/src/main/java/org/hisp/dhis/reports/Report_in.java' --- local/in/dhis-in-api/src/main/java/org/hisp/dhis/reports/Report_in.java 2011-04-15 11:13:19 +0000 +++ local/in/dhis-in-api/src/main/java/org/hisp/dhis/reports/Report_in.java 2011-04-19 07:43:37 +0000 @@ -69,6 +69,8 @@ private OrganisationUnitGroup orgunitGroup; + private String dataSetIds; + /** * All Sources that are generating this Report_in. */ @@ -106,6 +108,31 @@ this.orgunitGroup = orgunitGroup; } + public Report_in( String name, String model, PeriodType periodType, String excelTemplateName, + String xmlTemplateName, String reportType, String dataSetIds ) + { + this.name = name; + this.model = model; + this.periodType = periodType; + this.excelTemplateName = excelTemplateName; + this.xmlTemplateName = xmlTemplateName; + this.reportType = reportType; + this.dataSetIds = dataSetIds; + } + + public Report_in( String name, String model, PeriodType periodType, String excelTemplateName, + String xmlTemplateName, String reportType, OrganisationUnitGroup orgunitGroup, String dataSetIds ) + { + this.name = name; + this.model = model; + this.periodType = periodType; + this.excelTemplateName = excelTemplateName; + this.xmlTemplateName = xmlTemplateName; + this.reportType = reportType; + this.orgunitGroup = orgunitGroup; + this.dataSetIds = dataSetIds; + } + // ------------------------------------------------------------------------- // hashCode and equals // ------------------------------------------------------------------------- @@ -233,5 +260,13 @@ this.orgunitGroup = orgunitGroup; } - + public String getDataSetIds() + { + return dataSetIds; + } + + public void setDataSetIds( String dataSetIds ) + { + this.dataSetIds = dataSetIds; + } } \ No newline at end of file === added directory 'local/in/dhis-in-api/src/main/java/org/hisp/dhis/reports/comparator' === added file 'local/in/dhis-in-api/src/main/java/org/hisp/dhis/reports/comparator/Report_inNameComparator.java' --- local/in/dhis-in-api/src/main/java/org/hisp/dhis/reports/comparator/Report_inNameComparator.java 1970-01-01 00:00:00 +0000 +++ local/in/dhis-in-api/src/main/java/org/hisp/dhis/reports/comparator/Report_inNameComparator.java 2011-04-19 07:43:37 +0000 @@ -0,0 +1,13 @@ +package org.hisp.dhis.reports.comparator; + +import java.util.Comparator; + +import org.hisp.dhis.reports.Report_in; + +public class Report_inNameComparator implements Comparator +{ + public int compare( Report_in report0, Report_in report1 ) + { + return report0.getName().compareTo( report1.getName() ); + } +} === modified file 'local/in/dhis-in-services/dhis-in-service-reports/src/main/java/org/hisp/dhis/reports/DefaultReportService.java' --- local/in/dhis-in-services/dhis-in-service-reports/src/main/java/org/hisp/dhis/reports/DefaultReportService.java 2011-04-15 11:14:02 +0000 +++ local/in/dhis-in-services/dhis-in-service-reports/src/main/java/org/hisp/dhis/reports/DefaultReportService.java 2011-04-19 07:43:37 +0000 @@ -9,8 +9,10 @@ import java.util.Collection; import java.util.Collections; import java.util.Date; +import java.util.HashMap; import java.util.Iterator; import java.util.List; +import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -1652,26 +1654,8 @@ } if ( dataElement.getType().equalsIgnoreCase( "int" ) ) { - //PeriodType dePeriodType = getDataElementPeriodType( dataElement ); - //List periodList = new ArrayList( periodService.getPeriodsBetweenDates( dePeriodType, startDate, endDate ) ); - //List periodList = new ArrayList( periodService.getPeriodsBetweenDates( startDate, endDate ) ); - Double aggregatedValue = aggregatedDataValueService.getAggregatedValue( dataElement.getId(), optionCombo.getId(), periodIds, organisationUnit.getId() ); - /* - for( Period period : periodList ) - { - Double tempAggValue = aggregatedDataValueService.getAggregatedValue( dataElement, optionCombo, period, organisationUnit ); - if( tempAggValue != null ) - { - aggregatedValue += tempAggValue; - isAggregated = 1; - } - } - - replaceString = String.valueOf( aggregatedValue ); - */ - if ( aggregatedValue == null ) { replaceString = NULL_REPLACEMENT; @@ -1687,16 +1671,10 @@ else { deFlag1 = 1; - //PeriodType dePeriodType = getDataElementPeriodType( dataElement ); - //List periodList = new ArrayList( periodService.getIntersectingPeriodsByPeriodType( dePeriodType, startDate, endDate ) ); - //periodList = new ArrayList( periodService.getPeriodsBetweenDates( dePeriodType, startDate, endDate ) ); - //Period tempPeriod = new Period(); Period tempPeriod = new Period(); - //tempPeriod = periodService.getPeriod( Integer.parseInt( periodIds.split( "," )[0] ) ); if ( periodIds == null || periodIds.isEmpty() ) - //if ( tempPeriod == null ) { replaceString = ""; matcher.appendReplacement( buffer, replaceString ); @@ -1794,6 +1772,111 @@ throw new RuntimeException( "Illegal DataElement id", ex ); } } + + public Map getResultDataValueFromAggregateTable( Integer orgunitId, String dataElmentIdsByComma, String periodIdsByComma ) + { + Map aggDeMap = new HashMap(); + try + { + String query = "SELECT dataelementid,categoryoptioncomboid, SUM(value) FROM aggregateddatavalue" + + " WHERE dataelementid IN (" + dataElmentIdsByComma + " ) AND "+ + " organisationunitid = "+ orgunitId +" AND "+ + " periodid IN (" + periodIdsByComma +") GROUP BY dataelementid,categoryoptioncomboid"; + + SqlRowSet rs = jdbcTemplate.queryForRowSet( query ); + + while ( rs.next() ) + { + Integer deId = rs.getInt( 1 ); + Integer optionComId = rs.getInt( 2 ); + Double aggregatedValue = rs.getDouble( 3 ); + if( aggregatedValue != null ) + { + aggDeMap.put( deId+"."+optionComId, ""+aggregatedValue ); + } + } + + return aggDeMap; + } + catch( Exception e ) + { + throw new RuntimeException( "Illegal DataElement id", e ); + } + } + + public String getResultDataValueFromAggregateTable( String formula, String periodIdsByComma, Integer orgunitId ) + { + try + { + Pattern pattern = Pattern.compile( "(\\[\\d+\\.\\d+\\])" ); + + Matcher matcher = pattern.matcher( formula ); + StringBuffer buffer = new StringBuffer(); + + String resultValue = ""; + + while ( matcher.find() ) + { + String replaceString = matcher.group(); + + replaceString = replaceString.replaceAll( "[\\[\\]]", "" ); + String optionComboIdStr = replaceString.substring( replaceString.indexOf( '.' ) + 1, replaceString + .length() ); + + replaceString = replaceString.substring( 0, replaceString.indexOf( '.' ) ); + + int dataElementId = Integer.parseInt( replaceString ); + int optionComboId = Integer.parseInt( optionComboIdStr ); + + String query = "SELECT SUM(value) FROM aggregateddatavalue WHERE dataelementid = " + dataElementId + + " AND categoryoptioncomboid = "+optionComboId + + " AND periodid IN ("+ periodIdsByComma +")"+ + " AND organisationunitid = "+ orgunitId; + + SqlRowSet rs = jdbcTemplate.queryForRowSet( query ); + + Double aggregatedValue = null; + if( rs.next() ) + { + aggregatedValue = rs.getDouble( 1 ); + } + + if ( aggregatedValue == null ) + { + replaceString = NULL_REPLACEMENT; + } + else + { + replaceString = String.valueOf( aggregatedValue ); + } + + matcher.appendReplacement( buffer, replaceString ); + + resultValue = replaceString; + } + + matcher.appendTail( buffer ); + + double d = 0.0; + try + { + d = MathUtils.calculateExpression( buffer.toString() ); + } + catch ( Exception e ) + { + d = 0.0; + resultValue = ""; + } + + resultValue = "" + (double) d; + + return resultValue; + } + catch ( NumberFormatException ex ) + { + throw new RuntimeException( "Illegal DataElement id", ex ); + } + } public String getSurveyDesc( String formula ) { === modified file 'local/in/dhis-in-services/dhis-in-service-reports/src/main/resources/org/hisp/dhis/reports/hibernate/Reports.hbm.xml' --- local/in/dhis-in-services/dhis-in-service-reports/src/main/resources/org/hisp/dhis/reports/hibernate/Reports.hbm.xml 2011-04-15 11:14:02 +0000 +++ local/in/dhis-in-services/dhis-in-service-reports/src/main/resources/org/hisp/dhis/reports/hibernate/Reports.hbm.xml 2011-04-19 07:43:37 +0000 @@ -1,36 +1,37 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + === modified file 'local/in/dhis-web-reports-national/src/main/java/org/hisp/dhis/reports/action/GetReportsAction.java' --- local/in/dhis-web-reports-national/src/main/java/org/hisp/dhis/reports/action/GetReportsAction.java 2011-01-05 05:31:43 +0000 +++ local/in/dhis-web-reports-national/src/main/java/org/hisp/dhis/reports/action/GetReportsAction.java 2011-04-19 07:43:37 +0000 @@ -1,6 +1,7 @@ package org.hisp.dhis.reports.action; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import org.hisp.dhis.organisationunit.OrganisationUnit; @@ -9,6 +10,7 @@ import org.hisp.dhis.period.PeriodType; import org.hisp.dhis.reports.ReportService; import org.hisp.dhis.reports.Report_in; +import org.hisp.dhis.reports.comparator.Report_inNameComparator; import com.opensymphony.xwork2.Action; @@ -96,11 +98,10 @@ PeriodType periodTypeObj = periodService.getPeriodTypeByName( periodType ); - System.out.println( "report type : " + reportType + " ,Period Type :" + periodTypeObj.getName() + " ,org Unit :" + ouName ); - reportList = new ArrayList( reportService.getReportsByPeriodSourceAndReportType( periodTypeObj, orgUnit, reportType ) ); - System.out.println( "Size of Reports List : " + reportList.size() ); + + Collections.sort( reportList, new Report_inNameComparator() ); } catch ( Exception e ) { === modified file 'local/in/dhis-web-reports-national/src/main/java/org/hisp/dhis/reports/ouwiseprogress/action/GenerateOuWiseProgressReportResultAction.java' --- local/in/dhis-web-reports-national/src/main/java/org/hisp/dhis/reports/ouwiseprogress/action/GenerateOuWiseProgressReportResultAction.java 2011-04-15 11:53:12 +0000 +++ local/in/dhis-web-reports-national/src/main/java/org/hisp/dhis/reports/ouwiseprogress/action/GenerateOuWiseProgressReportResultAction.java 2011-04-19 07:43:37 +0000 @@ -2,6 +2,7 @@ package org.hisp.dhis.reports.ouwiseprogress.action; import static org.hisp.dhis.system.util.ConversionUtils.getIdentifiers; +import static org.hisp.dhis.system.util.TextUtils.getCommaDelimitedString; import java.io.BufferedInputStream; import java.io.File; @@ -12,9 +13,13 @@ import java.util.Collection; import java.util.Collections; import java.util.Date; +import java.util.HashMap; import java.util.Iterator; import java.util.List; +import java.util.Map; import java.util.UUID; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import jxl.Workbook; import jxl.format.Alignment; @@ -30,6 +35,10 @@ import jxl.write.WritableWorkbook; import org.amplecode.quick.StatementManager; +import org.hisp.dhis.dataelement.DataElement; +import org.hisp.dhis.dataelement.DataElementService; +import org.hisp.dhis.dataset.DataSet; +import org.hisp.dhis.dataset.DataSetService; import org.hisp.dhis.i18n.I18nFormat; import org.hisp.dhis.organisationunit.OrganisationUnit; import org.hisp.dhis.organisationunit.OrganisationUnitService; @@ -39,6 +48,7 @@ import org.hisp.dhis.reports.ReportService; import org.hisp.dhis.reports.Report_in; import org.hisp.dhis.reports.Report_inDesign; +import org.hisp.dhis.system.util.MathUtils; import com.opensymphony.xwork2.Action; @@ -83,6 +93,20 @@ this.organisationUnitService = organisationUnitService; } + private DataSetService dataSetService; + + public void setDataSetService( DataSetService dataSetService ) + { + this.dataSetService = dataSetService; + } + + private DataElementService dataElementService; + + public void setDataElementService( DataElementService dataElementService ) + { + this.dataElementService = dataElementService; + } + private I18nFormat format; public void setFormat( I18nFormat format ) @@ -176,8 +200,6 @@ String colArray[] = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z", "AA","AB","AC","AD","AE","AF","AG","AH","AI","AJ","AK","AL","AM","AN","AO","AP","AQ","AR","AS","AT","AU","AV","AW","AX","AY","AZ", "BA","BB","BC","BD","BE","BF","BG","BH","BI","BJ","BK","BL","BM","BN","BO","BP","BQ","BR","BS","BT","BU","BV","BW","BX","BY","BZ" }; - //char colArray[] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'}; - //char[] colArray = new char[ 101 ]; // Getting Report Details String deCodesXMLFileName = ""; @@ -211,7 +233,31 @@ WritableWorkbook outputReportWorkbook = Workbook.createWorkbook( new File( outputReportPath ), templateWorkbook ); WritableFont arialBold = new WritableFont( WritableFont.ARIAL, 10, WritableFont.BOLD ); + WritableCellFormat wCellformat = new WritableCellFormat(); + wCellformat.setBorder( Border.ALL, BorderLineStyle.THIN ); + wCellformat.setAlignment( Alignment.CENTRE ); + wCellformat.setVerticalAlignment( VerticalAlignment.CENTRE ); + wCellformat.setWrap( true ); + + String dataSetIds = selReportObj.getDataSetIds(); + Collection dataElementIdList = new ArrayList(); + if( dataSetIds != null ) + { + String[] partsOfDataSetIds = dataSetIds.split( "," ); + for( int i = 0; i < partsOfDataSetIds.length; i++ ) + { + DataSet dataSet = dataSetService.getDataSet( Integer.parseInt( partsOfDataSetIds[i] ) ); + dataElementIdList.addAll( getIdentifiers( DataElement.class, dataSet.getDataElements() ) ); + } + } + else + { + dataElementIdList.addAll( getIdentifiers( DataElement.class, dataElementService.getAggregateableDataElements() ) ); + } + + String dataElmentIdsByComma = getCommaDelimitedString( dataElementIdList ); + // Period Info sDate = format.parseDate( startDate ); eDate = format.parseDate( endDate ); @@ -220,6 +266,8 @@ Collection periodIds = new ArrayList( getIdentifiers(Period.class, periodList ) ); + String periodIdsByComma = getCommaDelimitedString( periodIds ); + // Getting DataValues List reportDesignList = reportService.getReportDesign( deCodesXMLFileName ); int orgUnitCount = 0; @@ -229,6 +277,12 @@ { OrganisationUnit currentOrgUnit = (OrganisationUnit) it.next(); + Map aggDeMap = new HashMap(); + if( aggData.equalsIgnoreCase( USEEXISTINGAGGDATA ) ) + { + aggDeMap.putAll( reportService.getResultDataValueFromAggregateTable( currentOrgUnit.getId(), dataElmentIdsByComma, periodIdsByComma ) ); + } + int count1 = 0; Iterator reportDesignIterator = reportDesignList.iterator(); while ( reportDesignIterator.hasNext() ) @@ -239,7 +293,7 @@ String deCodeString = report_inDesign.getExpression(); String tempStr = ""; - if ( deCodeString.equalsIgnoreCase( "FACILITY" ) ) + if ( deCodeString.equalsIgnoreCase( "FACILITY" ) ) { tempStr = selectedOrgUnit.getName(); } @@ -289,7 +343,7 @@ } else if( aggData.equalsIgnoreCase( USEEXISTINGAGGDATA ) ) { - tempStr = reportService.getResultDataValueFromAggregateTable( deCodeString, periodIds, currentOrgUnit, reportModelTB ); + tempStr = getAggVal( deCodeString, aggDeMap ); } } } @@ -311,12 +365,6 @@ tempColNo += orgUnitCount; } - WritableCellFormat wCellformat = new WritableCellFormat(); - wCellformat.setBorder( Border.ALL, BorderLineStyle.THIN ); - wCellformat.setAlignment( Alignment.CENTRE ); - wCellformat.setVerticalAlignment( VerticalAlignment.CENTRE ); - wCellformat.setWrap( true ); - try { sheet0.addCell( new Number( tempColNo, tempRowNo, Double.parseDouble( tempStr ), wCellformat ) ); @@ -335,6 +383,11 @@ // --------------------------------------------------------------------- // Writing Total Values // --------------------------------------------------------------------- + WritableCellFormat totalCellformat = new WritableCellFormat( arialBold ); + totalCellformat.setBorder( Border.ALL, BorderLineStyle.THIN ); + totalCellformat.setAlignment( Alignment.CENTRE ); + totalCellformat.setVerticalAlignment( VerticalAlignment.CENTRE ); + totalCellformat.setWrap( true ); Iterator reportDesignIterator = reportDesignList.iterator(); while ( reportDesignIterator.hasNext() ) @@ -364,11 +417,6 @@ String tempFormula = "SUM("+colStart+(tempRowNo+1)+":"+colEnd+(tempRowNo+1)+")"; WritableSheet totalSheet = outputReportWorkbook.getSheet( sheetNo ); - WritableCellFormat totalCellformat = new WritableCellFormat( arialBold ); - totalCellformat.setBorder( Border.ALL, BorderLineStyle.THIN ); - totalCellformat.setAlignment( Alignment.CENTRE ); - totalCellformat.setVerticalAlignment( VerticalAlignment.CENTRE ); - totalCellformat.setWrap( true ); if( deCodeString.equalsIgnoreCase( "PROGRESSIVE-ORGUNIT" ) ) { @@ -401,4 +449,57 @@ return SUCCESS; } + + private String getAggVal( String expression, Map aggDeMap ) + { + try + { + Pattern pattern = Pattern.compile( "(\\[\\d+\\.\\d+\\])" ); + + Matcher matcher = pattern.matcher( expression ); + StringBuffer buffer = new StringBuffer(); + + String resultValue = ""; + + while ( matcher.find() ) + { + String replaceString = matcher.group(); + + replaceString = replaceString.replaceAll( "[\\[\\]]", "" ); + + replaceString = aggDeMap.get( replaceString ); + + if( replaceString == null ) + { + replaceString = "0"; + } + + matcher.appendReplacement( buffer, replaceString ); + + resultValue = replaceString; + } + + matcher.appendTail( buffer ); + + double d = 0.0; + try + { + d = MathUtils.calculateExpression( buffer.toString() ); + } + catch ( Exception e ) + { + d = 0.0; + resultValue = ""; + } + + resultValue = "" + (double) d; + + return resultValue; + } + catch ( NumberFormatException ex ) + { + throw new RuntimeException( "Illegal DataElement id", ex ); + } + } + } === modified file 'local/in/dhis-web-reports-national/src/main/java/org/hisp/dhis/reports/periodwiseprogress/action/GeneratePeriodWiseProgressAnalyserResultAction.java' --- local/in/dhis-web-reports-national/src/main/java/org/hisp/dhis/reports/periodwiseprogress/action/GeneratePeriodWiseProgressAnalyserResultAction.java 2011-04-15 11:39:32 +0000 +++ local/in/dhis-web-reports-national/src/main/java/org/hisp/dhis/reports/periodwiseprogress/action/GeneratePeriodWiseProgressAnalyserResultAction.java 2011-04-19 07:43:37 +0000 @@ -1,22 +1,24 @@ package org.hisp.dhis.reports.periodwiseprogress.action; import static org.hisp.dhis.system.util.ConversionUtils.getIdentifiers; +import static org.hisp.dhis.system.util.TextUtils.getCommaDelimitedString; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; -import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; -import java.util.Calendar; import java.util.Collection; +import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.UUID; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import jxl.Workbook; import jxl.format.Alignment; @@ -33,6 +35,10 @@ import jxl.write.WritableWorkbook; import org.amplecode.quick.StatementManager; +import org.hisp.dhis.dataelement.DataElement; +import org.hisp.dhis.dataelement.DataElementService; +import org.hisp.dhis.dataset.DataSet; +import org.hisp.dhis.dataset.DataSetService; import org.hisp.dhis.i18n.I18nFormat; import org.hisp.dhis.organisationunit.OrganisationUnit; import org.hisp.dhis.organisationunit.OrganisationUnitService; @@ -42,6 +48,8 @@ import org.hisp.dhis.reports.ReportService; import org.hisp.dhis.reports.Report_in; import org.hisp.dhis.reports.Report_inDesign; +import org.hisp.dhis.system.util.MathUtils; +import org.hisp.dhis.util.comparator.PeriodStartDateComparator; import com.opensymphony.xwork2.Action; @@ -87,6 +95,20 @@ this.organisationUnitService = organisationUnitService; } + private DataSetService dataSetService; + + public void setDataSetService( DataSetService dataSetService ) + { + this.dataSetService = dataSetService; + } + + private DataElementService dataElementService; + + public void setDataElementService( DataElementService dataElementService ) + { + this.dataElementService = dataElementService; + } + private I18nFormat format; public void setFormat( I18nFormat format ) @@ -140,6 +162,13 @@ this.availablePeriodsto = availablePeriodsto; } + private String periodTypeId; + + public void setPeriodTypeId( String periodTypeId ) + { + this.periodTypeId = periodTypeId; + } + private String aggData; public void setAggData( String aggData ) @@ -147,62 +176,24 @@ this.aggData = aggData; } - private List orgUnitList; - private Period selectedPeriod; private Period selectedEndPeriod; private SimpleDateFormat simpleDateFormat; - private SimpleDateFormat monthFormat; - - private SimpleDateFormat yearFormat; - - private String reportFileNameTB; - - private String reportModelTB; - private Date sDate; private Date eDate; - private Date sDateTemp; - - private Date eDateTemp; - - private PeriodType periodType; - private String raFolderName; - Integer startMonth; - - Integer endMonth; - - private Map mapOfTotalValues; - - private int startRowNumber; - - private int totalColumnNumber; - private int sheetNo = 0; private int tempColNo; private int tempRowNo; - private Integer tempMonthCount; - - Map months; - - Map monthOrder; - - String[] monthArray; - - private Date tempSDate; - - private Date tempEDate; - // ------------------------------------------------------------------------- // Action implementation // ------------------------------------------------------------------------- @@ -214,271 +205,115 @@ // Initialization raFolderName = reportService.getRAFolderName(); - simpleDateFormat = new SimpleDateFormat( "MMM-yyyy" ); - monthFormat = new SimpleDateFormat( "MMMM" ); - yearFormat = new SimpleDateFormat( "yyyy" ); - mapOfTotalValues = new HashMap(); - List totalRowList = new ArrayList(); - - //char colArray[] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'}; - // String colArray[] = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","AA","AB","AC","AD","AE","AF","AG","AH","AI","AJ","AK","AL","AM","AN","AO","AP","AQ","AR","AS","AT","AU","AV","AW","AX","AY","AZ"}; String colArray[] = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z", "AA","AB","AC","AD","AE","AF","AG","AH","AI","AJ","AK","AL","AM","AN","AO","AP","AQ","AR","AS","AT","AU","AV","AW","AX","AY","AZ", "BA","BB","BC","BD","BE","BF","BG","BH","BI","BJ","BK","BL","BM","BN","BO","BP","BQ","BR","BS","BT","BU","BV","BW","BX","BY","BZ" }; - startMonth = 0; - endMonth = 0; - - String deCodesXMLFileName = ""; - Report_in selReportObj = reportService.getReport( Integer.parseInt( reportList ) ); - deCodesXMLFileName = selReportObj.getXmlTemplateName(); - reportModelTB = selReportObj.getModel(); - reportFileNameTB = selReportObj.getExcelTemplateName(); - String parentUnit = ""; - - if( reportModelTB.equalsIgnoreCase( "PROGRESSIVE-PERIOD" ) ) - { - orgUnitList = new ArrayList(); - OrganisationUnit orgUnit = organisationUnitService.getOrganisationUnit( ouIDTB ); - orgUnitList.add( orgUnit ); - } - - System.out.println( orgUnitList.get( 0 ).getName()+ " : " + selReportObj.getName()+" : Report Generation Start Time is : " + new Date() ); - - months = new HashMap(); - monthOrder = new HashMap(); - monthArray = new String[12]; - - init(); - - selectedPeriod = periodService.getPeriod( availablePeriods ); - selectedEndPeriod = periodService.getPeriod( availablePeriodsto ); - - sDate = format.parseDate( String.valueOf( selectedPeriod.getStartDate() ) ); - - eDate = format.parseDate( String.valueOf( selectedPeriod.getEndDate() ) ); - - //simpleDateFormat = new SimpleDateFormat( "MMM-yyyy" ); - - // for Month count - tempSDate = format.parseDate( String.valueOf( selectedPeriod.getStartDate() ) ); - tempEDate = format.parseDate( String.valueOf( selectedEndPeriod.getStartDate() ) ); - - Calendar tempStartMonth = Calendar.getInstance(); - Calendar tempEndMonth = Calendar.getInstance(); - tempStartMonth.setTime( selectedPeriod.getStartDate() ); - - Calendar startDate = Calendar.getInstance(); - Calendar endDate = Calendar.getInstance(); - - startDate.setTime( tempSDate ); - endDate.setTime( tempEDate ); - - int eYear = endDate.get( Calendar.YEAR ); - int sYear = startDate.get( Calendar.YEAR ); - int eMonth = endDate.get( Calendar.MONTH ); - int sMonth = startDate.get( Calendar.MONTH ); - - tempMonthCount = ((eYear - sYear) * 12) - sMonth + eMonth + 1; - - // period count for use existing agg data - //Date tempStartD = format.parseDate( String.valueOf( selectedPeriod.getStartDate() ) ); - //Date tempEndD = format.parseDate( String.valueOf( selectedEndPeriod.getEndDate() ) ); - - //List periodList = new ArrayList( periodService.getPeriodsBetweenDates( tempStartD, tempEndD ) ); - - //Collection periodIds = new ArrayList( getIdentifiers(Period.class, periodList ) ); - - - //System.out.println( "Temp Month Count : " + tempMonthCount ); - // month Count End - /* - if( tempStartMonth.get( Calendar.MONTH ) == Calendar.JANUARY || tempStartMonth.get( Calendar.MONTH ) == Calendar.FEBRUARY || tempStartMonth.get( Calendar.MONTH ) == Calendar.MARCH ) - { - tempStartMonth.set( Calendar.MONTH, Calendar.APRIL ); - tempStartMonth.roll( Calendar.YEAR, -1 ); - } - else - { - tempStartMonth.set( Calendar.MONTH, Calendar.APRIL ); - } - */ - String startMonthName = ""; - - String endMonthName = ""; - - startMonth = Calendar.MONTH; - - startMonthName = monthFormat.format( tempStartMonth.getTime() ); - - // tempEndMonth.setTime( selectedPeriod.getStartDate() ); - - tempEndMonth.setTime( selectedEndPeriod.getStartDate() ); - - endMonth = Calendar.MONTH; - - endMonthName = monthFormat.format( tempEndMonth.getTime() ); + // OrgUnit Info + OrganisationUnit currentOrgUnit = organisationUnitService.getOrganisationUnit( ouIDTB ); + + System.out.println( currentOrgUnit.getName()+ " : " + selReportObj.getName()+" : Report Generation Start Time is : " + new Date() ); + + // Report Info + String deCodesXMLFileName = selReportObj.getXmlTemplateName(); + String reportModelTB = selReportObj.getModel(); + String reportFileNameTB = selReportObj.getExcelTemplateName(); String inputTemplatePath = System.getenv( "DHIS2_HOME" ) + File.separator + raFolderName + File.separator + "template" + File.separator + reportFileNameTB; String outputReportPath = System.getenv( "DHIS2_HOME" ) + File.separator + raFolderName + File.separator + "output" + File.separator + UUID.randomUUID().toString() + ".xls"; Workbook templateWorkbook = Workbook.getWorkbook( new File( inputTemplatePath ) ); WritableWorkbook outputReportWorkbook = Workbook.createWorkbook( new File( outputReportPath ), templateWorkbook ); - - // Getting DataValues + WritableCellFormat wCellformat = new WritableCellFormat(); + wCellformat.setBorder( Border.ALL, BorderLineStyle.THIN ); + wCellformat.setAlignment( Alignment.CENTRE ); + wCellformat.setVerticalAlignment( VerticalAlignment.CENTRE ); + wCellformat.setWrap( true ); + + // Period Info + selectedPeriod = periodService.getPeriod( availablePeriods ); + selectedEndPeriod = periodService.getPeriod( availablePeriodsto ); + + sDate = format.parseDate( String.valueOf( selectedPeriod.getStartDate() ) ); + eDate = format.parseDate( String.valueOf( selectedEndPeriod.getEndDate() ) ); + + PeriodType periodType = periodService.getPeriodTypeByName( periodTypeId ); + List periodList = new ArrayList( periodService.getPeriodsBetweenDates( periodType, sDate, eDate ) ); + Collections.sort( periodList, new PeriodStartDateComparator() ); + + if( periodTypeId.equalsIgnoreCase( "monthly" ) ) + { + simpleDateFormat = new SimpleDateFormat( "MMM-yyyy" ); + } + else if( periodTypeId.equalsIgnoreCase( "yearly" ) ) + { + simpleDateFormat = new SimpleDateFormat( "yyyy" ); + } + else + { + simpleDateFormat = new SimpleDateFormat( "yyyy-MM-dd" ); + } + + // To get Aggregation Data + String dataSetIds = selReportObj.getDataSetIds(); + Collection dataElementIdList = new ArrayList(); + if( dataSetIds != null ) + { + String[] partsOfDataSetIds = dataSetIds.split( "," ); + for( int i = 0; i < partsOfDataSetIds.length; i++ ) + { + DataSet dataSet = dataSetService.getDataSet( Integer.parseInt( partsOfDataSetIds[i] ) ); + dataElementIdList.addAll( getIdentifiers( DataElement.class, dataSet.getDataElements() ) ); + } + } + else + { + dataElementIdList.addAll( getIdentifiers( DataElement.class, dataElementService.getAggregateableDataElements() ) ); + } + + String dataElmentIdsByComma = getCommaDelimitedString( dataElementIdList ); + List reportDesignList = reportService.getReportDesign( deCodesXMLFileName ); - int rowCounter = 0; - - int monthCount = 0; - - String currentMonth = ""; - - OrganisationUnit currentOrgUnit = orgUnitList.get( 0 ); - - // int currentMonthOrder = monthOrder.get( monthFormat.format( tempEndMonth.getTime() ) ); - - // while ( monthCount < currentMonthOrder ) - while ( monthCount < tempMonthCount ) + int colCount = 0; + for( Period period : periodList ) { - //currentMonth = monthArray[monthCount]; - currentMonth = monthFormat.format( tempStartMonth.getTime() ); - String tempCurrentMonth = simpleDateFormat.format( tempStartMonth.getTime() ); - int count1 = 0; - + + Collection periodIds = new ArrayList( getIdentifiers(Period.class, periodService.getPeriodsBetweenDates( period.getStartDate(), period.getEndDate() ) ) ); + String periodsByComma = getCommaDelimitedString( periodIds ); + + Map aggDeMap = new HashMap(); + if( aggData.equalsIgnoreCase( USEEXISTINGAGGDATA ) ) + { + aggDeMap.putAll( reportService.getResultDataValueFromAggregateTable( currentOrgUnit.getId(), dataElmentIdsByComma, periodsByComma ) ); + } + Iterator reportDesignIterator = reportDesignList.iterator(); while ( reportDesignIterator.hasNext() ) { Report_inDesign reportDesign = reportDesignIterator.next(); String deCodeString = reportDesign.getExpression(); - String deType = reportDesign.getPtype(); String sType = reportDesign.getStype(); String tempStr = ""; tempRowNo = reportDesign.getRowno(); tempColNo = reportDesign.getColno(); sheetNo = reportDesign.getSheetno(); - totalRowList.add( count1, tempRowNo ); - - Calendar tempStart = Calendar.getInstance(); - Calendar tempEnd = Calendar.getInstance(); - - //months.get( currentMonth ); - - String tempS = "01-" + months.get( currentMonth ) + "-" + tempStartMonth.get( Calendar.YEAR ); - String tempE = String.valueOf( tempStartMonth.getActualMaximum( Calendar.DAY_OF_MONTH ) ) + "-" + months.get( currentMonth ) + "-" + tempStartMonth.get( Calendar.YEAR ); - - DateFormat tempMonthFormat; - - tempMonthFormat = new SimpleDateFormat( "dd-MM-yy" ); - - Date tempDate = new Date(); - - tempStart.setTime( tempStartMonth.getTime() ); - - tempDate = (Date) tempMonthFormat.parse( tempS ); - - tempDate = (Date) tempMonthFormat.parse( tempE ); - - tempEnd.setTime( tempDate ); - - Calendar tempStartDate = Calendar.getInstance(); - Calendar tempEndDate = Calendar.getInstance(); - - List calendarList = new ArrayList( reportService.getStartingEndingPeriods( deType, tempStart.getTime(), tempEnd.getTime() ) ); - if ( calendarList == null || calendarList.isEmpty() ) - { - //tempStr = currentMonth; - tempStr = tempCurrentMonth; - } - else - { - tempStartDate = calendarList.get( 0 ); - tempEndDate = calendarList.get( 1 ); - } - + if( deCodeString.equalsIgnoreCase( "FACILITY" ) ) { tempStr = currentOrgUnit.getName(); } - else if( deCodeString.equalsIgnoreCase( "FACILITY-NOREPEAT" ) ) - { - tempStr = parentUnit; - } - else if ( deCodeString.equalsIgnoreCase( "MONTH-RANGE" ) ) - { - //tempStr = startMonthName + " - " + endMonthName; - tempStr = startMonthName + "-" + yearFormat.format( tempSDate )+ " - " + endMonthName + "-" + yearFormat.format( tempEDate ); - } - else if ( deCodeString.equalsIgnoreCase( "YEAR-FROMTO" ) ) - { - sDateTemp = sDate; - - eDateTemp = eDate; - - Calendar tempQuarterYear = Calendar.getInstance(); - - String startYear = ""; - - String endYear = ""; - - String startMonth = ""; - - startMonth = monthFormat.format( sDateTemp ); - - periodType = selectedPeriod.getPeriodType(); - - tempQuarterYear.setTime( sDateTemp ); - - if ( periodType.getName().equalsIgnoreCase( "Yearly" ) ) - { - sDateTemp = sDate; - } - else if ( ( startMonth.equalsIgnoreCase( "January" ) || startMonth.equalsIgnoreCase( "February" ) || startMonth.equalsIgnoreCase( "March" ) ) ) - { - tempQuarterYear.roll( Calendar.YEAR, -1 ); - - sDateTemp = tempQuarterYear.getTime(); - } - startYear = yearFormat.format( sDateTemp ); - - tempQuarterYear.setTime( eDateTemp ); - - if ( periodType.getName().equalsIgnoreCase( "Yearly" ) ) - { - tempQuarterYear.roll( Calendar.YEAR, 1 ); - eDateTemp = tempQuarterYear.getTime(); - } - if ( !( startMonth.equalsIgnoreCase( "January" ) || startMonth.equalsIgnoreCase( "February" ) || startMonth.equalsIgnoreCase( "March" ) ) ) - { - tempQuarterYear.roll( Calendar.YEAR, 1 ); - eDateTemp = tempQuarterYear.getTime(); - } - endYear = yearFormat.format( eDateTemp ); - - tempStr = startYear + " - " + endYear; - } + else if ( deCodeString.equalsIgnoreCase( "PERIOD-RANGE" ) ) + { + tempStr = simpleDateFormat.format( selectedPeriod.getStartDate() ) + " To " + simpleDateFormat.format( selectedEndPeriod.getEndDate() ); + } else if( deCodeString.equalsIgnoreCase( "PROGRESSIVE-PERIOD" ) ) { - Period p = new Period(); - - p = periodService.getPeriod( tempStartDate.getTime(), tempEndDate.getTime(), periodService.getPeriodTypeByName( "Monthly" ) ); - - startRowNumber = tempRowNo; - - if( p == null ) - { - //tempStr = currentMonth; - tempStr = tempCurrentMonth; - } - else - { - //tempStr = monthFormat.format( p.getStartDate() ); - tempStr = simpleDateFormat.format( p.getStartDate() ); - } + tempStr = simpleDateFormat.format( period.getStartDate() ); } else if( deCodeString.equalsIgnoreCase( "NA" ) ) { @@ -486,83 +321,28 @@ } else { - rowCounter += 1; - if( sType.equalsIgnoreCase( "dataelement" ) ) { if( aggData.equalsIgnoreCase( USECAPTUREDDATA ) ) { - tempStr = reportService.getIndividualResultDataValue( deCodeString, tempStartDate.getTime(), tempEndDate.getTime(), currentOrgUnit, reportModelTB ); + tempStr = reportService.getIndividualResultDataValue( deCodeString, period.getStartDate(), period.getEndDate(), currentOrgUnit, reportModelTB ); } else if( aggData.equalsIgnoreCase( GENERATEAGGDATA ) ) { - tempStr = reportService.getResultDataValue( deCodeString, tempStartDate.getTime(), tempEndDate.getTime(), currentOrgUnit, reportModelTB ); + tempStr = reportService.getResultDataValue( deCodeString, period.getStartDate(), period.getEndDate(), currentOrgUnit, reportModelTB ); } else if( aggData.equalsIgnoreCase( USEEXISTINGAGGDATA ) ) { - List periodList = new ArrayList( periodService.getPeriodsBetweenDates( tempStartDate.getTime(), tempEndDate.getTime() ) ); - Collection periodIds = new ArrayList( getIdentifiers(Period.class, periodList ) ); - tempStr = reportService.getResultDataValueFromAggregateTable( deCodeString, periodIds, currentOrgUnit, reportModelTB ); - } - - double totalRowValue = 0.0; - - if( mapOfTotalValues.get( tempRowNo ) != null ) - { - totalRowValue = mapOfTotalValues.get( tempRowNo ); - - if ( !( tempStr.equalsIgnoreCase( " " ) || tempStr.equalsIgnoreCase( "" ) ) ) - { - try - { - totalRowValue += Double.parseDouble( tempStr ); - } - catch( Exception e ) - { - - } - } - - /* - if ( !( tempStr.equalsIgnoreCase( " " ) || tempStr.equalsIgnoreCase( "" ) ) ) - { - totalRowValue += Integer.valueOf( tempStr ); - } - */ - - mapOfTotalValues.put( tempRowNo, totalRowValue ); - } - else - { - if( !( tempStr.equalsIgnoreCase( " " ) || tempStr.equalsIgnoreCase( "" ) ) ) - { - try - { - totalRowValue += Double.parseDouble( tempStr ); - } - catch( Exception e ) - { - - } - } - - //System.out.println("totalRowValue = "+totalRowValue); - mapOfTotalValues.put( tempRowNo, totalRowValue ); + tempStr = getAggVal( deCodeString, aggDeMap ); } } - } if( tempStr == null || tempStr.equals( " " ) ) { - tempColNo += monthCount; + tempColNo += colCount; WritableSheet sheet0 = outputReportWorkbook.getSheet( sheetNo ); - WritableCellFormat wCellformat = new WritableCellFormat(); - - wCellformat.setBorder( Border.ALL, BorderLineStyle.THIN ); - wCellformat.setWrap( true ); - wCellformat.setAlignment( Alignment.CENTRE ); sheet0.addCell( new Blank( tempColNo, tempRowNo, wCellformat ) ); } @@ -570,23 +350,15 @@ { if( reportModelTB.equalsIgnoreCase( "PROGRESSIVE-PERIOD" ) ) { - if( deCodeString.equalsIgnoreCase( "FACILITY" ) || deCodeString.equalsIgnoreCase( "FACILITYP" ) || deCodeString.equalsIgnoreCase( "FACILITYPP" ) || deCodeString.equalsIgnoreCase( "FACILITYPPP" ) || deCodeString.equalsIgnoreCase( "FACILITYPPPP" ) ) + if( deCodeString.equalsIgnoreCase( "FACILITY" ) || deCodeString.equalsIgnoreCase( "PERIOD-RANGE" ) ) { } - else if( deCodeString.equalsIgnoreCase( "PERIOD" ) || deCodeString.equalsIgnoreCase( "PERIOD-NOREPEAT" ) || deCodeString.equalsIgnoreCase( "MONTH-RANGE" ) || deCodeString.equalsIgnoreCase( "PERIOD-WEEK" ) || deCodeString.equalsIgnoreCase( "PERIOD-MONTH" ) || deCodeString.equalsIgnoreCase( "PERIOD-QUARTER" ) || deCodeString.equalsIgnoreCase( "PERIOD-YEAR" ) || deCodeString.equalsIgnoreCase( "MONTH-START" ) || deCodeString.equalsIgnoreCase( "MONTH-END" ) || deCodeString.equalsIgnoreCase( "MONTH-START-SHORT" ) || deCodeString.equalsIgnoreCase( "MONTH-END-SHORT" ) || deCodeString.equalsIgnoreCase( "SIMPLE-QUARTER" ) || deCodeString.equalsIgnoreCase( "QUARTER-MONTHS-SHORT" ) || deCodeString.equalsIgnoreCase( "QUARTER-MONTHS" ) || deCodeString.equalsIgnoreCase( "QUARTER-START-SHORT" ) || deCodeString.equalsIgnoreCase( "QUARTER-END-SHORT" ) || deCodeString.equalsIgnoreCase( "QUARTER-START" ) || deCodeString.equalsIgnoreCase( "QUARTER-END" ) || deCodeString.equalsIgnoreCase( "SIMPLE-YEAR" ) || deCodeString.equalsIgnoreCase( "YEAR-END" ) || deCodeString.equalsIgnoreCase( "YEAR-FROMTO" ) ) - { - } else { - tempColNo += monthCount; + tempColNo += colCount; } WritableSheet sheet0 = outputReportWorkbook.getSheet( sheetNo ); - WritableCellFormat wCellformat = new WritableCellFormat(); - wCellformat.setBorder( Border.ALL, BorderLineStyle.THIN ); - wCellformat.setAlignment( Alignment.CENTRE ); - wCellformat.setVerticalAlignment( VerticalAlignment.CENTRE ); - wCellformat.setWrap( true ); try { @@ -605,18 +377,9 @@ } } } - count1++; }// inner while loop end - tempStartMonth.roll( Calendar.MONTH, 1 ); - - if( tempStartMonth.get( Calendar.MONTH ) == Calendar.JANUARY ) - { - tempStartMonth.roll( Calendar.YEAR, 1 ); - } - - monthCount++; - + colCount++; }// outer while loop end // --------------------------------------------------------------------- @@ -631,9 +394,7 @@ String deCodeString = reportDesign.getExpression(); if( deCodeString.equalsIgnoreCase( "FACILITY" ) || - deCodeString.equalsIgnoreCase( "FACILITY-NOREPEAT" ) || - deCodeString.equalsIgnoreCase( "MONTH-RANGE" ) || - deCodeString.equalsIgnoreCase( "YEAR-FROMTO" ) ) + deCodeString.equalsIgnoreCase( "PERIOD-RANGE" ) ) { continue; } @@ -643,7 +404,7 @@ sheetNo = reportDesign.getSheetno(); String colStart = ""+ colArray[tempColNo]; - String colEnd = ""+ colArray[tempColNo+monthCount-1]; + String colEnd = ""+ colArray[tempColNo+colCount-1]; String tempFormula = "SUM("+colStart+(tempRowNo+1)+":"+colEnd+(tempRowNo+1)+")"; @@ -657,29 +418,28 @@ if( deCodeString.equalsIgnoreCase( "PROGRESSIVE-PERIOD" ) ) { - totalSheet.addCell( new Label( tempColNo+monthCount, tempRowNo, "Total", totalCellformat ) ); + totalSheet.addCell( new Label( tempColNo+colCount, tempRowNo, "Total", totalCellformat ) ); } else if( deCodeString.equalsIgnoreCase( "NA" ) ) { - totalSheet.addCell( new Label( tempColNo+monthCount, tempRowNo, " ", totalCellformat ) ); + totalSheet.addCell( new Label( tempColNo+colCount, tempRowNo, " ", totalCellformat ) ); } else { - totalSheet.addCell( new Formula( tempColNo+monthCount, tempRowNo, tempFormula, totalCellformat ) ); + totalSheet.addCell( new Formula( tempColNo+colCount, tempRowNo, tempFormula, totalCellformat ) ); } } - outputReportWorkbook.write(); outputReportWorkbook.close(); fileName = reportFileNameTB.replace( ".xls", "" ); - fileName += "_" + orgUnitList.get( 0 ).getShortName() + "_"; + fileName += "_" + currentOrgUnit.getShortName(); fileName += "_" + simpleDateFormat.format( selectedPeriod.getStartDate() ) + ".xls"; File outputReportFile = new File( outputReportPath ); inputStream = new BufferedInputStream( new FileInputStream( outputReportFile ) ); - System.out.println( orgUnitList.get( 0 ).getName()+ " : " + selReportObj.getName()+" : Report Generation End Time is : " + new Date() ); + System.out.println( currentOrgUnit.getName()+ " : " + selReportObj.getName()+" : Report Generation End Time is : " + new Date() ); outputReportFile.deleteOnExit(); @@ -687,48 +447,57 @@ return SUCCESS; } + + private String getAggVal( String expression, Map aggDeMap ) + { + try + { + Pattern pattern = Pattern.compile( "(\\[\\d+\\.\\d+\\])" ); + + Matcher matcher = pattern.matcher( expression ); + StringBuffer buffer = new StringBuffer(); + + String resultValue = ""; + + while ( matcher.find() ) + { + String replaceString = matcher.group(); + + replaceString = replaceString.replaceAll( "[\\[\\]]", "" ); + + replaceString = aggDeMap.get( replaceString ); + + if( replaceString == null ) + { + replaceString = "0"; + } + + matcher.appendReplacement( buffer, replaceString ); + + resultValue = replaceString; + } + + matcher.appendTail( buffer ); + + double d = 0.0; + try + { + d = MathUtils.calculateExpression( buffer.toString() ); + } + catch ( Exception e ) + { + d = 0.0; + resultValue = ""; + } + + resultValue = "" + (double) d; + + return resultValue; + } + catch ( NumberFormatException ex ) + { + throw new RuntimeException( "Illegal DataElement id", ex ); + } + } - private void init() - { - months.put( "April", "04" ); - months.put( "May", "05" ); - months.put( "June", "06" ); - months.put( "July", "07" ); - months.put( "August", "08" ); - months.put( "September", "09" ); - months.put( "October", "10" ); - months.put( "November", "11" ); - months.put( "December", "12" ); - months.put( "January", "01" ); - months.put( "February", "02" ); - months.put( "March", "03" ); - - monthOrder.put( "April", 1 ); - monthOrder.put( "May", 2 ); - monthOrder.put( "June", 3 ); - monthOrder.put( "July", 4 ); - monthOrder.put( "August", 5 ); - monthOrder.put( "September", 6 ); - monthOrder.put( "October", 7 ); - monthOrder.put( "November", 8 ); - monthOrder.put( "December", 9 ); - monthOrder.put( "January", 10 ); - monthOrder.put( "February", 11 ); - monthOrder.put( "March", 12 ); - - monthArray[0] = "April"; - monthArray[1] = "May"; - monthArray[2] = "June"; - monthArray[3] = "July"; - monthArray[4] = "August"; - monthArray[5] = "September"; - monthArray[6] = "October"; - monthArray[7] = "November"; - monthArray[8] = "December"; - monthArray[9] = "January"; - monthArray[10] = "February"; - monthArray[11] = "March"; - - } } - === modified file 'local/in/dhis-web-reports-national/src/main/java/org/hisp/dhis/reports/reportmanagement/action/AddReportAction.java' --- local/in/dhis-web-reports-national/src/main/java/org/hisp/dhis/reports/reportmanagement/action/AddReportAction.java 2011-04-15 11:39:32 +0000 +++ local/in/dhis-web-reports-national/src/main/java/org/hisp/dhis/reports/reportmanagement/action/AddReportAction.java 2011-04-19 07:43:37 +0000 @@ -90,6 +90,13 @@ this.orgunitGroupId = orgunitGroupId; } + private String dataSetIds; + + public void setDataSetIds( String dataSetIds ) + { + this.dataSetIds = dataSetIds; + } + // ------------------------------------------------------------------------- // Action // ------------------------------------------------------------------------- @@ -98,8 +105,9 @@ throws Exception { PeriodType periodType = periodService.getPeriodTypeByName( frequencySelect ); - - if( orgunitGroupId != null ) + + /* + if( orgunitGroupId != null && dataSetIds != null ) { OrganisationUnitGroup orgUnitGroup = organisationUnitGroupService.getOrganisationUnitGroup( orgunitGroupId ); Report_in report = new Report_in( name, reportmodel, periodType, excelname, xmlname, reporttype, orgUnitGroup ); @@ -109,9 +117,22 @@ return SUCCESS; } + */ Report_in report = new Report_in( name, reportmodel, periodType, excelname, xmlname, reporttype ); + if( orgunitGroupId != null ) + { + OrganisationUnitGroup orgUnitGroup = organisationUnitGroupService.getOrganisationUnitGroup( orgunitGroupId ); + + report.setOrgunitGroup( orgUnitGroup ); + } + + if( dataSetIds != null ) + { + report.setDataSetIds( dataSetIds ); + } + reportService.addReport( report ); return SUCCESS; === modified file 'local/in/dhis-web-reports-national/src/main/java/org/hisp/dhis/reports/reportmanagement/action/UpdateReportAction.java' --- local/in/dhis-web-reports-national/src/main/java/org/hisp/dhis/reports/reportmanagement/action/UpdateReportAction.java 2011-04-15 11:39:32 +0000 +++ local/in/dhis-web-reports-national/src/main/java/org/hisp/dhis/reports/reportmanagement/action/UpdateReportAction.java 2011-04-19 07:43:37 +0000 @@ -97,6 +97,13 @@ this.orgunitGroupId = orgunitGroupId; } + private String dataSetIds; + + public void setDataSetIds( String dataSetIds ) + { + this.dataSetIds = dataSetIds; + } + // ------------------------------------------------------------------------- // Action // ------------------------------------------------------------------------- @@ -121,6 +128,11 @@ report.setOrgunitGroup( orgUnitGroup ); } + if( dataSetIds != null ) + { + report.setDataSetIds( dataSetIds ); + } + reportService.updateReport( report ); return SUCCESS; === modified file 'local/in/dhis-web-reports-national/src/main/resources/META-INF/dhis/beans.xml' --- local/in/dhis-web-reports-national/src/main/resources/META-INF/dhis/beans.xml 2011-04-15 11:40:14 +0000 +++ local/in/dhis-web-reports-national/src/main/resources/META-INF/dhis/beans.xml 2011-04-19 07:43:37 +0000 @@ -391,6 +391,8 @@ + + @@ -408,6 +410,8 @@ + + === modified file 'local/in/dhis-web-reports-national/src/main/webapp/dhis-web-reports/addReportForm.vm' --- local/in/dhis-web-reports-national/src/main/webapp/dhis-web-reports/addReportForm.vm 2011-04-15 11:40:14 +0000 +++ local/in/dhis-web-reports-national/src/main/webapp/dhis-web-reports/addReportForm.vm 2011-04-19 07:43:37 +0000 @@ -63,6 +63,10 @@ + + + +    === modified file 'local/in/dhis-web-reports-national/src/main/webapp/dhis-web-reports/editReportForm.vm' --- local/in/dhis-web-reports-national/src/main/webapp/dhis-web-reports/editReportForm.vm 2011-04-15 11:40:14 +0000 +++ local/in/dhis-web-reports-national/src/main/webapp/dhis-web-reports/editReportForm.vm 2011-04-19 07:43:37 +0000 @@ -64,6 +64,10 @@ + + + +