Walmart notes. Zenjob Assignment Script backed up. Reorged some directories.

This commit is contained in:
Norm Rasmussen
2023-08-09 18:17:31 -04:00
parent e5c9674186
commit b9fe8d640b
80 changed files with 123 additions and 375 deletions

View File

@ -0,0 +1 @@
{"scriptId":"1TJplbGBnAl-BN8Kuw5jrC3b8LHCSmkrZUvG_KDMTgwQBfESlWL2lDJd4","rootDir":"/Users/normrasmussen/Documents/Northpass/Google_Scripts/AE_Reminders"}

View 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
}
};

View File

@ -0,0 +1,7 @@
{
"timeZone": "America/New_York",
"dependencies": {
},
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8"
}

View File

@ -0,0 +1 @@
{"scriptId":"1Pl974LOqn-gSiO4sbjIteQCSyxhmVxgKGsld7qiwxfwANfEEgmGgsMGj","rootDir":"/Users/normrasmussen/Documents/Northpass/Scripts/GoogleScripts/Artera_wowprog"}

View 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 +")");
}

View 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
}

View File

@ -0,0 +1,7 @@
{
"timeZone": "America/New_York",
"dependencies": {
},
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8"
}

View File

@ -0,0 +1 @@
{"scriptId":"1ZUQXaSRZHjVpzJBBFuHdfnLijMJ5jf3swTbonwXJ3nrgeMIh9ffCqe7j","rootDir":"/Users/normrasmussen/Documents/Work/Scripts/GoogleScripts/Confluence_Test"}

View 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);
}

View File

@ -0,0 +1,7 @@
{
"timeZone": "America/New_York",
"dependencies": {
},
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8"
}

View File

@ -0,0 +1 @@
{"scriptId":"1TM7cFM57LKm9BoB21N9sCD7j_KDy9z1zrqGDXV8clcwXVwgOKJBpz_0J","rootDir":"/Users/normrasmussen/Documents/Work/Scripts/GoogleScripts/Courtney_Confluence"}

View 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));
}
}
}

View 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);
}

View File

@ -0,0 +1,7 @@
{
"timeZone": "America/New_York",
"dependencies": {
},
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8"
}

View File

@ -0,0 +1 @@
{"scriptId":"1bG7euzp-k-XWRrCkTEwdOLYxuLgIMgzKcfvWjdOKU226uYPC7aTU_JfJ","rootDir":"/Users/normrasmussen/Documents/Northpass/Google_Scripts/Dept_Calendar"}

View 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);
}

View File

@ -0,0 +1,7 @@
{
"timeZone": "America/New_York",
"dependencies": {
},
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8"
}

View File

@ -0,0 +1 @@
{"scriptId":"13jMb_qCijEsEwZMcsx28oYQrKEKm-HlE0yKkz7xLOWmcykwK9YZz_nDG","rootDir":"/Users/normrasmussen/Documents/Work/Scripts/GoogleScripts/Doximity"}

View File

@ -0,0 +1,7 @@
{
"timeZone": "America/New_York",
"dependencies": {
},
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8"
}

View 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)');
};
}
}

View File

@ -0,0 +1,3 @@
function getProps() {
}

View File

@ -0,0 +1 @@
{"scriptId":"17cLm8wwin--btQr0A6G_QkxOeT2Q3QnL8mEup8ZThMTAPwrUw2qsyg6N","rootDir":"/Users/normrasmussen/Documents/Work/Scripts/GoogleScripts/Harri_Get_Props"}

View 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");
}

View File

@ -0,0 +1,7 @@
{
"timeZone": "America/New_York",
"dependencies": {
},
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8"
}

View File

@ -0,0 +1 @@
{"scriptId":"1s6f3wOHnnkJXNH6RoO5_NBfT5xJh62RPBm5LdGS7cgBlsfgPCnNxheIE","rootDir":"/Users/normrasmussen/Documents/Work/Scripts/GoogleScripts/Luminate_API_Exam"}

View 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");
}

View File

@ -0,0 +1 @@
{"scriptId":"1YHgQUXTmBttTnbZH1O9n5IVuX0Ymr9GIBcL2mfpLWmtvv7UhrwlJQZC_","rootDir":"/Users/normrasmussen/Documents/Work/Scripts/GoogleScripts/MizunoPGA"}

View 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);
// }
//}

View 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 + ')');
}
}
}

View 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 + ')');
}
}
}

View 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");
}

View 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. ---');
}
}
}

View File

@ -0,0 +1,7 @@
{
"timeZone": "America/New_York",
"dependencies": {
},
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8"
}

View File

@ -0,0 +1 @@
{"scriptId":"1zpWkBv4TQb778uhXgOLNA_cLp5ENPmGHAP7tCJZ7ri41ocxfdAZCuLzp","rootDir":"/Users/normrasmussen/Documents/Work/Scripts/GoogleScripts/Mizuno_running_props"}

View File

@ -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");
}

View File

@ -0,0 +1,7 @@
{
"timeZone": "America/New_York",
"dependencies": {
},
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8"
}

View File

@ -0,0 +1 @@
{"scriptId":"1Mu3E-vjk8KvwFzZ_9HIEuhO-0aMMjZHCwtDLpXEpp82FA_1LZJGljSbZ","rootDir":"/Users/normrasmussen/Documents/Work/Scripts/GoogleScripts/Papa_Quiz"}

View 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");
}

View 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");
}

View File

@ -0,0 +1,10 @@
{
"timeZone": "America/New_York",
"dependencies": {},
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8",
"webapp": {
"executeAs": "USER_DEPLOYING",
"access": "ANYONE_ANONYMOUS"
}
}

View File

@ -0,0 +1 @@
{"scriptId":"11ghDxFT1kf_3PLsjOUcd3isFIXoJtyNzu2mEbhdci53nJXYTpSRHYJxl","rootDir":"/Users/normrasmussen/Documents/Northpass/Google_Scripts/SDR_Meetings"}

View 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);*/
};

View File

@ -0,0 +1,7 @@
{
"timeZone": "America/New_York",
"dependencies": {
},
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8"
}

View File

@ -0,0 +1 @@
{"scriptId":"1VUbCbC6whkodvYSfTSmaFCNVxowtahxUHaKcr7Dg_Ly0vevBLqlDWmdS","rootDir":"/Users/normrasmussen/Documents/Northpass/Google_Scripts/Sheets_to_Jira"}

View 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);
}
}
};

View File

@ -0,0 +1,7 @@
{
"timeZone": "America/New_York",
"dependencies": {
},
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8"
}

View File

@ -0,0 +1 @@
{"scriptId":"1MKnp8LwiUqKNo_uVxDVQ5EeSmgH7UFMAEoQbuZhWfpP_eH-JcxixIvc4","rootDir":"/Users/normrasmussen/Documents/Work/Scripts/GoogleScripts/Spark_Searches"}

View 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)")))) |

View 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(" ");
}

View File

@ -0,0 +1,7 @@
{
"timeZone": "America/New_York",
"dependencies": {
},
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8"
}

View File

@ -0,0 +1 @@
{"scriptId":"1Ezp_qTdiqvnQ1UjbyHOliax03WZqu-H_BBxMNBnwRmDJ-V36WyJ9a_hj","rootDir":"/Users/normrasmussen/Documents/Northpass/Scripts/GoogleScripts/TS_Tests"}

View 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?");
}

View File

@ -0,0 +1,10 @@
{
"timeZone": "America/New_York",
"dependencies": {},
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8",
"webapp": {
"executeAs": "USER_DEPLOYING",
"access": "ANYONE_ANONYMOUS"
}
}

View File

@ -0,0 +1 @@
{"scriptId":"1fpmVgeHRDeloPnTHHnlFqsmAGERjxWB7qlyDx3rpeB8el3oHfOaRMcZl","rootDir":"/Users/normrasmussen/Documents/Work/Scripts/GoogleScripts/Talkspace_BBHR"}

View 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);
}

View File

@ -0,0 +1,7 @@
{
"timeZone": "America/New_York",
"dependencies": {
},
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8"
}

View File

@ -0,0 +1 @@
{"scriptId":"1bQmNUsajsg6_PNupRskhkg7DvMGs2-uBreKmcdfjtQO69947qvZeJNqW","rootDir":"/Users/normrasmussen/Documents/Northpass/Scripts/GoogleScripts/Talkspace_GroupProg"}

View 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?");
}

View File

@ -0,0 +1,7 @@
{
"timeZone": "America/New_York",
"dependencies": {
},
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8"
}

View File

@ -0,0 +1 @@
{"scriptId":"1NKCzBIDEvcD4HUFEXadwtoGbElLem0g0asxQO4lWjCxyp5B-yMvSZnMD","rootDir":"/Users/normrasmussen/Documents/Northpass/Google_Scripts/WCA_Webhook"}

View 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");
}

View File

@ -0,0 +1,10 @@
{
"timeZone": "America/New_York",
"dependencies": {},
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8",
"webapp": {
"executeAs": "USER_DEPLOYING",
"access": "ANYONE_ANONYMOUS"
}
}

View File

@ -0,0 +1 @@
{"scriptId":"1lX_lzT7xRA-13vMq63ZPxBYj8fmz4UwgR403PV5juue1NW7sCi6NSWqq","rootDir":"/Users/normrasmussen/Documents/Work/Scripts/GoogleScripts/WildHealth_Assignments_PSA1"}

View File

@ -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]);
}

View File

@ -0,0 +1,7 @@
{
"timeZone": "America/New_York",
"dependencies": {
},
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8"
}

View File

@ -0,0 +1 @@
{"scriptId":"1Z2Q8woLoLOVUUJe_HthEJ8M9a27-EpGVXGVDf4__qGTcC89q3EkDi7r1","rootDir":"/Users/normrasmussen/Documents/Work/Scripts/GoogleScripts/WildHealth_Assignments_PSA2"}

View File

@ -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]);
}

View File

@ -0,0 +1,7 @@
{
"timeZone": "America/New_York",
"dependencies": {
},
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8"
}

View File

@ -0,0 +1 @@
{"scriptId":"1d5KE9m40T5mUNH80zmbiVpjP9eQIu23WX2syWZfBRcqPBPEmFjp27fvd","rootDir":"/Users/normrasmussen/Documents/Work/Scripts/GoogleScripts/WildHealth_Assignments_PSA3"}

View File

@ -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]);
}

View File

@ -0,0 +1,7 @@
{
"timeZone": "America/New_York",
"dependencies": {
},
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8"
}