forked from Coded/SIPRP
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
126 lines
4.1 KiB
126 lines
4.1 KiB
window.evoapp.service('modelService', function ($rootScope, $http, $q, $timeout) {
|
|
|
|
//http://wekeroad.com/2013/04/25/models-and-services-in-angular
|
|
|
|
//maps the given record to the correct model. the result is the same record only with the model fields.
|
|
function convert(modelName, record, action){
|
|
|
|
var model = evoapp.models[modelName];
|
|
|
|
if(model == undefined)
|
|
{
|
|
throw Error('Model ' + modelName + ' not found!');
|
|
}
|
|
|
|
var newData = {};
|
|
|
|
for(n = 0; n < model.fields.length; n++)
|
|
{
|
|
var field = model.fields[n],
|
|
name = field.name,
|
|
type = field.type;
|
|
|
|
if(record[name] != null && record[name] != undefined)
|
|
{
|
|
var fieldValue = record[name];
|
|
|
|
//convert from MS date to Date
|
|
if(type == 'date' && field.dateFormat != undefined)
|
|
{
|
|
if(field.dateFormat == 'MS')
|
|
{
|
|
if(action == null)
|
|
{
|
|
fieldValue = moment(fieldValue).toDate();
|
|
|
|
//remove client timezone offset
|
|
var offset = new Date(fieldValue).getTimezoneOffset() / 60;
|
|
fieldValue = moment(fieldValue).add('hours', offset).toDate();
|
|
}
|
|
else if(action == 'upsert')
|
|
{
|
|
//all dates going to server must be ISO8601
|
|
fieldValue = moment(fieldValue).format('YYYY-MM-DD');
|
|
}
|
|
}
|
|
}
|
|
|
|
if(type == 'datetime' && field.dateFormat != undefined)
|
|
{
|
|
if(field.dateFormat == 'MS')
|
|
{
|
|
if(action == null)
|
|
{
|
|
fieldValue = moment(fieldValue).toDate();
|
|
|
|
//remove client timezone offset
|
|
var offset = new Date(fieldValue).getTimezoneOffset() / 60;
|
|
fieldValue = moment(fieldValue).add('hours', offset).toDate();
|
|
}
|
|
else if(action == 'upsert')
|
|
{
|
|
//all dates going to server must be ISO8601
|
|
fieldValue = moment(fieldValue).format('YYYY-MM-DD HH:mm');
|
|
}
|
|
}
|
|
}
|
|
|
|
if(type == 'float' && fieldValue != null && fieldValue != undefined)
|
|
{
|
|
var inan = isNaN(parseFloat(fieldValue));
|
|
|
|
if(!inan)
|
|
{
|
|
fieldValue = parseFloat(new String(fieldValue).replace(/,/, '.'));
|
|
}
|
|
}
|
|
|
|
if(type == 'int' && fieldValue != null && fieldValue != undefined)
|
|
{
|
|
var inan = isNaN(parseInt(fieldValue));
|
|
|
|
if(!inan)
|
|
{
|
|
fieldValue = parseInt(fieldValue);
|
|
}
|
|
}
|
|
|
|
newData[name] = fieldValue;
|
|
}
|
|
else
|
|
{
|
|
newData[name] = null;
|
|
}
|
|
}
|
|
|
|
return newData;
|
|
};
|
|
|
|
var toModel = function(model, record, action){
|
|
|
|
return convert(model, record, action);
|
|
};
|
|
|
|
var collectionToModel = function(model, collection, action){
|
|
|
|
var newCollection = [];
|
|
|
|
if(collection != null)
|
|
{
|
|
$.each(collection, function(index, value) {
|
|
|
|
var record = convert(model, value, action);
|
|
|
|
newCollection.push(record);
|
|
});
|
|
}
|
|
|
|
return newCollection;
|
|
};
|
|
|
|
return {
|
|
toModel: toModel,
|
|
collectionToModel: collectionToModel
|
|
};
|
|
|
|
}); |