Files
sternwarte_server/html/sternwarte/storno/js/storno.js
2025-11-02 22:52:08 +01:00

340 lines
13 KiB
JavaScript

// anmeld.js rxf 2020-09-21
// Anmeldungen anzeigen und abhaken lassen
//
$(document).ready(() => {
// Globale Konstanten und Variable
// const ajaxURL="php/anmeldDB.php";
const ajaxURL="../../DB4js.php";
const maxVisitors = 25
const months2add = 3
let vorlauf = 24
let oldtndata = ""
// Von der Datenbank Werte abholen
// Param:
// body: Object mit cmd und param
// Return:
// angeforderte Daten als JSON
const fetchFromDbase = async (body) => {
const response = await fetch(ajaxURL,{
method: 'POST',
headers: {'Content-Type': 'application/js'},
body: JSON.stringify(body)
});
let rt = await response.json();
return rt
}
// In die Datenbank Werte eintragen
// Param:
// body: Object mit cmd und param
// Return:
// angeforderte Daten als JSON
const putToDbase = async (body) => {
const response = await fetch(ajaxURL,{
method: 'POST',
headers: {'Content-Type': 'application/js'},
body: JSON.stringify(body)
});
return await response.json();
}
// Dat Führungsdatum extrahieren
const buildDatum = async (tn, short) => {
const person = tn.anzahl === '1' ? 'Person' : 'Personen'
const datum = await fetchFromDbase({cmd: 'GET_ONE_DATE', fid: tn.fid})
if(short) {
return `${moment(datum.datum).format('DD.MM.YYYY')}`
}
return `${datum.wtag}, den ${moment(datum.datum).format('DD.MM.YYYY')} um ${datum.uhrzeit} mit ${tn.anzahl} ${person}`
}
// Das Führungsdatum anzeigen
const showdiefuehrung = async (teiln) => {
$('#anmeldung').text(await buildDatum(teiln, false))
$('#anmeldid').show()
$('#ausgetragen').hide()
$('#umgebucht').hide()
$('#lower_text').hide()
$('#nixda').hide()
}
const austragen = async (teilnehmer) => {
// console.log("Austragen von ", teilnehmer)
// return
oldtndata = {...teilnehmer}
let delstr = {cmd: 'DELETE_ENTRY', id: parseInt(teilnehmer.id)}
const erg1 = await putToDbase(delstr)
console.log("Storno Ergebnis: ",erg1)
if(erg1) {
$('#ausgetragen').show()
$('#lower_text').show()
sendEmail(teilnehmer, true)
} else {
alert("Probleme beim Stornieren\nBitte wenden Sie sich an anmeldung@sternwarte-welzheim.de")
}
$('#homebutton').show()
}
const umbuchen = async (teilnehmer) => {
// console.log('Umbuchen von ',teilnehmer)
// return
oldtndata = {...teilnehmer}
let start = moment()
start = start.add(vorlauf, 'h')
let end = moment()
end = end.add(months2add, 'M')
const anzahl = parseInt(teilnehmer.anzahl)
let fuehrungen = await fetchFromDbase({cmd: 'GET_FUEHRUNGEN', start: start.format('YYYYMMDD'), end: end.format('YYYYMMDD')})
let r = `<label for "ftermin" class="labeltext"><strong>Umbuchung auf</strong></label><br /><select name="ftermin" id="ftermin"><option>-- Bitte wählen Sie ein Datum aus--</option>`
for (let f of fuehrungen) {
if(f.datum == teilnehmer.fdatum) {
continue
}
let count = await fetchFromDbase({cmd: 'GET_COUNTS_DATE', date: f.datum})
count = count ? parseInt(count) : 0
if(count + anzahl >= maxVisitors) {
continue // wenn der Platz nicht reicht, nicht anzeigen
}
r += `<option id=${f.id} value=${f.datum}>`
r += `${f.wtag.substring(0,2)} , ${moment(f.datum).format('DD.MM.YYYY')} ${f.uhrzeit} `
r += `Frei ${(maxVisitors-count) > 0 ? maxVisitors-count : 0}</option>`
}
r += '</select>'
$('#umbuchung').html(r)
// $('#umgebucht').html('Bitte wählen Sie ein freies Datum über den kleine Pfeil rechts.')
$('#umgebucht').show()
// Eventhandler für Auswahl eines Datums über die SelectBox:
// Anzeigen der Anmeldungen dazu
$('#ftermin').change( async () => {
const x = $('#ftermin').find(':selected');
const date = x[0].value
teilnehmer.fdatum = date
teilnehmer.fid = x[0].id
const update = {cmd: 'UPDATETLNFD', fdatum: date, fid: x[0].id, id: teilnehmer.id}
const erg = await putToDbase(update)
if(erg) {
$('#umbuchung').hide()
$('#umgebucht').html(`Sie wurden erfolgreich umgebucht auf <br /><br />${await buildDatum(teilnehmer, false)}`)
$('#umgebucht').show()
$('#anmeldid').hide()
$('#anmeldung').show()
$('#lower_text').show()
sendEmail(teilnehmer, false)
} else {
alert("Probleme beim Umbuchen\nBitte wenden Sie sich an anmeldung@sternwarte-welzheim.de")
}
$('#homebutton').show()
});
}
const aendern = async (teilnehmer) => {
console.log('Ändern von ',teilnehmer)
let count = await fetchFromDbase({cmd: 'GET_COUNTS_DATE', date: teilnehmer.fdatum})
let anzahl = parseInt(teilnehmer.anzahl)
let max = anzahl
if(count < maxVisitors) {
max = maxVisitors - (count - anzahl)
}
if (max > 10) {
max = 10
}
console.log("Max: ", max)
$('#maxanzahl').text(`max. ${max}`)
$('#personen').attr({max: max, min: 1, step: 1, value: anzahl})
// Evelthandler Übernehmen geklicked
$('#bsave').click(async () => {
$('#save').hide()
teilnehmer.anzahl = $('#personen').val()
let e = await putToDbase({cmd: 'UPDATE_TLN', data: teilnehmer, id: teilnehmer.id})
$('#newperson').html(`Sie sind nun mit <strong>${teilnehmer.anzahl} </strong> Personen angemeldet.`)
$('#bsave').hide()
$('#newperson').show()
$('#homebutton').show()
})
}
// Emailadresse eingegeben
const setEvent = (f) => {
$(document).on("keypress", "input", async function (e) {
if (e.which === 13) {
let inputVal = $(this).val();
console.log(`Input Return: ${inputVal}`)
// check die eingegebene email
let idx = f.findIndex((obj) => obj.email.toLowerCase() === inputVal.toLowerCase())
if (idx === -1) { // nicht gefunden
$('#anmeldid').hide()
$('#nixda').show()
$('#ausgetragen').hide()
$('#umgebucht').hide()
return
}
showdiefuehrung(f[idx], true)
// Eintrag in der DB löschen
$('#stornieren').click(() => {
austragen(f[idx])
$('#anmeldid').hide()
})
// Abbrechen geklicked
$('#abbrechen').click(() => {
$('#anmeldid').hide()
$('#email').val("")
})
// Umbuchen geklicked
$('#umbuchen').click(() => {
umbuchen(f[idx])
$('#anmeldid').hide()
// $('#email').val("")
})
// Ändern geklicked
$('#aendern').click(() => {
aendern(f[idx])
$('#butgroup').hide()
$('#aenderung').show()
// $('#anmeldid').hide()
// $('#email').val("")
})
}
})
}
// Bestätigungs-Email senden
sendEmail = async (tln, storno) => {
let fdatum = await buildDatum(tln, false)
let oldfdatum = await buildDatum(oldtndata, true)
let subject = `${storno ? "Stornierung":"Umbuchung"} der Führung vom ${oldfdatum} auf der Sternwarte Welzheim`
let body_txt = `
Sehr geehrte Dame, sehr geehrter Herr,
hiermit bestätigen wir die ${storno ? 'Stornierung' : 'Umbuchung'} Ihrer Führung auf der Sternwarte Welzheim vom`
if(!storno) {
body_txt += ` ${oldfdatum}.
Sie wurden umgebucht auf:
${fdatum}
Bitte bringen Sie diese Bestätigung als Ausdruck oder digital zur Führung mit.
Die Führung findet NUR bei sternklarem Himmel statt. Falls der Himmel bedeckt ist
und die Führung ausfällt, erhalten Sie bis spätestens eine Stunde vor Führungsbeginn
eine Email. Sie können sich dann gerne zu einer anderen Führung neu anmelden.
Sollten Sie Fragen haben senden Sie bitte eine Email an anmeldung@sternwarte-welzheim.de.
`} else {
body_txt += `
${fdatum}.
`
}
body_txt += `
Mit freundlichen Grüßen
Beobachterteam der Sternwarte Welzheim
www.sternwarte-welzheim.de
`
/* let body_html = `Sehr geehrte Dame, sehr geehrter Herr,<br /><br />`
if(!storno) {
body_html += `hiermit bestätigen wir die <strong>Umbuchung</strong> Ihrer Führung auf der Sternwarte Welzheim.<br />
<br />Sie wurden umgebucht auf:<br /><br />${fdatum}<br /><br />
Bitte bringen Sie diese Bestätigung als Ausdruck oder digital zur Führung mit.<br /><br />
Die Führung findet NUR bei sternklarem Himmel statt. Falls der Himmel bedeckt ist
und die Führung ausfällt, erhalten Sie bis spätestens eine Stunde vor Führungsbeginn
eine Email. Sie können sich dann gerne zu einer anderen Führung neu anmelden.<br /><br />
Allen Teilnehmern/-innen wird dringend empfohlen, eine FFP2-Maske, die Mund und Nase
bedeckt, zu tragen.<br />
Sollten Sie Fragen haben senden Sie bitte eine Email an <a href="mailto:anmeldung@sternwarte-welzheim.de">anmeldung@sternwarte-welzheim.de</a>`
} else {
body_html += `hiermit bestätigen wir die <strong>Stornierung</strong> Ihrer Führung auf der Sternwarte Welzheim vom<br />`
body_html += `${fdatum}.`
}
body_html += `<br /><br />Mit freundlichen Grüßen<br />Beobachterteam der Sternwarte Welzheim<br /><a href="https://www.sternwarte-welzheim.de">www.sternwarte-welzheim.de</a>`
*/
let erg = await putToDbase({cmd: 'SEND_MAIL_HTML', subject: subject, to: [tln.email], body_txt: body_txt, body_html: ""})
console.log("Antwort von sendmail_1: ", erg)
body_txt = `Die Führung vom ${oldfdatum} wurde ${storno ? 'storniert' : 'umgebucht'}
`
if(!storno) {
body_txt += `
auf ${fdatum}`
}
body_txt += `
Besucher: ${tln.name} ${tln.vorname}`
body_html = `Die Führung vom ${oldfdatum} wurde ${storno ? 'storniert' : 'umgebucht'}`
if(!storno) {
body_html += ` auf ${fdatum}<br />`
}
body_html += `<br />Besucher: ${tln.name} ${tln.vorname}`
erg = await putToDbase({cmd: 'SEND_MAIL_HTML', subject: subject, to: ['rexfue@gmail.com'], body_txt: body_txt, body_html: body_html})
console.log("Antwort von sendmail_2: ", erg)
}
// *****************************************
// main
// *****************************************
// Hier gehts los:
// Von der Datenbank die nächsten 'n' Führungsdaten holen
// und anzeigen
// Params:
// n -> Anzahl der zu holnden Daten
async function main(){
console.log("Running...")
$('.lastchange').text(`Letzte Änderungen: ${VDATE} rxf`)
$('#anmeldid').hide()
$('#nixda').hide()
$('#ausgetragen').hide()
$('#umgebucht').hide()
$('#lower_text').hide()
$('#aenderung').hide()
$('#email').val('')
$('#versn').html("Version: " + VERSION + ' vom ' + VDATE);
let fdatum = moment().format('YYYYMMDD')
// alle Anmeldungen ab fdatum in ein Array holen
let fuehrungen = await fetchFromDbase({cmd: 'GET_ALLTEILN', fdatum: fdatum})
setEvent(fuehrungen)
// // Media Query einbauen:
// let x = window.matchMedia("(max-width: 800px)");
// switchText(x.matches);
// x.addEventListener("change", async (e) => {
// switchText(e.matches);
// // await showAktAnmeldungen(actualdate);
// });
// let curtime = moment().subtract(14,'days').format("YYYYMMDD");
// // let curtime = moment().format("YYYYMMDD");
// console.log(curtime)
// const y = await fetchFromDbase({cmd:'GET_DATES', anzahl:n, date: curtime});
// const last = await fetchFromDbase({cmd:'GET_LASTANMELDUNG', date: curtime});
// const sel = await buildFuehrungsDates(y, last);
// await showAktAnmeldungen(y[sel].datum);
// console.log(y);
// if(params.name != 'Null') {
// await findName(params.name)
// }
// if(params.double == 'true') {
// await showDoubles(curtime);
// }
}
main().catch(console.error);
});