[ Index ]

PHP Cross Reference of vtigercrm-6.1.0

title

Body

[close]

/layouts/vlayout/modules/Calendar/resources/ -> Edit.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  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  });


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