feat(badges): add Long Names and Print Throughput reports

Two IDB-backed reports under /badges/reports:
- Long Names: filter badges by given/family/full name length (threshold
  adjustable), colour-coded by severity, links to review page
- Print Throughput: bucket print_last_datetime into 5/15/30/60-min
  windows with a horizontal bar chart and expandable badge name list

Also adds a "Badge Reports" nav link on the badges main page.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Scott Idem
2026-06-08 19:32:53 -04:00
parent 88ab5b27d4
commit 8a41f02f0d
4 changed files with 484 additions and 1 deletions

View File

@@ -32,7 +32,7 @@ import Comp_badge_obj_li from './ae_comp__badge_obj_li.svelte';
import Comp_badge_create_form from './ae_comp__badge_create_form.svelte';
import Comp_badge_upload_form from './ae_comp__badge_upload_form.svelte';
import { UserPlus, Printer, Upload, FileText, ChartColumnBig, LayoutTemplate } from '@lucide/svelte';
import { UserPlus, Printer, Upload, FileText, ChartColumnBig, LayoutTemplate, TrendingUp } from '@lucide/svelte';
// Load templates for this event so the create form can show the selector and
// derive badge_type_code_li from whichever template the user picks.
@@ -545,6 +545,11 @@ async function handle_search_refresh(params: any) {
class="btn btn-tertiary">
<ChartColumnBig size="1em" /> Badge Printing Stats
</a>
<a
href={`/events/${$events_slct?.event_id}/badges/reports`}
class="btn btn-tertiary">
<TrendingUp size="1em" /> Badge Reports
</a>
</div>
{/if}
{/if}