[ Index ]

PHP Cross Reference of vtigercrm-6.1.0

title

Body

[close]

/layouts/vlayout/modules/Vtiger/resources/ -> RelatedList.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("Vtiger_RelatedList_Js",{},{
  11      
  12      selectedRelatedTabElement : false,
  13      parentRecordId : false,
  14      parentModuleName : false,
  15      relatedModulename : false,
  16      relatedTabsContainer : false,
  17      detailViewContainer : false,
  18      relatedContentContainer : false,
  19      
  20      setSelectedTabElement : function(tabElement) {
  21          this.selectedRelatedTabElement = tabElement;
  22      },
  23      
  24      getSelectedTabElement : function(){
  25          return this.selectedRelatedTabElement;
  26      },
  27      
  28      getParentId : function(){
  29          return this.parentRecordId;
  30      },
  31      
  32      loadRelatedList : function(params){
  33          var aDeferred = jQuery.Deferred();
  34          var thisInstance = this;
  35          if(typeof this.relatedModulename== "undefined" || this.relatedModulename.length <= 0 ) {
  36              return;
  37          }
  38          var progressIndicatorElement = jQuery.progressIndicator({
  39              'position' : 'html',
  40              'blockInfo' : {
  41                  'enabled' : true
  42              }
  43          });
  44          var completeParams = this.getCompleteParams();
  45          jQuery.extend(completeParams,params);
  46          AppConnector.request(completeParams).then(
  47              function(responseData){
  48                  progressIndicatorElement.progressIndicator({
  49                      'mode' : 'hide'
  50                  })
  51                  thisInstance.relatedTabsContainer.find('li').removeClass('active');
  52                  thisInstance.selectedRelatedTabElement.addClass('active');
  53                  thisInstance.relatedContentContainer.html(responseData);
  54                  responseData = thisInstance.relatedContentContainer.html();
  55                  //thisInstance.triggerDisplayTypeEvent();
  56                  Vtiger_Helper_Js.showHorizontalTopScrollBar();
  57                  jQuery('.pageNumbers',thisInstance.relatedContentContainer).tooltip();
  58                  aDeferred.resolve(responseData);
  59                  jQuery('input[name="currentPageNum"]', thisInstance.relatedContentContainer).val(completeParams.page);
  60                  // Let listeners know about page state change.
  61                  app.notifyPostAjaxReady();
  62              },
  63              
  64              function(textStatus, errorThrown){
  65                  aDeferred.reject(textStatus, errorThrown);
  66              }
  67          );
  68          return aDeferred.promise();
  69      },
  70      
  71      triggerDisplayTypeEvent : function() {
  72          var widthType = app.cacheGet('widthType', 'narrowWidthType');
  73          if(widthType) {
  74              var elements = jQuery('.listViewEntriesTable').find('td,th');
  75              elements.attr('class', widthType);
  76          }
  77      },
  78      
  79      showSelectRelationPopup : function(){
  80          var aDeferred = jQuery.Deferred();
  81          var thisInstance = this;
  82          var popupInstance = Vtiger_Popup_Js.getInstance();
  83          popupInstance.show(this.getPopupParams(), function(responseString){
  84                  var responseData = JSON.parse(responseString);
  85                  var relatedIdList = Object.keys(responseData);
  86                  thisInstance.addRelations(relatedIdList).then(
  87                      function(data){
  88                          var relatedCurrentPage = thisInstance.getCurrentPageNum();
  89                          var params = {'page':relatedCurrentPage};
  90                          thisInstance.loadRelatedList(params).then(function(data){
  91                              aDeferred.resolve(data);
  92                          });
  93                      }
  94                  );
  95              }
  96          );
  97          return aDeferred.promise();
  98      },
  99  
 100      addRelations : function(idList){
 101          var aDeferred = jQuery.Deferred();
 102          var sourceRecordId = this.parentRecordId;
 103          var sourceModuleName = this.parentModuleName;
 104          var relatedModuleName = this.relatedModulename;
 105  
 106          var params = {};
 107          params['mode'] = "addRelation";
 108          params['module'] = sourceModuleName;
 109          params['action'] = 'RelationAjax';
 110          
 111          params['related_module'] = relatedModuleName;
 112          params['src_record'] = sourceRecordId;
 113          params['related_record_list'] = JSON.stringify(idList);
 114  
 115          AppConnector.request(params).then(
 116              function(responseData){
 117                  aDeferred.resolve(responseData);
 118              },
 119  
 120              function(textStatus, errorThrown){
 121                  aDeferred.reject(textStatus, errorThrown);
 122              }
 123          );
 124          return aDeferred.promise();
 125      },
 126  
 127      getPopupParams : function(){
 128          var parameters = {};
 129          var parameters = {
 130              'module' : this.relatedModulename,
 131              'src_module' : this.parentModuleName,
 132              'src_record' : this.parentRecordId,
 133              'multi_select' : true
 134          }
 135          return parameters;
 136      },
 137  
 138      deleteRelation : function(relatedIdList) {
 139          var aDeferred = jQuery.Deferred();
 140          var params = {};
 141          params['mode'] = "deleteRelation";
 142          params['module'] = this.parentModuleName;
 143          params['action'] = 'RelationAjax';
 144  
 145          params['related_module'] = this.relatedModulename;
 146          params['src_record'] = this.parentRecordId;
 147          params['related_record_list'] = JSON.stringify(relatedIdList);
 148  
 149          AppConnector.request(params).then(
 150              function(responseData){
 151                  aDeferred.resolve(responseData);
 152              },
 153  
 154              function(textStatus, errorThrown){
 155                  aDeferred.reject(textStatus, errorThrown);
 156              }
 157          );
 158          return aDeferred.promise();
 159      },
 160  
 161      getCurrentPageNum : function() {
 162          return jQuery('input[name="currentPageNum"]',this.relatedContentContainer).val();
 163      },
 164      
 165      setCurrentPageNumber : function(pageNumber){
 166          jQuery('input[name="currentPageNum"]').val(pageNumber);
 167      },
 168      
 169      /**
 170       * Function to get Order by
 171       */
 172      getOrderBy : function(){
 173          return jQuery('#orderBy').val();
 174      },
 175      
 176      /**
 177       * Function to get Sort Order
 178       */
 179      getSortOrder : function(){
 180              return jQuery("#sortOrder").val();
 181      },
 182      
 183      getCompleteParams : function(){
 184          var params = {};
 185          params['view'] = "Detail";
 186          params['module'] = this.parentModuleName;
 187          params['record'] = this.getParentId(),
 188          params['relatedModule'] = this.relatedModulename,
 189          params['sortorder'] =  this.getSortOrder(),
 190          params['orderby'] =  this.getOrderBy(),
 191          params['page'] = this.getCurrentPageNum();
 192          params['mode'] = "showRelatedList"
 193          
 194          return params;
 195      },
 196      
 197      
 198      /**
 199       * Function to handle Sort
 200       */
 201      sortHandler : function(headerElement){
 202          var aDeferred = jQuery.Deferred();
 203          var fieldName = headerElement.data('fieldname');
 204          var sortOrderVal = headerElement.data('nextsortorderval');
 205          var sortingParams = {
 206              "orderby" : fieldName,
 207              "sortorder" : sortOrderVal,
 208              "tab_label" : this.selectedRelatedTabElement.data('label-key')
 209          }
 210          this.loadRelatedList(sortingParams).then(
 211                  function(data){
 212                      aDeferred.resolve(data);
 213                  },
 214  
 215                  function(textStatus, errorThrown){
 216                      aDeferred.reject(textStatus, errorThrown);
 217                  }
 218              );
 219          return aDeferred.promise();
 220      },
 221      
 222      /**
 223       * Function to handle next page navigation
 224       */
 225      nextPageHandler : function(){
 226          var aDeferred = jQuery.Deferred();
 227          var thisInstance = this;
 228          var pageLimit = jQuery('#pageLimit').val();
 229          var noOfEntries = jQuery('#noOfEntries').val();
 230          if(noOfEntries == pageLimit){
 231              var pageNumber = this.getCurrentPageNum();
 232              var nextPage = parseInt(pageNumber) + 1;
 233              var nextPageParams = {
 234                  'page' : nextPage
 235              }
 236              this.loadRelatedList(nextPageParams).then(
 237                  function(data){
 238                      thisInstance.setCurrentPageNumber(nextPage);
 239                      aDeferred.resolve(data);
 240                  },
 241  
 242                  function(textStatus, errorThrown){
 243                      aDeferred.reject(textStatus, errorThrown);
 244                  }
 245              );
 246          }
 247          return aDeferred.promise();
 248      },
 249      
 250      /**
 251       * Function to handle next page navigation
 252       */
 253      previousPageHandler : function(){
 254          var aDeferred = jQuery.Deferred();
 255          var thisInstance = this;
 256          var aDeferred = jQuery.Deferred();
 257          var pageNumber = this.getCurrentPageNum();
 258          if(pageNumber > 1){
 259              var previousPage = parseInt(pageNumber) - 1;
 260              var previousPageParams = {
 261                  'page' : previousPage
 262              }
 263              this.loadRelatedList(previousPageParams).then(
 264                  function(data){
 265                      thisInstance.setCurrentPageNumber(previousPage);
 266                      aDeferred.resolve(data);
 267                  },
 268  
 269                  function(textStatus, errorThrown){
 270                      aDeferred.reject(textStatus, errorThrown);
 271                  }
 272              );
 273          }
 274          return aDeferred.promise();
 275      },
 276      
 277      /**
 278       * Function to handle page jump in related list
 279       */
 280      pageJumpHandler : function(e){
 281          var aDeferred = jQuery.Deferred();
 282          var thisInstance = this;
 283          if(e.which == 13){
 284              var element = jQuery(e.currentTarget);
 285              var response = Vtiger_WholeNumberGreaterThanZero_Validator_Js.invokeValidation(element);
 286              if(typeof response != "undefined"){
 287                  element.validationEngine('showPrompt',response,'',"topLeft",true);
 288                  e.preventDefault();
 289              } else {
 290                  element.validationEngine('hideAll');
 291                  var jumpToPage = parseInt(element.val());
 292                  var totalPages = parseInt(jQuery('#totalPageCount').text());
 293                  if(jumpToPage > totalPages){
 294                      var error = app.vtranslate('JS_PAGE_NOT_EXIST');
 295                      element.validationEngine('showPrompt',error,'',"topLeft",true);
 296                  }
 297                  var invalidFields = element.parent().find('.formError');
 298                  if(invalidFields.length < 1){
 299                      var currentPage = jQuery('input[name="currentPageNum"]').val();
 300                      if(jumpToPage == currentPage){
 301                          var message = app.vtranslate('JS_YOU_ARE_IN_PAGE_NUMBER')+" "+jumpToPage;
 302                          var params = {
 303                              text: message,
 304                              type: 'info'
 305                          };
 306                          Vtiger_Helper_Js.showMessage(params);
 307                          e.preventDefault();
 308                          return false;
 309                      }
 310                      var jumptoPageParams = {
 311                          'page' : jumpToPage
 312                      }
 313                      this.loadRelatedList(jumptoPageParams).then(
 314                          function(data){
 315                              thisInstance.setCurrentPageNumber(jumpToPage);
 316                              aDeferred.resolve(data);
 317                          },
 318  
 319                          function(textStatus, errorThrown){
 320                              aDeferred.reject(textStatus, errorThrown);
 321                          }
 322                      );
 323                  } else {
 324                      e.preventDefault();
 325                  }
 326              }
 327          }
 328          return aDeferred.promise();
 329      },
 330      /**
 331       * Function to add related record for the module
 332       */
 333      addRelatedRecord : function(element , callback){
 334          var aDeferred = jQuery.Deferred();
 335          var thisInstance = this;
 336          var    referenceModuleName = this.relatedModulename;
 337          var parentId = this.getParentId();
 338          var parentModule = this.parentModuleName;
 339          var quickCreateParams = {};
 340          var relatedParams = {};
 341          var relatedField = element.data('name');
 342          var fullFormUrl = element.data('url');
 343          relatedParams[relatedField] = parentId;
 344          var eliminatedKeys = new Array('view', 'module', 'mode', 'action');
 345          
 346          var preQuickCreateSave = function(data){
 347  
 348              var index,queryParam,queryParamComponents;
 349              
 350              //To handle switch to task tab when click on add task from related list of activities
 351              //As this is leading to events tab intially even clicked on add task
 352              if(typeof fullFormUrl != 'undefined' && fullFormUrl.indexOf('?')!== -1) {
 353                  var urlSplit = fullFormUrl.split('?');
 354                  var queryString = urlSplit[1];
 355                  var queryParameters = queryString.split('&');
 356                  for(index=0; index<queryParameters.length; index++) {
 357                      queryParam = queryParameters[index];
 358                      queryParamComponents = queryParam.split('=');
 359                      if(queryParamComponents[0] == 'mode' && queryParamComponents[1] == 'Calendar'){
 360                          data.find('a[data-tab-name="Task"]').trigger('click');
 361                      }
 362                  }
 363              }
 364              jQuery('<input type="hidden" name="sourceModule" value="'+parentModule+'" />').appendTo(data);
 365              jQuery('<input type="hidden" name="sourceRecord" value="'+parentId+'" />').appendTo(data);
 366              jQuery('<input type="hidden" name="relationOperation" value="true" />').appendTo(data);
 367              
 368              if(typeof relatedField != "undefined"){
 369                  var field = data.find('[name="'+relatedField+'"]');
 370                  //If their is no element with the relatedField name,we are adding hidden element with
 371                  //name as relatedField name,for saving of record with relation to parent record
 372                  if(field.length == 0){
 373                      jQuery('<input type="hidden" name="'+relatedField+'" value="'+parentId+'" />').appendTo(data);
 374                  }
 375              }
 376              for(index=0; index<queryParameters.length; index++) {
 377                  queryParam = queryParameters[index];
 378                  queryParamComponents = queryParam.split('=');
 379                  if(jQuery.inArray(queryParamComponents[0], eliminatedKeys) == '-1' && data.find('[name="'+queryParamComponents[0]+'"]').length == 0) {
 380                      jQuery('<input type="hidden" name="'+queryParamComponents[0]+'" value="'+queryParamComponents[1]+'" />').appendTo(data);
 381                  }
 382              }
 383                          if(typeof callback !== 'undefined') {
 384                              callback();
 385                          }
 386          }
 387          var postQuickCreateSave  = function(data) {
 388              thisInstance.loadRelatedList().then(
 389                  function(data){
 390                      aDeferred.resolve(data);
 391                  })
 392          }
 393          
 394          //If url contains params then seperate them and make them as relatedParams
 395          if(typeof fullFormUrl != 'undefined' && fullFormUrl.indexOf('?')!== -1) {
 396              var urlSplit = fullFormUrl.split('?');
 397              var queryString = urlSplit[1];
 398              var queryParameters = queryString.split('&');
 399              for(var index=0; index<queryParameters.length; index++) {
 400                  var queryParam = queryParameters[index];
 401                  var queryParamComponents = queryParam.split('=');
 402                  if(jQuery.inArray(queryParamComponents[0], eliminatedKeys) == '-1') {
 403                      relatedParams[queryParamComponents[0]] = queryParamComponents[1];
 404                  }
 405              }
 406          }
 407          
 408          quickCreateParams['data'] = relatedParams;
 409          quickCreateParams['callbackFunction'] = postQuickCreateSave;
 410          quickCreateParams['callbackPostShown'] = preQuickCreateSave;
 411          quickCreateParams['noCache'] = true;
 412          var quickCreateNode = jQuery('#quickCreateModules').find('[data-name="'+ referenceModuleName +'"]');
 413          if(quickCreateNode.length <= 0) {
 414              Vtiger_Helper_Js.showPnotify(app.vtranslate('JS_NO_CREATE_OR_NOT_QUICK_CREATE_ENABLED'))
 415          }
 416          quickCreateNode.trigger('click',quickCreateParams);
 417          return aDeferred.promise();
 418      },
 419      
 420      getRelatedPageCount : function(){
 421          var aDeferred = jQuery.Deferred();
 422          var params = {};
 423          params['action'] = "RelationAjax";
 424          params['module'] = this.parentModuleName;
 425          params['record'] = this.getParentId(),
 426          params['relatedModule'] = this.relatedModulename,
 427          params['tab_label'] = this.selectedRelatedTabElement.data('label-key');
 428          params['mode'] = "getRelatedListPageCount"
 429          
 430          var element = jQuery('#totalPageCount');
 431          var totalCountElem = jQuery('#totalCount');
 432          var totalPageNumber = element.text();
 433          if(totalPageNumber == ""){
 434              element.progressIndicator({});
 435              AppConnector.request(params).then(
 436                  function(data) {
 437                      var pageCount = data['result']['page'];
 438                      var numberOfRecords = data['result']['numberOfRecords'];
 439                      totalCountElem.val(numberOfRecords);
 440                      element.text(pageCount);
 441                      element.progressIndicator({'mode': 'hide'});
 442                      aDeferred.resolve();
 443                  },
 444                  function(error,err){
 445  
 446                  }
 447              );
 448          }else{
 449              aDeferred.resolve();
 450          }
 451          return aDeferred.promise();
 452      },
 453      
 454      addFollowupEvent : function(e){
 455              var elem = jQuery(e.currentTarget);
 456              var recordId = elem.closest('tr').data('id');
 457              
 458              var url = 'index.php?module=Calendar&view=QuickCreateFollowupAjax&record='+recordId;
 459              var progressIndicatorInstance = jQuery.progressIndicator({});
 460              AppConnector.request(url).then(
 461                  function(data){
 462                      if(data){
 463                          progressIndicatorInstance.hide();
 464                          app.showModalWindow(data, function(data){
 465                           var createFollowupForm = data.find('form.followupCreateView');
 466                           createFollowupForm.validationEngine(app.validationEngineOptions);
 467                           app.registerEventForTimeFields(createFollowupForm);
 468                           //Form submit
 469                           createFollowupForm.submit(function(event){
 470                               var createButton = jQuery(this).find('button.btn-success');
 471                               createButton.attr('disabled','disabled');
 472                               progressIndicatorInstance = jQuery.progressIndicator({});
 473                               event.preventDefault();
 474                               var result = createFollowupForm.validationEngine('validate');
 475                               if(!result){
 476                                   createButton.removeAttr('disabled');
 477                                   progressIndicatorInstance.hide();
 478                                   return false;
 479                               }
 480                               var moduleName = jQuery(this).find("[name='module']").val();
 481                               var recordId = jQuery(this).find("[name='record']").val();
 482                               var followupStartDate = jQuery(this).find("[name='followup_date_start']").val();
 483                               var followupStartTime = jQuery(this).find("[name='followup_time_start']").val();
 484                               var action = jQuery(this).find("[name='action']").val();
 485                               var mode = jQuery(this).find("[name='mode']").val();
 486                               var defaultCallDuration = jQuery(this).find("[name='defaultCallDuration']").val();
 487                               var defaultOtherEventDuration = jQuery(this).find("[name='defaultOtherEventDuration']").val();
 488                               var params = {
 489                                              module : moduleName,
 490                                              action : action,
 491                                              mode : mode,
 492                                              record : recordId,
 493                                              followup_date_start : followupStartDate,
 494                                              followup_time_start : followupStartTime,
 495                                              defaultCallDuration : defaultCallDuration,
 496                                              defaultOtherEventDuration : defaultOtherEventDuration
 497                                          }
 498                                          AppConnector.request(params).then(function(data){
 499                                              app.hideModalWindow();
 500                                              progressIndicatorInstance.hide();
 501                                              if(data['result'].created){
 502                                                  //Update related listview and pagination
 503                                                  Vtiger_Detail_Js.reloadRelatedList();
 504                                              }
 505                                          });
 506                           });
 507                      });
 508                      }
 509                      else{
 510                          progressIndicatorInstance.hide();
 511                          Vtiger_Helper_Js.showPnotify(app.vtranslate('JS_NO_EDIT_PERMISSION',"Calendar"));
 512                      }
 513                  });
 514      },
 515      
 516      markAsCompleted : function(e){
 517          var elem = jQuery(e.currentTarget);
 518          var recordId = elem.closest('tr').data('id');
 519          var message = app.vtranslate('JS_CONFIRM_MARK_AS_HELD');
 520              Vtiger_Helper_Js.showConfirmationBox({'message' : message}).then(
 521              function(e) {
 522                  var params = {
 523                                  module : "Calendar",
 524                                  action : "SaveFollowupAjax",
 525                                  mode : "markAsHeldCompleted",
 526                                  record : recordId
 527                              }
 528                              AppConnector.request(params).then(function(data){
 529                                  if(data['error']){
 530                                      var param = {text:app.vtranslate('JS_PERMISSION_DENIED')};
 531                                      Vtiger_Helper_Js.showPnotify(param);
 532                                  }
 533                                  else if(data['result'].valid && data['result'].markedascompleted){
 534                                      //Update related listview and pagination
 535                                      Vtiger_Detail_Js.reloadRelatedList();
 536                                      if(data['result'].activitytype == 'Task')
 537                                          var param = {text:app.vtranslate('JS_TODO_MARKED_AS_COMPLETED')};
 538                                      else
 539                                          var param = {text:app.vtranslate('JS_EVENT_MARKED_AS_HELD')};
 540                                      Vtiger_Helper_Js.showMessage(param);
 541                                  }
 542                                  else{
 543                                      var param = {text:app.vtranslate('JS_FUTURE_EVENT_CANNOT_BE_MARKED_AS_HELD')};
 544                                      Vtiger_Helper_Js.showPnotify(param);
 545                                  }
 546                              });
 547              },
 548              function(error, err){
 549                  return false;
 550              });
 551      },
 552  
 553      init : function(parentId, parentModule, selectedRelatedTabElement, relatedModuleName){
 554          this.selectedRelatedTabElement = selectedRelatedTabElement,
 555          this.parentRecordId = parentId;
 556          this.parentModuleName = parentModule;
 557          this.relatedModulename = relatedModuleName;
 558          this.relatedTabsContainer = selectedRelatedTabElement.closest('div.related');
 559          this.detailViewContainer = this.relatedTabsContainer.closest('div.detailViewContainer');
 560          this.relatedContentContainer = jQuery('div.contents',this.detailViewContainer);
 561          Vtiger_Helper_Js.showHorizontalTopScrollBar();
 562      }
 563  })


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