[ Index ]

PHP Cross Reference of vtigercrm-6.1.0

title

Body

[close]

/pkg/vtiger/modules/Import/templates/resources/ -> Import.js (source)

   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  }


Generated: Fri Nov 28 20:08:37 2014 Cross-referenced by PHPXref 0.7.1