340 lines
13 KiB
JavaScript
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);
|
|
|
|
});
|