dhis2-devs team mailing list archive
-
dhis2-devs team
-
Mailing list archive
-
Message #11690
[Branch ~dhis2-devs-core/dhis2/trunk] Rev 3401: Merging Code from 2.1 - work in progress
------------------------------------------------------------
revno: 3401
committer: Bharath <chbharathk@xxxxxxxxx>
branch nick: dhis2
timestamp: Fri 2011-04-15 17:12:21 +0530
message:
Merging Code from 2.1 - work in progress
added:
local/in/dhis-web-excelimport/src/main/java/org/hisp/dhis/excelimport/portal/
local/in/dhis-web-excelimport/src/main/java/org/hisp/dhis/excelimport/portal/action/
local/in/dhis-web-excelimport/src/main/java/org/hisp/dhis/excelimport/portal/action/PortalExcelImportFormAction.java
local/in/dhis-web-excelimport/src/main/java/org/hisp/dhis/excelimport/portal/action/PortalExcelImportResultAction.java
local/in/dhis-web-excelimport/src/main/java/org/hisp/dhis/excelimport/tcs/
local/in/dhis-web-excelimport/src/main/java/org/hisp/dhis/excelimport/tcs/action/
local/in/dhis-web-excelimport/src/main/java/org/hisp/dhis/excelimport/tcs/action/TCSXmlImportFormAction.java
local/in/dhis-web-excelimport/src/main/java/org/hisp/dhis/excelimport/tcs/action/TCSXmlImportResultAction.java
local/in/dhis-web-excelimport/src/main/java/org/hisp/dhis/excelimport/util/ExcelImport_DeCode.java
local/in/dhis-web-excelimport/src/main/java/org/hisp/dhis/excelimport/util/ExcelImport_Header.java
local/in/dhis-web-excelimport/src/main/java/org/hisp/dhis/excelimport/util/PortalImportSheet.java
local/in/dhis-web-excelimport/src/main/java/org/hisp/dhis/excelimport/util/TCSXMLMap.java
modified:
local/in/dhis-web-excelimport/src/main/java/org/hisp/dhis/excelimport/action/ExcelImportResultAction.java
local/in/dhis-web-excelimport/src/main/java/org/hisp/dhis/excelimport/util/ReportService.java
--
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 'local/in/dhis-web-excelimport/src/main/java/org/hisp/dhis/excelimport/action/ExcelImportResultAction.java'
--- local/in/dhis-web-excelimport/src/main/java/org/hisp/dhis/excelimport/action/ExcelImportResultAction.java 2010-12-29 16:17:28 +0000
+++ local/in/dhis-web-excelimport/src/main/java/org/hisp/dhis/excelimport/action/ExcelImportResultAction.java 2011-04-15 11:42:21 +0000
@@ -591,9 +591,8 @@
orgUnitList = new ArrayList<OrganisationUnit>();
orgUnit = organisationUnitService.getOrganisationUnit( ouIDTB );
orgUnitList.add( orgUnit );
-
}
-
+
DataSet dataSet = dataSetService.getDataSet( dataSetId );
selectedPeriod = periodService.getPeriod( availablePeriods );
=== added directory 'local/in/dhis-web-excelimport/src/main/java/org/hisp/dhis/excelimport/portal'
=== added directory 'local/in/dhis-web-excelimport/src/main/java/org/hisp/dhis/excelimport/portal/action'
=== added file 'local/in/dhis-web-excelimport/src/main/java/org/hisp/dhis/excelimport/portal/action/PortalExcelImportFormAction.java'
--- local/in/dhis-web-excelimport/src/main/java/org/hisp/dhis/excelimport/portal/action/PortalExcelImportFormAction.java 1970-01-01 00:00:00 +0000
+++ local/in/dhis-web-excelimport/src/main/java/org/hisp/dhis/excelimport/portal/action/PortalExcelImportFormAction.java 2011-04-15 11:42:21 +0000
@@ -0,0 +1,191 @@
+package org.hisp.dhis.excelimport.portal.action;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.hisp.dhis.excelimport.util.PortalImportSheet;
+import org.hisp.dhis.excelimport.util.ReportService;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+
+import com.opensymphony.xwork2.Action;
+
+public class PortalExcelImportFormAction implements Action
+{
+
+ // -------------------------------------------------------------------------
+ // Dependencies
+ // -------------------------------------------------------------------------
+
+ private ReportService reportService;
+
+ public void setReportService( ReportService reportService )
+ {
+ this.reportService = reportService;
+ }
+
+ // -------------------------------------------------------------------------
+ // Getter & Setter
+ // -------------------------------------------------------------------------
+
+ private List<PortalImportSheet> excelImportSheetList;
+
+ public List<PortalImportSheet> getExcelImportSheetList()
+ {
+ return excelImportSheetList;
+ }
+
+ private String raFolderName;
+
+ // -------------------------------------------------------------------------
+ // Action implementation
+ // -------------------------------------------------------------------------
+ public String execute() throws Exception
+ {
+ raFolderName = reportService.getRAFolderName();
+
+ excelImportSheetList = new ArrayList<PortalImportSheet>();
+
+ getExcelImportSheetList( "portalDataImportSheetList.xml" );
+
+ return SUCCESS;
+ }
+
+
+ public void getExcelImportSheetList( String reportListFileName )
+ {
+ String fileName = reportListFileName;
+
+ String excelImportFolderName = "excelimport";
+
+ String path = System.getProperty( "user.home" ) + File.separator + "dhis" + raFolderName + File.separator + excelImportFolderName + File.separator + fileName;
+
+ try
+ {
+ String newpath = System.getenv( "DHIS2_HOME" );
+ if ( newpath != null )
+ {
+ path = newpath + File.separator + raFolderName + File.separator + excelImportFolderName + File.separator + fileName;
+ }
+ }
+ catch ( NullPointerException npe )
+ {
+ System.out.println("DHIS2_HOME is not set");
+ }
+
+ String xmlTemplateName;
+ String displayName;
+ String periodicity;
+ String proforma;
+ String checkerTemplateName;
+ String checkerRangeForHeader;
+ String checkerRangeForData;
+ String datasetId;
+ String orgunitGroupId;
+ String facilityStart;
+
+ int count = 0;
+
+ try
+ {
+ DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
+ DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
+ Document doc = docBuilder.parse( new File( path ) );
+ if ( doc == null )
+ {
+ System.out.println( "XML File Not Found at DHIS HOME" );
+ return;
+ }
+
+ NodeList listOfReports = doc.getElementsByTagName( "PortalImportSheet" );
+ int totalReports = listOfReports.getLength();
+ for ( int s = 0; s < totalReports; s++ )
+ {
+ Node reportNode = listOfReports.item( s );
+ if ( reportNode.getNodeType() == Node.ELEMENT_NODE )
+ {
+ Element reportElement = (Element) reportNode;
+
+ NodeList nodeList = reportElement.getElementsByTagName( "xmlTemplateName" );
+ Element element = (Element) nodeList.item( 0 );
+ nodeList = element.getChildNodes();
+ xmlTemplateName = ((Node) nodeList.item( 0 )).getNodeValue().trim();
+
+ nodeList = reportElement.getElementsByTagName( "displayName" );
+ element = (Element) nodeList.item( 0 );
+ nodeList = element.getChildNodes();
+ displayName = ((Node) nodeList.item( 0 )).getNodeValue().trim();
+
+ nodeList = reportElement.getElementsByTagName( "periodicity" );
+ element = (Element) nodeList.item( 0 );
+ nodeList = element.getChildNodes();
+ periodicity = ((Node) nodeList.item( 0 )).getNodeValue().trim();
+
+ nodeList = reportElement.getElementsByTagName( "proforma" );
+ element = (Element) nodeList.item( 0 );
+ nodeList = element.getChildNodes();
+ proforma = ((Node) nodeList.item( 0 )).getNodeValue().trim();
+
+ nodeList = reportElement.getElementsByTagName( "checkerTemplateName" );
+ element = (Element) nodeList.item( 0 );
+ nodeList = element.getChildNodes();
+ checkerTemplateName = ((Node) nodeList.item( 0 )).getNodeValue().trim();
+
+ nodeList = reportElement.getElementsByTagName( "checkerRangeForHeader" );
+ element = (Element) nodeList.item( 0 );
+ nodeList = element.getChildNodes();
+ checkerRangeForHeader = ((Node) nodeList.item( 0 )).getNodeValue().trim();
+
+ nodeList = reportElement.getElementsByTagName( "checkerRangeForData" );
+ element = (Element) nodeList.item( 0 );
+ nodeList = element.getChildNodes();
+ checkerRangeForData = ((Node) nodeList.item( 0 )).getNodeValue().trim();
+
+ nodeList = reportElement.getElementsByTagName( "dataset" );
+ element = (Element) nodeList.item( 0 );
+ nodeList = element.getChildNodes();
+ datasetId = ((Node) nodeList.item( 0 )).getNodeValue().trim();
+
+ nodeList = reportElement.getElementsByTagName( "orgunitgroup" );
+ element = (Element) nodeList.item( 0 );
+ nodeList = element.getChildNodes();
+ orgunitGroupId = ((Node) nodeList.item( 0 )).getNodeValue().trim();
+
+ nodeList = reportElement.getElementsByTagName( "facilityStart" );
+ element = (Element) nodeList.item( 0 );
+ nodeList = element.getChildNodes();
+ facilityStart = ((Node) nodeList.item( 0 )).getNodeValue().trim();
+
+ PortalImportSheet portalImportSheet = new PortalImportSheet( xmlTemplateName, displayName, periodicity, proforma, checkerTemplateName, checkerRangeForHeader, checkerRangeForData, datasetId, orgunitGroupId, facilityStart );
+
+ excelImportSheetList.add( count, portalImportSheet );
+
+ count++;
+ }
+ }// end of for loop with s var
+ }// try block end
+ catch ( SAXParseException err )
+ {
+ System.out.println( "** Parsing error" + ", line " + err.getLineNumber() + ", uri " + err.getSystemId() );
+ System.out.println( " " + err.getMessage() );
+ }
+ catch ( SAXException e )
+ {
+ Exception x = e.getException();
+ ((x == null) ? e : x).printStackTrace();
+ }
+ catch ( Throwable t )
+ {
+ t.printStackTrace();
+ }
+ }
+
+}
=== added file 'local/in/dhis-web-excelimport/src/main/java/org/hisp/dhis/excelimport/portal/action/PortalExcelImportResultAction.java'
--- local/in/dhis-web-excelimport/src/main/java/org/hisp/dhis/excelimport/portal/action/PortalExcelImportResultAction.java 1970-01-01 00:00:00 +0000
+++ local/in/dhis-web-excelimport/src/main/java/org/hisp/dhis/excelimport/portal/action/PortalExcelImportResultAction.java 2011-04-15 11:42:21 +0000
@@ -0,0 +1,752 @@
+package org.hisp.dhis.excelimport.portal.action;
+
+import java.io.File;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import jxl.Sheet;
+import jxl.Workbook;
+import jxl.write.WritableCellFormat;
+import jxl.write.WritableSheet;
+import jxl.write.WritableWorkbook;
+
+import org.amplecode.quick.StatementManager;
+import org.hisp.dhis.datalock.DataSetLock;
+import org.hisp.dhis.datalock.DataSetLockService;
+import org.hisp.dhis.dataset.DataSet;
+import org.hisp.dhis.dataset.DataSetService;
+import org.hisp.dhis.excelimport.util.ExcelImport_DeCode;
+import org.hisp.dhis.excelimport.util.ExcelImport_Header;
+import org.hisp.dhis.excelimport.util.ReportService;
+import org.hisp.dhis.i18n.I18nFormat;
+import org.hisp.dhis.organisationunit.OrganisationUnit;
+import org.hisp.dhis.organisationunit.OrganisationUnitGroup;
+import org.hisp.dhis.organisationunit.OrganisationUnitGroupService;
+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.user.CurrentUserService;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.jdbc.support.rowset.SqlRowSet;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+
+import com.opensymphony.xwork2.Action;
+
+public class PortalExcelImportResultAction implements Action
+{
+ // -------------------------------------------------------------------------
+ // Dependencies
+ // -------------------------------------------------------------------------
+
+ private StatementManager statementManager;
+
+ public void setStatementManager( StatementManager statementManager )
+ {
+ this.statementManager = statementManager;
+ }
+
+ private ReportService reportService;
+
+ public void setReportService( ReportService reportService )
+ {
+ this.reportService = reportService;
+ }
+
+ private PeriodService periodService;
+
+ public void setPeriodService( PeriodService periodService )
+ {
+ this.periodService = periodService;
+ }
+
+ private JdbcTemplate jdbcTemplate;
+
+ public void setJdbcTemplate( JdbcTemplate jdbcTemplate )
+ {
+ this.jdbcTemplate = jdbcTemplate;
+ }
+
+ private OrganisationUnitService organisationUnitService;
+
+ public void setOrganisationUnitService( OrganisationUnitService organisationUnitService )
+ {
+ this.organisationUnitService = organisationUnitService;
+ }
+
+ private OrganisationUnitGroupService organisationUnitGroupService;
+
+ public void setOrganisationUnitGroupService( OrganisationUnitGroupService organisationUnitGroupService )
+ {
+ this.organisationUnitGroupService = organisationUnitGroupService;
+ }
+
+ private CurrentUserService currentUserService;
+
+ public void setCurrentUserService( CurrentUserService currentUserService )
+ {
+ this.currentUserService = currentUserService;
+ }
+
+ private DataSetLockService dataSetLockService;
+
+ public void setDataSetLockService( DataSetLockService dataSetLockService )
+ {
+ this.dataSetLockService = dataSetLockService;
+ }
+
+ private DataSetService dataSetService;
+
+ public void setDataSetService( DataSetService dataSetService )
+ {
+ this.dataSetService = dataSetService;
+ }
+
+
+ private I18nFormat format;
+
+ public void setFormat( I18nFormat format )
+ {
+ this.format = format;
+ }
+
+ // -------------------------------------------------------------------------
+ // Getter & Setter
+ // -------------------------------------------------------------------------
+
+ private String proforma;
+
+ public void setProforma( String proforma )
+ {
+ this.proforma = proforma;
+ }
+
+ private String checkerTemplateName;
+
+ public void setCheckerTemplateName( String checkerTemplateName )
+ {
+ this.checkerTemplateName = checkerTemplateName;
+ }
+
+ private String checkerRangeForHeader;
+
+ public void setCheckerRangeForHeader( String checkerRangeForHeader )
+ {
+ this.checkerRangeForHeader = checkerRangeForHeader;
+ }
+
+ private String checkerRangeForData;
+
+ public void setCheckerRangeForData( String checkerRangeForData )
+ {
+ this.checkerRangeForData = checkerRangeForData;
+ }
+
+ private Integer datasetId;
+
+ public void setDatasetId( Integer datasetId )
+ {
+ this.datasetId = datasetId;
+ }
+
+ private Integer orgunitGroupId;
+
+ public void setOrgunitGroupId( Integer orgunitGroupId )
+ {
+ this.orgunitGroupId = orgunitGroupId;
+ }
+
+ private String facilityStart;
+
+ public void setFacilityStart( String facilityStart )
+ {
+ this.facilityStart = facilityStart;
+ }
+
+ private String importSheetId;
+
+ public void setImportSheetId( String importSheetId )
+ {
+ this.importSheetId = importSheetId;
+ }
+
+ private String message = "";
+
+ public String getMessage()
+ {
+ return message;
+ }
+
+ private File output;
+
+ public File getOutput()
+ {
+ return output;
+ }
+
+ private File upload;
+
+ public File getUpload()
+ {
+ return upload;
+ }
+
+ public void setUpload( File upload )
+ {
+ this.upload = upload;
+ }
+
+ private String raFolderName;
+
+ // -------------------------------------------------------------------------
+ // Action implementation
+ // -------------------------------------------------------------------------
+ public String execute() throws Exception
+ {
+ statementManager.initialise();
+
+ message += "<br><font color=blue>Importing StartTime : " + new Date() + " - By "+currentUserService.getCurrentUsername() + "</font><br>";
+ System.out.println( message );
+
+ raFolderName = reportService.getRAFolderName();
+
+ String excelTemplatePath = System.getenv( "DHIS2_HOME" ) + File.separator + raFolderName + File.separator
+ + "excelimport" + File.separator + "template" + File.separator + checkerTemplateName;
+
+ String outputReportPath = System.getenv( "DHIS2_HOME" ) + File.separator + raFolderName + File.separator + "output" + File.separator + UUID.randomUUID().toString() + ".xls";
+
+ Workbook excelImportFile = Workbook.getWorkbook( upload );
+ WritableWorkbook writableExcelImportFile = Workbook.createWorkbook( new File(outputReportPath), excelImportFile );
+ Workbook excelTemplateFile = Workbook.getWorkbook( new File( excelTemplatePath ) );
+
+ if( validateReport( excelImportFile, excelTemplateFile ) )
+ {
+ System.out.println("Uploaded ExcelSheet is matched with Template file.");
+ importPortalData( writableExcelImportFile );
+
+ }
+ else
+ {
+ message = "The file you are trying to import is not the correct format";
+ }
+
+ try
+ {
+
+ }
+ finally
+ {
+ excelImportFile.close();
+ excelTemplateFile.close();
+ writableExcelImportFile.close();
+ }
+
+ System.out.println("Importing has been completed which is started by : "+currentUserService.getCurrentUsername() + " at " + new Date() );
+ message += "<br><br><font color=blue>Importing EndTime : " + new Date() + " - By "+currentUserService.getCurrentUsername() + "</font>";
+
+ statementManager.destroy();
+
+ return SUCCESS;
+ }
+
+
+ public List<ExcelImport_Header> getHeaderInfo( String fileName )
+ {
+ String excelImportFolderName = "excelimport";
+ List<ExcelImport_Header> headerInfoList = new ArrayList<ExcelImport_Header>();
+
+ String path = System.getProperty( "user.home" ) + File.separator + "dhis" + File.separator + raFolderName
+ + File.separator + excelImportFolderName + File.separator + fileName;
+ try
+ {
+ String newpath = System.getenv( "DHIS2_HOME" );
+ if ( newpath != null )
+ {
+ path = newpath + File.separator + raFolderName + File.separator + excelImportFolderName
+ + File.separator + fileName;
+ }
+ }
+ catch ( NullPointerException npe )
+ {
+ System.out.println("DHIS_HOME is not set");
+ }
+
+ try
+ {
+ DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
+ DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
+ Document doc = docBuilder.parse( new File( path ) );
+ if ( doc == null )
+ {
+ System.out.println( "There is no DECodes related XML file in the DHIS2 Home" );
+ return null;
+ }
+
+ NodeList listOfHeaders = doc.getElementsByTagName( "header" );
+ int totalHeaders = listOfHeaders.getLength();
+
+ for( int s = 0; s < totalHeaders; s++ )
+ {
+ Element headerElement = (Element) listOfHeaders.item( s );
+ NodeList textHeaderList = headerElement.getChildNodes();
+ String headerExpression = ((Node) textHeaderList.item( 0 )).getNodeValue().trim();
+ Integer sheetNo = Integer.parseInt( headerElement.getAttribute( "sheetno" ) );
+ Integer rowNo = Integer.parseInt( headerElement.getAttribute( "rowno" ) );
+ Integer colNo = Integer.parseInt( headerElement.getAttribute( "colno" ) );
+ ExcelImport_Header excelImport_Header = new ExcelImport_Header( sheetNo, rowNo, colNo, headerExpression );
+
+ headerInfoList.add( excelImport_Header );
+ }// end of for loop with s var
+ }// try block end
+ catch ( SAXParseException err )
+ {
+ System.out.println( "** Parsing error" + ", line " + err.getLineNumber() + ", uri " + err.getSystemId() );
+ System.out.println( " " + err.getMessage() );
+ }
+ catch ( SAXException e )
+ {
+ Exception x = e.getException();
+ ((x == null) ? e : x).printStackTrace();
+ }
+ catch ( Throwable t )
+ {
+ t.printStackTrace();
+ }
+
+ return headerInfoList;
+ }
+
+ public List<ExcelImport_DeCode> getDataInfo( String fileName )
+ {
+ String excelImportFolderName = "excelimport";
+ List<ExcelImport_DeCode> deCodeList = new ArrayList<ExcelImport_DeCode>();
+
+ String path = System.getProperty( "user.home" ) + File.separator + "dhis" + File.separator + raFolderName + File.separator + excelImportFolderName + File.separator + fileName;
+ try
+ {
+ String newpath = System.getenv( "DHIS2_HOME" );
+ if ( newpath != null )
+ {
+ path = newpath + File.separator + raFolderName + File.separator + excelImportFolderName + File.separator + fileName;
+ }
+ }
+ catch ( NullPointerException npe )
+ {
+ System.out.println("DHIS_HOME is not set");
+ }
+
+ try
+ {
+ DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
+ DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
+ Document doc = docBuilder.parse( new File( path ) );
+ if ( doc == null )
+ {
+ System.out.println( "There is no DECodes related XML file in the DHIS2 Home" );
+ return null;
+ }
+
+ NodeList listOfDeCodes = doc.getElementsByTagName( "de-code" );
+ int totalDeCodes = listOfDeCodes.getLength();
+
+ for( int s = 0; s < totalDeCodes; s++ )
+ {
+ Element deCodeElement = (Element) listOfDeCodes.item( s );
+ NodeList textDeCodeList = deCodeElement.getChildNodes();
+ String deCodeExpression = ((Node) textDeCodeList.item( 0 )).getNodeValue().trim();
+ Integer sheetNo = Integer.parseInt( deCodeElement.getAttribute( "sheetno" ) );
+ Integer rowNo = Integer.parseInt( deCodeElement.getAttribute( "rowno" ) );
+ Integer colNo = Integer.parseInt( deCodeElement.getAttribute( "colno" ) );
+ ExcelImport_DeCode excelImport_DeCode = new ExcelImport_DeCode( sheetNo, rowNo, colNo, deCodeExpression );
+
+ deCodeList.add( excelImport_DeCode );
+ }// end of for loop with s var
+ }// try block end
+ catch ( SAXParseException err )
+ {
+ System.out.println( "** Parsing error" + ", line " + err.getLineNumber() + ", uri " + err.getSystemId() );
+ System.out.println( " " + err.getMessage() );
+ }
+ catch ( SAXException e )
+ {
+ Exception x = e.getException();
+ ((x == null) ? e : x).printStackTrace();
+ }
+ catch ( Throwable t )
+ {
+ t.printStackTrace();
+ }
+
+ return deCodeList;
+ }
+
+ private void importPortalData( WritableWorkbook importWorkbook ) throws Exception
+ {
+ List<ExcelImport_Header> headerInfoList = new ArrayList<ExcelImport_Header>();
+ headerInfoList = getHeaderInfo( importSheetId );
+
+ List<ExcelImport_DeCode> deCodeList = new ArrayList<ExcelImport_DeCode>();
+ deCodeList = getDataInfo( importSheetId );
+
+ Map<String, String> monthMap = new HashMap<String, String>();
+ monthMap.put( "January", "01" );
+ monthMap.put( "February", "02" );
+ monthMap.put( "March", "03" );
+ monthMap.put( "April", "04" );
+ monthMap.put( "May", "05" );
+ monthMap.put( "June", "06" );
+ monthMap.put( "July", "07" );
+ monthMap.put( "August", "08" );
+ monthMap.put( "September", "09" );
+ monthMap.put( "October", "10" );
+ monthMap.put( "November", "11" );
+ monthMap.put( "December", "12" );
+
+ String selectedMonth = "";
+ String selectedPeriodicity = "";
+ String selectedFinancialYear = "";
+ String selectedFormat = "";
+ String selectedParentName = "";
+
+ String query = "";
+ String storedBy = currentUserService.getCurrentUsername();
+ if ( storedBy == null )
+ {
+ storedBy = "[unknown]";
+ }
+
+ DataSet dataSet = dataSetService.getDataSet( datasetId );
+
+ Sheet sheet = importWorkbook.getSheet( 0 );
+
+ for( ExcelImport_Header header : headerInfoList )
+ {
+ sheet = importWorkbook.getSheet( header.getSheetno() );
+ String cellContent = sheet.getCell( header.getColno(), header.getRowno() ).getContents();
+
+ if( cellContent.equalsIgnoreCase( "" ) || cellContent == null || cellContent.equalsIgnoreCase( " " ) )
+ {
+ continue;
+ }
+
+ if( header.getExpression().equalsIgnoreCase( ExcelImport_Header.HEADER_PERIOD ) )
+ {
+ selectedMonth = monthMap.get( cellContent );
+ }
+ else if( header.getExpression().equalsIgnoreCase( ExcelImport_Header.HEADER_FINANCIALYEAR ) )
+ {
+ selectedFinancialYear = cellContent;
+ }
+ else if( header.getExpression().equalsIgnoreCase( ExcelImport_Header.HEADER_FORMAT ) )
+ {
+ selectedFormat = cellContent;
+ }
+ else if( header.getExpression().equalsIgnoreCase( ExcelImport_Header.HEADER_FACILITY_PARENT ) )
+ {
+ selectedParentName = cellContent;
+ }
+ else if( header.getExpression().equalsIgnoreCase( ExcelImport_Header.HEADER_PERIODICITY ) )
+ {
+ selectedPeriodicity = cellContent;
+ }
+ }
+
+ String selStartDate = "";
+ String selEndDate = "";
+ if( !selectedFinancialYear.trim().equalsIgnoreCase( "" ) )
+ {
+ if( selectedMonth.equals( "01" ) || selectedMonth.equals( "02" ) || selectedMonth.equals( "03" ) )
+ {
+ selStartDate = selectedFinancialYear.split( "-" )[1] + "-" + selectedMonth + "-" + "01";
+ }
+ else
+ {
+ selStartDate = selectedFinancialYear.split( "-" )[0] + "-" + selectedMonth + "-" + "01";
+ }
+ }
+
+ PeriodType periodType = periodService.getPeriodTypeByName( selectedPeriodicity );
+ Period selectedPeriod = getSelectedPeriod( selStartDate, periodType );
+ SimpleDateFormat periodFormat;
+ if( periodType.getName().equalsIgnoreCase("Monthly") )
+ {
+ periodFormat = new SimpleDateFormat("MMM-yyyy");
+ }
+ else if( periodType.getName().equalsIgnoreCase("Monthly") )
+ {
+ periodFormat = new SimpleDateFormat("yyyy");
+ }
+ else
+ {
+ periodFormat = new SimpleDateFormat("yyyy-MM-dd");
+ }
+
+ Integer selectedBlockId = getOrgUnitIdByComment( selectedParentName );
+ if( selectedBlockId != null )
+ {
+ List<OrganisationUnit> orgUnitList = new ArrayList<OrganisationUnit>( organisationUnitService.getOrganisationUnitWithChildren( selectedBlockId ) );
+ OrganisationUnitGroup orgUnitGroup = organisationUnitGroupService.getOrganisationUnitGroup( orgunitGroupId );
+ orgUnitList.retainAll( orgUnitGroup.getMembers() );
+
+ System.out.println( orgUnitList.size() + " : " + orgUnitGroup.getMembers().size() + " : " + orgUnitList.size() );
+
+ int facilityStartRow = Integer.parseInt( facilityStart.split( "," )[0] );
+ int facilityStartCol = Integer.parseInt( facilityStart.split( "," )[1] );
+
+ String facility = sheet.getCell( facilityStartCol, facilityStartRow ).getContents();
+ int colCount = facilityStartCol;
+ while( facility != null && !facility.trim().equalsIgnoreCase( "" ) )
+ {
+ if( facility.trim().equalsIgnoreCase( "Total" ) )
+ {
+ colCount++;
+ facility = sheet.getCell( colCount, facilityStartRow ).getContents();
+
+ continue;
+ }
+
+ Integer currentOrgunitId = getOrgUnitIdByComment( facility );
+ if( currentOrgunitId != null )
+ {
+ OrganisationUnit portalOrgUnit = organisationUnitService.getOrganisationUnit( currentOrgunitId );
+
+ if( portalOrgUnit != null && orgUnitList.contains( portalOrgUnit ) )
+ {
+ System.out.println("--------Importing started for :"+portalOrgUnit.getName() + "-------------" );
+ DataSetLock dataSetLock = dataSetLockService.getDataSetLockByDataSetPeriodAndSource( dataSet, selectedPeriod, portalOrgUnit );
+ if( dataSetLock != null )
+ {
+ message += "<br><font color=red><strong>Unable to Import : Corresponding Dataset ( "+dataSet.getName()+" ) for " + portalOrgUnit.getName() + " and for period : " + periodFormat.format( selectedPeriod.getStartDate() ) + " is locked.</strong></font>";
+ System.out.println("Unable to Import : Corresponding Dataset ( "+dataSet.getName()+" ) for " + portalOrgUnit.getName() + " and for period : " + periodFormat.format( selectedPeriod.getStartDate() ) + " is locked.");
+ colCount++;
+ facility = sheet.getCell( colCount, facilityStartRow ).getContents();
+
+ continue;
+ }
+
+ int insertFlag = 1;
+ String insertQuery = "INSERT INTO datavalue (dataelementid, periodid, sourceid, categoryoptioncomboid, value, storedby, lastupdated ) VALUES ";
+
+ for( ExcelImport_DeCode deCode : deCodeList )
+ {
+ String deCodeExpression = deCode.getExpression();
+ if( deCodeExpression != null && !deCodeExpression.trim().equals( "" ) )
+ {
+ Integer deId = Integer.parseInt( deCodeExpression.split( "\\." )[0] );
+ Integer deCOCId = Integer.parseInt( deCodeExpression.split( "\\." )[1] );
+
+ String dataValue = sheet.getCell( colCount, deCode.getRowno() ).getContents();
+
+ query = "SELECT value FROM datavalue WHERE dataelementid = " + deId +
+ " AND categoryoptioncomboid = " + deCOCId +
+ " AND periodid = " + selectedPeriod.getId() +
+ " AND sourceid = " + portalOrgUnit.getId();
+
+ long t;
+ Date d = new Date();
+ t = d.getTime();
+ java.sql.Date lastUpdatedDate = new java.sql.Date( t );
+
+ SqlRowSet sqlResultSet1 = jdbcTemplate.queryForRowSet( query );
+ if ( sqlResultSet1 != null && sqlResultSet1.next() )
+ {
+ String updateQuery = "UPDATE datavalue SET value = '" + dataValue + "', storedby = '" + storedBy + "',lastupdated='" + lastUpdatedDate + "' WHERE dataelementid = "+ deId +" AND periodid = " + selectedPeriod.getId() + " AND sourceid = " + portalOrgUnit.getId() + " AND categoryoptioncomboid = "+deCOCId;
+ jdbcTemplate.update( updateQuery );
+ }
+ else
+ {
+ if( dataValue != null && !dataValue.trim().equalsIgnoreCase( "" ) )
+ {
+ insertQuery += "( "+ deId + ", " + selectedPeriod.getId() + ", "+ portalOrgUnit.getId() +", " + deCOCId + ", '" + dataValue + "', '" + storedBy + "', '" + lastUpdatedDate + "' ), ";
+ insertFlag = 2;
+ }
+ }
+ }
+ }
+
+ if( insertFlag != 1 )
+ {
+ insertQuery = insertQuery.substring( 0, insertQuery.length()-2 );
+ jdbcTemplate.update( insertQuery );
+ System.out.println("Data is uploaded in DHIS for : "+ facility);
+ }
+ message += "<br>Data is uploaded into DHIS for : "+ facility + " and for period : "+ periodFormat.format( selectedPeriod.getStartDate() );
+ }
+ else
+ {
+ System.out.println( facility + " is not a memeber of orgunitgroup : "+ orgUnitGroup.getName() );
+ message += "<br><font color=red>" + facility + " is not a memeber of orgunitgroup : "+ orgUnitGroup.getName() + "</font>";
+ }
+ }
+ else
+ {
+ System.out.println("No Mapping found in DHIS for :"+ facility + " : NULL");
+ message += "<br><font color=red>No Mapping found in DHIS for : "+ facility + "</font>";
+ }
+
+ colCount++;
+ facility = sheet.getCell( colCount, facilityStartRow ).getContents();
+
+ }
+
+
+ }
+
+ }
+
+ public void setTextFormatForExcelShett( WritableWorkbook excelImportFile )
+ {
+ WritableSheet sheet = excelImportFile.getSheet( 0 );
+ int facilityStartRow = Integer.parseInt( facilityStart.split( "," )[0] );
+ int facilityStartCol = Integer.parseInt( facilityStart.split( "," )[1] );
+
+ WritableCellFormat wCellformat = new WritableCellFormat (sheet.getCell( facilityStartCol, facilityStartRow ).getCellFormat() );
+ int rowEnd = sheet.getRows();
+ int colEnd = sheet.getColumns();
+
+ for ( int c = 0; c <= colEnd; c++ )
+ {
+ for ( int r = 0; r <= rowEnd; r++ )
+ {
+ sheet.getWritableCell( c, r ).setCellFormat( wCellformat );
+ }
+ }
+ }
+
+ public Integer getOrgUnitIdByComment( String comment )
+ {
+ String query = "SELECT organisationunitid FROM organisationunit WHERE comment LIKE '"+ comment +"'";
+ SqlRowSet sqlResultSet = jdbcTemplate.queryForRowSet( query );
+ if ( sqlResultSet != null && sqlResultSet.next() )
+ {
+ return sqlResultSet.getInt( 1 );
+ }
+ return null;
+ }
+
+ public boolean validateReport( Workbook excelImportFile, Workbook excelTemplateFile )
+ {
+ boolean validator = true;
+
+ int sheetNumber = 0;
+
+ String headerParts[] = checkerRangeForHeader.split("-");
+ int headerStartRow = Integer.parseInt( headerParts[0].split( "," )[0] );
+ int headerEndRow = Integer.parseInt( headerParts[1].split( "," )[0] );;
+ int headerStartCol = Integer.parseInt( headerParts[0].split( "," )[1] );;
+ int headerEndCol = Integer.parseInt( headerParts[1].split( "," )[1] );;
+
+ String dataParts[] = checkerRangeForData.split("-");
+ int dataStartRow = Integer.parseInt( dataParts[0].split( "," )[0] );
+ int dataEndRow = Integer.parseInt( dataParts[1].split( "," )[0] );;
+ int dataStartCol = Integer.parseInt( dataParts[0].split( "," )[1] );;
+ int dataEndCol = Integer.parseInt( dataParts[1].split( "," )[1] );;
+
+ Sheet importFileSheet = excelImportFile.getSheet( sheetNumber );
+ Sheet templateFileSheet = excelTemplateFile.getSheet( sheetNumber );
+
+ if ( excelImportFile.getSheet( sheetNumber ).getRows() == excelTemplateFile.getSheet( sheetNumber ).getRows() )
+ {
+ // Checking Header Cells
+ for ( int c = headerStartCol; c <= headerEndCol; c++ )
+ {
+ for ( int r = headerStartRow; r <= headerEndRow; r++ )
+ {
+ String cellContent = importFileSheet.getCell( c, r ).getContents();
+ String templateContent = templateFileSheet.getCell( c, r ).getContents();
+
+ if ( templateContent.equalsIgnoreCase( cellContent ) && cellContent.equalsIgnoreCase( templateContent ) )
+ {
+ continue;
+ }
+ else
+ {
+ validator = false;
+ break;
+ }
+ }
+ }
+
+ // Checking Data Cells
+ for ( int c = dataStartCol; c <= dataEndCol; c++ )
+ {
+ for ( int r = dataStartRow; r <= dataEndRow; r++ )
+ {
+ String cellContent = importFileSheet.getCell( c, r ).getContents();
+ String templateContent = templateFileSheet.getCell( c, r ).getContents();
+
+ if ( templateContent.equalsIgnoreCase( cellContent ) && cellContent.equalsIgnoreCase( templateContent ) )
+ {
+ continue;
+ }
+ else
+ {
+ validator = false;
+ break;
+ }
+ }
+ }
+ }
+ else
+ {
+ validator = false;
+ }
+
+ return validator;
+ }
+
+
+ public Period getSelectedPeriod( String startDate, PeriodType periodType ) throws Exception
+ {
+ SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd" );
+
+ List<Period> periods = new ArrayList<Period>( periodService.getPeriodsByPeriodType( periodType ) );
+ for ( Period period : periods )
+ {
+ String tempDate = dateFormat.format( period.getStartDate() );
+ if ( tempDate.equalsIgnoreCase( startDate ) )
+ {
+ return period;
+ }
+ }
+
+ Period period = periodType.createPeriod( dateFormat.parse( startDate ) );
+ period = reloadPeriodForceAdd( period );
+ periodService.addPeriod( period );
+
+ return period;
+ }
+
+ private final Period reloadPeriod( Period period )
+ {
+ return periodService.getPeriod( period.getStartDate(), period.getEndDate(), period.getPeriodType() );
+ }
+
+ private final Period reloadPeriodForceAdd( Period period )
+ {
+ Period storedPeriod = reloadPeriod( period );
+
+ if ( storedPeriod == null )
+ {
+ periodService.addPeriod( period );
+
+ return period;
+ }
+
+ return storedPeriod;
+ }
+
+}
=== added directory 'local/in/dhis-web-excelimport/src/main/java/org/hisp/dhis/excelimport/tcs'
=== added directory 'local/in/dhis-web-excelimport/src/main/java/org/hisp/dhis/excelimport/tcs/action'
=== added file 'local/in/dhis-web-excelimport/src/main/java/org/hisp/dhis/excelimport/tcs/action/TCSXmlImportFormAction.java'
--- local/in/dhis-web-excelimport/src/main/java/org/hisp/dhis/excelimport/tcs/action/TCSXmlImportFormAction.java 1970-01-01 00:00:00 +0000
+++ local/in/dhis-web-excelimport/src/main/java/org/hisp/dhis/excelimport/tcs/action/TCSXmlImportFormAction.java 2011-04-15 11:42:21 +0000
@@ -0,0 +1,24 @@
+package org.hisp.dhis.excelimport.tcs.action;
+
+import com.opensymphony.xwork2.Action;
+
+public class TCSXmlImportFormAction implements Action
+{
+
+ // -------------------------------------------------------------------------
+ // Dependencies
+ // -------------------------------------------------------------------------
+
+ // -------------------------------------------------------------------------
+ // Getter & Setter
+ // -------------------------------------------------------------------------
+
+ // -------------------------------------------------------------------------
+ // Action implementation
+ // -------------------------------------------------------------------------
+ public String execute() throws Exception
+ {
+ return SUCCESS;
+ }
+
+}
=== added file 'local/in/dhis-web-excelimport/src/main/java/org/hisp/dhis/excelimport/tcs/action/TCSXmlImportResultAction.java'
--- local/in/dhis-web-excelimport/src/main/java/org/hisp/dhis/excelimport/tcs/action/TCSXmlImportResultAction.java 1970-01-01 00:00:00 +0000
+++ local/in/dhis-web-excelimport/src/main/java/org/hisp/dhis/excelimport/tcs/action/TCSXmlImportResultAction.java 2011-04-15 11:42:21 +0000
@@ -0,0 +1,491 @@
+package org.hisp.dhis.excelimport.tcs.action;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.amplecode.quick.StatementManager;
+import org.hisp.dhis.datalock.DataSetLockService;
+import org.hisp.dhis.dataset.DataSetService;
+import org.hisp.dhis.excelimport.util.ReportService;
+import org.hisp.dhis.excelimport.util.TCSXMLMap;
+import org.hisp.dhis.i18n.I18nFormat;
+import org.hisp.dhis.organisationunit.OrganisationUnitService;
+import org.hisp.dhis.period.MonthlyPeriodType;
+import org.hisp.dhis.period.Period;
+import org.hisp.dhis.period.PeriodService;
+import org.hisp.dhis.system.util.StreamUtils;
+import org.hisp.dhis.user.CurrentUserService;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.jdbc.support.rowset.SqlRowSet;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+
+import com.opensymphony.xwork2.Action;
+
+public class TCSXmlImportResultAction implements Action
+{
+
+ // -------------------------------------------------------------------------
+ // Dependencies
+ // -------------------------------------------------------------------------
+
+ private StatementManager statementManager;
+
+ public void setStatementManager( StatementManager statementManager )
+ {
+ this.statementManager = statementManager;
+ }
+
+ private ReportService reportService;
+
+ public void setReportService( ReportService reportService )
+ {
+ this.reportService = reportService;
+ }
+
+ private PeriodService periodService;
+
+ public void setPeriodService( PeriodService periodService )
+ {
+ this.periodService = periodService;
+ }
+
+ private JdbcTemplate jdbcTemplate;
+
+ public void setJdbcTemplate( JdbcTemplate jdbcTemplate )
+ {
+ this.jdbcTemplate = jdbcTemplate;
+ }
+
+ private OrganisationUnitService organisationUnitService;
+
+ public void setOrganisationUnitService( OrganisationUnitService organisationUnitService )
+ {
+ this.organisationUnitService = organisationUnitService;
+ }
+
+ private CurrentUserService currentUserService;
+
+ public void setCurrentUserService( CurrentUserService currentUserService )
+ {
+ this.currentUserService = currentUserService;
+ }
+
+ private DataSetLockService dataSetLockService;
+
+ public void setDataSetLockService( DataSetLockService dataSetLockService )
+ {
+ this.dataSetLockService = dataSetLockService;
+ }
+
+ private DataSetService dataSetService;
+
+ public void setDataSetService( DataSetService dataSetService )
+ {
+ this.dataSetService = dataSetService;
+ }
+
+ private I18nFormat format;
+
+ public void setFormat( I18nFormat format )
+ {
+ this.format = format;
+ }
+
+ // -------------------------------------------------------------------------
+ // Getter & Setter
+ // -------------------------------------------------------------------------
+
+ private String message = "";
+
+ public String getMessage()
+ {
+ return message;
+ }
+
+ private File outputFile;
+
+
+ private File upload;
+
+ public File getUpload()
+ {
+ return upload;
+ }
+
+ public void setUpload( File upload )
+ {
+ this.upload = upload;
+ }
+
+ private String fileName;
+
+ public void setUploadFileName( String fileName )
+ {
+ this.fileName = fileName;
+ }
+
+ private String raFolderName;
+
+ int insertCount = 0;
+ int updateCount = 0;
+ int facilityCount = 0;
+
+ // -------------------------------------------------------------------------
+ // Action implementation
+ // -------------------------------------------------------------------------
+ public String execute() throws Exception
+ {
+ statementManager.initialise();
+
+ message += "<br><font color=blue>Importing StartTime : " + new Date() + " - By "+currentUserService.getCurrentUsername() + "</font><br>";
+ System.out.println( message );
+
+ raFolderName = reportService.getRAFolderName();
+
+ String outputPath = System.getenv( "DHIS2_HOME" ) + File.separator + raFolderName + File.separator + "output" + File.separator + UUID.randomUUID().toString() + ".xml";
+
+ try
+ {
+ outputFile = new File( outputPath );
+
+ StreamUtils.write( upload, outputFile );
+
+ if( importTCSData() !=0 )
+ {
+ message += "<br>Importing has been done successfully for the file : "+ fileName;
+ message += "<br>Total number of Facilities that are imported : "+ facilityCount;
+ message += "<br>Total new records that are imported : "+insertCount;
+ message += "<br>Total records that are updated : "+updateCount;
+ }
+ }
+ catch( Exception e )
+ {
+ e.printStackTrace();
+ message += "<br><font color=red><strong>Some problem occured while Importing the file : "+ fileName + "<br>Error Message: "+e.getMessage()+"</font></strong>";
+ }
+
+ System.out.println("Importing has been completed which is started by : "+currentUserService.getCurrentUsername() + " at " + new Date() );
+ message += "<br><br><font color=blue>Importing EndTime : " + new Date() + " - By "+currentUserService.getCurrentUsername() + "</font>";
+
+ statementManager.destroy();
+
+ return SUCCESS;
+ }
+
+ private int importTCSData( ) throws Exception
+ {
+ //List<TCSXMLMap> dataValueList = new ArrayList<TCSXMLMap>( getDataInfo() );
+ List<TCSXMLMap> dataValueList = getDataInfo();
+ if( dataValueList == null )
+ {
+ return 0;
+ }
+
+
+ Map<String, String> monthMap = new HashMap<String, String>( getPeriodMap() );
+
+ String facilityCode = "0";
+
+ String storedBy = currentUserService.getCurrentUsername();
+ if ( storedBy == null )
+ {
+ storedBy = "[unknown]";
+ }
+
+ long t;
+ Date d = new Date();
+ t = d.getTime();
+ java.sql.Date lastUpdatedDate = new java.sql.Date( t );
+
+ String query = "";
+ int insertFlag = 1;
+ String insertQuery = "INSERT INTO datavalue (dataelementid, periodid, sourceid, categoryoptioncomboid, value, storedby, lastupdated ) VALUES ";
+ int count = 1;
+ for( TCSXMLMap tcsDataValue : dataValueList )
+ {
+ Integer deId = Integer.parseInt( tcsDataValue.getDhisDataElement().split( "\\." )[0] );
+ Integer deCOCId = Integer.parseInt( tcsDataValue.getDhisDataElement().split( "\\." )[1] );
+
+ String orgUnitCode = tcsDataValue.getOrgunitCode();
+ Integer orgUnitId = getOrgUnitIdByCode( orgUnitCode );
+
+ if( !facilityCode.equals( orgUnitCode ) )
+ {
+ facilityCode = orgUnitCode;
+ facilityCount++;
+ }
+
+ String tcsPeriod = tcsDataValue.getTscPeriod();
+ String selMonth = monthMap.get( tcsPeriod.split( "-" )[0] );
+ String startDate = tcsPeriod.split( "-" )[1] + "-" + selMonth + "-01";
+ Period selectedPeriod = reportService.getSelectedPeriod( startDate, new MonthlyPeriodType() );
+
+ String dataValue = tcsDataValue.getDataValue();
+
+ query = "SELECT value FROM datavalue WHERE dataelementid = " + deId +
+ " AND categoryoptioncomboid = " + deCOCId +
+ " AND periodid = " + selectedPeriod.getId() +
+ " AND sourceid = " + orgUnitId;
+
+ SqlRowSet sqlResultSet1 = jdbcTemplate.queryForRowSet( query );
+ if ( sqlResultSet1 != null && sqlResultSet1.next() )
+ {
+ String updateQuery = "UPDATE datavalue SET value = '" + dataValue + "', storedby = '" + storedBy + "',lastupdated='" + lastUpdatedDate + "' WHERE dataelementid = "+ deId +" AND periodid = " + selectedPeriod.getId() + " AND sourceid = " + orgUnitId + " AND categoryoptioncomboid = "+deCOCId;
+ jdbcTemplate.update( updateQuery );
+ updateCount++;
+ }
+ else
+ {
+ if( dataValue != null && !dataValue.trim().equalsIgnoreCase( "" ) )
+ {
+ insertQuery += "( "+ deId + ", " + selectedPeriod.getId() + ", "+ orgUnitId +", " + deCOCId + ", '" + dataValue + "', '" + storedBy + "', '" + lastUpdatedDate + "' ), ";
+ insertFlag = 2;
+ insertCount++;
+ }
+ }
+
+ if( count == 1000 )
+ {
+ count = 1;
+
+ if( insertFlag != 1 )
+ {
+ insertQuery = insertQuery.substring( 0, insertQuery.length()-2 );
+ jdbcTemplate.update( insertQuery );
+ }
+
+ insertFlag = 1;
+ insertQuery = "INSERT INTO datavalue (dataelementid, periodid, sourceid, categoryoptioncomboid, value, storedby, lastupdated ) VALUES ";
+ }
+
+ count++;
+ }
+
+ if( insertFlag != 1 )
+ {
+ insertQuery = insertQuery.substring( 0, insertQuery.length()-2 );
+ jdbcTemplate.update( insertQuery );
+ }
+
+ return 1;
+ }
+
+
+ public Integer getOrgUnitIdByCode( String orgUnitCode )
+ {
+ String query = "SELECT organisationunitid FROM organisationunit WHERE code LIKE '"+ orgUnitCode +"'";
+ SqlRowSet sqlResultSet = jdbcTemplate.queryForRowSet( query );
+ if ( sqlResultSet != null && sqlResultSet.next() )
+ {
+ return sqlResultSet.getInt( 1 );
+ }
+ return null;
+ }
+
+
+
+ public Map<String, String> getPeriodMap()
+ {
+ Map<String, String> periodMap = new HashMap<String, String>();
+
+ String newpath = "";
+ try
+ {
+ newpath = System.getenv( "DHIS2_HOME" ) + File.separator + raFolderName + File.separator + "excelimport" + File.separator + "tcs_dhis_mapping.xml";
+ }
+ catch ( NullPointerException npe )
+ {
+ System.out.println("DHIS_HOME is not set");
+ }
+
+ try
+ {
+ DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
+ DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
+ Document doc = docBuilder.parse( new File( newpath ) );
+ if ( doc == null )
+ {
+ System.out.println( "There is no MAP XML file in the DHIS2 Home" );
+ return null;
+ }
+
+ NodeList listOfPeriodMap = doc.getElementsByTagName( "periodmap" );
+ int totalPeriodMap = listOfPeriodMap.getLength();
+
+ for( int s = 0; s < totalPeriodMap; s++ )
+ {
+ Element element = (Element) listOfPeriodMap.item( s );
+ String tcsPeriod = element.getAttribute( "tcsperiod" );
+ String dhisPeriod = element.getAttribute( "dhisperiod" );
+
+ if( tcsPeriod != null && dhisPeriod != null )
+ {
+ periodMap.put( tcsPeriod, dhisPeriod );
+ }
+ }// end of for loop with s var
+ }// try block end
+ catch ( SAXParseException err )
+ {
+ System.out.println( "** Parsing error" + ", line " + err.getLineNumber() + ", uri " + err.getSystemId() );
+ System.out.println( " " + err.getMessage() );
+ }
+ catch ( SAXException e )
+ {
+ Exception x = e.getException();
+ ((x == null) ? e : x).printStackTrace();
+ }
+ catch ( Throwable t )
+ {
+ t.printStackTrace();
+ }
+
+ return periodMap;
+ }
+
+ public Map<String, String> getDataElementMap()
+ {
+ Map<String, String> dataElementMap = new HashMap<String, String>();
+
+ String newpath = "";
+ try
+ {
+ newpath = System.getenv( "DHIS2_HOME" ) + File.separator + raFolderName + File.separator + "excelimport" + File.separator + "tcs_dhis_mapping.xml";
+ }
+ catch ( NullPointerException npe )
+ {
+ System.out.println("DHIS_HOME is not set");
+ message += "<br><font color=red>DHIS_HOME is not set</font>";
+ return null;
+ }
+
+ try
+ {
+ DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
+ DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
+ Document doc = docBuilder.parse( new File( newpath ) );
+ if ( doc == null )
+ {
+ System.out.println( "There is no MAP XML file in the DHIS2 Home" );
+ message += "<br><font color=red>TNHMIS - DHIS mapping file is not found</font>";
+ return null;
+ }
+
+ NodeList listOfDeMap = doc.getElementsByTagName( "demap" );
+ int totalDeMap = listOfDeMap.getLength();
+
+ for( int s = 0; s < totalDeMap; s++ )
+ {
+ Element element = (Element) listOfDeMap.item( s );
+ String tcsDe = element.getAttribute( "tcsde" );
+ String dhisDe = element.getAttribute( "dhisde" );
+
+ if( tcsDe != null && dhisDe != null )
+ {
+ dataElementMap.put( tcsDe, dhisDe );
+ }
+ }// end of for loop with s var
+ }// try block end
+ catch ( SAXParseException err )
+ {
+ System.out.println( "** Parsing error" + ", line " + err.getLineNumber() + ", uri " + err.getSystemId() );
+ System.out.println( " " + err.getMessage() );
+ message += "<br><font color=red>TNHMIS - DHIS mapping file is not found</font>";
+ return null;
+ }
+ catch ( SAXException e )
+ {
+ Exception x = e.getException();
+ ((x == null) ? e : x).printStackTrace();
+ message += "<br><font color=red>TNHMIS - DHIS mapping file is not found</font>";
+ return null;
+ }
+ catch ( Throwable t )
+ {
+ t.printStackTrace();
+ message += "<br><font color=red>TNHMIS - DHIS mapping file is not found</font>";
+ return null;
+ }
+
+ return dataElementMap;
+ }
+
+
+ public List<TCSXMLMap> getDataInfo()
+ {
+ List<TCSXMLMap> dataValueList = new ArrayList<TCSXMLMap>();
+
+ //Map<String, String> tcs_dhis_deMap = new HashMap<String, String>( getDataElementMap() );
+ Map<String, String> tcs_dhis_deMap = getDataElementMap();
+ if( tcs_dhis_deMap == null )
+ {
+ return null;
+ }
+
+ try
+ {
+ DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
+ DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
+ Document doc = docBuilder.parse( outputFile );
+ if ( doc == null )
+ {
+ System.out.println( "There is no Data XML file in the DHIS2 Home" );
+ message += "<br><font color=red>TNHMIS - DHIS mapping file is not found</font>";
+ return null;
+ }
+
+ NodeList listOfDataValues = doc.getElementsByTagName( "dataValue" );
+ int totalDataValues = listOfDataValues.getLength();
+
+ for( int s = 0; s < totalDataValues; s++ )
+ {
+ Element element = (Element) listOfDataValues.item( s );
+ String tcsDataElement = element.getAttribute( "dataElement" );
+ String orgunitCode = element.getAttribute( "source" );
+ String tscPeriod = element.getAttribute( "period" );
+ String dataValue = element.getAttribute( "value" );
+ String dhisDataElement = tcs_dhis_deMap.get( tcsDataElement );
+
+ if( dhisDataElement != null && dataValue != null && !dataValue.trim().equalsIgnoreCase( "" ) )
+ {
+ TCSXMLMap tcsDataValue = new TCSXMLMap( tcsDataElement, dhisDataElement, orgunitCode, tscPeriod, dataValue );
+ dataValueList.add( tcsDataValue );
+ }
+ }// end of for loop with s var
+ }// try block end
+ catch ( SAXParseException err )
+ {
+ System.out.println( "** Parsing error" + ", line " + err.getLineNumber() + ", uri " + err.getSystemId() );
+ System.out.println( " " + err.getMessage() );
+ message += "<br><font color=red>"+ fileName +" is not proper format, please generate XML File from TNHMIS and try again</font>";
+ return null;
+ }
+ catch ( SAXException e )
+ {
+ Exception x = e.getException();
+ ((x == null) ? e : x).printStackTrace();
+ message += "<br><font color=red>"+ fileName +" is not proper format, please generate XML File from TNHMIS and try again</font>";
+ return null;
+ }
+ catch ( Throwable t )
+ {
+ t.printStackTrace();
+ message += "<br><font color=red>"+ fileName +" is not proper format, please generate XML File from TNHMIS and try again</font>";
+ return null;
+ }
+
+ return dataValueList;
+ }
+
+}
\ No newline at end of file
=== added file 'local/in/dhis-web-excelimport/src/main/java/org/hisp/dhis/excelimport/util/ExcelImport_DeCode.java'
--- local/in/dhis-web-excelimport/src/main/java/org/hisp/dhis/excelimport/util/ExcelImport_DeCode.java 1970-01-01 00:00:00 +0000
+++ local/in/dhis-web-excelimport/src/main/java/org/hisp/dhis/excelimport/util/ExcelImport_DeCode.java 2011-04-15 11:42:21 +0000
@@ -0,0 +1,87 @@
+package org.hisp.dhis.excelimport.util;
+
+import java.io.Serializable;
+
+public class ExcelImport_DeCode implements Serializable
+{
+ /**
+ * Sheet number
+ */
+ private int sheetno;
+
+ /**
+ * Row number
+ */
+ private int rowno;
+
+ /**
+ * Column number
+ */
+ private int colno;
+
+ /**
+ * Formula to calculate the values.
+ */
+ private String expression;
+
+ // -------------------------------------------------------------------------
+ // Contructors
+ // -------------------------------------------------------------------------
+ public ExcelImport_DeCode()
+ {
+
+ }
+
+ public ExcelImport_DeCode( int sheetno, int rowno, int colno, String expression )
+ {
+ this.sheetno = sheetno;
+ this.rowno = rowno;
+ this.colno = colno;
+ this.expression = expression;
+ }
+
+ // -------------------------------------------------------------------------
+ // Getters and setters
+ // -------------------------------------------------------------------------
+
+ public int getSheetno()
+ {
+ return sheetno;
+ }
+
+ public void setSheetno( int sheetno )
+ {
+ this.sheetno = sheetno;
+ }
+
+ public int getRowno()
+ {
+ return rowno;
+ }
+
+ public void setRowno( int rowno )
+ {
+ this.rowno = rowno;
+ }
+
+ public int getColno()
+ {
+ return colno;
+ }
+
+ public void setColno( int colno )
+ {
+ this.colno = colno;
+ }
+
+ public String getExpression()
+ {
+ return expression;
+ }
+
+ public void setExpression( String expression )
+ {
+ this.expression = expression;
+ }
+
+}
=== added file 'local/in/dhis-web-excelimport/src/main/java/org/hisp/dhis/excelimport/util/ExcelImport_Header.java'
--- local/in/dhis-web-excelimport/src/main/java/org/hisp/dhis/excelimport/util/ExcelImport_Header.java 1970-01-01 00:00:00 +0000
+++ local/in/dhis-web-excelimport/src/main/java/org/hisp/dhis/excelimport/util/ExcelImport_Header.java 2011-04-15 11:42:21 +0000
@@ -0,0 +1,93 @@
+package org.hisp.dhis.excelimport.util;
+
+import java.io.Serializable;
+
+public class ExcelImport_Header implements Serializable
+{
+ public static final String HEADER_PERIOD = "PERIOD";
+ public static final String HEADER_FINANCIALYEAR = "FINANCIAL_YEAR";
+ public static final String HEADER_FORMAT = "FORMAT";
+ public static final String HEADER_FACILITY_PARENT = "FACILITY_PARENT";
+ public static final String HEADER_PERIODICITY = "PERIODICITY";
+
+ /**
+ * Sheet number
+ */
+ private int sheetno;
+
+ /**
+ * Row number
+ */
+ private int rowno;
+
+ /**
+ * Column number
+ */
+ private int colno;
+
+ /**
+ * Formula to calculate the values.
+ */
+ private String expression;
+
+ // -------------------------------------------------------------------------
+ // Contructors
+ // -------------------------------------------------------------------------
+ public ExcelImport_Header()
+ {
+
+ }
+
+ public ExcelImport_Header( int sheetno, int rowno, int colno, String expression )
+ {
+ this.sheetno = sheetno;
+ this.rowno = rowno;
+ this.colno = colno;
+ this.expression = expression;
+ }
+
+ // -------------------------------------------------------------------------
+ // Getters and setters
+ // -------------------------------------------------------------------------
+
+ public int getSheetno()
+ {
+ return sheetno;
+ }
+
+ public void setSheetno( int sheetno )
+ {
+ this.sheetno = sheetno;
+ }
+
+ public int getRowno()
+ {
+ return rowno;
+ }
+
+ public void setRowno( int rowno )
+ {
+ this.rowno = rowno;
+ }
+
+ public int getColno()
+ {
+ return colno;
+ }
+
+ public void setColno( int colno )
+ {
+ this.colno = colno;
+ }
+
+ public String getExpression()
+ {
+ return expression;
+ }
+
+ public void setExpression( String expression )
+ {
+ this.expression = expression;
+ }
+
+}
=== added file 'local/in/dhis-web-excelimport/src/main/java/org/hisp/dhis/excelimport/util/PortalImportSheet.java'
--- local/in/dhis-web-excelimport/src/main/java/org/hisp/dhis/excelimport/util/PortalImportSheet.java 1970-01-01 00:00:00 +0000
+++ local/in/dhis-web-excelimport/src/main/java/org/hisp/dhis/excelimport/util/PortalImportSheet.java 2011-04-15 11:42:21 +0000
@@ -0,0 +1,144 @@
+package org.hisp.dhis.excelimport.util;
+
+import java.io.Serializable;
+
+public class PortalImportSheet implements Serializable
+{
+ private String xmlTemplateName;
+ private String displayName;
+ private String periodicity;
+ private String proforma;
+ private String checkerTemplateName;
+ private String checkerRangeForHeader;
+ private String checkerRangeForData;
+ private String datasetId;
+ private String orgunitGroupId;
+ private String facilityStart;
+
+ // -------------------------------------------------------------------------
+ // Constructors
+ // -------------------------------------------------------------------------
+ public PortalImportSheet()
+ {
+
+ }
+
+ public PortalImportSheet( String xmlTemplateName, String displayName, String periodicity, String proforma, String checkerTemplateName, String checkerRangeForHeader, String checkerRangeForData, String datasetId, String orgunitGroupId, String facilityStart )
+ {
+ this.xmlTemplateName = xmlTemplateName;
+ this.displayName = displayName;
+ this.periodicity = periodicity;
+ this.proforma = proforma;
+ this.checkerTemplateName = checkerTemplateName;
+ this.checkerRangeForHeader = checkerRangeForHeader;
+ this.checkerRangeForData = checkerRangeForData;
+ this.datasetId = datasetId;
+ this.orgunitGroupId = orgunitGroupId;
+ this.facilityStart = facilityStart;
+ }
+
+ // -------------------------------------------------------------------------
+ // Getters and setters
+ // -------------------------------------------------------------------------
+
+ public String getXmlTemplateName()
+ {
+ return xmlTemplateName;
+ }
+
+ public void setXmlTemplateName( String xmlTemplateName )
+ {
+ this.xmlTemplateName = xmlTemplateName;
+ }
+
+ public String getDisplayName()
+ {
+ return displayName;
+ }
+
+ public void setDisplayName( String displayName )
+ {
+ this.displayName = displayName;
+ }
+
+ public String getPeriodicity()
+ {
+ return periodicity;
+ }
+
+ public void setPeriodicity( String periodicity )
+ {
+ this.periodicity = periodicity;
+ }
+
+ public String getProforma()
+ {
+ return proforma;
+ }
+
+ public void setProforma( String proforma )
+ {
+ this.proforma = proforma;
+ }
+
+ public String getCheckerTemplateName()
+ {
+ return checkerTemplateName;
+ }
+
+ public void setCheckerTemplateName( String checkerTemplateName )
+ {
+ this.checkerTemplateName = checkerTemplateName;
+ }
+
+ public String getCheckerRangeForHeader()
+ {
+ return checkerRangeForHeader;
+ }
+
+ public void setCheckerRangeForHeader( String checkerRangeForHeader )
+ {
+ this.checkerRangeForHeader = checkerRangeForHeader;
+ }
+
+ public String getCheckerRangeForData()
+ {
+ return checkerRangeForData;
+ }
+
+ public void setCheckerRangeForData( String checkerRangeForData )
+ {
+ this.checkerRangeForData = checkerRangeForData;
+ }
+
+ public String getDatasetId()
+ {
+ return datasetId;
+ }
+
+ public void setDatasetId( String datasetId )
+ {
+ this.datasetId = datasetId;
+ }
+
+ public String getOrgunitGroupId()
+ {
+ return orgunitGroupId;
+ }
+
+ public void setOrgunitGroupId( String orgunitGroupId )
+ {
+ this.orgunitGroupId = orgunitGroupId;
+ }
+
+ public String getFacilityStart()
+ {
+ return facilityStart;
+ }
+
+ public void setFacilityStart( String facilityStart )
+ {
+ this.facilityStart = facilityStart;
+ }
+
+}
=== modified file 'local/in/dhis-web-excelimport/src/main/java/org/hisp/dhis/excelimport/util/ReportService.java'
--- local/in/dhis-web-excelimport/src/main/java/org/hisp/dhis/excelimport/util/ReportService.java 2010-12-29 16:17:28 +0000
+++ local/in/dhis-web-excelimport/src/main/java/org/hisp/dhis/excelimport/util/ReportService.java 2011-04-15 11:42:21 +0000
@@ -1,989 +1,1031 @@
-package org.hisp.dhis.excelimport.util;
-
-import java.sql.Statement;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Date;
-import java.util.Iterator;
-import java.util.List;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import org.hisp.dhis.aggregation.AggregationService;
-import org.hisp.dhis.config.ConfigurationService;
-import org.hisp.dhis.config.Configuration_IN;
-import org.hisp.dhis.dataelement.DataElement;
-import org.hisp.dhis.dataelement.DataElementCategoryOptionCombo;
-import org.hisp.dhis.dataelement.DataElementCategoryService;
-import org.hisp.dhis.dataelement.DataElementService;
-import org.hisp.dhis.dataset.DataSet;
-import org.hisp.dhis.dataset.DataSetService;
-import org.hisp.dhis.datavalue.DataValue;
-import org.hisp.dhis.datavalue.DataValueService;
-import org.hisp.dhis.indicator.Indicator;
-import org.hisp.dhis.indicator.IndicatorService;
-import org.hisp.dhis.organisationunit.OrganisationUnit;
-import org.hisp.dhis.period.Period;
-import org.hisp.dhis.period.PeriodService;
-import org.hisp.dhis.period.PeriodType;
-import org.hisp.dhis.system.util.MathUtils;
-import org.springframework.jdbc.core.JdbcTemplate;
-import org.springframework.jdbc.support.rowset.SqlRowSet;
-
-public class ReportService
-{
-
- public static final String KEY_RAFOLDER = "reportfolder";
-
- public static final String NULL_REPLACEMENT = "0";
-
- // -------------------------------------------------------------------------
- // Dependencies
- // -------------------------------------------------------------------------
-
- private PeriodService periodService;
-
- public void setPeriodService( PeriodService periodService )
- {
- this.periodService = periodService;
- }
-
- /*
- * private DBConnection dbConnection;
- *
- * public void setDbConnection( DBConnection dbConnection ) {
- * this.dbConnection = dbConnection; }
- */
-
- private JdbcTemplate jdbcTemplate;
-
- public void setJdbcTemplate( JdbcTemplate jdbcTemplate )
- {
- this.jdbcTemplate = jdbcTemplate;
- }
-
- private DataElementService dataElementService;
-
- public void setDataElementService( DataElementService dataElementService )
- {
- this.dataElementService = dataElementService;
- }
-
- private AggregationService aggregationService;
-
- public void setAggregationService( AggregationService aggregationService )
- {
- this.aggregationService = aggregationService;
- }
-
- private DataElementCategoryService dataElementCategoryService;
-
- public void setDataElementCategoryService( DataElementCategoryService dataElementCategoryService )
- {
- this.dataElementCategoryService = dataElementCategoryService;
- }
-
- private DataValueService dataValueService;
-
- public void setDataValueService( DataValueService dataValueService )
- {
- this.dataValueService = dataValueService;
- }
-
- private DataSetService dataSetService;
-
- public void setDataSetService( DataSetService dataSetService )
- {
- this.dataSetService = dataSetService;
- }
-
- private IndicatorService indicatorService;
-
- public void setIndicatorService( IndicatorService indicatorService )
- {
- this.indicatorService = indicatorService;
- }
-
- private ConfigurationService configurationService;
-
- public void setConfigurationService( ConfigurationService configurationService )
- {
- this.configurationService = configurationService;
- }
-
- // -------------------------------------------------------------------------
- // Services
- // -------------------------------------------------------------------------
-
- public List<Period> getMonthlyPeriods( Date start, Date end )
- {
- List<Period> periodList = new ArrayList<Period>( periodService.getPeriodsBetweenDates( start, end ) );
- PeriodType monthlyPeriodType = PeriodType.getByNameIgnoreCase( "monthly" );
-
- List<Period> monthlyPeriodList = new ArrayList<Period>();
-
- for ( Period period : periodList )
- {
- if ( period.getPeriodType().getId() == monthlyPeriodType.getId() )
- {
- monthlyPeriodList.add( period );
- }
- }
- return monthlyPeriodList;
- }
-
- /*
- * Returns the Period Object of the given date For ex:- if the month is 3,
- * year is 2006 and periodType Object of type Monthly then it returns the
- * corresponding Period Object
- */
- public Period getPeriodByMonth( int month, int year, PeriodType periodType )
- {
- int monthDays[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
-
- Calendar cal = Calendar.getInstance();
- cal.set( year, month, 1, 0, 0, 0 );
- Date firstDay = new Date( cal.getTimeInMillis() );
-
- if ( periodType.getName().equals( "Monthly" ) )
- {
- cal.set( year, month, 1, 0, 0, 0 );
- if ( year % 4 == 0 )
- {
- cal.set( Calendar.DAY_OF_MONTH, monthDays[month] + 1 );
- }
- else
- {
- cal.set( Calendar.DAY_OF_MONTH, monthDays[month] );
- }
- }
- else if ( periodType.getName().equals( "Yearly" ) )
- {
- cal.set( year, Calendar.DECEMBER, 31 );
- }
- Date lastDay = new Date( cal.getTimeInMillis() );
- System.out.println( lastDay.toString() );
- Period newPeriod = new Period();
- newPeriod = periodService.getPeriod( firstDay, lastDay, periodType );
- return newPeriod;
- }
-
- public List<Integer> getLinelistingRecordNos( OrganisationUnit organisationUnit, Period period, String lltype )
- {
- List<Integer> recordNosList = new ArrayList<Integer>();
-
- // Connection con = dbConnection.openConnection();
-
- Statement st = null;
-
- // ResultSet rs1 = null;
-
- String query = "";
-
- int dataElementid = 1020;
-
- /*
- * if( lltype.equalsIgnoreCase( "lllivebirth" ) ) dataElementid =
- * LLDataSets.LLB_CHILD_NAME; else if( lltype.equalsIgnoreCase(
- * "lllivebirth" ) ) dataElementid = LLDataSets.LLD_CHILD_NAME; else if(
- * lltype.equalsIgnoreCase( "lllivebirth" ) ) dataElementid =
- * LLDataSets.LLMD_MOTHER_NAME;
- */
-
- if ( lltype.equalsIgnoreCase( "lllivebirth-l4" ) || lltype.equalsIgnoreCase( "lllivebirth-l5" )
- || lltype.equalsIgnoreCase( "lllivebirth-l6" ) )
- dataElementid = 1020;
- else if ( lltype.equalsIgnoreCase( "lldeath-l4" ) || lltype.equalsIgnoreCase( "lldeath-l5" )
- || lltype.equalsIgnoreCase( "lldeath-l6" ) )
- dataElementid = 1027;
- else if ( lltype.equalsIgnoreCase( "llmaternaldeath-l4" ) || lltype.equalsIgnoreCase( "llmaternaldeath-l5" )
- || lltype.equalsIgnoreCase( "llmaternaldeath-l6" ) )
- dataElementid = 1032;
-
- try
- {
- // st = con.createStatement();
-
- query = "SELECT recordno FROM lldatavalue WHERE dataelementid = " + dataElementid + " AND periodid = "
- + period.getId() + " AND sourceid = " + organisationUnit.getId();
- // rs1 = st.executeQuery( query );
-
- SqlRowSet rs1 = jdbcTemplate.queryForRowSet( query );
-
- while ( rs1.next() )
- {
- recordNosList.add( rs1.getInt( 1 ) );
- }
-
- Collections.sort( recordNosList );
- }
- catch ( Exception e )
- {
- System.out.println( "SQL Exception : " + e.getMessage() );
- return null;
- }
- /*
- * finally { try { SqlRowSet rs1;
- *
- * if ( st != null ) st.close(); if ( rs1 != null ) rs1.close();
- *
- * if ( con != null ) con.close(); } catch ( Exception e ) {
- * System.out.println( "SQL Exception : " + e.getMessage() ); return
- * null; } }
- */// finally block end
-
- return recordNosList;
- }
-
- public String getRAFolderName()
- {
- // Connection con = dbConnection.openConnection();
-
- // Statement st = null;
-
- // ResultSet rs1 = null;
-
- String raFolderName = "ra_national";
-
- try
- {
- // st = con.createStatement();
-
- /*
- * query = "SELECT mvalue FROM maintenancein WHERE mkey LIKE '" +
- * KEY_RAFOLDER + "'"; //rs1 = st.executeQuery( query );
- *
- * SqlRowSet rs1 = jdbcTemplate.queryForRowSet( query );
- *
- * if ( rs1.next() ) { raFolderName = rs1.getString( 1 ); }
- */
-
- raFolderName = configurationService.getConfigurationByKey( Configuration_IN.KEY_REPORTFOLDER ).getValue();
-
- }
- catch ( Exception e )
- {
- System.out.println( "Exception : " + e.getMessage() );
- return null;
- }
-
- return raFolderName;
-
- }
-
- /*
- * Returns the PeriodType Object for selected DataElement, If no PeriodType
- * is found then by default returns Monthly Period type
- */
- public PeriodType getDataElementPeriodType( DataElement de )
- {
- List<DataSet> dataSetList = new ArrayList<DataSet>( dataSetService.getAllDataSets() );
- Iterator it = dataSetList.iterator();
- while ( it.hasNext() )
- {
- DataSet ds = (DataSet) it.next();
- List<DataElement> dataElementList = new ArrayList<DataElement>( ds.getDataElements() );
- if ( dataElementList.contains( de ) )
- {
- return ds.getPeriodType();
- }
- }
-
- return null;
-
- } // getDataElementPeriodType end
-
- private String getResultDataValue( String formula, Date startDate, Date endDate, OrganisationUnit organisationUnit )
- {
- try
- {
- // System.out.println( "expression : " + formula + " ***** " +
- // String.valueOf( startDate ) + " **** "
- // + String.valueOf( endDate ) );
-
- int deFlag1 = 0;
- int deFlag2 = 0;
- 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 );
-
- DataElement dataElement = dataElementService.getDataElement( dataElementId );
- DataElementCategoryOptionCombo optionCombo = dataElementCategoryService
- .getDataElementCategoryOptionCombo( optionComboId );
-
- if ( dataElement == null || optionCombo == null )
- {
- replaceString = "";
- matcher.appendReplacement( buffer, replaceString );
- continue;
- }
- if ( dataElement.getType().equalsIgnoreCase( "int" ) )
- {
- Double aggregatedValue = aggregationService.getAggregatedDataValue( dataElement, optionCombo,
- startDate, endDate, organisationUnit );
- if ( aggregatedValue == null )
- {
- replaceString = NULL_REPLACEMENT;
- }
- else
- {
- replaceString = String.valueOf( aggregatedValue );
-
- deFlag2 = 1;
- }
-
- }
- else
- {
- deFlag1 = 1;
- PeriodType dePeriodType = getDataElementPeriodType( dataElement );
- List<Period> periodList = new ArrayList<Period>( periodService.getIntersectingPeriodsByPeriodType(
- dePeriodType, startDate, endDate ) );
- Period tempPeriod = new Period();
- if ( periodList == null || periodList.isEmpty() )
- {
- replaceString = "";
- matcher.appendReplacement( buffer, replaceString );
- continue;
- }
- else
- {
- tempPeriod = (Period) periodList.get( 0 );
- }
-
- DataValue dataValue = dataValueService.getDataValue( organisationUnit, dataElement, tempPeriod,
- optionCombo );
-
- if ( dataValue != null )
- {
- // Works for both text and boolean data types
-
- replaceString = dataValue.getValue();
- }
-
- else
- replaceString = "";
-
- if ( replaceString == null )
- replaceString = "";
- }
- matcher.appendReplacement( buffer, replaceString );
-
- resultValue = replaceString;
- }
-
- matcher.appendTail( buffer );
-
- if ( deFlag1 == 0 )
- {
-
- double d = 0.0;
- try
- {
- d = MathUtils.calculateExpression( buffer.toString() );
- }
- catch ( Exception e )
- {
- d = 0.0;
- resultValue = "";
- }
- if ( d == -1 )
- {
- d = 0.0;
- resultValue = "";
- }
- else
- {
-
- // This is to display financial data as it is like 2.1476838
- resultValue = "" + d;
-
- // These lines are to display financial data that do not
- // have decimals
- d = d * 10;
-
- if ( d % 10 == 0 )
- {
- resultValue = "" + (int) d / 10;
- }
-
- d = d / 10;
-
- // These line are to display non financial data that do not
- // require decimals
- // if ( !(reportModelTB.equalsIgnoreCase( "STATIC-FINANCIAL"
- // )) )
- resultValue = "" + (int) d;
-
- // if ( resultValue.equalsIgnoreCase( "0" ) )
- // {
- // resultValue = "";
- // }
- }
-
- }
- else
- {
- resultValue = buffer.toString();
- }
-
- if ( resultValue.equalsIgnoreCase( "" ) )
- resultValue = " ";
-
- return resultValue;
- }
- catch ( NumberFormatException ex )
- {
- throw new RuntimeException( "Illegal DataElement id", ex );
- }
- }
-
- private String getIndividualResultDataValue( String formula, Date startDate, Date endDate,
- OrganisationUnit organisationUnit )
- {
- try
- {
- int deFlag1 = 0;
- int deFlag2 = 0;
- Pattern pattern = Pattern.compile( "(\\[\\d+\\.\\d+\\])" );
-
- Matcher matcher = pattern.matcher( formula );
- StringBuffer buffer = new StringBuffer();
-
- String resultValue = "";
- boolean valueDoesNotExist = true;
-
- 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 );
-
- DataElement dataElement = dataElementService.getDataElement( dataElementId );
- DataElementCategoryOptionCombo optionCombo = dataElementCategoryService
- .getDataElementCategoryOptionCombo( optionComboId );
-
- if ( dataElement == null || optionCombo == null )
- {
- replaceString = "";
- matcher.appendReplacement( buffer, replaceString );
- continue;
- }
- if ( dataElement.getType().equalsIgnoreCase( "int" ) )
- {
-
- PeriodType dePeriodType = getDataElementPeriodType( dataElement );
- List<Period> periodList = new ArrayList<Period>( periodService.getIntersectingPeriodsByPeriodType(
- dePeriodType, startDate, endDate ) );
-
- if ( periodList == null || periodList.isEmpty() )
- {
- replaceString = "";
- matcher.appendReplacement( buffer, replaceString );
- continue;
- }
- else
- {
-
- double aggregatedValue = 0.0;
- for ( Period tempPeriod : periodList )
- {
- DataValue dataValue = dataValueService.getDataValue( organisationUnit, dataElement,
- tempPeriod, optionCombo );
-
- if ( dataValue != null )
- {
- aggregatedValue += Double.parseDouble( dataValue.getValue() );
-
- valueDoesNotExist = false;
- }
- }
-
- replaceString = String.valueOf( aggregatedValue );
-
- deFlag2 = 1;
- }
-
- }
- else
- {
- deFlag1 = 1;
- PeriodType dePeriodType = getDataElementPeriodType( dataElement );
- List<Period> periodList = new ArrayList<Period>( periodService.getIntersectingPeriodsByPeriodType(
- dePeriodType, startDate, endDate ) );
- Period tempPeriod = new Period();
- if ( periodList == null || periodList.isEmpty() )
- {
- replaceString = "";
- matcher.appendReplacement( buffer, replaceString );
- continue;
- }
- else
- {
- tempPeriod = (Period) periodList.get( 0 );
- }
-
- DataValue dataValue = dataValueService.getDataValue( organisationUnit, dataElement, tempPeriod,
- optionCombo );
-
- if ( dataValue != null )
- {
- // Works for both text and boolean data types
-
- replaceString = dataValue.getValue();
- valueDoesNotExist = false;
- }
-
- else
- replaceString = "";
-
- if ( replaceString == null )
- replaceString = "";
- }
- matcher.appendReplacement( buffer, replaceString );
-
- resultValue = replaceString;
- }
-
- matcher.appendTail( buffer );
-
- if ( deFlag1 == 0 )
- {
- double d = 0.0;
- try
- {
- d = MathUtils.calculateExpression( buffer.toString() );
- }
- catch ( Exception e )
- {
- d = 0.0;
-
- resultValue = "";
- }
- if ( d == -1 )
- {
- d = 0.0;
-
- resultValue = "";
- }
- else
- {
- // This is to display financial data as it is like 2.1476838
- resultValue = "" + d;
-
- // These lines are to display financial data that do not
- // have decimals
- d = d * 10;
-
- if ( d % 10 == 0 )
- {
- resultValue = "" + (int) d / 10;
- }
-
- d = d / 10;
-
- // These line are to display non financial data that do not
- // require decimals
- // if ( !(reportModelTB.equalsIgnoreCase( "STATIC-FINANCIAL"
- // )) )
- resultValue = "" + (int) d;
-
- // if ( resultValue.equalsIgnoreCase( "0" ) )
- // {
- // resultValue = "";
- // }
- }
- }
- else
- {
- resultValue = buffer.toString();
- }
-
- if ( valueDoesNotExist )
- resultValue = " ";
-
- if ( resultValue.equalsIgnoreCase( "" ) )
- resultValue = " ";
-
- return resultValue;
- }
- catch ( NumberFormatException ex )
- {
- throw new RuntimeException( "Illegal DataElement id", ex );
- }
- }
-
- private String getBooleanDataValue( String formula, Date startDate, Date endDate, OrganisationUnit organisationUnit )
- {
- try
- {
- int deFlag1 = 0;
- int deFlag2 = 0;
- Pattern pattern = Pattern.compile( "(\\[\\d+\\.\\d+\\])" );
-
- Matcher matcher = pattern.matcher( formula );
- StringBuffer buffer = new StringBuffer();
-
- 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 );
-
- DataElement dataElement = dataElementService.getDataElement( dataElementId );
- DataElementCategoryOptionCombo optionCombo = dataElementCategoryService
- .getDataElementCategoryOptionCombo( optionComboId );
-
- if ( dataElement == null || optionCombo == null )
- {
- replaceString = "";
- matcher.appendReplacement( buffer, replaceString );
- continue;
- }
-
- if ( dataElement.getType().equalsIgnoreCase( "bool" ) )
- {
- deFlag1 = 1;
- PeriodType dePeriodType = getDataElementPeriodType( dataElement );
- List<Period> periodList = new ArrayList<Period>( periodService.getIntersectingPeriodsByPeriodType(
- dePeriodType, startDate, endDate ) );
- Period tempPeriod = new Period();
- if ( periodList == null || periodList.isEmpty() )
- {
- replaceString = "";
- matcher.appendReplacement( buffer, replaceString );
- continue;
- }
- else
- {
- tempPeriod = (Period) periodList.get( 0 );
- }
-
- DataValue dataValue = dataValueService.getDataValue( organisationUnit, dataElement, tempPeriod,
- optionCombo );
-
- if ( dataValue != null )
- {
- // Works for both text and boolean data types
-
- if ( dataValue.getValue().equalsIgnoreCase( "true" ) )
- {
- replaceString = "Yes";
- }
- else if ( dataValue.getValue().equalsIgnoreCase( "false" ) )
- {
- replaceString = "No";
- }
- else
- {
- replaceString = dataValue.getValue();
- }
- }
-
- else
- {
- replaceString = "";
- }
-
- }
- else
- {
- Double aggregatedValue = aggregationService.getAggregatedDataValue( dataElement, optionCombo,
- startDate, endDate, organisationUnit );
- if ( aggregatedValue == null )
- {
- replaceString = NULL_REPLACEMENT;
- }
- else
- {
- replaceString = String.valueOf( aggregatedValue );
-
- deFlag2 = 1;
- }
- }
- matcher.appendReplacement( buffer, replaceString );
- }
-
- matcher.appendTail( buffer );
-
- String resultValue = "";
- if ( deFlag1 == 0 )
- {
- double d = 0.0;
- try
- {
- d = MathUtils.calculateExpression( buffer.toString() );
- }
- catch ( Exception e )
- {
- d = 0.0;
- }
- if ( d == -1 )
- {
- d = 0.0;
- }
- else
- {
- d = Math.round( d * Math.pow( 10, 1 ) ) / Math.pow( 10, 1 );
- resultValue = "" + (int) d;
- }
-
- if ( deFlag2 == 0 )
- {
- resultValue = " ";
- }
- }
- else
- {
- resultValue = buffer.toString();
- }
- return resultValue;
- }
- catch ( NumberFormatException ex )
- {
- throw new RuntimeException( "Illegal DataElement id", ex );
- }
- }
-
- private String getResultIndicatorValue( String formula, Date startDate, Date endDate,
- OrganisationUnit organisationUnit )
- {
- try
- {
-
- int deFlag1 = 0;
- int deFlag2 = 0;
- Pattern pattern = Pattern.compile( "(\\[\\d+\\.\\d+\\])" );
-
- Matcher matcher = pattern.matcher( formula );
- StringBuffer buffer = new StringBuffer();
-
- while ( matcher.find() )
- {
- String replaceString = matcher.group();
-
- replaceString = replaceString.replaceAll( "[\\[\\]]", "" );
-
- replaceString = replaceString.substring( 0, replaceString.indexOf( '.' ) );
-
- int indicatorId = Integer.parseInt( replaceString );
-
- Indicator indicator = indicatorService.getIndicator( indicatorId );
-
- if ( indicator == null )
- {
- replaceString = "";
- matcher.appendReplacement( buffer, replaceString );
- continue;
-
- }
-
- Double aggregatedValue = aggregationService.getAggregatedIndicatorValue( indicator, startDate, endDate,
- organisationUnit );
-
- if ( aggregatedValue == null )
- {
- replaceString = NULL_REPLACEMENT;
- }
- else
- {
- replaceString = String.valueOf( aggregatedValue );
- deFlag2 = 1;
- }
- matcher.appendReplacement( buffer, replaceString );
- }
-
- matcher.appendTail( buffer );
-
- String resultValue = "";
- if ( deFlag1 == 0 )
- {
- double d = 0.0;
- try
- {
- d = MathUtils.calculateExpression( buffer.toString() );
- }
- catch ( Exception e )
- {
- d = 0.0;
- }
- if ( d == -1 )
- d = 0.0;
- else
- {
- d = Math.round( d * Math.pow( 10, 1 ) ) / Math.pow( 10, 1 );
- resultValue = "" + d;
- }
-
- if ( deFlag2 == 0 )
- {
- resultValue = " ";
- }
- }
- else
- {
- resultValue = buffer.toString();
- }
- return resultValue;
- }
- catch ( NumberFormatException ex )
- {
- throw new RuntimeException( "Illegal DataElement id", ex );
- }
- }
-
- private String getIndividualResultIndicatorValue( String formula, Date startDate, Date endDate,
- OrganisationUnit organisationUnit )
- {
- try
- {
-
- int deFlag1 = 0;
- int deFlag2 = 0;
- Pattern pattern = Pattern.compile( "(\\[\\d+\\.\\d+\\])" );
-
- Matcher matcher = pattern.matcher( formula );
- StringBuffer buffer = new StringBuffer();
-
- while ( matcher.find() )
- {
- String replaceString = matcher.group();
-
- replaceString = replaceString.replaceAll( "[\\[\\]]", "" );
-
- replaceString = replaceString.substring( 0, replaceString.indexOf( '.' ) );
-
- int indicatorId = Integer.parseInt( replaceString );
-
- Indicator indicator = indicatorService.getIndicator( indicatorId );
-
- if ( indicator == null )
- {
- replaceString = "";
- matcher.appendReplacement( buffer, replaceString );
- continue;
-
- }
-
- String numeratorExp = indicator.getNumerator();
- String denominatorExp = indicator.getDenominator();
- int indicatorFactor = indicator.getIndicatorType().getFactor();
- String numeratorVal = getIndividualResultDataValue( numeratorExp, startDate, endDate, organisationUnit );
- String denominatorVal = getIndividualResultDataValue( denominatorExp, startDate, endDate,
- organisationUnit );
-
- double numeratorValue;
- try
- {
- numeratorValue = Double.parseDouble( numeratorVal );
- }
- catch ( Exception e )
- {
- System.out.println( "Exception while getting Numerator : " + numeratorExp + " for Indicaotr "
- + indicator.getName() );
- numeratorValue = 0.0;
- }
-
- double denominatorValue;
- try
- {
- denominatorValue = Double.parseDouble( denominatorVal );
- }
- catch ( Exception e )
- {
- System.out.println( "Exception while getting Deniminator : " + denominatorExp + " for Indicaotr "
- + indicator.getName() );
- denominatorValue = 1.0;
- }
-
- double aggregatedValue;
- try
- {
- aggregatedValue = (numeratorValue / denominatorValue) * indicatorFactor;
- }
- catch ( Exception e )
- {
- System.out.println( "Exception while calculating Indicator value for Indicaotr "
- + indicator.getName() );
- aggregatedValue = 0.0;
- }
-
- replaceString = String.valueOf( aggregatedValue );
- deFlag2 = 1;
-
- matcher.appendReplacement( buffer, replaceString );
- }
-
- matcher.appendTail( buffer );
-
- String resultValue = "";
- if ( deFlag1 == 0 )
- {
- double d = 0.0;
- try
- {
- d = MathUtils.calculateExpression( buffer.toString() );
- }
- catch ( Exception e )
- {
- d = 0.0;
- }
- if ( d == -1 )
- d = 0.0;
- else
- {
- d = Math.round( d * Math.pow( 10, 1 ) ) / Math.pow( 10, 1 );
- resultValue = "" + d;
- }
-
- if ( deFlag2 == 0 )
- {
- resultValue = " ";
- }
- }
- else
- {
- resultValue = buffer.toString();
- }
- return resultValue;
- }
- catch ( NumberFormatException ex )
- {
- throw new RuntimeException( "Illegal DataElement id", ex );
- }
- }
-
-}
+package org.hisp.dhis.excelimport.util;
+
+import java.sql.Statement;
+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.Iterator;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.hisp.dhis.aggregation.AggregationService;
+import org.hisp.dhis.config.ConfigurationService;
+import org.hisp.dhis.config.Configuration_IN;
+import org.hisp.dhis.dataelement.DataElement;
+import org.hisp.dhis.dataelement.DataElementCategoryOptionCombo;
+import org.hisp.dhis.dataelement.DataElementCategoryService;
+import org.hisp.dhis.dataelement.DataElementService;
+import org.hisp.dhis.dataset.DataSet;
+import org.hisp.dhis.dataset.DataSetService;
+import org.hisp.dhis.datavalue.DataValue;
+import org.hisp.dhis.datavalue.DataValueService;
+import org.hisp.dhis.indicator.Indicator;
+import org.hisp.dhis.indicator.IndicatorService;
+import org.hisp.dhis.organisationunit.OrganisationUnit;
+import org.hisp.dhis.period.Period;
+import org.hisp.dhis.period.PeriodService;
+import org.hisp.dhis.period.PeriodType;
+import org.hisp.dhis.system.util.MathUtils;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.jdbc.support.rowset.SqlRowSet;
+
+public class ReportService
+{
+
+ public static final String KEY_RAFOLDER = "reportfolder";
+
+ public static final String NULL_REPLACEMENT = "0";
+
+ // -------------------------------------------------------------------------
+ // Dependencies
+ // -------------------------------------------------------------------------
+
+ private PeriodService periodService;
+
+ public void setPeriodService( PeriodService periodService )
+ {
+ this.periodService = periodService;
+ }
+
+ /*
+ * private DBConnection dbConnection;
+ *
+ * public void setDbConnection( DBConnection dbConnection ) {
+ * this.dbConnection = dbConnection; }
+ */
+
+ private JdbcTemplate jdbcTemplate;
+
+ public void setJdbcTemplate( JdbcTemplate jdbcTemplate )
+ {
+ this.jdbcTemplate = jdbcTemplate;
+ }
+
+ private DataElementService dataElementService;
+
+ public void setDataElementService( DataElementService dataElementService )
+ {
+ this.dataElementService = dataElementService;
+ }
+
+ private AggregationService aggregationService;
+
+ public void setAggregationService( AggregationService aggregationService )
+ {
+ this.aggregationService = aggregationService;
+ }
+
+ private DataElementCategoryService dataElementCategoryService;
+
+ public void setDataElementCategoryService( DataElementCategoryService dataElementCategoryService )
+ {
+ this.dataElementCategoryService = dataElementCategoryService;
+ }
+
+ private DataValueService dataValueService;
+
+ public void setDataValueService( DataValueService dataValueService )
+ {
+ this.dataValueService = dataValueService;
+ }
+
+ private DataSetService dataSetService;
+
+ public void setDataSetService( DataSetService dataSetService )
+ {
+ this.dataSetService = dataSetService;
+ }
+
+ private IndicatorService indicatorService;
+
+ public void setIndicatorService( IndicatorService indicatorService )
+ {
+ this.indicatorService = indicatorService;
+ }
+
+ private ConfigurationService configurationService;
+
+ public void setConfigurationService( ConfigurationService configurationService )
+ {
+ this.configurationService = configurationService;
+ }
+
+ // -------------------------------------------------------------------------
+ // Services
+ // -------------------------------------------------------------------------
+
+ public List<Period> getMonthlyPeriods( Date start, Date end )
+ {
+ List<Period> periodList = new ArrayList<Period>( periodService.getPeriodsBetweenDates( start, end ) );
+ PeriodType monthlyPeriodType = PeriodType.getByNameIgnoreCase( "monthly" );
+
+ List<Period> monthlyPeriodList = new ArrayList<Period>();
+
+ for ( Period period : periodList )
+ {
+ if ( period.getPeriodType().getId() == monthlyPeriodType.getId() )
+ {
+ monthlyPeriodList.add( period );
+ }
+ }
+ return monthlyPeriodList;
+ }
+
+ /*
+ * Returns the Period Object of the given date For ex:- if the month is 3,
+ * year is 2006 and periodType Object of type Monthly then it returns the
+ * corresponding Period Object
+ */
+ public Period getPeriodByMonth( int month, int year, PeriodType periodType )
+ {
+ int monthDays[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
+
+ Calendar cal = Calendar.getInstance();
+ cal.set( year, month, 1, 0, 0, 0 );
+ Date firstDay = new Date( cal.getTimeInMillis() );
+
+ if ( periodType.getName().equals( "Monthly" ) )
+ {
+ cal.set( year, month, 1, 0, 0, 0 );
+ if ( year % 4 == 0 )
+ {
+ cal.set( Calendar.DAY_OF_MONTH, monthDays[month] + 1 );
+ }
+ else
+ {
+ cal.set( Calendar.DAY_OF_MONTH, monthDays[month] );
+ }
+ }
+ else if ( periodType.getName().equals( "Yearly" ) )
+ {
+ cal.set( year, Calendar.DECEMBER, 31 );
+ }
+ Date lastDay = new Date( cal.getTimeInMillis() );
+ System.out.println( lastDay.toString() );
+ Period newPeriod = new Period();
+ newPeriod = periodService.getPeriod( firstDay, lastDay, periodType );
+ return newPeriod;
+ }
+
+ public List<Integer> getLinelistingRecordNos( OrganisationUnit organisationUnit, Period period, String lltype )
+ {
+ List<Integer> recordNosList = new ArrayList<Integer>();
+
+ // Connection con = dbConnection.openConnection();
+
+ Statement st = null;
+
+ // ResultSet rs1 = null;
+
+ String query = "";
+
+ int dataElementid = 1020;
+
+ /*
+ * if( lltype.equalsIgnoreCase( "lllivebirth" ) ) dataElementid =
+ * LLDataSets.LLB_CHILD_NAME; else if( lltype.equalsIgnoreCase(
+ * "lllivebirth" ) ) dataElementid = LLDataSets.LLD_CHILD_NAME; else if(
+ * lltype.equalsIgnoreCase( "lllivebirth" ) ) dataElementid =
+ * LLDataSets.LLMD_MOTHER_NAME;
+ */
+
+ if ( lltype.equalsIgnoreCase( "lllivebirth-l4" ) || lltype.equalsIgnoreCase( "lllivebirth-l5" )
+ || lltype.equalsIgnoreCase( "lllivebirth-l6" ) )
+ dataElementid = 1020;
+ else if ( lltype.equalsIgnoreCase( "lldeath-l4" ) || lltype.equalsIgnoreCase( "lldeath-l5" )
+ || lltype.equalsIgnoreCase( "lldeath-l6" ) )
+ dataElementid = 1027;
+ else if ( lltype.equalsIgnoreCase( "llmaternaldeath-l4" ) || lltype.equalsIgnoreCase( "llmaternaldeath-l5" )
+ || lltype.equalsIgnoreCase( "llmaternaldeath-l6" ) )
+ dataElementid = 1032;
+
+ try
+ {
+ // st = con.createStatement();
+
+ query = "SELECT recordno FROM lldatavalue WHERE dataelementid = " + dataElementid + " AND periodid = "
+ + period.getId() + " AND sourceid = " + organisationUnit.getId();
+ // rs1 = st.executeQuery( query );
+
+ SqlRowSet rs1 = jdbcTemplate.queryForRowSet( query );
+
+ while ( rs1.next() )
+ {
+ recordNosList.add( rs1.getInt( 1 ) );
+ }
+
+ Collections.sort( recordNosList );
+ }
+ catch ( Exception e )
+ {
+ System.out.println( "SQL Exception : " + e.getMessage() );
+ return null;
+ }
+ /*
+ * finally { try { SqlRowSet rs1;
+ *
+ * if ( st != null ) st.close(); if ( rs1 != null ) rs1.close();
+ *
+ * if ( con != null ) con.close(); } catch ( Exception e ) {
+ * System.out.println( "SQL Exception : " + e.getMessage() ); return
+ * null; } }
+ */// finally block end
+
+ return recordNosList;
+ }
+
+ public String getRAFolderName()
+ {
+ // Connection con = dbConnection.openConnection();
+
+ // Statement st = null;
+
+ // ResultSet rs1 = null;
+
+ String raFolderName = "ra_national";
+
+ try
+ {
+ // st = con.createStatement();
+
+ /*
+ * query = "SELECT mvalue FROM maintenancein WHERE mkey LIKE '" +
+ * KEY_RAFOLDER + "'"; //rs1 = st.executeQuery( query );
+ *
+ * SqlRowSet rs1 = jdbcTemplate.queryForRowSet( query );
+ *
+ * if ( rs1.next() ) { raFolderName = rs1.getString( 1 ); }
+ */
+
+ raFolderName = configurationService.getConfigurationByKey( Configuration_IN.KEY_REPORTFOLDER ).getValue();
+
+ }
+ catch ( Exception e )
+ {
+ System.out.println( "Exception : " + e.getMessage() );
+ return null;
+ }
+
+ return raFolderName;
+
+ }
+
+ /*
+ * Returns the PeriodType Object for selected DataElement, If no PeriodType
+ * is found then by default returns Monthly Period type
+ */
+ public PeriodType getDataElementPeriodType( DataElement de )
+ {
+ List<DataSet> dataSetList = new ArrayList<DataSet>( dataSetService.getAllDataSets() );
+ Iterator it = dataSetList.iterator();
+ while ( it.hasNext() )
+ {
+ DataSet ds = (DataSet) it.next();
+ List<DataElement> dataElementList = new ArrayList<DataElement>( ds.getDataElements() );
+ if ( dataElementList.contains( de ) )
+ {
+ return ds.getPeriodType();
+ }
+ }
+
+ return null;
+
+ } // getDataElementPeriodType end
+
+ private String getResultDataValue( String formula, Date startDate, Date endDate, OrganisationUnit organisationUnit )
+ {
+ try
+ {
+ // System.out.println( "expression : " + formula + " ***** " +
+ // String.valueOf( startDate ) + " **** "
+ // + String.valueOf( endDate ) );
+
+ int deFlag1 = 0;
+ int deFlag2 = 0;
+ 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 );
+
+ DataElement dataElement = dataElementService.getDataElement( dataElementId );
+ DataElementCategoryOptionCombo optionCombo = dataElementCategoryService
+ .getDataElementCategoryOptionCombo( optionComboId );
+
+ if ( dataElement == null || optionCombo == null )
+ {
+ replaceString = "";
+ matcher.appendReplacement( buffer, replaceString );
+ continue;
+ }
+ if ( dataElement.getType().equalsIgnoreCase( "int" ) )
+ {
+ Double aggregatedValue = aggregationService.getAggregatedDataValue( dataElement, optionCombo,
+ startDate, endDate, organisationUnit );
+ if ( aggregatedValue == null )
+ {
+ replaceString = NULL_REPLACEMENT;
+ }
+ else
+ {
+ replaceString = String.valueOf( aggregatedValue );
+
+ deFlag2 = 1;
+ }
+
+ }
+ else
+ {
+ deFlag1 = 1;
+ PeriodType dePeriodType = getDataElementPeriodType( dataElement );
+ List<Period> periodList = new ArrayList<Period>( periodService.getIntersectingPeriodsByPeriodType(
+ dePeriodType, startDate, endDate ) );
+ Period tempPeriod = new Period();
+ if ( periodList == null || periodList.isEmpty() )
+ {
+ replaceString = "";
+ matcher.appendReplacement( buffer, replaceString );
+ continue;
+ }
+ else
+ {
+ tempPeriod = (Period) periodList.get( 0 );
+ }
+
+ DataValue dataValue = dataValueService.getDataValue( organisationUnit, dataElement, tempPeriod,
+ optionCombo );
+
+ if ( dataValue != null )
+ {
+ // Works for both text and boolean data types
+
+ replaceString = dataValue.getValue();
+ }
+
+ else
+ replaceString = "";
+
+ if ( replaceString == null )
+ replaceString = "";
+ }
+ matcher.appendReplacement( buffer, replaceString );
+
+ resultValue = replaceString;
+ }
+
+ matcher.appendTail( buffer );
+
+ if ( deFlag1 == 0 )
+ {
+
+ double d = 0.0;
+ try
+ {
+ d = MathUtils.calculateExpression( buffer.toString() );
+ }
+ catch ( Exception e )
+ {
+ d = 0.0;
+ resultValue = "";
+ }
+ if ( d == -1 )
+ {
+ d = 0.0;
+ resultValue = "";
+ }
+ else
+ {
+
+ // This is to display financial data as it is like 2.1476838
+ resultValue = "" + d;
+
+ // These lines are to display financial data that do not
+ // have decimals
+ d = d * 10;
+
+ if ( d % 10 == 0 )
+ {
+ resultValue = "" + (int) d / 10;
+ }
+
+ d = d / 10;
+
+ // These line are to display non financial data that do not
+ // require decimals
+ // if ( !(reportModelTB.equalsIgnoreCase( "STATIC-FINANCIAL"
+ // )) )
+ resultValue = "" + (int) d;
+
+ // if ( resultValue.equalsIgnoreCase( "0" ) )
+ // {
+ // resultValue = "";
+ // }
+ }
+
+ }
+ else
+ {
+ resultValue = buffer.toString();
+ }
+
+ if ( resultValue.equalsIgnoreCase( "" ) )
+ resultValue = " ";
+
+ return resultValue;
+ }
+ catch ( NumberFormatException ex )
+ {
+ throw new RuntimeException( "Illegal DataElement id", ex );
+ }
+ }
+
+ private String getIndividualResultDataValue( String formula, Date startDate, Date endDate,
+ OrganisationUnit organisationUnit )
+ {
+ try
+ {
+ int deFlag1 = 0;
+ int deFlag2 = 0;
+ Pattern pattern = Pattern.compile( "(\\[\\d+\\.\\d+\\])" );
+
+ Matcher matcher = pattern.matcher( formula );
+ StringBuffer buffer = new StringBuffer();
+
+ String resultValue = "";
+ boolean valueDoesNotExist = true;
+
+ 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 );
+
+ DataElement dataElement = dataElementService.getDataElement( dataElementId );
+ DataElementCategoryOptionCombo optionCombo = dataElementCategoryService
+ .getDataElementCategoryOptionCombo( optionComboId );
+
+ if ( dataElement == null || optionCombo == null )
+ {
+ replaceString = "";
+ matcher.appendReplacement( buffer, replaceString );
+ continue;
+ }
+ if ( dataElement.getType().equalsIgnoreCase( "int" ) )
+ {
+
+ PeriodType dePeriodType = getDataElementPeriodType( dataElement );
+ List<Period> periodList = new ArrayList<Period>( periodService.getIntersectingPeriodsByPeriodType(
+ dePeriodType, startDate, endDate ) );
+
+ if ( periodList == null || periodList.isEmpty() )
+ {
+ replaceString = "";
+ matcher.appendReplacement( buffer, replaceString );
+ continue;
+ }
+ else
+ {
+
+ double aggregatedValue = 0.0;
+ for ( Period tempPeriod : periodList )
+ {
+ DataValue dataValue = dataValueService.getDataValue( organisationUnit, dataElement,
+ tempPeriod, optionCombo );
+
+ if ( dataValue != null )
+ {
+ aggregatedValue += Double.parseDouble( dataValue.getValue() );
+
+ valueDoesNotExist = false;
+ }
+ }
+
+ replaceString = String.valueOf( aggregatedValue );
+
+ deFlag2 = 1;
+ }
+
+ }
+ else
+ {
+ deFlag1 = 1;
+ PeriodType dePeriodType = getDataElementPeriodType( dataElement );
+ List<Period> periodList = new ArrayList<Period>( periodService.getIntersectingPeriodsByPeriodType(
+ dePeriodType, startDate, endDate ) );
+ Period tempPeriod = new Period();
+ if ( periodList == null || periodList.isEmpty() )
+ {
+ replaceString = "";
+ matcher.appendReplacement( buffer, replaceString );
+ continue;
+ }
+ else
+ {
+ tempPeriod = (Period) periodList.get( 0 );
+ }
+
+ DataValue dataValue = dataValueService.getDataValue( organisationUnit, dataElement, tempPeriod,
+ optionCombo );
+
+ if ( dataValue != null )
+ {
+ // Works for both text and boolean data types
+
+ replaceString = dataValue.getValue();
+ valueDoesNotExist = false;
+ }
+
+ else
+ replaceString = "";
+
+ if ( replaceString == null )
+ replaceString = "";
+ }
+ matcher.appendReplacement( buffer, replaceString );
+
+ resultValue = replaceString;
+ }
+
+ matcher.appendTail( buffer );
+
+ if ( deFlag1 == 0 )
+ {
+ double d = 0.0;
+ try
+ {
+ d = MathUtils.calculateExpression( buffer.toString() );
+ }
+ catch ( Exception e )
+ {
+ d = 0.0;
+
+ resultValue = "";
+ }
+ if ( d == -1 )
+ {
+ d = 0.0;
+
+ resultValue = "";
+ }
+ else
+ {
+ // This is to display financial data as it is like 2.1476838
+ resultValue = "" + d;
+
+ // These lines are to display financial data that do not
+ // have decimals
+ d = d * 10;
+
+ if ( d % 10 == 0 )
+ {
+ resultValue = "" + (int) d / 10;
+ }
+
+ d = d / 10;
+
+ // These line are to display non financial data that do not
+ // require decimals
+ // if ( !(reportModelTB.equalsIgnoreCase( "STATIC-FINANCIAL"
+ // )) )
+ resultValue = "" + (int) d;
+
+ // if ( resultValue.equalsIgnoreCase( "0" ) )
+ // {
+ // resultValue = "";
+ // }
+ }
+ }
+ else
+ {
+ resultValue = buffer.toString();
+ }
+
+ if ( valueDoesNotExist )
+ resultValue = " ";
+
+ if ( resultValue.equalsIgnoreCase( "" ) )
+ resultValue = " ";
+
+ return resultValue;
+ }
+ catch ( NumberFormatException ex )
+ {
+ throw new RuntimeException( "Illegal DataElement id", ex );
+ }
+ }
+
+ private String getBooleanDataValue( String formula, Date startDate, Date endDate, OrganisationUnit organisationUnit )
+ {
+ try
+ {
+ int deFlag1 = 0;
+ int deFlag2 = 0;
+ Pattern pattern = Pattern.compile( "(\\[\\d+\\.\\d+\\])" );
+
+ Matcher matcher = pattern.matcher( formula );
+ StringBuffer buffer = new StringBuffer();
+
+ 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 );
+
+ DataElement dataElement = dataElementService.getDataElement( dataElementId );
+ DataElementCategoryOptionCombo optionCombo = dataElementCategoryService
+ .getDataElementCategoryOptionCombo( optionComboId );
+
+ if ( dataElement == null || optionCombo == null )
+ {
+ replaceString = "";
+ matcher.appendReplacement( buffer, replaceString );
+ continue;
+ }
+
+ if ( dataElement.getType().equalsIgnoreCase( "bool" ) )
+ {
+ deFlag1 = 1;
+ PeriodType dePeriodType = getDataElementPeriodType( dataElement );
+ List<Period> periodList = new ArrayList<Period>( periodService.getIntersectingPeriodsByPeriodType(
+ dePeriodType, startDate, endDate ) );
+ Period tempPeriod = new Period();
+ if ( periodList == null || periodList.isEmpty() )
+ {
+ replaceString = "";
+ matcher.appendReplacement( buffer, replaceString );
+ continue;
+ }
+ else
+ {
+ tempPeriod = (Period) periodList.get( 0 );
+ }
+
+ DataValue dataValue = dataValueService.getDataValue( organisationUnit, dataElement, tempPeriod,
+ optionCombo );
+
+ if ( dataValue != null )
+ {
+ // Works for both text and boolean data types
+
+ if ( dataValue.getValue().equalsIgnoreCase( "true" ) )
+ {
+ replaceString = "Yes";
+ }
+ else if ( dataValue.getValue().equalsIgnoreCase( "false" ) )
+ {
+ replaceString = "No";
+ }
+ else
+ {
+ replaceString = dataValue.getValue();
+ }
+ }
+
+ else
+ {
+ replaceString = "";
+ }
+
+ }
+ else
+ {
+ Double aggregatedValue = aggregationService.getAggregatedDataValue( dataElement, optionCombo,
+ startDate, endDate, organisationUnit );
+ if ( aggregatedValue == null )
+ {
+ replaceString = NULL_REPLACEMENT;
+ }
+ else
+ {
+ replaceString = String.valueOf( aggregatedValue );
+
+ deFlag2 = 1;
+ }
+ }
+ matcher.appendReplacement( buffer, replaceString );
+ }
+
+ matcher.appendTail( buffer );
+
+ String resultValue = "";
+ if ( deFlag1 == 0 )
+ {
+ double d = 0.0;
+ try
+ {
+ d = MathUtils.calculateExpression( buffer.toString() );
+ }
+ catch ( Exception e )
+ {
+ d = 0.0;
+ }
+ if ( d == -1 )
+ {
+ d = 0.0;
+ }
+ else
+ {
+ d = Math.round( d * Math.pow( 10, 1 ) ) / Math.pow( 10, 1 );
+ resultValue = "" + (int) d;
+ }
+
+ if ( deFlag2 == 0 )
+ {
+ resultValue = " ";
+ }
+ }
+ else
+ {
+ resultValue = buffer.toString();
+ }
+ return resultValue;
+ }
+ catch ( NumberFormatException ex )
+ {
+ throw new RuntimeException( "Illegal DataElement id", ex );
+ }
+ }
+
+ private String getResultIndicatorValue( String formula, Date startDate, Date endDate,
+ OrganisationUnit organisationUnit )
+ {
+ try
+ {
+
+ int deFlag1 = 0;
+ int deFlag2 = 0;
+ Pattern pattern = Pattern.compile( "(\\[\\d+\\.\\d+\\])" );
+
+ Matcher matcher = pattern.matcher( formula );
+ StringBuffer buffer = new StringBuffer();
+
+ while ( matcher.find() )
+ {
+ String replaceString = matcher.group();
+
+ replaceString = replaceString.replaceAll( "[\\[\\]]", "" );
+
+ replaceString = replaceString.substring( 0, replaceString.indexOf( '.' ) );
+
+ int indicatorId = Integer.parseInt( replaceString );
+
+ Indicator indicator = indicatorService.getIndicator( indicatorId );
+
+ if ( indicator == null )
+ {
+ replaceString = "";
+ matcher.appendReplacement( buffer, replaceString );
+ continue;
+
+ }
+
+ Double aggregatedValue = aggregationService.getAggregatedIndicatorValue( indicator, startDate, endDate,
+ organisationUnit );
+
+ if ( aggregatedValue == null )
+ {
+ replaceString = NULL_REPLACEMENT;
+ }
+ else
+ {
+ replaceString = String.valueOf( aggregatedValue );
+ deFlag2 = 1;
+ }
+ matcher.appendReplacement( buffer, replaceString );
+ }
+
+ matcher.appendTail( buffer );
+
+ String resultValue = "";
+ if ( deFlag1 == 0 )
+ {
+ double d = 0.0;
+ try
+ {
+ d = MathUtils.calculateExpression( buffer.toString() );
+ }
+ catch ( Exception e )
+ {
+ d = 0.0;
+ }
+ if ( d == -1 )
+ d = 0.0;
+ else
+ {
+ d = Math.round( d * Math.pow( 10, 1 ) ) / Math.pow( 10, 1 );
+ resultValue = "" + d;
+ }
+
+ if ( deFlag2 == 0 )
+ {
+ resultValue = " ";
+ }
+ }
+ else
+ {
+ resultValue = buffer.toString();
+ }
+ return resultValue;
+ }
+ catch ( NumberFormatException ex )
+ {
+ throw new RuntimeException( "Illegal DataElement id", ex );
+ }
+ }
+
+ private String getIndividualResultIndicatorValue( String formula, Date startDate, Date endDate,
+ OrganisationUnit organisationUnit )
+ {
+ try
+ {
+
+ int deFlag1 = 0;
+ int deFlag2 = 0;
+ Pattern pattern = Pattern.compile( "(\\[\\d+\\.\\d+\\])" );
+
+ Matcher matcher = pattern.matcher( formula );
+ StringBuffer buffer = new StringBuffer();
+
+ while ( matcher.find() )
+ {
+ String replaceString = matcher.group();
+
+ replaceString = replaceString.replaceAll( "[\\[\\]]", "" );
+
+ replaceString = replaceString.substring( 0, replaceString.indexOf( '.' ) );
+
+ int indicatorId = Integer.parseInt( replaceString );
+
+ Indicator indicator = indicatorService.getIndicator( indicatorId );
+
+ if ( indicator == null )
+ {
+ replaceString = "";
+ matcher.appendReplacement( buffer, replaceString );
+ continue;
+
+ }
+
+ String numeratorExp = indicator.getNumerator();
+ String denominatorExp = indicator.getDenominator();
+ int indicatorFactor = indicator.getIndicatorType().getFactor();
+ String numeratorVal = getIndividualResultDataValue( numeratorExp, startDate, endDate, organisationUnit );
+ String denominatorVal = getIndividualResultDataValue( denominatorExp, startDate, endDate,
+ organisationUnit );
+
+ double numeratorValue;
+ try
+ {
+ numeratorValue = Double.parseDouble( numeratorVal );
+ }
+ catch ( Exception e )
+ {
+ System.out.println( "Exception while getting Numerator : " + numeratorExp + " for Indicaotr "
+ + indicator.getName() );
+ numeratorValue = 0.0;
+ }
+
+ double denominatorValue;
+ try
+ {
+ denominatorValue = Double.parseDouble( denominatorVal );
+ }
+ catch ( Exception e )
+ {
+ System.out.println( "Exception while getting Deniminator : " + denominatorExp + " for Indicaotr "
+ + indicator.getName() );
+ denominatorValue = 1.0;
+ }
+
+ double aggregatedValue;
+ try
+ {
+ aggregatedValue = (numeratorValue / denominatorValue) * indicatorFactor;
+ }
+ catch ( Exception e )
+ {
+ System.out.println( "Exception while calculating Indicator value for Indicaotr "
+ + indicator.getName() );
+ aggregatedValue = 0.0;
+ }
+
+ replaceString = String.valueOf( aggregatedValue );
+ deFlag2 = 1;
+
+ matcher.appendReplacement( buffer, replaceString );
+ }
+
+ matcher.appendTail( buffer );
+
+ String resultValue = "";
+ if ( deFlag1 == 0 )
+ {
+ double d = 0.0;
+ try
+ {
+ d = MathUtils.calculateExpression( buffer.toString() );
+ }
+ catch ( Exception e )
+ {
+ d = 0.0;
+ }
+ if ( d == -1 )
+ d = 0.0;
+ else
+ {
+ d = Math.round( d * Math.pow( 10, 1 ) ) / Math.pow( 10, 1 );
+ resultValue = "" + d;
+ }
+
+ if ( deFlag2 == 0 )
+ {
+ resultValue = " ";
+ }
+ }
+ else
+ {
+ resultValue = buffer.toString();
+ }
+ return resultValue;
+ }
+ catch ( NumberFormatException ex )
+ {
+ throw new RuntimeException( "Illegal DataElement id", ex );
+ }
+ }
+
+
+ public Period getSelectedPeriod( String startDate, PeriodType periodType ) throws Exception
+ {
+ SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd" );
+
+ List<Period> periods = new ArrayList<Period>( periodService.getPeriodsByPeriodType( periodType ) );
+ for ( Period period : periods )
+ {
+ String tempDate = dateFormat.format( period.getStartDate() );
+ if ( tempDate.equalsIgnoreCase( startDate ) )
+ {
+ return period;
+ }
+ }
+
+ Period period = periodType.createPeriod( dateFormat.parse( startDate ) );
+ period = reloadPeriodForceAdd( period );
+ periodService.addPeriod( period );
+
+ return period;
+ }
+
+ private final Period reloadPeriod( Period period )
+ {
+ return periodService.getPeriod( period.getStartDate(), period.getEndDate(), period.getPeriodType() );
+ }
+
+ private final Period reloadPeriodForceAdd( Period period )
+ {
+ Period storedPeriod = reloadPeriod( period );
+
+ if ( storedPeriod == null )
+ {
+ periodService.addPeriod( period );
+
+ return period;
+ }
+
+ return storedPeriod;
+ }
+
+}
=== added file 'local/in/dhis-web-excelimport/src/main/java/org/hisp/dhis/excelimport/util/TCSXMLMap.java'
--- local/in/dhis-web-excelimport/src/main/java/org/hisp/dhis/excelimport/util/TCSXMLMap.java 1970-01-01 00:00:00 +0000
+++ local/in/dhis-web-excelimport/src/main/java/org/hisp/dhis/excelimport/util/TCSXMLMap.java 2011-04-15 11:42:21 +0000
@@ -0,0 +1,84 @@
+package org.hisp.dhis.excelimport.util;
+
+import java.io.Serializable;
+
+public class TCSXMLMap implements Serializable
+{
+ private String tcsDataElement;
+ private String dhisDataElement;
+ private String orgunitCode;
+ private String tscPeriod;
+ private String dataValue;
+
+ // -------------------------------------------------------------------------
+ // Constructors
+ // -------------------------------------------------------------------------
+ public TCSXMLMap()
+ {
+
+ }
+
+ public TCSXMLMap( String tcsDataElement, String dhisDataElement, String orgunitCode, String tscPeriod, String dataValue )
+ {
+ this.tcsDataElement = tcsDataElement;
+ this.dhisDataElement = dhisDataElement;
+ this.orgunitCode = orgunitCode;
+ this.tscPeriod = tscPeriod;
+ this.dataValue = dataValue;
+ }
+
+ // -------------------------------------------------------------------------
+ // Getters and setters
+ // -------------------------------------------------------------------------
+
+ public String getTcsDataElement()
+ {
+ return tcsDataElement;
+ }
+
+ public void setTcsDataElement( String tcsDataElement )
+ {
+ this.tcsDataElement = tcsDataElement;
+ }
+
+ public String getDhisDataElement()
+ {
+ return dhisDataElement;
+ }
+
+ public void setDhisDataElement( String dhisDataElement )
+ {
+ this.dhisDataElement = dhisDataElement;
+ }
+
+ public String getOrgunitCode()
+ {
+ return orgunitCode;
+ }
+
+ public void setOrgunitCode( String orgunitCode )
+ {
+ this.orgunitCode = orgunitCode;
+ }
+
+ public String getTscPeriod()
+ {
+ return tscPeriod;
+ }
+
+ public void setTscPeriod( String tscPeriod )
+ {
+ this.tscPeriod = tscPeriod;
+ }
+
+ public String getDataValue()
+ {
+ return dataValue;
+ }
+
+ public void setDataValue( String dataValue )
+ {
+ this.dataValue = dataValue;
+ }
+
+}