/*+********************************************************************************** * The contents of this file are subject to the vtiger CRM Public License Version 1.0 * ("License"); You may not use this file except in compliance with the License * The Original Code is: vtiger CRM Open Source * The Initial Developer of the Original Code is vtiger. * Portions created by vtiger are Copyright (C) vtiger. * All Rights Reserved. ************************************************************************************/ if (typeof(ImportJs) == 'undefined') { /* * Namespaced javascript class for Import */ ImportJs = { toogleMergeConfiguration: function() { var mergeChecked = jQuery('#auto_merge').is(':checked'); var duplicateMergeConfiguration = jQuery('#duplicates_merge_configuration'); if(mergeChecked) { duplicateMergeConfiguration.show(); } else { duplicateMergeConfiguration.hide(); } }, checkFileType: function() { var filePath = jQuery('#import_file').val(); if(filePath != '') { var fileExtension = filePath.split('.').pop(); jQuery('#type').val(fileExtension); ImportJs.handleFileTypeChange(); } }, handleFileTypeChange: function() { var fileType = jQuery('#type').val(); var delimiterContainer = jQuery('#delimiter_container'); var hasHeaderContainer = jQuery('#has_header_container'); if(fileType != 'csv') { delimiterContainer.hide(); hasHeaderContainer.hide(); } else { delimiterContainer.show(); hasHeaderContainer.show(); } }, uploadAndParse: function() { if(!ImportJs.validateFilePath()) return false; if(!ImportJs.validateMergeCriteria()) return false; return true; }, registerImportClickEvent : function(){ jQuery('#importButton').on('click',function(e){ var result = ImportJs.sanitizeAndSubmit() return result; }); }, validateFilePath: function() { var importFile = jQuery('#import_file'); var filePath = importFile.val(); if(jQuery.trim(filePath) == '') { var errorMessage = app.vtranslate('JS_IMPORT_FILE_CAN_NOT_BE_EMPTY'); var params = { text: errorMessage, type: 'error' }; Vtiger_Helper_Js.showMessage(params); importFile.focus(); return false; } if(!ImportJs.uploadFilter("import_file", "csv|vcf")) { return false; } if(!ImportJs.uploadFileSize("import_file")) { return false; } return true; }, uploadFilter: function(elementId, allowedExtensions) { var obj = jQuery('#'+elementId); if(obj) { var filePath = obj.val(); var fileParts = filePath.toLowerCase().split('.'); var fileType = fileParts[fileParts.length-1]; var validExtensions = allowedExtensions.toLowerCase().split('|'); if(validExtensions.indexOf(fileType) < 0) { var errorMessage = app.vtranslate('JS_SELECT_FILE_EXTENSION')+'\n' +validExtensions; var params = { text: errorMessage, type: 'error' }; Vtiger_Helper_Js.showMessage(params); obj.focus(); return false; } } return true; }, uploadFileSize : function(elementId) { var element = jQuery('#'+elementId); var importMaxUploadSize = element.closest('td').data('importUploadSize'); var importMaxUploadSizeInMb = element.closest('td').data('importUploadSizeMb'); var uploadedFileSize = element.get(0).files[0].size; if(uploadedFileSize > importMaxUploadSize){ var errorMessage = app.vtranslate('JS_UPLOADED_FILE_SIZE_EXCEEDS')+" "+importMaxUploadSizeInMb+ " MB." + app.vtranslate('JS_PLEASE_SPLIT_FILE_AND_IMPORT_AGAIN'); var params = { text: errorMessage, type: 'error' }; Vtiger_Helper_Js.showMessage(params); return false; } return true; }, validateMergeCriteria: function() { $mergeChecked = jQuery('#auto_merge').is(':checked'); if($mergeChecked) { var selectedOptions = jQuery('#selected_merge_fields option'); if(selectedOptions.length == 0) { var errorMessage = app.vtranslate('JS_PLEASE_SELECT_ONE_FIELD_FOR_MERGE'); var params = { text: errorMessage, 'type': 'error' }; Vtiger_Helper_Js.showMessage(params); return false; } } ImportJs.convertOptionsToJSONArray('#selected_merge_fields', '#merge_fields'); return true; }, //TODO move to a common file convertOptionsToJSONArray : function(objName, targetObjName) { var obj = jQuery(objName); var arr = []; if(typeof(obj) != 'undefined' && obj[0] != '') { for (i=0; i'); opt.attr('value', srcObj[0].options[i].value); opt.text(srcObj[0].options[i].text); jQuery(destObj[0]).append(opt); srcObj[0].options[i].selected = false; rowFound = false; } else { if(existingObj != null) existingObj.selected = true; } } } }, //TODO move to a common file removeSelectedOptions : function (objName) { var obj = jQuery(objName); if(obj == null || typeof(obj) == 'undefined') return; for (i=obj[0].options.length-1;i>=0;i--) { if (obj[0].options[i].selected == true) { obj[0].options[i] = null; } } }, sanitizeAndSubmit: function() { if(!ImportJs.sanitizeFieldMapping()) return false; if(!ImportJs.validateCustomMap()) return false; return true; }, sanitizeFieldMapping: function() { var fieldsList = jQuery('.fieldIdentifier'); var mappedFields = {}; var errorMessage; var params = {}; var mappedDefaultValues = {}; for(var i=0; i 0) { errorMessage = app.vtranslate('JS_MAP_MANDATORY_FIELDS')+ missingMandatoryFields.join(','); params = { text: errorMessage, 'type': 'error' }; Vtiger_Helper_Js.showMessage(params); return false; } jQuery('#field_mapping').val(JSON.stringify(mappedFields)); jQuery('#default_values').val(JSON.stringify(mappedDefaultValues)); return true; }, validateCustomMap: function() { var errorMessage; var params = {}; var saveMap = jQuery('#save_map').is(':checked'); if(saveMap) { var mapName = jQuery('#save_map_as').val(); if(jQuery.trim(mapName) == '') { errorMessage = app.vtranslate('JS_MAP_NAME_CAN_NOT_BE_EMPTY'); params = { text: errorMessage, 'type': 'error' }; Vtiger_Helper_Js.showMessage(params); return false; } var mapOptions = jQuery('#saved_maps option'); for(var i=0; i 0) { var copyOfDefaultValueWidget = jQuery(':first', defaultValueContainer).detach(); copyOfDefaultValueWidget.appendTo(allDefaultValuesContainer); } var selectedFieldDefValueContainer = jQuery('#'+selectedFieldName+'_defaultvalue_container', allDefaultValuesContainer); var defaultValueWidget = selectedFieldDefValueContainer.detach(); defaultValueWidget.appendTo(defaultValueContainer); }, loadDefaultValueWidgetForMappedFields: function() { var fieldsList = jQuery('.fieldIdentifier'); fieldsList.each(function(i, element) { var fieldElement = jQuery(element); var mappedFieldName = jQuery('[name=mapped_fields]', fieldElement).val(); if(mappedFieldName != '') { ImportJs.loadDefaultValueWidget(fieldElement.attr('id')); } }); } } jQuery(document).ready(function() { ImportJs.toogleMergeConfiguration(); ImportJs.loadDefaultValueWidgetForMappedFields(); ImportJs.registerImportClickEvent(); }); }