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
 | |
|     };
 | |
| 
 | |
| }); |