finished workflow for sandata - even though they cancelled the launch! Worked on Anthology's group based course extractions.
This commit is contained in:
@ -32,7 +32,7 @@
|
|||||||
<i class="np-card-training-sessions-icon far fa-calendar-star"></i>
|
<i class="np-card-training-sessions-icon far fa-calendar-star"></i>
|
||||||
<span class="np-card-training-sessions-label">
|
<span class="np-card-training-sessions-label">
|
||||||
{% if training_event.sessions.size > 1 %}
|
{% if training_event.sessions.size > 1 %}
|
||||||
Multiple Sessions
|
Additional Sessions
|
||||||
{% else %}
|
{% else %}
|
||||||
{% t .sessions, count: training_event.sessions.size %}
|
{% t .sessions, count: training_event.sessions.size %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|||||||
BIN
Custom_Templates/customer_templates/Sandata Learn/.DS_Store
vendored
Normal file
BIN
Custom_Templates/customer_templates/Sandata Learn/.DS_Store
vendored
Normal file
Binary file not shown.
@ -1,6 +1,6 @@
|
|||||||
<div class="np-dashboard-resources-container">
|
<div class="np-dashboard-resources-container">
|
||||||
<div class="np-zero-state-text">
|
<div class="np-zero-state-text">
|
||||||
{{ message }}
|
New Courses Coming Soon!
|
||||||
</div>
|
</div>
|
||||||
<img class="np-zero-state-courses" alt="{{ message }}" />
|
<img class="np-zero-state-courses" alt="{{ message }}" />
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -1,3 +1,8 @@
|
|||||||
{% styles default %}
|
{% styles default %}
|
||||||
{% styles colors %}
|
{% styles colors %}
|
||||||
{% styles custom %}
|
{% styles custom %}
|
||||||
|
|
||||||
|
<script
|
||||||
|
src="https://code.jquery.com/jquery-3.6.3.min.js"
|
||||||
|
integrity="sha256-pvPw+upLPUjgMXY0G+8O0xUf+/Im1MZjXxxgOcBQBXU="
|
||||||
|
crossorigin="anonymous"></script>
|
||||||
@ -1,3 +1,27 @@
|
|||||||
|
{% if current_person.signed_in? %}
|
||||||
|
{% unless current_person.email contains "+preview" %}
|
||||||
|
{% assign groups_count = 0 %}
|
||||||
|
|
||||||
|
{% for group in current_person.groups %}
|
||||||
|
{% assign groups_count = groups_count | plus: 1 %}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
<script>
|
||||||
|
const groupsCount = {{groups_count}}
|
||||||
|
if (groupsCount == 0) {
|
||||||
|
if (!window.location.href.includes("/invite")) {
|
||||||
|
console.log("not /invite page")
|
||||||
|
if (localStorage.getItem('completed-second-registration') != null) {
|
||||||
|
console.log("Local Storage Item found from Secondary registration")
|
||||||
|
} else {
|
||||||
|
window.location.replace('/app/sign-up-follow-up')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
{% endunless %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
<header class="np-header np-header-color">
|
<header class="np-header np-header-color">
|
||||||
<div class="np-header-content">
|
<div class="np-header-content">
|
||||||
<div class="np-hidden-desktop np-header-mobile-menu-nav">
|
<div class="np-hidden-desktop np-header-mobile-menu-nav">
|
||||||
|
|||||||
@ -37,18 +37,21 @@
|
|||||||
|
|
||||||
{% comment %} <input class="sign-up-follow-up-input" id="oh-input" placeholder="OH Identifier" style="display: none;"/> {% endcomment %}
|
{% comment %} <input class="sign-up-follow-up-input" id="oh-input" placeholder="OH Identifier" style="display: none;"/> {% endcomment %}
|
||||||
<div id="oh-input" placeholder="OH Identifier" style="display: none;">
|
<div id="oh-input" placeholder="OH Identifier" style="display: none;">
|
||||||
<div class='oh-button' type="radio" value="EVV"
|
<div class='oh-button' type="radio" value="ST - OH EVV ODM Agency Provider"
|
||||||
onclick="validateForm()">Ohio EVV</div>
|
onclick="validateForm()">Agency EVV</div>
|
||||||
<div class='oh-button' type="radio" value="ALT EVV"
|
<div class='oh-button' type="radio" value="ST - OH EVV Non-Agency"
|
||||||
onclick="validateForm()">Ohio Alt EVV</div>
|
onclick="validateForm()">Non-Agency EVV</div>
|
||||||
|
<div class='oh-button' type="radio" value="ST - OH ODM AGENCY PROVIDER ALT EVV"
|
||||||
|
onclick="validateForm()">Alternative EVV</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="ca-input" placeholder="CA Identifier" style="display: none;">
|
<div id="ca-input" placeholder="CA Identifier" style="display: none;">
|
||||||
{% comment %} <div class='ca-button' type="radio" value="ST - CA CHHS BOTH (PCS & HHCS)" {% endcomment %}
|
{% comment %} <div class='ca-button' type="radio" value="ST - CA CHHS BOTH (PCS & HHCS)" {% endcomment %}
|
||||||
<div class='ca-button' type="radio" value="EVV"
|
<div class='ca-button' type="radio" value="EVV"
|
||||||
onclick="validateForm()">Sandata EVV</div>
|
onclick="validateForm()">Agency EVV</div>
|
||||||
{% comment %} <div class='ca-button' type="radio" value="ST - CA CHHS JE & ST - CA CHHS STATE" {% endcomment %}
|
{% comment %} <div class='ca-button' type="radio" value="ST - CA CHHS JE & ST - CA CHHS STATE" {% endcomment %}
|
||||||
<div class='ca-button' type="radio" value="ALT EVV"
|
<div class='ca-button' type="radio" value="ALT EVV"
|
||||||
onclick="validateForm()">Sandata Alt EVV Aggregator</div>
|
onclick="validateForm()">Alternative EVV</div>
|
||||||
</div>
|
</div>
|
||||||
<span class="sign-up-follow-up-error-label" id="oh-label">Please select your affiliation</span>
|
<span class="sign-up-follow-up-error-label" id="oh-label">Please select your affiliation</span>
|
||||||
|
|
||||||
@ -389,7 +392,7 @@
|
|||||||
|
|
||||||
if(Object.keys(revisedPropsObj).length > 0){
|
if(Object.keys(revisedPropsObj).length > 0){
|
||||||
let validationFlag = true;
|
let validationFlag = true;
|
||||||
let allRequiredFields = ['agency_name', 'medicaid_id', 'provider_id', 'learner_state', 'learner_role', 'ca_group_name', 'oh_group_name'];
|
let allRequiredFields = ['agency_name', 'medicaid_id', 'provider_id', 'learner_state', 'learner_role', 'oh_group_name', 'ca_group_name']
|
||||||
|
|
||||||
for(let i = 0; i < allRequiredFields.length; i++){
|
for(let i = 0; i < allRequiredFields.length; i++){
|
||||||
if(Object.keys(revisedPropsObj).indexOf(allRequiredFields[i]) == -1){
|
if(Object.keys(revisedPropsObj).indexOf(allRequiredFields[i]) == -1){
|
||||||
@ -404,6 +407,7 @@
|
|||||||
} else {
|
} else {
|
||||||
document.querySelector('#calEVV-input').style.border = '1px solid light-dark(rgb(118, 118, 118), rgb(133, 133, 133))';
|
document.querySelector('#calEVV-input').style.border = '1px solid light-dark(rgb(118, 118, 118), rgb(133, 133, 133))';
|
||||||
document.querySelector('#calEVV-label').style.display = 'none';
|
document.querySelector('#calEVV-label').style.display = 'none';
|
||||||
|
revisedPropsObj['oh_group_name'] = undefined;
|
||||||
}
|
}
|
||||||
} else if(allRequiredFields[i] == 'learner_state' && revisedPropsObj[allRequiredFields[i]] == 'Ohio'){
|
} else if(allRequiredFields[i] == 'learner_state' && revisedPropsObj[allRequiredFields[i]] == 'Ohio'){
|
||||||
if(Object.keys(revisedPropsObj).indexOf('oh_group_name') == -1){
|
if(Object.keys(revisedPropsObj).indexOf('oh_group_name') == -1){
|
||||||
@ -411,6 +415,9 @@
|
|||||||
document.querySelector('#oh-label').style.display = 'block';
|
document.querySelector('#oh-label').style.display = 'block';
|
||||||
} else {
|
} else {
|
||||||
document.querySelector('#oh-label').style.display = 'none';
|
document.querySelector('#oh-label').style.display = 'none';
|
||||||
|
revisedPropsObj['ca_group_name'] = undefined;
|
||||||
|
revisedPropsObj['cal_evv_id'] = undefined;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -446,11 +453,12 @@
|
|||||||
console.log(userID);
|
console.log(userID);
|
||||||
|
|
||||||
if(revisedPropsObj['learner_state'] != 'Ohio'){
|
if(revisedPropsObj['learner_state'] != 'Ohio'){
|
||||||
revisedPropsObj['oh_group_name'] = null;
|
revisedPropsObj['oh_group_name'] = "None";
|
||||||
}
|
}
|
||||||
|
|
||||||
if(revisedPropsObj['learner_state'] != 'California'){
|
if(revisedPropsObj['learner_state'] != 'California'){
|
||||||
revisedPropsObj['cal_evv_id'] = null;
|
revisedPropsObj['cal_evv_id'] = "None";
|
||||||
|
revisedPropsObj['ca_group_name'] = "None";
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log(revisedPropsObj);
|
console.log(revisedPropsObj);
|
||||||
@ -459,8 +467,7 @@
|
|||||||
function webhookCaller(){
|
function webhookCaller(){
|
||||||
return new Promise(function(res, rej) {
|
return new Promise(function(res, rej) {
|
||||||
let xhr = new XMLHttpRequest();
|
let xhr = new XMLHttpRequest();
|
||||||
url = "https://webhook.site/8fc3650a-7c4b-413a-a6fd-6e3787bc3771"
|
url = "https://webhooks.workato.com/webhooks/rest/0a1d61c1-421c-4160-a1ab-d29e79aee50e/secondary-registration-submitted";
|
||||||
//url = "https://webhooks.workato.com/webhooks/rest/0a1d61c1-421c-4160-a1ab-d29e79aee50e/secondary-registration-submitted";
|
|
||||||
|
|
||||||
xhr.addEventListener("load", e => {
|
xhr.addEventListener("load", e => {
|
||||||
localStorage.setItem('completed-second-registration', true);
|
localStorage.setItem('completed-second-registration', true);
|
||||||
|
|||||||
@ -434,7 +434,6 @@ Two items from KC:
|
|||||||
|
|
||||||
KC Question: When the categories are established in the filters, can we programatically re-assign categories to all 800 courses? Or does it need to be done manually?
|
KC Question: When the categories are established in the filters, can we programatically re-assign categories to all 800 courses? Or does it need to be done manually?
|
||||||
|
|
||||||
|
|
||||||
KS1:
|
KS1:
|
||||||
Anthology Academic Economics: Essential, Anthology Academic Economics: Enhanced, Anthology Accreditation: Essential, Anthology Accreditation: Enhanced, Anthology 101: Essential, Anthology Baseline: Essential, Anthology Baseline: Enhanced, Anthology Beacon: Essential, Anthology Course Evaluations: Essential, Anthology Course Evaluations: Enhanced, Anthology Digital Assistant: Essential, Anthology Digital Assistant: Enhanced, Anthology Encompass: Essential, Anthology Encompass: Enhanced, Anthology Encompass: Enhanced+, Anthology Engage: Essential, Anthology Engage: Enhanced, Anthology Engage: Enhanced+, Anthology Evaluate: Essential, Anthology Evaluate: Enhanced, Anthology Finance & HCM: Essential, Anthology Finance & HCM: Enhanced, Anthology Finance & HCM: Enhanced+, Anthology Insight: Essential, Anthology Insight: Enhanced, Blackboard Learn: Essential, Anthology Milestone: Essential, Anthology Milestone: Enhanced, Outcomes: Essential, Outcomes: Enhanced, Anthology Payroll: Essential, Anthology Payroll: Enhanced, Anthology Planning: Essential, Anthology Planning: Enhanced, Anthology Portfolio: Essential, Anthology Portfolio: Enhanced, Power BI: Essential, Power BI: Enhanced, Anthology Program Review: Essential, Anthology Program Review: Enhanced, Anthology Raise: Essential, Anthology Raise: Enhanced, Anthology Raise: Enhanced+, Anthology Reach: Essential, Anthology Reach: Enhanced, Anthology Reach: Enhanced+, Anthology Student: Essential, Anthology Student: Enhanced,
|
Anthology Academic Economics: Essential, Anthology Academic Economics: Enhanced, Anthology Accreditation: Essential, Anthology Accreditation: Enhanced, Anthology 101: Essential, Anthology Baseline: Essential, Anthology Baseline: Enhanced, Anthology Beacon: Essential, Anthology Course Evaluations: Essential, Anthology Course Evaluations: Enhanced, Anthology Digital Assistant: Essential, Anthology Digital Assistant: Enhanced, Anthology Encompass: Essential, Anthology Encompass: Enhanced, Anthology Encompass: Enhanced+, Anthology Engage: Essential, Anthology Engage: Enhanced, Anthology Engage: Enhanced+, Anthology Evaluate: Essential, Anthology Evaluate: Enhanced, Anthology Finance & HCM: Essential, Anthology Finance & HCM: Enhanced, Anthology Finance & HCM: Enhanced+, Anthology Insight: Essential, Anthology Insight: Enhanced, Blackboard Learn: Essential, Anthology Milestone: Essential, Anthology Milestone: Enhanced, Outcomes: Essential, Outcomes: Enhanced, Anthology Payroll: Essential, Anthology Payroll: Enhanced, Anthology Planning: Essential, Anthology Planning: Enhanced, Anthology Portfolio: Essential, Anthology Portfolio: Enhanced, Power BI: Essential, Power BI: Enhanced, Anthology Program Review: Essential, Anthology Program Review: Enhanced, Anthology Raise: Essential, Anthology Raise: Enhanced, Anthology Raise: Enhanced+, Anthology Reach: Essential, Anthology Reach: Enhanced, Anthology Reach: Enhanced+, Anthology Student: Essential, Anthology Student: Enhanced,
|
||||||
Anthology Student: Enhanced+,
|
Anthology Student: Enhanced+,
|
||||||
|
|||||||
Binary file not shown.
@ -9,7 +9,21 @@ HEADERS = {
|
|||||||
"accept": "application/json",
|
"accept": "application/json",
|
||||||
"X-Api-Key": APIKEY,
|
"X-Api-Key": APIKEY,
|
||||||
}
|
}
|
||||||
|
GROUPS = [
|
||||||
|
"Accreditation",
|
||||||
|
"Anthology 101",
|
||||||
|
"Baseline",
|
||||||
|
"Course Evaluations",
|
||||||
|
"Engage",
|
||||||
|
"Evaluate",
|
||||||
|
"Finance & HCM",
|
||||||
|
"Learn",
|
||||||
|
"Portfolio",
|
||||||
|
"Power BI",
|
||||||
|
"Raise",
|
||||||
|
"Reach",
|
||||||
|
"Student",
|
||||||
|
]
|
||||||
|
|
||||||
def get_courses():
|
def get_courses():
|
||||||
"""
|
"""
|
||||||
|
|||||||
77
Scripts/API_Tests/get_courses_from_groups.py
Normal file
77
Scripts/API_Tests/get_courses_from_groups.py
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
import Apikeys
|
||||||
|
import requests
|
||||||
|
import pprint
|
||||||
|
import csv
|
||||||
|
|
||||||
|
pp= pprint.PrettyPrinter(indent=4)
|
||||||
|
APIKEY = Apikeys.ANTHOLOGY
|
||||||
|
HEADERS = {
|
||||||
|
"accept": "application/json",
|
||||||
|
"X-Api-Key": APIKEY,
|
||||||
|
}
|
||||||
|
BASEURL = "https://api.northpass.com/v2/"
|
||||||
|
GROUPS = [
|
||||||
|
"Accreditation",
|
||||||
|
"Anthology 101",
|
||||||
|
"Baseline",
|
||||||
|
"Course Evaluations",
|
||||||
|
"Engage",
|
||||||
|
"Evaluate",
|
||||||
|
"Finance & HCM",
|
||||||
|
"Learn",
|
||||||
|
"Portfolio",
|
||||||
|
"Power BI",
|
||||||
|
"Raise",
|
||||||
|
"Reach",
|
||||||
|
"Student",
|
||||||
|
]
|
||||||
|
|
||||||
|
def group_ids():
|
||||||
|
"""
|
||||||
|
Get the group Ids from a list of named groups.
|
||||||
|
"""
|
||||||
|
url = "groups"
|
||||||
|
for group in GROUPS:
|
||||||
|
filter = f"?filter[name][cont]={group} - ("
|
||||||
|
urlreq = f"{BASEURL}{url}{filter}"
|
||||||
|
response = requests.get(urlreq, headers=HEADERS)
|
||||||
|
response = response.json()
|
||||||
|
|
||||||
|
for data in response['data']:
|
||||||
|
print(data['attributes']['name'])
|
||||||
|
id = data['id']
|
||||||
|
get_courses_in_groups(id)
|
||||||
|
|
||||||
|
def get_courses_in_groups(id):
|
||||||
|
"""
|
||||||
|
From the IDs received above, list out all of the courses.
|
||||||
|
"""
|
||||||
|
count = 0
|
||||||
|
courses = []
|
||||||
|
while True:
|
||||||
|
# count += 1
|
||||||
|
url = f"groups/{id}/courses?limit=100"
|
||||||
|
courseurl = f"{BASEURL}{url}"
|
||||||
|
coursereq = requests.get(courseurl, headers=HEADERS)
|
||||||
|
coursedata = coursereq.json()
|
||||||
|
# nextlink = coursedata['links']
|
||||||
|
print(id)
|
||||||
|
# print(coursedata)
|
||||||
|
|
||||||
|
for data in coursedata['included']:
|
||||||
|
if data['attributes']['status'] == 'live':
|
||||||
|
name = data['attributes']['name']
|
||||||
|
id = data['attributes']['share_course_link'].split("/")[5]
|
||||||
|
enrollments = data['attributes']['enrollments_count']
|
||||||
|
created = data['attributes']['created_at']
|
||||||
|
updated = data['attributes']['updated_at']
|
||||||
|
coursedict = {
|
||||||
|
"name": name, "id": id, "enrollments": enrollments,
|
||||||
|
"created at": created, "updated at": updated
|
||||||
|
}
|
||||||
|
courses.append(coursedict)
|
||||||
|
print(courses)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
group_ids()
|
||||||
@ -15,8 +15,8 @@ REF = [
|
|||||||
("Nevada", "ST - Nevada (DHCFP)", "9fcf4e98-1dfd-441f-8ee4-0131c968867c"),
|
("Nevada", "ST - Nevada (DHCFP)", "9fcf4e98-1dfd-441f-8ee4-0131c968867c"),
|
||||||
("North Carolina", "ST - North Carolina (DHHS)", "67a01f25-57ca-49a8-8fed-b7181b020842"),
|
("North Carolina", "ST - North Carolina (DHHS)", "67a01f25-57ca-49a8-8fed-b7181b020842"),
|
||||||
("North Daktoa", "ST - North Dakota (DHHS)", "62dc0f55-a51d-4acf-90ce-dc10788385af"),
|
("North Daktoa", "ST - North Dakota (DHHS)", "62dc0f55-a51d-4acf-90ce-dc10788385af"),
|
||||||
("Ohio", "ST - OH NON-Agencies", "5d50b3ed-671b-4e97-9d5e-87f8b755dfe2"),
|
("Ohio", "ST - OH EVV Non-Agency", "5d50b3ed-671b-4e97-9d5e-87f8b755dfe2"),
|
||||||
("Ohio", "ST - OH ODM Agency Provider", "0c8efefc-364b-4971-b376-030493611b0d"),
|
("Ohio", "ST - OH EVV ODM Agency Provider", "0c8efefc-364b-4971-b376-030493611b0d"),
|
||||||
("Ohio", "ST - OH ODM AGENCY PROVIDER ALT EVV", "838c0923-43b4-48bd-8011-00fd0411c68f"),
|
("Ohio", "ST - OH ODM AGENCY PROVIDER ALT EVV", "838c0923-43b4-48bd-8011-00fd0411c68f"),
|
||||||
("Pennsylvania", "ST - PA DHS", "24c85122-aa00-4ce2-ad9b-70bb9c0f3f2f"),
|
("Pennsylvania", "ST - PA DHS", "24c85122-aa00-4ce2-ad9b-70bb9c0f3f2f"),
|
||||||
("Rhode Island", "ST - Rhode Island EOHHS", "e52fd639-bf63-4840-b8bc-2e6a6f11560e"),
|
("Rhode Island", "ST - Rhode Island EOHHS", "e52fd639-bf63-4840-b8bc-2e6a6f11560e"),
|
||||||
|
|||||||
@ -1,40 +1,39 @@
|
|||||||
import tmp
|
import tmp
|
||||||
|
data = webhook_payload:
|
||||||
|
[
|
||||||
|
|
||||||
webhook_payload = {
|
{
|
||||||
"payload": {
|
id: dc9aafe3-eee7-4d50-a480-3bd9831b893a,
|
||||||
"array": [
|
email: it,
|
||||||
{
|
type: person_properties,
|
||||||
"id": "e134030d-a2a9-4de2-b4d5-87081feee18a",
|
attributes:
|
||||||
"email": "gwalden@sandata.com",
|
{
|
||||||
"type": "person_properties",
|
properties:
|
||||||
"attributes": {
|
{
|
||||||
"properties": {
|
agency_name: 32,
|
||||||
"agency_name": "Test 2",
|
agency_id: 323,
|
||||||
"agency_id": "Test 2",
|
medicaid_id: 22222,
|
||||||
"medicaid_id": "54321",
|
provider_id: 2123231234,
|
||||||
"provider_id": "0987654321",
|
learner_role: Agency Billing,
|
||||||
"learner_role": "Agency Billing",
|
learner_state: Ohio,
|
||||||
"learner_state": "Tennessee",
|
oh_group_name: EVV,
|
||||||
"oh_group_name": "ST - OH ODM Agency Provider",
|
ca_group_name: None,
|
||||||
"evv_alt_for_ca_oh": "",
|
cal_evv_id: None,
|
||||||
"successfully_completed_secondary_registration": True,
|
successfully_completed_secondary_registration: true
|
||||||
"cal_evv_id": None
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
]
|
||||||
]
|
|
||||||
},
|
|
||||||
"params": {}
|
|
||||||
}
|
|
||||||
|
|
||||||
for item in webhook_payload['payload']['array']:
|
for item in webhook_payload['payload']['array']:
|
||||||
evv = item['attributes']['properties']['evv_alt_for_ca_oh']
|
evv = item['attributes']['properties']['oh_group_name']
|
||||||
state = item['attributes']['properties']['learner_state']
|
state = item['attributes']['properties']['learner_state']
|
||||||
group_result = [ref_state for ref_state in tmp.REF if state in ref_state]
|
group_result = [ref_state for ref_state in tmp.REF if state in ref_state]
|
||||||
if len(group_result) > 1:
|
if len(group_result) > 1:
|
||||||
for group in group_result:
|
for group in group_result:
|
||||||
if evv in group:
|
if evv in group:
|
||||||
print(group)
|
group_uuid = group[2]
|
||||||
|
print(group_uuid)
|
||||||
else:
|
else:
|
||||||
group_uuid = group_result[0][2]
|
group_uuid = group_result[0][2]
|
||||||
print(group_uuid)
|
print(group_uuid)
|
||||||
|
|||||||
4
Todos.md
4
Todos.md
@ -219,3 +219,7 @@ message](https://northpasshq.slack.com/archives/C04RER4PH09/p1709147957374999?th
|
|||||||
## 04-18-2024
|
## 04-18-2024
|
||||||
|
|
||||||
- [X] Chubb - Looker, Learner Full name - what is it pulling?
|
- [X] Chubb - Looker, Learner Full name - what is it pulling?
|
||||||
|
|
||||||
|
## 04-19-2024
|
||||||
|
|
||||||
|
- [ ] Anthology - Extract CSV of all Courses & UUIDs.
|
||||||
|
|||||||
Reference in New Issue
Block a user