/************************************* * SPDX-FileCopyrightText: 2009-2020 Vtenext S.r.l. * SPDX-License-Identifier: AGPL-3.0-only ************************************/ if (typeof(ImportJs) == 'undefined') { /* * Namespaced javascript class for Import */ ImportJs = { toogleMergeConfiguration: function() { var mergeChecked = jQuery('#auto_merge').is(':checked'); if(mergeChecked) { jQuery('#duplicates_merge_configuration').show(); } else { jQuery('#duplicates_merge_configuration').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(); if(fileType != 'csv') { jQuery('#delimiter_container').hide(); jQuery('#has_header_container').hide(); } else { jQuery('#delimiter_container').show(); jQuery('#has_header_container').show(); } }, uploadAndParse: function() { if(!ImportJs.validateFilePath()) return false; if(!ImportJs.validateMergeCriteria()) return false; return true; }, validateFilePath: function() { var filePath = jQuery('#import_file').val(); if(jQuery.trim(filePath) == '') { alert(sprintf(alert_arr.CANNOT_BE_EMPTY, 'Import File')); jQuery('#import_file').focus(); return false; } if(!ImportJs.uploadFilter("import_file", "csv|vcf")) { 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) { alert(alert_arr.PLS_SELECT_VALID_FILE+' '+validExtensions); obj.focus(); 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) { alert(alert_arr.ERR_SELECT_ATLEAST_ONE_MERGE_CRITERIA_FIELD); return false; } } convertOptionsToJSONArray('selected_merge_fields', 'merge_fields'); return true; }, sanitizeAndSubmit: function() { if(!ImportJs.sanitizeFieldMapping()) return false; if(!ImportJs.validateCustomMap()) return false; return true; }, // crmv@83878 sanitizeFieldMapping: function() { var fieldsList = jQuery('.fieldIdentifier'); var mappedFields = {}; var mappedDefaultValues = {}; var mappedFieldsFormats = {}; for(var i=0; i 0){ for(var mandatoryFieldName in mandatoryFields) { if(mandatoryFieldName in mappedFields) { continue; } else { missingMandatoryFields.push('"'+mandatoryFields[mandatoryFieldName]+'"'); } } } //crmv@42329e if(missingMandatoryFields.length > 0) { alert(alert_arr.ERR_PLEASE_MAP_MANDATORY_FIELDS + ' : ' + missingMandatoryFields.join(',')); return false; } jQuery('#field_mapping').val(JSON.stringify(mappedFields)); jQuery('#default_values').val(JSON.stringify(mappedDefaultValues)); jQuery('#fields_formats').val(JSON.stringify(mappedFieldsFormats)); return true; }, // crmv@83878e validateCustomMap: function() { var saveMap = jQuery('#save_map').is(':checked'); if(saveMap) { var mapName = jQuery('#save_map_as').val(); if(jQuery.trim(mapName) == '') { alert(alert_arr.ERR_MAP_NAME_CANNOT_BE_EMPTY); 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); this.loadFormatWidget(rowIdentifierId); // crmv@83878 }, // crmv@83878 loadFormatWidget: function(rowIdentifierId) { var affectedRow = jQuery('#'+rowIdentifierId); if (typeof affectedRow == 'undefined' || affectedRow == null) return; var selectedFieldElement = jQuery('[name=mapped_fields]', affectedRow).get(0); var selectedFieldName = jQuery(selectedFieldElement).val(); var formatContainer = jQuery(jQuery('[name=format_container]', affectedRow).get(0)); var allFormatsContainer = jQuery('#formatsElementsContainer'); if(formatContainer.children.length > 0) { var copyOfFormatWidget = jQuery(':first', formatContainer).detach(); copyOfFormatWidget.appendTo(allFormatsContainer); } var selectedFieldFormatContainer = jQuery('#'+selectedFieldName+'_format_container', allFormatsContainer); var formatWidget = selectedFieldFormatContainer.detach(); formatWidget.appendTo(formatContainer); // and select a default format if possible var options = formatWidget.find('option').map(function() {return jQuery(this).val(); }).get(); if (options && options.length > 0) { var format = this.detectFormat(rowIdentifierId, options); if (format) { formatWidget.find('select').first().val(format); } } }, // try to guess the format from the data provided detectFormat: function(rowIdentifierId, options) { var affectedRow = jQuery('#'+rowIdentifierId); var value = affectedRow.find('.importValueContainer').first().text().trim(); var type = null; var format = null; if (value == '') return null; // guess the type from the options // TODO: use a safer way to detect it! if (options[0].indexOf('PERIOD') >= 0) { type = 'number'; } else if (options[0].indexOf('Y-m') >= 0) { type = 'date'; } if (type && value) { if (type == 'number') { var dss = ['.', ',']; var tss = ['', '.', ',', ' ', "'"]; var ds, ts; var valid = false; for (var i=0; i