[ Index ]

PHP Cross Reference of vtigercrm-6.1.0

title

Body

[close]

/layouts/vlayout/modules/Settings/Leads/resources/ -> LeadMapping.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  jQuery.Class("Settings_LeadMapping_Js",{
  11      
  12      /**
  13       * Function to register event to edit leads mapping
  14       */
  15      triggerEdit : function(editUrl){
  16          var aDeferred = jQuery.Deferred();
  17          var progressIndicatorElement = jQuery.progressIndicator({
  18              'position' : 'html',
  19              'blockInfo' : {
  20                  'enabled' : true
  21                  }
  22          });
  23  
  24          AppConnector.request(editUrl).then(
  25              function(data) {
  26                  var detailContentsHolder = jQuery('.contentsDiv');
  27                  detailContentsHolder.html(data);
  28                  progressIndicatorElement.progressIndicator({'mode' : 'hide'});
  29                  var leadMappingInstance = new Settings_LeadMapping_Js();
  30                  leadMappingInstance.registerEventsForEditView();
  31              },
  32              function(error) {
  33                  progressIndicatorElement.progressIndicator({'mode' : 'hide'});
  34              }
  35          );
  36          return aDeferred.promise();
  37      },
  38      
  39      /**
  40       * Function to register event for delete lead mapping
  41       */
  42      triggerDelete : function(event,url){
  43          var element = jQuery(event.currentTarget);
  44          var mappingContainer = element.closest('.listViewEntries');
  45          var mappingId = mappingContainer.data('cfmid');
  46          var deleteUrl = url+'&mappingId='+mappingId;
  47          AppConnector.request(deleteUrl).then(
  48              function(data) {
  49                  var message = data.result[0];
  50                  var params = {
  51                      text: message
  52                  };
  53                  if(data.success){
  54                      mappingContainer.remove();
  55                  } else {
  56                      params['type'] = 'error';
  57                  }
  58                  Settings_Vtiger_Index_Js.showMessage(params);
  59              },
  60              function(error) {
  61              }
  62          );
  63      }
  64  },{
  65      /**
  66       * Function to register events for edit view of leads mapping
  67       */
  68      registerEventsForEditView : function(){
  69          var form = jQuery('#leadsMapping');
  70          var select2Elements = form.find('.select2');
  71          app.showSelect2ElementView(select2Elements);
  72          this.registerEventForAddingNewMapping();
  73          this.registerOnChangeEventForSourceModule();
  74          this.registerEventToDeleteMapping();
  75          this.registerEventForFormSubmit();
  76          this.registerOnChangeEventOfTargetModule();
  77          jQuery('select.accountsFields.select2,select.contactFields.select2,select.potentialFields.select2').trigger('change',false);
  78      },
  79      
  80      /**
  81       * Function to register event for adding new convert to lead mapping
  82       */
  83      registerEventForAddingNewMapping : function(){
  84          jQuery('#addMapping').on('click',function(e){
  85              var convertLeadMappingTable = jQuery('#convertLeadMapping');
  86              var lastSequenceNumber = convertLeadMappingTable.find('tr:last[sequence-number]').attr('sequence-number');
  87              var newSequenceNumber = parseInt(lastSequenceNumber)+1;
  88              var newMapping = jQuery('.newMapping').clone(true,true);
  89              newMapping.attr('sequence-number',newSequenceNumber);
  90              newMapping.find('select.leadsFields.newSelect').attr("name",'mapping['+newSequenceNumber+'][lead]');
  91              newMapping.find('select.accountsFields.newSelect').attr("name",'mapping['+newSequenceNumber+'][account]');
  92              newMapping.find('select.contactFields.newSelect').attr("name",'mapping['+newSequenceNumber+'][contact]');
  93              newMapping.find('select.potentialFields.newSelect').attr("name",'mapping['+newSequenceNumber+'][potential]');
  94              newMapping.removeClass('hide newMapping');
  95              newMapping.appendTo(convertLeadMappingTable);
  96              newMapping.find('.newSelect').removeClass('newSelect').addClass('select2');
  97              var select2Elements = newMapping.find('.select2');
  98              app.showSelect2ElementView(select2Elements);
  99              jQuery('select.accountsFields.select2,select.contactFields.select2,select.potentialFields.select2',newMapping).trigger('change',false);
 100          })
 101      },
 102      
 103      /**
 104       * Function to register on change event for select2 element
 105       */
 106      registerOnChangeEventForSourceModule : function(){
 107          var form = jQuery('#leadsMapping');
 108          form.on('change','.leadsFields',function(e){
 109              var element = jQuery(e.currentTarget);
 110              var container = jQuery(element.closest('tr'));
 111              var selectedValue = element.val();
 112              var selectedOption = element.find('option[value="'+selectedValue+'"]');
 113              var selectedDataType = selectedOption.data('type');
 114              var accountFieldsSelectElement = container.find('select.accountsFields.select2');
 115              var contactFieldsSelectElement = container.find('select.contactFields.select2');
 116              var potentialFieldsSelectElement = container.find('select.potentialFields.select2');
 117              
 118              var accountFieldsBasedOnType = form.find('.newMapping').find('.accountsFields').children().filter('[data-type="'+selectedDataType+'"]').clone(true,true);
 119              var contactFieldsBasedOnType = form.find('.newMapping').find('.contactFields').children().filter('option[data-type="'+selectedDataType+'"]').clone(true,true);
 120              var potentialFieldsBasedOnType = form.find('.newMapping').find('.potentialFields').children().filter('option[data-type="'+selectedDataType+'"]').clone(true,true);
 121              selectedDataType = app.vtranslate("JS_"+selectedDataType);
 122              container.find('.selectedFieldDataType').html(selectedDataType);
 123              
 124              var noneValue = app.vtranslate('JS_NONE');
 125              accountFieldsSelectElement.html(accountFieldsBasedOnType);
 126              contactFieldsSelectElement.html(contactFieldsBasedOnType);
 127              potentialFieldsSelectElement.html(potentialFieldsBasedOnType);
 128              
 129              if(selectedDataType != "None"){
 130                  accountFieldsSelectElement.prepend('<option data-type="'+noneValue+'" label="'+noneValue+'" value="0" selected>'+noneValue+'</option>');
 131                  contactFieldsSelectElement.prepend('<option data-type="'+noneValue+'" label="'+noneValue+'" value="0" selected>'+noneValue+'</option>');
 132                  potentialFieldsSelectElement.prepend('<option data-type="'+noneValue+'" label="'+noneValue+'" value="0" selected>'+noneValue+'</option>');
 133              }
 134              
 135              accountFieldsSelectElement.trigger("liszt:updated").trigger('change',false);
 136              contactFieldsSelectElement.trigger("liszt:updated").trigger('change',false);
 137              potentialFieldsSelectElement.trigger("liszt:updated").trigger('change',false);
 138          })
 139      },
 140      
 141      /**
 142       * Function to register event to delete mapping
 143       */
 144      registerEventToDeleteMapping : function(){
 145          var form = jQuery('#leadsMapping');
 146          form.on('click','.deleteMapping',function(e){
 147              var element = jQuery(e.currentTarget);
 148              var mappingContainer = element.closest('tr');
 149              var mappingContainerSequenceNumber = mappingContainer.attr('sequence-number');
 150              var deletableName = 'mapping['+mappingContainerSequenceNumber+'][deletable]';
 151              mappingContainer.prepend('<input type="hidden" name="'+deletableName+'" />')
 152              mappingContainer.data('deletable',true).hide('slow');
 153              var params = {
 154                  text: app.vtranslate('JS_MAPPING_DELETED_SUCCESSFULLY')
 155              }
 156              Settings_Vtiger_Index_Js.showMessage(params);
 157          })
 158      },
 159      
 160      /**
 161       * Function to handle edit view convert lead form submit
 162       */
 163      registerEventForFormSubmit : function() {
 164          jQuery('#leadsMapping').on('submit',function(e){
 165              e.preventDefault();
 166              var mappingDetails = jQuery(this).serializeFormData();
 167              var params = { 
 168                  'module' : app.getModuleName(),
 169                  'parent' : app.getParentModuleName(),
 170                  'action' : 'MappingSave',
 171                  'mapping' : mappingDetails
 172              }
 173  
 174              var progressIndicatorElement = jQuery.progressIndicator({
 175                  'position' : 'html',
 176                  'blockInfo' : {
 177                      'enabled' : true
 178                      }
 179              });
 180  
 181          AppConnector.request(params).then(
 182              function(data) {
 183                  if(data.success){
 184                      var detailViewParams = {
 185                          'module' : app.getModuleName(),
 186                          'parent' : app.getParentModuleName(),
 187                          'view' : 'MappingDetail'
 188                      }
 189                      AppConnector.request(detailViewParams).then(function(data){
 190                          var detailContentsHolder = jQuery('.contentsDiv');
 191                          detailContentsHolder.html(data);
 192                          progressIndicatorElement.progressIndicator({'mode' : 'hide'});
 193                      })
 194                  }
 195              },
 196              function(error) {
 197                  progressIndicatorElement.progressIndicator({'mode' : 'hide'});
 198              }
 199          );
 200          })
 201      },
 202      
 203      /**
 204       * Function to register on chnage event of target module
 205       */
 206      registerOnChangeEventOfTargetModule : function(){
 207          var form = jQuery('#leadsMapping');
 208          form.on('change','select.accountsFields.select2,select.contactFields.select2,select.potentialFields.select2',function(e,executeChange){
 209              if(typeof executeChange == "undefined"){
 210                  executeChange = true;
 211              }
 212              var selectElement = jQuery(e.currentTarget);
 213              var selectedValue = selectElement.children().filter('option:selected').text();
 214              var selectedOptionId = selectElement.children().filter('option:selected').val();
 215              var mappingContainer = selectElement.closest('tr');
 216              
 217              var duplicateOption = false;
 218              var existingIdElement;
 219              if(selectedOptionId == "0"){
 220                  selectedOptionId = "false";
 221              }
 222              
 223              if((!executeChange) || (selectedOptionId == "false")){
 224                  selectElement.attr('selectedId',selectedOptionId);
 225                  return;
 226              }
 227              
 228              //check for source module field
 229              var sourceModuleSelect = mappingContainer.find('select.leadsFields.select2');
 230              var sourceModuleSelectedField = sourceModuleSelect.val();
 231              var sourceModuleSelectedFieldLabel = sourceModuleSelect.find('option[value="'+sourceModuleSelectedField+'"]').text();
 232              if(sourceModuleSelectedField == "0"){
 233                  duplicateOption = true;
 234                  var errorParams = {
 235                      text: app.vtranslate('JS_CANT_MAP')+" "+ selectedValue+" "+ app.vtranslate('JS_WITH')+" "+ sourceModuleSelectedFieldLabel,
 236                      'type' : 'error'
 237                  }
 238                  Settings_Vtiger_Index_Js.showMessage(errorParams);
 239              }
 240  
 241              if(selectElement.hasClass('accountsFields')){
 242                  existingIdElement = jQuery('select.accountsFields.select2[selectedid="'+selectedOptionId+'"]')
 243              } else if(selectElement.hasClass('contactFields')){
 244                  existingIdElement = jQuery('select.contactFields.select2[selectedid="'+selectedOptionId+'"]')
 245              } else if(selectElement.hasClass('potentialFields')){
 246                  existingIdElement = jQuery('select.potentialFields.select2[selectedid="'+selectedOptionId+'"]')
 247              }
 248  
 249              if(existingIdElement.length > 0){
 250                  duplicateOption = true;
 251              }
 252  
 253              if(duplicateOption){
 254                  var selectedFieldId = selectElement.attr('selectedid');
 255                  var previousSelectedValue;
 256                  if(selectedFieldId == "false"){
 257                      previousSelectedValue = selectElement.find('option[label="None"]').text();
 258                      selectElement.attr('selectedId',"false");
 259                  } else if(selectedFieldId != "false"){
 260                      previousSelectedValue = selectElement.find('option[value="'+selectedFieldId+'"]').text();
 261                      selectElement.attr('selectedId',selectedFieldId);
 262                  }
 263                  var params = {
 264                          'id' : previousSelectedValue,
 265                          'text' : previousSelectedValue
 266                      }
 267                  var warningMessage = selectedValue+" "+app.vtranslate('JS_IS_ALREADY_BEEN_MAPPED');
 268                  var notificationParams = {
 269                      text: warningMessage,
 270                      'type' : 'error'
 271                  };
 272                  Settings_Vtiger_Index_Js.showMessage(notificationParams);
 273                  selectElement.select2("data",params);
 274              } else if(duplicateOption == false){
 275                  selectElement.attr('selectedId',selectedOptionId);
 276              }
 277          })
 278      }
 279  });


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