=== modified file 'local/in/dhis-web-maintenance-pbf/src/main/java/org/hisp/dhis/pbf/action/LoadBankDetailsAction.java' --- local/in/dhis-web-maintenance-pbf/src/main/java/org/hisp/dhis/pbf/action/LoadBankDetailsAction.java 2013-12-27 05:24:32 +0000 +++ local/in/dhis-web-maintenance-pbf/src/main/java/org/hisp/dhis/pbf/action/LoadBankDetailsAction.java 2014-01-07 10:10:48 +0000 @@ -68,10 +68,6 @@ return dataSets; } - public void setDataSets(List dataSets) { - this.dataSets = dataSets; - } - private List banks = new ArrayList(); public List getBanks() @@ -96,30 +92,19 @@ bankDetailsList.addAll( bankDetailsService.getBankDetails( organisationUnit ) ); dataSets.clear(); List lookups = new ArrayList( lookupService.getAllLookupsByType( Lookup.DS_PBF_TYPE ) ); + List bankDetailDataSets = new ArrayList(); for( Lookup lookup : lookups ) { Integer dataSetId = Integer.parseInt( lookup.getValue() ); DataSet dataSet = dataSetService.getDataSet( dataSetId ); - if(bankDetailsList.size() > 0) - { - for(BankDetails bd : bankDetailsList) - { - if(bd.getDataSet().getId() == dataSet.getId() && !dataSets.contains(bd.getDataSet())) - {} - else - { - dataSets.add(dataSet); - break; - } - } - } - else - { - dataSets.add( dataSet ); - } - - } + dataSets.add(dataSet); + } + for(BankDetails bd : bankDetailsList) + { + bankDetailDataSets.add( bd.getDataSet() ); + } + //dataSets.removeAll(bankDetailDataSets); lookups = new ArrayList( lookupService.getAllLookupsByType( Lookup.BANK ) ); for( Lookup lookup : lookups ) @@ -128,7 +113,12 @@ } Collections.sort(dataSets); + /*for(DataSet ds : dataSets) + { + System.out.println(ds.getName()); + } System.out.println(dataSets.size()); + */ return SUCCESS; } } === added file 'local/in/dhis-web-maintenance-pbf/src/main/java/org/hisp/dhis/pbf/dataentry/SaveValueAction.java' --- local/in/dhis-web-maintenance-pbf/src/main/java/org/hisp/dhis/pbf/dataentry/SaveValueAction.java 1970-01-01 00:00:00 +0000 +++ local/in/dhis-web-maintenance-pbf/src/main/java/org/hisp/dhis/pbf/dataentry/SaveValueAction.java 2014-01-07 10:10:48 +0000 @@ -0,0 +1,286 @@ +package org.hisp.dhis.pbf.dataentry; + +/* + * Copyright (c) 2004-2012, 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 com.opensymphony.xwork2.Action; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.hisp.dhis.dataelement.DataElement; +import org.hisp.dhis.dataelement.DataElementCategoryOptionCombo; +import org.hisp.dhis.dataelement.DataElementCategoryService; +import org.hisp.dhis.dataelement.DataElementService; +import org.hisp.dhis.dataset.DataSetService; +import org.hisp.dhis.datavalue.DataValue; +import org.hisp.dhis.datavalue.DataValueService; +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 org.hisp.dhis.system.util.ValidationUtils; +import org.hisp.dhis.user.CurrentUserService; + +import java.util.Date; + +/** + * @author Abyot Asalefew + */ +public class SaveValueAction + implements Action +{ + private static final Log log = LogFactory.getLog( SaveValueAction.class ); + + // ------------------------------------------------------------------------- + // Dependencies + // ------------------------------------------------------------------------- + + private CurrentUserService currentUserService; + + public void setCurrentUserService( CurrentUserService currentUserService ) + { + this.currentUserService = currentUserService; + } + + private DataElementService dataElementService; + + public void setDataElementService( DataElementService dataElementService ) + { + this.dataElementService = dataElementService; + } + + private DataValueService dataValueService; + + public void setDataValueService( DataValueService dataValueService ) + { + this.dataValueService = dataValueService; + } + + private DataElementCategoryService categoryService; + + public void setCategoryService( DataElementCategoryService categoryService ) + { + this.categoryService = categoryService; + } + + private OrganisationUnitService organisationUnitService; + + public void setOrganisationUnitService( OrganisationUnitService organisationUnitService ) + { + this.organisationUnitService = organisationUnitService; + } + + private DataSetService dataSetService; + + public void setDataSetService( DataSetService dataSetService ) + { + this.dataSetService = dataSetService; + } + + // ------------------------------------------------------------------------- + // Input + // ------------------------------------------------------------------------- + + private String value; + + public void setValue( String value ) + { + this.value = value; + } + + private String dataElementId; + + public void setDataElementId( String dataElementId ) + { + this.dataElementId = dataElementId; + } + + private String organisationUnitId; + + public void setOrganisationUnitId( String organisationUnitId ) + { + this.organisationUnitId = organisationUnitId; + } + + private String optionComboId; + + public void setOptionComboId( String optionComboId ) + { + this.optionComboId = optionComboId; + } + + private String periodId; + + public void setPeriodId( String periodId ) + { + this.periodId = periodId; + } + + private String periodIso; + + public void setPeriodIso(String periodIso) { + this.periodIso = periodIso; + } + + // ------------------------------------------------------------------------- + // Output + // ------------------------------------------------------------------------- + + private int statusCode = 0; + + public int getStatusCode() + { + return statusCode; + } + + // ------------------------------------------------------------------------- + // Action implementation + // ------------------------------------------------------------------------- + + public String execute() + { + Period period = PeriodType.getPeriodFromIsoString(periodIso); + // Period period = PeriodType.createPeriodExternalId( periodId ); + + if ( period == null ) + { + return logError( "Illegal period identifier: " + periodIso ); + } + + OrganisationUnit organisationUnit = organisationUnitService.getOrganisationUnit( organisationUnitId ); + + if ( organisationUnit == null ) + { + return logError( "Invalid organisation unit identifier: " + organisationUnitId ); + } + + DataElement dataElement = dataElementService.getDataElement( Integer.parseInt(dataElementId) ); + + if ( dataElement == null ) + { + return logError( "Invalid data element identifier: " + dataElementId ); + } + + DataElementCategoryOptionCombo optionCombo = categoryService.getDataElementCategoryOptionCombo( Integer.parseInt(optionComboId) ); + + if ( optionCombo == null ) + { + return logError( "Invalid category option combo identifier: " + optionComboId ); + } + + String storedBy = currentUserService.getCurrentUsername(); + + Date now = new Date(); + + if ( storedBy == null ) + { + storedBy = "[unknown]"; + } + + if ( value != null && value.trim().length() == 0 ) + { + value = null; + } + + if ( value != null ) + { + value = value.trim(); + } + + // --------------------------------------------------------------------- + // Validate value according to type from data element + // --------------------------------------------------------------------- + + String valid = ValidationUtils.dataValueIsValid( value, dataElement ); + + if ( valid != null ) + { + return logError( valid, 3 ); + } + + // --------------------------------------------------------------------- + // Check locked status + // --------------------------------------------------------------------- + + if ( dataSetService.isLocked( dataElement, period, organisationUnit, null ) ) + { + return logError( "Entry locked for combination: " + dataElement + ", " + period + ", " + organisationUnit, 2 ); + } + + // --------------------------------------------------------------------- + // Update data + // --------------------------------------------------------------------- + + DataValue dataValue = dataValueService.getDataValue( dataElement, period,organisationUnit,optionCombo ); + + if ( dataValue == null ) + { + if ( value != null ) + { + dataValue = new DataValue( ); + dataValue.setDataElement(dataElement); + dataValue.setPeriod(period); + dataValue.setSource(organisationUnit); + dataValue.setValue(value); + dataValue.setStoredBy(storedBy); + dataValue.setTimestamp(now); + dataValue.setCategoryOptionCombo(optionCombo); + dataValueService.addDataValue( dataValue ); + + System.out.println("Value Added"); + } + } + else + { + dataValue.setValue( value ); + dataValue.setTimestamp( now ); + dataValue.setStoredBy( storedBy ); + + dataValueService.updateDataValue( dataValue ); + System.out.println("Value Updated"); + } + + return SUCCESS; + } + + // ------------------------------------------------------------------------- + // Supportive methods + // ------------------------------------------------------------------------- + + private String logError( String message ) + { + return logError( message, 1 ); + } + + private String logError( String message, int statusCode ) + { + log.info( message ); + + this.statusCode = statusCode; + + return SUCCESS; + } +} === modified file 'local/in/dhis-web-maintenance-pbf/src/main/resources/META-INF/dhis/beans.xml' --- local/in/dhis-web-maintenance-pbf/src/main/resources/META-INF/dhis/beans.xml 2013-12-31 07:59:05 +0000 +++ local/in/dhis-web-maintenance-pbf/src/main/resources/META-INF/dhis/beans.xml 2014-01-07 10:10:48 +0000 @@ -136,7 +136,15 @@ - - + + + + + + + + + + \ No newline at end of file === modified file 'local/in/dhis-web-maintenance-pbf/src/main/resources/struts.xml' --- local/in/dhis-web-maintenance-pbf/src/main/resources/struts.xml 2013-12-31 07:59:05 +0000 +++ local/in/dhis-web-maintenance-pbf/src/main/resources/struts.xml 2014-01-07 10:10:48 +0000 @@ -19,12 +19,12 @@ /main.vm /dhis-web-maintenance-pbf/loadDataElementsforTariff.vm /dhis-web-maintenance-pbf/tariffMenu.vm - ../dhis-web-commons/ouwt/ouwt.js,../dhis-web-commons/javascripts/ext/ext-all.js,javascript/dataElement_combo.js + ../dhis-web-commons/ouwt/ouwt.js,../dhis-web-commons/javascripts/ext/ext-all.js,javascript/TransformGrid.js,javascript/dataElement_combo.js ../dhis-web-commons/javascripts/ext/resources/css/ext-all-gray.css /content.vm - /dhis-web-maintenance-pbf/loadTariffData.vm + /dhis-web-maintenance-pbf/loadTariffData.vm /dhis-web-maintenance-pbf/status.vm @@ -46,7 +46,8 @@ /main.vm /dhis-web-maintenance-pbf/loadBankData.vm /dhis-web-maintenance-pbf/tariffMenu.vm - ../dhis-web-commons/ouwt/ouwt.js + ../dhis-web-commons/ouwt/ouwt.js,../dhis-web-commons/javascripts/ext/ext-all.js,javascript/TransformGrid.js + ../dhis-web-commons/javascripts/ext/resources/css/ext-all-gray.css @@ -75,7 +76,7 @@ /dhis-web-maintenance-pbf/dataEntrySelection.vm /dhis-web-maintenance-pbf/menuDataEntry.vm ../dhis-web-commons/ouwt/ouwt.js,javascript/pbfDataEntry.js - style/dataentry.css + css/dataentry.css @@ -100,6 +101,14 @@ /dhis-web-maintenance-pbf/loadDataEntryForm.vm + + + + /dhis-web-maintenance-pbf/status.vm + plainTextError + + === modified file 'local/in/dhis-web-maintenance-pbf/src/main/webapp/dhis-web-maintenance-pbf/dataEntrySelection.vm' --- local/in/dhis-web-maintenance-pbf/src/main/webapp/dhis-web-maintenance-pbf/dataEntrySelection.vm 2013-12-31 07:59:05 +0000 +++ local/in/dhis-web-maintenance-pbf/src/main/webapp/dhis-web-maintenance-pbf/dataEntrySelection.vm 2014-01-07 10:10:48 +0000 @@ -22,7 +22,7 @@
- +
@@ -56,6 +56,7 @@ + @@ -65,12 +66,13 @@ #parse( "/dhis-web-commons/loader/loader.vm" )
+
=== modified file 'local/in/dhis-web-maintenance-pbf/src/main/webapp/dhis-web-maintenance-pbf/getBankDetails.vm' --- local/in/dhis-web-maintenance-pbf/src/main/webapp/dhis-web-maintenance-pbf/getBankDetails.vm 2013-12-27 05:24:32 +0000 +++ local/in/dhis-web-maintenance-pbf/src/main/webapp/dhis-web-maintenance-pbf/getBankDetails.vm 2014-01-07 10:10:48 +0000 @@ -5,12 +5,39 @@ font-size: 1.5em; } + - +
+ +
+

@@ -201,7 +231,7 @@ === added file 'local/in/dhis-web-maintenance-pbf/src/main/webapp/dhis-web-maintenance-pbf/javascript/TransformGrid.js' --- local/in/dhis-web-maintenance-pbf/src/main/webapp/dhis-web-maintenance-pbf/javascript/TransformGrid.js 1970-01-01 00:00:00 +0000 +++ local/in/dhis-web-maintenance-pbf/src/main/webapp/dhis-web-maintenance-pbf/javascript/TransformGrid.js 2014-01-07 10:10:48 +0000 @@ -0,0 +1,99 @@ +/** + * @class Ext.ux.grid.TransformGrid + * @extends Ext.grid.Panel + * A Grid which creates itself from an existing HTML table element. + * @history + * 2007-03-01 Original version by Nige "Animal" White + * 2007-03-10 jvs Slightly refactored to reuse existing classes * @constructor + * @param {String/HTMLElement/Ext.Element} table The table element from which this grid will be created - + * The table MUST have some type of size defined for the grid to fill. The container will be + * automatically set to position relative if it isn't already. + * @param {Object} config A config object that sets properties on this grid and has two additional (optional) + * properties: fields and columns which allow for customizing data fields and columns for this grid. + */ +Ext.define('Ext.ux.grid.TransformGrid', { + extend: 'Ext.grid.Panel', + constructor: function(table, config) { + config = Ext.apply({}, config); + table = this.table = Ext.get(table); + + var configFields = config.fields || [], + configColumns = config.columns || [], + fields = [], + cols = [], + ct = table.insertSibling(), + headers = table.query("thead th"), + i = 0, + len = headers.length, + data = table.dom, + width, + height, + store, + col, + text, + name; + + for (; i < len; ++i) { + col = headers[i]; + + text = col.innerHTML; + name = 'tcol-' + i; + + fields.push(Ext.applyIf(configFields[i] || {}, { + name: name, + mapping: 'td:nth(' + (i + 1) + ')/@innerHTML' + })); + + cols.push(Ext.applyIf(configColumns[i] || {}, { + text: text, + dataIndex: name, + width: col.offsetWidth, + tooltip: col.title, + sortable: true + })); + } + + if (config.width) { + width = config.width; + } else { + width = table.getWidth(); + } + + if (config.height) { + height = config.height; + } + + if (config.remove !== false) { + // Don't use table.remove() as that destroys the row/cell data in the table in + // IE6-7 so it cannot be read by the data reader. + data.parentNode.removeChild(data); + } + + + Ext.applyIf(config, { + store: { + data: data, + fields: fields, + proxy: { + type: 'memory', + reader: { + record: 'tbody tr', + type: 'xml' + } + } + }, + columns: cols, + width: width, + autoHeight: height ? false : true, + height: height, + el: ct + }); + this.callParent([config]); + }, + + onDestroy: function() { + this.callParent(); + this.table.remove(); + delete this.table; + } +}); \ No newline at end of file === added file 'local/in/dhis-web-maintenance-pbf/src/main/webapp/dhis-web-maintenance-pbf/javascript/pagingmemory.js' --- local/in/dhis-web-maintenance-pbf/src/main/webapp/dhis-web-maintenance-pbf/javascript/pagingmemory.js 1970-01-01 00:00:00 +0000 +++ local/in/dhis-web-maintenance-pbf/src/main/webapp/dhis-web-maintenance-pbf/javascript/pagingmemory.js 2014-01-07 10:10:48 +0000 @@ -0,0 +1,165 @@ +/** + * Paging memory proxy, allows using in-memory dataset with paging grid. + * Similar to Ext.ux.data.PagingMemoryProxy except that it's optimized for large + * datasets. + * + * Version 0.9. + * + * Copyright (c) 2012 Alexander Tokarev. + * + * This code is licensed under the terms of the Open Source LGPL 3.0 license. + * Commercial use is permitted to the extent that the code/component(s) do NOT + * become part of another Open Source or Commercially licensed development library + * or toolkit without explicit permission. + * + * License details: http://www.gnu.org/licenses/lgpl.html + */ + +Ext.define('Ext.ux.data.proxy.PagingMemory', { + extend: 'Ext.data.proxy.Memory', + alias: 'proxy.memorypaging', + + alternateClassName: 'Ext.data.proxy.PagingMemory', + + requires: [ + 'Ext.data.ResultSet' + ], + + /** + * @cfg {Object} data + * Optional data to pass to configured Reader. + */ + + constructor: function(config) { + var me = this; + + me.callParent(arguments); + + //ensures that the reader has been instantiated properly + me.setReader(me.reader); + + /* + * Since we're operating on in-memory dataset, it's safe to assume + * that the data is immutable. It's awfully inefficient to pull + * the whole dataset through Reader *each time* a new page is + * requested (that's what Ext.ux.data.PagingMemoryProxy does). + * So we do that only once. If dataset is refreshing, it goes + * through Reader again, of course. + */ + me.setData(config.data); + }, + + read: function(operation, callback, scope) { + var me = this, + reader = me.reader, + result, sorters, filters, filterFn, sorterFn, records, start, limit; + + result = me.getData(); + scope = scope || me; + + /* + * Filtering and sorting is necessary to be done + * on the whole dataset, simulating remote sort. + */ + filters = operation.filters; + + if ( filters.length > 0 ) { + + /* + * Here we have an array of Ext.util.Filter objects to do filtering with, + * so we construct a function that combines all filters by ANDing them together + */ + records = []; + + filterFn = function(record) { + var doesMatch = true; + + for ( var i = 0, l = filters.length; i < l; i++ ) { + var fn = filters[i].filterFn, + scope = filters[i].scope; + + doesMatch = doesMatch && fn.call(scope, record); + }; + + if ( doesMatch ) { + records.push(record); + }; + }; + + for ( var i = 0, l = result.records.length; i < l; i++ ) { + filterFn( result.records[i] ); + }; + + result.records = records; + result.totalRecords = result.total = records.length; + }; + + // Sorting now + sorters = operation.sorters; + + if ( sorters.length > 0 ) { + + // Same as with filters, one function to sort them all + sorterFn = function(a, b) { + var result, length; + + result = sorters[0].sort.call(sorters[0], a, b); + + // If there is more than one sorter, OR them together + for ( var i = 1, l = sorters.length; i < l; i++ ) { + result = result || sorters[i].sort.call(sorters[i], a, b); + }; + + return result; + }; + + result.records.sort(sorterFn); + }; + + // Time to do paging + start = operation.start; + limit = operation.limit; + + if ( start !== undefined && limit !== undefined ) { + result.records = result.records.slice(start, start + limit); + result.count = result.records.length; + }; + + Ext.apply(operation, { + resultSet: result + }); + + operation.setCompleted(); + operation.setSuccessful(); + + Ext.callback(callback, scope, [operation], 10); + }, + + // @private Return shallow copy of preprocessed dataset + getData: function() { + var me = this, + data = me.data, + records, result; + + records = data.records ? data.records.slice(0) : []; + + result = new Ext.data.ResultSet({ + count: data.count, + message: data.message, + records: records, + sucess: data.success, + total: data.total, + totalRecords: data.totalRecords + }); + + return result; + }, + + setData: function(data) { + var me = this; + + if ( data && Ext.isArray(data) && data.length > 0 ) { + me.data = me.reader.read(data); + }; + } +}); === modified file 'local/in/dhis-web-maintenance-pbf/src/main/webapp/dhis-web-maintenance-pbf/javascript/pbfDataEntry.js' --- local/in/dhis-web-maintenance-pbf/src/main/webapp/dhis-web-maintenance-pbf/javascript/pbfDataEntry.js 2013-12-31 07:59:05 +0000 +++ local/in/dhis-web-maintenance-pbf/src/main/webapp/dhis-web-maintenance-pbf/javascript/pbfDataEntry.js 2014-01-07 10:10:48 +0000 @@ -1,9 +1,17 @@ + var COLOR_GREEN = '#b9ffb9'; + var COLOR_YELLOW = '#fffe8c'; + var COLOR_RED = '#ff8a8a'; + var COLOR_ORANGE = '#ff6600'; + var COLOR_WHITE = '#ffffff'; + var COLOR_GREY = '#cccccc'; + var LocaleColor = 'black'; + function orgUnitHasBeenSelected( orgUnitIds ) { $( '#dataEntryFormDiv' ).html( '' ); - document.getElementById('selectedOrgunitID').value = orgUnitIds; + //document.getElementById('selectedOrgunitID').value = orgUnitIds; //alert( orgUnitIds ); @@ -18,9 +26,11 @@ if( type == 'success' ) { + window.location.href = "pbfDataEntry.action"; enable('dataSetId'); + setFieldValue('selectedOrgunitID',orgUnitIds[0]) setFieldValue('orgUnitName', json.message ); - setFieldValue('selectedOrgunitName', json.message ); + setFieldValue('selectedOrgunitName', json.message ); } else if( type == 'input' ) { @@ -42,14 +52,7 @@ function loadDataEntryForm() { var orgUnitId = $( '#selectedOrgunitID' ).val(); - - - - var dataSetId = $( '#dataSetId' ).val(); - - - $( '#dataEntryFormDiv' ).html(''); $( '#saveButton' ).removeAttr( 'disabled' ); @@ -83,28 +86,64 @@ } - - - - - - - - - - - - - - - - - - - - - - +function saveValue(dataElementId,optionComboId) +{ + var period = document.getElementById("selectedPeriodId").value; + var valueId = "dataelement"+dataElementId+":"+optionComboId; + + var fieldId = "#"+valueId; + var defaultValue = document.getElementById(valueId).defaultValue; + var value = document.getElementById(valueId).value; + + if(defaultValue != value) + { + var dataValue = { + 'dataElementId' : dataElementId, + 'optionComboId' : optionComboId, + 'organisationUnitId' : $("#selectedOrgunitID").val(), + 'periodIso' : period, + 'value' : value + }; + jQuery.ajax( { + url: 'saveValue.action', + data: dataValue, + dataType: 'json', + success: handleSuccess, + error: handleError + } ); + } + + function handleSuccess( json ) + { + var code = json.c; + + alert(code) + if ( code == '0' || code == 0) // Value successfully saved on server + { + markValue( fieldId, COLOR_GREEN ); + } + else if ( code == 2 ) + { + markValue( fieldId, COLOR_RED ); + window.alert( i18n_saving_value_failed_dataset_is_locked ); + } + else // Server error during save + { + markValue( fieldId, COLOR_RED ); + window.alert( i18n_saving_value_failed_status_code + '\n\n' + code ); + } + } + + function handleError( jqXHR, textStatus, errorThrown ) + { + markValue( fieldId, COLOR_GREEN ); + } + + function markValue( fieldId, color ) + { + document.getElementById(valueId).style.backgroundColor = color; + } +} // load periods === modified file 'local/in/dhis-web-maintenance-pbf/src/main/webapp/dhis-web-maintenance-pbf/loadBankData.vm' --- local/in/dhis-web-maintenance-pbf/src/main/webapp/dhis-web-maintenance-pbf/loadBankData.vm 2013-12-27 05:24:32 +0000 +++ local/in/dhis-web-maintenance-pbf/src/main/webapp/dhis-web-maintenance-pbf/loadBankData.vm 2014-01-07 10:10:48 +0000 @@ -1,14 +1,23 @@ +