(change): Attribution can now be disabled, saving and cancelling

behavior
This commit is contained in:
dbob16 committed 2026-09-07 22:13:06 -04:00
1 parent 1b3c97516c
commit a11c313a8e
9 files changed
+59 -20

No files matched your search

+13 -10
View File
@@ -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 () => { 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, prefix text,
b_id integer, b_id integer,
description text, description text,
@@ -9,12 +12,12 @@ export const init = async () => {
winning_ticket integer, winning_ticket integer,
PRIMARY KEY(prefix, b_id) 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, prefix text PRIMARY KEY NOT NULL,
color text, color text,
weight integer weight integer
)`); )`);
await db.run(`CREATE TABLE IF NOT EXISTS tickets ( await db.run(`CREATE TABLE IF NOT EXISTS tickets (
prefix text, prefix text,
t_id integer, t_id integer,
first_name text, first_name text,
@@ -23,19 +26,19 @@ export const init = async () => {
pref text, pref text,
PRIMARY KEY(prefix, t_id) 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 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`); 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 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`); 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 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`) 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 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 FROM tickets
GROUP BY prefix GROUP BY prefix
UNION ALL UNION ALL
SELECT 'Total', COUNT(DISTINCT(CONCAT(first_name, last_name, phone_number))), COUNT(*) SELECT 'Total', COUNT(DISTINCT(CONCAT(first_name, last_name, phone_number))), COUNT(*)
FROM tickets`); FROM tickets`);
} };
@@ -78,5 +78,10 @@
>Save Marked</button >Save Marked</button
> >
{/if} {/if}
{#if functions.cancel}
<button class={bS[prefix.color]} title="Alt + S" onclick={() => functions.cancel()}
>Cancel Marked</button
>
{/if}
</div> </div>
</div> </div>
+2 -1
View File
@@ -7,7 +7,8 @@ const defaultSettings = {
remote_port: '8000', remote_port: '8000',
remote_tls: false, remote_tls: false,
default_pref: 'CALL', default_pref: 'CALL',
venue_name: 'TAM' venue_name: 'Venue Name',
disable_attrib: false
}; };
export const getSettings = () => { export const getSettings = () => {
+2 -1
View File
@@ -2,9 +2,10 @@ import { getSettings } from '$lib/server/settings';
export const load = async ({ fetch }) => { export const load = async ({ fetch }) => {
const settings = getSettings(); const settings = getSettings();
const disableAttrib = settings.disable_attrib || false;
const res = await fetch('/api'); const res = await fetch('/api');
const data = await res.json(); const data = await res.json();
const resPrefixes = await fetch('/api/prefixes'); const resPrefixes = await fetch('/api/prefixes');
const dataPrefixes = await resPrefixes.json(); const dataPrefixes = await resPrefixes.json();
return { ...data, venueName: settings.venue_name, prefixes: dataPrefixes }; return { ...data, venueName: settings.venue_name, prefixes: dataPrefixes, disableAttrib };
}; };
+5 -2
View File
@@ -134,12 +134,15 @@
{/if} {/if}
<div class="text-center text-xs"> <div class="text-center text-xs">
<p>&copy; 2026 Ticket Auction Manager</p> <p>&copy; 2026 Ticket Auction Manager</p>
{#if !data.disableAttrib}
<p> <p>
Created by Dilan Gilluly. Support me on <a Created by Dilan Gilluly. <a
href="https://ko-fi.com/techguydilan" href="https://ko-fi.com/techguydilan"
class="text-blue-500">Ko-Fi</a class="text-blue-500"
target="_blank">My Ko-Fi</a
>. >.
</p> </p>
{/if}
</div> </div>
</div> </div>
</div> </div>
@@ -64,6 +64,12 @@
focusIdx(0); focusIdx(0);
}, 1); }, 1);
}, },
cancel(){
if (itemsBuffer.length > 0) {
itemsBuffer.forEach((i) => (i.changed = false));
this.getPage();
};
},
prevPage(){ prevPage(){
((pager.idFrom -= itemsLength), (pager.idTo -= itemsLength)); ((pager.idFrom -= itemsLength), (pager.idTo -= itemsLength));
this.getPage(); this.getPage();
@@ -133,8 +139,8 @@
const headers = ['Basket ID', 'Description', 'Donors', 'Save?']; const headers = ['Basket ID', 'Description', 'Donors', 'Save?'];
if (browser) { if (browser) {
window.addEventListener('beforeunload', (e) => { window.addEventListener('beforeunload', () => {
if (itemsBuffer.length > 0) e.preventDefault(); if (itemsBuffer.length > 0) functions.save();
}); });
} }
</script> </script>
@@ -61,6 +61,12 @@
focusIdx(0); focusIdx(0);
}, 1); }, 1);
}, },
cancel(){
if (itemsBuffer.length > 0) {
itemsBuffer.forEach((i) => (i.changed = false));
this.getPage();
};
},
pagerFromUpdate(){ pagerFromUpdate(){
pager.idTo = pager.idFrom + (itemsLength - 1); pager.idTo = pager.idFrom + (itemsLength - 1);
}, },
@@ -133,8 +139,8 @@
const headers = ['Basket ID', 'Description', 'Winning Ticket', 'Winner', 'Save?']; const headers = ['Basket ID', 'Description', 'Winning Ticket', 'Winner', 'Save?'];
if (browser) { if (browser) {
window.addEventListener('beforeunload', (e) => { window.addEventListener('beforeunload', () => {
if (itemsBuffer.length > 0) e.preventDefault(); if (itemsBuffer.length > 0) functions.save();
}); });
} }
</script> </script>
+8
View File
@@ -73,6 +73,14 @@
<div>Venue Name:</div> <div>Venue Name:</div>
<input type="text" id="venue_name" class={iS.normal} bind:value={settings.venue_name} /> <input type="text" id="venue_name" class={iS.normal} bind:value={settings.venue_name} />
</div> </div>
<div class="flex flex-row gap-1 items-center">
<div>Disable Attribution:</div>
<button
class={bS.gray}
onclick={() => {
settings.disable_attrib ? settings.disable_attrib = false : settings.disable_attrib = true
}}>{ settings.disable_attrib ? "Yes" : "No" }</button>
</div>
<div class="flex flex-row gap-1 items-center"> <div class="flex flex-row gap-1 items-center">
<button <button
class={bS.gray} class={bS.gray}
@@ -64,6 +64,12 @@
focusIdx(0); focusIdx(0);
}, 1); }, 1);
}, },
cancel(){
if (itemsBuffer.length > 0) {
itemsBuffer.forEach((i) => (i.changed = false));
this.getPage();
};
},
prevPage(){ prevPage(){
((pager.idFrom -= itemsLength), (pager.idTo -= itemsLength)); ((pager.idFrom -= itemsLength), (pager.idTo -= itemsLength));
this.getPage(); this.getPage();
@@ -133,8 +139,8 @@
const headers = ['Ticket ID', 'First Name', 'Last Name', 'Phone Number', 'Pref', 'Save?']; const headers = ['Ticket ID', 'First Name', 'Last Name', 'Phone Number', 'Pref', 'Save?'];
if (browser) { if (browser) {
window.addEventListener('beforeunload', (e) => { window.addEventListener('beforeunload', () => {
if (itemsBuffer.length > 0) e.preventDefault(); if (itemsBuffer.length > 0) functions.save();
}); });
} }
</script> </script>