=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/dataset/DataSetService.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/dataset/DataSetService.java 2012-02-14 02:58:08 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/dataset/DataSetService.java 2012-02-15 13:19:34 +0000 @@ -302,4 +302,14 @@ * @param period Period part of the combination */ public void deleteLockExceptionCombination( DataSet dataSet, Period period ); + + /** + * For a given ou + ds + period combination, is the data set locked or not + * + * @param organisationUnit OrganisationUnit instance + * @param dataSet DataSet instance + * @param period Period instance + * @return true or false depending on the lock status of the ou + ds + period combination + */ + public boolean isLocked( OrganisationUnit organisationUnit, DataSet dataSet, Period period ); } === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataset/DefaultDataSetService.java' --- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataset/DefaultDataSetService.java 2012-02-14 07:51:50 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataset/DefaultDataSetService.java 2012-02-15 13:19:34 +0000 @@ -40,6 +40,7 @@ import org.hisp.dhis.system.util.Filter; import org.hisp.dhis.system.util.FilterUtils; import org.hisp.dhis.user.CurrentUserService; +import org.joda.time.DateTime; import org.springframework.transaction.annotation.Transactional; import java.util.*; @@ -336,6 +337,13 @@ { Validate.notNull( lockException ); + DataSet dataSet = lockException.getDataSet(); + + if ( !dataSet.getLockExceptions().contains( lockException ) ) + { + dataSet.getLockExceptions().add( lockException ); + } + return lockExceptionStore.save( lockException ); } @@ -352,6 +360,13 @@ { Validate.notNull( lockException ); + DataSet dataSet = lockException.getDataSet(); + + if ( dataSet.getLockExceptions().contains( lockException ) ) + { + dataSet.getLockExceptions().remove( lockException ); + } + lockExceptionStore.delete( lockException ); } @@ -390,4 +405,35 @@ { lockExceptionStore.deleteCombination( dataSet, period ); } + + @Override + public boolean isLocked( OrganisationUnit organisationUnit, DataSet dataSet, Period period ) + { + // if we don't have any expiryDays, then just return false + if ( dataSet.getExpiryDays() == null || dataSet.getExpiryDays() <= 0 ) + { + return false; + } + + // using current time, see if we are over or under the current expiryDays limit + DateTime serverDate = new DateTime(); + DateTime expiredDate = new DateTime( period.getEndDate() ).plusDays( dataSet.getExpiryDays() ); + + if ( serverDate.compareTo( expiredDate ) == -1 ) + { + return false; + } + + // if we are over the expiryDays limit, then check if there is an lockException for ou+ds+period combo + for ( LockException lockException : dataSet.getLockExceptions() ) + { + if ( lockException.getOrganisationUnit().equals( organisationUnit ) && + lockException.getDataSet().equals( dataSet ) && lockException.getPeriod().equals( period ) ) + { + return false; + } + } + + return true; + } } === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/datavalue/DefaultDataValueService.java' --- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/datavalue/DefaultDataValueService.java 2011-12-26 10:07:59 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/datavalue/DefaultDataValueService.java 2012-02-15 13:19:34 +0000 @@ -204,12 +204,12 @@ { return dataValueStore.getOperandsWithDataValues( operands ); } - + public int getDataValueCount( int days ) { Calendar cal = PeriodType.createCalendarInstance(); cal.add( Calendar.DAY_OF_YEAR, (days * -1) ); - + return dataValueStore.getDataValueCount( cal.getTime() ); } } === modified file 'dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/css/widgets.css' --- dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/css/widgets.css 2012-02-13 19:27:46 +0000 +++ dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/css/widgets.css 2012-02-15 13:19:34 +0000 @@ -412,6 +412,11 @@ background: url(../images/warning.png) no-repeat 10px 10px } +div.waiting +{ + background: url(../images/wrench.png) no-repeat 10px 10px +} + div.growlUI h1, div.growlUI h2 { color: white; padding: 5px 5px 5px 75px; text-align: left;font-size:medium === added file 'dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/images/wrench.png' Binary files dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/images/wrench.png 1970-01-01 00:00:00 +0000 and dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/images/wrench.png 2012-02-15 13:19:34 +0000 differ === modified file 'dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/javascripts/commons.js' --- dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/javascripts/commons.js 2012-02-14 16:03:54 +0000 +++ dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/javascripts/commons.js 2012-02-15 13:19:34 +0000 @@ -1258,6 +1258,11 @@ jQuery.growlUI( i18n_warning, message, 'warning', time ); } +function showWaitMessage( message, time ) +{ + jQuery.growlUI( i18n_waiting, message, 'waiting', time ); +} + function markInvalid( elementId, message ) { var element = jQuery("#" + elementId ); === modified file 'dhis-2/dhis-web/dhis-web-light/src/main/java/org/hisp/dhis/light/dataentry/action/GetPeriodsAction.java' --- dhis-2/dhis-web/dhis-web-light/src/main/java/org/hisp/dhis/light/dataentry/action/GetPeriodsAction.java 2012-01-23 10:49:32 +0000 +++ dhis-2/dhis-web/dhis-web-light/src/main/java/org/hisp/dhis/light/dataentry/action/GetPeriodsAction.java 2012-02-15 13:19:34 +0000 @@ -229,25 +229,10 @@ { for ( Period period : periods ) { - boolean locked = dataSetLocked( organisationUnit, dataSet, period ); - - if ( locked ) + if ( dataSetService.isLocked( organisationUnit, dataSet, period ) ) { lockedPeriods.add( period ); } } } - - private boolean dataSetLocked( OrganisationUnit organisationUnit, DataSet dataSet, Period period ) - { - // HACK workaround since get dataSetLock by unit/dataSet/period fails - DataSetLock dataSetLock = dataSetLockService.getDataSetLockByDataSetAndPeriod( dataSet, period ); - - if ( dataSetLock != null && dataSetLock.getSources().contains( organisationUnit ) ) - { - return true; - } - - return false; - } } === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/resources/org/hisp/dhis/dataadmin/i18n_module.properties' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/resources/org/hisp/dhis/dataadmin/i18n_module.properties 2012-02-14 02:58:08 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/resources/org/hisp/dhis/dataadmin/i18n_module.properties 2012-02-15 13:19:34 +0000 @@ -404,3 +404,4 @@ lock_exception_batch_removal=Lock exception batch removal back_to_lock_exceptions=Back to lock exception batch_delete=Batch deletion +deleting_lock_exceptions=Deleting lock exceptions === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/webapp/dhis-web-maintenance-dataadmin/removeLockExceptionBatch.vm' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/webapp/dhis-web-maintenance-dataadmin/removeLockExceptionBatch.vm 2012-02-14 07:18:00 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/webapp/dhis-web-maintenance-dataadmin/removeLockExceptionBatch.vm 2012-02-15 13:19:34 +0000 @@ -1,5 +1,6 @@