=== modified file 'local/vn/dhis-service-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/ExportItem.java' --- local/vn/dhis-service-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/ExportItem.java 2011-12-22 07:43:18 +0000 +++ local/vn/dhis-service-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/ExportItem.java 2012-04-25 09:59:24 +0000 @@ -144,6 +144,8 @@ public static class TYPE { public static final String DATAELEMENT = "dataelement"; + + public static final String DATAELEMENT_VALUETYPE_TEXT = "dataelement_valuetype_text"; public static final String ORGANISATION = "organisation"; @@ -161,6 +163,7 @@ { List list = new ArrayList(); list.add( DATAELEMENT ); + list.add( DATAELEMENT_VALUETYPE_TEXT ); list.add( ORGANISATION ); list.add( INDICATOR ); list.add( DATAELEMENT_CODE ); === modified file 'local/vn/dhis-service-spreadsheet-reporting/src/main/resources/org/hisp/dhis/reportsheet/hibernate/ExportReport.hbm.xml' --- local/vn/dhis-service-spreadsheet-reporting/src/main/resources/org/hisp/dhis/reportsheet/hibernate/ExportReport.hbm.xml 2012-04-16 03:00:30 +0000 +++ local/vn/dhis-service-spreadsheet-reporting/src/main/resources/org/hisp/dhis/reportsheet/hibernate/ExportReport.hbm.xml 2012-04-25 09:59:24 +0000 @@ -65,7 +65,7 @@ - + getDataElementsByAttribute( Attribute attribute, String value ); + + int getDataElementCount( Integer dataElementId, Integer attributeId, String value ); } === modified file 'local/vn/dhis-service-vn/src/main/java/org/hisp/dhis/dataelement/LocalDataElementStore.java' --- local/vn/dhis-service-vn/src/main/java/org/hisp/dhis/dataelement/LocalDataElementStore.java 2012-03-24 01:29:01 +0000 +++ local/vn/dhis-service-vn/src/main/java/org/hisp/dhis/dataelement/LocalDataElementStore.java 2012-04-25 09:59:24 +0000 @@ -33,10 +33,12 @@ /** * @author Chau Thu Tran - * + * * @version $LocalDataElementStore.java Mar 23, 2012 4:10:24 PM$ */ public interface LocalDataElementStore { Collection getByAttributeValue( Attribute attribute, String value ); + + int getDataElementCount( Integer dataElementId, Integer attributeId, String value ); } === modified file 'local/vn/dhis-service-vn/src/main/java/org/hisp/dhis/dataelement/hibernate/HibernateLocalDataElementStore.java' --- local/vn/dhis-service-vn/src/main/java/org/hisp/dhis/dataelement/hibernate/HibernateLocalDataElementStore.java 2012-03-30 04:49:55 +0000 +++ local/vn/dhis-service-vn/src/main/java/org/hisp/dhis/dataelement/hibernate/HibernateLocalDataElementStore.java 2012-04-25 09:59:24 +0000 @@ -29,6 +29,7 @@ import java.util.Collection; +import org.hibernate.criterion.Projections; import org.hibernate.criterion.Restrictions; import org.hisp.dhis.attribute.Attribute; import org.hisp.dhis.common.hibernate.HibernateIdentifiableObjectStore; @@ -51,4 +52,17 @@ Restrictions.eq( "attributeValue.attribute", attribute ) ).add( Restrictions.eq( "attributeValue.value", value ).ignoreCase() ).list(); } + + @Override + public int getDataElementCount( Integer dataElementId, Integer attributeId, String value ) + { + Number rs = (Number) getCriteria() + .add( Restrictions.eq( "id", dataElementId ) ) + .createAlias( "attributeValues", "attributeValue" ) + .add( Restrictions.eq( "attributeValue.attribute.id", attributeId ) ) + .add( Restrictions.eq( "attributeValue.value", value ).ignoreCase() ) + .setProjection( Projections.rowCount() ).uniqueResult(); + + return rs != null ? rs.intValue() : 0; + } } === modified file 'local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/exporting/AbstractGenerateExcelReportSupport.java' --- local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/exporting/AbstractGenerateExcelReportSupport.java 2011-11-03 04:26:28 +0000 +++ local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/exporting/AbstractGenerateExcelReportSupport.java 2012-04-25 09:59:24 +0000 @@ -49,8 +49,12 @@ import org.apache.poi.ss.usermodel.Sheet; import org.hisp.dhis.organisationunit.OrganisationUnit; import org.hisp.dhis.organisationunit.OrganisationUnitGroup; +import org.hisp.dhis.period.DailyPeriodType; +import org.hisp.dhis.period.MonthlyPeriodType; import org.hisp.dhis.period.Period; import org.hisp.dhis.period.PeriodType; +import org.hisp.dhis.period.QuarterlyPeriodType; +import org.hisp.dhis.period.YearlyPeriodType; import org.hisp.dhis.reportsheet.ExportItem; import org.hisp.dhis.reportsheet.ExportReport; import org.hisp.dhis.reportsheet.utils.ExcelUtils; @@ -204,6 +208,31 @@ // DataElement Value // ------------------------------------------------------------------------- + protected String getTextValue( ExportItem exportItem, OrganisationUnit organisationUnit ) + { + Period p = null; + + if ( exportItem.getPeriodType().equalsIgnoreCase( ExportItem.PERIODTYPE.DAILY ) ) + { + p = periodService.getPeriod( startDate, startDate, new DailyPeriodType() ); + } + else if ( exportItem.getPeriodType().equalsIgnoreCase( ExportItem.PERIODTYPE.SELECTED_MONTH ) ) + { + p = periodService.getPeriod( startDate, endDate, new MonthlyPeriodType() ); + } + else if ( exportItem.getPeriodType().equalsIgnoreCase( ExportItem.PERIODTYPE.QUARTERLY ) ) + { + p = periodService.getPeriod( startQuaterly, endQuaterly, new QuarterlyPeriodType() ); + } + else if ( exportItem.getPeriodType().equalsIgnoreCase( ExportItem.PERIODTYPE.YEARLY ) ) + { + p = periodService.getPeriod( firstDayOfYear, endDateOfYear, new YearlyPeriodType() ); + } + + return generateExpression( exportItem, p, organisationUnit, dataElementService, categoryService, + dataValueService ); + } + protected double getDataValue( ExportItem exportItem, OrganisationUnit organisationUnit ) { double value = 0.0; === modified file 'local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/exporting/action/GenerateReportAttributeAction.java' --- local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/exporting/action/GenerateReportAttributeAction.java 2012-04-25 02:57:38 +0000 +++ local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/exporting/action/GenerateReportAttributeAction.java 2012-04-25 09:59:24 +0000 @@ -27,13 +27,13 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +import static org.hisp.dhis.expression.Expression.SEPARATOR; + import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; -import static org.hisp.dhis.expression.Expression.SEPARATOR; - import org.apache.poi.ss.usermodel.Sheet; import org.hisp.dhis.dataelement.DataElement; import org.hisp.dhis.dataelement.DataElementCategoryOptionCombo; @@ -95,7 +95,6 @@ for ( AttributeValueGroupOrder avgOrder : exportReport.getAttributeValueOrders() ) { int serial = 1; - DataElement de = null; List dataElements = null; flag = true; @@ -135,18 +134,24 @@ } else { - ExportItem newExportItem = new ExportItem(); - - de = dataElements.get( Integer.parseInt( exportItem.getExtraExpression() ) - 1 ); - - if ( de != null ) + int id = Integer.parseInt( exportItem.getExpression().split( "@" )[0] ); + String value = exportItem.getExpression().split( "@" )[1]; + + for ( DataElement de : dataElements ) { - newExportItem.setExpression( de.getId() + SEPARATOR + optionCombo.getId() ); - - double value = this.getDataValue( newExportItem, organisationUnit ); - - ExcelUtils.writeValueByPOI( rowBegin, exportItem.getColumn(), value + "", - ExcelUtils.NUMBER, sheet, this.csNumber ); + if ( localDataElementService.getDataElementCount( de.getId(), id, value ) > 0 ) + { + ExportItem newExportItem = new ExportItem(); + + newExportItem.setExpression( de.getId() + SEPARATOR + optionCombo.getId() ); + + double result = this.getDataValue( newExportItem, organisationUnit ); + + ExcelUtils.writeValueByPOI( rowBegin, exportItem.getColumn(), result + "", + ExcelUtils.NUMBER, sheet, this.csNumber ); + + break; + } } } } === modified file 'local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/exporting/action/GenerateReportNormalAction.java' --- local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/exporting/action/GenerateReportNormalAction.java 2011-11-09 07:34:53 +0000 +++ local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/exporting/action/GenerateReportNormalAction.java 2012-04-25 09:59:24 +0000 @@ -83,6 +83,13 @@ ExcelUtils.writeValueByPOI( reportItem.getRow(), reportItem.getColumn(), String.valueOf( value ), ExcelUtils.NUMBER, sheet, this.csNumber ); } + else if ( reportItem.getItemType().equalsIgnoreCase( ExportItem.TYPE.DATAELEMENT_VALUETYPE_TEXT ) ) + { + String value = getTextValue( reportItem, organisationUnit ); + + ExcelUtils.writeValueByPOI( reportItem.getRow(), reportItem.getColumn(), value, ExcelUtils.NUMBER, + sheet, this.csText ); + } else if ( reportItem.getItemType().equalsIgnoreCase( ExportItem.TYPE.INDICATOR ) ) { double value = getIndicatorValue( reportItem, organisationUnit ); === modified file 'local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/filemanager/action/ExcelTemplateListAction.java' --- local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/filemanager/action/ExcelTemplateListAction.java 2011-08-04 08:39:55 +0000 +++ local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/filemanager/action/ExcelTemplateListAction.java 2012-04-25 09:59:24 +0000 @@ -148,6 +148,7 @@ public List getReportTypes() { this.reportTypes.add( ExportReport.TYPE.NORMAL ); + this.reportTypes.add( ExportReport.TYPE.ATTRIBUTE ); this.reportTypes.add( ExportReport.TYPE.CATEGORY ); this.reportTypes.add( ExportReport.TYPE.PERIOD_COLUMN_LISTING ); this.reportTypes.add( ExportReport.TYPE.ORGANIZATION_GROUP_LISTING ); === modified file 'local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/utils/ExpressionUtils.java' --- local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/utils/ExpressionUtils.java 2012-02-03 08:38:42 +0000 +++ local/vn/dhis-web-spreadsheet-reporting/src/main/java/org/hisp/dhis/reportsheet/utils/ExpressionUtils.java 2012-04-25 09:59:24 +0000 @@ -38,9 +38,11 @@ import org.hisp.dhis.dataelement.DataElementCategoryOptionCombo; import org.hisp.dhis.dataelement.DataElementCategoryService; import org.hisp.dhis.dataelement.DataElementService; +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.reportsheet.ExportItem; /** @@ -62,6 +64,54 @@ * * @return The generated expression */ + public static String generateExpression( ExportItem reportItem, Period period, OrganisationUnit organisationUnit, + DataElementService dataElementService, DataElementCategoryService categoryService, + DataValueService dataValueService ) + { + try + { + Pattern pattern = Pattern.compile( "(\\[\\d+\\.\\d+\\])" ); + + Matcher matcher = pattern.matcher( reportItem.getExpression() ); + StringBuffer buffer = new StringBuffer(); + + while ( matcher.find() ) + { + String replaceString = matcher.group(); + + replaceString = replaceString.replaceAll( "[\\[\\]]", "" ); + + String dataElementIdString = replaceString.substring( 0, replaceString.indexOf( SEPARATOR ) ); + String optionComboIdString = replaceString.substring( replaceString.indexOf( SEPARATOR ) + 1, + replaceString.length() ); + + int dataElementId = Integer.parseInt( dataElementIdString ); + int optionComboId = Integer.parseInt( optionComboIdString ); + + DataElement dataElement = dataElementService.getDataElement( dataElementId ); + + DataElementCategoryOptionCombo optionCombo = categoryService + .getDataElementCategoryOptionCombo( optionComboId ); + + { + replaceString = getValue( dataElement, optionCombo, organisationUnit, period, dataValueService ) + + ""; + + matcher.appendReplacement( buffer, replaceString ); + } + } + + // Finally + matcher.appendTail( buffer ); + + return buffer.toString(); + } + catch ( NumberFormatException ex ) + { + throw new RuntimeException( "Illegal DataElement id", ex ); + } + } + public static String generateExpression( ExportItem reportItem, Date startDate, Date endDate, OrganisationUnit organisationUnit, DataElementService dataElementService, DataElementCategoryService categoryService, AggregationService aggregationService ) @@ -91,7 +141,6 @@ DataElementCategoryOptionCombo optionCombo = categoryService .getDataElementCategoryOptionCombo( optionComboId ); - // Normal { replaceString = getValue( dataElement, optionCombo, organisationUnit, startDate, endDate, aggregationService ) @@ -163,6 +212,15 @@ // Supporting method(s) // ------------------------------------------------------------------------- + private static String getValue( DataElement dataElement, DataElementCategoryOptionCombo optionCombo, + OrganisationUnit organisationUnit, Period period, DataValueService dataValueService ) + { + String aggregatedValue = dataValueService.getDataValue( organisationUnit, dataElement, period, optionCombo ) + .getValue(); + + return (aggregatedValue == null) ? "" : aggregatedValue; + } + private static double getValue( DataElement dataElement, DataElementCategoryOptionCombo optionCombo, OrganisationUnit organisationUnit, Date startDate, Date endDate, AggregationService aggregationService ) { @@ -171,11 +229,6 @@ // aggregatedDataValueService.getAggregatedValue( dataElement, // optionCombo, startDate, endDate, ); - if ( aggregatedValue == null ) - { - aggregatedValue = 0.0; - } - - return aggregatedValue; + return (aggregatedValue == null) ? 0.0 : aggregatedValue; } } === modified file 'local/vn/dhis-web-spreadsheet-reporting/src/main/resources/org/hisp/dhis/reportsheet/i18n_module.properties' --- local/vn/dhis-web-spreadsheet-reporting/src/main/resources/org/hisp/dhis/reportsheet/i18n_module.properties 2012-04-19 03:58:49 +0000 +++ local/vn/dhis-web-spreadsheet-reporting/src/main/resources/org/hisp/dhis/reportsheet/i18n_module.properties 2012-04-25 09:59:24 +0000 @@ -113,6 +113,7 @@ dataelements = Data Elements temp_place = Temp Place update_sorted_dataelement = Update Sorted Data Element +dataelement_valuetype_text = Data Element Text Type dataelement_name = Data Element Name dataelement_code = Data Element Code available_dataelementgroups = Available Data Element Groups === modified file 'local/vn/dhis-web-spreadsheet-reporting/src/main/resources/org/hisp/dhis/reportsheet/i18n_module_vi_VN.properties' --- local/vn/dhis-web-spreadsheet-reporting/src/main/resources/org/hisp/dhis/reportsheet/i18n_module_vi_VN.properties 2012-04-19 03:58:49 +0000 +++ local/vn/dhis-web-spreadsheet-reporting/src/main/resources/org/hisp/dhis/reportsheet/i18n_module_vi_VN.properties 2012-04-25 09:59:24 +0000 @@ -40,6 +40,7 @@ rename_successful=T\u00ean t\u1eadp tin \u0111\u00e3 \u0111\u1ed5i i18n_name_is_null=H\u00e3y nh\u1eadp t\u00ean! no_item=Kh\u00f4ng c\u00f3 ph\u1ea7n t\u1eed \u0111\u01b0\u1ee3c ch\u1ecdn +dataelement_valuetype_text = Ph\u1ea7n t\u1eed d\u1eef li\u1ec7u ki\u1ec3u chu\u1ed7i dataelement_code=M\u00e3 ph\u1ea7n t\u1eed d\u1eef li\u1ec7u selected_dataelementgroups=Nh\u00f3m d\u1eef li\u1ec7u \u0111\u01b0\u1ee3c ch\u1ecdn cannot_write_file_being_used=Kh\u00f4ng th\u1ec3 ghi l\u00ean t\u1eadp tin n\u00e0y v\u00ec \u0111ang \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng b\u1edfi m\u1ed9t ch\u01b0\u01a1ng tr\u00ecnh kh\u00e1c === modified file 'local/vn/dhis-web-spreadsheet-reporting/src/main/webapp/dhis-web-spreadsheet-reporting/javascript/attribute.ajax.js' --- local/vn/dhis-web-spreadsheet-reporting/src/main/webapp/dhis-web-spreadsheet-reporting/javascript/attribute.ajax.js 2012-04-16 03:00:30 +0000 +++ local/vn/dhis-web-spreadsheet-reporting/src/main/webapp/dhis-web-spreadsheet-reporting/javascript/attribute.ajax.js 2012-04-25 09:59:24 +0000 @@ -45,11 +45,15 @@ this.loadAttributeValuesByAttribute = function( id, curItems, sourceList, destList, isFirstLoad ) { - var target = jQuery( "#" + sourceList ); + var source = jQuery( "#" + sourceList ); var dest = jQuery( "#" + destList ); - target.empty(); + + if ( source ) + { + source.empty(); + } - if ( !isFirstLoad ) + if ( dest && !isFirstLoad ) { dest.empty(); } @@ -67,7 +71,7 @@ jQuery.each( json.values, function( i, item ) { valueList.push( new AttributeValue( item.value ) ); - target.append( '' ); + source.append( '' ); } ); attributeValueMap[ id ] = valueList; @@ -77,7 +81,7 @@ { jQuery.each( valueList, function( i, item ) { - target.append( '' ); + source.append( '' ); } ); } === modified file 'local/vn/dhis-web-spreadsheet-reporting/src/main/webapp/dhis-web-spreadsheet-reporting/javascript/exportItems.js' --- local/vn/dhis-web-spreadsheet-reporting/src/main/webapp/dhis-web-spreadsheet-reporting/javascript/exportItems.js 2012-04-19 03:58:49 +0000 +++ local/vn/dhis-web-spreadsheet-reporting/src/main/webapp/dhis-web-spreadsheet-reporting/javascript/exportItems.js 2012-04-25 09:59:24 +0000 @@ -56,10 +56,7 @@ if( value == 'dataelement' ) { if ( attribute ) { - disable( 'expression-button' ); - setFieldValue( 'exportItem input[id=expression]', value ); - removeValidatorRulesById( 'exportItem input[id=expression]' ); - removeValidatorRulesById( 'dataelement textarea[id=formula]' ); + byId('expression-button' ).onclick = avExpressionBuilderForm; } else { byId('expression-button' ).onclick = deExpressionBuilderForm; } @@ -92,11 +89,22 @@ function insertExpression() { - if( category ) var expression = "[*." + getFieldValue("elementSelect")+ "]"; - else var expression = getFieldValue("elementSelect"); - setFieldValue( 'formula', getFieldValue( 'formula') + expression ); - - getExpression(); + var expression = ''; + + if ( attribute ) { + expression = "[" + getFieldValue( "groupSelect" ) + "@" + getFieldValue( "elementSelect" ) + "]"; + } + else if ( category ) { + expression = "[*." + getFieldValue( "elementSelect" )+ "]"; + } + else { + expression = getFieldValue( "elementSelect" ); + alert(expression); + } + + setFieldValue( 'formula', getFieldValue( 'formula' ) + expression ); + + if ( !attribute ) { getExpression(); } } function getExpression() === modified file 'local/vn/dhis-web-spreadsheet-reporting/src/main/webapp/dhis-web-spreadsheet-reporting/report/addExportItemForm.vm' --- local/vn/dhis-web-spreadsheet-reporting/src/main/webapp/dhis-web-spreadsheet-reporting/report/addExportItemForm.vm 2012-04-19 03:58:49 +0000 +++ local/vn/dhis-web-spreadsheet-reporting/src/main/webapp/dhis-web-spreadsheet-reporting/report/addExportItemForm.vm 2012-04-25 09:59:24 +0000 @@ -1,3 +1,4 @@ + + + + + \ No newline at end of file === modified file 'local/vn/dhis-web-spreadsheet-reporting/src/main/webapp/dhis-web-spreadsheet-reporting/report/dataelementExpressionBuilderForm.vm' --- local/vn/dhis-web-spreadsheet-reporting/src/main/webapp/dhis-web-spreadsheet-reporting/report/dataelementExpressionBuilderForm.vm 2012-04-05 07:39:23 +0000 +++ local/vn/dhis-web-spreadsheet-reporting/src/main/webapp/dhis-web-spreadsheet-reporting/report/dataelementExpressionBuilderForm.vm 2012-04-25 09:59:24 +0000 @@ -90,7 +90,7 @@ function getDataElements( id, target ) { #if($exportReport.isCategory()) - dataDictionary.loadDataElementsByGroup( id, target); + dataDictionary.loadDataElementsByGroup( id, target ); #else dataDictionary.loadOperands( target, {id:id} ); #end === modified file 'local/vn/dhis-web-spreadsheet-reporting/src/main/webapp/dhis-web-spreadsheet-reporting/report/updateExportItemForm.vm' --- local/vn/dhis-web-spreadsheet-reporting/src/main/webapp/dhis-web-spreadsheet-reporting/report/updateExportItemForm.vm 2012-04-19 03:58:49 +0000 +++ local/vn/dhis-web-spreadsheet-reporting/src/main/webapp/dhis-web-spreadsheet-reporting/report/updateExportItemForm.vm 2012-04-25 09:59:24 +0000 @@ -1,4 +1,5 @@ - +