storno an gemneinsame DB angepasst - **** WOP ****

This commit is contained in:
rxf
2025-11-10 20:57:34 +01:00
parent e3bb5d36b9
commit ad0f7b2912
4 changed files with 105 additions and 58 deletions

View File

@@ -1,5 +1,4 @@
<?php
# Hier werden die Anfragen vom Javascript verarbeitet und die
# Datenbank bedient
include 'config_stern.php';
@@ -139,6 +138,10 @@ function getAllTeilnehmer($fdatum)
// die Daten der Führungen in dem Bereich start - end
// in ein Array als ISO8601 holen
// Parameter
@@ -146,10 +149,14 @@ function getAllTeilnehmer($fdatum)
// $end -> bis zu diesem Datum
// Retunrn:
// Array mit den Daten in ISO8601
function getFuehrungen($start, $end) {
function getFuehrungen($start, $end, $typ) {
global $db;
$erg = array();
$sql_sel = "SELECT * FROM fdatum1 where datum >= '$start' AND datum <= '$end' ORDER BY datum ASC";
$erg = [];
$table = 'fdatum1';
if ($typ == 'sonnen') {
$table = 'sonnedatum';
}
$sql_sel = "SELECT * FROM $table where datum >= '$start' AND datum <= '$end' ORDER BY datum ASC";
$result = mysqli_query($db, $sql_sel) or die(mysqli_error($db));
while ($row = mysqli_fetch_assoc($result)) {
foreach ($row as $key => $value) {
@@ -262,6 +269,17 @@ function getOneDate($id) {
return $data;
}
// aus fdatum die div. Datumsteile hole
function getTimeByDate($dt, $typ) {
global $db;
if ($typ == 'sonnen')
return '11 Uhr';
$sql_stmt = "SELECT uhrzeit FROM fdatum1 WHERE datum='$dt'";
$result = mysqli_query($db, $sql_stmt) or die(mysqli_error($db));
$data = mysqli_fetch_assoc($result);
return $data['uhrzeit'];
}
function insertteilnehmer($data) {
global $db;
$name = $data['name'];
@@ -473,6 +491,9 @@ if ($_SERVER['REQUEST_METHOD'] == 'POST') {
case 'GET_ONE_DATE':
$erg = getOneDate($_POST['fid']);
break;
case 'GET_TIME_BY_DATE':
$erg = getTimeByDate($_POST['dt'], $_POST['typ']);
break;
case 'GET_ALLTEILN':
$erg = getAllTeilnehmer($_POST['fdatum']);
break;
@@ -503,7 +524,7 @@ if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$erg = getTeilnehmer(-1, true, false);
break;
case 'GET_FUEHRUNGEN':
$erg = getFuehrungen($_POST['start'], $_POST['end']);
$erg = getFuehrungen($_POST['start'], $_POST['end'], $_POST['typ']);
break;
case 'PUT_FDATES':
$erg = putFdates($_POST['data']);

View File

@@ -2,7 +2,7 @@
.storno {
font-size: 14px;
min-height: 500px;
min-height: 550px;
position: relative;
}
@@ -131,3 +131,8 @@ h5 {
margin-left: 10px;
font-size: 80%;
}
#abbrechen {
background-color: gray;
margin-top: 40px;
}

View File

@@ -51,7 +51,7 @@
Für diese E-Mail Adresse ist keine Führung angemeldet !<br />
</div>
<div id="anmeldid" class="col-12 col-xm-8 text-center">
Sie sind angemeldet für: <br /><br />
Sie sind angemeldet für eine <span id="fart">Sternführung</span> am: <br /><br />
<div id="anmeldung">
2022-07-12 22:00 Uhr 4 Personen
</div>

View File

@@ -5,8 +5,8 @@
$(document).ready(() => {
// Globale Konstanten und Variable
// const ajaxURL="php/anmeldDB.php";
const ajaxURL="../../DB4js.php";
// const ajaxURL="php/anmeldDB.php";
const ajaxURL = "../../DB4js.php";
const maxVisitors = 25
const months2add = 3
@@ -21,9 +21,9 @@ $(document).ready(() => {
// Return:
// angeforderte Daten als JSON
const fetchFromDbase = async (body) => {
const response = await fetch(ajaxURL,{
const response = await fetch(ajaxURL, {
method: 'POST',
headers: {'Content-Type': 'application/js'},
headers: { 'Content-Type': 'application/js' },
body: JSON.stringify(body)
});
let rt = await response.json();
@@ -37,22 +37,41 @@ $(document).ready(() => {
// Return:
// angeforderte Daten als JSON
const putToDbase = async (body) => {
const response = await fetch(ajaxURL,{
const response = await fetch(ajaxURL, {
method: 'POST',
headers: {'Content-Type': 'application/js'},
headers: { 'Content-Type': 'application/js' },
body: JSON.stringify(body)
});
return await response.json();
}
// Wochentag aus integer Datum extrahieren
function getWochentag(datumInt) {
const d = new Date(
Math.floor(datumInt / 10000), // Jahr
Math.floor((datumInt % 10000) / 100) - 1, // Monat (0-basiert)
datumInt % 100 // Tag
);
return ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"][d.getDay()];
}
// Aus dem integer Führungsdatum (aus anmeldungen) den Wochentag und
// die Uhrzeit aus der Tabelle fdatum 1 holen
const getFuhrzeit = async (dt, typ) => {
return await fetchFromDbase({ cmd: 'GET_TIME_BY_DATE', dt: dt, typ: typ })
}
// Das 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')}`
const uhrzeit = await getFuhrzeit(tn.fdatum, tn.typ)
if (short) {
return `${moment(tn.fdatum).format('DD.MM.YYYY')}`
}
return `${datum.wtag}, den ${moment(datum.datum).format('DD.MM.YYYY')} um ${datum.uhrzeit} mit ${tn.anzahl} ${person}`
if(tn.typ === 'sonnen') {
document.getElementById('fart').innerHTML = "Sonnenführung"
}
return `${getWochentag(tn.fdatum)}, den ${moment(tn.fdatum).format('DD.MM.YYYY')} um ${uhrzeit} mit ${tn.anzahl} ${person}`
}
// Das Führungsdatum anzeigen
@@ -67,13 +86,13 @@ $(document).ready(() => {
}
const austragen = async (teilnehmer) => {
// console.log("Austragen von ", teilnehmer)
// return
oldtndata = {...teilnehmer}
let delstr = {cmd: 'DELETE_ENTRY', id: parseInt(teilnehmer.id)}
// 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) {
console.log("Storno Ergebnis: ", erg1)
if (erg1) {
$('#ausgetragen').show()
$('#lower_text').show()
sendEmail(teilnehmer, true)
@@ -84,44 +103,48 @@ $(document).ready(() => {
}
const umbuchen = async (teilnehmer) => {
// console.log('Umbuchen von ',teilnehmer)
// return
oldtndata = {...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')
let add = months2add
if (teilnehmer.typ === 'sonnen') {
add = 12
}
end = end.add(add, 'M')
const anzahl = parseInt(teilnehmer.anzahl)
let fuehrungen = await fetchFromDbase({cmd: 'GET_FUEHRUNGEN', start: start.format('YYYYMMDD'), end: end.format('YYYYMMDD')})
let fuehrungen = await fetchFromDbase({ cmd: 'GET_FUEHRUNGEN', start: start.format('YYYYMMDD'), end: end.format('YYYYMMDD'), typ: teilnehmer.typ})
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) {
if (f.datum == teilnehmer.fdatum) {
continue
}
let count = await fetchFromDbase({cmd: 'GET_COUNTS_DATE', date: f.datum})
let count = await fetchFromDbase({ cmd: 'GET_COUNTS_DATE', date: f.datum })
count = count ? parseInt(count) : 0
if(count + anzahl >= maxVisitors) {
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 += `${getWochentag(f.datum).substring(0, 2)} , ${moment(f.datum).format('DD.MM.YYYY')} ${await getFuhrzeit(f.datum, teilnehmer.typ)} `
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').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 () => {
$('#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 update = { cmd: 'UPDATETLNFD', fdatum: date, fid: x[0].id, id: teilnehmer.id }
const erg = await putToDbase(update)
if(erg) {
if (erg) {
$('#umbuchung').hide()
$('#umgebucht').html(`Sie wurden erfolgreich umgebucht auf <br /><br />${await buildDatum(teilnehmer, false)}`)
$('#umgebucht').show()
@@ -137,11 +160,11 @@ $(document).ready(() => {
}
const aendern = async (teilnehmer) => {
console.log('Ändern von ',teilnehmer)
let count = await fetchFromDbase({cmd: 'GET_COUNTS_DATE', date: teilnehmer.fdatum})
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) {
if (count < maxVisitors) {
max = maxVisitors - (count - anzahl)
}
if (max > 10) {
@@ -149,13 +172,13 @@ $(document).ready(() => {
}
console.log("Max: ", max)
$('#maxanzahl').text(`max. ${max}`)
$('#personen').attr({max: max, min: 1, step: 1, value: anzahl})
$('#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})
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()
@@ -166,7 +189,7 @@ $(document).ready(() => {
}
// Emailadresse eingegeben
// Emailadresse eingegeben
const setEvent = (f) => {
$(document).on("keypress", "input", async function (e) {
if (e.which === 13) {
@@ -196,15 +219,15 @@ $(document).ready(() => {
$('#umbuchen').click(() => {
umbuchen(f[idx])
$('#anmeldid').hide()
// $('#email').val("")
// $('#email').val("")
})
// Ändern geklicked
$('#aendern').click(() => {
aendern(f[idx])
$('#butgroup').hide()
$('#aenderung').show()
// $('#anmeldid').hide()
// $('#email').val("")
// $('#anmeldid').hide()
// $('#email').val("")
})
}
})
@@ -214,20 +237,18 @@ $(document).ready(() => {
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 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) {
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.
@@ -244,12 +265,12 @@ Mit freundlichen Grüßen
Beobachterteam der Sternwarte Welzheim
www.sternwarte-welzheim.de
`
let erg = await putToDbase({cmd: 'SEND_MAIL_HTML', subject: subject, to: [tln.email], body_txt: body_txt, body_html: ""})
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) {
if (!storno) {
body_txt += `
auf ${fdatum}`
}
@@ -258,12 +279,12 @@ auf ${fdatum}`
Besucher: ${tln.name} ${tln.vorname}`
body_html = `Die Führung vom ${oldfdatum} wurde ${storno ? 'storniert' : 'umgebucht'}`
if(!storno) {
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})
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)
}
@@ -277,7 +298,7 @@ Besucher: ${tln.name} ${tln.vorname}`
// und anzeigen
// Params:
// n -> Anzahl der zu holnden Daten
async function main(){
async function main() {
console.log("Running...")
$('.lastchange').text(`Letzte Änderungen: ${VDATE} rxf`)
$('#anmeldid').hide()
@@ -290,7 +311,7 @@ Besucher: ${tln.name} ${tln.vorname}`
$('#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})
let fuehrungen = await fetchFromDbase({ cmd: 'GET_ALLTEILN', fdatum: fdatum })
setEvent(fuehrungen)
}