=== added file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/patientreport/TabularReportColumn.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/patientreport/TabularReportColumn.java 1970-01-01 00:00:00 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/patientreport/TabularReportColumn.java 2012-06-24 14:29:16 +0000 @@ -0,0 +1,130 @@ +package org.hisp.dhis.patientreport; + +public class TabularReportColumn +{ + public static String PREFIX_META_DATA = "meta"; + public static String PREFIX_IDENTIFIER_TYPE = "iden"; + public static String PREFIX_FIXED_ATTRIBUTE = "fixedAttr"; + public static String PREFIX_PATIENT_ATTRIBUTE = "attr"; + public static String PREFIX_DATA_ELEMENT = "de"; + + private String prefix; + + private String identifier; + + private boolean hidden; + + private String query; + + private String name; + + // ------------------------------------------------------------------------- + // Constructor + // ------------------------------------------------------------------------- + + public TabularReportColumn() + { + } + + public TabularReportColumn( String prefix, String identifier, String name, boolean hidden, String query ) + { + this.prefix = prefix; + this.identifier = identifier; + this.name = name; + this.hidden = hidden; + this.query = query; + } + + // ------------------------------------------------------------------------- + // Logic + // ------------------------------------------------------------------------- + + public boolean hasQuery() + { + return query != null; + } + + public Integer getIdentifierAsInt() + { + return identifier != null ? Integer.parseInt( identifier ) : null; + } + + public boolean isMeta() + { + return PREFIX_META_DATA.equals( prefix ); + } + + public boolean isIdentifierType() + { + return PREFIX_IDENTIFIER_TYPE.equals( prefix ); + } + + public boolean isFixedAttribute() + { + return PREFIX_FIXED_ATTRIBUTE.equals( prefix ); + } + + public boolean isDynamicAttribute() + { + return PREFIX_PATIENT_ATTRIBUTE.equals( prefix ); + } + + public boolean isDataElement() + { + return PREFIX_DATA_ELEMENT.equals( prefix ); + } + + // ------------------------------------------------------------------------- + // Get methods + // ------------------------------------------------------------------------- + + public String getPrefix() + { + return prefix; + } + + public void setPrefix( String prefix ) + { + this.prefix = prefix; + } + + public String getIdentifier() + { + return identifier; + } + + public void setIdentifier( String identifier ) + { + this.identifier = identifier; + } + + public boolean isHidden() + { + return hidden; + } + + public void setHidden( boolean hidden ) + { + this.hidden = hidden; + } + + public String getQuery() + { + return query; + } + + public void setQuery( String query ) + { + this.query = query; + } + + public String getName() + { + return name; + } + + public void setName( String name ) + { + this.name = name; + } +} === modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/program/ProgramStageInstanceService.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/program/ProgramStageInstanceService.java 2012-06-24 13:42:21 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/program/ProgramStageInstanceService.java 2012-06-24 14:29:16 +0000 @@ -36,6 +36,7 @@ import org.hisp.dhis.i18n.I18nFormat; import org.hisp.dhis.organisationunit.OrganisationUnit; import org.hisp.dhis.patient.Patient; +import org.hisp.dhis.patientreport.TabularReportColumn; /** * @author Abyot Asalefew @@ -86,10 +87,10 @@ List getProgramStageInstances( Patient patient, Boolean completed ); - Grid getTabularReport( ProgramStage programStage, List searchKeys, Collection organisationUnits, + Grid getTabularReport( ProgramStage programStage, List columns, Collection organisationUnits, int level, Date startDate, Date endDate, boolean descOrder, Integer min, Integer max ); - int getTabularReportCount( ProgramStage programStage, List searchKeys, + int getTabularReportCount( ProgramStage programStage, List columns, Collection organisationUnits, int level, Date startDate, Date endDate ); List getProgramStageInstancesReport( ProgramInstance programInstance, I18nFormat format, I18n i18n ); === modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/program/ProgramStageInstanceStore.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/program/ProgramStageInstanceStore.java 2012-06-24 13:42:21 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/program/ProgramStageInstanceStore.java 2012-06-24 14:29:16 +0000 @@ -36,6 +36,7 @@ import org.hisp.dhis.organisationunit.OrganisationUnit; import org.hisp.dhis.organisationunit.OrganisationUnitLevel; import org.hisp.dhis.patient.Patient; +import org.hisp.dhis.patientreport.TabularReportColumn; /** * @author Abyot Asalefew @@ -74,9 +75,9 @@ List get( ProgramStage programStage, OrganisationUnit orgunit, Date startDate, Date endDate, int min, int max ); Grid getTabularReport( ProgramStage programStage, Map orgUnitLevelMap, - Collection orgUnits, List searchKeys, int level, int maxLevel, Date startDate, + Collection orgUnits, List columns, int level, int maxLevel, Date startDate, Date endDate, boolean descOrder, Integer min, Integer max ); - int getTabularReportCount( ProgramStage programStage, List searchKeys, + int getTabularReportCount( ProgramStage programStage, List columns, Collection organisationUnits, int level, int maxLevel, Date startDate, Date endDate ); } === modified file 'dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/program/DefaultProgramStageInstanceService.java' --- dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/program/DefaultProgramStageInstanceService.java 2012-06-14 13:07:22 +0000 +++ dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/program/DefaultProgramStageInstanceService.java 2012-06-24 14:29:16 +0000 @@ -45,6 +45,7 @@ import org.hisp.dhis.patient.Patient; import org.hisp.dhis.patientdatavalue.PatientDataValue; import org.hisp.dhis.patientdatavalue.PatientDataValueService; +import org.hisp.dhis.patientreport.TabularReportColumn; import org.hisp.dhis.system.grid.ListGrid; import org.springframework.transaction.annotation.Transactional; @@ -195,7 +196,7 @@ return programStageInstanceStore.get( patient, completed ); } - public Grid getTabularReport( ProgramStage programStage, List searchingKeys, + public Grid getTabularReport( ProgramStage programStage, List columns, Collection organisationUnits, int level, Date startDate, Date endDate, boolean descOrder, Integer min, Integer max ) { @@ -204,15 +205,15 @@ Map orgUnitLevelMap = organisationUnitService.getOrganisationUnitLevelMap(); return programStageInstanceStore.getTabularReport( programStage, orgUnitLevelMap, organisationUnits, - searchingKeys, level, maxLevel, startDate, endDate, descOrder, min, max ); + columns, level, maxLevel, startDate, endDate, descOrder, min, max ); } - public int getTabularReportCount( ProgramStage programStage, List searchingKeys, + public int getTabularReportCount( ProgramStage programStage, List columns, Collection organisationUnits, int level, Date startDate, Date endDate ) { int maxLevel = organisationUnitService.getMaxOfOrganisationUnitLevels(); - return programStageInstanceStore.getTabularReportCount( programStage, searchingKeys, organisationUnits, level, + return programStageInstanceStore.getTabularReportCount( programStage, columns, organisationUnits, level, maxLevel, startDate, endDate ); } === modified file 'dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/program/hibernate/HibernateProgramStageInstanceStore.java' --- dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/program/hibernate/HibernateProgramStageInstanceStore.java 2012-06-24 13:42:21 +0000 +++ dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/program/hibernate/HibernateProgramStageInstanceStore.java 2012-06-24 14:29:16 +0000 @@ -26,12 +26,6 @@ */ package org.hisp.dhis.program.hibernate; -import static org.hisp.dhis.patientreport.PatientTabularReport.PREFIX_DATA_ELEMENT; -import static org.hisp.dhis.patientreport.PatientTabularReport.PREFIX_FIXED_ATTRIBUTE; -import static org.hisp.dhis.patientreport.PatientTabularReport.PREFIX_IDENTIFIER_TYPE; -import static org.hisp.dhis.patientreport.PatientTabularReport.PREFIX_PATIENT_ATTRIBUTE; -import static org.hisp.dhis.system.util.TextUtils.lower; - import java.util.ArrayList; import java.util.Collection; import java.util.Date; @@ -53,6 +47,7 @@ import org.hisp.dhis.patient.Patient; import org.hisp.dhis.patient.PatientAttributeService; import org.hisp.dhis.patient.PatientIdentifierTypeService; +import org.hisp.dhis.patientreport.TabularReportColumn; import org.hisp.dhis.program.ProgramInstance; import org.hisp.dhis.program.ProgramStage; import org.hisp.dhis.program.ProgramStageInstance; @@ -92,27 +87,6 @@ this.statementBuilder = statementBuilder; } - private PatientIdentifierTypeService patientIdentifierTypeService; - - public void setPatientIdentifierTypeService( PatientIdentifierTypeService patientIdentifierTypeService ) - { - this.patientIdentifierTypeService = patientIdentifierTypeService; - } - - private PatientAttributeService patientAttributeService; - - public void setPatientAttributeService( PatientAttributeService patientAttributeService ) - { - this.patientAttributeService = patientAttributeService; - } - - private DataElementService dataElementService; - - public void setDataElementService( DataElementService dataElementService ) - { - this.dataElementService = dataElementService; - } - // ------------------------------------------------------------------------- // Implemented methods // ------------------------------------------------------------------------- @@ -222,7 +196,7 @@ } public Grid getTabularReport( ProgramStage programStage, Map orgUnitLevelMap, - Collection orgUnits, List searchKeys, int level, int maxLevel, Date startDate, + Collection orgUnits, List columns, int level, int maxLevel, Date startDate, Date endDate, boolean descOrder, Integer min, Integer max ) { // --------------------------------------------------------------------- @@ -238,48 +212,20 @@ { int l = i + 1; String name = orgUnitLevelMap.containsKey( l ) ? orgUnitLevelMap.get( l ).getName() : "Level " + l; - + grid.addHeader( new GridHeader( name, false, true ) ); } - for ( String searchKey : searchKeys ) + for ( TabularReportColumn column : columns ) { - String[] values = searchKey.split( "_" ); - String objectType = values[0]; - - boolean hidden = Boolean.parseBoolean( values[2] ); - String name = ""; - - if ( objectType.equals( PREFIX_FIXED_ATTRIBUTE ) ) - { - name = values[1]; - } - else - { - int objectId = Integer.parseInt( values[1] ); - - if ( objectType.equals( PREFIX_IDENTIFIER_TYPE ) ) - { - name = patientIdentifierTypeService.getPatientIdentifierType( objectId ).getName(); - } - else if ( objectType.equals( PREFIX_PATIENT_ATTRIBUTE ) ) - { - name = patientAttributeService.getPatientAttribute( objectId ).getName(); - } - else if ( objectType.equals( PREFIX_DATA_ELEMENT ) ) - { - name = dataElementService.getDataElement( objectId ).getName(); - } - } - - grid.addHeader( new GridHeader( name, hidden, true ) ); + grid.addHeader( new GridHeader( column.getName(), column.isHidden(), true ) ); } // --------------------------------------------------------------------- // Get SQL and build grid // --------------------------------------------------------------------- - String sql = getTabularReportSql( false, programStage, searchKeys, orgUnits, level, maxLevel, startDate, + String sql = getTabularReportSql( false, programStage, columns, orgUnits, level, maxLevel, startDate, endDate, descOrder, min, max ); SqlRowSet rowSet = jdbcTemplate.queryForRowSet( sql ); @@ -289,10 +235,10 @@ return grid; } - public int getTabularReportCount( ProgramStage programStage, List searchKeys, + public int getTabularReportCount( ProgramStage programStage, List columns, Collection organisationUnits, int level, int maxLevel, Date startDate, Date endDate ) { - String sql = getTabularReportSql( true, programStage, searchKeys, organisationUnits, level, maxLevel, + String sql = getTabularReportSql( true, programStage, columns, organisationUnits, level, maxLevel, startDate, endDate, false, null, null ); return jdbcTemplate.queryForInt( sql ); @@ -302,10 +248,7 @@ // Supportive methods // ------------------------------------------------------------------------- - /** - * Search values on format type_id/name_hidden_='query' - */ - private String getTabularReportSql( boolean count, ProgramStage programStage, List searchKeys, + private String getTabularReportSql( boolean count, ProgramStage programStage, List columns, Collection orgUnits, int level, int maxLevel, Date startDate, Date endDate, boolean descOrder, Integer min, Integer max ) { @@ -321,57 +264,49 @@ sql += "(select name from organisationunit where organisationunitid=ous.idlevel" + l + ") as level_" + i + ","; } - for ( String searchKey : searchKeys ) + for ( TabularReportColumn column : columns ) { - String[] values = searchKey.split( "_" ); - String objectType = values[0]; - - if ( objectType.equals( PREFIX_FIXED_ATTRIBUTE ) ) - { - sql += "p." + values[1] + ","; - - if ( values.length == 4 ) - { - where += operator + "lower(" + values[1] + ") " + lower( values[3] ) + " "; - operator = "and "; - } - } - else - { - int objectId = Integer.parseInt( values[1] ); - - if ( objectType.equals( PREFIX_IDENTIFIER_TYPE ) ) - { - sql += "(select identifier from patientidentifier where patientid=p.patientid and patientidentifiertypeid=" - + objectId + ") as identifier_" + objectId + ","; - - if ( values.length == 4 ) - { - where += operator + "lower(identifier_" + objectId + ") " + lower( values[3] ) + " "; - operator = "and "; - } - } - else if ( objectType.equals( PREFIX_PATIENT_ATTRIBUTE ) ) - { - sql += "(select value from patientattributevalue where patientid=p.patientid and patientattributeid=" - + objectId + ") as attribute_" + objectId + ","; - - if ( values.length == 4 ) - { - where += operator + "lower(attribute_" + objectId + ") " + lower( values[3] ) + " "; - operator = "and "; - } - } - else if ( objectType.equals( PREFIX_DATA_ELEMENT ) ) - { - sql += "(select value from patientdatavalue where programstageinstanceid=psi.programstageinstanceid and dataelementid=" - + objectId + ") as element_" + objectId + ","; - - if ( values.length == 4 ) - { - where += operator + "lower(element_" + objectId + ") " + lower( values[3] ) + " "; - operator = "and "; - } + if ( column.isFixedAttribute() ) + { + sql += "p." + column.getIdentifier() + ","; + + if ( column.hasQuery() ) + { + where += operator + "lower(" + column.getIdentifier() + ") " + column.getQuery() + " "; + operator = "and "; + } + } + else if ( column.isIdentifierType() ) + { + sql += "(select identifier from patientidentifier where patientid=p.patientid and patientidentifiertypeid=" + + column.getIdentifier() + ") as identifier_" + column.getIdentifier() + ","; + + if ( column.hasQuery() ) + { + where += operator + "lower(identifier_" + column.getIdentifier() + ") " + column.getQuery() + " "; + operator = "and "; + } + } + else if ( column.isDynamicAttribute() ) + { + sql += "(select value from patientattributevalue where patientid=p.patientid and patientattributeid=" + + column.getIdentifier() + ") as attribute_" + column.getIdentifier() + ","; + + if ( column.hasQuery() ) + { + where += operator + "lower(attribute_" + column.getIdentifier() + ") " + column.getQuery() + " "; + operator = "and "; + } + } + else if ( column.isDataElement() ) + { + sql += "(select value from patientdatavalue where programstageinstanceid=psi.programstageinstanceid and dataelementid=" + + column.getIdentifier() + ") as element_" + column.getIdentifier() + ","; + + if ( column.hasQuery() ) + { + where += operator + "lower(element_" + column.getIdentifier() + ") " + column.getQuery() + " "; + operator = "and "; } } } @@ -412,8 +347,7 @@ sql += (min != null && max != null) ? statementBuilder.limitRecord( min, max ) : ""; sql += ") as tabular ";// TODO page size - // filters - sql += where; + sql += where; // filters sql = sql.substring( 0, sql.length() - 1 ) + " "; // Remove last comma === modified file 'dhis-2/dhis-services/dhis-service-patient/src/main/resources/META-INF/dhis/beans.xml' --- dhis-2/dhis-services/dhis-service-patient/src/main/resources/META-INF/dhis/beans.xml 2012-06-14 13:07:22 +0000 +++ dhis-2/dhis-services/dhis-service-patient/src/main/resources/META-INF/dhis/beans.xml 2012-06-24 14:29:16 +0000 @@ -39,10 +39,6 @@ - - - columns = getTableColumns(); // --------------------------------------------------------------------- // Generate tabular report @@ -303,7 +311,7 @@ if ( type == null ) // Tabular report { - int totalRecords = programStageInstanceService.getTabularReportCount( programStage, searchingValues, + int totalRecords = programStageInstanceService.getTabularReportCount( programStage, columns, organisationUnits, level, startValue, endValue ); total = getNumberOfPages( totalRecords ); @@ -311,12 +319,12 @@ this.paging = createPaging( totalRecords ); // total = paging.getTotal(); //TODO - grid = programStageInstanceService.getTabularReport( programStage, searchingValues, organisationUnits, + grid = programStageInstanceService.getTabularReport( programStage, columns, organisationUnits, level, startValue, endValue, !orderByOrgunitAsc, paging.getStartPos(), paging.getPageSize() ); } else // Download as Excel { - grid = programStageInstanceService.getTabularReport( programStage, searchingValues, organisationUnits, + grid = programStageInstanceService.getTabularReport( programStage, columns, organisationUnits, level, startValue, endValue, !orderByOrgunitAsc, null, null ); } @@ -336,16 +344,34 @@ return (totalRecord % pageSize == 0) ? (totalRecord / pageSize) : (totalRecord / pageSize + 1); } - private void getParams() + private List getTableColumns() { + List columns = new ArrayList(); + int index = 0; for ( String searchValue : searchingValues ) { String[] values = searchValue.split( "_" ); String prefix = values[0]; + + TabularReportColumn column = new TabularReportColumn(); + column.setPrefix( prefix ); + column.setIdentifier( values[1] ); + column.setHidden( Boolean.parseBoolean( values[2] ) ); + column.setQuery( values.length == 4 ? TextUtils.lower( values[3] ) : null ); - if ( prefix.equals( PREFIX_PATIENT_ATTRIBUTE ) ) + if ( PREFIX_FIXED_ATTRIBUTE.equals( prefix ) ) + { + column.setName( values[1] ); + } + else if ( PREFIX_IDENTIFIER_TYPE.equals( prefix ) ) + { + PatientIdentifierType identifierType = patientIdentifierTypeService.getPatientIdentifierType( column.getIdentifierAsInt() ); + + column.setName( identifierType.getName() ); + } + else if ( PREFIX_PATIENT_ATTRIBUTE.equals( prefix ) ) { int objectId = Integer.parseInt( values[1] ); PatientAttribute attribute = patientAttributeService.getPatientAttribute( objectId ); @@ -353,8 +379,10 @@ valueTypes.add( attribute.getValueType() ); mapSuggestedValues.put( index, getSuggestedAttributeValues( attribute ) ); + + column.setName( attribute.getName() ); } - else if ( prefix.equals( PREFIX_DATA_ELEMENT ) ) + else if ( PREFIX_DATA_ELEMENT.equals( prefix ) ) { int objectId = Integer.parseInt( values[1] ); DataElement dataElement = dataElementService.getDataElement( objectId ); @@ -363,10 +391,16 @@ String valueType = dataElement.getOptionSet() != null ? VALUE_TYPE_OPTION_SET : dataElement.getType(); valueTypes.add( valueType ); mapSuggestedValues.put( index, getSuggestedDataElementValues( dataElement ) ); + + column.setName( dataElement.getName() ); } + columns.add( column ); + index++; } + + return columns; } private List getSuggestedAttributeValues( PatientAttribute patientAttribute ) === modified file 'dhis-2/dhis-web/dhis-web-caseentry/src/main/resources/META-INF/dhis/beans.xml' --- dhis-2/dhis-web/dhis-web-caseentry/src/main/resources/META-INF/dhis/beans.xml 2012-06-23 11:05:13 +0000 +++ dhis-2/dhis-web/dhis-web-caseentry/src/main/resources/META-INF/dhis/beans.xml 2012-06-24 14:29:16 +0000 @@ -876,6 +876,7 @@ +