[ 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 Vtiger_Edit_Js("Calendar_Edit_Js",{ 11 12 },{ 13 relatedContactElement : false, 14 15 getRelatedContactElement : function() { 16 if(this.relatedContactElement == false) { 17 this.relatedContactElement = jQuery('#contact_id_display'); 18 } 19 return this.relatedContactElement; 20 }, 21 22 isEvents : function() { 23 var form = this.getForm(); 24 var moduleName = form.find('[name="module"]').val(); 25 if(moduleName == 'Events') { 26 return true; 27 } 28 return false; 29 }, 30 31 getPopUpParams : function(container) { 32 var params = this._super(container); 33 var sourceFieldElement = jQuery('input[class="sourceField"]',container); 34 35 if(sourceFieldElement.attr('name') == 'contact_id') { 36 var form = this.getForm(); 37 var parentIdElement = form.find('[name="parent_id"]'); 38 if(parentIdElement.length > 0 && parentIdElement.val().length > 0) { 39 var closestContainer = parentIdElement.closest('td'); 40 params['related_parent_id'] = parentIdElement.val(); 41 params['related_parent_module'] = closestContainer.find('[name="popupReferenceModule"]').val(); 42 } 43 } 44 return params; 45 }, 46 47 registerReminderFieldCheckBox : function() { 48 this.getForm().find('input[name="set_reminder"]').on('change', function(e) { 49 var element = jQuery(e.currentTarget); 50 var closestDiv = element.closest('div').next(); 51 if(element.is(':checked')) { 52 closestDiv.show(); 53 } else { 54 closestDiv.hide(); 55 } 56 }) 57 }, 58 59 /** 60 * Function which will register change event on recurrence field checkbox 61 */ 62 registerRecurrenceFieldCheckBox : function() { 63 var thisInstance = this; 64 thisInstance.getForm().find('input[name="recurringcheck"]').on('change', function(e) { 65 var element = jQuery(e.currentTarget); 66 var repeatUI = jQuery('#repeatUI'); 67 if(element.is(':checked')) { 68 repeatUI.show(); 69 } else { 70 repeatUI.hide(); 71 } 72 }); 73 }, 74 75 /** 76 * Function which will register the change event for recurring type 77 */ 78 registerRecurringTypeChangeEvent : function() { 79 var thisInstance = this; 80 jQuery('#recurringType').on('change', function(e) { 81 var currentTarget = jQuery(e.currentTarget); 82 var recurringType = currentTarget.val(); 83 thisInstance.changeRecurringTypesUIStyles(recurringType); 84 85 }); 86 }, 87 88 /** 89 * Function which will register the change event for repeatMonth radio buttons 90 */ 91 registerRepeatMonthActions : function() { 92 var thisInstance = this; 93 thisInstance.getForm().find('input[name="repeatMonth"]').on('change', function(e) { 94 //If repeatDay radio button is checked then only select2 elements will be enable 95 thisInstance.repeatMonthOptionsChangeHandling(); 96 }); 97 }, 98 99 100 /** 101 * Function which will change the UI styles based on recurring type 102 * @params - recurringType - which recurringtype is selected 103 */ 104 changeRecurringTypesUIStyles : function(recurringType) { 105 var thisInstance = this; 106 if(recurringType == 'Daily' || recurringType == 'Yearly') { 107 jQuery('#repeatWeekUI').removeClass('show').addClass('hide'); 108 jQuery('#repeatMonthUI').removeClass('show').addClass('hide'); 109 } else if(recurringType == 'Weekly') { 110 jQuery('#repeatWeekUI').removeClass('hide').addClass('show'); 111 jQuery('#repeatMonthUI').removeClass('show').addClass('hide'); 112 } else if(recurringType == 'Monthly') { 113 jQuery('#repeatWeekUI').removeClass('show').addClass('hide'); 114 jQuery('#repeatMonthUI').removeClass('hide').addClass('show'); 115 } 116 }, 117 118 /** 119 * This function will handle the change event for RepeatMonthOptions 120 */ 121 repeatMonthOptionsChangeHandling : function() { 122 //If repeatDay radio button is checked then only select2 elements will be enable 123 if(jQuery('#repeatDay').is(':checked')) { 124 jQuery('#repeatMonthDate').attr('disabled', true); 125 jQuery('#repeatMonthDayType').select2("enable"); 126 jQuery('#repeatMonthDay').select2("enable"); 127 } else { 128 jQuery('#repeatMonthDate').removeAttr('disabled'); 129 jQuery('#repeatMonthDayType').select2("disable"); 130 jQuery('#repeatMonthDay').select2("disable"); 131 } 132 }, 133 134 /** 135 * Function which will fill the already saved contacts on load 136 */ 137 fillRelatedContacts : function() { 138 var form = this.getForm(); 139 var relatedContactValue = form.find('[name="relatedContactInfo"]').data('value'); 140 for(var contactId in relatedContactValue) { 141 var info = relatedContactValue[contactId]; 142 info.text = info.name; 143 relatedContactValue[contactId] = info; 144 } 145 this.getRelatedContactElement().select2('data',relatedContactValue); 146 }, 147 148 addNewContactToRelatedList : function(newContactInfo){ 149 var resultentData = new Array(); 150 var element = jQuery('#contact_id_display'); 151 var selectContainer = jQuery(element.data('select2').containerSelector); 152 var choices = selectContainer.find('.select2-search-choice'); 153 choices.each(function(index,element){ 154 resultentData.push(jQuery(element).data('select2-data')); 155 }); 156 157 var select2FormatedResult = newContactInfo.data; 158 for(var i=0 ; i < select2FormatedResult.length; i++) { 159 var recordResult = select2FormatedResult[i]; 160 recordResult.text = recordResult.name; 161 resultentData.push( recordResult ); 162 } 163 jQuery('#contact_id_display').select2('data',resultentData); 164 }, 165 166 referenceCreateHandler : function(container) { 167 var thisInstance = this; 168 var form = thisInstance.getForm(); 169 var mode = jQuery(form).find('[name="module"]').val(); 170 if(container.find('.sourceField').attr('name') != 'contact_id'){ 171 this._super(container); 172 return; 173 } 174 var postQuickCreateSave = function(data) { 175 var params = {}; 176 params.name = data.result._recordLabel; 177 params.id = data.result._recordId; 178 if(mode == "Calendar"){ 179 thisInstance.setReferenceFieldValue(container, params); 180 return; 181 } 182 thisInstance.addNewContactToRelatedList({'data':[params]}); 183 } 184 185 var referenceModuleName = this.getReferencedModuleName(container); 186 var quickCreateNode = jQuery('#quickCreateModules').find('[data-name="'+ referenceModuleName +'"]'); 187 if(quickCreateNode.length <= 0) { 188 Vtiger_Helper_Js.showPnotify(app.vtranslate('JS_NO_CREATE_OR_NOT_QUICK_CREATE_ENABLED')) 189 } 190 quickCreateNode.trigger('click',{'callbackFunction':postQuickCreateSave}); 191 }, 192 193 registerClearReferenceSelectionEvent : function(container) { 194 var thisInstance = this; 195 this._super(container); 196 197 this.getRelatedContactElement().closest('td').find('.clearReferenceSelection').on('click',function(e){ 198 thisInstance.getRelatedContactElement().select2('data',[]); 199 }); 200 }, 201 202 /** 203 * Function to change the end time based on default call duration 204 */ 205 registerTimeStartChangeEvent : function(container) { 206 container.on('changeTime','input[name="time_start"]',function(e) { 207 var strtTimeElement = jQuery(e.currentTarget); 208 var endTimeElement = container.find('[name="time_end"]'); 209 var dateStartElement = container.find('[name="date_start"]'); 210 var endDateElement = container.find('[name="due_date"]'); 211 212 if(endDateElement.data('userChangedTime') == true) { 213 return; 214 } 215 if(jQuery('[name="userChangedEndDateTime"]').val() == '1') { 216 return; 217 } 218 219 var startDate = dateStartElement.val(); 220 var strtTime = strtTimeElement.val(); 221 222 var result = Vtiger_Time_Validator_Js.invokeValidation(strtTimeElement); 223 if(result != true){ 224 return; 225 } 226 var dateTime = startDate+' '+strtTime; 227 var dateFormat = container.find('[name="date_start"]').data('dateFormat'); 228 var timeFormat = endTimeElement.data('format'); 229 var date = Vtiger_Helper_Js.getDateInstance(dateTime,dateFormat); 230 231 var endDateInstance = Date.parse(date); 232 if(container.find('[name="activitytype"]').val() == 'Call'){ 233 var defaulCallDuration = container.find('[name="defaultCallDuration"]').val(); 234 endDateInstance.addMinutes(defaulCallDuration); 235 } else { 236 var defaultOtherEventDuration = container.find('[name="defaultOtherEventDuration"]').val(); 237 endDateInstance.addMinutes(defaultOtherEventDuration); 238 } 239 var endDateString = app.getDateInVtigerFormat(dateFormat,endDateInstance); 240 if(timeFormat == 24){ 241 var defaultTimeFormat = 'HH:mm'; 242 } else { 243 defaultTimeFormat = 'hh:mm tt'; 244 } 245 var endTimeString = endDateInstance.toString(defaultTimeFormat); 246 247 endDateElement.val(endDateString); 248 endTimeElement.val(endTimeString); 249 }); 250 251 container.find('[name="date_start"]').on('change',function(e) { 252 var startDateElement = jQuery(e.currentTarget); 253 var result = Vtiger_Date_Validator_Js.invokeValidation(startDateElement); 254 if(result != true){ 255 return; 256 } 257 var timeStartElement = startDateElement.closest('td.fieldValue').find('[name="time_start"]'); 258 timeStartElement.trigger('changeTime'); 259 }); 260 261 container.find('input[name="time_start"]').on('focus',function(e){ 262 var element = jQuery(e.currentTarget); 263 element.data('prevValue',element.val()); 264 }) 265 266 container.find('input[name="time_start"]').on('blur', function(e,data){ 267 if(typeof data =='undefined'){ 268 data = {}; 269 } 270 271 if(typeof data.forceChange == 'undefined') { 272 data.forceChange = false; 273 } 274 var element = jQuery(e.currentTarget); 275 var currentValue = element.val(); 276 var prevValue = element.data('prevValue'); 277 if(currentValue != prevValue || data.forceChange) { 278 var list = element.data('timepicker-list'); 279 if(!list) { 280 //To generate the list 281 element.timepicker('show'); 282 element.timepicker('hide'); 283 list = element.data('timepicker-list'); 284 } 285 list.show(); 286 e = jQuery.Event("keydown"); 287 e.which = 13; 288 e.keyCode = 13; 289 element.trigger(e) 290 list.hide(); 291 } 292 }); 293 }, 294 295 registerEndDateTimeChangeLogger : function(container) { 296 container.find('[name="time_end"]').on('changeTime',function(e) { 297 var timeElement = jQuery(e.currentTarget); 298 var result = Vtiger_Time_Validator_Js.invokeValidation(timeElement); 299 if(result != true){ 300 return; 301 } 302 var timeDateElement = timeElement.closest('td.fieldValue').find('[name="due_date"]'); 303 jQuery('[name="userChangedEndDateTime"]').val('1'); 304 timeDateElement.data('userChangedTime',true); 305 }); 306 307 container.find('[name="due_date"]').on('change',function(e) { 308 var dueDateElement = jQuery(e.currentTarget); 309 var result = Vtiger_Date_Validator_Js.invokeValidation(dueDateElement); 310 if(result != true){ 311 return; 312 } 313 jQuery('[name="userChangedEndDateTime"]').val('1'); 314 dueDateElement.data('userChangedTime',true); 315 }); 316 }, 317 318 /** 319 * Function to change the Other event Duration 320 */ 321 registerActivityTypeChangeEvent : function(container) { 322 container.on('change','[name="activitytype"]',function(e) { 323 container.find('input[name="time_start"]').trigger('changeTime'); 324 }); 325 }, 326 327 /** 328 * This function will register the submit event on form 329 */ 330 registerFormSubmitEvent : function() { 331 var thisInstance = this; 332 var form = this.getForm(); 333 form.on('submit', function(e) { 334 var recurringCheck = form.find('input[name="recurringcheck"]').is(':checked'); 335 336 //If the recurring check is not enabled then recurring type should be --None-- 337 if(recurringCheck == false) { 338 jQuery('#recurringType').append(jQuery('<option value="--None--">None</option>')).val('--None--'); 339 } 340 if(thisInstance.isEvents()) { 341 jQuery('<input type="hidden" name="contactidlist" /> ').appendTo(form).val(thisInstance.getRelatedContactElement().val().split(',').join(';')); 342 form.find('[name="contact_id"]').attr('name',''); 343 var inviteeIdsList = jQuery('#selectedUsers').val(); 344 if(inviteeIdsList != null) { 345 inviteeIdsList = jQuery('#selectedUsers').val().join(';') 346 } 347 jQuery('<input type="hidden" name="inviteesid" />').appendTo(form).val(inviteeIdsList); 348 } 349 }) 350 }, 351 352 registerRelatedContactSpecificEvents : function() { 353 var thisInstance = this; 354 var form = this.getForm(); 355 356 form.find('[name="contact_id"]').on(Vtiger_Edit_Js.preReferencePopUpOpenEvent,function(e){ 357 var form = thisInstance.getForm(); 358 var parentIdElement = form.find('[name="parent_id"]'); 359 var container = parentIdElement.closest('td'); 360 var popupReferenceModule = jQuery('input[name="popupReferenceModule"]',container).val(); 361 362 if(popupReferenceModule == 'Leads' && parentIdElement.val().length > 0) { 363 e.preventDefault(); 364 Vtiger_Helper_Js.showPnotify(app.vtranslate('LBL_CANT_SELECT_CONTACT_FROM_LEADS')); 365 } 366 }) 367 //If module is not events then we dont have to register events 368 if(!this.isEvents()) { 369 return; 370 } 371 this.getRelatedContactElement().select2({ 372 minimumInputLength: 3, 373 ajax : { 374 'url' : 'index.php?module=Contacts&action=BasicAjax&search_module=Contacts', 375 'dataType' : 'json', 376 'data' : function(term,page){ 377 var data = {}; 378 data['search_value'] = term; 379 var parentIdElement = form.find('[name="parent_id"]'); 380 if(parentIdElement.val().length > 0) { 381 var closestContainer = parentIdElement.closest('td'); 382 data['parent_id'] = parentIdElement.val(); 383 data['parent_module'] = closestContainer.find('[name="popupReferenceModule"]').val(); 384 } 385 return data; 386 }, 387 'results' : function(data){ 388 data.results = data.result; 389 for(var index in data.results ) { 390 391 var resultData = data.result[index]; 392 resultData.text = resultData.label; 393 } 394 return data 395 }, 396 transport : function(params){ 397 return jQuery.ajax(params); 398 } 399 }, 400 multiple : true 401 }); 402 403 //To add multiple selected contact from popup 404 form.find('[name="contact_id"]').on(Vtiger_Edit_Js.refrenceMultiSelectionEvent,function(e,result){ 405 thisInstance.addNewContactToRelatedList(result); 406 }); 407 408 this.fillRelatedContacts(); 409 }, 410 411 /** 412 * Function to get reference search params 413 */ 414 getReferenceSearchParams : function(element){ 415 var tdElement = jQuery(element).closest('td'); 416 var contactField = tdElement.find('[name="contact_id"]'); 417 var params = {}; 418 if(contactField.length > 0){ 419 var form = this.getForm(); 420 var parentIdElement = form.find('[name="parent_id"]'); 421 if(parentIdElement.val().length > 0) { 422 var closestContainer = parentIdElement.closest('td'); 423 params['parent_id'] = parentIdElement.val(); 424 params['parent_module'] = closestContainer.find('[name="popupReferenceModule"]').val(); 425 } 426 } 427 var searchModule = this.getReferencedModuleName(tdElement); 428 params.search_module = searchModule; 429 return params; 430 }, 431 432 registerBasicEvents : function(container) { 433 this._super(container); 434 this.registerActivityTypeChangeEvent(container); 435 this.registerTimeStartChangeEvent(container); 436 this.registerEndDateTimeChangeLogger(container); 437 //Required to set the end time based on the default ActivityType selected 438 container.find('[name="activitytype"]').trigger('change'); 439 }, 440 441 registerEvents : function(){ 442 var statusToProceed = this.proceedRegisterEvents(); 443 if(!statusToProceed){ 444 return; 445 } 446 this.registerReminderFieldCheckBox(); 447 this.registerRecurrenceFieldCheckBox(); 448 this.registerFormSubmitEvent(); 449 this.repeatMonthOptionsChangeHandling(); 450 this.registerRecurringTypeChangeEvent(); 451 this.registerRepeatMonthActions(); 452 this.registerRelatedContactSpecificEvents(); 453 this._super(); 454 } 455 });
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 |