storno an gemneinsame DB angepasst - **** WOP ****
This commit is contained in:
+26
-5
@@ -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']);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user