From fce96a5ea6a0db081664319666f31c9701ef7fe3 Mon Sep 17 00:00:00 2001 From: Norm Rasmussen Date: Mon, 7 Nov 2022 10:36:13 -0500 Subject: [PATCH] DV,Walmart, API Tests --- CustomerNotes/HappyCulture.md | 24 +++++++++ CustomerNotes/WoundCareAdvantage.md | 14 +++++ NP_Root_Startpage/app.js | 10 +--- NP_Root_Startpage/index.html | 33 +++++------- Scripts/TalkspaceUsers/usercomparison.py | 51 ++++++++++++++---- Scripts/WalmartExcel/walmart_numeric.py | 4 +- Timetagger/_timetagger/users/norm~bm9ybQ==.db | Bin 159744 -> 159744 bytes 7 files changed, 96 insertions(+), 40 deletions(-) create mode 100644 CustomerNotes/HappyCulture.md create mode 100644 CustomerNotes/WoundCareAdvantage.md diff --git a/CustomerNotes/HappyCulture.md b/CustomerNotes/HappyCulture.md new file mode 100644 index 00000000..7ac064a5 --- /dev/null +++ b/CustomerNotes/HappyCulture.md @@ -0,0 +1,24 @@ +## 11/4/2022 +### Conversation with Justine regarding Contract +* They are heavily funded by the Canandian Government +* FY is April - March +* Gov't was very forgiving during the pandemic +* This year, they are not funding any training _unless_ there is a mechanism for immedieate feedback +* HC also invested a lot of money on content creation, videographers, etc. +* As such, will not be renewing with Northpass. +* They need to convert all their stuff into man power, which is less profitable +* This is challenging their structure and profitability +* They need to prove to clients that within a year, they will reach their ROI for the training + +* What's covered and what isn't by the Government: + * 20 people in training + * HC charges 12 hours of online training, for example + * The only way that is covered if the 20 people are together, watching together, providing feedback to each other. + * But that 12 hour could only be charged once. So it would have to be a 12 hour sitting. + * Then each 20 would have to book with the instructors for 1:1 coaching + * That would be a ton of hours per employee, a huge sunk cost + +* How are they going to change their business model? + * 2k per head, minimum 10 people clients + * Break that 2k into small chunks and charge x * 10 or x*20 depending on the number of people + diff --git a/CustomerNotes/WoundCareAdvantage.md b/CustomerNotes/WoundCareAdvantage.md new file mode 100644 index 00000000..2a26dae7 --- /dev/null +++ b/CustomerNotes/WoundCareAdvantage.md @@ -0,0 +1,14 @@ +## 11/4/2022 +### Analytics for Q4 +* For individual activities: + * The Webhook Sheet, is good to go. +* For x center she needs # of courses started, # completed. Filtered MCA? + * In numbers not percentages + * Centers are Groups + * It is hard to pull by group because other people add nurses but don't put them into a specific group. + * She needs to add certain people into their group + * They have SSO, through Okta + * Ideally, she will have people in groups AND with their position + * And she needs this for every single group in the school. + * If someone isn't active, no need to pull them in. +* Her numbers are due in December. She did it manually for Q3. They send out the numbers in the first weeks of the new quarter. diff --git a/NP_Root_Startpage/app.js b/NP_Root_Startpage/app.js index e623f6c9..5bc24138 100644 --- a/NP_Root_Startpage/app.js +++ b/NP_Root_Startpage/app.js @@ -11,52 +11,44 @@ const CARDS = [ name: "Northpass Admin", icon: "ri-admin-line", link: "https://app.northpass.com/admin", - clipboard: false, }, { name: "Gmail", icon: "ri-mail-line", link: "https://gmail.com", - clipboard: false, }, { name: "Calendar", icon: "ri-calendar-line", link: "https://calendar.google.com", - clipboard: false, }, { name: "Hubspot", icon: "ri-space-ship-line", link: "https://app.hubspot.com/reports-dashboard/392014/view/8969543", - clipboard: false, }, { name: "Jira - SE Board", icon: "ri-open-arm-fill", link: "https://northpass.atlassian.net/jira/software/c/projects/ES/boards/1", - clipboard: false, }, { name: "Chili Piper - 30 Min", icon: "ri-calendar-2-line", link: "https://northpass.na.chilipiper.com/book/me/norm-rasmussen", - cliprboad: true, + clipboard: true, }, { name: "Looker - External", icon: "ri-bubble-chart-line", link: "https://northpass.looker.com/folders/4976", - clipboard: false, }, { name: "Looker - Internal", icon: "ri-bubble-chart-fill", link: "https://northpasshq.looker.com/dashboards/21", - clipboard: false, }, ]; - /* -------------------------------------------------------- */ /******************/ diff --git a/NP_Root_Startpage/index.html b/NP_Root_Startpage/index.html index ca16c5cd..352e6226 100644 --- a/NP_Root_Startpage/index.html +++ b/NP_Root_Startpage/index.html @@ -12,30 +12,21 @@ root: ~# - + -
-
-

Hello, Norm!.

-

Today is Monday 1, January 2000.

-
-

00:00 PM

-
-
+
+
+
+

Hello there, John Doe.

+

Today is Monday 1, January 2000.

+
+

00:00 PM

+
+
+
- - diff --git a/Scripts/TalkspaceUsers/usercomparison.py b/Scripts/TalkspaceUsers/usercomparison.py index f83b191e..f9ab6ec4 100644 --- a/Scripts/TalkspaceUsers/usercomparison.py +++ b/Scripts/TalkspaceUsers/usercomparison.py @@ -1,15 +1,48 @@ import csv from Levenshtein import distance as lev +import pandas as pd +import itertools import sys -x = lev("nrasmussen", "mrasmussen") -print(x) +peopleCsv = "/Users/normrasmussen/Downloads/TalkspaceAllLearners.csv" -#def readSpreadsheet(): -# with open('talkspace.csv', rb) as csvfile: -# for line in csvfile.readlines(): -# array = line.split(',') -# emailcol = array[3] +def readCsv(peopleCsv): + people = [] + readExport = pd.read_csv( + peopleCsv, + usecols=['Learner Full Name', 'Email'], + skipinitialspace=True, + #index_col=True, + ) + people.extend(readExport['Email'].tolist()) + startCompare(peopleCsv, people, readExport) -#def compareemails(): -# levenshtein.distance(email1, email2) +# itertools combinations +def startCompare(peopleCsv, people, readExport): + email1 = [] + email2 = [] + for name1, name2, in itertools.combinations(people, 2): + #print(name1, name2) - prints all pairs, working so far. + distance = lev(name1, name2) + #print(distance) - successfully returns numbers + if distance > 0 and distance < 2: + email1.append(name1) + email2.append(name2) + writenewColumn(email1, email2, peopleCsv, readExport) + +def writenewColumn(email1, email2, peopleCsv, readExport): + df = pd.DataFrame(readExport) + print(df) + df['Email1'] = pd.Series(email1) + df['Email2'] = pd.Series(email2) + df.drop_duplicates('Email1', inplace=True) + df.drop_duplicates('Email2', inplace=True) + df.drop_duplicates( + subset=['Email1', 'Email2']) + #keep = 'last').reset_index(drop=True) + writeLst = df.to_csv( + '/Users/normrasmussen/Downloads/TalkspaceDupes_singlechange.csv', + ) + +if __name__ == "__main__": + readCsv(peopleCsv) diff --git a/Scripts/WalmartExcel/walmart_numeric.py b/Scripts/WalmartExcel/walmart_numeric.py index 275aa693..95685e6b 100644 --- a/Scripts/WalmartExcel/walmart_numeric.py +++ b/Scripts/WalmartExcel/walmart_numeric.py @@ -40,9 +40,11 @@ def copytoDash(latestdownload, currentDash): regex="Unname" ),axis=1, inplace=True) + +def progressFormat(latestdownload, currentDash, readExport): + df = pd.DataFrame(readExport) readExport['Progress_replace'] = readExport['Progress'].str.replace('%','') readExport['Progress_replace'] = pd.to_numeric(readExport['Progress_replace']) - copiedData = readExport.copy() bringtoExcel(latestdownload, currentDash, copiedData) #cleanitUp(latestdownload, currentDash, copiedData) diff --git a/Timetagger/_timetagger/users/norm~bm9ybQ==.db b/Timetagger/_timetagger/users/norm~bm9ybQ==.db index bd87612d0b60121183962cf3f615948e5e9373df..b0c5d3dd1f37b3e52208fdc620172578538127c9 100644 GIT binary patch delta 7790 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 Mt#R<@KB|!a5B-wCpa1{>