(change): Attribution can now be disabled, saving and cancelling
behavior
This commit is contained in:
1 parent
1b3c97516c
commit
a11c313a8e
9 files changed
+52
-13
No files matched your search
@@ -1,6 +1,9 @@
|
|||||||
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 () => {
|
||||||
|
env.NODE_TLS_REJECT_UNAUTHORIZED = 0;
|
||||||
|
env.BODY_SIZE_LIMIT = 'Infinity';
|
||||||
await db.run(`CREATE TABLE IF NOT EXISTS baskets (
|
await db.run(`CREATE TABLE IF NOT EXISTS baskets (
|
||||||
prefix text,
|
prefix text,
|
||||||
b_id integer,
|
b_id integer,
|
||||||
@@ -31,11 +34,11 @@ export const init = async () => {
|
|||||||
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`);
|
||||||
}
|
};
|
||||||
@@ -77,6 +77,11 @@
|
|||||||
<button class={bS[prefix.color]} title="Alt + S" onclick={() => functions.save()}
|
<button class={bS[prefix.color]} title="Alt + S" onclick={() => functions.save()}
|
||||||
>Save Marked</button
|
>Save Marked</button
|
||||||
>
|
>
|
||||||
|
{/if}
|
||||||
|
{#if functions.cancel}
|
||||||
|
<button class={bS[prefix.color]} title="Alt + S" onclick={() => functions.cancel()}
|
||||||
|
>Cancel Marked</button
|
||||||
|
>
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -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,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 };
|
||||||
};
|
};
|
||||||
@@ -134,12 +134,15 @@
|
|||||||
{/if}
|
{/if}
|
||||||
<div class="text-center text-xs">
|
<div class="text-center text-xs">
|
||||||
<p>© 2026 Ticket Auction Manager</p>
|
<p>© 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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in new issue
Block a user