=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnitLevel.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnitLevel.java 2015-02-05 06:53:38 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnitLevel.java 2015-03-13 18:39:40 +0000 @@ -29,12 +29,16 @@ */ import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonView; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; + import org.hisp.dhis.common.BaseIdentifiableObject; import org.hisp.dhis.common.DxfNamespaces; import org.hisp.dhis.common.IdentifiableObject; import org.hisp.dhis.common.MergeStrategy; +import org.hisp.dhis.common.view.DetailedView; +import org.hisp.dhis.common.view.ExportView; import org.hisp.dhis.schema.annotation.PropertyRange; /** @@ -50,6 +54,8 @@ private static final long serialVersionUID = 1599124366660090489L; private int level; + + private Integer offlineLevels; // ------------------------------------------------------------------------- // Constructors @@ -65,6 +71,13 @@ this.name = name; } + public OrganisationUnitLevel( int level, String name, Integer offlineLevels ) + { + this.level = level; + this.name = name; + this.offlineLevels = offlineLevels; + } + // ------------------------------------------------------------------------- // hashCode and equals // ------------------------------------------------------------------------- @@ -128,6 +141,19 @@ this.level = level; } + @JsonProperty + @JsonView( { DetailedView.class, ExportView.class } ) + @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 ) + public Integer getOfflineLevels() + { + return offlineLevels; + } + + public void setOfflineLevels( Integer offlineLevels ) + { + this.offlineLevels = offlineLevels; + } + @Override public void mergeWith( IdentifiableObject other, MergeStrategy strategy ) { === 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 2015-02-19 16:52:45 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/organisationunit/DefaultOrganisationUnitService.java 2015-03-13 18:39:40 +0000 @@ -814,6 +814,7 @@ else { existing.setName( level.getName() ); + existing.setOfflineLevels( level.getOfflineLevels() ); updateOrganisationUnitLevel( existing ); } === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/resources/org/hisp/dhis/organisationunit/hibernate/OrganisationUnitLevel.hbm.xml' --- dhis-2/dhis-services/dhis-service-core/src/main/resources/org/hisp/dhis/organisationunit/hibernate/OrganisationUnitLevel.hbm.xml 2014-04-06 09:44:34 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/resources/org/hisp/dhis/organisationunit/hibernate/OrganisationUnitLevel.hbm.xml 2015-03-13 18:39:40 +0000 @@ -18,6 +18,8 @@ + + === modified file 'dhis-2/dhis-web/dhis-web-commons/src/main/java/org/hisp/dhis/commons/action/GetOrganisationUnitTreeAction.java' --- dhis-2/dhis-web/dhis-web-commons/src/main/java/org/hisp/dhis/commons/action/GetOrganisationUnitTreeAction.java 2015-03-13 16:08:55 +0000 +++ dhis-2/dhis-web/dhis-web-commons/src/main/java/org/hisp/dhis/commons/action/GetOrganisationUnitTreeAction.java 2015-03-13 18:39:40 +0000 @@ -278,14 +278,56 @@ return orgUnitVersion.getValue(); } - + + /** + * Returns the number of org unit levels to cache offline based on the given + * org unit level argument, next the org unit level from the user org unit, + * next the level from the configuration. + */ private Integer getMaxLevels() { - OrganisationUnitLevel offlineOrgUnitLevel = offlineLevel != null ? new OrganisationUnitLevel( offlineLevel, "" ) - : configurationService.getConfiguration().getOfflineOrganisationUnitLevel(); - List orgUnitLevels = organisationUnitService.getOrganisationUnitLevels(); - return ( offlineOrgUnitLevel != null && !orgUnitLevels.isEmpty() ) ? offlineOrgUnitLevel.getLevel() : null; + Integer levelFromUserOrgUnit = null; + + if ( orgUnitLevels == null || orgUnitLevels.isEmpty() ) + { + return null; + } + + if ( offlineLevel != null ) + { + return offlineLevel; + } + else if ( ( levelFromUserOrgUnit = getMaxLevelsFromUserOrgUnits() ) != null ) + { + return levelFromUserOrgUnit; + } + else + { + OrganisationUnitLevel level = configurationService.getConfiguration().getOfflineOrganisationUnitLevel(); + + return level != null ? level.getLevel() : null; + } + } + + /** + * Returns the number of org unit levels to cache offline based on the org unit + * level of the first user org unit. Returns null if not defined. + */ + private Integer getMaxLevelsFromUserOrgUnits() + { + if ( !rootOrganisationUnits.isEmpty() ) + { + OrganisationUnit orgUnit = rootOrganisationUnits.get( 0 ); + + int level = organisationUnitService.getLevelOfOrganisationUnit( orgUnit.getId() ); + + OrganisationUnitLevel orgUnitLevel = organisationUnitService.getOrganisationUnitLevelByLevel( level ); + + return orgUnitLevel != null && orgUnitLevel.getOfflineLevels() != null ? orgUnitLevel.getOfflineLevels() : null; + } + + return null; } } === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-organisationunit/src/main/java/org/hisp/dhis/oum/action/organisationunitlevel/SaveOrganisationUnitLevelsAction.java' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-organisationunit/src/main/java/org/hisp/dhis/oum/action/organisationunitlevel/SaveOrganisationUnitLevelsAction.java 2015-01-17 07:41:26 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-organisationunit/src/main/java/org/hisp/dhis/oum/action/organisationunitlevel/SaveOrganisationUnitLevelsAction.java 2015-03-13 18:39:40 +0000 @@ -28,16 +28,18 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +import static org.hisp.dhis.system.util.MathUtils.isInteger; + import java.util.HashSet; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; -import java.util.Map.Entry; +import org.apache.struts2.ServletActionContext; import org.hisp.dhis.organisationunit.OrganisationUnitLevel; import org.hisp.dhis.organisationunit.OrganisationUnitService; import org.hisp.dhis.util.ContextUtils; -import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.Action; /** @@ -48,6 +50,7 @@ implements Action { private static final String LEVEL_PARAM_PREFIX = "level"; + private static final String OFFLINE_LEVELS_PARAM_PREFIX = "offline"; // ------------------------------------------------------------------------- // Dependencies @@ -78,11 +81,15 @@ if ( key != null && key.startsWith( LEVEL_PARAM_PREFIX ) ) { - if ( value != null && value.trim().length() > 0 ) + if ( value != null && !value.isEmpty() ) { int level = Integer.parseInt( key.substring( LEVEL_PARAM_PREFIX.length(), key.length() ) ); - organisationUnitService.addOrUpdateOrganisationUnitLevel( new OrganisationUnitLevel( level, value ) ); + String offlineLevelsValue = params.get( OFFLINE_LEVELS_PARAM_PREFIX + level ); + + Integer offlineLevels = isInteger( offlineLevelsValue ) ? Integer.parseInt( offlineLevelsValue ) : null; + + organisationUnitService.addOrUpdateOrganisationUnitLevel( new OrganisationUnitLevel( level, value, offlineLevels ) ); levels.add( level ); } === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-organisationunit/src/main/resources/org/hisp/dhis/oum/i18n_module.properties' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-organisationunit/src/main/resources/org/hisp/dhis/oum/i18n_module.properties 2014-06-25 03:57:10 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-organisationunit/src/main/resources/org/hisp/dhis/oum/i18n_module.properties 2015-03-13 18:39:40 +0000 @@ -88,6 +88,7 @@ please_select_from_tree=Please select from tree (optional) polygon=Polygon point=Point +offline_levels=Offline levels available_data_sets=Available data sets selected_data_sets=Selected data sets limited=Limited === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-organisationunit/src/main/webapp/dhis-web-maintenance-organisationunit/saveOrganisationUnitLevelForm.vm' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-organisationunit/src/main/webapp/dhis-web-maintenance-organisationunit/saveOrganisationUnitLevelForm.vm 2014-10-06 17:20:27 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-organisationunit/src/main/webapp/dhis-web-maintenance-organisationunit/saveOrganisationUnitLevelForm.vm 2015-03-13 18:39:40 +0000 @@ -20,12 +20,19 @@ $i18n.getString( "level" ) $i18n.getString( "name" ) + $i18n.getString( "offline_levels" ) $i18n.getString( "operations" ) #foreach ( $level in $levels ) $level.level + $i18n.getString( 'translation_translate' ) #end