[ Index ]

PHP Cross Reference of vtigercrm-6.1.0

title

Body

[close]

/layouts/vlayout/modules/CustomView/resources/ -> CustomView.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  var Vtiger_CustomView_Js = {
  11  
  12      contentsCotainer : false,
  13      columnListSelect2Element : false,
  14      advanceFilterInstance : false,
  15  
  16      //This will store the columns selection container
  17      columnSelectElement : false,
  18  
  19      //This will store the input hidden selectedColumnsList element
  20      selectedColumnsList : false,
  21  
  22      loadFilterView : function(url) {
  23          var progressIndicatorElement = jQuery.progressIndicator();
  24          AppConnector.request(url).then(
  25              function(data){
  26                  app.hideModalWindow();
  27                  var contents = jQuery(".contentsDiv").html(data);
  28                  progressIndicatorElement.progressIndicator({'mode' : 'hide'});
  29                  Vtiger_CustomView_Js.registerEvents();
  30                  Vtiger_CustomView_Js.advanceFilterInstance = Vtiger_AdvanceFilter_Js.getInstance(jQuery('.filterContainer',contents));
  31              },
  32              function(error,err){
  33  
  34              }
  35          );
  36      },
  37  
  38      loadDateFilterValues : function(){
  39          var selectedDateFilter = jQuery('#standardDateFilter option:selected');
  40          var currentDate = selectedDateFilter.data('currentdate');
  41          var endDate = selectedDateFilter.data('enddate');
  42          jQuery("#standardFilterCurrentDate").val(currentDate);
  43          jQuery("#standardFilterEndDate").val(endDate);
  44      },
  45  
  46      /**
  47       * Function to get the contents container
  48       * @return : jQuery object of contents container
  49       */
  50      getContentsContainer : function() {
  51          if(Vtiger_CustomView_Js.contentsCotainer == false) {
  52              Vtiger_CustomView_Js.contentsCotainer = jQuery('div.contentsDiv');
  53          }
  54          return Vtiger_CustomView_Js.contentsCotainer;
  55      },
  56  
  57      getColumnListSelect2Element : function() {
  58          return Vtiger_CustomView_Js.columnListSelect2Element;
  59      },
  60  
  61      /**
  62       * Function to get the view columns selection element
  63       * @return : jQuery object of view columns selection element
  64       */
  65      getColumnSelectElement : function() {
  66          if(Vtiger_CustomView_Js.columnSelectElement == false) {
  67              Vtiger_CustomView_Js.columnSelectElement = jQuery('#viewColumnsSelect');
  68          }
  69          return Vtiger_CustomView_Js.columnSelectElement;
  70      },
  71  
  72      /**
  73       * Function to get the selected columns list
  74       * @return : jQuery object of selectedColumnsList
  75       */
  76      getSelectedColumnsList : function() {
  77          if(Vtiger_CustomView_Js.selectedColumnsList == false) {
  78              Vtiger_CustomView_Js.selectedColumnsList = jQuery('#selectedColumnsList');
  79          }
  80          return Vtiger_CustomView_Js.selectedColumnsList;
  81      },
  82  
  83      /**
  84       * Function to regiser the event to make the columns list sortable
  85       */
  86      makeColumnListSortable : function() {
  87          var select2Element = Vtiger_CustomView_Js.getColumnListSelect2Element();
  88          //TODO : peform the selection operation in context this might break if you have multi select element in advance filter
  89          //The sorting is only available when Select2 is attached to a hidden input field.
  90          var chozenChoiceElement = select2Element.find('ul.select2-choices');
  91          chozenChoiceElement.sortable({
  92                  'containment': chozenChoiceElement,
  93                  start: function() { Vtiger_CustomView_Js.getSelectedColumnsList().select2("onSortStart"); },
  94                  update: function() { Vtiger_CustomView_Js.getSelectedColumnsList().select2("onSortEnd"); }
  95              });
  96      },
  97  
  98      /**
  99       * Function which will get the selected columns with order preserved
 100       * @return : array of selected values in order
 101       */
 102      getSelectedColumns : function() {
 103          var columnListSelectElement = Vtiger_CustomView_Js.getColumnSelectElement();
 104          var select2Element = Vtiger_CustomView_Js.getColumnListSelect2Element();
 105  
 106          var selectedValuesByOrder = new Array();
 107          var selectedOptions = columnListSelectElement.find('option:selected');
 108  
 109          var orderedSelect2Options = select2Element.find('li.select2-search-choice').find('div');
 110          orderedSelect2Options.each(function(index,element){
 111              var chosenOption = jQuery(element);
 112              selectedOptions.each(function(optionIndex, domOption){
 113                  var option = jQuery(domOption);
 114                  if(option.html() == chosenOption.html()) {
 115                      selectedValuesByOrder.push(option.val());
 116                      return false;
 117                  }
 118              });
 119          });
 120          return selectedValuesByOrder;
 121      },
 122  
 123      /**
 124       * Function which will arrange the chosen element choices in order
 125       */
 126      arrangeSelectChoicesInOrder : function() {
 127          var contentsContainer = Vtiger_CustomView_Js.getContentsContainer();
 128          var chosenElement = Vtiger_CustomView_Js.getColumnListSelect2Element();
 129          var choicesContainer = chosenElement.find('ul.select2-choices');
 130          var choicesList = choicesContainer.find('li.select2-search-choice');
 131          var coulmnListSelectElement = Vtiger_CustomView_Js.getColumnSelectElement();
 132          var selectedOptions = coulmnListSelectElement.find('option:selected');
 133          var selectedOrder = JSON.parse(jQuery('input[name="columnslist"]', contentsContainer).val());
 134  
 135          for(var index=selectedOrder.length ; index > 0 ; index--) {
 136              var selectedValue = selectedOrder[index-1];
 137              var option = selectedOptions.filter('[value="'+selectedValue+'"]');
 138              choicesList.each(function(choiceListIndex,element){
 139                  var liElement = jQuery(element);
 140                  if(liElement.find('div').html() == option.html()){
 141                      choicesContainer.prepend(liElement);
 142                      return false;
 143                  }
 144              });
 145          }
 146      },
 147  
 148      saveFilter : function() {
 149          var aDeferred = jQuery.Deferred();
 150          var formElement = jQuery("#CustomView");
 151          var formData = formElement.serializeFormData();
 152  
 153          var progressIndicatorInstance = jQuery.progressIndicator({
 154              'blockInfo' : {
 155                  'enabled' : true
 156              }
 157          });
 158  
 159          AppConnector.request(formData).then(
 160              function(data){
 161                  progressIndicatorInstance.progressIndicator({
 162                      'mode' : 'hide'
 163                  })
 164                  aDeferred.resolve(data);
 165              },
 166              function(error){
 167                  progressIndicatorInstance.progressIndicator({
 168                      'mode' : 'hide'
 169                  })
 170                  aDeferred.reject(error);
 171              }
 172          )
 173          return aDeferred.promise();
 174      },
 175  
 176      saveAndViewFilter : function(){
 177          Vtiger_CustomView_Js.saveFilter().then(
 178              function(response){
 179                  if (response.success) {
 180                      var url = response['result']['listviewurl'];
 181                      window.location.href=url;
 182                  } else {
 183                      var params = {
 184                          title: app.vtranslate('JS_DUPLICATE_RECORD'),
 185                          text: response.error['message']
 186                      };
 187                      Vtiger_Helper_Js.showPnotify(params);
 188                  }
 189              },
 190              function(error) {
 191  
 192              }
 193          );
 194      },
 195  
 196      /**
 197       * Function which will register the select2 elements for columns selection
 198       */
 199      registerSelect2ElementForColumnsSelection : function() {
 200          var selectElement = Vtiger_CustomView_Js.getColumnSelectElement();
 201          app.changeSelectElementView(selectElement, 'select2', {maximumSelectionSize: 12,dropdownCss : {'z-index' : 0}});
 202      },
 203  
 204      registerEvents: function(){
 205          Vtiger_CustomView_Js.registerSelect2ElementForColumnsSelection();
 206          var contentsContainer = Vtiger_CustomView_Js.getContentsContainer();
 207          jQuery('.stndrdFilterDateSelect').datepicker();
 208          jQuery('.chzn-select').chosen();
 209  
 210          var select2Element = app.getSelect2ElementFromSelect(Vtiger_CustomView_Js.getColumnSelectElement());
 211          Vtiger_CustomView_Js.columnListSelect2Element = select2Element;
 212  
 213          //To arrange the chosen choices in the order that is selected
 214          Vtiger_CustomView_Js.arrangeSelectChoicesInOrder();
 215  
 216          jQuery("#standardDateFilter").change(function(){
 217              Vtiger_CustomView_Js.loadDateFilterValues();
 218          });
 219  
 220          Vtiger_CustomView_Js.makeColumnListSortable();
 221  
 222          jQuery("#CustomView").submit(function(e) {
 223              var selectElement = Vtiger_CustomView_Js.getColumnSelectElement();
 224              var select2Element = app.getSelect2ElementFromSelect(selectElement);
 225              var result = Vtiger_MultiSelect_Validator_Js.invokeValidation(selectElement);
 226              if(result != true){
 227                  select2Element.validationEngine('showPrompt', result , 'error','bottomLeft',true);
 228                  e.preventDefault();
 229                  return;
 230              } else {
 231                  select2Element.validationEngine('hide');
 232              }
 233              if(jQuery('#viewname').val().length > 40) {
 234                  var params = {
 235                      title : app.vtranslate('JS_MESSAGE'),
 236                      text : app.vtranslate('JS_VIEWNAME_ALERT')
 237                  }
 238                  Vtiger_Helper_Js.showPnotify(params);
 239                  e.preventDefault();
 240                  return;
 241              }
 242  
 243              //Mandatory Fields selection validation
 244              //Any one Mandatory Field should select while creating custom view.
 245              var mandatoryFieldsList = JSON.parse(jQuery('#mandatoryFieldsList').val());
 246              var selectedOptions = selectElement.val();
 247              var mandatoryFieldsMissing = true;
 248              for(var i=0; i<selectedOptions.length; i++) {
 249                  if(jQuery.inArray(selectedOptions[i], mandatoryFieldsList) >= 0) {
 250                      mandatoryFieldsMissing = false;
 251                      break;
 252                  }
 253              }
 254              if(mandatoryFieldsMissing){
 255                  var result = app.vtranslate('JS_PLEASE_SELECT_ATLEAST_ONE_MANDATORY_FIELD');
 256                  select2Element.validationEngine('showPrompt', result , 'error','bottomLeft',true);
 257                  e.preventDefault();
 258                  return;
 259              } else {
 260                  select2Element.validationEngine('hide');
 261              }
 262              //Mandatory Fields validation ends
 263  
 264              var result = jQuery(e.currentTarget).validationEngine('validate');
 265              if(result == true){
 266                  //handled standard filters saved values.
 267                  var stdfilterlist = {};
 268  
 269                  if((jQuery('#standardFilterCurrentDate').val() != '') && (jQuery('#standardFilterEndDate').val()!= '') && (jQuery('select.standardFilterColumn option:selected').val() != 'none')){
 270                      stdfilterlist['columnname'] = jQuery('select.standardFilterColumn option:selected').val();
 271                      stdfilterlist['stdfilter'] = jQuery('select#standardDateFilter option:selected').val();
 272                      stdfilterlist['startdate'] = jQuery('#standardFilterCurrentDate').val();
 273                      stdfilterlist['enddate'] = jQuery('#standardFilterEndDate').val();
 274                      jQuery('#stdfilterlist').val(JSON.stringify(stdfilterlist));
 275                  }
 276  
 277                  //handled advanced filters saved values.
 278                  var advfilterlist = Vtiger_CustomView_Js.advanceFilterInstance.getValues();
 279                  jQuery('#advfilterlist').val(JSON.stringify(advfilterlist));
 280                  jQuery('input[name="columnslist"]', contentsContainer).val(JSON.stringify(Vtiger_CustomView_Js.getSelectedColumns()));
 281                  Vtiger_CustomView_Js.saveAndViewFilter();
 282                  return false;
 283              } else {
 284                  app.formAlignmentAfterValidation(jQuery(e.currentTarget));
 285              }
 286          });
 287  
 288          jQuery('#CustomView').validationEngine(app.validationEngineOptions);
 289      }
 290  }


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