This commit is contained in:
2024-12-29 17:20:34 -05:00
parent 846450022b
commit e9a652dd31
4 changed files with 114 additions and 124 deletions

View File

@@ -13,12 +13,10 @@
</div>
</div>
<div class="content">
<form id="editor">
<form id="editor" method="POST" action="/updateoffered2su">
<div id="server-response">Server Ready</div>
<br>
Camp Name: <%=campname%><br>
Camp Namex: <%=campname%><br>
Camp Leader: <%=leader%>
<table border="1">
<tr>
<th>Ticket#</th>
@@ -30,10 +28,10 @@
<% for (const t in tickets) { %>
<tr>
<td><%=t%></td>
<td><input type="edit" value="<%=tickets[t].owner%>" id="<%=t%>-owner"> </td>
<td><input type="edit" value="<%=tickets[t].offered%>" id="<%=t%>-offered"></td>
<td><input type="text" class="owner" value="<%=tickets[t].owner%>" name="<%=t%>-owner"> </td>
<td><input type="text" class="offered" value="<%=tickets[t].offered%>" name="<%=t%>-offered"></td>
<td>
<select id="<%=t%>-status" name="status">
<select class="status" name="<%=t%>-status">
<option value="i"<%=tickets[t].status=="i" ? " selected" : ""%>>Issued</option>
<option value="u"<%=tickets[t].status=="u" ? " selected" : ""%>>Used</option>
<option value="r"<%=tickets[t].status=="r" ? " selected" : ""%>>Revoked</option>
@@ -45,10 +43,13 @@
<tr>
</tr>
</table>
</form>
<form action='/moretickets' method='post'>
<input type="hidden" name="campname" value="<%=campname%>">
<button type="submit">Update Tickets</button>
</form>
<br>
<form action='/moretickets' method='post'>
Issue Tickets (Qty): <input type="edit" name="qty"><br>
<input type="hidden" name="campname" value="<%=campname%>">
<button type="submit">Issue</button>
</form>
</div>
@@ -59,66 +60,28 @@
// JavaScript to change the form element
const blankimage=document.getElementById("QRCodeImage").src;
const ResponseDisplay = document.getElementById("server-response");
let ResponseStack = 0;
let ResponseError="";
let ooEdits={}; // Owner or Offer has been edited
function UpdateSR(delta) {
ResponseStack+=delta;
if (ResponseError!="") ResponseDisplay.textContent=ResponseError;
else if (ResponseStack>0) ResponseDisplay.textContent="Waiting for Server";
else ResponseDisplay.textContent="Server Ready";
}
function changeStatus(el) {
console.log("Change Status: ",el.target.value);
const id=el.target.id.slice(0,-7);
const js=JSON.stringify( { ticket: id, status: el.target.value } );
const fetchtable={ method:'POST', headers: { 'Content-Type': 'application/json' }, body: js };
UpdateSR(1);
fetch('/changestatus',fetchtable)
.then( response => { if (!response.ok) throw new Error(`Server responded with status ${response.status}`); else return response.json(); } )
.then( data => UpdateSR(-1) )
.catch( error => { console.log("Here is the error!"+error); ResponseError=error; UpdateSR(-1); })
}
document.body.addEventListener("click", event => {
const id=event.target.id;
console.log("Click event on id ",id);
if (id.endsWith("-action")) {
const id0=id.slice(0,-7);
if (ooEdits[id0]) {
UpdateSR(1);
const ownerEdit=document.getElementById(id0+"-owner");
const offeredEdit=document.getElementById(id0+"-offered");
const js=JSON.stringify( { ticket: id0, owner:ownerEdit.value, offered: offeredEdit.value } );
const fetchtable={ method:'POST', headers: { 'Content-Type': 'application/json' }, body: js };
fetch('/updateticketsu',fetchtable)
.then( response => { if (!response.ok) throw new Error(`Server responded with status ${response.status}`); else return response.json(); } )
.then( data => { UpdateSR(-1); event.target.textContent="QRCode"; ooEdits[id0]=false; } )
.catch( error => { console.log("Here is the error!"+error); ResponseError=error; UpdateSR(-1); })
} else {
const modal = document.getElementById('QRShow');
const qrbanner=document.getElementById('QRBanner');
const qrcodeimage=document.getElementById('QRCodeImage');
const closeModalSpan = document.querySelector('.close');
modal.style.display = 'flex';
const js=JSON.stringify( { ticket: id0 } );
const fetchtable={ method:'POST', headers: { 'Content-Type': 'application/json' }, body: js };
qrcodeimage.src=blankimage;
fetch('/qrcodesu',fetchtable)
.then( response => { if (!response.ok) throw new Error(`Server responded with status ${response.status}`); else return response.json(); } )
.then( data => {
console.log("Data is: ",data);
qrbanner.innerText="Ticket: "+id0+" Owner: "+data.owner;
qrcodeimage.src=data.qrcode;
} )
.catch( error => { console.log("Here is the error!"+error); ResponseError=error; UpdateSR(-1); })
console.log("QRCode ",id0);
}
const modal = document.getElementById('QRShow');
const qrbanner=document.getElementById('QRBanner');
const qrcodeimage=document.getElementById('QRCodeImage');
const closeModalSpan = document.querySelector('.close');
modal.style.display = 'flex';
const js=JSON.stringify( { ticket: id0 } );
const fetchtable={ method:'POST', headers: { 'Content-Type': 'application/json' }, body: js };
qrcodeimage.src=blankimage;
fetch('/qrcodesu',fetchtable)
.then( response => { if (!response.ok) throw new Error(`Server responded with status ${response.status}`); else return response.json(); } )
.then( data => {
console.log("Data is: ",data);
qrbanner.innerText="Ticket: "+id0+" Owner: "+data.owner;
qrcodeimage.src=data.qrcode;
} )
.catch( error => { console.log("Here is the error!"+error); ResponseError=error; })
} else if (["QRShow","QRCodeImage","QRBackground","QRBanner"].includes(id)) {
const modal = document.getElementById('QRShow');
modal.style.display="none";
@@ -128,21 +91,14 @@ document.body.addEventListener("click", event => {
const pulldowns = document.querySelectorAll("[id$=-status]");
pulldowns.forEach(el => {
const pd = document.getElementById(el.id);
pd.addEventListener("change",changeStatus);
});
const MessageArea=document.getElementById("message");
const pulldowns = document.getElementsByClassName("status");
for (let i=0; i<pulldowns.length; i++) pulldowns[i].addEventListener('change',(event) => MessageArea.textContent="Be sure to use the Update Tickets button.");
const owners = document.getElementsByClassName("owner");
for (let i=0; i<owners.length; i++) owners[i].addEventListener('input',(event)=>MessageArea.textContent= "Be sure to use the Update Tickets button.");
const offereds = document.getElementsByClassName("offered");
for (let i=0; i<offereds.length; i++) offereds[i].addEventListener('input',(event)=>MessageArea.textContent= "Be sure to use the Update Tickets button.");
const owners = document.querySelectorAll("[id$=-owner]");
owners.forEach(el => {
const id0=el.id.slice(0,-6);
const OwnerEdit = document.getElementById(id0+"-owner" );
const OfferedEdit = document.getElementById(id0+"-offered");
const ActionButton = document.getElementById(id0+"-action" );
OwnerEdit .addEventListener('input', () => { ActionButton.textContent = "Update"; ooEdits[id0]=true; console.log("Changed OfferedEdit:",OfferedEdit.value); });
OfferedEdit.addEventListener('input', () => { ActionButton.textContent = "Update"; ooEdits[id0]=true; console.log("Changed OfferedEdit:",OfferedEdit.value); });
});
</script>
</body>

View File

@@ -46,60 +46,40 @@ let ResponseStack = 0;
let ResponseError="";
let ooEdits={}; // Owner or Offer has been edited
function UpdateSR(delta) {
ResponseStack+=delta;
if (ResponseError!="") ResponseDisplay.textContent=ResponseError;
else if (ResponseStack>0) ResponseDisplay.textContent="Waiting for Server";
else ResponseDisplay.textContent="Server Ready";
}
document.body.addEventListener("click", event => {
const id=event.target.id;
console.log("Click event on id ",id);
if (id.endsWith("-action")) {
const id0=id.slice(0,-7);
if (ooEdits[id0]) {
UpdateSR(1);
const offeredEdit=document.getElementById(id0+"-offered");
const js=JSON.stringify( { ticket: id0, offered: offeredEdit.value } );
const fetchtable={ method:'POST', headers: { 'Content-Type': 'application/json' }, body: js };
fetch('/updateoffered',fetchtable)
.then( response => { if (!response.ok) throw new Error(`Server responded with status ${response.status}`); else return response.json(); } )
.then( data => { UpdateSR(-1); event.target.textContent="QRCode"; ooEdits[id0]=false; } )
.catch( error => { console.log("Here is the error!"+error); ResponseError=error; UpdateSR(-1); })
} else {
const modal = document.getElementById('QRShow');
const qrbanner=document.getElementById('QRBanner');
const qrcodeimage=document.getElementById('QRCodeImage');
const closeModalSpan = document.querySelector('.close');
modal.style.display = 'flex';
const js=JSON.stringify( { ticket: id0 } );
const fetchtable={ method:'POST', headers: { 'Content-Type': 'application/json' }, body: js };
qrcodeimage.src=blankimage;
fetch('/qrcode',fetchtable)
.then( response => { if (!response.ok) throw new Error(`Server responded with status ${response.status}`); else return response.json(); } )
.then( data => {
console.log("Data is: ",data);
qrbanner.innerText="Ticket: "+id0+" Owner: "+data.owner;
qrcodeimage.src=data.qrcode;
} )
.catch( error => { console.log("Here is the error!"+error); ResponseError=error; UpdateSR(-1); })
console.log("QRCode ",id0);
}
const modal = document.getElementById('QRShow');
const qrbanner=document.getElementById('QRBanner');
const qrcodeimage=document.getElementById('QRCodeImage');
const closeModalSpan = document.querySelector('.close');
modal.style.display = 'flex';
const js=JSON.stringify( { ticket: id0 } );
const fetchtable={ method:'POST', headers: { 'Content-Type': 'application/json' }, body: js };
qrcodeimage.src=blankimage;
fetch('/qrcode',fetchtable)
.then( response => { if (!response.ok) throw new Error(`Server responded with status ${response.status}`); else return response.json(); } )
.then( data => {
console.log("Data is: ",data);
qrbanner.innerText="Ticket: "+id0+" Owner: "+data.owner;
qrcodeimage.src=data.qrcode;
} )
.catch( error => { console.log("Here is the error!"+error); ResponseError=error; })
} else if (["QRShow","QRCodeImage","QRBackground","QRBanner"].includes(id)) {
const modal = document.getElementById('QRShow');
modal.style.display="none";
}
})
}
});
const offereds = document.getElementsByClassName("offered");
const MessageArea=document.getElementById("message");
console.log("Offereds is ",offereds[0]);
const offereds = document.getElementsByClassName("offered");
for (let i=0; i<offereds.length; i++) offereds[i].addEventListener('input',(event)=>MessageArea.textContent= "Be sure to use the Update Offered button.");
</script>

View File

@@ -7,6 +7,9 @@
<body>
<%- include('partials/nav') %>
<div class="content">
<input type="checkbox" class="setting" name="enable-email">Enable Email<br>
<input type="checkbox" class="setting" name="enable-ticket-use">Enable Ticket Use<br>
<input type="checkbox" class="setting" name="enable-credit-cards">Enable Credit Cards<br>
<form action='/purge' method='post'>
<button type="submit" >Purge Revoked Tickets</button>
</form>
@@ -15,5 +18,22 @@
</form>
</div>
</body>
<script>
const MessageArea=document.getElementById("message");
const checkboxes = document.getElementsByClassName("setting");
for (let i=0; i<checkboxes.length; i++) checkboxes[i].addEventListener('change',(event) => {
console.log(event);
fetch('/update-setting',{ method:"POST", headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ name:event.target.name, checked:event.target.checked }) })
.then(response => {
if (!response.ok) throw new Error("Network Error: Server did not respond.");
MessageArea.textContent="Updated "+event.target.name;
return response.json();
})
.catch(error => console.error('Error updating checkbox state:', error));
})
</script>
</html>