diff --git a/src/lib/ae_events_functions.ts b/src/lib/ae_events_functions.ts index d8dba0c6..4d59b6ef 100644 --- a/src/lib/ae_events_functions.ts +++ b/src/lib/ae_events_functions.ts @@ -44,15 +44,15 @@ async function handle_load_ae_obj_id__event({api_cfg, event_id, try_cache=false} // Updated 2024-03-06 -async function handle_load_ae_obj_li__badge({api_cfg, event_id, try_cache=true}) { +async function handle_load_ae_obj_li__badge({api_cfg, event_id, params={}, try_cache=true}: {api_cfg: any, event_id: any, params: any, try_cache?: boolean}) { console.log(`*** handle_load_ae_obj_li__badge() *** event_id=${event_id}`); let fulltext_search_qry_str = ''; // $events_sess.badges.fulltext_search_qry_str; - let enabled = 'enabled'; // $events_loc.qry_enabled; - let hidden = 'not_hidden'; // $events_loc.qry__hidden; - let limit = 25; // $events_loc.qry__limit; - let offset = 0; // $events_loc.qry__offset; + let enabled: string = (params.qry__enabled ?? 'enabled'); // all, disabled, enabled + let hidden: string = (params.qry__hidden ?? 'not_hidden'); // all, hidden, not_hidden + let limit: number = (params.qry__limit ?? 99); // 99 + let offset: number = (params.qry__offset ?? 0); // 0 // if ($ae_loc.administrator_access) { // enabled = 'all'; @@ -64,7 +64,7 @@ async function handle_load_ae_obj_li__badge({api_cfg, event_id, try_cache=true}) // limit = 50; // } - let params = {}; + // let params = {}; let params_json: key_val = {}; if (fulltext_search_qry_str && fulltext_search_qry_str.length > 2) { @@ -94,7 +94,7 @@ async function handle_load_ae_obj_li__badge({api_cfg, event_id, try_cache=true}) offset: offset, params_json: params_json, params: params, - log_lvl: 2 + log_lvl: 1 }) .then(function (badge_obj_li_get_result) { @@ -157,13 +157,13 @@ async function handle_load_ae_obj_id__exhibit({api_cfg, exhibit_id, try_cache=fa // Updated 2024-03-06 -async function handle_load_ae_obj_li__exhibit({api_cfg, event_id, try_cache=true}) { +async function handle_load_ae_obj_li__exhibit({api_cfg, event_id, params={}, try_cache=true}: {api_cfg: any, event_id: any, params: any, try_cache?: boolean}) { console.log(`*** handle_load_ae_obj_li__exhibit() *** event_id=${event_id}`); - let enabled = 'enabled'; // $events_loc.qry_enabled; - let hidden = 'not_hidden'; // $events_loc.qry__hidden; - let limit = 50; // $events_loc.qry__limit; - let offset = 0; // $events_loc.qry__offset; + let enabled: string = (params.qry__enabled ?? 'enabled'); // all, disabled, enabled + let hidden: string = (params.qry__hidden ?? 'not_hidden'); // all, hidden, not_hidden + let limit: number = (params.qry__limit ?? 99); // 99 + let offset: number = (params.qry__offset ?? 0); // 0 // if ($ae_loc.administrator_access) { // enabled = 'all'; @@ -175,7 +175,7 @@ async function handle_load_ae_obj_li__exhibit({api_cfg, event_id, try_cache=true // limit = 50; // } - let params = {}; + // let params = {}; let params_json: key_val = {}; // params_json['and_qry'] = {}; @@ -212,7 +212,7 @@ async function handle_load_ae_obj_li__exhibit({api_cfg, event_id, try_cache=true offset: offset, params_json: params_json, params: params, - log_lvl: 2 + log_lvl: 0 }) .then(function (exhibit_obj_li_get_result) { @@ -283,6 +283,60 @@ async function handle_load_ae_obj_li__exhibit({api_cfg, event_id, try_cache=true // } + +// Updated 2024-03-19 +async function handle_load_ae_obj_li__exhibit_tracking({api_cfg, exhibit_id, params={}, try_cache=true}: {api_cfg: any, exhibit_id: any, params: any, try_cache?: boolean}) { + console.log(`*** handle_load_ae_obj_li__exhibit_tracking() *** exhibit_id=${exhibit_id}`); + + let enabled: string = (params.qry__enabled ?? 'enabled'); // all, disabled, enabled + let hidden: string = (params.qry__hidden ?? 'all'); // all, hidden, not_hidden + let limit: number = (params.qry__limit ?? 99); // 99 + let offset: number = (params.qry__offset ?? 0); // 0 + + let params_json: key_val = {}; + + ae_promises.load__event_exhibit_tracking_obj_li = await api.get_ae_obj_li_for_obj_id_crud({ + api_cfg: api_cfg, + obj_type: 'event_exhibit_tracking', + for_obj_type: 'event_exhibit', + for_obj_id: exhibit_id, + use_alt_table: false, // NOTE: This will use the table_name_alt value instead of the table_name value in the API config. + use_alt_base: false, // NOTE: This will use the base_name_alt value instead of the base_name value in the API config. + enabled: enabled, + hidden: hidden, + order_by_li: {'priority': 'DESC', 'sort': 'DESC', 'updated_on': 'DESC', 'created_on': 'DESC'}, + limit: limit, + offset: offset, + params_json: params_json, + params: params, + log_lvl: 1 + }) + + .then(function (exhibit_tracking_obj_li_get_result) { + // console.log('Exhibit tracking list:', exhibit_tracking_obj_li_get_result); + if (exhibit_tracking_obj_li_get_result) { + // $slct.exhibit_tracking_obj_li = exhibit_tracking_obj_li_get_result; + handle_db_save_ae_obj_li__exhibitor_tracking({obj_type: 'event_exhibit_tracking', obj_li: exhibit_tracking_obj_li_get_result}); + return exhibit_tracking_obj_li_get_result; + } else { + // $slct.exhibit_tracking_obj_li = []; + return []; + } + }) + .catch(function (error) { + console.log('No results returned or failed.', error); + }) + .finally(function () { + // console.log('Exhibit tracking list:', exhibit_tracking_obj_li_get_result); + // return exhibit_tracking_obj_li_get_result; + }); + + console.log('ae_promises.load__event_exhibit_tracking_obj_li:', ae_promises.load__event_exhibit_tracking_obj_li); + return ae_promises.load__event_exhibit_tracking_obj_li; +} + + + // This function will loop through the badge_obj_li and save each one to the DB. function handle_db_save_ae_obj_li__badge({obj_type, obj_li}) { console.log(`*** handle_db_save_ae_obj_li__badge() ***`); @@ -294,19 +348,60 @@ function handle_db_save_ae_obj_li__badge({obj_type, obj_li}) { try { const id_random = await db_events.badges.put({ id_random: obj.event_badge_id_random, + event_badge_id_random: obj.event_badge_id_random, + + event_id_random: obj.event_id_random, + + pronouns: obj.pronouns, + informal_name: obj.informal_name, + title_names: obj.title_names, + given_name: obj.given_name, + middle_name: obj.middle_name, + family_name: obj.family_name, + designations: obj.designations, + + professional_title: obj.professional_title, + professional_title_override: obj.professional_title_override, + full_name: obj.full_name, full_name_override: obj.full_name_override, - email: obj.email, - email_override: obj.email_override, + affiliations: obj.affiliations, affiliations_override: obj.affiliations_override, + + email: obj.email, + email_override: obj.email_override, + + address_line_1: obj.address_line_1, + address_line_2: obj.address_line_2, + address_line_3: obj.address_line_3, + city: obj.city, + country_subdivision_code: obj.country_subdivision_code, + state_province: obj.state_province, + state_province_abb: obj.state_province_abb, + postal_code: obj.postal_code, + country_alpha_2_code: obj.country_alpha_2_code, + country: obj.country, + full_address: obj.full_address, + location: obj.location, + location_override: obj.location_override, + + query_str: obj.query_str, + badge_type: obj.badge_type, - badge_type_override: obj.badge_type_override, badge_type_code: obj.badge_type_code, + badge_type_override: obj.badge_type_override, badge_type_code_override: obj.badge_type_code_override, external_event_id: obj.external_event_id, external_id: obj.external_id, external_person_id: obj.external_person_id, + + enable: obj.enable, + hide: obj.hide, + priority: obj.priority, + sort: obj.sort, + group: obj.group, + notes: obj.notes, created_on: obj.created_on, updated_on: obj.updated_on, }); @@ -325,7 +420,7 @@ function handle_db_save_ae_obj_li__badge({obj_type, obj_li}) { } // This function will loop through the event_exhibit_obj_li and save each one to the DB. -function handle_db_save_ae_obj_li__exhibitor({obj_type, obj_li}) { +function handle_db_save_ae_obj_li__exhibitor({obj_type, obj_li=[]}: {obj_type: string, obj_li: any[]}) { console.log(`*** handle_db_save_ae_obj_li__exhibitor() ***`); if (obj_li && obj_li.length) { @@ -335,18 +430,33 @@ function handle_db_save_ae_obj_li__exhibitor({obj_type, obj_li}) { try { const id_random = await db_events.exhibits.put({ id_random: obj.event_exhibit_id_random, + event_exhibit_id_random: obj.event_exhibit_id_random, + + event_id_random: obj.event_id_random, code: obj.code, name: obj.name, description: obj.description, staff_passcode: obj.staff_passcode, data_json: obj.data_json, + + leads_api_access: obj.leads_api_access, + leads_custom_questions_json: obj.leads_custom_questions_json, + leads_device_sm_qty: obj.leads_device_sm_qty, + leads_device_lg_qty: obj.leads_device_lg_qty, license_max: obj.license_max, license_li_json: obj.license_li_json, cfg_json: obj.cfg_json, + + enable: obj.enable, + hide: obj.hide, + priority: obj.priority, + sort: obj.sort, + group: obj.group, + notes: obj.notes, created_on: obj.created_on, updated_on: obj.updated_on, }); - console.log(`Put obj with ID: ${obj.event_exhibit_id_random} or ${id_random}`); + // console.log(`Put obj with ID: ${obj.event_exhibit_id_random} or ${id_random}`); } catch (error) { let status = `Failed to put ${obj.event_exhibit_id_random}: ${error}`; console.log(status); @@ -360,7 +470,63 @@ function handle_db_save_ae_obj_li__exhibitor({obj_type, obj_li}) { } } +// This function will loop through the event_exhibit_tracking_obj_li and save each one to the DB. +function handle_db_save_ae_obj_li__exhibitor_tracking({obj_type, obj_li}) { + console.log(`*** handle_db_save_ae_obj_li__exhibitor_tracking() ***`); + if (obj_li && obj_li.length) { + obj_li.forEach(async function (obj) { + // console.log(`ae_obj ${obj_type}:`, obj); + + try { + const id_random = await db_events.exhibit_tracking.put({ + id_random: obj.event_exhibit_tracking_id_random, + event_exhibit_tracking_id_random: obj.event_exhibit_tracking_id_random, + + event_exhibit_id_random: obj.event_exhibit_id_random, + event_badge_id_random: obj.event_badge_id_random, + event_person_id_random: obj.event_person_id_random, + + exhibitor_notes: obj.exhibitor_notes, + + responses_json: obj.responses_json, + data_json: obj.data_json, + + event_exhibit_name: obj.event_exhibit_name, + + event_badge_title_names: obj.event_badge_title_names, + event_badge_given_name: obj.event_badge_given_name, + event_badge_family_name: obj.event_badge_family_name, + event_badge_designations: obj.event_badge_designations, + event_badge_full_name: obj.event_badge_full_name, + + event_badge_affiliations: obj.event_badge_affiliations, + event_badge_email: obj.event_badge_email, + event_badge_location: obj.event_badge_location, + + enable: obj.enable, + hide: obj.hide, + priority: obj.priority, + sort: obj.sort, + group: obj.group, + notes: obj.notes, + + created_on: obj.created_on, + updated_on: obj.updated_on, + }); + console.log(`Put obj with ID: ${obj.event_exhibit_tracking_id_random} or ${id_random}`); + } catch (error) { + let status = `Failed to put ${obj.event_exhibit_tracking_id_random}: ${error}`; + console.log(status); + } + + // const id_random = await db_events.exhibit_tracking.put(obj); + // console.log(`Put obj with ID: ${obj.event_exhibit_tracking_id_random}`); + }); + + return true; + } +} let export_obj = { @@ -368,5 +534,6 @@ let export_obj = { handle_load_ae_obj_li__badge: handle_load_ae_obj_li__badge, handle_load_ae_obj_id__exhibit: handle_load_ae_obj_id__exhibit, handle_load_ae_obj_li__exhibit: handle_load_ae_obj_li__exhibit, + handle_load_ae_obj_li__exhibit_tracking: handle_load_ae_obj_li__exhibit_tracking, }; export let events_func = export_obj; diff --git a/src/lib/ae_events_stores.ts b/src/lib/ae_events_stores.ts index 73564c5a..9794ab87 100644 --- a/src/lib/ae_events_stores.ts +++ b/src/lib/ae_events_stores.ts @@ -48,6 +48,8 @@ let events_local_data_struct: key_val = { auto_view: true, + show_hidden: false, // These are hidden (archived) leads so the list is not as long. + // The entered_passcode is the exhibit booths shared passcode for staff. This is used to initially access the lead retrieval service. entered_passcode: null, @@ -99,6 +101,11 @@ let events_session_data_struct: key_val = { 'ds_loaded': { }, + 'qry__enabled': 'enabled', // all, disabled, enabled + 'qry__hidden': 'not_hidden', // all, hidden, not_hidden + 'qry__limit': 20, + 'qry__offset': 0, + // Badge Printing 'badges': { 'fulltext_search_qry_str': null, diff --git a/src/lib/ae_stores.ts b/src/lib/ae_stores.ts index 37febf2a..42e03c78 100644 --- a/src/lib/ae_stores.ts +++ b/src/lib/ae_stores.ts @@ -59,6 +59,11 @@ export let ae_app_local_data_struct: key_val = { 'authenticated_access': false, 'anonymous_access': true, + 'qry__enabled': 'enabled', // all, disabled, enabled + 'qry__hidden': 'not_hidden', // all, hidden, not_hidden + 'qry__limit': 20, + 'qry__offset': 0, + 'ds': {}, 'hub': { 'show_element__cfg': true, diff --git a/src/lib/api.js b/src/lib/api.js index 76dd87a7..b5d28f20 100644 --- a/src/lib/api.js +++ b/src/lib/api.js @@ -548,6 +548,8 @@ export let get_ae_obj_id_crud = async function get_ae_obj_id_crud({ endpoint = `/crud/event/device/${obj_id}`; } else if (obj_type == 'event_exhibit') { endpoint = `/crud/event/exhibit/${obj_id}`; + } else if (obj_type == 'event_exhibit_tracking') { + endpoint = `/crud/event/exhibit/tracking/${obj_id}`; } else if (obj_type == 'event_file') { endpoint = `/crud/event/file/${obj_id}`; } else if (obj_type == 'event_location') { @@ -687,6 +689,8 @@ export let get_ae_obj_li_for_obj_id_crud = async function get_ae_obj_li_for_obj_ endpoint = `/crud/event/device/list`; } else if (obj_type == 'event_exhibit') { endpoint = `/crud/event/exhibit/list`; + } else if (obj_type == 'event_exhibit_tracking') { + endpoint = `/crud/event/exhibit/tracking/list`; } else if (obj_type == 'event_file') { endpoint = `/crud/event/file/list`; } else if (obj_type == 'event_location') { @@ -865,6 +869,8 @@ export let create_ae_obj_crud = async function create_ae_obj_crud({api_cfg, obj_ endpoint = `/crud/event/device`; } else if (obj_type == 'event_exhibit') { endpoint = `/crud/event/exhibit`; + } else if (obj_type == 'event_exhibit_tracking') { + endpoint = `/crud/event/exhibit/tracking`; } else if (obj_type == 'event_file') { endpoint = `/crud/event/file`; } else if (obj_type == 'event_location') { @@ -1010,6 +1016,8 @@ export let update_ae_obj_id_crud = async function update_ae_obj_id_crud({api_cfg endpoint = `/crud/event/device/${obj_id}`; } else if (obj_type == 'event_exhibit') { endpoint = `/crud/event/exhibit/${obj_id}`; + } else if (obj_type == 'event_exhibit_tracking') { + endpoint = `/crud/event/exhibit/tracking/${obj_id}`; } else if (obj_type == 'event_file') { endpoint = `/crud/event/file/${obj_id}`; } else if (obj_type == 'event_location') { @@ -1177,6 +1185,8 @@ export let delete_ae_obj_id_crud = async function delete_ae_obj_id_crud({api_cfg endpoint = `/crud/event/device/${obj_id}`; } else if (obj_type == 'event_exhibit') { endpoint = `/crud/event/exhibit/${obj_id}`; + } else if (obj_type == 'event_exhibit_tracking') { + endpoint = `/crud/event/exhibit/tracking/${obj_id}`; } else if (obj_type == 'event_file') { endpoint = `/crud/event/file/${obj_id}`; } else if (obj_type == 'event_location') { diff --git a/src/lib/db_events.ts b/src/lib/db_events.ts index bce33df5..450d89a1 100644 --- a/src/lib/db_events.ts +++ b/src/lib/db_events.ts @@ -4,13 +4,44 @@ export interface Badge { // id?: number; id_random: string; event_badge_id_random: string; + event_id_random: string; + pronouns: null|string; + informal_name: null|string; + title_names: null|string; + given_name: string; + middle_name: null|string; + family_name: null|string; + designations: null|string; + + professional_title: null|string; + professional_title_override: null|string; + full_name: string; full_name_override: null|string; - email: string; - email_override: null|string; + affiliations: string; affiliations_override: null|string; + + email: string; + email_override: null|string; + + address_line_1: null|string; + address_line_2: null|string; + address_line_3: null|string; + city: null|string; + country_subdivision_code: null|string; + state_province: null|string; + state_province_abb: null|string; + postal_code: null|string; + country_alpha_2_code: null|string; + country: null|string; + full_address: null|string; + location: null|string; + location_override: null|string; + + query_str: null|string; + badge_type: string; badge_type_code: string; badge_type_code_override: null|string; @@ -18,21 +49,30 @@ export interface Badge { external_event_id: string; external_id: string; external_person_id: string; + + enable: null|boolean; + hide: null|boolean; + priority: null|boolean + sort: null|number; + group: null|string; + notes: null|string; created_on: Date; - updated_on: Date; + updated_on: null|Date; } export interface Exhibit { // id?: number; id_random: string; event_exhibit_id_random: string; + event_id_random: string; code: string; name: string; - tagline: null|string; + // tagline: null|string; description: null|string; staff_passcode: null data_json: null|string; + leads_api_access: null|boolean; leads_custom_questions_json: null|string; leads_device_sm_qty: null|number; @@ -40,13 +80,53 @@ export interface Exhibit { license_max: number; license_li_json: null|string; cfg_json: string; - enable: boolean; - hide: boolean; - priority: boolean - sort: number; - group: string; + + enable: null|boolean; + hide: null|boolean; + priority: null|boolean + sort: null|number; + group: null|string; + notes: null|string; created_on: Date; - updated_on: Date; + updated_on: null|Date; +} + +export interface Exhibit_tracking { + // id?: number; + id_random: string; + event_exhibit_tracking_id_random: string; + + event_exhibit_id_random: string; + event_badge_id_random: string; + event_person_id_random: null|string; // Is this needed? + + exhibitor_notes: null|string; + + responses_json: null|string; + data_json: null|string; + + event_exhibit_name: string; // Extra field for convenience + + event_badge_title_names: null|string; + event_badge_given_name: string; + event_badge_family_name: null|string; + event_badge_designations: null|string; + event_badge_full_name: string; + + event_badge_affiliations: null|string; + + event_badge_email: null|string; + + event_badge_location: null|string; + + enable: null|boolean; + hide: null|boolean; + priority: null|boolean + sort: null|number; + group: null|string; + notes: null|string; + created_on: Date; + updated_on: null|Date; } export class MySubClassedDexie extends Dexie { @@ -54,14 +134,16 @@ export class MySubClassedDexie extends Dexie { // We just tell the typing system this is the case badges!: Table; exhibits!: Table; + exhibit_tracking!: Table; constructor() { super('ae_events_db'); this.version(1).stores({ - // badges: '++id, full_name, email' // Primary key and indexed props - badges: 'id_random, full_name, full_name_override, email, email_override, affiliations, affiliations_override, badge_type, badge_type_code, badge_type_code_override, badge_type_override, external_event_id, external_id, external_person_id, created_on, updated_on', // Primary key and indexed props - exhibits: 'id_random, code, name, description, staff_passcode, data_json, license_max, license_li_json, cfg_json, created_on, updated_on', - }); + // badges: '++id, full_name, email' // Primary key and indexed props + badges: 'id_random, event_badge_id_random, full_name, full_name_override, email, email_override, affiliations, affiliations_override, badge_type, badge_type_code, badge_type_code_override, badge_type_override, external_event_id, external_id, external_person_id, enable, hide, priority, sort, group, notes, created_on, updated_on', + exhibits: 'id_random, event_exhibit_id_random, code, name, description, staff_passcode, data_json, license_max, license_li_json, cfg_json, enable, hide, priority, sort, group, notes, created_on, updated_on', + exhibit_tracking: 'id_random, event_exhibit_tracking_id_random, event_exhibit_id_random, event_badge_id_random, event_person_id_random, exhibitor_notes, responses_json, data_json, event_badge_full_name, event_badge_email, enable, hide, priority, sort, group, notes, created_on, updated_on' + }); } } diff --git a/src/routes/events_leads/+layout.svelte b/src/routes/events_leads/+layout.svelte index 942b58b4..31027281 100644 --- a/src/routes/events_leads/+layout.svelte +++ b/src/routes/events_leads/+layout.svelte @@ -8,6 +8,11 @@ import { ae_loc, ae_sess, ae_api, slct, slct_trigger } from '$lib/ae_stores'; import { events_loc, events_slct, events_trigger } from '$lib/ae_events_stores'; import { ae_util } from '$lib/ae_utils'; +$events_loc.qry__enabled = 'enabled'; +$events_loc.qry__hidden = 'not_hidden'; +$events_loc.qry__limit = 25; +$events_loc.qry__offset = 0; + onMount(() => { console.log('Events Leads: +layout.svelte'); diff --git a/src/routes/events_leads/+page.svelte b/src/routes/events_leads/+page.svelte index d0265058..821fc017 100644 --- a/src/routes/events_leads/+page.svelte +++ b/src/routes/events_leads/+page.svelte @@ -1,6 +1,6 @@ + + +
+ +{#if $events_slct.exhibit_id && $events_slct.exhibit_obj} +

+ + Leads for {$events_slct.exhibit_obj.name} +

+ +
This section is not currently enabled.
+ + + {$events_loc.leads.show_hidden} +{#if $event_exhibit_tracking_obj_li} + + + + + + + + + + + +{#each $event_exhibit_tracking_obj_li as event_exhibit_tracking_obj, index} + + + + + + + + + + +{/each} + + + +
StarRankPerson
+ + + + + +
+ + + {event_exhibit_tracking_obj.sort ?? ''} + + +
+
+
+ + + + + + + {event_exhibit_tracking_obj.event_badge_email} + + + + {event_exhibit_tracking_obj.event_badge_affiliations} + +
+
+{:else} + No leads available to show + {$event_exhibit_tracking_obj_li} +{/if} + +{:else} + Loading...? +{/if} + +
+ + diff --git a/src/routes/events_leads/exhibit/[slug]/leads_manage.svelte b/src/routes/events_leads/exhibit/[slug]/leads_manage.svelte index 7a42aaee..aec982e9 100644 --- a/src/routes/events_leads/exhibit/[slug]/leads_manage.svelte +++ b/src/routes/events_leads/exhibit/[slug]/leads_manage.svelte @@ -119,7 +119,7 @@ export let get_event_exhibit_tracking_export = async function get_event_exhibit_ Export Data -

Use this to export the leads data for this exhibit to an Excel file format. The data can be downloaded at anytime using the export button below.

+

Use this to export the leads data for this exhibit to an Excel file format. The data can be downloaded at anytime using the export button below. The data exported to exhibitors will likely be these fields: given/first name, family/last name, professional title, affiliations, email, city, state/province, country. The exact fields exported sometimes changes slightly from meeting to meeting.