diff --git a/client/src/hooks.server.js b/client/src/hooks.server.js index c1380b2..bd7f61e 100644 --- a/client/src/hooks.server.js +++ b/client/src/hooks.server.js @@ -1,7 +1,10 @@ -import { db } from "$lib/server/db"; +import { db } from '$lib/server/db'; +import { env } from '$env/dynamic/private'; export const init = async () => { - await db.run(`CREATE TABLE IF NOT EXISTS baskets ( + env.NODE_TLS_REJECT_UNAUTHORIZED = 0; + env.BODY_SIZE_LIMIT = 'Infinity'; + await db.run(`CREATE TABLE IF NOT EXISTS baskets ( prefix text, b_id integer, description text, @@ -9,12 +12,12 @@ export const init = async () => { winning_ticket integer, PRIMARY KEY(prefix, b_id) )`); - await db.run(`CREATE TABLE IF NOT EXISTS prefixes ( + await db.run(`CREATE TABLE IF NOT EXISTS prefixes ( prefix text PRIMARY KEY NOT NULL, color text, weight integer )`); - await db.run(`CREATE TABLE IF NOT EXISTS tickets ( + await db.run(`CREATE TABLE IF NOT EXISTS tickets ( prefix text, t_id integer, first_name text, @@ -23,19 +26,19 @@ export const init = async () => { pref text, PRIMARY KEY(prefix, t_id) )`); - await db.run(`CREATE VIEW IF NOT EXISTS drawing AS SELECT b.prefix, b.b_id, b.description, b.winning_ticket, t.last_name, t.first_name, t.phone_number + await db.run(`CREATE VIEW IF NOT EXISTS drawing AS SELECT b.prefix, b.b_id, b.description, b.winning_ticket, t.last_name, t.first_name, t.phone_number FROM baskets b LEFT JOIN tickets t ON b.prefix = t.prefix AND b.winning_ticket = t.t_id ORDER BY b.prefix, b.b_id`); - await db.run(`CREATE VIEW IF NOT EXISTS report_by_basket AS SELECT b.prefix, b.b_id, b.description, b.donors, b.winning_ticket, t.last_name, t.first_name, t.phone_number, t.pref + await db.run(`CREATE VIEW IF NOT EXISTS report_by_basket AS SELECT b.prefix, b.b_id, b.description, b.donors, b.winning_ticket, t.last_name, t.first_name, t.phone_number, t.pref FROM baskets b LEFT JOIN tickets t on b.prefix = t.prefix AND b.winning_ticket = t.t_id ORDER BY b.prefix, b.b_id`); - await db.run(`CREATE VIEW IF NOT EXISTS report_by_name AS SELECT t.last_name, t.first_name, t.phone_number, t.pref, b.prefix, b.b_id, b.description, b.donors, b.winning_ticket + await db.run(`CREATE VIEW IF NOT EXISTS report_by_name AS SELECT t.last_name, t.first_name, t.phone_number, t.pref, b.prefix, b.b_id, b.description, b.donors, b.winning_ticket FROM baskets b LEFT JOIN tickets t ON b.prefix = t.prefix AND b.winning_ticket = t.t_id - ORDER BY t.last_name, t.first_name, t.phone_number, b.prefix, b.b_id`) - await db.run(`CREATE VIEW IF NOT EXISTS report_counts AS SELECT prefix, COUNT(DISTINCT(CONCAT(first_name, last_name, phone_number))) AS unique_buyers, COUNT(*) AS total_buys + ORDER BY t.last_name, t.first_name, t.phone_number, b.prefix, b.b_id`); + await db.run(`CREATE VIEW IF NOT EXISTS report_counts AS SELECT prefix, COUNT(DISTINCT(CONCAT(first_name, last_name, phone_number))) AS unique_buyers, COUNT(*) AS total_buys FROM tickets GROUP BY prefix UNION ALL SELECT 'Total', COUNT(DISTINCT(CONCAT(first_name, last_name, phone_number))), COUNT(*) FROM tickets`); -} +}; diff --git a/client/src/lib/client/components/CommandBar.svelte b/client/src/lib/client/components/CommandBar.svelte index 1acc25f..0aed6f8 100644 --- a/client/src/lib/client/components/CommandBar.svelte +++ b/client/src/lib/client/components/CommandBar.svelte @@ -78,5 +78,10 @@ >Save Marked {/if} + {#if functions.cancel} + + {/if} diff --git a/client/src/lib/server/settings/index.js b/client/src/lib/server/settings/index.js index 3f8e4fa..d1c6fc4 100644 --- a/client/src/lib/server/settings/index.js +++ b/client/src/lib/server/settings/index.js @@ -7,7 +7,8 @@ const defaultSettings = { remote_port: '8000', remote_tls: false, default_pref: 'CALL', - venue_name: 'TAM' + venue_name: 'Venue Name', + disable_attrib: false }; export const getSettings = () => { diff --git a/client/src/routes/+page.server.js b/client/src/routes/+page.server.js index 8985b99..d4b98d9 100644 --- a/client/src/routes/+page.server.js +++ b/client/src/routes/+page.server.js @@ -2,9 +2,10 @@ import { getSettings } from '$lib/server/settings'; export const load = async ({ fetch }) => { const settings = getSettings(); + const disableAttrib = settings.disable_attrib || false; const res = await fetch('/api'); const data = await res.json(); const resPrefixes = await fetch('/api/prefixes'); const dataPrefixes = await resPrefixes.json(); - return { ...data, venueName: settings.venue_name, prefixes: dataPrefixes }; + return { ...data, venueName: settings.venue_name, prefixes: dataPrefixes, disableAttrib }; }; diff --git a/client/src/routes/+page.svelte b/client/src/routes/+page.svelte index 348cfe8..fb6f983 100644 --- a/client/src/routes/+page.svelte +++ b/client/src/routes/+page.svelte @@ -134,12 +134,15 @@ {/if}

© 2026 Ticket Auction Manager

+ {#if !data.disableAttrib}

- Created by Dilan Gilluly. Support me on Ko-FiMy Ko-Fi.

+ {/if}
diff --git a/client/src/routes/baskets/[prefix]/+page.svelte b/client/src/routes/baskets/[prefix]/+page.svelte index c0182f2..7339a06 100644 --- a/client/src/routes/baskets/[prefix]/+page.svelte +++ b/client/src/routes/baskets/[prefix]/+page.svelte @@ -64,6 +64,12 @@ focusIdx(0); }, 1); }, + cancel(){ + if (itemsBuffer.length > 0) { + itemsBuffer.forEach((i) => (i.changed = false)); + this.getPage(); + }; + }, prevPage(){ ((pager.idFrom -= itemsLength), (pager.idTo -= itemsLength)); this.getPage(); @@ -133,8 +139,8 @@ const headers = ['Basket ID', 'Description', 'Donors', 'Save?']; if (browser) { - window.addEventListener('beforeunload', (e) => { - if (itemsBuffer.length > 0) e.preventDefault(); + window.addEventListener('beforeunload', () => { + if (itemsBuffer.length > 0) functions.save(); }); } diff --git a/client/src/routes/drawing/[prefix]/+page.svelte b/client/src/routes/drawing/[prefix]/+page.svelte index b6a070c..8b67f2e 100644 --- a/client/src/routes/drawing/[prefix]/+page.svelte +++ b/client/src/routes/drawing/[prefix]/+page.svelte @@ -61,6 +61,12 @@ focusIdx(0); }, 1); }, + cancel(){ + if (itemsBuffer.length > 0) { + itemsBuffer.forEach((i) => (i.changed = false)); + this.getPage(); + }; + }, pagerFromUpdate(){ pager.idTo = pager.idFrom + (itemsLength - 1); }, @@ -133,8 +139,8 @@ const headers = ['Basket ID', 'Description', 'Winning Ticket', 'Winner', 'Save?']; if (browser) { - window.addEventListener('beforeunload', (e) => { - if (itemsBuffer.length > 0) e.preventDefault(); + window.addEventListener('beforeunload', () => { + if (itemsBuffer.length > 0) functions.save(); }); } diff --git a/client/src/routes/settings/+page.svelte b/client/src/routes/settings/+page.svelte index 5ec6e14..d38ef11 100644 --- a/client/src/routes/settings/+page.svelte +++ b/client/src/routes/settings/+page.svelte @@ -73,6 +73,14 @@
Venue Name:
+
+
Disable Attribution:
+ +