[ Index ] |
PHP Cross Reference of vtigercrm-6.1.0 |
[Summary view] [Print] [Text view]
1 /*+********************************************************************************** 2 * The contents of this file are subject to the vtiger CRM Public License Version 1.0 3 * ("License"); You may not use this file except in compliance with the License 4 * The Original Code is: vtiger CRM Open Source 5 * The Initial Developer of the Original Code is vtiger. 6 * Portions created by vtiger are Copyright (C) vtiger. 7 * All Rights Reserved. 8 ************************************************************************************/ 9 10 if (typeof(ImportJs) == 'undefined') { 11 /* 12 * Namespaced javascript class for Import 13 */ 14 ImportJs = { 15 16 toogleMergeConfiguration: function() { 17 var mergeChecked = jQuery('#auto_merge').is(':checked'); 18 var duplicateMergeConfiguration = jQuery('#duplicates_merge_configuration'); 19 if(mergeChecked) { 20 duplicateMergeConfiguration.show(); 21 } else { 22 duplicateMergeConfiguration.hide(); 23 } 24 }, 25 26 checkFileType: function() { 27 var filePath = jQuery('#import_file').val(); 28 if(filePath != '') { 29 var fileExtension = filePath.split('.').pop(); 30 jQuery('#type').val(fileExtension); 31 ImportJs.handleFileTypeChange(); 32 } 33 }, 34 35 handleFileTypeChange: function() { 36 var fileType = jQuery('#type').val(); 37 var delimiterContainer = jQuery('#delimiter_container'); 38 var hasHeaderContainer = jQuery('#has_header_container'); 39 if(fileType != 'csv') { 40 delimiterContainer.hide(); 41 hasHeaderContainer.hide(); 42 } else { 43 delimiterContainer.show(); 44 hasHeaderContainer.show(); 45 } 46 }, 47 48 uploadAndParse: function() { 49 if(!ImportJs.validateFilePath()) return false; 50 if(!ImportJs.validateMergeCriteria()) return false; 51 return true; 52 }, 53 54 registerImportClickEvent : function(){ 55 jQuery('#importButton').on('click',function(e){ 56 var result = ImportJs.sanitizeAndSubmit() 57 return result; 58 }); 59 }, 60 61 validateFilePath: function() { 62 var importFile = jQuery('#import_file'); 63 var filePath = importFile.val(); 64 if(jQuery.trim(filePath) == '') { 65 var errorMessage = app.vtranslate('JS_IMPORT_FILE_CAN_NOT_BE_EMPTY'); 66 var params = { 67 text: errorMessage, 68 type: 'error' 69 }; 70 Vtiger_Helper_Js.showMessage(params); 71 importFile.focus(); 72 return false; 73 } 74 if(!ImportJs.uploadFilter("import_file", "csv|vcf")) { 75 return false; 76 } 77 if(!ImportJs.uploadFileSize("import_file")) { 78 return false; 79 } 80 return true; 81 }, 82 83 uploadFilter: function(elementId, allowedExtensions) { 84 var obj = jQuery('#'+elementId); 85 if(obj) { 86 var filePath = obj.val(); 87 var fileParts = filePath.toLowerCase().split('.'); 88 var fileType = fileParts[fileParts.length-1]; 89 var validExtensions = allowedExtensions.toLowerCase().split('|'); 90 91 if(validExtensions.indexOf(fileType) < 0) { 92 var errorMessage = app.vtranslate('JS_SELECT_FILE_EXTENSION')+'\n' +validExtensions; 93 var params = { 94 text: errorMessage, 95 type: 'error' 96 }; 97 Vtiger_Helper_Js.showMessage(params); 98 obj.focus(); 99 return false; 100 } 101 } 102 return true; 103 }, 104 105 uploadFileSize : function(elementId) { 106 var element = jQuery('#'+elementId); 107 var importMaxUploadSize = element.closest('td').data('importUploadSize'); 108 var importMaxUploadSizeInMb = element.closest('td').data('importUploadSizeMb'); 109 var uploadedFileSize = element.get(0).files[0].size; 110 if(uploadedFileSize > importMaxUploadSize){ 111 var errorMessage = app.vtranslate('JS_UPLOADED_FILE_SIZE_EXCEEDS')+" "+importMaxUploadSizeInMb+ " MB." + app.vtranslate('JS_PLEASE_SPLIT_FILE_AND_IMPORT_AGAIN'); 112 var params = { 113 text: errorMessage, 114 type: 'error' 115 }; 116 Vtiger_Helper_Js.showMessage(params); 117 return false; 118 } 119 return true; 120 }, 121 122 validateMergeCriteria: function() { 123 $mergeChecked = jQuery('#auto_merge').is(':checked'); 124 if($mergeChecked) { 125 var selectedOptions = jQuery('#selected_merge_fields option'); 126 if(selectedOptions.length == 0) { 127 var errorMessage = app.vtranslate('JS_PLEASE_SELECT_ONE_FIELD_FOR_MERGE'); 128 var params = { 129 text: errorMessage, 130 'type': 'error' 131 }; 132 Vtiger_Helper_Js.showMessage(params); 133 return false; 134 } 135 } 136 ImportJs.convertOptionsToJSONArray('#selected_merge_fields', '#merge_fields'); 137 return true; 138 }, 139 140 //TODO move to a common file 141 convertOptionsToJSONArray : function(objName, targetObjName) { 142 var obj = jQuery(objName); 143 var arr = []; 144 if(typeof(obj) != 'undefined' && obj[0] != '') { 145 for (i=0; i<obj[0].length; ++i) { 146 arr.push(obj[0].options[i].value); 147 } 148 } 149 if(targetObjName != 'undefined') { 150 var targetObj = $(targetObjName); 151 if(typeof(targetObj) != 'undefined') targetObj.val(JSON.stringify(arr)); 152 } 153 return arr; 154 }, 155 156 //TODO: move to a common file 157 copySelectedOptions : function(source, destination) { 158 159 var srcObj = jQuery(source); 160 var destObj = jQuery(destination); 161 162 if(typeof(srcObj) == 'undefined' || typeof(destObj) == 'undefined') return; 163 164 for (i=0;i<srcObj[0].length;i++) { 165 if (srcObj[0].options[i].selected == true) { 166 var rowFound = false; 167 var existingObj = null; 168 for (j=0;j<destObj[0].length;j++) { 169 if (destObj[0].options[j].value == srcObj[0].options[i].value) { 170 rowFound = true; 171 existingObj = destObj[0].options[j]; 172 break; 173 } 174 } 175 176 if (rowFound != true) { 177 var opt = $('<option selected>'); 178 opt.attr('value', srcObj[0].options[i].value); 179 opt.text(srcObj[0].options[i].text); 180 jQuery(destObj[0]).append(opt); 181 srcObj[0].options[i].selected = false; 182 rowFound = false; 183 } else { 184 if(existingObj != null) existingObj.selected = true; 185 } 186 } 187 } 188 }, 189 190 //TODO move to a common file 191 removeSelectedOptions : function (objName) { 192 var obj = jQuery(objName); 193 if(obj == null || typeof(obj) == 'undefined') return; 194 195 for (i=obj[0].options.length-1;i>=0;i--) { 196 if (obj[0].options[i].selected == true) { 197 obj[0].options[i] = null; 198 } 199 } 200 }, 201 202 sanitizeAndSubmit: function() { 203 if(!ImportJs.sanitizeFieldMapping()) return false; 204 if(!ImportJs.validateCustomMap()) return false; 205 return true; 206 }, 207 208 sanitizeFieldMapping: function() { 209 var fieldsList = jQuery('.fieldIdentifier'); 210 var mappedFields = {}; 211 var errorMessage; 212 var params = {}; 213 var mappedDefaultValues = {}; 214 for(var i=0; i<fieldsList.length; ++i) { 215 var fieldElement = jQuery(fieldsList.get(i)); 216 var rowId = jQuery('[name=row_counter]', fieldElement).get(0).value; 217 var selectedFieldElement = jQuery('select option:selected', fieldElement); 218 var selectedFieldName = selectedFieldElement.val(); 219 var selectedFieldDefaultValueElement = jQuery('#'+selectedFieldName+'_defaultvalue', fieldElement); 220 var defaultValue = ''; 221 if(selectedFieldDefaultValueElement.attr('type') == 'checkbox') { 222 defaultValue = selectedFieldDefaultValueElement.is(':checked'); 223 } else { 224 defaultValue = selectedFieldDefaultValueElement.val(); 225 } 226 if(selectedFieldName != '') { 227 if(selectedFieldName in mappedFields) { 228 errorMessage = app.vtranslate('JS_FIELD_MAPPED_MORE_THAN_ONCE')+" " + selectedFieldElement.data('label'); 229 params = { 230 text: errorMessage, 231 'type': 'error' 232 }; 233 Vtiger_Helper_Js.showMessage(params); 234 return false; 235 } 236 mappedFields[selectedFieldName] = rowId-1; 237 if(defaultValue != '') { 238 mappedDefaultValues[selectedFieldName] = defaultValue; 239 } 240 } 241 } 242 243 var mandatoryFields = JSON.parse(jQuery('#mandatory_fields').val()); 244 var moduleName = app.getModuleName(); 245 if(moduleName == 'PurchaseOrder' || moduleName == 'Invoice' || moduleName == 'Quotes' || moduleName == 'SalesOrder') { 246 mandatoryFields.hdnTaxType = app.vtranslate('Tax Type'); 247 } 248 var missingMandatoryFields = []; 249 for(var mandatoryFieldName in mandatoryFields) { 250 if(mandatoryFieldName in mappedFields) { 251 continue; 252 } else { 253 missingMandatoryFields.push('"'+mandatoryFields[mandatoryFieldName]+'"'); 254 } 255 } 256 if(missingMandatoryFields.length > 0) { 257 errorMessage = app.vtranslate('JS_MAP_MANDATORY_FIELDS')+ missingMandatoryFields.join(','); 258 params = { 259 text: errorMessage, 260 'type': 'error' 261 }; 262 Vtiger_Helper_Js.showMessage(params); 263 return false; 264 } 265 jQuery('#field_mapping').val(JSON.stringify(mappedFields)); 266 jQuery('#default_values').val(JSON.stringify(mappedDefaultValues)); 267 return true; 268 }, 269 270 validateCustomMap: function() { 271 var errorMessage; 272 var params = {}; 273 var saveMap = jQuery('#save_map').is(':checked'); 274 if(saveMap) { 275 var mapName = jQuery('#save_map_as').val(); 276 if(jQuery.trim(mapName) == '') { 277 errorMessage = app.vtranslate('JS_MAP_NAME_CAN_NOT_BE_EMPTY'); 278 params = { 279 text: errorMessage, 280 'type': 'error' 281 }; 282 Vtiger_Helper_Js.showMessage(params); 283 return false; 284 } 285 var mapOptions = jQuery('#saved_maps option'); 286 for(var i=0; i<mapOptions.length; ++i) { 287 var mapOption = jQuery(mapOptions.get(i)); 288 if(mapOption.html() == mapName) { 289 errorMessage = app.vtranslate('JS_MAP_NAME_ALREADY_EXISTS'); 290 params = { 291 text: errorMessage, 292 'type': 'error' 293 }; 294 Vtiger_Helper_Js.showMessage(params); 295 return false; 296 } 297 } 298 } 299 return true; 300 }, 301 302 loadSavedMap: function() { 303 var selectedMapElement = jQuery('#saved_maps option:selected'); 304 var mapId = selectedMapElement.attr('id'); 305 var fieldsList = jQuery('.fieldIdentifier'); 306 var deleteMapContainer = jQuery('#delete_map_container'); 307 fieldsList.each(function(i, element) { 308 var fieldElement = jQuery(element); 309 jQuery('[name=mapped_fields]', fieldElement).val(''); 310 }); 311 if(mapId == -1) { 312 deleteMapContainer.hide(); 313 return; 314 } 315 deleteMapContainer.show(); 316 var mappingString = selectedMapElement.val() 317 if(mappingString == '') return; 318 var mappingPairs = mappingString.split('&'); 319 var mapping = {}; 320 for(var i=0; i<mappingPairs.length; ++i) { 321 var mappingPair = mappingPairs[i].split('='); 322 var header = mappingPair[0]; 323 header = header.replace(/\/eq\//g, '='); 324 header = header.replace(/\/amp\//g, '&'); 325 mapping["'"+header+"'"] = mappingPair[1]; 326 } 327 fieldsList.each(function(i, element) { 328 var fieldElement = jQuery(element); 329 var mappedFields = jQuery('[name=mapped_fields]', fieldElement); 330 var rowId = jQuery('[name=row_counter]', fieldElement).get(0).value; 331 var headerNameElement = jQuery('[name=header_name]', fieldElement).get(0); 332 var headerName = jQuery(headerNameElement).html(); 333 if("'"+headerName+"'" in mapping) { 334 mappedFields.val(mapping["'"+headerName+"'"]); 335 } else if(rowId in mapping) { 336 mappedFields.val($rowId); 337 } 338 mappedFields.trigger('liszt:updated'); 339 ImportJs.loadDefaultValueWidget(fieldElement.attr('id')); 340 }); 341 }, 342 343 deleteMap : function(module) { 344 if(confirm(app.vtranslate('LBL_DELETE_CONFIRMATION'))) { 345 var selectedMapElement = jQuery('#saved_maps option:selected'); 346 var mapId = selectedMapElement.attr('id'); 347 var status = jQuery('#status'); 348 status.show(); 349 var postData = { 350 "module": module, 351 "view": 'Import', 352 "mode": 'deleteMap', 353 "mapid": mapId 354 } 355 356 AppConnector.request(postData).then( 357 function(data){ 358 jQuery('#savedMapsContainer').html(data); 359 status.hide(); 360 var parent = jQuery("#saved_maps"); 361 app.changeSelectElementView(parent); 362 }, 363 function(error,err){ 364 365 } 366 ); 367 } 368 }, 369 370 loadDefaultValueWidget: function(rowIdentifierId) { 371 var affectedRow = jQuery('#'+rowIdentifierId); 372 if(typeof affectedRow == 'undefined' || affectedRow == null) return; 373 var selectedFieldElement = jQuery('[name=mapped_fields]', affectedRow).get(0); 374 var selectedFieldName = jQuery(selectedFieldElement).val(); 375 var defaultValueContainer = jQuery(jQuery('[name=default_value_container]', affectedRow).get(0)); 376 var allDefaultValuesContainer = jQuery('#defaultValuesElementsContainer'); 377 if(defaultValueContainer.children.length > 0) { 378 var copyOfDefaultValueWidget = jQuery(':first', defaultValueContainer).detach(); 379 copyOfDefaultValueWidget.appendTo(allDefaultValuesContainer); 380 } 381 var selectedFieldDefValueContainer = jQuery('#'+selectedFieldName+'_defaultvalue_container', allDefaultValuesContainer); 382 var defaultValueWidget = selectedFieldDefValueContainer.detach(); 383 defaultValueWidget.appendTo(defaultValueContainer); 384 }, 385 386 loadDefaultValueWidgetForMappedFields: function() { 387 var fieldsList = jQuery('.fieldIdentifier'); 388 fieldsList.each(function(i, element) { 389 var fieldElement = jQuery(element); 390 var mappedFieldName = jQuery('[name=mapped_fields]', fieldElement).val(); 391 if(mappedFieldName != '') { 392 ImportJs.loadDefaultValueWidget(fieldElement.attr('id')); 393 } 394 }); 395 396 } 397 } 398 399 jQuery(document).ready(function() { 400 ImportJs.toogleMergeConfiguration(); 401 ImportJs.loadDefaultValueWidgetForMappedFields(); 402 ImportJs.registerImportClickEvent(); 403 }); 404 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Fri Nov 28 20:08:37 2014 | Cross-referenced by PHPXref 0.7.1 |