Work on report config options and export of presenters
This commit is contained in:
@@ -22,6 +22,7 @@ let {
|
||||
|
||||
// Imports
|
||||
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 link_to_type: string;
|
||||
@@ -49,6 +50,61 @@ if (log_lvl) {
|
||||
// () => db_events.presenters
|
||||
// .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>
|
||||
|
||||
|
||||
@@ -57,23 +113,129 @@ if (log_lvl) {
|
||||
{#if $lq__event_presenter_obj_li && $lq__event_presenter_obj_li?.length}
|
||||
|
||||
<div class="overflow-auto space-y-2">
|
||||
<h2 class="h3">
|
||||
<span class="text-base">
|
||||
Results:
|
||||
</span>
|
||||
<header
|
||||
class="flex flex-row gap-1 items-center justify-between"
|
||||
>
|
||||
<h2 class="h3">
|
||||
<span class="text-base">
|
||||
Results:
|
||||
</span>
|
||||
|
||||
{#if $lq__event_presenter_obj_li.length}
|
||||
<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'}"
|
||||
{#if $lq__event_presenter_obj_li.length}
|
||||
<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'}"
|
||||
>
|
||||
<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>
|
||||
{$lq__event_presenter_obj_li.length ?? 'None'}×
|
||||
</span>
|
||||
<span class="fas fa-toggle-on m-1"></span>
|
||||
Showing Session Fields
|
||||
</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}
|
||||
</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
|
||||
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>
|
||||
<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 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_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 { core_func } from '$lib/ae_core_functions';
|
||||
@@ -867,6 +867,8 @@ async function handle_qry__event_session(
|
||||
</Comp_event_session_obj_tbl>
|
||||
{/if}
|
||||
|
||||
|
||||
<!-- All Event Presenter related reports -->
|
||||
<Reports_presenters
|
||||
lq__event_obj={lq__event_obj}
|
||||
event_presenter_obj_li={$events_sess.event_presenter_obj_li}
|
||||
@@ -885,9 +887,9 @@ async function handle_qry__event_session(
|
||||
log_lvl={log_lvl}
|
||||
/>
|
||||
|
||||
|
||||
<!-- Show presenters that have agreed -->
|
||||
{#if 1==3 && $events_loc.pres_mgmt.show_report == 'presenters_agree' && $events_sess.event_presenter_obj_li}
|
||||
<!-- <div class="overflow-x-auto"> -->
|
||||
<!-- {#if 1==3 && $events_loc.pres_mgmt.show_report == 'presenters_agree' && $events_sess.event_presenter_obj_li}
|
||||
<h3 class="h4 text-center">
|
||||
Presenters {#if $events_loc.pres_mgmt.rpt__presenter_agree}Agreed{:else}Not Agreed{/if}
|
||||
{$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"
|
||||
>
|
||||
{#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>
|
||||
Agreed
|
||||
{:else}
|
||||
<!-- <span class="fas fa-times m-1"></span> -->
|
||||
<span class="fas fa-toggle-off m-1"></span>
|
||||
Not Agreed
|
||||
{/if}
|
||||
</button>
|
||||
</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} -->
|
||||
<!-- {#if event_presenter_id_random_li && event_presenter_id_random_li?.length } -->
|
||||
<Comp_event_presenter_obj_tbl
|
||||
bind:event_presenter_obj_li={$events_sess.event_presenter_obj_li}
|
||||
show_presentation_fields={true}
|
||||
show_session_fields={true}
|
||||
log_lvl={2}
|
||||
>
|
||||
</Comp_event_presenter_obj_tbl>
|
||||
<!-- {:else}
|
||||
<p class="text-center text-red-500 font-bold">No presenters found for this report.</p>
|
||||
{/if} -->
|
||||
{/if}
|
||||
<Comp_event_presenter_obj_tbl
|
||||
bind:event_presenter_obj_li={$events_sess.event_presenter_obj_li}
|
||||
show_presentation_fields={true}
|
||||
show_session_fields={true}
|
||||
log_lvl={2}
|
||||
>
|
||||
</Comp_event_presenter_obj_tbl>
|
||||
{/if} -->
|
||||
|
||||
<!-- 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>
|
||||
|
||||
<Comp_event_presenter_obj_tbl
|
||||
@@ -947,10 +939,10 @@ async function handle_qry__event_session(
|
||||
log_lvl={log_lvl}
|
||||
>
|
||||
</Comp_event_presenter_obj_tbl>
|
||||
{/if}
|
||||
{/if} -->
|
||||
|
||||
<!-- 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">
|
||||
<h3 class="h4 text-center">
|
||||
Presenters Overview
|
||||
@@ -961,7 +953,6 @@ async function handle_qry__event_session(
|
||||
{/if}
|
||||
|
||||
<div class="flex flex-row items-center justify-center">
|
||||
<!-- Sorting options (presenter name, start_datetime, updated_on) -->
|
||||
<label class="label text-sm">
|
||||
<span class="fas fa-sort m-1"></span>
|
||||
Sort by:
|
||||
@@ -1053,9 +1044,6 @@ async function handle_qry__event_session(
|
||||
<option value="family_name">Family Name</option>
|
||||
<option value="email">Email</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>
|
||||
</label>
|
||||
</div>
|
||||
@@ -1069,7 +1057,7 @@ async function handle_qry__event_session(
|
||||
log_lvl={log_lvl}
|
||||
>
|
||||
</Comp_event_presenter_obj_tbl>
|
||||
{/if}
|
||||
{/if} -->
|
||||
|
||||
<!-- Show recently uploaded files -->
|
||||
{#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
|
||||
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}
|
||||
<span class="fas fa-spinner fa-spin m-1"></span>
|
||||
|
||||
Reference in New Issue
Block a user