283 lines
9.4 KiB
JavaScript
283 lines
9.4 KiB
JavaScript
/*+**********************************************************************************
|
|
* 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');
|
|
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('Import File '+alert_arr.CANNOT_BE_EMPTY)
|
|
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;
|
|
},
|
|
|
|
sanitizeFieldMapping: function() {
|
|
var fieldsList = jQuery('.fieldIdentifier');
|
|
var mappedFields = {};
|
|
var mappedDefaultValues = {};
|
|
for(var i=0; i<fieldsList.length; ++i) {
|
|
var fieldElement = jQuery(fieldsList.get(i));
|
|
var rowId = jQuery('[name=row_counter]', fieldElement).get(0).value;
|
|
var selectedFieldElement = jQuery('select option:selected', fieldElement);
|
|
var selectedFieldName = selectedFieldElement.val();
|
|
var selectedFieldDefaultValueElement = jQuery('#'+selectedFieldName+'_defaultvalue', fieldElement);
|
|
var defaultValue = '';
|
|
if(selectedFieldDefaultValueElement.attr('type') == 'checkbox') {
|
|
defaultValue = selectedFieldDefaultValueElement.is(':checked');
|
|
} else {
|
|
defaultValue = selectedFieldDefaultValueElement.val();
|
|
}
|
|
if(selectedFieldName != '') {
|
|
if(selectedFieldName in mappedFields) {
|
|
alert(alert_arr.ERR_FIELDS_MAPPED_MORE_THAN_ONCE + ' "' + selectedFieldElement.html() +'"');
|
|
return false;
|
|
}
|
|
mappedFields[selectedFieldName] = rowId-1;
|
|
if(defaultValue != '') {
|
|
mappedDefaultValues[selectedFieldName] = defaultValue;
|
|
}
|
|
}
|
|
}
|
|
|
|
var mandatoryFields = JSON.parse(jQuery('#mandatory_fields').val());
|
|
var missingMandatoryFields = [];
|
|
for(var mandatoryFieldName in mandatoryFields) {
|
|
if(mandatoryFieldName in mappedFields) {
|
|
continue;
|
|
} else {
|
|
missingMandatoryFields.push('"'+mandatoryFields[mandatoryFieldName]+'"');
|
|
}
|
|
}
|
|
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));
|
|
return true;
|
|
},
|
|
|
|
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<mapOptions.length; ++i) {
|
|
var mapOption = jQuery(mapOptions.get(i));
|
|
if(mapOption.html() == mapName) {
|
|
alert(alert_arr.ERR_MAP_NAME_ALREADY_EXISTS);
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
return true;
|
|
},
|
|
|
|
loadSavedMap: function() {
|
|
var selectedMapElement = jQuery('#saved_maps option:selected');
|
|
var mapId = selectedMapElement.attr('id');
|
|
var fieldsList = jQuery('.fieldIdentifier');
|
|
fieldsList.each(function(i, element) {
|
|
var fieldElement = jQuery(element);
|
|
jQuery('[name=mapped_fields]', fieldElement).val('');
|
|
});
|
|
if(mapId == -1) {
|
|
jQuery('#delete_map_container').hide();
|
|
return;
|
|
}
|
|
jQuery('#delete_map_container').show();
|
|
var mappingString = selectedMapElement.val()
|
|
if(mappingString == '') return;
|
|
var mappingPairs = mappingString.split('&');
|
|
var mapping = {};
|
|
for(var i=0; i<mappingPairs.length; ++i) {
|
|
var mappingPair = mappingPairs[i].split('=');
|
|
var header = mappingPair[0];
|
|
header = header.replace(/\/eq\//g, '=');
|
|
header = header.replace(/\/amp\//g, '&');
|
|
mapping["'"+header+"'"] = mappingPair[1];
|
|
}
|
|
fieldsList.each(function(i, element) {
|
|
var fieldElement = jQuery(element);
|
|
var rowId = jQuery('[name=row_counter]', fieldElement).get(0).value;
|
|
var headerNameElement = jQuery('[name=header_name]', fieldElement).get(0);
|
|
var headerName = jQuery(headerNameElement).html();
|
|
if("'"+headerName+"'" in mapping) {
|
|
jQuery('[name=mapped_fields]', fieldElement).val(mapping["'"+headerName+"'"]);
|
|
} else if(rowId in mapping) {
|
|
jQuery('[name=mapped_fields]', fieldElement).val($rowId);
|
|
}
|
|
ImportJs.loadDefaultValueWidget(fieldElement.attr('id'));
|
|
});
|
|
},
|
|
|
|
deleteMap : function(module) {
|
|
if(confirm(alert_arr.ARE_YOU_SURE_YOU_WANT_TO_DELETE)) {
|
|
var selectedMapElement = jQuery('#saved_maps option:selected');
|
|
var mapId = selectedMapElement.attr('id');
|
|
jQuery('#status').show();
|
|
jQuery.ajax( {
|
|
url : 'index.php',
|
|
type : 'POST',
|
|
data : {module: module,
|
|
action: module+'Ajax',
|
|
file: 'Import',
|
|
mode: 'delete_map',
|
|
mapid: mapId,
|
|
ajax: true},
|
|
complete : function(response) {
|
|
jQuery('#savedMapsContainer').html(response.responseText);
|
|
jQuery('#status').hide();
|
|
}
|
|
});
|
|
}
|
|
},
|
|
|
|
loadListViewPage: function(module, pagenum, userid) {
|
|
jQuery('#status').show();
|
|
jQuery.ajax( {
|
|
url : 'index.php',
|
|
type : 'POST',
|
|
data : {module: module,
|
|
action: module+'Ajax',
|
|
file: 'Import',
|
|
mode: 'listview',
|
|
start: pagenum,
|
|
foruser: userid,
|
|
ajax: true},
|
|
complete : function(response) {
|
|
jQuery('#import_listview_contents').html(response.responseText);
|
|
jQuery('#status').hide();
|
|
}
|
|
});
|
|
},
|
|
|
|
loadListViewSelectedPage: function(module, userid) {
|
|
var pagenum = jQuery('#page_num').val();
|
|
ImportJs.loadListViewPage(module, pagenum, userid);
|
|
},
|
|
|
|
loadDefaultValueWidget: 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 defaultValueContainer = jQuery(jQuery('[name=default_value_container]', affectedRow).get(0));
|
|
var allDefaultValuesContainer = jQuery('#defaultValuesElementsContainer');
|
|
if(defaultValueContainer.children.length > 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();
|
|
});
|
|
} |