Walmart notes. Zenjob Assignment Script backed up. Reorged some directories.
This commit is contained in:
1
Scripts/GAS_NP/AE_Reminders/.clasp.json
Normal file
1
Scripts/GAS_NP/AE_Reminders/.clasp.json
Normal file
@ -0,0 +1 @@
|
||||
{"scriptId":"1TJplbGBnAl-BN8Kuw5jrC3b8LHCSmkrZUvG_KDMTgwQBfESlWL2lDJd4","rootDir":"/Users/normrasmussen/Documents/Northpass/Google_Scripts/AE_Reminders"}
|
||||
217
Scripts/GAS_NP/AE_Reminders/AEMissedMeetingData.js
Normal file
217
Scripts/GAS_NP/AE_Reminders/AEMissedMeetingData.js
Normal file
@ -0,0 +1,217 @@
|
||||
/*
|
||||
This script sends a daily reminder to the Sales and Marketing channel as to which
|
||||
lines of data are unclean and not filled out. Currently, it is only pulling from the last 5 days.
|
||||
This will be sent out between 3-4pm so that AEs can get their data in and clean before EOD.
|
||||
Any questions or changes needed, see Norm.
|
||||
Webhook URL in this sheet is for #sales-n-marketing channel.
|
||||
*/
|
||||
// Setup of the sheet
|
||||
const sheet = SpreadsheetApp.getActiveSheet();
|
||||
|
||||
// Setup of the date range to compare. Currently, it is using 5 days until Present.
|
||||
var now = new Date();
|
||||
var formatNow = Utilities.formatDate(now, 'America/New_York', 'MM/dd/yyyy'); // Today
|
||||
var daysToSubtract = 2;
|
||||
var withinWeek = new Date(now.getTime()-daysToSubtract*(3600*24*1000));
|
||||
var formatWeek = Utilities.formatDate(withinWeek, 'America/New_York', 'MM/dd/yyyy'); // 5 Days ago
|
||||
|
||||
// Counter for formatting the final list
|
||||
var meetingCount = 0;
|
||||
|
||||
// Other empty Globals
|
||||
var finalAEList;
|
||||
var tagUsers;
|
||||
|
||||
/*
|
||||
This function will create two empty arrays, one for the list of missed entries and one for tagging users in Slack
|
||||
First, the function gets the data ranges in spreadsheed and adds those columns to an array index.
|
||||
Second, the for loop cycles through the super long array (4 results per line). Based on the if statement,
|
||||
the loop removes all arrays that don't fit the statement.
|
||||
*/
|
||||
function findMeetings() { // Setting up data range and empty arrays
|
||||
var startRow = 2; // First row of data to process
|
||||
var numRows = sheet.getLastRow()-1; // Number of rows to process
|
||||
var dataRange = sheet.getRange(startRow, 1, numRows, sheet.getLastColumn());
|
||||
var data = dataRange.getValues();
|
||||
var slackingAEListOne = [];
|
||||
var tagList = [];
|
||||
|
||||
for (i in data) { // For a data row within the entire data range
|
||||
var row = data[i];
|
||||
let attended = row[6]; // Column G
|
||||
var name = row[1]; // Column - B
|
||||
var date = Utilities.formatDate(row[3],'America/New_York','MM/dd/yyyy'); // Column - D
|
||||
var company = row[4]; // Column - E
|
||||
let missedEntries = [name, date, company, attended];
|
||||
/*
|
||||
Adding a For Loop will pull a result for EACH element, aka 4 results per line.
|
||||
This pulls one for each group of missedEntries
|
||||
This then removes the last value (attended, since we already know it is a blank), converts to a string,
|
||||
and adds to a new array. The counter will compare if there is more than one entry in the array.
|
||||
*/
|
||||
if ((missedEntries[3] == "") && (missedEntries[1] >= formatWeek) && (missedEntries[1] <= formatNow)) {
|
||||
meetingCount += 1;
|
||||
missedEntries.pop();
|
||||
missedEntries.toString();
|
||||
slackingAEListOne.push(missedEntries);
|
||||
//Logger.log(slackingAEListOne);
|
||||
};
|
||||
};
|
||||
/* Now outside of the if statement:
|
||||
the array is built, and we want each group to be on a new line, remove the commas and add a hyphen.
|
||||
The counter counts if there is 1 or more meetings, or not. If 0, it sends a certain message, not tagging anyone.
|
||||
If it is one or more, it splices by the first array (index 0), adds a new line, and replaces commans with hyphens.
|
||||
*/
|
||||
if (meetingCount >= 1) {
|
||||
var slackingAEListTwo = slackingAEListOne.splice(0).join('\n');
|
||||
var finalAEList = slackingAEListTwo.replace(/,/g, ' - ');
|
||||
// This if statement is going to only tag those who appear in the previous list.
|
||||
// No need to tag people who have done their work and contribute to clean data.
|
||||
if (finalAEList.includes('Norm')) {
|
||||
tagList.push('<@U020KRBDSDQ>');
|
||||
}
|
||||
if (finalAEList.includes('Dan')) {
|
||||
tagList.push('<@U01P7DTFSQZ>');
|
||||
}
|
||||
if (finalAEList.includes('Charles')) {
|
||||
tagList.push('<@U01286MQUS2>');
|
||||
}
|
||||
if (finalAEList.includes('Travis')) {
|
||||
tagList.push('<@UFE3T14UX>');
|
||||
}
|
||||
if (finalAEList.includes('Nick')) {
|
||||
tagList.push('<@U0276LMA70F>');
|
||||
}
|
||||
if (finalAEList.includes('Mike')) {
|
||||
tagList.push('<@U027MAQUPM0>');
|
||||
}
|
||||
if (finalAEList.includes('Doug')) {
|
||||
tagList.push('<@U02CK55FHFX>');
|
||||
}
|
||||
if (finalAEList.includes('Isabel')) {
|
||||
tagList.push('<@U03019S7R6F>');
|
||||
}
|
||||
if (finalAEList.includes('Ryan')) {
|
||||
tagList.push('<@U0325CWA3N3>');
|
||||
}
|
||||
var tagUsers = tagList.toString();
|
||||
/*
|
||||
Now, we're building the payload for the Slack Message.
|
||||
This is very specific and prone to errors, so check that it works using Slack's tool:
|
||||
https://app.slack.com/block-kit-builder/
|
||||
|
||||
Copy from Rich:
|
||||
":rotating_light::rotating_light::rotating_light: New Meeting Tracker Alert! :rotating_light::rotating_light::rotating_light:
|
||||
It's your daily reminder to update the new meeting tracker.
|
||||
If you've been tagged, please address this by EOD."
|
||||
*/
|
||||
let payloadText =
|
||||
{
|
||||
"blocks": [
|
||||
{
|
||||
"type": "section",
|
||||
"text": {
|
||||
"type": "mrkdwn",
|
||||
"text": ":rotating_light::rotating_light::rotating_light: New Meeting Tracker Alert! :rotating_light::rotating_light::rotating_light:"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "section",
|
||||
"text": {
|
||||
"type": "mrkdwn",
|
||||
"text": "It's your daily reminder to update the new meeting tracker."
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "section",
|
||||
"text": {
|
||||
"type": "mrkdwn",
|
||||
"text": "If you've been tagged, please address this by EOD."
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "section",
|
||||
"text": {
|
||||
"type": "mrkdwn",
|
||||
"text": finalAEList // Sends list with AE, meeting date, and company
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "section",
|
||||
"text": {
|
||||
"type": "mrkdwn",
|
||||
"text": "In case you need it, here's a link to the sheet. :point_right:"
|
||||
},
|
||||
"accessory": {
|
||||
"type": "button",
|
||||
"text": {
|
||||
"type": "plain_text",
|
||||
"text": "Sales New Meeting Tracker",
|
||||
"emoji": true
|
||||
},
|
||||
"value": "sales_tracker_link_123",
|
||||
"url": "https://docs.google.com/spreadsheets/d/150nSuHQLJHpJaYdQ6KHeN7nQ6iexwtnQEpicM77PK8A/edit#gid=0 | First Meeting Tracker",
|
||||
"action_id": "button-action"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "divider"
|
||||
},
|
||||
{
|
||||
"type": "section",
|
||||
"text": {
|
||||
"type": "mrkdwn",
|
||||
"text": tagUsers // Tags with slack user numbers if they appear in finalSend
|
||||
}
|
||||
}
|
||||
]
|
||||
};
|
||||
// This is standard operating procedure to creating the payload and destination
|
||||
const webhook = "https://hooks.slack.com/services/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";
|
||||
const options = {
|
||||
method: "post",
|
||||
contentType: "application/json",
|
||||
muteHttpExceptions: true,
|
||||
payload: JSON.stringify(payloadText),
|
||||
};
|
||||
const sendMsg = UrlFetchApp.fetch(webhook, options);
|
||||
var respCode = sendMsg.getResponseCode();
|
||||
//Logger.log(sendMsg); // Debug to confirm send
|
||||
//Logger.log(respCode); // Debug to show errors, if any
|
||||
/*
|
||||
This is the else statement that sends a certain message not tagging anyone and saying that data is clean.
|
||||
*/
|
||||
} else {
|
||||
let noMeetingMsg =
|
||||
{
|
||||
"blocks": [
|
||||
{
|
||||
"type": "section",
|
||||
"text": {
|
||||
"type": "mrkdwn",
|
||||
"text": ":star::star::star: New Meeting Tracker Alert! :star::star::star:"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "section",
|
||||
"text": {
|
||||
"type": "mrkdwn",
|
||||
"text": "Good job, everyone! All meetings from the last 5 days are up to date. Keep doing what you're doing!"
|
||||
}
|
||||
}
|
||||
]
|
||||
};
|
||||
// This is standard operating procedure to creating the payload and destination
|
||||
const webhook = "https://hooks.slack.com/services/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";
|
||||
const options = {
|
||||
method: "post",
|
||||
contentType: "application/json",
|
||||
muteHttpExceptions: true,
|
||||
payload: JSON.stringify(noMeetingMsg),
|
||||
};
|
||||
const sendMsg = UrlFetchApp.fetch(webhook, options);
|
||||
var respCode = sendMsg.getResponseCode();
|
||||
//Logger.log(sendMsg); // Debug to confirm send
|
||||
//Logger.log(respCode); // Debug to show errors, if any
|
||||
}
|
||||
};
|
||||
7
Scripts/GAS_NP/AE_Reminders/appsscript.json
Normal file
7
Scripts/GAS_NP/AE_Reminders/appsscript.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"timeZone": "America/New_York",
|
||||
"dependencies": {
|
||||
},
|
||||
"exceptionLogging": "STACKDRIVER",
|
||||
"runtimeVersion": "V8"
|
||||
}
|
||||
1
Scripts/GAS_NP/Artera_wowprog/.clasp.json
Normal file
1
Scripts/GAS_NP/Artera_wowprog/.clasp.json
Normal file
@ -0,0 +1 @@
|
||||
{"scriptId":"1Pl974LOqn-gSiO4sbjIteQCSyxhmVxgKGsld7qiwxfwANfEEgmGgsMGj","rootDir":"/Users/normrasmussen/Documents/Northpass/Scripts/GoogleScripts/Artera_wowprog"}
|
||||
12
Scripts/GAS_NP/Artera_wowprog/AddAvgFormula.js
Normal file
12
Scripts/GAS_NP/Artera_wowprog/AddAvgFormula.js
Normal file
@ -0,0 +1,12 @@
|
||||
var now = new Date();
|
||||
var today = Utilities.formatDate(now, 'America/New_York', 'MM/dd/yyyy');
|
||||
const writeSheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheets()[1];
|
||||
|
||||
function formulaAverage() {
|
||||
// Write the new Column Headings
|
||||
var lastColumn = writeSheet2.getLastColumn();
|
||||
var lastRow = writeSheet2.getLastRow();
|
||||
var letterColumn = writeSheet2.getRange(3, lastColumn,lastRow-3,1).getA1Notation();
|
||||
var numRows = writeSheet2.getLastRow();
|
||||
writeSheet2.getRange(numRows, lastColumn).setFormula("=AVERAGE("+ letterColumn +")");
|
||||
}
|
||||
72
Scripts/GAS_NP/Artera_wowprog/CourseProgressWeekly.js
Normal file
72
Scripts/GAS_NP/Artera_wowprog/CourseProgressWeekly.js
Normal file
@ -0,0 +1,72 @@
|
||||
var now = new Date();
|
||||
var today = Utilities.formatDate(now, 'America/New_York', 'MM/dd/yyyy');
|
||||
const readSheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
|
||||
const writeSheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[1];
|
||||
|
||||
// This function needs to happen every time the script runs.
|
||||
function writeHeadings() {
|
||||
// Write the new Column Headings
|
||||
var lastColumn = writeSheet.getLastColumn()+1;
|
||||
var lastRow = writeSheet.getLastRow();
|
||||
writeSheet.getRange(1, lastColumn).setValue("Percent Change");
|
||||
writeSheet.getRange(1, lastColumn+1).setValue("Progress");
|
||||
writeSheet.getRange(2, lastColumn+1).setValue(today);
|
||||
addProgress(lastColumn);
|
||||
}
|
||||
|
||||
// This function takes the progress from Column D of Sheet0 and adds it to Sheet1
|
||||
function addProgress(lastColumn, prevColumn) {
|
||||
// Process Data from Sheet0
|
||||
var numRows = readSheet.getLastRow()-1; // Number of rows to process
|
||||
var dataRange = readSheet.getRange(2, 2, numRows, 3);
|
||||
// Process First Row from Sheet1
|
||||
// var numRows = writeSheet.getLastRow()-1; // Number of rows to process
|
||||
// var dataRange = writeSheet.getRange(3, 1, numRows, 1);
|
||||
var values = dataRange.getValues();
|
||||
|
||||
for (item in values) {
|
||||
var row = values[item];
|
||||
var course= row[0];
|
||||
var avgProgress = row [2];
|
||||
findRow(course, avgProgress, lastColumn);
|
||||
}
|
||||
}
|
||||
|
||||
function findRow(course, avgProgress, lastColumn) {
|
||||
var prevColumn = writeSheet.getLastColumn()-2;
|
||||
var numRows = writeSheet.getLastRow();
|
||||
var data = writeSheet.getRange(3,1,numRows,1).getValues();
|
||||
var progArray = [];
|
||||
progArray.push(avgProgress);
|
||||
for(var i = 0; i<data.length;i++){
|
||||
if(data[i][0] == course){
|
||||
var row = i+3;
|
||||
var prevVal = writeSheet.getRange(row, prevColumn).getValues();
|
||||
writeSheet.getRange(row, lastColumn+1).clearFormat();
|
||||
writeSheet.getRange(row, lastColumn).clearFormat();
|
||||
writeSheet.getRange(row, lastColumn+1).setValue(avgProgress);
|
||||
writeSheet.getRange(row, lastColumn).setValue(percentDiff(prevVal, avgProgress));
|
||||
}
|
||||
}
|
||||
// writeSheet.getRange(numRows, 1).setValue("Average Progress across all Courses");
|
||||
// writeSheet.getRange(numRows, lastColumn+1).setValue(formulaAverage);
|
||||
}
|
||||
|
||||
function percentDiff(prevVal, avgProgress){
|
||||
var prevVal = prevVal-0
|
||||
var avgProgress = avgProgress-0
|
||||
var percentChange = percentChange-0
|
||||
// This block will NOT show negative changes. So if a number decreases from one week to the next, it will still show a POSITIVE % change.
|
||||
// var percentChange =
|
||||
// (
|
||||
// (Math.abs(prevVal-avgProgress))/((prevVal+avgProgress)/2)
|
||||
// )
|
||||
// return percentChange
|
||||
|
||||
// Business Math! This will show negativos.
|
||||
var percentChange =
|
||||
(
|
||||
(avgProgress-prevVal)/(prevVal)
|
||||
)
|
||||
return percentChange
|
||||
}
|
||||
7
Scripts/GAS_NP/Artera_wowprog/appsscript.json
Normal file
7
Scripts/GAS_NP/Artera_wowprog/appsscript.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"timeZone": "America/New_York",
|
||||
"dependencies": {
|
||||
},
|
||||
"exceptionLogging": "STACKDRIVER",
|
||||
"runtimeVersion": "V8"
|
||||
}
|
||||
1
Scripts/GAS_NP/Confluence_Test/.clasp.json
Normal file
1
Scripts/GAS_NP/Confluence_Test/.clasp.json
Normal file
@ -0,0 +1 @@
|
||||
{"scriptId":"1ZUQXaSRZHjVpzJBBFuHdfnLijMJ5jf3swTbonwXJ3nrgeMIh9ffCqe7j","rootDir":"/Users/normrasmussen/Documents/Work/Scripts/GoogleScripts/Confluence_Test"}
|
||||
18
Scripts/GAS_NP/Confluence_Test/ConfGet.js
Normal file
18
Scripts/GAS_NP/Confluence_Test/ConfGet.js
Normal file
@ -0,0 +1,18 @@
|
||||
function getPages() {
|
||||
var url = 'https://northpass.atlassian.net/wiki/rest/api/content';
|
||||
const settings = {
|
||||
//async: true,
|
||||
//crossDomain: true,
|
||||
method: 'get',
|
||||
headers: {
|
||||
"Accept": "application/json",
|
||||
"X-Atlassian-Token": "no-check",
|
||||
"Content-Type": "application/json",
|
||||
"Authorization": "Basic bnJhc211c3NlbkBub3J0aHBhc3MuY29tOkFUQVRUM3hGZkdGMFFaVW9tQzFzM2h2RDRIaXFoX3VzT1ZGQVZMc1QxbjhsdDZnekQ3d2ZMOEQ4eDVuZXIzU0UyNEpENEU1OTB4b1Q5UEtQSWkxRXBwYW54MTJxNUFMek1IS2NlLUtyY0laUlQyM0J2TzhNRFh3eXZiekFPMlI0aEFMYzhaVVRJXzgtT00teDlvX3RqYkNITHhFTUZPcjZRRkRZcHJ3ZEhHWmpBeHB2aVN3WHJDUT0yMThBQzQzOA=="
|
||||
},
|
||||
};
|
||||
|
||||
const sendData = UrlFetchApp.fetch(url, settings);
|
||||
var response = sendData.getContentText();
|
||||
Logger.log(response);
|
||||
}
|
||||
7
Scripts/GAS_NP/Confluence_Test/appsscript.json
Normal file
7
Scripts/GAS_NP/Confluence_Test/appsscript.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"timeZone": "America/New_York",
|
||||
"dependencies": {
|
||||
},
|
||||
"exceptionLogging": "STACKDRIVER",
|
||||
"runtimeVersion": "V8"
|
||||
}
|
||||
1
Scripts/GAS_NP/Courtney_Confluence/.clasp.json
Normal file
1
Scripts/GAS_NP/Courtney_Confluence/.clasp.json
Normal file
@ -0,0 +1 @@
|
||||
{"scriptId":"1TM7cFM57LKm9BoB21N9sCD7j_KDy9z1zrqGDXV8clcwXVwgOKJBpz_0J","rootDir":"/Users/normrasmussen/Documents/Work/Scripts/GoogleScripts/Courtney_Confluence"}
|
||||
40
Scripts/GAS_NP/Courtney_Confluence/Adv.js
Normal file
40
Scripts/GAS_NP/Courtney_Confluence/Adv.js
Normal file
@ -0,0 +1,40 @@
|
||||
/**
|
||||
* Test harness to demonstrate getting named styles from the Advanced Docs Service
|
||||
*/
|
||||
function getStylesTestHarness() {
|
||||
// Get the current document
|
||||
var doc = DocumentApp.getActiveDocument()
|
||||
|
||||
// https://developers.google.com/apps-script/reference/document/paragraph-heading
|
||||
var namedStyleType = DocumentApp.ParagraphHeading.HEADING2;
|
||||
getStyles_(doc.getId(), namedStyleType);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get named styles from the Advanced Docs Service
|
||||
* Assumes that heading text is unique, which it should be with date stamp
|
||||
* @param {string} documentId
|
||||
* @param {string} styleType https://developers.google.com/apps-script/reference/document/paragraph-heading
|
||||
* @private
|
||||
*/
|
||||
function getStyles_(documentId, styleType) {
|
||||
|
||||
var namedStyleArr;
|
||||
var namedStyleObj;
|
||||
var appsScriptNamedStyle;
|
||||
|
||||
// Get the corresponding document from the Advanced Docs Service
|
||||
var document = Docs.Documents.get(documentId);
|
||||
var namedStyleArr = document.namedStyles.styles;
|
||||
|
||||
for (var i=namedStyleArr.length;i--;) {
|
||||
namedStyleObj = namedStyleArr[i];
|
||||
// convert from Advanced Docs Service style names which have separating underscores
|
||||
appsScriptNamedStyle = namedStyleObj.namedStyleType.split('_').join('');
|
||||
if (appsScriptNamedStyle == styleType) {
|
||||
console.log('namedStyleType '+namedStyleObj.namedStyleType);
|
||||
console.log('textStyle '+JSON.stringify(namedStyleObj.textStyle));
|
||||
console.log('paragraphStyle '+JSON.stringify(namedStyleObj.paragraphStyle));
|
||||
}
|
||||
}
|
||||
}
|
||||
29
Scripts/GAS_NP/Courtney_Confluence/Confluence.js
Normal file
29
Scripts/GAS_NP/Courtney_Confluence/Confluence.js
Normal file
@ -0,0 +1,29 @@
|
||||
function uploadToConfluence() {
|
||||
var doc = DocumentApp.getActiveDocument();
|
||||
var body = doc.getText();
|
||||
var company = doc.getName();
|
||||
//Logger.log(typeof body);
|
||||
//Logger.log(typeof company)
|
||||
|
||||
var url = 'https://northpass.atlassian.net/wiki/rest/api/content';
|
||||
const payload = JSON.stringify({
|
||||
"type": "page",
|
||||
"title": company,
|
||||
"status": "current",
|
||||
"ancestors": [{"id": 2210463745}],
|
||||
"space": {"key": "~350535240"},
|
||||
"body": {"storage": {"value": body, "representation": "storage"}},
|
||||
});
|
||||
const settings = {
|
||||
method: 'post',
|
||||
headers: {
|
||||
"Accept": "application/json",
|
||||
"X-Atlassian-Token": "no-check",
|
||||
"Content-Type": "application/json",
|
||||
"Authorization": "Basic bnJhc211c3NlbkBub3J0aHBhc3MuY29tOkFUQVRUM3hGZkdGMFFaVW9tQzFzM2h2RDRIaXFoX3VzT1ZGQVZMc1QxbjhsdDZnekQ3d2ZMOEQ4eDVuZXIzU0UyNEpENEU1OTB4b1Q5UEtQSWkxRXBwYW54MTJxNUFMek1IS2NlLUtyY0laUlQyM0J2TzhNRFh3eXZiekFPMlI0aEFMYzhaVVRJXzgtT00teDlvX3RqYkNITHhFTUZPcjZRRkRZcHJ3ZEhHWmpBeHB2aVN3WHJDUT0yMThBQzQzOA=="},
|
||||
payload: payload
|
||||
};
|
||||
const sendData = UrlFetchApp.fetch(url, settings);
|
||||
var response = sendData.getContentText();
|
||||
Logger.log(response);
|
||||
}
|
||||
7
Scripts/GAS_NP/Courtney_Confluence/appsscript.json
Normal file
7
Scripts/GAS_NP/Courtney_Confluence/appsscript.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"timeZone": "America/New_York",
|
||||
"dependencies": {
|
||||
},
|
||||
"exceptionLogging": "STACKDRIVER",
|
||||
"runtimeVersion": "V8"
|
||||
}
|
||||
1
Scripts/GAS_NP/Dept_Calendar/.clasp.json
Normal file
1
Scripts/GAS_NP/Dept_Calendar/.clasp.json
Normal file
@ -0,0 +1 @@
|
||||
{"scriptId":"1bG7euzp-k-XWRrCkTEwdOLYxuLgIMgzKcfvWjdOKU226uYPC7aTU_JfJ","rootDir":"/Users/normrasmussen/Documents/Northpass/Google_Scripts/Dept_Calendar"}
|
||||
27
Scripts/GAS_NP/Dept_Calendar/Code.js
Normal file
27
Scripts/GAS_NP/Dept_Calendar/Code.js
Normal file
@ -0,0 +1,27 @@
|
||||
function createEvent() {
|
||||
let calendarID = '';
|
||||
let eventName = '';
|
||||
let startTime = '';
|
||||
let endTime = '';
|
||||
let zoomLink = '';
|
||||
var event = CalendarApp.getCalendarById(calendarID).create(
|
||||
eventName, startTime, endTime, zoomLink);
|
||||
eventID = event.getID();
|
||||
}
|
||||
|
||||
function addLearner(eventID, calendarID) {
|
||||
let attendeeEmail = '{{ current_person.email }}';
|
||||
let calendar = calendarID;
|
||||
let event = eventID;
|
||||
|
||||
let basCalendar = CalendarApp.getCalendarById(calendar);
|
||||
if (basCalendar == null) {
|
||||
return;
|
||||
}
|
||||
let currentEvent = calendar.getEventById(event);
|
||||
if (currentEvent == null) {
|
||||
return;
|
||||
}
|
||||
event.addGuest(attendeeEmail);
|
||||
|
||||
}
|
||||
7
Scripts/GAS_NP/Dept_Calendar/appsscript.json
Normal file
7
Scripts/GAS_NP/Dept_Calendar/appsscript.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"timeZone": "America/New_York",
|
||||
"dependencies": {
|
||||
},
|
||||
"exceptionLogging": "STACKDRIVER",
|
||||
"runtimeVersion": "V8"
|
||||
}
|
||||
1
Scripts/GAS_NP/Doximity/.clasp.json
Normal file
1
Scripts/GAS_NP/Doximity/.clasp.json
Normal file
@ -0,0 +1 @@
|
||||
{"scriptId":"13jMb_qCijEsEwZMcsx28oYQrKEKm-HlE0yKkz7xLOWmcykwK9YZz_nDG","rootDir":"/Users/normrasmussen/Documents/Work/Scripts/GoogleScripts/Doximity"}
|
||||
7
Scripts/GAS_NP/Doximity/appsscript.json
Normal file
7
Scripts/GAS_NP/Doximity/appsscript.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"timeZone": "America/New_York",
|
||||
"dependencies": {
|
||||
},
|
||||
"exceptionLogging": "STACKDRIVER",
|
||||
"runtimeVersion": "V8"
|
||||
}
|
||||
15
Scripts/GAS_NP/Doximity/ppl_mgr_lookup.js
Normal file
15
Scripts/GAS_NP/Doximity/ppl_mgr_lookup.js
Normal file
@ -0,0 +1,15 @@
|
||||
function addVlookFormula() {
|
||||
var ss = SpreadsheetApp.getActiveSpreadsheet();
|
||||
var sheet = ss.getSheets()[0];
|
||||
Utilities.sleep(10000)
|
||||
var value = sheet.getRange(2,2).getValue();
|
||||
|
||||
if (value != "Is People Manager?") {
|
||||
sheet.insertColumnAfter(1);
|
||||
sheet.getRange(2,2).setValue("Is People Manager?");
|
||||
lastRow = sheet.getLastRow();
|
||||
for(var i=3; i<lastRow;i++){
|
||||
sheet.getRange(i,2).setFormula('=VLOOKUP(A'+i+', Assignments!$B:$C, 2, false)');
|
||||
};
|
||||
}
|
||||
}
|
||||
3
Scripts/GAS_NP/GetProps.js
Normal file
3
Scripts/GAS_NP/GetProps.js
Normal file
@ -0,0 +1,3 @@
|
||||
function getProps() {
|
||||
|
||||
}
|
||||
1
Scripts/GAS_NP/Harri_Get_Props/.clasp.json
Normal file
1
Scripts/GAS_NP/Harri_Get_Props/.clasp.json
Normal file
@ -0,0 +1 @@
|
||||
{"scriptId":"17cLm8wwin--btQr0A6G_QkxOeT2Q3QnL8mEup8ZThMTAPwrUw2qsyg6N","rootDir":"/Users/normrasmussen/Documents/Work/Scripts/GoogleScripts/Harri_Get_Props"}
|
||||
83
Scripts/GAS_NP/Harri_Get_Props/GetProps.js
Normal file
83
Scripts/GAS_NP/Harri_Get_Props/GetProps.js
Normal file
@ -0,0 +1,83 @@
|
||||
const sheet = SpreadsheetApp.getActiveSheet();
|
||||
const apiKey = 'RfmxChNLLodO6M0Z88BwG9Xyu'
|
||||
// const apiKey = '6JNiiDgAwWwYoH8YdEvrFwxc1';
|
||||
|
||||
function getUuids() {
|
||||
var sheet = SpreadsheetApp.getActiveSheet();
|
||||
var numRows = sheet.getLastRow()-1; // Number of rows to process
|
||||
var dataRange = sheet.getRange(2, 3, numRows, 1);
|
||||
var values = dataRange.getValues();
|
||||
writeHeadings();
|
||||
|
||||
for (email in values){
|
||||
var row = values[email];
|
||||
var email = row[0]
|
||||
var api_url = 'https://api.northpass.com/v2/people/?filter[email][eq]='+email;
|
||||
const settings = {
|
||||
async: true,
|
||||
crossDomain: true,
|
||||
method: 'GET',
|
||||
headers: {
|
||||
accept: 'application/json',
|
||||
'X-Api-Key': apiKey
|
||||
}
|
||||
};
|
||||
const sendMsg = UrlFetchApp.fetch(api_url, settings);
|
||||
var uuidResponse = sendMsg.getContentText();
|
||||
var parsedata = JSON.parse(uuidResponse);
|
||||
try {
|
||||
var uuid = parsedata["data"][0]["id"];
|
||||
if (email != "") {
|
||||
findRow(email, uuid);
|
||||
}
|
||||
}
|
||||
catch(ex) {
|
||||
Logger.log(ex)
|
||||
continue
|
||||
}
|
||||
finally {
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
function findRow(email, uuid){
|
||||
var sheetRow = SpreadsheetApp.getActiveSpreadsheet();
|
||||
var data = sheetRow.getDataRange().getValues();
|
||||
for(var i = 0; i<data.length;i++){
|
||||
if(data[i][2] == email){ //[1] because column B
|
||||
// Logger.log((i+1))
|
||||
var row = i+1;
|
||||
propstoSheet(uuid, row, email);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function propstoSheet(uuid, row, email) {
|
||||
var uuid_url = 'https://api.northpass.com/v2/properties/people/'+uuid;
|
||||
const settings = {
|
||||
async: true,
|
||||
crossDomain: true,
|
||||
url: uuid_url,
|
||||
method: 'GET',
|
||||
headers: {
|
||||
accept: 'application/json',
|
||||
'X-Api-Key': apiKey,
|
||||
}
|
||||
};
|
||||
const sendMsg = UrlFetchApp.fetch(uuid_url, settings);
|
||||
var txtResponse = sendMsg.getContentText();
|
||||
var parseProps = JSON.parse(txtResponse);
|
||||
var company = parseProps["data"]["attributes"]["properties"]["brand_group"];
|
||||
var account_name = parseProps["data"]["attributes"]["properties"]["account_name"];
|
||||
|
||||
// Write the Data to each row and column
|
||||
sheet.getRange(row, 15).setValue(company);
|
||||
sheet.getRange(row, 16).setValue(account_name);
|
||||
// Logger.log(row + "," + email);
|
||||
}
|
||||
|
||||
function writeHeadings() {
|
||||
// Write the new Column Headings
|
||||
sheet.getRange(1, 15).setValue("Company");
|
||||
sheet.getRange(1, 16).setValue("Account");
|
||||
}
|
||||
7
Scripts/GAS_NP/Harri_Get_Props/appsscript.json
Normal file
7
Scripts/GAS_NP/Harri_Get_Props/appsscript.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"timeZone": "America/New_York",
|
||||
"dependencies": {
|
||||
},
|
||||
"exceptionLogging": "STACKDRIVER",
|
||||
"runtimeVersion": "V8"
|
||||
}
|
||||
1
Scripts/GAS_NP/Luminate_API_Exam/.clasp.json
Normal file
1
Scripts/GAS_NP/Luminate_API_Exam/.clasp.json
Normal file
@ -0,0 +1 @@
|
||||
{"scriptId":"1s6f3wOHnnkJXNH6RoO5_NBfT5xJh62RPBm5LdGS7cgBlsfgPCnNxheIE","rootDir":"/Users/normrasmussen/Documents/Work/Scripts/GoogleScripts/Luminate_API_Exam"}
|
||||
58
Scripts/GAS_NP/Luminate_API_Exam/WebhookParseer.js
Normal file
58
Scripts/GAS_NP/Luminate_API_Exam/WebhookParseer.js
Normal file
@ -0,0 +1,58 @@
|
||||
function doGet(e) {
|
||||
return HtmlService.createHtmlOutput("get request received");
|
||||
}
|
||||
// ac4fbf2e-ed8f-404d-b995-f0ef73481466
|
||||
//this is a function that fires when the webapp receives a POST request
|
||||
function doPost(e) {
|
||||
var params = JSON.stringify(e.postData.contents);
|
||||
params = JSON.parse(params);
|
||||
var now = new Date();
|
||||
var timeAdded = Utilities.formatDate(now,'America/New_York','MM/dd/yyyy');
|
||||
|
||||
var learnerName = params.substring(params.indexOf('{"name":"') + 7, params.lastIndexOf('"email"'));
|
||||
learnerName = learnerName.slice(learnerName.indexOf('"') + 1, learnerName.lastIndexOf('"'),);
|
||||
//Logger.log("Name = " + learnerName);
|
||||
|
||||
var learnerEmail = params.substring(params.indexOf('"sso_uid":"') + 9, params.lastIndexOf('"full_name"'));
|
||||
learnerEmail = learnerEmail.slice(learnerName.indexOf('"') + 3, learnerEmail.lastIndexOf('"'),);
|
||||
//Logger.log("Email = " + learnerEmail);
|
||||
|
||||
var courseName = params.substring(params.indexOf('"course_name":') + 4, params.lastIndexOf('}},{"id"'));
|
||||
courseName = courseName.slice(courseName.indexOf('"') + 3, courseName.lastIndexOf('"'),);
|
||||
//Logger.log("Course = " + courseName);
|
||||
|
||||
var activityName = params.substring(params.indexOf('"title":"') + 4, params.lastIndexOf('"course_name"'));
|
||||
activityName = activityName.slice(activityName.indexOf('"') + 3, activityName.lastIndexOf('"'),);
|
||||
//Logger.log("Activity = " + activityName);
|
||||
|
||||
var quizScore = params.substring(params.indexOf('"value":') + 8, params.lastIndexOf(',"created_at"'));
|
||||
//quizScore = quizScore.slice(quizScore.indexOf('"') + 3, quizScore.lastIndexOf('"'),);
|
||||
//Logger.log("Quiz Score = " + quizScore);
|
||||
|
||||
var dateCompleted = params.substring(params.indexOf('"updated_at":"') + 4, params.lastIndexOf('"activated_at"'));
|
||||
dateCompleted = dateCompleted.slice(dateCompleted.indexOf('"') + 3, dateCompleted.lastIndexOf('"'),);
|
||||
var localTime = new Date(dateCompleted);
|
||||
localTime = localTime.toString();
|
||||
localTime = localTime.slice(0,localTime.indexOf(' GMT'));
|
||||
//dateCompleted = dateCompleted.toString();
|
||||
//Logger.log("Completed on = " + dateCompleted);
|
||||
|
||||
if (courseName == "API Certification Exam") {
|
||||
var sheet = SpreadsheetApp.getActiveSheet();
|
||||
var lastRow = Math.max(sheet.getLastRow(),1);
|
||||
sheet.insertRowAfter(lastRow);
|
||||
sheet.getRange(lastRow + 1, 1).setValue(timeAdded);
|
||||
sheet.getRange(lastRow + 1, 2).setValue(learnerName);
|
||||
sheet.getRange(lastRow + 1, 3).setValue(learnerEmail);
|
||||
sheet.getRange(lastRow + 1, 4).setValue(courseName);
|
||||
sheet.getRange(lastRow + 1, 5).setValue(activityName);
|
||||
sheet.getRange(lastRow + 1, 6).setValue(localTime);
|
||||
sheet.getRange(lastRow + 1, 7).setValue(quizScore+"%");
|
||||
sheet.getRange(lastRow + 1, 8).setValue(params);
|
||||
}
|
||||
|
||||
|
||||
SpreadsheetApp.flush();
|
||||
return HtmlService.createHtmlOutput("post request received");
|
||||
}
|
||||
|
||||
1
Scripts/GAS_NP/MizunoPGA/.clasp.json
Normal file
1
Scripts/GAS_NP/MizunoPGA/.clasp.json
Normal file
@ -0,0 +1 @@
|
||||
{"scriptId":"1YHgQUXTmBttTnbZH1O9n5IVuX0Ymr9GIBcL2mfpLWmtvv7UhrwlJQZC_","rootDir":"/Users/normrasmussen/Documents/Work/Scripts/GoogleScripts/MizunoPGA"}
|
||||
102
Scripts/GAS_NP/MizunoPGA/GetPgaIds.js
Normal file
102
Scripts/GAS_NP/MizunoPGA/GetPgaIds.js
Normal file
@ -0,0 +1,102 @@
|
||||
//import {LongRun} from "../LongRun";
|
||||
//let data: string[];
|
||||
|
||||
function execute() {
|
||||
const params = [];
|
||||
params.push(3); // How many times the process should be executed
|
||||
params.push(60); // How long does it take to process one case? (in seconds)
|
||||
params.push(240); // Maximum acceptable run time in seconds (less than 6 minutes, of course)
|
||||
params.push(1); // How many minutes later the next trigger will be activated
|
||||
|
||||
LongRun.instance.setParameters('getUuids', params);
|
||||
LongRunTask();
|
||||
}
|
||||
|
||||
const sheet = SpreadsheetApp.getActiveSheet();
|
||||
const apiKey = 'stXNF84HWL8aCGeRjHEo2rJ1U';
|
||||
|
||||
function getUuids() {
|
||||
var sheet = SpreadsheetApp.getActiveSheet();
|
||||
var numRows = sheet.getLastRow()-1; // Number of rows to process
|
||||
var dataRange = sheet.getRange(3, 3, numRows, 1); // Column C
|
||||
var values = dataRange.getValues();
|
||||
writeHeadings();
|
||||
|
||||
for (email in values){
|
||||
var row = values[email];
|
||||
var email = row[0]
|
||||
var api_url = 'https://api.northpass.com/v2/people/?filter[email][eq]='+email;
|
||||
const settings = {
|
||||
async: true,
|
||||
crossDomain: true,
|
||||
method: 'GET',
|
||||
headers: {
|
||||
accept: 'application/json',
|
||||
'X-Api-Key': apiKey
|
||||
}
|
||||
};
|
||||
const sendMsg = UrlFetchApp.fetch(api_url, settings);
|
||||
var uuidResponse = sendMsg.getContentText();
|
||||
var parsedata = JSON.parse(uuidResponse);
|
||||
try {
|
||||
var uuid = parsedata["data"][0]["id"];
|
||||
if (email != "") {
|
||||
findRow(email, uuid);
|
||||
}
|
||||
}
|
||||
catch(ex) {
|
||||
Logger.log(ex)
|
||||
continue
|
||||
}
|
||||
finally {
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
function findRow(email, uuid){
|
||||
var sheetRow = SpreadsheetApp.getActiveSpreadsheet();
|
||||
var data = sheetRow.getDataRange().getValues();
|
||||
for(var i = 0; i<data.length;i++){
|
||||
if(data[i][2] == email){ //[1] because column B
|
||||
// Logger.log((i+1))
|
||||
var row = i+1;
|
||||
propstoSheet(uuid, row);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function propstoSheet(uuid, row) {
|
||||
var uuid_url = 'https://api.northpass.com/v2/properties/people/'+uuid;
|
||||
const settings = {
|
||||
async: true,
|
||||
crossDomain: true,
|
||||
url: uuid_url,
|
||||
method: 'GET',
|
||||
headers: {
|
||||
accept: 'application/json',
|
||||
'X-Api-Key': apiKey,
|
||||
}
|
||||
};
|
||||
const sendMsg = UrlFetchApp.fetch(uuid_url, settings);
|
||||
var txtResponse = sendMsg.getContentText();
|
||||
var parseProps = JSON.parse(txtResponse);
|
||||
var user_id = parseProps["data"]["attributes"]["properties"]["account_number"];
|
||||
|
||||
if (user_id != 0) {
|
||||
// Write the Data to each row and column
|
||||
sheet.getRange(row, 6).setValue(user_id);
|
||||
} else {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function writeHeadings() {
|
||||
// Write the new Column Headings
|
||||
sheet.getRange(1, 6).setValue("PGA Number");
|
||||
}
|
||||
|
||||
//function deleteZeros(row, user_id) {
|
||||
// if (user_id == 0){
|
||||
// sheet.deleteRow(row);
|
||||
// }
|
||||
//}
|
||||
308
Scripts/GAS_NP/MizunoPGA/LongRun.gs
Normal file
308
Scripts/GAS_NP/MizunoPGA/LongRun.gs
Normal file
@ -0,0 +1,308 @@
|
||||
// Compiled using ts2gas 3.6.5 (TypeScript 4.3.2)
|
||||
var exports = exports || {};
|
||||
var module = module || { exports: exports };
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.executeLongRun = exports.LongRun = void 0;
|
||||
//import Properties = GoogleAppsScript.Properties.Properties;
|
||||
/**
|
||||
* Long-Running Support
|
||||
*/
|
||||
var LongRun = /** @class */ (function () {
|
||||
/**
|
||||
* Private constructor
|
||||
* @private
|
||||
*/
|
||||
function LongRun() {
|
||||
/** start time map */
|
||||
this.startTimeMap = {};
|
||||
}
|
||||
Object.defineProperty(LongRun, "instance", {
|
||||
/**
|
||||
* Returns singleton instance.
|
||||
*/
|
||||
get: function () {
|
||||
if (!this._instance) {
|
||||
this._instance = new LongRun();
|
||||
}
|
||||
return this._instance;
|
||||
},
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
/**
|
||||
* Returns if function is running now.
|
||||
* @param funcName
|
||||
*/
|
||||
LongRun.prototype.isRunning = function (funcName) {
|
||||
// get spreadsheet properties
|
||||
var properties = PropertiesService.getScriptProperties();
|
||||
var running = properties.getProperty(LongRun.PREFIX_RUNNING + funcName);
|
||||
return !(running == null || running === '');
|
||||
};
|
||||
/**
|
||||
* Sets the function is running
|
||||
* @param funcName
|
||||
* @param running
|
||||
*/
|
||||
LongRun.prototype.setRunning = function (funcName, running) {
|
||||
var properties = PropertiesService.getScriptProperties();
|
||||
var key = LongRun.PREFIX_RUNNING + funcName;
|
||||
if (running) {
|
||||
properties.setProperty(key, "running");
|
||||
}
|
||||
else {
|
||||
properties.deleteProperty(key);
|
||||
}
|
||||
};
|
||||
/**
|
||||
* Sets max execution seconds
|
||||
* @param seconds
|
||||
*/
|
||||
LongRun.prototype.setMaxExecutionSeconds = function (seconds) {
|
||||
LongRun.RUNNING_MAX_SECONDS = seconds;
|
||||
};
|
||||
/**
|
||||
* Sets the trigger's delay minutes
|
||||
* @param minutes
|
||||
*/
|
||||
LongRun.prototype.setTriggerDelayMinutes = function (minutes) {
|
||||
LongRun.RUNNING_DELAY_MINUTES = minutes;
|
||||
};
|
||||
/**
|
||||
* Returns the function parameters
|
||||
* @param funcName
|
||||
*/
|
||||
LongRun.prototype.getParameters = function (funcName) {
|
||||
var properties = PropertiesService.getScriptProperties();
|
||||
var parameters = properties.getProperty(LongRun.PREFIX_OPTION + funcName);
|
||||
if (parameters != null) {
|
||||
return parameters.split(',');
|
||||
}
|
||||
else {
|
||||
return [];
|
||||
}
|
||||
};
|
||||
/**
|
||||
* Sets the function parameters.
|
||||
* @param funcName
|
||||
* @param parameters
|
||||
*/
|
||||
LongRun.prototype.setParameters = function (funcName, parameters) {
|
||||
var properties = PropertiesService.getScriptProperties();
|
||||
if (parameters != null) {
|
||||
properties.setProperty(LongRun.PREFIX_OPTION + funcName, parameters.join(','));
|
||||
}
|
||||
else {
|
||||
properties.deleteProperty(LongRun.PREFIX_OPTION + funcName);
|
||||
}
|
||||
};
|
||||
/**
|
||||
* Starts or Resumes Long-Run process.
|
||||
* @param funcName
|
||||
* @returns start index ( 0 for the first time )
|
||||
*/
|
||||
LongRun.prototype.startOrResume = function (funcName) {
|
||||
// save start time
|
||||
this.startTimeMap[funcName] = new Date().getTime();
|
||||
// get properties of spreadsheet
|
||||
var properties = PropertiesService.getScriptProperties();
|
||||
// set running-flag
|
||||
this.setRunning(funcName, true);
|
||||
// if the trigger exists, delete it.
|
||||
this.deleteTrigger(LongRun.PREFIX_TRIGGER_KEY + funcName);
|
||||
// get start index
|
||||
var startPos = parseInt(properties.getProperty(LongRun.PREFIX_START_POS + funcName));
|
||||
if (!startPos) {
|
||||
return 0;
|
||||
}
|
||||
else {
|
||||
return startPos;
|
||||
}
|
||||
};
|
||||
/**
|
||||
* Determines whether the process should be suspended.
|
||||
* If it should be suspended, the next trigger will be registered.
|
||||
* @param funcName
|
||||
* @param nextIndex - start position when resuming
|
||||
* @return true - it should be suspended
|
||||
*/
|
||||
LongRun.prototype.checkShouldSuspend = function (funcName, nextIndex) {
|
||||
var startTime = this.startTimeMap[funcName];
|
||||
var diff = (new Date().getTime() - startTime) / 1000;
|
||||
// If it's past the specified time, suspend the process
|
||||
if (diff >= LongRun.RUNNING_MAX_SECONDS) {
|
||||
// register the next trigger and set running-flag off
|
||||
this.registerNextTrigger(funcName, nextIndex);
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
/**
|
||||
* Resets Long-Running variables
|
||||
* @param funcName
|
||||
*/
|
||||
LongRun.prototype.reset = function (funcName) {
|
||||
// delete trigger
|
||||
this.deleteTrigger(LongRun.PREFIX_TRIGGER_KEY + funcName);
|
||||
// delete spreadsheet properties
|
||||
var properties = PropertiesService.getScriptProperties();
|
||||
properties.deleteProperty(LongRun.PREFIX_START_POS + funcName);
|
||||
properties.deleteProperty(LongRun.PREFIX_OPTION + funcName);
|
||||
properties.deleteProperty(LongRun.PREFIX_RUNNING + funcName);
|
||||
properties.deleteProperty(LongRun.PREFIX_TRIGGER_KEY + funcName);
|
||||
};
|
||||
/**
|
||||
* Resets Long-Running variables if there is no next trigger.
|
||||
* Returns whether the command has finished or not.
|
||||
* @param funcName
|
||||
*/
|
||||
LongRun.prototype.end = function (funcName) {
|
||||
var ret = false;
|
||||
if (!this.existsNextTrigger(funcName)) {
|
||||
this.reset(funcName);
|
||||
ret = true;
|
||||
}
|
||||
return ret;
|
||||
};
|
||||
/**
|
||||
* Returns if there is next trigger.
|
||||
* @param funcName
|
||||
*/
|
||||
LongRun.prototype.existsNextTrigger = function (funcName) {
|
||||
var triggerId = PropertiesService.getScriptProperties().getProperty(LongRun.PREFIX_TRIGGER_KEY + funcName);
|
||||
return triggerId != null;
|
||||
};
|
||||
/**
|
||||
* register the next trigger and set running-flag off
|
||||
* @param funcName
|
||||
* @param nextIndex - start position when resuming
|
||||
*/
|
||||
LongRun.prototype.registerNextTrigger = function (funcName, nextIndex) {
|
||||
// get spreadsheet properties
|
||||
var properties = PropertiesService.getScriptProperties();
|
||||
properties.setProperty(LongRun.PREFIX_START_POS + funcName, String(nextIndex)); // save next start position
|
||||
this.setTrigger(LongRun.PREFIX_TRIGGER_KEY + funcName, funcName); // set trigger
|
||||
// turn off running-flag
|
||||
properties.deleteProperty(LongRun.PREFIX_RUNNING + funcName);
|
||||
};
|
||||
/**
|
||||
* Deletes the trigger
|
||||
* @param triggerKey
|
||||
*/
|
||||
LongRun.prototype.deleteTrigger = function (triggerKey) {
|
||||
var triggerId = PropertiesService.getScriptProperties().getProperty(triggerKey);
|
||||
if (!triggerId)
|
||||
return;
|
||||
ScriptApp.getProjectTriggers().filter(function (trigger) {
|
||||
return trigger.getUniqueId() == triggerId;
|
||||
})
|
||||
.forEach(function (trigger) {
|
||||
ScriptApp.deleteTrigger(trigger);
|
||||
});
|
||||
PropertiesService.getScriptProperties().deleteProperty(triggerKey);
|
||||
};
|
||||
/**
|
||||
* Sets a trigger
|
||||
* @param triggerKey
|
||||
* @param funcName
|
||||
*/
|
||||
LongRun.prototype.setTrigger = function (triggerKey, funcName) {
|
||||
this.deleteTrigger(triggerKey); // delete if exists.
|
||||
var dt = new Date();
|
||||
dt.setMinutes(dt.getMinutes() + LongRun.RUNNING_DELAY_MINUTES); // will execute after the specified time
|
||||
var triggerId = ScriptApp.newTrigger(funcName).timeBased().at(dt).create().getUniqueId();
|
||||
// save the trigger id to delete the trigger later.
|
||||
PropertiesService.getScriptProperties().setProperty(triggerKey, triggerId);
|
||||
};
|
||||
// constants
|
||||
LongRun.PREFIX_RUNNING = "running_";
|
||||
LongRun.PREFIX_TRIGGER_KEY = "trigger_";
|
||||
LongRun.PREFIX_START_POS = "start_";
|
||||
LongRun.PREFIX_OPTION = "option_";
|
||||
LongRun.RUNNING_MAX_SECONDS = 4 * 60;
|
||||
LongRun.RUNNING_DELAY_MINUTES = 1;
|
||||
LongRun.EXECUTE_LONGRUN_FUNCNAME = "_executeLongRun";
|
||||
return LongRun;
|
||||
}());
|
||||
exports.LongRun = LongRun;
|
||||
/**
|
||||
* A function allows you to easily execute long-run task using the LongRun class.
|
||||
*
|
||||
* @param mainFuncName - Name of the function to be executed each time.
|
||||
* @param loopCount - Number of times to execute the main function.
|
||||
* @param params - Parameters passed to each function (string[]). (optional)
|
||||
* @param initializerName - Name of the first function to be executed on first or restart. (optional)
|
||||
* @param finalizerName - Name of the function to be called on interruption or when all processing is complete. (optional)
|
||||
*
|
||||
* The definition of each function to be passed should be as follows.
|
||||
* - Main function: function [function name](index: number, params: string[]) {...}
|
||||
* - Initializer: function [function name](startIndex: number, params: string[]) {...}
|
||||
* - Finalizer: function [function name](isFinished: boolean, params: string[]) {...}
|
||||
*
|
||||
* Note that it is not possible to use executeLongRun() to execute different long-time processes simultaneously.
|
||||
*/
|
||||
function executeLongRun(mainFuncName, loopCount, params, initializerName, finalizerName) {
|
||||
if (params === void 0) { params = null; }
|
||||
if (initializerName === void 0) { initializerName = null; }
|
||||
if (finalizerName === void 0) { finalizerName = null; }
|
||||
var longRunParams = [];
|
||||
longRunParams.push(mainFuncName);
|
||||
longRunParams.push(String(loopCount));
|
||||
longRunParams.push(initializerName === null ? '' : initializerName);
|
||||
longRunParams.push(finalizerName === null ? '' : finalizerName);
|
||||
if (params != null && params.length > 0) {
|
||||
longRunParams.push(params.join(','));
|
||||
}
|
||||
LongRun.instance.setParameters(LongRun.EXECUTE_LONGRUN_FUNCNAME, longRunParams);
|
||||
_executeLongRun();
|
||||
}
|
||||
exports.executeLongRun = executeLongRun;
|
||||
/**
|
||||
* The main body of executeLongRun
|
||||
*/
|
||||
function _executeLongRun() {
|
||||
var longRun = LongRun.instance;
|
||||
// get parameters
|
||||
var longRunParams = longRun.getParameters(LongRun.EXECUTE_LONGRUN_FUNCNAME);
|
||||
var mainFuncName = longRunParams[0];
|
||||
var loopCount = parseInt(longRunParams[1]);
|
||||
var initializerName = longRunParams[2];
|
||||
var finalizerName = longRunParams[3];
|
||||
var params = [];
|
||||
for (var i = 4; i < longRunParams.length; i++) {
|
||||
params.push('"' + longRunParams[i] + '"');
|
||||
}
|
||||
var paramsLiteral = '[' + params.join(',') + ']';
|
||||
var startIndex = longRun.startOrResume(LongRun.EXECUTE_LONGRUN_FUNCNAME);
|
||||
try {
|
||||
// *** call initializer ***
|
||||
if (initializerName != null && initializerName.length > 0) {
|
||||
eval(initializerName + '(' + startIndex + ',' + paramsLiteral + ')');
|
||||
}
|
||||
// execute the iterative process.
|
||||
for (var i = startIndex; i < loopCount; i++) {
|
||||
// Each time before executing a process, you need to check if it should be stopped or not.
|
||||
if (longRun.checkShouldSuspend(LongRun.EXECUTE_LONGRUN_FUNCNAME, i)) {
|
||||
// if checkShouldSuspend() returns true, the next trigger has been set
|
||||
// and you should get out of the loop.
|
||||
console.log('*** The process has been suspended. ***');
|
||||
break;
|
||||
}
|
||||
// *** call main process ***
|
||||
eval(mainFuncName + '(' + i + ',' + paramsLiteral + ')');
|
||||
}
|
||||
}
|
||||
catch (e) {
|
||||
console.log(e.message);
|
||||
}
|
||||
finally {
|
||||
// you must always call end() to reset the long-running variables if there is no next trigger.
|
||||
var finished = longRun.end(LongRun.EXECUTE_LONGRUN_FUNCNAME);
|
||||
// *** call finalizer ***
|
||||
if (finalizerName != null && finalizerName.length > 0) {
|
||||
eval(finalizerName + '(' + finished + ',' + paramsLiteral + ')');
|
||||
}
|
||||
}
|
||||
}
|
||||
308
Scripts/GAS_NP/MizunoPGA/LongRun.js
Normal file
308
Scripts/GAS_NP/MizunoPGA/LongRun.js
Normal file
@ -0,0 +1,308 @@
|
||||
// Compiled using ts2gas 3.6.5 (TypeScript 4.3.2)
|
||||
var exports = exports || {};
|
||||
var module = module || { exports: exports };
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.executeLongRun = exports.LongRun = void 0;
|
||||
//import Properties = GoogleAppsScript.Properties.Properties;
|
||||
/**
|
||||
* Long-Running Support
|
||||
*/
|
||||
var LongRun = /** @class */ (function () {
|
||||
/**
|
||||
* Private constructor
|
||||
* @private
|
||||
*/
|
||||
function LongRun() {
|
||||
/** start time map */
|
||||
this.startTimeMap = {};
|
||||
}
|
||||
Object.defineProperty(LongRun, "instance", {
|
||||
/**
|
||||
* Returns singleton instance.
|
||||
*/
|
||||
get: function () {
|
||||
if (!this._instance) {
|
||||
this._instance = new LongRun();
|
||||
}
|
||||
return this._instance;
|
||||
},
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
/**
|
||||
* Returns if function is running now.
|
||||
* @param funcName
|
||||
*/
|
||||
LongRun.prototype.isRunning = function (funcName) {
|
||||
// get spreadsheet properties
|
||||
var properties = PropertiesService.getScriptProperties();
|
||||
var running = properties.getProperty(LongRun.PREFIX_RUNNING + funcName);
|
||||
return !(running == null || running === '');
|
||||
};
|
||||
/**
|
||||
* Sets the function is running
|
||||
* @param funcName
|
||||
* @param running
|
||||
*/
|
||||
LongRun.prototype.setRunning = function (funcName, running) {
|
||||
var properties = PropertiesService.getScriptProperties();
|
||||
var key = LongRun.PREFIX_RUNNING + funcName;
|
||||
if (running) {
|
||||
properties.setProperty(key, "running");
|
||||
}
|
||||
else {
|
||||
properties.deleteProperty(key);
|
||||
}
|
||||
};
|
||||
/**
|
||||
* Sets max execution seconds
|
||||
* @param seconds
|
||||
*/
|
||||
LongRun.prototype.setMaxExecutionSeconds = function (seconds) {
|
||||
LongRun.RUNNING_MAX_SECONDS = seconds;
|
||||
};
|
||||
/**
|
||||
* Sets the trigger's delay minutes
|
||||
* @param minutes
|
||||
*/
|
||||
LongRun.prototype.setTriggerDelayMinutes = function (minutes) {
|
||||
LongRun.RUNNING_DELAY_MINUTES = minutes;
|
||||
};
|
||||
/**
|
||||
* Returns the function parameters
|
||||
* @param funcName
|
||||
*/
|
||||
LongRun.prototype.getParameters = function (funcName) {
|
||||
var properties = PropertiesService.getScriptProperties();
|
||||
var parameters = properties.getProperty(LongRun.PREFIX_OPTION + funcName);
|
||||
if (parameters != null) {
|
||||
return parameters.split(',');
|
||||
}
|
||||
else {
|
||||
return [];
|
||||
}
|
||||
};
|
||||
/**
|
||||
* Sets the function parameters.
|
||||
* @param funcName
|
||||
* @param parameters
|
||||
*/
|
||||
LongRun.prototype.setParameters = function (funcName, parameters) {
|
||||
var properties = PropertiesService.getScriptProperties();
|
||||
if (parameters != null) {
|
||||
properties.setProperty(LongRun.PREFIX_OPTION + funcName, parameters.join(','));
|
||||
}
|
||||
else {
|
||||
properties.deleteProperty(LongRun.PREFIX_OPTION + funcName);
|
||||
}
|
||||
};
|
||||
/**
|
||||
* Starts or Resumes Long-Run process.
|
||||
* @param funcName
|
||||
* @returns start index ( 0 for the first time )
|
||||
*/
|
||||
LongRun.prototype.startOrResume = function (funcName) {
|
||||
// save start time
|
||||
this.startTimeMap[funcName] = new Date().getTime();
|
||||
// get properties of spreadsheet
|
||||
var properties = PropertiesService.getScriptProperties();
|
||||
// set running-flag
|
||||
this.setRunning(funcName, true);
|
||||
// if the trigger exists, delete it.
|
||||
this.deleteTrigger(LongRun.PREFIX_TRIGGER_KEY + funcName);
|
||||
// get start index
|
||||
var startPos = parseInt(properties.getProperty(LongRun.PREFIX_START_POS + funcName));
|
||||
if (!startPos) {
|
||||
return 0;
|
||||
}
|
||||
else {
|
||||
return startPos;
|
||||
}
|
||||
};
|
||||
/**
|
||||
* Determines whether the process should be suspended.
|
||||
* If it should be suspended, the next trigger will be registered.
|
||||
* @param funcName
|
||||
* @param nextIndex - start position when resuming
|
||||
* @return true - it should be suspended
|
||||
*/
|
||||
LongRun.prototype.checkShouldSuspend = function (funcName, nextIndex) {
|
||||
var startTime = this.startTimeMap[funcName];
|
||||
var diff = (new Date().getTime() - startTime) / 1000;
|
||||
// If it's past the specified time, suspend the process
|
||||
if (diff >= LongRun.RUNNING_MAX_SECONDS) {
|
||||
// register the next trigger and set running-flag off
|
||||
this.registerNextTrigger(funcName, nextIndex);
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
/**
|
||||
* Resets Long-Running variables
|
||||
* @param funcName
|
||||
*/
|
||||
LongRun.prototype.reset = function (funcName) {
|
||||
// delete trigger
|
||||
this.deleteTrigger(LongRun.PREFIX_TRIGGER_KEY + funcName);
|
||||
// delete spreadsheet properties
|
||||
var properties = PropertiesService.getScriptProperties();
|
||||
properties.deleteProperty(LongRun.PREFIX_START_POS + funcName);
|
||||
properties.deleteProperty(LongRun.PREFIX_OPTION + funcName);
|
||||
properties.deleteProperty(LongRun.PREFIX_RUNNING + funcName);
|
||||
properties.deleteProperty(LongRun.PREFIX_TRIGGER_KEY + funcName);
|
||||
};
|
||||
/**
|
||||
* Resets Long-Running variables if there is no next trigger.
|
||||
* Returns whether the command has finished or not.
|
||||
* @param funcName
|
||||
*/
|
||||
LongRun.prototype.end = function (funcName) {
|
||||
var ret = false;
|
||||
if (!this.existsNextTrigger(funcName)) {
|
||||
this.reset(funcName);
|
||||
ret = true;
|
||||
}
|
||||
return ret;
|
||||
};
|
||||
/**
|
||||
* Returns if there is next trigger.
|
||||
* @param funcName
|
||||
*/
|
||||
LongRun.prototype.existsNextTrigger = function (funcName) {
|
||||
var triggerId = PropertiesService.getScriptProperties().getProperty(LongRun.PREFIX_TRIGGER_KEY + funcName);
|
||||
return triggerId != null;
|
||||
};
|
||||
/**
|
||||
* register the next trigger and set running-flag off
|
||||
* @param funcName
|
||||
* @param nextIndex - start position when resuming
|
||||
*/
|
||||
LongRun.prototype.registerNextTrigger = function (funcName, nextIndex) {
|
||||
// get spreadsheet properties
|
||||
var properties = PropertiesService.getScriptProperties();
|
||||
properties.setProperty(LongRun.PREFIX_START_POS + funcName, String(nextIndex)); // save next start position
|
||||
this.setTrigger(LongRun.PREFIX_TRIGGER_KEY + funcName, funcName); // set trigger
|
||||
// turn off running-flag
|
||||
properties.deleteProperty(LongRun.PREFIX_RUNNING + funcName);
|
||||
};
|
||||
/**
|
||||
* Deletes the trigger
|
||||
* @param triggerKey
|
||||
*/
|
||||
LongRun.prototype.deleteTrigger = function (triggerKey) {
|
||||
var triggerId = PropertiesService.getScriptProperties().getProperty(triggerKey);
|
||||
if (!triggerId)
|
||||
return;
|
||||
ScriptApp.getProjectTriggers().filter(function (trigger) {
|
||||
return trigger.getUniqueId() == triggerId;
|
||||
})
|
||||
.forEach(function (trigger) {
|
||||
ScriptApp.deleteTrigger(trigger);
|
||||
});
|
||||
PropertiesService.getScriptProperties().deleteProperty(triggerKey);
|
||||
};
|
||||
/**
|
||||
* Sets a trigger
|
||||
* @param triggerKey
|
||||
* @param funcName
|
||||
*/
|
||||
LongRun.prototype.setTrigger = function (triggerKey, funcName) {
|
||||
this.deleteTrigger(triggerKey); // delete if exists.
|
||||
var dt = new Date();
|
||||
dt.setMinutes(dt.getMinutes() + LongRun.RUNNING_DELAY_MINUTES); // will execute after the specified time
|
||||
var triggerId = ScriptApp.newTrigger(funcName).timeBased().at(dt).create().getUniqueId();
|
||||
// save the trigger id to delete the trigger later.
|
||||
PropertiesService.getScriptProperties().setProperty(triggerKey, triggerId);
|
||||
};
|
||||
// constants
|
||||
LongRun.PREFIX_RUNNING = "running_";
|
||||
LongRun.PREFIX_TRIGGER_KEY = "trigger_";
|
||||
LongRun.PREFIX_START_POS = "start_";
|
||||
LongRun.PREFIX_OPTION = "option_";
|
||||
LongRun.RUNNING_MAX_SECONDS = 4 * 60;
|
||||
LongRun.RUNNING_DELAY_MINUTES = 1;
|
||||
LongRun.EXECUTE_LONGRUN_FUNCNAME = "_executeLongRun";
|
||||
return LongRun;
|
||||
}());
|
||||
exports.LongRun = LongRun;
|
||||
/**
|
||||
* A function allows you to easily execute long-run task using the LongRun class.
|
||||
*
|
||||
* @param mainFuncName - Name of the function to be executed each time.
|
||||
* @param loopCount - Number of times to execute the main function.
|
||||
* @param params - Parameters passed to each function (string[]). (optional)
|
||||
* @param initializerName - Name of the first function to be executed on first or restart. (optional)
|
||||
* @param finalizerName - Name of the function to be called on interruption or when all processing is complete. (optional)
|
||||
*
|
||||
* The definition of each function to be passed should be as follows.
|
||||
* - Main function: function [function name](index: number, params: string[]) {...}
|
||||
* - Initializer: function [function name](startIndex: number, params: string[]) {...}
|
||||
* - Finalizer: function [function name](isFinished: boolean, params: string[]) {...}
|
||||
*
|
||||
* Note that it is not possible to use executeLongRun() to execute different long-time processes simultaneously.
|
||||
*/
|
||||
function executeLongRun(mainFuncName, loopCount, params, initializerName, finalizerName) {
|
||||
if (params === void 0) { params = null; }
|
||||
if (initializerName === void 0) { initializerName = null; }
|
||||
if (finalizerName === void 0) { finalizerName = null; }
|
||||
var longRunParams = [];
|
||||
longRunParams.push(mainFuncName);
|
||||
longRunParams.push(String(loopCount));
|
||||
longRunParams.push(initializerName === null ? '' : initializerName);
|
||||
longRunParams.push(finalizerName === null ? '' : finalizerName);
|
||||
if (params != null && params.length > 0) {
|
||||
longRunParams.push(params.join(','));
|
||||
}
|
||||
LongRun.instance.setParameters(LongRun.EXECUTE_LONGRUN_FUNCNAME, longRunParams);
|
||||
_executeLongRun();
|
||||
}
|
||||
exports.executeLongRun = executeLongRun;
|
||||
/**
|
||||
* The main body of executeLongRun
|
||||
*/
|
||||
function _executeLongRun() {
|
||||
var longRun = LongRun.instance;
|
||||
// get parameters
|
||||
var longRunParams = longRun.getParameters(LongRun.EXECUTE_LONGRUN_FUNCNAME);
|
||||
var mainFuncName = longRunParams[0];
|
||||
var loopCount = parseInt(longRunParams[1]);
|
||||
var initializerName = longRunParams[2];
|
||||
var finalizerName = longRunParams[3];
|
||||
var params = [];
|
||||
for (var i = 4; i < longRunParams.length; i++) {
|
||||
params.push('"' + longRunParams[i] + '"');
|
||||
}
|
||||
var paramsLiteral = '[' + params.join(',') + ']';
|
||||
var startIndex = longRun.startOrResume(LongRun.EXECUTE_LONGRUN_FUNCNAME);
|
||||
try {
|
||||
// *** call initializer ***
|
||||
if (initializerName != null && initializerName.length > 0) {
|
||||
eval(initializerName + '(' + startIndex + ',' + paramsLiteral + ')');
|
||||
}
|
||||
// execute the iterative process.
|
||||
for (var i = startIndex; i < loopCount; i++) {
|
||||
// Each time before executing a process, you need to check if it should be stopped or not.
|
||||
if (longRun.checkShouldSuspend(LongRun.EXECUTE_LONGRUN_FUNCNAME, i)) {
|
||||
// if checkShouldSuspend() returns true, the next trigger has been set
|
||||
// and you should get out of the loop.
|
||||
console.log('*** The process has been suspended. ***');
|
||||
break;
|
||||
}
|
||||
// *** call main process ***
|
||||
eval(mainFuncName + '(' + i + ',' + paramsLiteral + ')');
|
||||
}
|
||||
}
|
||||
catch (e) {
|
||||
console.log(e.message);
|
||||
}
|
||||
finally {
|
||||
// you must always call end() to reset the long-running variables if there is no next trigger.
|
||||
var finished = longRun.end(LongRun.EXECUTE_LONGRUN_FUNCNAME);
|
||||
// *** call finalizer ***
|
||||
if (finalizerName != null && finalizerName.length > 0) {
|
||||
eval(finalizerName + '(' + finished + ',' + paramsLiteral + ')');
|
||||
}
|
||||
}
|
||||
}
|
||||
82
Scripts/GAS_NP/MizunoPGA/PGAIds_Raw.js
Normal file
82
Scripts/GAS_NP/MizunoPGA/PGAIds_Raw.js
Normal file
@ -0,0 +1,82 @@
|
||||
//const sheet = SpreadsheetApp.getActiveSheet();
|
||||
//const apiKey = 'stXNF84HWL8aCGeRjHEo2rJ1U';
|
||||
|
||||
function getUuids() {
|
||||
var sheet = SpreadsheetApp.getActiveSheet();
|
||||
var numRows = sheet.getLastRow()-1; // Number of rows to process
|
||||
var dataRange = sheet.getRange(3, 3, numRows, 1); // Column C
|
||||
var values = dataRange.getValues();
|
||||
writeHeadings();
|
||||
|
||||
for (email in values){
|
||||
var row = values[email];
|
||||
var email = row[0]
|
||||
var api_url = 'https://api.northpass.com/v2/people/?filter[email][eq]='+email;
|
||||
const settings = {
|
||||
async: true,
|
||||
crossDomain: true,
|
||||
method: 'GET',
|
||||
headers: {
|
||||
accept: 'application/json',
|
||||
'X-Api-Key': apiKey
|
||||
}
|
||||
};
|
||||
const sendMsg = UrlFetchApp.fetch(api_url, settings);
|
||||
var uuidResponse = sendMsg.getContentText();
|
||||
var parsedata = JSON.parse(uuidResponse);
|
||||
try {
|
||||
var uuid = parsedata["data"][0]["id"];
|
||||
if (email != "") {
|
||||
findRow(email, uuid);
|
||||
}
|
||||
}
|
||||
catch(ex) {
|
||||
Logger.log(ex)
|
||||
continue
|
||||
}
|
||||
finally {
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
function findRow(email, uuid){
|
||||
var sheetRow = SpreadsheetApp.getActiveSpreadsheet();
|
||||
var data = sheetRow.getDataRange().getValues();
|
||||
for(var i = 0; i<data.length;i++){
|
||||
if(data[i][2] == email){ //[1] because column B
|
||||
// Logger.log((i+1))
|
||||
var row = i+1;
|
||||
propstoSheet(uuid, row);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function propstoSheet(uuid, row) {
|
||||
var uuid_url = 'https://api.northpass.com/v2/properties/people/'+uuid;
|
||||
const settings = {
|
||||
async: true,
|
||||
crossDomain: true,
|
||||
url: uuid_url,
|
||||
method: 'GET',
|
||||
headers: {
|
||||
accept: 'application/json',
|
||||
'X-Api-Key': apiKey,
|
||||
}
|
||||
};
|
||||
const sendMsg = UrlFetchApp.fetch(uuid_url, settings);
|
||||
var txtResponse = sendMsg.getContentText();
|
||||
var parseProps = JSON.parse(txtResponse);
|
||||
var user_id = parseProps["data"]["attributes"]["properties"]["account_number"];
|
||||
|
||||
if (user_id != 0) {
|
||||
// Write the Data to each row and column
|
||||
sheet.getRange(row, 6).setValue(user_id);
|
||||
} else {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function writeHeadings() {
|
||||
// Write the new Column Headings
|
||||
sheet.getRange(1, 6).setValue("PGA Number");
|
||||
}
|
||||
62
Scripts/GAS_NP/MizunoPGA/Test1.gs
Normal file
62
Scripts/GAS_NP/MizunoPGA/Test1.gs
Normal file
@ -0,0 +1,62 @@
|
||||
// Compiled using ts2gas 3.6.5 (TypeScript 4.3.2)
|
||||
var exports = exports || {};
|
||||
var module = module || { exports: exports };
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
//import {LongRun} from "../LongRun";
|
||||
function executeTest1() {
|
||||
var params = [];
|
||||
params.push(3); // How many times the process should be executed
|
||||
params.push(1); // How long does it take to process one case? (in seconds)
|
||||
params.push(1); // Maximum acceptable run time in seconds (less than 6 minutes, of course)
|
||||
params.push(1); // How many minutes later the next trigger will be activated
|
||||
LongRun.instance.setParameters('LongRunTask', params);
|
||||
LongRunTask();
|
||||
}
|
||||
function LongRunTask(
|
||||
// there must be no arguments, because the parameters must be retrieved from LongRun class.
|
||||
/* times: number, funcExecutionSeconds: number, maxExecutionSeconds: number, triggerDelayMinutes: number */
|
||||
) {
|
||||
var longRun = LongRun.instance;
|
||||
// funcName must equal this function's name.
|
||||
var funcName = 'LongRunTask';
|
||||
// you can get the parameters from LongRun class.
|
||||
var params = longRun.getParameters(funcName);
|
||||
var times = parseInt(params[0]);
|
||||
var funcExecutionSeconds = parseInt(params[1]);
|
||||
var maxExecutionSeconds = parseInt(params[2]);
|
||||
var triggerDelayMinutes = parseInt(params[3]);
|
||||
// you can set the long-running configurations. of course you can use the default values.
|
||||
longRun.setMaxExecutionSeconds(maxExecutionSeconds); // default is 240 seconds
|
||||
longRun.setTriggerDelayMinutes(triggerDelayMinutes); // default is 1 minute
|
||||
// you should get the index to resume(zero for the first time)
|
||||
var startIndex = longRun.startOrResume(funcName);
|
||||
if (startIndex === 0) {
|
||||
console.log('--- LongRunTask started. ---');
|
||||
}
|
||||
try {
|
||||
// Execute the iterative process.
|
||||
for (var i = startIndex; i < times; i++) {
|
||||
console.log('Processing: ' + i);
|
||||
// Each time before executing a process, you need to check if it should be stopped or not.
|
||||
if (longRun.checkShouldSuspend(funcName, i)) {
|
||||
// if checkShouldSuspend() returns true, the next trigger has been set
|
||||
// and you should get out of the loop.
|
||||
console.log('*** The process has been suspended. ***');
|
||||
break;
|
||||
}
|
||||
// *** code your main process here! ***
|
||||
Utilities.sleep(funcExecutionSeconds * 1000); // demonstrate the process
|
||||
console.log('Processing Done!: ' + i);
|
||||
}
|
||||
}
|
||||
catch (e) {
|
||||
console.log(e.message);
|
||||
}
|
||||
finally {
|
||||
// you must always call end() to reset the long-running variables if there is no next trigger.
|
||||
var finished = longRun.end(funcName);
|
||||
if (finished) {
|
||||
console.log('--- LongRunTask finished. ---');
|
||||
}
|
||||
}
|
||||
}
|
||||
7
Scripts/GAS_NP/MizunoPGA/appsscript.json
Normal file
7
Scripts/GAS_NP/MizunoPGA/appsscript.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"timeZone": "America/New_York",
|
||||
"dependencies": {
|
||||
},
|
||||
"exceptionLogging": "STACKDRIVER",
|
||||
"runtimeVersion": "V8"
|
||||
}
|
||||
1
Scripts/GAS_NP/Mizuno_running_props/.clasp.json
Normal file
1
Scripts/GAS_NP/Mizuno_running_props/.clasp.json
Normal file
@ -0,0 +1 @@
|
||||
{"scriptId":"1zpWkBv4TQb778uhXgOLNA_cLp5ENPmGHAP7tCJZ7ri41ocxfdAZCuLzp","rootDir":"/Users/normrasmussen/Documents/Work/Scripts/GoogleScripts/Mizuno_running_props"}
|
||||
@ -0,0 +1,86 @@
|
||||
const sheet = SpreadsheetApp.getActiveSheet();
|
||||
const apiKey = 'XeRrtgm0BFYPjOjPekVwCdGkW';
|
||||
|
||||
function getUuids() {
|
||||
var sheet = SpreadsheetApp.getActiveSheet();
|
||||
var numRows = sheet.getLastRow()-1; // Number of rows to process
|
||||
var dataRange = sheet.getRange(2, 3, numRows, 1);
|
||||
var values = dataRange.getValues();
|
||||
writeHeadings();
|
||||
|
||||
for (email in values){
|
||||
var row = values[email];
|
||||
var email = row[0];
|
||||
var api_url = 'https://api.northpass.com/v2/people/?filter[email][eq]='+email;
|
||||
const settings = {
|
||||
async: true,
|
||||
crossDomain: true,
|
||||
method: 'GET',
|
||||
headers: {
|
||||
accept: 'application/json',
|
||||
'X-Api-Key': apiKey
|
||||
}
|
||||
};
|
||||
const sendMsg = UrlFetchApp.fetch(api_url, settings);
|
||||
var uuidResponse = sendMsg.getContentText();
|
||||
var parsedata = JSON.parse(uuidResponse);
|
||||
try {
|
||||
var uuid = parsedata["data"][0]["id"];
|
||||
if (email != "") {
|
||||
Logger.log(email)
|
||||
findRow(email, uuid);
|
||||
}
|
||||
}
|
||||
catch(ex) {
|
||||
Logger.log(ex)
|
||||
continue
|
||||
}
|
||||
finally {
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
function findRow(email, uuid){
|
||||
var sheetRow = SpreadsheetApp.getActiveSpreadsheet();
|
||||
var data = sheetRow.getDataRange().getValues();
|
||||
for(var i = 0; i<data.length;i++){
|
||||
if(data[i][2] == email){ //[1] because column B
|
||||
var row = i+1;
|
||||
propstoSheet(uuid, row, email);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function propstoSheet(uuid, row, email) {
|
||||
var uuid_url = 'https://api.northpass.com/v2/properties/people/'+uuid;
|
||||
const settings = {
|
||||
async: true,
|
||||
crossDomain: true,
|
||||
url: uuid_url,
|
||||
method: 'GET',
|
||||
headers: {
|
||||
accept: 'application/json',
|
||||
'X-Api-Key': apiKey,
|
||||
}
|
||||
};
|
||||
const sendMsg = UrlFetchApp.fetch(uuid_url, settings);
|
||||
var txtResponse = sendMsg.getContentText();
|
||||
var parseProps = JSON.parse(txtResponse);
|
||||
Logger.log(parseProps)
|
||||
var role = parseProps["data"]["attributes"]["properties"]["city"];
|
||||
var user_id = parseProps["data"]["attributes"]["properties"]["state"];
|
||||
var paid = parseProps["data"]["attributes"]["properties"]["store_name"];
|
||||
|
||||
// Write the Data to each row and column
|
||||
sheet.getRange(row, 6).setValue(role);
|
||||
sheet.getRange(row, 7).setValue(user_id);
|
||||
sheet.getRange(row, 8).setValue(paid);
|
||||
// Logger.log(row + "," + email);
|
||||
}
|
||||
|
||||
function writeHeadings() {
|
||||
// Write the new Column Headings
|
||||
sheet.getRange(1, 6).setValue("City");
|
||||
sheet.getRange(1, 7).setValue("State");
|
||||
sheet.getRange(1, 8).setValue("Store Name");
|
||||
}
|
||||
7
Scripts/GAS_NP/Mizuno_running_props/appsscript.json
Normal file
7
Scripts/GAS_NP/Mizuno_running_props/appsscript.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"timeZone": "America/New_York",
|
||||
"dependencies": {
|
||||
},
|
||||
"exceptionLogging": "STACKDRIVER",
|
||||
"runtimeVersion": "V8"
|
||||
}
|
||||
1
Scripts/GAS_NP/Papa_Quiz/.clasp.json
Normal file
1
Scripts/GAS_NP/Papa_Quiz/.clasp.json
Normal file
@ -0,0 +1 @@
|
||||
{"scriptId":"1Mu3E-vjk8KvwFzZ_9HIEuhO-0aMMjZHCwtDLpXEpp82FA_1LZJGljSbZ","rootDir":"/Users/normrasmussen/Documents/Work/Scripts/GoogleScripts/Papa_Quiz"}
|
||||
56
Scripts/GAS_NP/Papa_Quiz/Code.js
Normal file
56
Scripts/GAS_NP/Papa_Quiz/Code.js
Normal file
@ -0,0 +1,56 @@
|
||||
function doGet(e) {
|
||||
return HtmlService.createHtmlOutput("get request received");
|
||||
}
|
||||
|
||||
//this is a function that fires when the webapp receives a POST request
|
||||
function doPost(e) {
|
||||
var params = JSON.stringify(e.postData.contents);
|
||||
params = JSON.parse(params);
|
||||
var now = new Date();
|
||||
var timeAdded = Utilities.formatDate(now,'America/New_York','MM/dd/yyyy');
|
||||
|
||||
var learnerName = params.substring(params.indexOf('{"name":"') + 7, params.lastIndexOf('"email"'));
|
||||
learnerName = learnerName.slice(learnerName.indexOf('"') + 1, learnerName.lastIndexOf('"'),);
|
||||
//Logger.log("Name = " + learnerName);
|
||||
|
||||
var learnerEmail = params.substring(params.indexOf('"sso_uid":"') + 9, params.lastIndexOf('"full_name"'));
|
||||
learnerEmail = learnerEmail.slice(learnerName.indexOf('"') + 3, learnerEmail.lastIndexOf('"'),);
|
||||
//Logger.log("Email = " + learnerEmail);
|
||||
|
||||
var courseName = params.substring(params.indexOf('"course_name":') + 4, params.lastIndexOf('}},{"id"'));
|
||||
courseName = courseName.slice(courseName.indexOf('"') + 3, courseName.lastIndexOf('"'),);
|
||||
//Logger.log("Course = " + courseName);
|
||||
|
||||
var activityName = params.substring(params.indexOf('"title":"') + 4, params.lastIndexOf('"course_name"'));
|
||||
activityName = activityName.slice(activityName.indexOf('"') + 3, activityName.lastIndexOf('"'),);
|
||||
//Logger.log("Activity = " + activityName);
|
||||
|
||||
var quizScore = params.substring(params.indexOf('"value":') + 8, params.lastIndexOf(',"created_at"'));
|
||||
//quizScore = quizScore.slice(quizScore.indexOf('"') + 3, quizScore.lastIndexOf('"'),);
|
||||
//Logger.log("Quiz Score = " + quizScore);
|
||||
|
||||
var dateCompleted = params.substring(params.indexOf('"updated_at":"') + 4, params.lastIndexOf('"activated_at"'));
|
||||
dateCompleted = dateCompleted.slice(dateCompleted.indexOf('"') + 3, dateCompleted.lastIndexOf('"'),);
|
||||
var localTime = new Date(dateCompleted);
|
||||
localTime = localTime.toString();
|
||||
localTime = localTime.slice(0,localTime.indexOf(' GMT'));
|
||||
//dateCompleted = dateCompleted.toString();
|
||||
//Logger.log("Completed on = " + dateCompleted);
|
||||
|
||||
var sheet = SpreadsheetApp.getActiveSheet();
|
||||
var lastRow = Math.max(sheet.getLastRow(),1);
|
||||
|
||||
sheet.insertRowAfter(lastRow);
|
||||
sheet.getRange(lastRow + 1, 1).setValue(timeAdded);
|
||||
sheet.getRange(lastRow + 1, 2).setValue(learnerName);
|
||||
sheet.getRange(lastRow + 1, 3).setValue(learnerEmail);
|
||||
sheet.getRange(lastRow + 1, 4).setValue(courseName);
|
||||
sheet.getRange(lastRow + 1, 5).setValue(activityName);
|
||||
sheet.getRange(lastRow + 1, 6).setValue(localTime);
|
||||
sheet.getRange(lastRow + 1, 7).setValue(quizScore+"%");
|
||||
sheet.getRange(lastRow + 1, 8).setValue(params);
|
||||
|
||||
|
||||
SpreadsheetApp.flush();
|
||||
return HtmlService.createHtmlOutput("post request received");
|
||||
}
|
||||
56
Scripts/GAS_NP/Papa_Quiz/WebhookParser.js
Normal file
56
Scripts/GAS_NP/Papa_Quiz/WebhookParser.js
Normal file
@ -0,0 +1,56 @@
|
||||
function doGet(e) {
|
||||
return HtmlService.createHtmlOutput("get request received");
|
||||
}
|
||||
|
||||
//this is a function that fires when the webapp receives a POST request
|
||||
function doPost(e) {
|
||||
var params = JSON.stringify(e.postData.contents);
|
||||
params = JSON.parse(params);
|
||||
var now = new Date();
|
||||
var timeAdded = Utilities.formatDate(now,'America/New_York','MM/dd/yyyy');
|
||||
|
||||
var learnerName = params.substring(params.indexOf('{"name":"') + 7, params.lastIndexOf('"email"'));
|
||||
learnerName = learnerName.slice(learnerName.indexOf('"') + 1, learnerName.lastIndexOf('"'),);
|
||||
//Logger.log("Name = " + learnerName);
|
||||
|
||||
var learnerEmail = params.substring(params.indexOf('"sso_uid":"') + 9, params.lastIndexOf('"full_name"'));
|
||||
learnerEmail = learnerEmail.slice(learnerName.indexOf('"') + 3, learnerEmail.lastIndexOf('"'),);
|
||||
//Logger.log("Email = " + learnerEmail);
|
||||
|
||||
var courseName = params.substring(params.indexOf('"course_name":') + 4, params.lastIndexOf('}},{"id"'));
|
||||
courseName = courseName.slice(courseName.indexOf('"') + 3, courseName.lastIndexOf('"'),);
|
||||
//Logger.log("Course = " + courseName);
|
||||
|
||||
var activityName = params.substring(params.indexOf('"title":"') + 4, params.lastIndexOf('"course_name"'));
|
||||
activityName = activityName.slice(activityName.indexOf('"') + 3, activityName.lastIndexOf('"'),);
|
||||
//Logger.log("Activity = " + activityName);
|
||||
|
||||
var quizScore = params.substring(params.indexOf('"value":') + 8, params.lastIndexOf(',"created_at"'));
|
||||
//quizScore = quizScore.slice(quizScore.indexOf('"') + 3, quizScore.lastIndexOf('"'),);
|
||||
//Logger.log("Quiz Score = " + quizScore);
|
||||
|
||||
var dateCompleted = params.substring(params.indexOf('"updated_at":"') + 4, params.lastIndexOf('"activated_at"'));
|
||||
dateCompleted = dateCompleted.slice(dateCompleted.indexOf('"') + 3, dateCompleted.lastIndexOf('"'),);
|
||||
var localTime = new Date(dateCompleted);
|
||||
localTime = localTime.toString();
|
||||
localTime = localTime.slice(0,localTime.indexOf(' GMT'));
|
||||
//dateCompleted = dateCompleted.toString();
|
||||
//Logger.log("Completed on = " + dateCompleted);
|
||||
|
||||
var sheet = SpreadsheetApp.getActiveSheet();
|
||||
var lastRow = Math.max(sheet.getLastRow(),1);
|
||||
|
||||
sheet.insertRowAfter(lastRow);
|
||||
sheet.getRange(lastRow + 1, 1).setValue(timeAdded);
|
||||
sheet.getRange(lastRow + 1, 2).setValue(learnerName);
|
||||
sheet.getRange(lastRow + 1, 3).setValue(learnerEmail);
|
||||
sheet.getRange(lastRow + 1, 4).setValue(courseName);
|
||||
sheet.getRange(lastRow + 1, 5).setValue(activityName);
|
||||
sheet.getRange(lastRow + 1, 6).setValue(localTime);
|
||||
sheet.getRange(lastRow + 1, 7).setValue(quizScore+"%");
|
||||
sheet.getRange(lastRow + 1, 8).setValue(params);
|
||||
|
||||
|
||||
SpreadsheetApp.flush();
|
||||
return HtmlService.createHtmlOutput("post request received");
|
||||
}
|
||||
10
Scripts/GAS_NP/Papa_Quiz/appsscript.json
Normal file
10
Scripts/GAS_NP/Papa_Quiz/appsscript.json
Normal file
@ -0,0 +1,10 @@
|
||||
{
|
||||
"timeZone": "America/New_York",
|
||||
"dependencies": {},
|
||||
"exceptionLogging": "STACKDRIVER",
|
||||
"runtimeVersion": "V8",
|
||||
"webapp": {
|
||||
"executeAs": "USER_DEPLOYING",
|
||||
"access": "ANYONE_ANONYMOUS"
|
||||
}
|
||||
}
|
||||
1
Scripts/GAS_NP/SDR_Meetings/.clasp.json
Normal file
1
Scripts/GAS_NP/SDR_Meetings/.clasp.json
Normal file
@ -0,0 +1 @@
|
||||
{"scriptId":"11ghDxFT1kf_3PLsjOUcd3isFIXoJtyNzu2mEbhdci53nJXYTpSRHYJxl","rootDir":"/Users/normrasmussen/Documents/Northpass/Google_Scripts/SDR_Meetings"}
|
||||
110
Scripts/GAS_NP/SDR_Meetings/NewMeetings.js
Normal file
110
Scripts/GAS_NP/SDR_Meetings/NewMeetings.js
Normal file
@ -0,0 +1,110 @@
|
||||
const sheetTwo = SpreadsheetApp.getActiveSheet();
|
||||
var now = new Date();
|
||||
var formatToday = Utilities.formatDate(now, 'America/New_York', 'MM/dd/yyyy');
|
||||
|
||||
function newMeetings() {
|
||||
var startRow = 2; // First row of data to process
|
||||
var numRows = sheetTwo.getLastRow()-1; // Number of rows to process
|
||||
var dataRange = sheetTwo.getRange(startRow, 1, numRows, sheet.getLastColumn());
|
||||
var data = dataRange.getValues();
|
||||
var sdrMeeting = [];
|
||||
|
||||
for (i in data) {
|
||||
var row = data[i];
|
||||
var sdr = row[0]; // Column A
|
||||
var date = Utilities.formatDate(row[3],'America/New_York','MM/dd/yyyy'); // Column D
|
||||
var company = row[4]; // Column E
|
||||
var outbound = row[5]; // Column F
|
||||
let sdrMeetingListOne = [sdr, date, company, outbound];
|
||||
if ((sdrMeetingListOne[1] == formatToday) && (sdrMeetingListOne[0] != '') && (sdrMeetingListOne[3] == "Outbound")) {
|
||||
sdrMeetingListOne.toString();
|
||||
sdrMeeting.push(sdrMeetingListOne);
|
||||
Logger.log(sdrMeetingListOne)
|
||||
} else if ((sdrMeetingListOne[1] == formatToday) && (sdrMeetingListOne[0] != '')) {
|
||||
let noMeetingText =
|
||||
{
|
||||
"blocks": [
|
||||
{
|
||||
"type": "section",
|
||||
"text": {
|
||||
"type": "mrkdwn",
|
||||
"text": ":star: *C'mon team!* :star:"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "divider"
|
||||
},
|
||||
{
|
||||
"type": "section",
|
||||
"text": {
|
||||
"type": "mrkdwn",
|
||||
"text": "No new meetings today? We can do better than that! Hustle!"
|
||||
}
|
||||
},
|
||||
]
|
||||
}
|
||||
const webhook = "https://hooks.slack.com/services/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";
|
||||
const options = {
|
||||
method: "post",
|
||||
contentType: "application/json",
|
||||
muteHttpExceptions: true,
|
||||
payload: JSON.stringify(noMeetingText),
|
||||
}
|
||||
const sendMsg = UrlFetchApp.fetch(webhook, options);
|
||||
var respCode = sendMsg.getResponseCode();
|
||||
Logger.log(sendMsg);
|
||||
Logger.log(respCode);
|
||||
}
|
||||
};
|
||||
Logger.log(sdrMeeting);
|
||||
var toSend = sdrMeeting.splice(1).join('\n');
|
||||
var getEm = toSend.replace(/,/g, ' - ')
|
||||
Logger.log(getEm)
|
||||
/*
|
||||
let payloadMeetingText =
|
||||
{
|
||||
"blocks": [
|
||||
{
|
||||
"type": "section",
|
||||
"text": {
|
||||
"type": "mrkdwn",
|
||||
"text": ":star: *Pitter Patter!* :star:"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "divider"
|
||||
},
|
||||
{
|
||||
"type": "section",
|
||||
"text": {
|
||||
"type": "mrkdwn",
|
||||
"text": "Here's who has meetings today. Get after it boys and girls!"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "section",
|
||||
"text": {
|
||||
"type": "mrkdwn",
|
||||
"text": getEm
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "image",
|
||||
"image_url": "https://media.giphy.com/media/3ohjURBuAtWDV8d3SE/giphy.gif",
|
||||
"alt_text": "inspiration"
|
||||
}
|
||||
]
|
||||
}
|
||||
//(array[0] + ", you still need to fill out the cells for" + array[2] + " from " + array[1] + "!\n");
|
||||
const webhook = "https://hooks.slack.com/services/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";
|
||||
const options = {
|
||||
method: "post",
|
||||
contentType: "application/json",
|
||||
muteHttpExceptions: true,
|
||||
payload: JSON.stringify(payloadText),
|
||||
};
|
||||
const sendMsg = UrlFetchApp.fetch(webhook, options);
|
||||
var respCode = sendMsg.getResponseCode();
|
||||
Logger.log(sendMsg);
|
||||
Logger.log(respCode);*/
|
||||
};
|
||||
7
Scripts/GAS_NP/SDR_Meetings/appsscript.json
Normal file
7
Scripts/GAS_NP/SDR_Meetings/appsscript.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"timeZone": "America/New_York",
|
||||
"dependencies": {
|
||||
},
|
||||
"exceptionLogging": "STACKDRIVER",
|
||||
"runtimeVersion": "V8"
|
||||
}
|
||||
1
Scripts/GAS_NP/Sheets_to_Jira/.clasp.json
Normal file
1
Scripts/GAS_NP/Sheets_to_Jira/.clasp.json
Normal file
@ -0,0 +1 @@
|
||||
{"scriptId":"1VUbCbC6whkodvYSfTSmaFCNVxowtahxUHaKcr7Dg_Ly0vevBLqlDWmdS","rootDir":"/Users/normrasmussen/Documents/Northpass/Google_Scripts/Sheets_to_Jira"}
|
||||
108
Scripts/GAS_NP/Sheets_to_Jira/IntoJira.js
Normal file
108
Scripts/GAS_NP/Sheets_to_Jira/IntoJira.js
Normal file
@ -0,0 +1,108 @@
|
||||
/* Pertinent Information and Codes:
|
||||
Custom Fields:
|
||||
Channel = customfield_10121
|
||||
Campaign = customfield_10120
|
||||
SDR = customfield_10122
|
||||
Start Date = customfield_10015
|
||||
|
||||
Prior to making this publicly available, I added a commented list of users & their account numbers.
|
||||
|
||||
Without accounts: Adan, Drew
|
||||
|
||||
*/
|
||||
function myFunction() {
|
||||
var URL = "https://your_company.atlassian.net/rest/api/3/issue/";
|
||||
var token = "api_toke_goes_here";
|
||||
var user = "user@company.com";
|
||||
var UserCredentials = Utilities.base64Encode(user + ":" + token);
|
||||
|
||||
// Setting up data range and empty arrays
|
||||
const sheet = SpreadsheetApp.getActiveSheet();
|
||||
var startRow = 2; // First col of data to process
|
||||
var numRows = 1132; // Number of rows to process
|
||||
var dataRange = sheet.getRange(startRow, 1, numRows, sheet.getLastColumn()).getValues();
|
||||
|
||||
for (col in dataRange) { // For a data col within the entire data range
|
||||
var col = dataRange[col];
|
||||
let sdr = col[0]; // Column - A
|
||||
let name = col[1]; // Column - B
|
||||
let bookingDate = Utilities.formatDate(col[2], "America/New_York", "MM/dd/yyyy"); // Column - C
|
||||
let meetingDate = Utilities.formatDate(col[3], "America/New_York", "MM/dd/yyyy"); // Column - D
|
||||
let rawDate = Utilities.formatDate(col[3], "America/New_York", "yyyy-MM-dd");
|
||||
let company = col[4]; // Column - E
|
||||
let channel = col[5]; // Column - F
|
||||
let result = col[7]; // Column - H
|
||||
let campaign = col[8]; // Column - I
|
||||
let info = col[9]; // Column - J
|
||||
let list = [sdr, name, rawDate, bookingDate, meetingDate, company, channel, result, campaign, info];
|
||||
let sdrDict = {
|
||||
"Mike" :
|
||||
"account_num_goes_here",
|
||||
"Nick" :
|
||||
"account_num_goes_here",
|
||||
"Appleby" :
|
||||
"account_num_goes_here",
|
||||
"Doug" :
|
||||
"account_num_goes_here",
|
||||
"Quba" :
|
||||
"account_num_goes_here",
|
||||
};
|
||||
if (list.includes("Norm")) {
|
||||
var data = {
|
||||
"fields": {
|
||||
"project": {
|
||||
"key": "NPIPE",
|
||||
},
|
||||
"issuetype": {
|
||||
"id": "10275",
|
||||
},
|
||||
"summary": list[5],
|
||||
"description": {
|
||||
"type": "doc",
|
||||
"version": 1,
|
||||
"content": [
|
||||
{
|
||||
"type": "paragraph",
|
||||
"content": [
|
||||
{
|
||||
"type": "text",
|
||||
"text": "Booked Date - " + list[3] + '\n' +
|
||||
"Meeting Date - " + list[4] + '\n' +
|
||||
"Description from Tracker: " + list[9] + '\n' +
|
||||
"Last Status - " + list[7]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
},
|
||||
"customfield_10015": list[2], // Start (Meeting) Date - rawDate
|
||||
"customfield_10127": [ // Campaign
|
||||
list[8],
|
||||
],
|
||||
"customfield_10128": [ // Channel
|
||||
list[6],
|
||||
],
|
||||
"customfield_10129": [{"id" : sdrDict[list[0]]}], // SDR
|
||||
}
|
||||
},
|
||||
payload = JSON.stringify(data);
|
||||
Logger.log(payload);
|
||||
var headers = {
|
||||
"Accept": "application/json",
|
||||
"Content-Type": "application/json",
|
||||
"Authorization": "Basic " + UserCredentials,
|
||||
"muteHttpExceptions": true,
|
||||
}
|
||||
var options = {
|
||||
"method": "POST",
|
||||
"headers": headers,
|
||||
"payload": payload
|
||||
}
|
||||
//Logger.log(options);
|
||||
var response = UrlFetchApp.fetch(URL, options);
|
||||
//Logger.log(response);
|
||||
var respCode = response.getResponseCode();
|
||||
//Logger.log(respCode);
|
||||
}
|
||||
}
|
||||
};
|
||||
7
Scripts/GAS_NP/Sheets_to_Jira/appsscript.json
Normal file
7
Scripts/GAS_NP/Sheets_to_Jira/appsscript.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"timeZone": "America/New_York",
|
||||
"dependencies": {
|
||||
},
|
||||
"exceptionLogging": "STACKDRIVER",
|
||||
"runtimeVersion": "V8"
|
||||
}
|
||||
1
Scripts/GAS_NP/Spark_Searches/.clasp.json
Normal file
1
Scripts/GAS_NP/Spark_Searches/.clasp.json
Normal file
@ -0,0 +1 @@
|
||||
{"scriptId":"1MKnp8LwiUqKNo_uVxDVQ5EeSmgH7UFMAEoQbuZhWfpP_eH-JcxixIvc4","rootDir":"/Users/normrasmussen/Documents/Work/Scripts/GoogleScripts/Spark_Searches"}
|
||||
18
Scripts/GAS_NP/Spark_Searches/README.md
Normal file
18
Scripts/GAS_NP/Spark_Searches/README.md
Normal file
@ -0,0 +1,18 @@
|
||||
# Formulas for Sheet
|
||||
|
||||
The original Google Sheet: "https://docs.google.com/spreadsheets/d/1l8zbWulK_sgWZcrje02cazZo2OEJy59Cw9sYA0p3-Sk/edit#gid=2067280028"
|
||||
|
||||
List of Formulas you will need along with the sheet and Cell:
|
||||
|
||||
| Sheet | Cell | Formula|
|
||||
|------|------|------|
|
||||
| 4 (Formulas) | A2 | =WORDS(FullData!B2:B5000) |
|
||||
| 4 (Formulas) | B2 | =ArrayFormula(IFNA(regexextract(A:A, "^\w{1,2}$"),)) |
|
||||
| 4 (Formulas) | C2 | =ArrayFormula(IFNA(regexextract(A:A, "^\w{3,4}$"),)) |
|
||||
| 4 (Formulas) | D2 | =ArrayFormula(IFNA(regexextract(A:A, "^\w{5,20}$"),)) |
|
||||
| 3 (Analysis) | A3 | =unique(filter(flatten(Formulas!B3:B), len(flatten(Formulas!B3:B)))) |
|
||||
| 3 (Analysis) | B3 | =COUNTA(IFNA(FILTER(FullData!B2:B, REGEXMATCH(FullData!B2:B, "(?i)"&A3&"(?-i)")))) |
|
||||
| 3 (Analysis) | D3 | =unique(filter(flatten(Formulas!C3:C), len(flatten(Formulas!C3:C)))) |
|
||||
| 3 (Analysis) | E3 | =COUNTA(IFNA(FILTER(FullData!$B$2:$B$5000, REGEXMATCH(FullData!$B$2:$B$5000, "(?i)"&D3&"(?-i)")))) |
|
||||
| 3 (Analysis) | G3 | =unique(filter(flatten(Formulas!D3:D), len(flatten(Formulas!D3:D)))) |
|
||||
| 3 (Analysis) | H3 | =COUNTA(IFNA(FILTER(FullData!$B$2:$B$5000, REGEXMATCH(FullData!$B$2:$B$5000, "(?i)"&G3&"(?-i)")))) |
|
||||
11
Scripts/GAS_NP/Spark_Searches/Words.js
Normal file
11
Scripts/GAS_NP/Spark_Searches/Words.js
Normal file
@ -0,0 +1,11 @@
|
||||
function WORDS(input) {
|
||||
var input = input.toString();
|
||||
var inputSplit = input.split(" ");
|
||||
Logger.log(inputSplit);
|
||||
inputSplit = inputSplit.toString();
|
||||
|
||||
var punctuationless = inputSplit.replace(/[.,\/"#!$%\?^&\*;:{}=\-_`~()]/g," ");
|
||||
var finalString = punctuationless.replace(/\s{1,5}/g," ");
|
||||
finalString = finalString.toLowerCase();
|
||||
return finalString.split(" ");
|
||||
}
|
||||
7
Scripts/GAS_NP/Spark_Searches/appsscript.json
Normal file
7
Scripts/GAS_NP/Spark_Searches/appsscript.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"timeZone": "America/New_York",
|
||||
"dependencies": {
|
||||
},
|
||||
"exceptionLogging": "STACKDRIVER",
|
||||
"runtimeVersion": "V8"
|
||||
}
|
||||
1
Scripts/GAS_NP/TS_Tests/.clasp.json
Normal file
1
Scripts/GAS_NP/TS_Tests/.clasp.json
Normal file
@ -0,0 +1 @@
|
||||
{"scriptId":"1Ezp_qTdiqvnQ1UjbyHOliax03WZqu-H_BBxMNBnwRmDJ-V36WyJ9a_hj","rootDir":"/Users/normrasmussen/Documents/Northpass/Scripts/GoogleScripts/TS_Tests"}
|
||||
86
Scripts/GAS_NP/TS_Tests/Code.js
Normal file
86
Scripts/GAS_NP/TS_Tests/Code.js
Normal file
@ -0,0 +1,86 @@
|
||||
const sheet = SpreadsheetApp.getActiveSheet();
|
||||
const apiKey = '18Zl2NAzWTE09FHbNEBngNOJO';
|
||||
|
||||
function getUuids() {
|
||||
var sheet = SpreadsheetApp.getActiveSheet();
|
||||
var numRows = sheet.getLastRow()-1; // Number of rows to process
|
||||
var dataRange = sheet.getRange(3, 3, numRows, 1);
|
||||
var values = dataRange.getValues();
|
||||
writeHeadings();
|
||||
|
||||
for (email in values){
|
||||
var row = values[email];
|
||||
var email = row[0]
|
||||
var api_url = 'https://api.northpass.com/v2/people/?filter[email][eq]='+email;
|
||||
const settings = {
|
||||
async: true,
|
||||
crossDomain: true,
|
||||
method: 'GET',
|
||||
headers: {
|
||||
accept: 'application/json',
|
||||
'X-Api-Key': apiKey
|
||||
}
|
||||
};
|
||||
const sendMsg = UrlFetchApp.fetch(api_url, settings);
|
||||
var uuidResponse = sendMsg.getContentText();
|
||||
var parsedata = JSON.parse(uuidResponse);
|
||||
try {
|
||||
var uuid = parsedata["data"][0]["id"];
|
||||
if (email != "") {
|
||||
findRow(email, uuid);
|
||||
}
|
||||
}
|
||||
catch(ex) {
|
||||
Logger.log(ex)
|
||||
continue
|
||||
}
|
||||
finally {
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
function findRow(email, uuid){
|
||||
var sheetRow = SpreadsheetApp.getActiveSpreadsheet();
|
||||
var data = sheetRow.getDataRange().getValues();
|
||||
for(var i = 0; i<data.length;i++){
|
||||
if(data[i][2] == email){ //[1] because column B
|
||||
// Logger.log((i+1))
|
||||
var row = i+1;
|
||||
propstoSheet(uuid, row, email);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function propstoSheet(uuid, row, email) {
|
||||
var uuid_url = 'https://api.northpass.com/v2/properties/people/'+uuid;
|
||||
const settings = {
|
||||
async: true,
|
||||
crossDomain: true,
|
||||
url: uuid_url,
|
||||
method: 'GET',
|
||||
headers: {
|
||||
accept: 'application/json',
|
||||
'X-Api-Key': apiKey,
|
||||
}
|
||||
};
|
||||
const sendMsg = UrlFetchApp.fetch(uuid_url, settings);
|
||||
var txtResponse = sendMsg.getContentText();
|
||||
var parseProps = JSON.parse(txtResponse);
|
||||
var role = parseProps["data"]["attributes"]["properties"]["role_type"];
|
||||
var user_id = parseProps["data"]["attributes"]["properties"]["user_id"];
|
||||
var paid = parseProps["data"]["attributes"]["properties"]["paid"];
|
||||
|
||||
// Write the Data to each row and column
|
||||
sheet.getRange(row, 17).setValue(role);
|
||||
sheet.getRange(row, 18).setValue(user_id);
|
||||
sheet.getRange(row, 19).setValue(paid);
|
||||
// Logger.log(row + "," + email);
|
||||
}
|
||||
|
||||
function writeHeadings() {
|
||||
// Write the new Column Headings
|
||||
sheet.getRange(1, 17).setValue("Role");
|
||||
sheet.getRange(1, 18).setValue("ID Number");
|
||||
sheet.getRange(1, 18).clearFormat();
|
||||
sheet.getRange(1, 19).setValue("Paid?");
|
||||
}
|
||||
10
Scripts/GAS_NP/TS_Tests/appsscript.json
Normal file
10
Scripts/GAS_NP/TS_Tests/appsscript.json
Normal file
@ -0,0 +1,10 @@
|
||||
{
|
||||
"timeZone": "America/New_York",
|
||||
"dependencies": {},
|
||||
"exceptionLogging": "STACKDRIVER",
|
||||
"runtimeVersion": "V8",
|
||||
"webapp": {
|
||||
"executeAs": "USER_DEPLOYING",
|
||||
"access": "ANYONE_ANONYMOUS"
|
||||
}
|
||||
}
|
||||
1
Scripts/GAS_NP/Talkspace_BBHR/.clasp.json
Normal file
1
Scripts/GAS_NP/Talkspace_BBHR/.clasp.json
Normal file
@ -0,0 +1 @@
|
||||
{"scriptId":"1fpmVgeHRDeloPnTHHnlFqsmAGERjxWB7qlyDx3rpeB8el3oHfOaRMcZl","rootDir":"/Users/normrasmussen/Documents/Work/Scripts/GoogleScripts/Talkspace_BBHR"}
|
||||
57
Scripts/GAS_NP/Talkspace_BBHR/TalkspaceBBHR.js
Normal file
57
Scripts/GAS_NP/Talkspace_BBHR/TalkspaceBBHR.js
Normal file
@ -0,0 +1,57 @@
|
||||
function checkBamboo() {
|
||||
const apiKey = 'okhjnTXhK2L96z2TKswBXeHeK';
|
||||
var api_url = 'https://api.northpass.com/v2/apps/bamboo_hr';
|
||||
const settings = {
|
||||
async: true,
|
||||
crossDomain: true,
|
||||
method: 'GET',
|
||||
headers: {
|
||||
accept: 'application/json',
|
||||
'X-Api-Key': apiKey
|
||||
}
|
||||
};
|
||||
const sendMsg = UrlFetchApp.fetch(api_url, settings);
|
||||
var txtResponse = sendMsg.getContentText();
|
||||
var parseProps = JSON.parse(txtResponse);
|
||||
var switched_on = parseProps["data"]["attributes"]["switched_on"];
|
||||
var configured = parseProps["data"]["attributes"]["configured"];
|
||||
|
||||
var now = new Date();
|
||||
var datetime = Utilities.formatDate(now, 'America/New_York', 'MM/dd/yyyy - HH:mm'); // Today
|
||||
|
||||
// var emailQuotaRemaining = MailApp.getRemainingDailyQuota();
|
||||
// console.log(emailQuotaRemaining)
|
||||
|
||||
// This is just for testing purposes tp make sure the emails work. This setup did.
|
||||
// MailApp.sendEmail("nrasmussen@northpass.com",
|
||||
// "cbencivenga@northpass.com",
|
||||
// "BambooHR Is Down",
|
||||
// "Your Bamboo HR Integration is currently turned off."
|
||||
// );
|
||||
|
||||
if (switched_on == "false" && configured == "false") {
|
||||
MailApp.sendEmail("nrasmussen@northpass.com",
|
||||
"BambooHR Is Down",
|
||||
"Your Bamboo HR Integration is currently turned off."
|
||||
);
|
||||
}
|
||||
|
||||
if (switched_on == "false" && configured == "false") {
|
||||
MailApp.sendEmail("jenna.cherry@talkspace.com",
|
||||
"BambooHR Is Down",
|
||||
"Your Bamboo HR Integration is currently turned off."
|
||||
);
|
||||
}
|
||||
|
||||
// var sheet = SpreadsheetApp.openById('1dJJ4no9j4sJ8fKvhxh6mGiailv4YyI0EsqvjJPYVtIM');
|
||||
var ss = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/1dJJ4no9j4sJ8fKvhxh6mGiailv4YyI0EsqvjJPYVtIM/');
|
||||
var sheet = ss.getActiveSheet();
|
||||
var lastRow = sheet.getLastRow()+1;
|
||||
console.log(lastRow)
|
||||
sheet.getRange(lastRow, 1).setValue(datetime);
|
||||
sheet.getRange(lastRow, 2).setValue(switched_on);
|
||||
sheet.getRange(lastRow, 3).setValue(configured);
|
||||
}
|
||||
|
||||
|
||||
|
||||
7
Scripts/GAS_NP/Talkspace_BBHR/appsscript.json
Normal file
7
Scripts/GAS_NP/Talkspace_BBHR/appsscript.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"timeZone": "America/New_York",
|
||||
"dependencies": {
|
||||
},
|
||||
"exceptionLogging": "STACKDRIVER",
|
||||
"runtimeVersion": "V8"
|
||||
}
|
||||
1
Scripts/GAS_NP/Talkspace_GroupProg/.clasp.json
Normal file
1
Scripts/GAS_NP/Talkspace_GroupProg/.clasp.json
Normal file
@ -0,0 +1 @@
|
||||
{"scriptId":"1bQmNUsajsg6_PNupRskhkg7DvMGs2-uBreKmcdfjtQO69947qvZeJNqW","rootDir":"/Users/normrasmussen/Documents/Northpass/Scripts/GoogleScripts/Talkspace_GroupProg"}
|
||||
86
Scripts/GAS_NP/Talkspace_GroupProg/Code.js
Normal file
86
Scripts/GAS_NP/Talkspace_GroupProg/Code.js
Normal file
@ -0,0 +1,86 @@
|
||||
const sheet = SpreadsheetApp.getActiveSheet();
|
||||
const apiKey = 'jpfQoIc2i5S6iq4saFjBOEkbt';
|
||||
|
||||
function getUuids() {
|
||||
var sheet = SpreadsheetApp.getActiveSheet();
|
||||
var numRows = sheet.getLastRow()-1; // Number of rows to process
|
||||
var dataRange = sheet.getRange(3, 3, numRows, 1);
|
||||
var values = dataRange.getValues();
|
||||
writeHeadings();
|
||||
|
||||
for (email in values){
|
||||
var row = values[email];
|
||||
var email = row[0]
|
||||
var api_url = 'https://api.northpass.com/v2/people/?filter[email][eq]='+email;
|
||||
const settings = {
|
||||
async: true,
|
||||
crossDomain: true,
|
||||
method: 'GET',
|
||||
headers: {
|
||||
accept: 'application/json',
|
||||
'X-Api-Key': apiKey
|
||||
}
|
||||
};
|
||||
const sendMsg = UrlFetchApp.fetch(api_url, settings);
|
||||
var uuidResponse = sendMsg.getContentText();
|
||||
var parsedata = JSON.parse(uuidResponse);
|
||||
try {
|
||||
var uuid = parsedata["data"][0]["id"];
|
||||
if (email != "") {
|
||||
findRow(email, uuid);
|
||||
}
|
||||
}
|
||||
catch(ex) {
|
||||
Logger.log(ex)
|
||||
continue
|
||||
}
|
||||
finally {
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
function findRow(email, uuid){
|
||||
var sheetRow = SpreadsheetApp.getActiveSpreadsheet();
|
||||
var data = sheetRow.getDataRange().getValues();
|
||||
for(var i = 0; i<data.length;i++){
|
||||
if(data[i][2] == email){ //[1] because column B
|
||||
// Logger.log((i+1))
|
||||
var row = i+1;
|
||||
propstoSheet(uuid, row, email);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function propstoSheet(uuid, row, email) {
|
||||
var uuid_url = 'https://api.northpass.com/v2/properties/people/'+uuid;
|
||||
const settings = {
|
||||
async: true,
|
||||
crossDomain: true,
|
||||
url: uuid_url,
|
||||
method: 'GET',
|
||||
headers: {
|
||||
accept: 'application/json',
|
||||
'X-Api-Key': apiKey,
|
||||
}
|
||||
};
|
||||
const sendMsg = UrlFetchApp.fetch(uuid_url, settings);
|
||||
var txtResponse = sendMsg.getContentText();
|
||||
var parseProps = JSON.parse(txtResponse);
|
||||
var role = parseProps["data"]["attributes"]["properties"]["role_type"];
|
||||
var user_id = parseProps["data"]["attributes"]["properties"]["user_id"];
|
||||
var paid = parseProps["data"]["attributes"]["properties"]["paid"];
|
||||
|
||||
// Write the Data to each row and column
|
||||
sheet.getRange(row, 13).setValue(role);
|
||||
sheet.getRange(row, 14).setValue(user_id);
|
||||
sheet.getRange(row, 15).setValue(paid);
|
||||
// Logger.log(row + "," + email);
|
||||
}
|
||||
|
||||
function writeHeadings() {
|
||||
// Write the new Column Headings
|
||||
sheet.getRange(1, 13).setValue("Role");
|
||||
sheet.getRange(1, 14).setValue("ID Number");
|
||||
sheet.getRange(1, 14).clearFormat();
|
||||
sheet.getRange(1, 15).setValue("Paid?");
|
||||
}
|
||||
7
Scripts/GAS_NP/Talkspace_GroupProg/appsscript.json
Normal file
7
Scripts/GAS_NP/Talkspace_GroupProg/appsscript.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"timeZone": "America/New_York",
|
||||
"dependencies": {
|
||||
},
|
||||
"exceptionLogging": "STACKDRIVER",
|
||||
"runtimeVersion": "V8"
|
||||
}
|
||||
1
Scripts/GAS_NP/WCA_Webhook/.clasp.json
Normal file
1
Scripts/GAS_NP/WCA_Webhook/.clasp.json
Normal file
@ -0,0 +1 @@
|
||||
{"scriptId":"1NKCzBIDEvcD4HUFEXadwtoGbElLem0g0asxQO4lWjCxyp5B-yMvSZnMD","rootDir":"/Users/normrasmussen/Documents/Northpass/Google_Scripts/WCA_Webhook"}
|
||||
47
Scripts/GAS_NP/WCA_Webhook/Code.js
Normal file
47
Scripts/GAS_NP/WCA_Webhook/Code.js
Normal file
@ -0,0 +1,47 @@
|
||||
function doGet(e) {
|
||||
return HtmlService.createHtmlOutput("get request received");
|
||||
}
|
||||
|
||||
//this is a function that fires when the webapp receives a POST request
|
||||
function doPost(e) {
|
||||
var params = JSON.stringify(e.postData.contents);
|
||||
params = JSON.parse(params);
|
||||
var now = new Date();
|
||||
var timeAdded = Utilities.formatDate(now,'America/New_York','MM/dd/yyyy');
|
||||
|
||||
var learnerName = params.substring(params.indexOf('{"name":"') + 7, params.lastIndexOf('"email"'));
|
||||
learnerName = learnerName.slice(learnerName.indexOf('"') + 1, learnerName.lastIndexOf('"'),);
|
||||
//Logger.log("Name = " + learnerName);
|
||||
|
||||
var learnerEmail = params.substring(params.indexOf('"sso_uid":"') + 9, params.lastIndexOf('"full_name"'));
|
||||
learnerEmail = learnerEmail.slice(learnerName.indexOf('"') + 3, learnerEmail.lastIndexOf('"'),);
|
||||
//Logger.log("Email = " + learnerEmail);
|
||||
|
||||
var courseName = params.substring(params.indexOf('"course_name":"') + 4, params.lastIndexOf('"attributes"'));
|
||||
courseName = courseName.slice(courseName.indexOf('"') + 3, courseName.lastIndexOf('"'),);
|
||||
//Logger.log("Course = " + courseName);
|
||||
|
||||
var activityName = params.substring(params.indexOf('"title":"') + 4, params.lastIndexOf('"course_name"'));
|
||||
activityName = activityName.slice(activityName.indexOf('"') + 3, activityName.lastIndexOf('"'),);
|
||||
//Logger.log("Activity = " + activityName);
|
||||
|
||||
var dateCompleted = params.substring(params.indexOf('"updated_at":"') + 4, params.lastIndexOf('"activated_at"'));
|
||||
dateCompleted = dateCompleted.slice(dateCompleted.indexOf('"') + 3, dateCompleted.lastIndexOf('"'),);
|
||||
//Logger.log("Completed on = " + dateCompleted);
|
||||
|
||||
var sheet = SpreadsheetApp.getActiveSheet();
|
||||
var lastRow = Math.max(sheet.getLastRow(),1);
|
||||
|
||||
sheet.insertRowAfter(lastRow);
|
||||
sheet.getRange(lastRow + 1, 1).setValue(timeAdded);
|
||||
sheet.getRange(lastRow + 1, 2).setValue(learnerName);
|
||||
sheet.getRange(lastRow + 1, 3).setValue(learnerEmail);
|
||||
sheet.getRange(lastRow + 1, 4).setValue(courseName);
|
||||
sheet.getRange(lastRow + 1, 5).setValue(activityName);
|
||||
sheet.getRange(lastRow + 1, 6).setValue(dateCompleted);
|
||||
sheet.getRange(lastRow + 1, 7).setValue(params);
|
||||
|
||||
|
||||
SpreadsheetApp.flush();
|
||||
return HtmlService.createHtmlOutput("post request received");
|
||||
}
|
||||
10
Scripts/GAS_NP/WCA_Webhook/appsscript.json
Normal file
10
Scripts/GAS_NP/WCA_Webhook/appsscript.json
Normal file
@ -0,0 +1,10 @@
|
||||
{
|
||||
"timeZone": "America/New_York",
|
||||
"dependencies": {},
|
||||
"exceptionLogging": "STACKDRIVER",
|
||||
"runtimeVersion": "V8",
|
||||
"webapp": {
|
||||
"executeAs": "USER_DEPLOYING",
|
||||
"access": "ANYONE_ANONYMOUS"
|
||||
}
|
||||
}
|
||||
1
Scripts/GAS_NP/WildHealth_Assignments_PSA1/.clasp.json
Normal file
1
Scripts/GAS_NP/WildHealth_Assignments_PSA1/.clasp.json
Normal file
@ -0,0 +1 @@
|
||||
{"scriptId":"1lX_lzT7xRA-13vMq63ZPxBYj8fmz4UwgR403PV5juue1NW7sCi6NSWqq","rootDir":"/Users/normrasmussen/Documents/Work/Scripts/GoogleScripts/WildHealth_Assignments_PSA1"}
|
||||
@ -0,0 +1,93 @@
|
||||
/* This function needs to run either once a day OR after a webhook that contains the course name.
|
||||
Date range: 2/1/23 - 7/31/23
|
||||
|
||||
Order of operations:
|
||||
- Parse Webhook, if course name == Coaching Certification, assignment == Practice Coaching Session 3 (PSA),
|
||||
Activity name == Step 1: Practice Coaching Session 3 - Recording Upload
|
||||
- GET List Assignments: https://api.northpass.com/v2/assignments/{assignment_uuid}/submissions
|
||||
- GET Person https://api.northpass.com/v2/people/{uuid}
|
||||
|
||||
Fill in columns: Date Submitted, Person's Name, Email, Assignment Name, Assignment Download Link.
|
||||
|
||||
|
||||
UUIDS:
|
||||
Activity: a94171bb-0184-433e-a62d-2b8c67ad196e
|
||||
Course: 03bb0fa0-df1f-4f40-b550-b59b113fd79f
|
||||
Assignment: a4e082a2-9416-4fdf-9ef6-a817e25d26ee
|
||||
API Key: HWxj6VTNPwbc3WghFTPzr7SjE
|
||||
*/
|
||||
|
||||
const sheet = SpreadsheetApp.getActiveSheet();
|
||||
const apiKey = "HWxj6VTNPwbc3WghFTPzr7SjE";
|
||||
var assign_uid = "c6e05c41-082e-4027-9e2e-49d3c5a7c5a0"
|
||||
let page = 1;
|
||||
|
||||
function getAssignment() {
|
||||
clearPrevData()
|
||||
for (let page = 1; page <= 50; page++) {
|
||||
var api_url =
|
||||
'https://api.northpass.com/v2/assignments/'+assign_uid+'/submissions?page='+page;
|
||||
Logger.log(api_url)
|
||||
const settings = {
|
||||
async: true,
|
||||
crossDomain: true,
|
||||
method: 'GET',
|
||||
headers: {
|
||||
accept: 'application/json',
|
||||
'X-Api-Key': apiKey
|
||||
}
|
||||
}
|
||||
const sendMsg = UrlFetchApp.fetch(api_url, settings);
|
||||
var apiResponse = sendMsg.getContentText();
|
||||
var parsedata = JSON.parse(apiResponse);
|
||||
var data = parsedata["data"];
|
||||
if (data.length != 0){
|
||||
let rowArray = []
|
||||
for (item of data) {
|
||||
var submit_date = item["attributes"]["created_at"];
|
||||
var person = item["relationships"]["person"]["data"]["id"];
|
||||
Logger.log(person)
|
||||
var download_link = item["links"]["download"];
|
||||
var person_url = 'https://api.northpass.com/v2/people/'+person;
|
||||
const settings = {
|
||||
async: true,
|
||||
crossDomain: true,
|
||||
method: 'GET',
|
||||
headers: {
|
||||
accept: 'application/json',
|
||||
'X-Api-Key': apiKey
|
||||
}
|
||||
};
|
||||
const sendMsg = UrlFetchApp.fetch(person_url, settings);
|
||||
var uuidResponse = sendMsg.getContentText();
|
||||
var parsing = JSON.parse(uuidResponse);
|
||||
var info = parsing["data"]
|
||||
var full_name = info["attributes"]["full_name"];
|
||||
var email = info["attributes"]["email"];
|
||||
let rowArray = [submit_date, download_link, person, full_name, email];
|
||||
addToSheet(rowArray);
|
||||
};
|
||||
} else {
|
||||
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
function clearPrevData() {
|
||||
var range = SpreadsheetApp
|
||||
.getActiveSheet()
|
||||
.getRange(2,1,100,15);
|
||||
range.clearContent()
|
||||
}
|
||||
|
||||
function addToSheet(rowArray){
|
||||
Logger.log("Adding to sheet function")
|
||||
var sheet = SpreadsheetApp.getActiveSheet();
|
||||
var lastRow = Math.max(sheet.getLastRow(),1);
|
||||
|
||||
sheet.insertRowAfter(lastRow);
|
||||
sheet.getRange(lastRow + 1, 1).setValue(rowArray[0]);
|
||||
sheet.getRange(lastRow + 1, 2).setValue(rowArray[3]);
|
||||
sheet.getRange(lastRow + 1, 3).setValue(rowArray[4]);
|
||||
sheet.getRange(lastRow + 1, 4).setValue(rowArray[1]);
|
||||
}
|
||||
@ -0,0 +1,7 @@
|
||||
{
|
||||
"timeZone": "America/New_York",
|
||||
"dependencies": {
|
||||
},
|
||||
"exceptionLogging": "STACKDRIVER",
|
||||
"runtimeVersion": "V8"
|
||||
}
|
||||
1
Scripts/GAS_NP/WildHealth_Assignments_PSA2/.clasp.json
Normal file
1
Scripts/GAS_NP/WildHealth_Assignments_PSA2/.clasp.json
Normal file
@ -0,0 +1 @@
|
||||
{"scriptId":"1Z2Q8woLoLOVUUJe_HthEJ8M9a27-EpGVXGVDf4__qGTcC89q3EkDi7r1","rootDir":"/Users/normrasmussen/Documents/Work/Scripts/GoogleScripts/WildHealth_Assignments_PSA2"}
|
||||
@ -0,0 +1,91 @@
|
||||
/* This function needs to run either once a day OR after a webhook that contains the course name.
|
||||
Date range: 2/1/23 - 7/31/23
|
||||
|
||||
Order of operations:
|
||||
- Parse Webhook, if course name == Coaching Certification, assignment == Practice Coaching Session 3 (PSA),
|
||||
Activity name == Step 1: Practice Coaching Session 3 - Recording Upload
|
||||
- GET List Assignments: https://api.northpass.com/v2/assignments/{assignment_uuid}/submissions
|
||||
- GET Person https://api.northpass.com/v2/people/{uuid}
|
||||
|
||||
Fill in columns: Date Submitted, Person's Name, Email, Assignment Name, Assignment Download Link.
|
||||
|
||||
|
||||
UUIDS:
|
||||
Activity: a94171bb-0184-433e-a62d-2b8c67ad196e
|
||||
Course: 03bb0fa0-df1f-4f40-b550-b59b113fd79f
|
||||
Assignment: a4e082a2-9416-4fdf-9ef6-a817e25d26ee
|
||||
API Key: HWxj6VTNPwbc3WghFTPzr7SjE
|
||||
*/
|
||||
|
||||
const sheet = SpreadsheetApp.getActiveSheet();
|
||||
const apiKey = "HWxj6VTNPwbc3WghFTPzr7SjE";
|
||||
var assign_uid = "17c5917a-2ee6-4d9f-af89-5831282fc64b"
|
||||
let page = 1;
|
||||
|
||||
function getAssignment() {
|
||||
clearPrevData()
|
||||
for (let page = 1; page <= 50; page++) {
|
||||
var api_url =
|
||||
'https://api.northpass.com/v2/assignments/'+assign_uid+'/submissions?page='+page;
|
||||
Logger.log(api_url)
|
||||
const settings = {
|
||||
async: true,
|
||||
crossDomain: true,
|
||||
method: 'GET',
|
||||
headers: {
|
||||
accept: 'application/json',
|
||||
'X-Api-Key': apiKey
|
||||
}
|
||||
}
|
||||
const sendMsg = UrlFetchApp.fetch(api_url, settings);
|
||||
var apiResponse = sendMsg.getContentText();
|
||||
var parsedata = JSON.parse(apiResponse);
|
||||
var data = parsedata["data"];
|
||||
if (data.length != 0){
|
||||
let rowArray = []
|
||||
for (item of data) {
|
||||
var submit_date = item["attributes"]["created_at"];
|
||||
var person = item["relationships"]["person"]["data"]["id"];
|
||||
var download_link = item["links"]["download"];
|
||||
var person_url = 'https://api.northpass.com/v2/people/'+person;
|
||||
const settings = {
|
||||
async: true,
|
||||
crossDomain: true,
|
||||
method: 'GET',
|
||||
headers: {
|
||||
accept: 'application/json',
|
||||
'X-Api-Key': apiKey
|
||||
}
|
||||
};
|
||||
const sendMsg = UrlFetchApp.fetch(person_url, settings);
|
||||
var uuidResponse = sendMsg.getContentText();
|
||||
var parsing = JSON.parse(uuidResponse);
|
||||
var info = parsing["data"]
|
||||
var full_name = info["attributes"]["full_name"];
|
||||
var email = info["attributes"]["email"];
|
||||
let rowArray = [submit_date, download_link, person, full_name, email];
|
||||
addToSheet(rowArray);
|
||||
};
|
||||
} else {
|
||||
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
function clearPrevData() {
|
||||
var range = SpreadsheetApp
|
||||
.getActiveSheet()
|
||||
.getRange(2,1,100,15);
|
||||
range.clearContent()
|
||||
}
|
||||
|
||||
function addToSheet(rowArray){
|
||||
var sheet = SpreadsheetApp.getActiveSheet();
|
||||
var lastRow = Math.max(sheet.getLastRow(),1);
|
||||
|
||||
sheet.insertRowAfter(lastRow);
|
||||
sheet.getRange(lastRow + 1, 1).setValue(rowArray[0]);
|
||||
sheet.getRange(lastRow + 1, 2).setValue(rowArray[3]);
|
||||
sheet.getRange(lastRow + 1, 3).setValue(rowArray[4]);
|
||||
sheet.getRange(lastRow + 1, 4).setValue(rowArray[1]);
|
||||
}
|
||||
@ -0,0 +1,7 @@
|
||||
{
|
||||
"timeZone": "America/New_York",
|
||||
"dependencies": {
|
||||
},
|
||||
"exceptionLogging": "STACKDRIVER",
|
||||
"runtimeVersion": "V8"
|
||||
}
|
||||
1
Scripts/GAS_NP/WildHealth_Assignments_PSA3/.clasp.json
Normal file
1
Scripts/GAS_NP/WildHealth_Assignments_PSA3/.clasp.json
Normal file
@ -0,0 +1 @@
|
||||
{"scriptId":"1d5KE9m40T5mUNH80zmbiVpjP9eQIu23WX2syWZfBRcqPBPEmFjp27fvd","rootDir":"/Users/normrasmussen/Documents/Work/Scripts/GoogleScripts/WildHealth_Assignments_PSA3"}
|
||||
@ -0,0 +1,93 @@
|
||||
/* This function needs to run either once a day OR after a webhook that contains the course name.
|
||||
Date range: 2/1/23 - 7/31/23
|
||||
|
||||
Order of operations:
|
||||
- Parse Webhook, if course name == Coaching Certification, assignment == Practice Coaching Session 3 (PSA),
|
||||
Activity name == Step 1: Practice Coaching Session 3 - Recording Upload
|
||||
- GET List Assignments: https://api.northpass.com/v2/assignments/{assignment_uuid}/submissions
|
||||
- GET Person https://api.northpass.com/v2/people/{uuid}
|
||||
|
||||
Fill in columns: Date Submitted, Person's Name, Email, Assignment Name, Assignment Download Link.
|
||||
|
||||
|
||||
UUIDS:
|
||||
Activity: a94171bb-0184-433e-a62d-2b8c67ad196e
|
||||
Course: 03bb0fa0-df1f-4f40-b550-b59b113fd79f
|
||||
Assignment: a4e082a2-9416-4fdf-9ef6-a817e25d26ee
|
||||
API Key: HWxj6VTNPwbc3WghFTPzr7SjE
|
||||
*/
|
||||
|
||||
// const sheet = SpreadsheetApp.getActiveSheet();
|
||||
const apiKey = "HWxj6VTNPwbc3WghFTPzr7SjE";
|
||||
var assign_uid = "a4e082a2-9416-4fdf-9ef6-a817e25d26ee"
|
||||
let page = 1;
|
||||
|
||||
function getAssignment() {
|
||||
clearPrevData()
|
||||
for (let page = 1; page <= 50; page++) {
|
||||
var api_url =
|
||||
'https://api.northpass.com/v2/assignments/'+assign_uid+'/submissions?page='+page;
|
||||
Logger.log(api_url)
|
||||
const settings = {
|
||||
async: true,
|
||||
crossDomain: true,
|
||||
method: 'GET',
|
||||
headers: {
|
||||
accept: 'application/json',
|
||||
'X-Api-Key': apiKey
|
||||
}
|
||||
}
|
||||
const sendMsg = UrlFetchApp.fetch(api_url, settings);
|
||||
var apiResponse = sendMsg.getContentText();
|
||||
var parsedata = JSON.parse(apiResponse);
|
||||
var data = parsedata["data"];
|
||||
if (data.length != 0){
|
||||
let rowArray = []
|
||||
for (item of data) {
|
||||
var submit_date = item["attributes"]["created_at"];
|
||||
var person = item["relationships"]["person"]["data"]["id"];
|
||||
Logger.log(person)
|
||||
var download_link = item["links"]["download"];
|
||||
var person_url = 'https://api.northpass.com/v2/people/'+person;
|
||||
const settings = {
|
||||
async: true,
|
||||
crossDomain: true,
|
||||
method: 'GET',
|
||||
headers: {
|
||||
accept: 'application/json',
|
||||
'X-Api-Key': apiKey
|
||||
}
|
||||
};
|
||||
const sendMsg = UrlFetchApp.fetch(person_url, settings);
|
||||
var uuidResponse = sendMsg.getContentText();
|
||||
var parsing = JSON.parse(uuidResponse);
|
||||
var info = parsing["data"]
|
||||
var full_name = info["attributes"]["full_name"];
|
||||
var email = info["attributes"]["email"];
|
||||
let rowArray = [submit_date, download_link, person, full_name, email];
|
||||
addToSheet(rowArray);
|
||||
};
|
||||
} else {
|
||||
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
function clearPrevData() {
|
||||
var range = SpreadsheetApp
|
||||
.getActiveSheet()
|
||||
.getRange(2,1,100,15);
|
||||
range.clearContent()
|
||||
}
|
||||
|
||||
function addToSheet(rowArray){
|
||||
Logger.log("Adding to sheet function")
|
||||
var sheet = SpreadsheetApp.getActiveSheet();
|
||||
var lastRow = Math.max(sheet.getLastRow(),1);
|
||||
|
||||
sheet.insertRowAfter(lastRow);
|
||||
sheet.getRange(lastRow + 1, 1).setValue(rowArray[0]);
|
||||
sheet.getRange(lastRow + 1, 2).setValue(rowArray[3]);
|
||||
sheet.getRange(lastRow + 1, 3).setValue(rowArray[4]);
|
||||
sheet.getRange(lastRow + 1, 4).setValue(rowArray[1]);
|
||||
}
|
||||
@ -0,0 +1,7 @@
|
||||
{
|
||||
"timeZone": "America/New_York",
|
||||
"dependencies": {
|
||||
},
|
||||
"exceptionLogging": "STACKDRIVER",
|
||||
"runtimeVersion": "V8"
|
||||
}
|
||||
Reference in New Issue
Block a user