=== 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 2011-08-16 13:48:25 +0000 +++ dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/javascripts/commons.js 2011-08-17 15:05:47 +0000 @@ -503,6 +503,11 @@ $( 'div#headerMessage' ).slideDown( 'fast' ); } +function getHeaderMessage() +{ + return $( 'div#headerMessage' ).html(); +} + /** * Updates the text in the header message div with the message. * === modified file 'dhis-2/dhis-web/dhis-web-dataentry/src/main/java/org/hisp/dhis/de/action/RegisterCompleteDataSetAction.java' --- dhis-2/dhis-web/dhis-web-dataentry/src/main/java/org/hisp/dhis/de/action/RegisterCompleteDataSetAction.java 2011-08-13 17:58:47 +0000 +++ dhis-2/dhis-web/dhis-web-dataentry/src/main/java/org/hisp/dhis/de/action/RegisterCompleteDataSetAction.java 2011-08-17 15:05:47 +0000 @@ -33,8 +33,11 @@ import org.apache.commons.logging.LogFactory; import org.hisp.dhis.dataset.CompleteDataSetRegistration; import org.hisp.dhis.dataset.CompleteDataSetRegistrationService; +import org.hisp.dhis.dataset.DataSet; import org.hisp.dhis.dataset.DataSetService; +import org.hisp.dhis.organisationunit.OrganisationUnit; import org.hisp.dhis.organisationunit.OrganisationUnitService; +import org.hisp.dhis.period.Period; import org.hisp.dhis.period.PeriodType; import com.opensymphony.xwork2.Action; @@ -58,7 +61,7 @@ { this.registrationService = registrationService; } - + private DataSetService dataSetService; public void setDataSetService( DataSetService dataSetService ) @@ -106,14 +109,22 @@ { CompleteDataSetRegistration registration = new CompleteDataSetRegistration(); - registration.setDataSet( dataSetService.getDataSet( dataSetId ) ); - registration.setPeriod( PeriodType.createPeriodExternalId( periodId ) ); - registration.setSource( organisationUnitService.getOrganisationUnit( organisationUnitId ) ); - registration.setDate( new Date() ); - - registrationService.saveCompleteDataSetRegistration( registration ); - - log.info( "DataSet registered as complete: " + registration ); + DataSet dataSet = dataSetService.getDataSet( dataSetId ); + Period period = PeriodType.createPeriodExternalId( periodId ); + OrganisationUnit organisationUnit = organisationUnitService.getOrganisationUnit( organisationUnitId ); + + if ( registrationService.getCompleteDataSetRegistration( dataSet, period, organisationUnit ) == null ) + { + registration.setDataSet( dataSet ); + registration.setPeriod( period ); + registration.setSource( organisationUnit ); + registration.setDate( new Date() ); + + registrationService.saveCompleteDataSetRegistration( registration ); + + log.info( "DataSet registered as complete: " + registration ); + } + return SUCCESS; } === modified file 'dhis-2/dhis-web/dhis-web-dataentry/src/main/webapp/dhis-web-dataentry/javascript/form.js' --- dhis-2/dhis-web/dhis-web-dataentry/src/main/webapp/dhis-web-dataentry/javascript/form.js 2011-08-17 13:41:04 +0000 +++ dhis-2/dhis-web/dhis-web-dataentry/src/main/webapp/dhis-web-dataentry/javascript/form.js 2011-08-17 15:05:47 +0000 @@ -105,13 +105,17 @@ organisationUnitAssociationSetMap = json.metaData.organisationUnitAssociationSetMap; console.log( 'Meta-data loaded' ); - uploadDataValuesInLocalStorage(); + uploadLocalData(); } ); } -function uploadDataValuesInLocalStorage() +function uploadLocalData() { var dataValues = storageManager.getAllDataValues(); + var completeDataSets = getCompleteDataSetsLocalVariable(); + + var oldHeaderMessage = getHeaderMessage(); + setHeaderWaitMessage("Syncing local data with server"); for ( var dataValueKey in dataValues ) { @@ -122,12 +126,36 @@ data : dataValue, dataType : 'json', dataValue: dataValue, + async: false, success : function( data, textStatus, jqXHR ) { storageManager.clearDataValueJSON( this.dataValue ); console.log( 'Successfully saved data value with value: ' + this.dataValue ); } } ); } + + for( var completeDataSetKey in completeDataSets ) + { + var completeDataSet = completeDataSets[completeDataSetKey] + console.log(completeDataSet); + + $.ajax({ + url: 'registerCompleteDataSet.action', + data: completeDataSet, + dataType: 'json', + completeDataSet: completeDataSet, + async: false, + success: function( data, textStatus, jqXHR ) { + clearCompleteDataSetLocally(this.completeDataSet); + } + }); + } + + if(oldHeaderMessage.length > 0) { + setHeaderMessage(oldHeaderMessage); + } else { + hideHeaderMessage(); + } updateForms(); } @@ -643,6 +671,40 @@ return params; } +function getCompleteDataSetsLocalVariable() +{ + var completeDataSets; + + if(localStorage[KEY_COMPLETEDATASETS] == null) + { + completeDataSets = {} + } else { + completeDataSets = JSON.parse(localStorage[KEY_COMPLETEDATASETS]); + } + + return completeDataSets; +} + +function storeCompleteDataSetLocally(json) +{ + var completeDataSets = getCompleteDataSetsLocalVariable(); + var completeDataSetId = getCompleteDataSetId(json); + + completeDataSets[completeDataSetId] = json; + + localStorage[KEY_COMPLETEDATASETS] = JSON.stringify( completeDataSets ); +} + +function clearCompleteDataSetLocally(json) +{ + var completeDataSets = getCompleteDataSetsLocalVariable(); + var completeDataSetId = getCompleteDataSetId(json); + + delete completeDataSets[completeDataSetId]; + + localStorage[KEY_COMPLETEDATASETS] = JSON.stringify( completeDataSets ); +} + function validateCompleteDataSet() { var confirmed = confirm( i18n_confirm_complete ); @@ -656,8 +718,13 @@ $.getJSON( 'getValidationViolations.action', params).success(function(data) { registerCompleteDataSet(data); }).error( function() { - disableUndoButton(); - window.alert( i18n_no_response_from_server ); + // no response from server, fake a positive result and save it anyways + registerCompleteDataSet({ + "response": "success" + }); + +// disableUndoButton(); +// window.alert( i18n_no_response_from_server ); } ); } } @@ -668,10 +735,14 @@ if ( json.response == 'success' ) { - $.getJSON( 'registerCompleteDataSet.action', params).success(function() { + storeCompleteDataSetLocally(params); + + $.getJSON( 'registerCompleteDataSet.action', params).success(function() { + clearCompleteDataSetLocally(params); }).error( function() { - disableUndoButton(); - window.alert( i18n_no_response_from_server ); + +// disableUndoButton(); +// window.alert( i18n_no_response_from_server ); } ); } else @@ -685,25 +756,20 @@ function undoCompleteDataSet() { var confirmed = confirm( i18n_confirm_undo ); - + var params = getCurrentCompleteDataSetParams(); + if ( confirmed ) { - var periodId = $( '#selectedPeriodId' ).val(); - var dataSetId = $( '#selectedDataSetId' ).val(); - disableUndoButton(); - $.getJSON( 'undoCompleteDataSet.action', { - periodId : periodId, - dataSetId : dataSetId, - organisationUnitId: currentOrganisationUnitId - }, function() - { - } ).error( function() - { - disableCompleteButton(); + $.getJSON( 'undoCompleteDataSet.action', params).success(function() { + clearCompleteDataSetLocally(params); + }).error( function() + { + clearCompleteDataSetLocally(params); - window.alert( i18n_no_response_from_server ); +// disableCompleteButton(); +// window.alert( i18n_no_response_from_server ); } ); } }