- Error When Calling from Spreadsheet, works fine from menu
- var webhookurl = "";
- var jsondata = [];
- function __urlCheck_(str) {
- var v = new RegExp();
- v.compile("^[A-Za-z]+://[A-Za-z0-9-_]+\.[A-Za-z0-9-_%&?/.=]+$");
- if (!v.test(str)) {
- return false;
- }
- return true;
- }
- function __getWebHook_(){
- var newwebhookurl = UserProperties.getProperty('webhookurl_HCR');
- if((newwebhookurl == null || newwebhookurl.length==0) && (webhookurl.length==0 || webhookurl==null)){
- var newwebhookurl = Browser.inputBox("Paste your web hook url here");
- var newwebhookurl = newwebhookurl.replace(/^s*/, '').replace(/s*$/, '');
- if('cancel' == newwebhookurl.toLowerCase()){
- Browser.msgBox('Before this connection will work, you will have to enter a webhook url.');
- }else if(newwebhookurl.length==0 || newwebhookurl == null || __urlCheck_(newwebhookurl) == false){
- Browser.msgBox('Sorry, you must specify a webhook url.');
- __getWebHook_();
- }else{
- UserProperties.setProperty('webhookurl_HCR',newwebhookurl);
- webhookurl = newwebhookurl;
- }
- }else if(webhookurl.length==0 || webhookurl==null){
- webhookurl = newwebhookurl;
- }
- }
- function __ClearWebHook_(){
- UserProperties.setProperty('webhookurl_HCR','');
- webhookurl = '';
- __getWebHook_();
- }
- function onOpen() {
- var ss = SpreadsheetApp.getActiveSpreadsheet();
- var menuEntries = [{name: "Pipeline", functionName: "__PipelineMenu__"},
- {name: "Activity", functionName: "__ActivityMenu__"},
- {name: "Reset WebHook", functionName: "__ClearWebHook_"}
- ];
- ss.addMenu("Heap CRM Reports", menuEntries);
- }
- function onInstall(){
- onOpen();
- }
- function __PipelineMenu__(){
- var mydoc = SpreadsheetApp.getActiveSpreadsheet();
- var myapp = UiApp.createApplication().setTitle('Pipeline');
- var mygrid = myapp.createGrid(5, 2);
- mygrid.setWidget(0, 0, myapp.createLabel('Category:'));
- mygrid.setWidget(0, 1, myapp.createTextBox().setName('category'));
- mygrid.setWidget(1, 0, myapp.createLabel('Label:'));
- mygrid.setWidget(1, 1, myapp.createTextBox().setName('label'));
- mygrid.setWidget(2, 0, myapp.createLabel('User:'));
- mygrid.setWidget(2, 1, myapp.createTextBox().setName('user'));
- mygrid.setWidget(3, 0, myapp.createLabel('Type:'));
- var lbt = myapp.createListBox(false).setName('type');
- lbt.setVisibleItemCount(1);
- lbt.addItem('Lead');
- lbt.addItem('Opportunity');
- lbt.addItem('Customer');
- mygrid.setWidget(3, 1, lbt);
- mygrid.setWidget(4, 0, myapp.createLabel('Kind:'));
- var lbk = myapp.createListBox(false).setName('kind');
- lbk.setVisibleItemCount(1);
- lbk.addItem('Expected Value');
- lbk.addItem('Value');
- lbk.addItem('Count');
- mygrid.setWidget(4, 1, lbk);
- var panel = myapp.createVerticalPanel();
- panel.add(mygrid);
- var button = myapp.createButton('Submit');
- var handler = myapp.createServerClickHandler('__processPipeline');
- handler.addCallbackElement(mygrid);
- button.addClickHandler(handler);
- panel.add(button);
- myapp.add(panel);
- mydoc.show(myapp);
- }
- function __ActivityMenu__(){
- var mydoc = SpreadsheetApp.getActiveSpreadsheet();
- var myapp = UiApp.createApplication().setTitle('Activity');
- var mygrid = myapp.createGrid(7, 2);
- mygrid.setWidget(0, 0, myapp.createLabel('Category:'));
- mygrid.setWidget(0, 1, myapp.createTextBox().setName('category'));
- mygrid.setWidget(1, 0, myapp.createLabel('Label:'));
- mygrid.setWidget(1, 1, myapp.createTextBox().setName('label'));
- mygrid.setWidget(2, 0, myapp.createLabel('User:'));
- mygrid.setWidget(2, 1, myapp.createTextBox().setName('user'));
- mygrid.setWidget(3, 0, myapp.createLabel('Date:'));
- mygrid.setWidget(3, 1, myapp.createDateBox().setId('date'));
- mygrid.setWidget(4, 0, myapp.createLabel('Range:'));
- var lb = myapp.createListBox(false).setName('range');
- lb.setVisibleItemCount(1);
- lb.addItem('Week');
- lb.addItem('Month');
- lb.addItem('Year');
- mygrid.setWidget(4, 1, lb);
- mygrid.setWidget(5, 0, myapp.createLabel('Type:'));
- var lbt = myapp.createListBox(false).setName('type');
- lbt.setVisibleItemCount(1);
- lbt.addItem('Lead');
- lbt.addItem('Opportunity');
- lbt.addItem('Customer');
- mygrid.setWidget(5, 1, lbt);
- mygrid.setWidget(6, 0, myapp.createLabel('Kind:'));
- var lbk = myapp.createListBox(false).setName('kind');
- lbk.setVisibleItemCount(1);
- lbk.addItem('Expected Value');
- lbk.addItem('Value');
- lbk.addItem('Count');
- mygrid.setWidget(6, 1, lbk);
- var panel = myapp.createVerticalPanel();
- panel.add(mygrid);
- var button = myapp.createButton('Submit');
- var handler = myapp.createServerClickHandler('__processActivity');
- handler.addCallbackElement(mygrid);
- button.addClickHandler(handler);
- panel.add(button);
- myapp.add(panel);
- mydoc.show(myapp);
- }
- function __processActivity(inputvalues){
- var category = inputvalues.parameter.category;
- var label = inputvalues.parameter.label;
- var user = inputvalues.parameter.user;
- var date = inputvalues.parameter.date;
- var range = inputvalues.parameter.range;
- var type = inputvalues.parameter.type;
- var kind = inputvalues.parameter.kind;
- var answer = Activity(kind,type,date,range,category,user,'',label);
- var mysheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
- mysheet.getActiveCell().setValue(answer);
- var app = UiApp.getActiveApplication();
- app.close();
- return app;
- }
- function Activity(kind,type,date,range,category,user,mylabel,label){
- var kind = kind || '';
- var type = type || '';
- var category = category || '';
- var user = user || '';
- var mylabel = mylabel || '';
- var label = label || '';
- var range = range || '';
- var date = date || '';
- var data = __getData_('activity ' + kind,category,user,label,mylabel,date,range);
- var type = type.toLowerCase();
- if(type=='lead' && data.hasOwnProperty('lead')==true){
- return data['lead'];
- }else if(type=='customer' && data.hasOwnProperty('customer')==true){
- return data['customer'];
- }else if(type=='opportunity' && data.hasOwnProperty('opportunity')==true){
- return data['opportunity'];
- }else{
- return 0;
- }
- }
- function Pipeline(kind,type,category,user,mylabel,label){
- var kind = kind || '';
- var type = type || '';
- var category = category || '';
- var user = user || '';
- var mylabel = mylabel || '';
- var label = label || '';
- var data = __getData_('pipeline ' + kind,category,user,label,mylabel);
- var type = type.toLowerCase();
- if(type=='lead' && data.hasOwnProperty('lead')==true){
- return data['lead'];
- }else if(type=='customer' && data.hasOwnProperty('customer')==true){
- return data['customer'];
- }else if(type=='opportunity' && data.hasOwnProperty('opportunity')==true){
- return data['opportunity'];
- }else{
- return 0;
- }
- }
- function __processPipeline(inputvalues){
- var category = inputvalues.parameter.category;
- var label = inputvalues.parameter.label;
- var user = inputvalues.parameter.user;
- var type = inputvalues.parameter.type;
- var kind = inputvalues.parameter.kind;
- var answer = Pipeline(kind,type,category,user,'',label);
- var mysheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
- mysheet.getActiveCell().setValue(answer);
- var app = UiApp.getActiveApplication();
- app.close();
- return app;
- }
- function __getData_(mlist,mcategory,muser,label,mlabel,mdate,mrange) {
- var addon = '';
- var mlist = mlist || '';
- var mcategory = mcategory || '';
- var muser = muser || '';
- var label = label || '';
- var mlabel = mlabel || '';
- var mdate = mdate || '';
- var mrange = mrange || '';
- if(mcategory.length>0){
- addon = addon + "&category=" + encodeURIComponent(mcategory);
- }
- if(muser.length>0){
- addon = addon + "&user=" + encodeURIComponent(muser);
- }
- if(mlabel.length>0){
- addon = addon + "&mylabel=" + encodeURIComponent(mlabel);
- }
- if(label.length>0){
- addon = addon + "&label=" + encodeURIComponent(label);
- }
- if(mdate.length>0){
- addon = addon + "&date=" + encodeURIComponent(mdate);
- }
- if(mrange.length>0){
- addon = addon + "&range=" + encodeURIComponent(mrange);
- }
- __getWebHook_();
- if(webhookurl.length==0 || webhookurl == null){
- return [];
- }
- addon = "&list=" + encodeURIComponent(mlist) + addon;
- for(i=0;i<jsondata.length;i++){
- if(jsondata[i]['addon'].toLowerCase() == addon.toLowerCase()){
- return jsondata[i]['json'];
- }
- }
- var url = webhookurl + addon;
- var response = UrlFetchApp.fetch(url);
- if (response.getResponseCode() == 200) {
- var newid = jsondata.length;
- jsondata[newid] = {};
- jsondata[newid].json = Utilities.jsonParse(response.getContentText());
- jsondata[newid].addon = addon.toLowerCase();
- return jsondata[newid].json;
- }
- }