public DataElement getDataElement(org.hisp.dhis.dataelement.DataElement dataElement) { DataElement de = new DataElement(); de.setId(dataElement.getId()); de.setName(dataElement.getFormNameFallback()); de.setType(dataElement.getType()); de.setCategoryOptionCombos(getCategoryOptionCombos(dataElement)); // Limit the optionset transfer to the client if (dataElement.getOptionSet() != null && dataElement.getOptionSet().getOptions().size() <= 50) { de.setOptionSet(getOptionSet(dataElement)); } return de; }
@Override public String execute() throws Exception { ExportParams params = new ExportParams(); if (dataValue || dataValueDaily) { params.setCategories(null); params.setCategoryCombos(null); params.setCategoryOptions(null); params.setCategoryOptionCombos(null); /* * params.setDataElementGroups( null ); * params.setDataElementGroupSets( null ); params.setIndicators( * null ); params.setIndicatorTypes( null ); * params.setIndicatorGroups( null ); params.setIndicatorGroupSets( * null ); params.setDataDictionaries( null ); params.setDataSets( * null ); params.setOrganisationUnitGroups( null ); * params.setOrganisationUnitGroupSets( null ); * params.setOrganisationUnitLevels( null ); * params.setValidationRules( null ); params.setReports( null ); * params.setReportTables( null ); params.setPeriods( null ); // * TODO Include only relevant periods params.setCharts( null ); * params.setPeriods( null ); */ Set<Integer> dataElementz = new HashSet<>(); Collection<DataElement> children = dataElementService.getAllDataElements(); for (DataElement child : children) { dataElementz.add(child.getId()); } params.setDataElements(dataElementz); Set<Integer> orgUnits = new HashSet<>(); Collection<OrganisationUnit> orgChildren = organisationUnitService.getAllOrganisationUnits(); for (OrganisationUnit child : orgChildren) { orgUnits.add(child.getId()); } params.setOrganisationUnits(orgUnits); } if (dataValue) { params.setMetaData(false); } if (dataValueDaily) { params.setMetaData(false); } // params.setMetaData( true ); params.setIncludeDataValues(true); params.setCurrentUser(currentUserService.getCurrentUser()); params.setDataValue(dataValue); params.setDataValueDaily(dataValueDaily); params.setI18n(i18n); params.setFormat(format); params.setStartDate(getMediumDate(startDate)); params.setEndDate(getMediumDate(endDate)); ExportService exportService = serviceProvider.provide(exportFormat); inputStream = exportService.exportData(params); fileName = FILENAME; return SUCCESS; }
@Transactional public void cascadeDeleteImportObject(int importObjectId) { ImportObject importObject = importObjectStore.getImportObject(importObjectId); if (importObject != null) { if (importObject.getClassName().equals(DataElement.class.getName())) { DataElement element = (DataElement) importObject.getObject(); deleteMemberAssociations(GroupMemberType.DATAELEMENTGROUP, element.getId()); deleteMemberAssociations(GroupMemberType.DATASET, element.getId()); deleteMemberAssociations(GroupMemberType.DATADICTIONARY_DATAELEMENT, element.getId()); deleteIndicatorsContainingDataElement(element.getId()); importDataValueService.deleteImportDataValuesByDataElement(element.getId()); } else if (importObject.getClassName().equals(DataElementGroup.class.getName())) { DataElementGroup group = (DataElementGroup) importObject.getObject(); deleteGroupAssociations(GroupMemberType.DATAELEMENTGROUP, group.getId()); deleteMemberAssociations(GroupMemberType.DATAELEMENTGROUPSET, group.getId()); } else if (importObject.getClassName().equals(DataElementGroupSet.class.getName())) { DataElementGroupSet groupSet = (DataElementGroupSet) importObject.getObject(); deleteGroupAssociations(GroupMemberType.DATAELEMENTGROUPSET, groupSet.getId()); } else if (importObject.getClassName().equals(IndicatorType.class.getName())) { IndicatorType type = (IndicatorType) importObject.getObject(); deleteIndicatorsWithIndicatorType(type.getId()); } else if (importObject.getClassName().equals(Indicator.class.getName())) { Indicator indicator = (Indicator) importObject.getObject(); deleteMemberAssociations(GroupMemberType.INDICATORGROUP, indicator.getId()); deleteMemberAssociations(GroupMemberType.DATADICTIONARY_INDICATOR, indicator.getId()); } else if (importObject.getClassName().equals(IndicatorGroup.class.getName())) { IndicatorGroup group = (IndicatorGroup) importObject.getObject(); deleteGroupAssociations(GroupMemberType.INDICATORGROUP, group.getId()); deleteMemberAssociations(GroupMemberType.INDICATORGROUPSET, group.getId()); } else if (importObject.getClassName().equals(IndicatorGroupSet.class.getName())) { IndicatorGroupSet groupSet = (IndicatorGroupSet) importObject.getObject(); deleteGroupAssociations(GroupMemberType.INDICATORGROUPSET, groupSet.getId()); } else if (importObject.getClassName().equals(DataDictionary.class.getName())) { DataDictionary dictionary = (DataDictionary) importObject.getObject(); deleteGroupAssociations(GroupMemberType.DATADICTIONARY_DATAELEMENT, dictionary.getId()); deleteGroupAssociations(GroupMemberType.DATADICTIONARY_INDICATOR, dictionary.getId()); } else if (importObject.getClassName().equals(DataSet.class.getName())) { DataSet dataSet = (DataSet) importObject.getObject(); deleteGroupAssociations(GroupMemberType.DATASET, dataSet.getId()); deleteMemberAssociations(GroupMemberType.DATASET_SOURCE, dataSet.getId()); deleteCompleteDataSetRegistrationsByDataSet(dataSet.getId()); } else if (importObject.getClassName().equals(OrganisationUnit.class.getName())) { OrganisationUnit unit = (OrganisationUnit) importObject.getObject(); deleteMemberAssociations(GroupMemberType.ORGANISATIONUNITGROUP, unit.getId()); deleteGroupAssociations(GroupMemberType.ORGANISATIONUNITRELATIONSHIP, unit.getId()); deleteMemberAssociations(GroupMemberType.DATASET_SOURCE, unit.getId()); deleteMemberAssociations(GroupMemberType.ORGANISATIONUNITRELATIONSHIP, unit.getId()); deleteCompleteDataSetRegistrationsBySource(unit.getId()); importDataValueService.deleteImportDataValuesBySource(unit.getId()); } else if (importObject.getClassName().equals(OrganisationUnitGroup.class.getName())) { OrganisationUnitGroup group = (OrganisationUnitGroup) importObject.getObject(); deleteGroupAssociations(GroupMemberType.ORGANISATIONUNITGROUP, group.getId()); deleteMemberAssociations(GroupMemberType.ORGANISATIONUNITGROUPSET, group.getId()); } else if (importObject.getClassName().equals(OrganisationUnitGroupSet.class.getName())) { OrganisationUnitGroupSet groupSet = (OrganisationUnitGroupSet) importObject.getObject(); deleteGroupAssociations(GroupMemberType.ORGANISATIONUNITGROUPSET, groupSet.getId()); } } deleteImportObject(importObjectId); }
public void generateReport( Program selProgram, List<OrganisationUnit> orgUnitList, Date sDate, Date eDate) throws Exception { String raFolderName = reportService.getRAFolderName(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); String query = ""; int rowStart = 3; int colStart = 1; int rowCount = rowStart; int colCount = colStart; // String outputReportPath = System.getenv( "DHIS2_HOME" ) + File.separator + raFolderName + // File.separator + "output" + File.separator + UUID.randomUUID().toString() + ".xls"; String outputReportPath = System.getenv("DHIS2_HOME") + File.separator + Configuration_IN.DEFAULT_TEMPFOLDER; File newdir = new File(outputReportPath); if (!newdir.exists()) { newdir.mkdirs(); } outputReportPath += File.separator + UUID.randomUUID().toString() + ".xls"; WritableWorkbook outputReportWorkbook = Workbook.createWorkbook(new File(outputReportPath)); WritableSheet sheet0 = outputReportWorkbook.createSheet(selProgram.getName(), 0); try { List<PatientIdentifierType> patientIdentifierTypes = new ArrayList<PatientIdentifierType>( patientIdentifierTypeService.getAllPatientIdentifierTypes()); Collections.sort(patientIdentifierTypes, new PatientIdentifierTypeComparator()); List<PatientAttribute> patientAttributes = new ArrayList<PatientAttribute>(patientAttributeService.getAllPatientAttributes()); Collections.sort(patientAttributes, new PatientAttributeComparator()); List<ProgramStage> programStages = new ArrayList<ProgramStage>(selProgram.getProgramStages()); Collections.sort(programStages, new ProgramStageOrderComparator()); Map<ProgramStage, List<DataElement>> programStageDataElementMap = new HashMap<ProgramStage, List<DataElement>>(); for (ProgramStage programStage : programStages) { List<ProgramStageDataElement> programStageDataElements = new ArrayList<ProgramStageDataElement>(programStage.getProgramStageDataElements()); List<DataElement> dataElements = new ArrayList<DataElement>(); for (ProgramStageDataElement programStageDataElement : programStageDataElements) { dataElements.add(programStageDataElement.getDataElement()); } Collections.sort(dataElements, new IdentifiableObjectNameComparator()); programStageDataElementMap.put(programStage, dataElements); } // Printing Header Information sheet0.mergeCells(colCount, rowCount - 1, colCount, rowCount); sheet0.addCell(new Label(colCount, rowCount - 1, "OrgUnit Hierarchy", getCellFormat1())); colCount++; sheet0.mergeCells(colCount, rowCount - 1, colCount, rowCount); sheet0.addCell(new Label(colCount, rowCount - 1, "OrgUnit", getCellFormat1())); colCount++; for (PatientIdentifierType patientIdentifierType : patientIdentifierTypes) { sheet0.mergeCells(colCount, rowCount - 1, colCount, rowCount); sheet0.addCell( new Label(colCount, rowCount - 1, patientIdentifierType.getName(), getCellFormat1())); colCount++; } sheet0.mergeCells(colCount, rowCount - 1, colCount, rowCount); sheet0.addCell(new Label(colCount, rowCount - 1, "Benificiary ID", getCellFormat1())); colCount++; sheet0.mergeCells(colCount, rowCount - 1, colCount, rowCount); sheet0.addCell(new Label(colCount, rowCount - 1, "Benificiary Name", getCellFormat1())); colCount++; sheet0.mergeCells(colCount, rowCount - 1, colCount, rowCount); sheet0.addCell(new Label(colCount, rowCount - 1, "Gender", getCellFormat1())); colCount++; sheet0.mergeCells(colCount, rowCount - 1, colCount, rowCount); sheet0.addCell(new Label(colCount, rowCount - 1, "Age", getCellFormat1())); colCount++; sheet0.mergeCells(colCount, rowCount - 1, colCount, rowCount); sheet0.addCell(new Label(colCount, rowCount - 1, "Data of Birth", getCellFormat1())); colCount++; sheet0.mergeCells(colCount, rowCount - 1, colCount, rowCount); sheet0.addCell(new Label(colCount, rowCount - 1, "Blood Group", getCellFormat1())); colCount++; sheet0.mergeCells(colCount, rowCount - 1, colCount, rowCount); sheet0.addCell(new Label(colCount, rowCount - 1, "Registration Date", getCellFormat1())); colCount++; for (PatientAttribute patientAttribute : patientAttributes) { sheet0.mergeCells(colCount, rowCount - 1, colCount, rowCount); sheet0.addCell( new Label(colCount, rowCount - 1, patientAttribute.getName(), getCellFormat1())); colCount++; } sheet0.mergeCells(colCount, rowCount - 1, colCount, rowCount); sheet0.addCell(new Label(colCount, rowCount - 1, "Incident Date", getCellFormat1())); colCount++; sheet0.mergeCells(colCount, rowCount - 1, colCount, rowCount); sheet0.addCell(new Label(colCount, rowCount - 1, "Enrollment Date", getCellFormat1())); colCount++; for (ProgramStage programStage : programStages) { List<DataElement> dataElementList = new ArrayList<DataElement>(programStageDataElementMap.get(programStage)); sheet0.mergeCells( colCount, rowCount - 1, colCount + dataElementList.size() + 1, rowCount - 1); sheet0.addCell(new Label(colCount, rowCount - 1, programStage.getName(), getCellFormat1())); sheet0.addCell(new Label(colCount, rowCount, "Due Date", getCellFormat1())); colCount++; sheet0.addCell(new Label(colCount, rowCount, "Execution Date", getCellFormat1())); colCount++; for (DataElement dataElement : dataElementList) { sheet0.addCell( new Label( colCount, rowCount, dataElement.getName() + "--" + dataElement.getType(), getCellFormat1())); colCount++; } } rowCount++; for (OrganisationUnit orgUnit : orgUnitList) { if (sDate != null && eDate != null) { query = "SELECT patient.patientid, programinstance.programinstanceid,programinstance.dateofincident,programinstance.enrollmentdate FROM programinstance INNER JOIN patient " + " ON programinstance.patientid = patient.patientid " + " WHERE patient.organisationunitid = " + orgUnit.getId() + " AND programinstance.programid = " + selProgram.getId() + " AND patient.registrationdate >= '" + startDate + "'" + " AND patient.registrationdate <= '" + endDate + "' " + " AND enddate IS NULL"; } else { query = "SELECT patient.patientid, programinstance.programinstanceid,programinstance.dateofincident,programinstance.enrollmentdate FROM programinstance INNER JOIN patient " + " ON programinstance.patientid = patient.patientid " + " WHERE patient.organisationunitid = " + orgUnit.getId() + " AND programinstance.programid = " + selProgram.getId() + " AND enddate IS NULL"; } SqlRowSet sqlResultSet = jdbcTemplate.queryForRowSet(query); if (sqlResultSet != null) { int count = 1; String orgUnitBranch = ""; sqlResultSet.beforeFirst(); while (sqlResultSet.next()) { colCount = colStart; if (orgUnit.getParent() != null) { orgUnitBranch = getOrgunitBranch(orgUnit.getParent()); } else { orgUnitBranch = " "; } sheet0.addCell(new Label(colCount, rowCount, orgUnitBranch, getCellFormat2())); colCount++; sheet0.addCell(new Label(colCount, rowCount, orgUnit.getName(), getCellFormat2())); colCount++; int patientId = sqlResultSet.getInt(1); int programInstanceId = sqlResultSet.getInt(2); Date dateOfIncident = sqlResultSet.getDate(3); Date dateOfEnrollment = sqlResultSet.getDate(4); Patient patient = patientService.getPatient(patientId); // Patient Identifier Details for (PatientIdentifierType patientIdentifierType : patientIdentifierTypes) { query = "SELECT identifier from patientidentifier WHERE patientidentifiertypeid = " + patientIdentifierType.getId() + " AND patientid = " + patient.getId(); SqlRowSet sqlResultSet1 = jdbcTemplate.queryForRowSet(query); if (sqlResultSet1 != null && sqlResultSet1.next()) { String value = sqlResultSet1.getString(1); if (value != null && !value.trim().equalsIgnoreCase("")) { sheet0.addCell(new Label(colCount, rowCount, value, getCellFormat2())); } else { sheet0.addCell(new Label(colCount, rowCount, "-", getCellFormat2())); } } else { sheet0.addCell(new Label(colCount, rowCount, "-", getCellFormat2())); } colCount++; } // Patient Properties sheet0.addCell( new Label(colCount, rowCount, patient.getId().toString(), getCellFormat2())); colCount++; sheet0.addCell(new Label(colCount, rowCount, patient.getFullName(), getCellFormat2())); colCount++; sheet0.addCell( new Label(colCount, rowCount, patient.getTextGender(), getCellFormat2())); colCount++; sheet0.addCell(new Label(colCount, rowCount, patient.getAge(), getCellFormat2())); colCount++; sheet0.addCell( new Label( colCount, rowCount, simpleDateFormat.format(patient.getBirthDate()), getCellFormat2())); colCount++; /** * TODO BloodGroup is removed from Patient Object, so need to change this accordingly */ sheet0.addCell( new Label(colCount, rowCount, "" /*patient.getBloodGroup()*/, getCellFormat2())); colCount++; sheet0.addCell( new Label( colCount, rowCount, simpleDateFormat.format(patient.getRegistrationDate()), getCellFormat2())); colCount++; // Patient Attribute Values for (PatientAttribute patientAttribute : patientAttributes) { query = "SELECT value from patientattributevalue WHERE patientid = " + patient.getId() + " AND patientattributeid = " + patientAttribute.getId(); SqlRowSet sqlResultSet1 = jdbcTemplate.queryForRowSet(query); if (sqlResultSet1 != null && sqlResultSet1.next()) { String value = sqlResultSet1.getString(1); if (value != null && !value.trim().equalsIgnoreCase("")) { sheet0.addCell(new Label(colCount, rowCount, value, getCellFormat2())); } else { sheet0.addCell(new Label(colCount, rowCount, "-", getCellFormat2())); } } else { sheet0.addCell(new Label(colCount, rowCount, "-", getCellFormat2())); } colCount++; } // Program Enrollment Details sheet0.addCell( new Label( colCount, rowCount, simpleDateFormat.format(dateOfIncident), getCellFormat2())); colCount++; sheet0.addCell( new Label( colCount, rowCount, simpleDateFormat.format(dateOfEnrollment), getCellFormat2())); colCount++; // ProgramStage Values for (ProgramStage programStage : programStages) { query = "SELECT programstageinstanceid,duedate,executiondate from programstageinstance " + " WHERE programinstanceid = " + programInstanceId + " AND programstageid = " + programStage.getId(); SqlRowSet sqlResultSet2 = jdbcTemplate.queryForRowSet(query); Integer programStageInstanceId = 0; if (sqlResultSet2 != null && sqlResultSet2.next()) { programStageInstanceId = sqlResultSet2.getInt(1); // ProgramStage DueDate and Execution Date Date dueDate = sqlResultSet2.getDate(2); Date exeDate = sqlResultSet2.getDate(3); if (dueDate != null) { String dueDateStr = simpleDateFormat.format(dueDate); sheet0.addCell(new Label(colCount, rowCount, dueDateStr, getCellFormat3())); } else { sheet0.addCell(new Label(colCount, rowCount, "-", getCellFormat3())); } colCount++; if (exeDate != null) { String exeDateStr = simpleDateFormat.format(exeDate); sheet0.addCell(new Label(colCount, rowCount, exeDateStr, getCellFormat3())); } else { sheet0.addCell(new Label(colCount, rowCount, "-", getCellFormat3())); } colCount++; } else { sheet0.addCell(new Label(colCount, rowCount, "-", getCellFormat3())); colCount++; sheet0.addCell(new Label(colCount, rowCount, "-", getCellFormat3())); colCount++; } for (DataElement dataElement : programStageDataElementMap.get(programStage)) { query = "SELECT value from patientdatavalue WHERE programstageinstanceid = " + programStageInstanceId + " AND dataelementid = " + dataElement.getId(); // " AND organisationunitid = " + orgUnit.getId(); SqlRowSet sqlResultSet3 = jdbcTemplate.queryForRowSet(query); if (sqlResultSet3 != null && sqlResultSet3.next()) { String value = sqlResultSet3.getString(1); if (dataElement.getType().equalsIgnoreCase(DataElement.VALUE_TYPE_BOOL)) { if (value.equalsIgnoreCase("false")) value = "No"; else value = "Yes"; } if (value != null && !value.trim().equalsIgnoreCase("")) { sheet0.addCell(new Label(colCount, rowCount, value, getCellFormat2())); } else { sheet0.addCell(new Label(colCount, rowCount, "-", getCellFormat2())); } } else { sheet0.addCell(new Label(colCount, rowCount, "-", getCellFormat2())); } colCount++; } } rowCount++; } } } } catch (Exception e) { System.out.println("Exception: " + e.getMessage()); e.printStackTrace(); } outputReportWorkbook.write(); outputReportWorkbook.close(); fileName = selProgram.getName() + ".xls"; File outputReportFile = new File(outputReportPath); inputStream = new BufferedInputStream(new FileInputStream(outputReportFile)); outputReportFile.deleteOnExit(); }