=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnit.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnit.java 2011-07-13 18:16:12 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnit.java 2011-07-25 08:52:10 +0000 @@ -104,14 +104,14 @@ private String phoneNumber; + private Boolean hasPatients; + private transient int level; private transient boolean currentParent; private transient String type; - private Boolean hasPatients; - // ------------------------------------------------------------------------- // Constructors // ------------------------------------------------------------------------- @@ -720,5 +720,4 @@ { this.type = type; } - } === added file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnitDataSetAssociationSet.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnitDataSetAssociationSet.java 1970-01-01 00:00:00 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnitDataSetAssociationSet.java 2011-07-25 09:10:33 +0000 @@ -0,0 +1,68 @@ +package org.hisp.dhis.organisationunit; + +/* + * Copyright (c) 2004-2010, University of Oslo + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of the HISP project nor the names of its contributors may + * be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * @author Lars Helge Overland + */ +public class OrganisationUnitDataSetAssociationSet +{ + private List> dataSetAssociationSets = new ArrayList>(); + + private Map organisationUnitAssociationSetMap = new HashMap(); + + public OrganisationUnitDataSetAssociationSet() + { + } + + public List> getDataSetAssociationSets() + { + return dataSetAssociationSets; + } + + public void setDataSetAssociationSets( List> dataSetAssociationSets ) + { + this.dataSetAssociationSets = dataSetAssociationSets; + } + + public Map getOrganisationUnitAssociationSetMap() + { + return organisationUnitAssociationSetMap; + } + + public void setOrganisationUnitAssociationSetMap( Map organisationUnitAssociationSetMap ) + { + this.organisationUnitAssociationSetMap = organisationUnitAssociationSetMap; + } +} === modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnitService.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnitService.java 2011-04-26 17:29:50 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnitService.java 2011-07-22 20:43:53 +0000 @@ -240,6 +240,8 @@ * @return a collection of organisation units. */ Collection getOrganisationUnitsByNameAndGroups( String name, Collection groups, OrganisationUnit parent, boolean limit ); + + OrganisationUnitDataSetAssociationSet getOrganisationUnitDataSetAssociationSet(); // ------------------------------------------------------------------------- // OrganisationUnitHierarchy === modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnitStore.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnitStore.java 2011-04-23 18:52:44 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnitStore.java 2011-07-25 08:52:10 +0000 @@ -28,6 +28,8 @@ */ import java.util.Collection; +import java.util.Map; +import java.util.Set; import org.hisp.dhis.common.GenericIdentifiableObjectStore; @@ -91,6 +93,8 @@ */ void updateOrganisationUnitParent( int organisationUnitId, int parentId ); + Map> getOrganisationUnitDataSetAssocationMap(); + // ------------------------------------------------------------------------- // OrganisationUnitLevel // ------------------------------------------------------------------------- === modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/user/UserCredentials.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/user/UserCredentials.java 2011-07-14 07:22:04 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/user/UserCredentials.java 2011-07-22 20:43:53 +0000 @@ -89,6 +89,24 @@ } /** + * Indicates whether this user credentials is a super user, implying that the + * ALL authority is present in at least one of the user authority groups of + * this user credentials. + */ + public boolean isSuper() + { + for ( UserAuthorityGroup group : userAuthorityGroups ) + { + if ( group.getAuthorities().contains( UserAuthorityGroup.AUTHORITY_ALL ) ) + { + return true; + } + } + + return false; + } + + /** * Returns a set of the aggregated data sets for all user authority groups * of this user credentials. */ === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataelement/hibernate/HibernateDataElementStore.java' --- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataelement/hibernate/HibernateDataElementStore.java 2011-07-22 09:17:04 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataelement/hibernate/HibernateDataElementStore.java 2011-07-22 20:43:53 +0000 @@ -38,7 +38,6 @@ import org.hibernate.Criteria; import org.hibernate.Query; import org.hibernate.Session; -import org.hibernate.criterion.Order; import org.hibernate.criterion.Restrictions; import org.hisp.dhis.dataelement.DataElement; import org.hisp.dhis.dataelement.DataElementCategoryCombo; @@ -165,16 +164,9 @@ return (DataElement) criteria.uniqueResult(); } - @SuppressWarnings( "unchecked" ) public Collection getAllDataElements() { - Session session = sessionFactory.getCurrentSession(); - - Criteria criteria = session.createCriteria( DataElement.class ); - criteria.setCacheable( true ); - criteria.addOrder( Order.asc( "name" ) ); - - return criteria.list(); + return getAll(); } @SuppressWarnings( "unchecked" ) @@ -252,11 +244,9 @@ @SuppressWarnings( "unchecked" ) public Collection getDataElementsWithGroupSets() { - final String sql = "from DataElement d where d.groupSets.size > 0"; - - Query query = sessionFactory.getCurrentSession().createQuery( sql ); - - return query.list(); + String hql = "from DataElement d where d.groupSets.size > 0"; + + return getQuery( hql ).list(); } public void setZeroIsSignificantForDataElements( Collection dataElementIds ) @@ -283,9 +273,7 @@ @SuppressWarnings( "unchecked" ) public Collection getDataElementsByZeroIsSignificant( boolean zeroIsSignificant ) { - Session session = sessionFactory.getCurrentSession(); - - Criteria criteria = session.createCriteria( DataElement.class ); + Criteria criteria = getCriteria(); criteria.add( Restrictions.eq( "zeroIsSignificant", zeroIsSignificant ) ); criteria.add( Restrictions.eq( "type", DataElement.VALUE_TYPE_INT ) ); === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataentryform/DefaultDataEntryFormService.java' --- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataentryform/DefaultDataEntryFormService.java 2011-07-21 20:11:07 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataentryform/DefaultDataEntryFormService.java 2011-07-22 20:43:53 +0000 @@ -271,12 +271,6 @@ return "Category option combo with id: " + optionComboId + " does not exist"; } - String dataElementValueType = dataElement.getDetailedNumberType(); - - // ------------------------------------------------------------- - // Insert data value for data element in output code for boolean - // ------------------------------------------------------------- - if ( dataElement.getType().equals( DataElement.VALUE_TYPE_BOOL ) ) { inputHtml = inputHtml.replace( "input", "select" ); === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataset/hibernate/HibernateDataSetStore.java' --- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataset/hibernate/HibernateDataSetStore.java 2011-04-22 17:02:27 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataset/hibernate/HibernateDataSetStore.java 2011-07-22 20:43:53 +0000 @@ -158,12 +158,9 @@ return (DataSet) criteria.uniqueResult(); } - @SuppressWarnings( "unchecked" ) public Collection getAllDataSets() { - Session session = sessionFactory.getCurrentSession(); - - return session.createCriteria( DataSet.class ).list(); + return getAll(); } @SuppressWarnings( "unchecked" ) === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/indicator/hibernate/HibernateIndicatorStore.java' --- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/indicator/hibernate/HibernateIndicatorStore.java 2011-07-14 10:31:16 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/indicator/hibernate/HibernateIndicatorStore.java 2011-07-22 20:43:53 +0000 @@ -147,7 +147,7 @@ { final String hql = "from Indicator d where d.groupSets.size > 0"; - return sessionFactory.getCurrentSession().createQuery( hql ).list(); + return getQuery( hql ).list(); } @SuppressWarnings( "unchecked" ) @@ -155,7 +155,7 @@ { final String hql = "from Indicator d where d.groups.size = 0"; - return sessionFactory.getCurrentSession().createQuery( hql ).list(); + return getQuery( hql ).list(); } @SuppressWarnings( "unchecked" ) @@ -163,7 +163,7 @@ { final String hql = "from Indicator d where d.dataSets.size > 0"; - return sessionFactory.getCurrentSession().createQuery( hql ).list(); + return getQuery( hql ).list(); } public int getIndicatorCount() === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/organisationunit/DefaultOrganisationUnitService.java' --- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/organisationunit/DefaultOrganisationUnitService.java 2011-04-30 09:28:32 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/organisationunit/DefaultOrganisationUnitService.java 2011-07-25 09:10:33 +0000 @@ -40,13 +40,16 @@ import org.apache.commons.collections.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.hisp.dhis.dataset.DataSet; import org.hisp.dhis.hierarchy.HierarchyViolationException; import org.hisp.dhis.organisationunit.comparator.OrganisationUnitLevelComparator; import org.hisp.dhis.system.util.AuditLogUtil; +import org.hisp.dhis.system.util.ConversionUtils; import org.hisp.dhis.system.util.Filter; import org.hisp.dhis.system.util.FilterUtils; import org.hisp.dhis.system.util.UUIdUtils; import org.hisp.dhis.user.CurrentUserService; +import org.hisp.dhis.user.User; import org.springframework.transaction.annotation.Transactional; /** @@ -418,6 +421,47 @@ return limit && intersection != null && intersection.size() > MAX_LIMIT ? intersection.subList( 0, MAX_LIMIT ) : intersection; } + public OrganisationUnitDataSetAssociationSet getOrganisationUnitDataSetAssociationSet() + { + //TODO hierarchy ? + + Map> associationSet = organisationUnitStore.getOrganisationUnitDataSetAssocationMap(); + + filterOrganisationUnitSortedDataSets( associationSet ); + + OrganisationUnitDataSetAssociationSet set = new OrganisationUnitDataSetAssociationSet(); + + for ( Map.Entry> entry : associationSet.entrySet() ) + { + int index = set.getDataSetAssociationSets().indexOf( entry.getValue() ); + + if ( index == -1 ) // Association set does not exist, add new + { + index = set.getDataSetAssociationSets().size(); + set.getDataSetAssociationSets().add( entry.getValue() ); + } + + set.getOrganisationUnitAssociationSetMap().put( entry.getKey(), index ); + } + + return set; + } + + private void filterOrganisationUnitSortedDataSets( Map> associationMap ) + { + User currentUser = currentUserService.getCurrentUser(); + + if ( currentUser != null && !currentUser.getUserCredentials().isSuper() ) + { + Collection userDataSets = ConversionUtils.getIdentifiers( DataSet.class, currentUser.getUserCredentials().getAllDataSets() ); + + for ( Set dataSets : associationMap.values() ) + { + dataSets.retainAll( userDataSets ); + } + } + } + // ------------------------------------------------------------------------- // OrganisationUnitHierarchy // ------------------------------------------------------------------------- === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/organisationunit/hibernate/HibernateOrganisationUnitStore.java' --- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/organisationunit/hibernate/HibernateOrganisationUnitStore.java 2011-05-11 01:04:56 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/organisationunit/hibernate/HibernateOrganisationUnitStore.java 2011-07-25 08:52:10 +0000 @@ -27,8 +27,13 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +import java.sql.ResultSet; +import java.sql.SQLException; import java.util.Collection; +import java.util.HashMap; import java.util.HashSet; +import java.util.Map; +import java.util.Set; import org.amplecode.quick.StatementHolder; import org.amplecode.quick.StatementManager; @@ -47,6 +52,7 @@ import org.hisp.dhis.organisationunit.OrganisationUnitStore; import org.hisp.dhis.system.objectmapper.OrganisationUnitRelationshipRowMapper; import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.core.RowCallbackHandler; /** * @author Kristian Nordal @@ -156,6 +162,34 @@ return query.list(); } + + public Map> getOrganisationUnitDataSetAssocationMap() + { + final String sql = "select datasetid, sourceid from datasetsource"; + + final Map> map = new HashMap>(); + + jdbcTemplate.query( sql, new RowCallbackHandler() + { + public void processRow( ResultSet rs ) throws SQLException + { + int dataSetId = rs.getInt( 1 ); + int organisationUnitId = rs.getInt( 2 ); + + Set dataSets = map.get( organisationUnitId ); + + if ( dataSets == null ) + { + dataSets = new HashSet(); + map.put( organisationUnitId, dataSets ); + } + + dataSets.add( dataSetId ); + } + } ); + + return map; + } // ------------------------------------------------------------------------- // OrganisationUnitHierarchy === modified file 'dhis-2/dhis-web/dhis-web-dataentry/src/main/java/org/hisp/dhis/de/action/PageInitAction.java' --- dhis-2/dhis-web/dhis-web-dataentry/src/main/java/org/hisp/dhis/de/action/PageInitAction.java 2011-07-21 20:33:57 +0000 +++ dhis-2/dhis-web/dhis-web-dataentry/src/main/java/org/hisp/dhis/de/action/PageInitAction.java 2011-07-25 08:52:10 +0000 @@ -28,6 +28,9 @@ */ import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Set; import org.hisp.dhis.dataelement.DataElement; import org.hisp.dhis.dataelement.DataElementService; @@ -36,6 +39,8 @@ import org.hisp.dhis.expression.ExpressionService; import org.hisp.dhis.indicator.Indicator; import org.hisp.dhis.indicator.IndicatorService; +import org.hisp.dhis.organisationunit.OrganisationUnitDataSetAssociationSet; +import org.hisp.dhis.organisationunit.OrganisationUnitService; import org.hisp.dhis.ouwt.manager.OrganisationUnitSelectionManager; import com.opensymphony.xwork2.Action; @@ -84,6 +89,13 @@ { this.selectionManager = selectionManager; } + + private OrganisationUnitService organisationUnitService; + + public void setOrganisationUnitService( OrganisationUnitService organisationUnitService ) + { + this.organisationUnitService = organisationUnitService; + } // ------------------------------------------------------------------------- // Output @@ -116,6 +128,20 @@ { return dataSets; } + + private List> dataSetAssociationSets; + + public List> getDataSetAssociationSets() + { + return dataSetAssociationSets; + } + + private Map organisationUnitAssociationSetMap; + + public Map getOrganisationUnitAssociationSetMap() + { + return organisationUnitAssociationSetMap; + } // ------------------------------------------------------------------------- // Action implementation @@ -133,12 +159,18 @@ dataSets = dataSetService.getAllDataSets(); + OrganisationUnitDataSetAssociationSet organisationUnitSet = organisationUnitService.getOrganisationUnitDataSetAssociationSet(); + + dataSetAssociationSets = organisationUnitSet.getDataSetAssociationSets(); + + organisationUnitAssociationSetMap = organisationUnitSet.getOrganisationUnitAssociationSetMap(); + for ( Indicator indicator : indicators ) { indicator.setExplodedNumerator( expressionService.explodeExpression( indicator.getNumerator() ) ); indicator.setExplodedDenominator( expressionService.explodeExpression( indicator.getDenominator() ) ); } - + return SUCCESS; } } === modified file 'dhis-2/dhis-web/dhis-web-dataentry/src/main/resources/META-INF/dhis/beans.xml' --- dhis-2/dhis-web/dhis-web-dataentry/src/main/resources/META-INF/dhis/beans.xml 2011-07-21 14:11:46 +0000 +++ dhis-2/dhis-web/dhis-web-dataentry/src/main/resources/META-INF/dhis/beans.xml 2011-07-22 20:54:42 +0000 @@ -18,6 +18,7 @@ + b.name ? 1 : a.name < b.name ? -1 : 0; + } ); + + return dataSetList; +} + function organisationUnitSelected( orgUnits, orgUnitNames ) { currentOrganisationUnitId = orgUnits[0]; @@ -128,35 +163,41 @@ var url = 'loadDataSets.action'; + $( '#selectedOrganisationUnit' ).val( organisationUnitName ); + $( '#currentOrganisationUnit' ).html( organisationUnitName ); + clearListById( 'selectedDataSetId' ); - $.getJSON( url, { dataSetId:dataSetId }, function( json ) - { - $( '#selectedOrganisationUnit' ).val( organisationUnitName ); - $( '#currentOrganisationUnit' ).html( organisationUnitName ); - - addOptionById( 'selectedDataSetId', '-1', '[ ' + i18n_select_data_set + ' ]' ); - - for ( i in json.dataSets ) - { - addOptionById( 'selectedDataSetId', json.dataSets[i].id, json.dataSets[i].name ); - } - - if ( json.dataSetValid && dataSetId != null ) - { - $( '#selectedDataSetId' ).val( dataSetId ); - - if ( periodId && periodId != -1 && dataEntryFormIsLoaded ) //TODO if period valid - { - showLoader(); - loadDataValues(); - } - } - else - { - clearPeriod(); - } - } ); + addOptionById( 'selectedDataSetId', '-1', '[ ' + i18n_select_data_set + ' ]' ); + + var dataSetList = getSortedDataSetList(); + + var dataSetValid = false; + + for ( i in dataSetList ) + { + addOptionById( 'selectedDataSetId', dataSetList[i].id, dataSetList[i].name ); + + if ( dataSetId == dataSetList[i].id ) + { + dataSetValid = true; + } + } + + if ( dataSetValid && dataSetId != null ) + { + $( '#selectedDataSetId' ).val( dataSetId ); + + if ( periodId && periodId != -1 && dataEntryFormIsLoaded ) //TODO if period valid + { + showLoader(); + loadDataValues(); + } + } + else + { + clearPeriod(); + } } selection.setListenerFunction( organisationUnitSelected ); === modified file 'dhis-2/dhis-web/dhis-web-dataentry/src/main/webapp/dhis-web-dataentry/select.vm' --- dhis-2/dhis-web/dhis-web-dataentry/src/main/webapp/dhis-web-dataentry/select.vm 2011-07-21 19:49:23 +0000 +++ dhis-2/dhis-web/dhis-web-dataentry/src/main/webapp/dhis-web-dataentry/select.vm 2011-07-25 08:52:10 +0000 @@ -22,26 +22,46 @@ significantZeros = [ #set( $size1 = $significantZeros.size() ) #foreach( $dataElement in $significantZeros ) -${dataElement.id}#if( $velocityCount < $size1 ),#end #end ]; +${dataElement.id}#if( $velocityCount < $size1 ),#end +#end ]; dataElements = { #set( $size2 = $dataElements.size() ) #foreach( $dataElement in $dataElements ) -"${dataElement.id}": { -"name":"${dataElement.name}", "type":"$encoder.jsonEncode( ${dataElement.getDetailedNumberType()} )" +"${dataElement.id}":{"name":"${dataElement.name}","type":"$encoder.jsonEncode( ${dataElement.getDetailedNumberType()} )" }#if( $velocityCount < $size2 ),#end #end }; +indicatorFormulas = { +#set( $size3 = $indicators.size() ) #foreach( $indicator in $indicators ) -indicatorFormulas['${indicator.id}'] = '($!{indicator.explodedNumerator})/($!{indicator.explodedDenominator})*($!{indicator.indicatorType.factor})'; -#end +"${indicator.id}":"($!{indicator.explodedNumerator})/($!{indicator.explodedDenominator})*($!{indicator.indicatorType.factor})" +#if( $velocityCount < $size3 ),#end +#end }; dataSets = { -#set( $size3 = $dataSets.size() ) +#set( $size4 = $dataSets.size() ) #foreach( $dataSet in $dataSets ) -"${dataSet.id}": { -"name":"$encoder.jsonEncode( ${dataSet.name} )", "periodType":"$encoder.jsonEncode( ${dataSet.periodType.name} )" -}#if( $velocityCount < $size3 ),#end +"${dataSet.id}":{"name":"$encoder.jsonEncode( ${dataSet.name} )","periodType":"$encoder.jsonEncode( ${dataSet.periodType.name} )" +}#if( $velocityCount < $size4 ),#end +#end }; + +dataSetAssociationSets = { +#set( $size5 = $dataSetAssociationSets.size() ) +#set( $index = 0 ) +#foreach( $associationSet in $dataSetAssociationSets ) +"${index}": [ +#set( $index = $index + 1 ) +#set( $size6 = $associationSet.size() ) +#foreach( $id in $associationSet ) +${id}#if( $velocityCount < $size6 ),#end +#end ]#if( $velocityCount < $size5 ),#end +#end }; + +organisationUnitAssociationSetMap = { +#set( $size7 = $organisationUnitAssociationSetMap.size() ) +#foreach( $orgUnit in $organisationUnitAssociationSetMap.keySet() ) +"${orgUnit}":"$organisationUnitAssociationSetMap.get( ${orgUnit} )"#if( $velocityCount < $size7 ),#end #end };