[ Index ] |
PHP Cross Reference of vtigercrm-6.1.0 |
[Summary view] [Print] [Text view]
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 });
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Fri Nov 28 20:08:37 2014 | Cross-referenced by PHPXref 0.7.1 |