Advertisement
n0system

PBXManagerJS.js

Aug 14th, 2017
432
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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_PBXManager_Js = {
  11.    
  12.     //SalesPlatform.ru begin
  13.     callsPollFunctionId : false,
  14.     //SalesPlatform.ru end
  15.    
  16.    
  17.     /**
  18.      * Function registers PBX for popups
  19.      */
  20.     registerPBXCall : function() {
  21.         Vtiger_PBXManager_Js.requestPBXgetCalls();
  22.     },
  23.      
  24.     /**
  25.      * Function registers PBX for Outbound Call
  26.      */
  27.     registerPBXOutboundCall : function(number,record) {
  28.         Vtiger_PBXManager_Js.makeOutboundCall(number,record);
  29.     },
  30.     /**
  31.      * Function request for PBX popups
  32.      */
  33.     requestPBXgetCalls : function() {
  34.         var url = 'index.php?module=PBXManager&action=IncomingCallPoll&mode=searchIncomingCalls';
  35.         AppConnector.request(url).then(function(data){
  36.             if(data.success && data.result) {
  37.                 for(i=0; i< data.result.length; i++) {
  38.                     var record  = data.result[i];
  39.                     if(jQuery('#pbxcall_'+record.pbxmanagerid+'').size()== 0 )
  40.                         Vtiger_PBXManager_Js.showPBXIncomingCallPopup(record);
  41.                     else
  42.                         Vtiger_PBXManager_Js.updatePBXIncomingCallPopup(record);
  43.                     }
  44.                 }
  45.         });
  46.         Vtiger_PBXManager_Js.removeCompletedCallPopup();
  47.     },
  48.  
  49.     /**
  50.      * Function display the PBX popup
  51.      */
  52.     showPBXIncomingCallPopup : function(record) {
  53.             var params = {
  54.                 title: app.vtranslate('JS_PBX_INCOMING_CALL'),
  55.                 //
  56.                        /* <span><input class="span3" id="firstname_'+record.pbxmanagerid+'" type="text" placeholder="Введите ИМЯ"></input>
  57.                        <input class="span3" id="lastname_'+record.pbxmanagerid+'" type="text" placeholder="Введите ФАМИЛИЮ"></input>
  58.                        &nbsp;&nbsp;&nbsp;<input class="span3" id="description_'+record.pbxmanagerid+'" type="text" placeholder="Введите ОПИСАНИЕ">
  59.                        </input>&nbsp;&nbsp;&nbsp;<input class="span3" id="email_'+record.pbxmanagerid+'" type="text" placeholder="Введите e-mail">
  60.                        </input>&nbsp;&nbsp;&nbsp;<select class="input-small" id="module_'+record.pbxmanagerid+'" placeholder="Select"><option>Leads</option>
  61.                        </select><h5 class="alert-danger hide span3" id="alert_msg">'+app.vtranslate('JS_PBX_FILL_ALL_FIELDS')+'</h5>\n\ */
  62.                 //add RVS              
  63.                 text: '<div class="row-fluid pbxcall" id="pbxcall_'+record.pbxmanagerid+'" callid='+record.pbxmanagerid+' style="color:black"><span class="span12" id="caller" value="'+record.customernumber+'">'+app.vtranslate('JS_PBX_CALL_FROM')+' : '+record.customernumber+'</span><span class="hide span12" id="contactsave_'+record.pbxmanagerid+'"><span><input autofocus class="span3" id="lastname_'+record.pbxmanagerid+'" type="text" placeholder="Введите ФАМИЛИЮ"></input>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input class="span3" id="firstname_'+record.pbxmanagerid+'" type="text" placeholder="Введите ИМЯ"></input>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input class="span3" id="patronymic_'+record.pbxmanagerid+'" type="text" placeholder="Введите ОТЧЕСТВО"></input>\n\n\n\
  64.                          <textarea cols="10" rows="10" input id="description_'+record.pbxmanagerid+'" type="text" placeholder="Введите ОПИСАНИЕ"></textarea>\n\n\
  65.                          <p><b>Выберите статус обращения</b></p>\n\
  66.                          <select id="leadstatus_'+record.pbxmanagerid+'" name="leadstatus"\
  67.                          <option value=""></option>\
  68.                          <option value=""></option>\
  69.                          <option value="Филиал">Филиал</option>\
  70.                          <option value="Заграница">Заграница</option>\
  71.                          <option value="Повторный">Повторный</option>\
  72.                          <option value="Ошибочный">Ошибочный</option>\
  73.                          </select>\n\
  74.                          <select class="hide input-small" id="module_'+record.pbxmanagerid+'" placeholder="Select"><option>Leads</option></select>\n\
  75.                          <button class="btn btn-success pull-centre"  id="pbxcontactsave_'+record.pbxmanagerid+'" recordid="'+record.pbxmanagerid+'" type="submit">' + app.vtranslate('Save') + '</button>\n\
  76.                         </span></span><br/><span class="span12" style="display:none" id="owner">'+app.vtranslate('JS_LBL_ASSIGNED_TO')+'&nbsp;:&nbsp;<span id="ownername"></span></span><br/><span class="span12" style="display:none" id="answeredby"><i class="icon-headphones"></i>&nbsp;<span id="answeredbyname"></span></span></div>',
  77.                 //end RVS
  78.                 //comment RVS
  79.                 //SalesPlatform.ru begin
  80.                 //text: '<div class="row-fluid pbxcall" id="pbxcall_'+record.pbxmanagerid+'" callid='+record.pbxmanagerid+' style="color:black"><span class="span12" id="caller" value="'+record.customernumber+'">'+app.vtranslate('JS_PBX_CALL_FROM')+' : '+record.customernumber+'</span><span class="hide span12" id="contactsave_'+record.pbxmanagerid+'">\n\
  81.                 //        <span><input class="span3" id="email_'+record.pbxmanagerid+'" type="text" placeholder="' + app.vtranslate('Enter Email-id') + '"></input>&nbsp;&nbsp;&nbsp;<select class="input-medium" id="module_'+record.pbxmanagerid+'"><option value="Select" selected>' + app.vtranslate('Select') + '</option></select><h5 class="alert-danger hide span3" id="alert_msg">'+app.vtranslate('JS_PBX_FILL_ALL_FIELDS')+'</h5>\n\
  82.                 //        <button class="btn btn-success pull-right"  id="pbxcontactsave_'+record.pbxmanagerid+'" recordid="'+record.pbxmanagerid+'" type="submit">' + app.vtranslate('Save') + '</button>\n\
  83.                 //        </span></span><br/><span class="span12" style="display:none" id="owner">'+app.vtranslate('JS_LBL_ASSIGNED_TO')+'&nbsp;:&nbsp;<span id="ownername"></span></span><br/><span class="span12" style="display:none" id="answeredby"><i class="icon-headphones"></i>&nbsp;<span id="answeredbyname"></span></span></div>',
  84.                 //end RVS
  85.                 //text: '<div class="row-fluid pbxcall" id="pbxcall_'+record.pbxmanagerid+'" callid='+record.pbxmanagerid+' style="color:black"><span class="span12" id="caller" value="'+record.customernumber+'">'+app.vtranslate('JS_PBX_CALL_FROM')+' : '+record.customernumber+'</span><span class="hide span12" id="contactsave_'+record.pbxmanagerid+'">\n\
  86.                 //        <span><input class="span3" id="email_'+record.pbxmanagerid+'" type="text" placeholder="Enter Email-id"></input>&nbsp;&nbsp;&nbsp;<select class="input-small" id="module_'+record.pbxmanagerid+'" placeholder="Select"><option>Select</option></select><h5 class="alert-danger hide span3" id="alert_msg">'+app.vtranslate('JS_PBX_FILL_ALL_FIELDS')+'</h5>\n\
  87.                 //        <button class="btn btn-success pull-right"  id="pbxcontactsave_'+record.pbxmanagerid+'" recordid="'+record.pbxmanagerid+'" type="submit">Save</button>\n\
  88.                 //        </span></span><br/><span class="span12" style="display:none" id="answeredby"><i class="icon-headphones"></i>&nbsp;<span id="answeredbyname"></span></span></div>',
  89.                 //SalesPlatform.ru end        
  90.                 width: '35%',              
  91.                 //min_height: '75px',          
  92.                 //
  93.                 //width: '75em',
  94.                 min_height: '10em',
  95.                 //
  96.                 addclass:'vtCall',
  97.                 icon: 'vtCall-icon',
  98.                 hide:false,
  99.                 closer:true,
  100.                 type:'info',
  101.                 after_open:function(p) {
  102.                     jQuery(p).data('info', record);
  103.                 }
  104.             };
  105.             Vtiger_Helper_Js.showPnotify(params);
  106.            
  107.             //To remove the popup for all users except answeredby (existing record)
  108.             if(record.user) {
  109.                 if(record.user != record.current_user_id) {
  110.                     Vtiger_PBXManager_Js.removeCallPopup(record.pbxmanagerid);
  111.                 }
  112.             }
  113.                
  114.             // To check if it is new or existing contact
  115.             Vtiger_PBXManager_Js.checkIfRelatedModuleRecordExist(record);
  116.  
  117.             if(record.answeredby!=null){
  118.                 jQuery('#answeredbyname','#pbxcall_'+record.pbxmanagerid+'').text(record.answeredby);
  119.                 jQuery('#answeredby','#pbxcall_'+record.pbxmanagerid+'').show();
  120.             }
  121.            
  122.             jQuery('#pbxcontactsave_'+record.pbxmanagerid+'').bind('click', function(e) {
  123.                 var pbxmanagerid = jQuery(e.currentTarget).attr('recordid');
  124.  
  125.                 if(jQuery('#module_'+pbxmanagerid+'').val() == 'Select'){
  126.                     jQuery('#alert_msg').show();
  127.                     return false;
  128.                 }
  129.                 if(jQuery('#email_'+pbxmanagerid+'').val() == ""){
  130.                     jQuery('#alert_msg').show();
  131.                     return false;
  132.                 }
  133.              
  134.               Vtiger_PBXManager_Js.createRecord(e, record);
  135.              //To restrict the save button action to one click
  136.              jQuery('#pbxcontactsave_'+record.pbxmanagerid+'').unbind('click');
  137.         });
  138.     },
  139.    
  140.     createRecord: function(e, record) {
  141.         var pbxmanagerid = jQuery(e.currentTarget).attr('recordid');
  142.         //add RVS
  143.         var firstname = jQuery('#firstname_'+pbxmanagerid+'').val();
  144.         var lastname = jQuery('#lastname_'+pbxmanagerid+'').val();
  145.         var patronymic = jQuery('#patronymic_'+pbxmanagerid+'').val();
  146.         var description = jQuery('#description_'+pbxmanagerid+'').val();
  147.         var leadstatus = jQuery('#leadstatus_'+pbxmanagerid+'').val();
  148.         var hiddenstatuscall = jQuery('#hiddenstatuscall_'+pbxmanagerid+'').val();
  149.         //end RVS
  150.                
  151.         var email = jQuery('#email_'+pbxmanagerid+'').val();
  152.         var moduleName = jQuery('#module_'+pbxmanagerid+'').val();
  153.  
  154.         var number = jQuery('#caller','#pbxcall_'+pbxmanagerid+'').attr("value");
  155.         //add RVS
  156.         //var url = 'index.php?module=PBXManager&action=IncomingCallPoll&mode=createRecord&number='+encodeURIComponent(number)+'&email='+encodeURIComponent(email)+'&callid='+record.sourceuuid+'&modulename='+moduleName;
  157.         //add RVS
  158.         //var url = 'index.php?module=PBXManager&action=IncomingCallPoll&mode=createRecord&number='+encodeURIComponent(number)+'&firstname='+encodeURIComponent(firstname)+'&lastname='+encodeURIComponent(lastname)+'&patronymic='+encodeURIComponent(patronymic)+'&description='+encodeURIComponent(description)+'&callid='+record.sourceuuid+'&modulename='+moduleName;
  159.         var url = 'index.php?module=PBXManager&action=IncomingCallPoll&mode=createRecord&number='+encodeURIComponent(number)+'&leadstatus='+encodeURIComponent(leadstatus)+'&firstname='+encodeURIComponent(firstname)+'&lastname='+encodeURIComponent(lastname)+'&patronymic='+encodeURIComponent(patronymic)+'&description='+encodeURIComponent(description)+'&hiddenstatuscall='+encodeURIComponent(hiddenstatuscall)+'&callid='+record.sourceuuid+'&modulename='+moduleName;
  160.         //end RVS
  161.          AppConnector.request(url).then(function(data){
  162.             if(data.success && data.result) {
  163.                 jQuery('#contactsave_'+pbxmanagerid+'').hide();
  164.             }
  165.          });
  166.     },
  167.    
  168.     checkIfRelatedModuleRecordExist: function(record) {
  169.         switch(record.callername){
  170.             case null:
  171.                 var url = 'index.php?module=PBXManager&action=IncomingCallPoll&mode=checkModuleViewPermission&view=EditView';
  172.                  AppConnector.request(url).then(function(data){
  173.                     var responsedata = JSON.parse(data);
  174.                      var showSaveOption = false;
  175.                      var moduleList = responsedata.result.modules;
  176.                      var contents = jQuery('#module_'+record.pbxmanagerid+'');
  177.                      var newEle;
  178.                      for(var module in moduleList){
  179.                          if(moduleList.hasOwnProperty(module)) {
  180.                              if(moduleList[module]){
  181.                                 newEle = '<option id="select_'+module+'" value="'+module+'">'+app.vtranslate(module)+'</option>';
  182.                                 contents.append(newEle);
  183.                                 showSaveOption = true;
  184.                              }
  185.                          }
  186.                      }
  187.                      if(responsedata.success && showSaveOption)
  188.                      jQuery('#contactsave_'+record.pbxmanagerid+'').show();
  189.                  });
  190.                 break;
  191.             default:
  192.                 jQuery('#caller','#pbxcall_'+record.pbxmanagerid+'').html(app.vtranslate('JS_PBX_CALL_FROM')+' :&nbsp;<a href="index.php?module='+record.customertype+'&view=Detail&record='+record.customer+'">'+record.callername+'</a>');
  193.                 // SalesPlatform.ru begin
  194.                 jQuery('#ownername','#pbxcall_'+record.pbxmanagerid+'').text(record.ownername);
  195.                 jQuery('#owner','#pbxcall_'+record.pbxmanagerid+'').show();
  196.                 // SalesPlatform.ru end
  197.                 break;
  198.         }
  199.     },
  200.    
  201.      /**
  202.      * Function to update the popup with answeredby, hide contactsave option e.t.c.,
  203.      */
  204.     updatePBXIncomingCallPopup: function(record){
  205.         if(record.answeredby!=null){
  206.                 jQuery('#answeredbyname','#pbxcall_'+record.pbxmanagerid+'').text(record.answeredby);
  207.                 jQuery('#answeredby','#pbxcall_'+record.pbxmanagerid+'').show();
  208.         }
  209.         if(record.customer!=null && record.customer!=''){
  210.             jQuery('#caller','#pbxcall_'+record.pbxmanagerid+'').html(app.vtranslate('JS_PBX_CALL_FROM')+' :&nbsp;<a href="index.php?module='+record.customertype+'&view=Detail&record='+record.customer+'">'+record.callername+'</a>');
  211.             jQuery('#contactsave_'+record.pbxmanagerid+'').hide();
  212.         }
  213.         //To remove the popup for all users except answeredby (new record)
  214.         if(record.user) {
  215.            if(record.user != record.current_user_id) {
  216.                 Vtiger_PBXManager_Js.removeCallPopup(record.pbxmanagerid);
  217.            }
  218.         }
  219.     },
  220.        
  221.      /**
  222.      * Function to remove the call popup which is completed
  223.      */
  224.     removeCompletedCallPopup:function(){
  225.         var callid = null;
  226.         var pbxcall = jQuery('.pbxcall');
  227.         for(var i=0; i<pbxcall.length;i++){
  228.             callid = pbxcall[i].getAttribute('callid');
  229.             var url = 'index.php?module=PBXManager&action=IncomingCallPoll&mode=getCallStatus&callid='+encodeURIComponent(callid)+'';
  230.             AppConnector.request(url).then(function(data){
  231.                 if(data.result){
  232.                     if(data.result!='in-progress' && data.result!='ringing'){
  233.                         setTimeout(function(){
  234.                         Vtiger_PBXManager_Js.removeCallPopup(callid);
  235.                         },30);
  236.                     }
  237.                 }
  238.             });    
  239.         }
  240.     },
  241.  
  242.     /**
  243.      * Function to remove call popup
  244.      */
  245.     removeCallPopup: function(callid) {
  246.         jQuery('#pbxcall_'+callid+'').parent().parent().parent().remove();
  247.     },
  248.  
  249.      /**
  250.      * To get contents holder based on the view
  251.      */
  252.     getContentHolder:function(view){
  253.         if(view == 'List')
  254.             return jQuery('.listViewContentDiv');
  255.         else
  256.             return jQuery('.detailViewContainer');
  257.     },
  258.    
  259.      /**
  260.      * Function to forward call to number
  261.      */
  262.     makeOutboundCall : function(number, record){
  263.         //add RVS
  264.         if (confirm("Позвонить на номер " + number + "?")) {
  265.         //end RVS
  266.         var params = {
  267.             'number' : number,
  268.             'record' : record,
  269.             'module'  : 'PBXManager',
  270.             'action' : 'OutgoingCall'
  271.         }
  272.         AppConnector.request(params).then(function(data){
  273.             if(data.result){
  274.                 params = {
  275.                 'title' :  app.vtranslate('JS_PBX_OUTGOING_SUCCESS'),
  276.                  //add RVS             
  277.                 //'title' : 'Звонок на номер',
  278.                 'text' : number,
  279.                 'type' : 'info',
  280.                 'width' : '300px',
  281.                 'min_height' : '100px',
  282.                 //'addclass' :'vtCall',
  283.                 //'icon' : 'vtCall-icon',
  284.                 //'hide' :true,
  285.                 'closer' :true,
  286.                 //end RVS
  287.                 }
  288.             }else{
  289.                 params = {
  290.                     'text' :  app.vtranslate('JS_PBX_OUTGOING_FAILURE'),
  291.                     'type' : 'error'
  292.                 }
  293.             }
  294.             Vtiger_Helper_Js.showPnotify(params);
  295.         });
  296.         //RVS
  297.         }
  298.         //RVS
  299.     },
  300.    
  301.     //SalesPlatform.ru begin
  302.     registerPollHooks : function() {
  303.         var thisInstance = this;
  304.         $(window).on('blur', function() {
  305.             if(thisInstance.callsPollFunctionId !== false) {
  306.                 console.log("On blur");
  307.                 clearInterval(thisInstance.callsPollFunctionId);
  308.                 thisInstance.callsPollFunctionId = false;
  309.             }
  310.            
  311.         });
  312.  
  313.          $(window).on('focus', function() {
  314.             console.log("On focus");
  315.             if(thisInstance.callsPollFunctionId === false) {
  316.                 Vtiger_PBXManager_Js.registerPBXCall();
  317.                 thisInstance.callsPollFunctionId = setInterval("Vtiger_PBXManager_Js.registerPBXCall()", 4000);
  318.             }
  319.            
  320.         });
  321.     },
  322.     //SalesPlatform.ru end
  323.    
  324.      /**
  325.         * Function to register required events
  326.         */
  327.      registerEvents : function(){
  328.         var thisInstance = this;
  329.         //for polling
  330.         var url = 'index.php?module=PBXManager&action=IncomingCallPoll&mode=checkPermissionForPolling';
  331.         AppConnector.request(url).then(function(data){
  332.             if(data.result) {
  333.                 //SalesPlatform.ru begin
  334.                 if(document.hasFocus()) {
  335.                     console.log("First request popup start");
  336.                     Vtiger_PBXManager_Js.registerPBXCall();
  337.                     thisInstance.callFunctionIntervalId = setInterval("Vtiger_PBXManager_Js.registerPBXCall()", 4000);
  338.                 }
  339.                 thisInstance.registerPollHooks();
  340.                 //Vtiger_PBXManager_Js.registerPBXCall();
  341.                 //setInterval("Vtiger_PBXManager_Js.registerPBXCall()", 3000);
  342.                 //SalesPlatform.ru end
  343.             }
  344.         });
  345.     }
  346.          
  347. }
  348.  
  349. //On Page Load
  350. jQuery(document).ready(function() {
  351.     Vtiger_PBXManager_Js.registerEvents();
  352. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement