Work on report config options and export of presenters
This commit is contained in:
@@ -22,6 +22,7 @@ let {
|
|||||||
|
|
||||||
// Imports
|
// Imports
|
||||||
import { ae_util } from '$lib/ae_utils/ae_utils';
|
import { ae_util } from '$lib/ae_utils/ae_utils';
|
||||||
|
import { ae_snip, ae_loc, ae_sess, ae_api, ae_trig, slct, slct_trigger } from '$lib/ae_stores';
|
||||||
|
|
||||||
// export let display_mode: string = 'default'; // 'default', 'compact', 'minimal', 'launcher'
|
// export let display_mode: string = 'default'; // 'default', 'compact', 'minimal', 'launcher'
|
||||||
// export let link_to_type: string;
|
// export let link_to_type: string;
|
||||||
@@ -49,6 +50,61 @@ if (log_lvl) {
|
|||||||
// () => db_events.presenters
|
// () => db_events.presenters
|
||||||
// .bulkGet(event_presenter_id_random_li)
|
// .bulkGet(event_presenter_id_random_li)
|
||||||
// );
|
// );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function generate_presenter_export_csv(ae_obj_li) {
|
||||||
|
console.log(`*** generate_presenter_export_csv() ***`, ae_obj_li);
|
||||||
|
|
||||||
|
// We need to create a list with the column names and then a list of lists with the data.
|
||||||
|
let csv_data = [];
|
||||||
|
let csv_columns = ['Presenter ID', 'Name', 'Email', 'Agree', 'Files', 'Code', 'Session', 'Start datetime', 'Presentation', 'Presentation time', 'Updated On'];
|
||||||
|
csv_data.push(csv_columns);
|
||||||
|
|
||||||
|
for (let i = 0; i < ae_obj_li.length; i++) {
|
||||||
|
let csv_row = [];
|
||||||
|
csv_row.push(ae_obj_li[i].event_presenter_id);
|
||||||
|
csv_row.push(ae_obj_li[i].full_name ?? ae_obj_li[i].given_name);
|
||||||
|
csv_row.push(ae_obj_li[i].email ?? '');
|
||||||
|
csv_row.push(ae_obj_li[i].agree ? 'Yes' : 'No');
|
||||||
|
csv_row.push(ae_obj_li[i].file_count ?? '0');
|
||||||
|
csv_row.push(ae_obj_li[i].event_session_code ?? '');
|
||||||
|
csv_row.push(ae_obj_li[i].event_session_name ?? '');
|
||||||
|
csv_row.push(ae_obj_li[i].event_session_start_datetime ? ae_util.iso_datetime_formatter(ae_obj_li[i].event_session_start_datetime, 'datetime_iso_12_no_seconds') : '');
|
||||||
|
csv_row.push(ae_obj_li[i].event_presentation_name ?? '');
|
||||||
|
csv_row.push(ae_obj_li[i].event_presentation_start_datetime ? ae_util.iso_datetime_formatter(ae_obj_li[i].event_presentation_start_datetime, 'time_12_short') : '');
|
||||||
|
csv_row.push(ae_obj_li[i].updated_on ? ae_util.iso_datetime_formatter(ae_obj_li[i].updated_on, 'datetime_iso_12_no_seconds') : '');
|
||||||
|
|
||||||
|
csv_data.push(csv_row);
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log('CSV Data:', csv_data);
|
||||||
|
|
||||||
|
let csv_content_str = '';
|
||||||
|
csv_data.forEach(function(row) {
|
||||||
|
csv_content_str += row.join(';');
|
||||||
|
csv_content_str += '\n';
|
||||||
|
});
|
||||||
|
|
||||||
|
const blob = new Blob([csv_content_str], { type: 'text/csv;charset=utf-8;' });
|
||||||
|
const obj_url = URL.createObjectURL(blob);
|
||||||
|
|
||||||
|
const download_link = document.createElement('a');
|
||||||
|
download_link.setAttribute('href', obj_url);
|
||||||
|
download_link.setAttribute('download', `presenter_list_${ae_util.iso_datetime_formatter()}.csv`);
|
||||||
|
download_link.setAttribute('style', 'display: none;')
|
||||||
|
download_link.textContent = 'Download CSV';
|
||||||
|
|
||||||
|
// document.querySelector('body').appendChild(download_link);
|
||||||
|
document.getElementById('download_csv_container').appendChild(download_link);
|
||||||
|
|
||||||
|
// Automatically download the file
|
||||||
|
download_link.click();
|
||||||
|
|
||||||
|
return csv_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
||||||
@@ -57,23 +113,129 @@ if (log_lvl) {
|
|||||||
{#if $lq__event_presenter_obj_li && $lq__event_presenter_obj_li?.length}
|
{#if $lq__event_presenter_obj_li && $lq__event_presenter_obj_li?.length}
|
||||||
|
|
||||||
<div class="overflow-auto space-y-2">
|
<div class="overflow-auto space-y-2">
|
||||||
<h2 class="h3">
|
<header
|
||||||
<span class="text-base">
|
class="flex flex-row gap-1 items-center justify-between"
|
||||||
Results:
|
>
|
||||||
</span>
|
<h2 class="h3">
|
||||||
|
<span class="text-base">
|
||||||
|
Results:
|
||||||
|
</span>
|
||||||
|
|
||||||
{#if $lq__event_presenter_obj_li.length}
|
{#if $lq__event_presenter_obj_li.length}
|
||||||
<span class="text-3xl font-bold bg-success-100 px-4 border rounded-lg border-success-200"
|
<span class="text-3xl font-bold bg-success-100 px-4 border rounded-lg border-success-200"
|
||||||
title="Count {$lq__event_presenter_obj_li.length ?? 'None'}"
|
title="Count {$lq__event_presenter_obj_li.length ?? 'None'}"
|
||||||
|
>
|
||||||
|
<span class="fas fa-list-ol mx-4"></span>
|
||||||
|
{$lq__event_presenter_obj_li.length ?? 'None'}×
|
||||||
|
</span>
|
||||||
|
{/if}
|
||||||
|
</h2>
|
||||||
|
|
||||||
|
<div
|
||||||
|
class="flex flex-row gap-1 items-center justify-end"
|
||||||
|
class:hidden={!$ae_loc.edit_mode}
|
||||||
|
>
|
||||||
|
<button
|
||||||
|
class="btn btn-sm preset-tonal-warning border border-warning-500 mb-1 generate_csv_btn"
|
||||||
|
onclick={() => {
|
||||||
|
if (!confirm('Generate and download a CSV file with the presenter list?')) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
let csv_data = generate_presenter_export_csv($lq__event_presenter_obj_li);
|
||||||
|
console.log('CSV Data:', csv_data);
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<span class="fas fa-file-csv mx-1"></span>
|
||||||
|
Export Presenters CSV
|
||||||
|
</button>
|
||||||
|
<span id="download_csv_container"></span>
|
||||||
|
|
||||||
|
|
||||||
|
{#if show_session_fields}
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
onclick={() => {
|
||||||
|
show_session_fields = !show_session_fields;
|
||||||
|
}}
|
||||||
|
class="btn btn-sm {show_session_fields ? 'ae_btn_surface' : 'ae_btn_surface_outlined'}"
|
||||||
|
title="Show or hide the session-related column fields."
|
||||||
>
|
>
|
||||||
<span class="fas fa-list-ol mx-4"></span>
|
<span class="fas fa-toggle-on m-1"></span>
|
||||||
{$lq__event_presenter_obj_li.length ?? 'None'}×
|
Showing Session Fields
|
||||||
</span>
|
</button>
|
||||||
|
{:else}
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
onclick={() => {
|
||||||
|
show_session_fields = !show_session_fields;
|
||||||
|
}}
|
||||||
|
class="btn btn-sm {show_session_fields ? 'ae_btn_surface' : 'ae_btn_surface_outlined'}"
|
||||||
|
title="Show or hide the session-related column fields."
|
||||||
|
>
|
||||||
|
<span class="fas fa-toggle-off m-1"></span>
|
||||||
|
Show Session Fields
|
||||||
|
</button>
|
||||||
{/if}
|
{/if}
|
||||||
</h2>
|
|
||||||
|
<!-- Show or hide the session code -->
|
||||||
|
{#if !hide_session_code}
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
onclick={() => {
|
||||||
|
hide_session_code = true;
|
||||||
|
}}
|
||||||
|
class="btn btn-sm ae_btn_surface"
|
||||||
|
title="Hide the session code column from view. Currently showing the Session Code column."
|
||||||
|
>
|
||||||
|
<span class="fas fa-toggle-on m-1"></span>
|
||||||
|
Showing Session Code
|
||||||
|
</button>
|
||||||
|
{:else}
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
onclick={() => {
|
||||||
|
hide_session_code = false;
|
||||||
|
}}
|
||||||
|
class="btn btn-sm ae_btn_surface_outlined"
|
||||||
|
title="Show the session code column. Currently hiding the Session Code column from view."
|
||||||
|
>
|
||||||
|
<span class="fas fa-toggle-off m-1"></span>
|
||||||
|
Show Session Code
|
||||||
|
</button>
|
||||||
|
{/if}
|
||||||
|
|
||||||
|
{#if show_presentation_fields}
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
onclick={() => {
|
||||||
|
show_presentation_fields = !show_presentation_fields;
|
||||||
|
}}
|
||||||
|
class="btn btn-sm {show_presentation_fields ? 'ae_btn_surface' : 'ae_btn_surface_outlined'}"
|
||||||
|
title="Show or hide the extra presentation-related column fields."
|
||||||
|
>
|
||||||
|
<span class="fas fa-toggle-on m-1"></span>
|
||||||
|
Showing Presentation Fields
|
||||||
|
</button>
|
||||||
|
{:else}
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
onclick={() => {
|
||||||
|
show_presentation_fields = !show_presentation_fields;
|
||||||
|
}}
|
||||||
|
class="btn btn-sm {show_presentation_fields ? 'ae_btn_surface' : 'ae_btn_surface_outlined'}"
|
||||||
|
title="Show or hide the extra presentation-related column fields."
|
||||||
|
>
|
||||||
|
<span class="fas fa-toggle-off m-1"></span>
|
||||||
|
Show Presentation Fields
|
||||||
|
</button>
|
||||||
|
{/if}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</header>
|
||||||
|
|
||||||
<table
|
<table
|
||||||
class="table table-auto table-striped w-full text-xs lg:text-sm"
|
class="table table-auto table-striped w-full text-xs lg:text-sm"
|
||||||
>
|
>
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ import { ae_util } from '$lib/ae_utils/ae_utils';
|
|||||||
// import Element_data_store from '$lib/element_data_store_v2.svelte';
|
// import Element_data_store from '$lib/element_data_store_v2.svelte';
|
||||||
import Comp_event_file_obj_tbl from '../../ae_comp__event_file_obj_tbl.svelte';
|
import Comp_event_file_obj_tbl from '../../ae_comp__event_file_obj_tbl.svelte';
|
||||||
import Comp_event_session_obj_tbl from './../../ae_comp__event_session_obj_tbl_wrapper.svelte';
|
import Comp_event_session_obj_tbl from './../../ae_comp__event_session_obj_tbl_wrapper.svelte';
|
||||||
import Comp_event_presenter_obj_tbl from './../presenter/ae_comp__event_presenter_obj_tbl_wrapper.svelte';
|
// import Comp_event_presenter_obj_tbl from './../presenter/ae_comp__event_presenter_obj_tbl_wrapper.svelte';
|
||||||
|
|
||||||
import { liveQuery } from "dexie";
|
import { liveQuery } from "dexie";
|
||||||
// import { core_func } from '$lib/ae_core_functions';
|
// import { core_func } from '$lib/ae_core_functions';
|
||||||
@@ -867,6 +867,8 @@ async function handle_qry__event_session(
|
|||||||
</Comp_event_session_obj_tbl>
|
</Comp_event_session_obj_tbl>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
|
|
||||||
|
<!-- All Event Presenter related reports -->
|
||||||
<Reports_presenters
|
<Reports_presenters
|
||||||
lq__event_obj={lq__event_obj}
|
lq__event_obj={lq__event_obj}
|
||||||
event_presenter_obj_li={$events_sess.event_presenter_obj_li}
|
event_presenter_obj_li={$events_sess.event_presenter_obj_li}
|
||||||
@@ -885,9 +887,9 @@ async function handle_qry__event_session(
|
|||||||
log_lvl={log_lvl}
|
log_lvl={log_lvl}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
|
||||||
<!-- Show presenters that have agreed -->
|
<!-- Show presenters that have agreed -->
|
||||||
{#if 1==3 && $events_loc.pres_mgmt.show_report == 'presenters_agree' && $events_sess.event_presenter_obj_li}
|
<!-- {#if 1==3 && $events_loc.pres_mgmt.show_report == 'presenters_agree' && $events_sess.event_presenter_obj_li}
|
||||||
<!-- <div class="overflow-x-auto"> -->
|
|
||||||
<h3 class="h4 text-center">
|
<h3 class="h4 text-center">
|
||||||
Presenters {#if $events_loc.pres_mgmt.rpt__presenter_agree}Agreed{:else}Not Agreed{/if}
|
Presenters {#if $events_loc.pres_mgmt.rpt__presenter_agree}Agreed{:else}Not Agreed{/if}
|
||||||
{$events_slct.event_presenter_obj_li.length ?? 0} found
|
{$events_slct.event_presenter_obj_li.length ?? 0} found
|
||||||
@@ -908,36 +910,26 @@ async function handle_qry__event_session(
|
|||||||
class="ae_btn_info btn btn-sm m-1"
|
class="ae_btn_info btn btn-sm m-1"
|
||||||
>
|
>
|
||||||
{#if $events_loc.pres_mgmt.rpt__presenter_agree}
|
{#if $events_loc.pres_mgmt.rpt__presenter_agree}
|
||||||
<!-- <span class="fas fa-check m-1"></span> -->
|
|
||||||
<span class="fas fa-toggle-on m-1"></span>
|
<span class="fas fa-toggle-on m-1"></span>
|
||||||
Agreed
|
Agreed
|
||||||
{:else}
|
{:else}
|
||||||
<!-- <span class="fas fa-times m-1"></span> -->
|
|
||||||
<span class="fas fa-toggle-off m-1"></span>
|
<span class="fas fa-toggle-off m-1"></span>
|
||||||
Not Agreed
|
Not Agreed
|
||||||
{/if}
|
{/if}
|
||||||
</button>
|
</button>
|
||||||
</h3>
|
</h3>
|
||||||
<!-- {#if !$events_loc.pres_mgmt.rpt__presenter_agree}
|
|
||||||
<p class="text-center text-red-500 font-bold">This report is not complete! Some records will be missing from these results. This report is being worked on.</p>
|
|
||||||
{/if} -->
|
|
||||||
|
|
||||||
<!-- bind:event_presenter_id_random_li={event_presenter_id_random_li} -->
|
<Comp_event_presenter_obj_tbl
|
||||||
<!-- {#if event_presenter_id_random_li && event_presenter_id_random_li?.length } -->
|
bind:event_presenter_obj_li={$events_sess.event_presenter_obj_li}
|
||||||
<Comp_event_presenter_obj_tbl
|
show_presentation_fields={true}
|
||||||
bind:event_presenter_obj_li={$events_sess.event_presenter_obj_li}
|
show_session_fields={true}
|
||||||
show_presentation_fields={true}
|
log_lvl={2}
|
||||||
show_session_fields={true}
|
>
|
||||||
log_lvl={2}
|
</Comp_event_presenter_obj_tbl>
|
||||||
>
|
{/if} -->
|
||||||
</Comp_event_presenter_obj_tbl>
|
|
||||||
<!-- {:else}
|
|
||||||
<p class="text-center text-red-500 font-bold">No presenters found for this report.</p>
|
|
||||||
{/if} -->
|
|
||||||
{/if}
|
|
||||||
|
|
||||||
<!-- Show presenters with bios -->
|
<!-- Show presenters with bios -->
|
||||||
{#if 1==3 && $events_loc.pres_mgmt.show_report == 'presenters_biography' && $events_sess.event_presenter_obj_li}
|
<!-- {#if 1==3 && $events_loc.pres_mgmt.show_report == 'presenters_biography' && $events_sess.event_presenter_obj_li}
|
||||||
<h3 class="h4 text-center">Presenters with Bios</h3>
|
<h3 class="h4 text-center">Presenters with Bios</h3>
|
||||||
|
|
||||||
<Comp_event_presenter_obj_tbl
|
<Comp_event_presenter_obj_tbl
|
||||||
@@ -947,10 +939,10 @@ async function handle_qry__event_session(
|
|||||||
log_lvl={log_lvl}
|
log_lvl={log_lvl}
|
||||||
>
|
>
|
||||||
</Comp_event_presenter_obj_tbl>
|
</Comp_event_presenter_obj_tbl>
|
||||||
{/if}
|
{/if} -->
|
||||||
|
|
||||||
<!-- Show overview of presenters (status checklist) -->
|
<!-- Show overview of presenters (status checklist) -->
|
||||||
{#if 1==3 && $events_loc.pres_mgmt.show_report == 'presenters_overview' && $events_sess.event_presenter_obj_li}
|
<!-- {#if 1==3 && $events_loc.pres_mgmt.show_report == 'presenters_overview' && $events_sess.event_presenter_obj_li}
|
||||||
<header class="w-full flex flex-row flex-wrap items-center justify-center gap-1">
|
<header class="w-full flex flex-row flex-wrap items-center justify-center gap-1">
|
||||||
<h3 class="h4 text-center">
|
<h3 class="h4 text-center">
|
||||||
Presenters Overview
|
Presenters Overview
|
||||||
@@ -961,7 +953,6 @@ async function handle_qry__event_session(
|
|||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
<div class="flex flex-row items-center justify-center">
|
<div class="flex flex-row items-center justify-center">
|
||||||
<!-- Sorting options (presenter name, start_datetime, updated_on) -->
|
|
||||||
<label class="label text-sm">
|
<label class="label text-sm">
|
||||||
<span class="fas fa-sort m-1"></span>
|
<span class="fas fa-sort m-1"></span>
|
||||||
Sort by:
|
Sort by:
|
||||||
@@ -1053,9 +1044,6 @@ async function handle_qry__event_session(
|
|||||||
<option value="family_name">Family Name</option>
|
<option value="family_name">Family Name</option>
|
||||||
<option value="email">Email</option>
|
<option value="email">Email</option>
|
||||||
<option value="start_datetime">Start Date Time</option>
|
<option value="start_datetime">Start Date Time</option>
|
||||||
<!-- <option value="created_on">Created On</option> -->
|
|
||||||
<!-- <option value="sort">Sort</option> -->
|
|
||||||
<!-- <option value="priority">Priority</option> -->
|
|
||||||
</select>
|
</select>
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
@@ -1069,7 +1057,7 @@ async function handle_qry__event_session(
|
|||||||
log_lvl={log_lvl}
|
log_lvl={log_lvl}
|
||||||
>
|
>
|
||||||
</Comp_event_presenter_obj_tbl>
|
</Comp_event_presenter_obj_tbl>
|
||||||
{/if}
|
{/if} -->
|
||||||
|
|
||||||
<!-- Show recently uploaded files -->
|
<!-- Show recently uploaded files -->
|
||||||
{#if $events_loc.pres_mgmt.show_report == 'recent_files' && event_file_id_random_li}
|
{#if $events_loc.pres_mgmt.show_report == 'recent_files' && event_file_id_random_li}
|
||||||
|
|||||||
@@ -691,7 +691,7 @@ function preventDefault(fn) {
|
|||||||
preset-tonal-warning preset-outlined-warning-200-800 hover:preset-filled-warning-200-800
|
preset-tonal-warning preset-outlined-warning-200-800 hover:preset-filled-warning-200-800
|
||||||
transition
|
transition
|
||||||
"
|
"
|
||||||
title={`Download sponsorship data for ${$ae_loc.account_name}`}
|
title={`Download meeting data for ${$ae_loc.account_name}`}
|
||||||
>
|
>
|
||||||
{#await ae_promises.download__events_export}
|
{#await ae_promises.download__events_export}
|
||||||
<span class="fas fa-spinner fa-spin m-1"></span>
|
<span class="fas fa-spinner fa-spin m-1"></span>
|
||||||
|
|||||||
Reference in New Issue
Block a user