Compare commits
5 Commits
0e0263abbb
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| f6e9f0fef6 | |||
| b77cb63758 | |||
| eb46fd0d6d | |||
| 681cf70341 | |||
| 01a51a8ed1 |
@@ -355,9 +355,10 @@ class RepoAnmeld
|
||||
$id
|
||||
]);
|
||||
}
|
||||
public static function delete(int $id): int
|
||||
public static function delete(int $id, string $typ): int
|
||||
{
|
||||
return DB::exec("DELETE FROM " . TBL_ANMELD . " WHERE id=?", [$id]);
|
||||
$table = ($typ == 'regular') ? TBL_ANMELD : TBL_SONNEANMELD;
|
||||
return DB::exec("DELETE FROM " . $table . " WHERE id=?", [$id]);
|
||||
}
|
||||
public static function bulkUpdateField(array $ids, string $field, $value): int
|
||||
{
|
||||
@@ -368,6 +369,7 @@ class RepoAnmeld
|
||||
}
|
||||
$ids = array_values(array_filter(array_map('intval', $ids), function ($v) { return $v > 0; }));
|
||||
if (empty($ids)) return 0;
|
||||
|
||||
$placeholders = implode(',', array_fill(0, count($ids), '?'));
|
||||
$sql = "UPDATE " . TBL_ANMELD . " SET $field=? WHERE id IN ($placeholders)";
|
||||
$params = array_merge([$value], $ids);
|
||||
@@ -927,7 +929,7 @@ class Mailer
|
||||
$ccList = $cc ? [$cc] : [];
|
||||
$result = sendmail(
|
||||
$subject,
|
||||
'info@sternwarte-welzheim.de',
|
||||
'sternwarte.welzheim@gmx.de',
|
||||
$body,
|
||||
$ccList,
|
||||
[],
|
||||
@@ -957,7 +959,7 @@ class Mailer
|
||||
|
||||
$result = sendmail(
|
||||
$subject,
|
||||
'info@sternwarte-welzheim.de',
|
||||
'sternwarte.welzheim@gmx.de',
|
||||
$body,
|
||||
$ccList,
|
||||
$bccList,
|
||||
@@ -1114,10 +1116,10 @@ try {
|
||||
RepoAnmeld::update((int)$input['id'], $input);
|
||||
respond(['success' => true]);
|
||||
case 'DELETE_TLN':
|
||||
RepoAnmeld::delete((int)$input['id']);
|
||||
RepoAnmeld::delete((int)$input['id'], $input['typ']);
|
||||
respond(['success' => true]);
|
||||
case 'DELETEONE': // alias for legacy
|
||||
RepoAnmeld::delete((int)$input['id']);
|
||||
RepoAnmeld::delete((int)$input['id'], $input['typ']);
|
||||
respond(['success' => true]);
|
||||
case 'UPDATE_TLN_BULK':
|
||||
if (!isset($input['ids'], $input['field'], $input['values'])) respondError('Missing fields');
|
||||
@@ -1237,7 +1239,7 @@ try {
|
||||
Reinhard X. Fürst
|
||||
Sternwarte Welzheim
|
||||
";
|
||||
$ok = Mailer::sendPlain($info['email'], $subject, $body, 'info@sternwarte-welzheim.de');
|
||||
$ok = Mailer::sendPlain($info['email'], $subject, $body, 'rexfue@gmail.com');
|
||||
respond(['success' => $ok]);
|
||||
|
||||
case 'SENDMAIL2BEO':
|
||||
@@ -1298,7 +1300,28 @@ Spendenbescheinigung: \t" . $info['spende'] . "
|
||||
// Kalender
|
||||
case 'PUT2KALENDER':
|
||||
if (!isset($input['id'], $input['termin'], $input['mitarbeiter'])) respondError('Missing fields');
|
||||
error_log('Kalender-Eintrag: ' . $input['id'] . ' ' . $input['termin'] . ' ' . $input['mitarbeiter']);
|
||||
|
||||
// Sonderführung laden
|
||||
$sofue = RepoSoFue::getById((int)$input['id']);
|
||||
if (!$sofue) respondError('Sonderführung nicht gefunden', 404);
|
||||
|
||||
// Datum aus termin extrahieren und in YYYYMMDD Format konvertieren
|
||||
$terminDate = new DateTime($input['termin']);
|
||||
$dateStr = $terminDate->format('Y-m-d H:i');
|
||||
$endTime = $terminDate->modify('+2hours');
|
||||
$endStr = $endTime->format('Y-m-d H:i');
|
||||
|
||||
// Titel mit Mitarbeiter für Kalendereintrag erstellen
|
||||
$title = "WK, SF " . trim($sofue['name']) . ", " . $input['mitarbeiter'];
|
||||
|
||||
// Kalendereintrag erstellen
|
||||
RepoKalender::insert([
|
||||
'start' => $dateStr,
|
||||
'end' => $endStr,
|
||||
'title' => $title,
|
||||
'description' => ''
|
||||
]);
|
||||
error_log('Kalender-Eintrag erstellt: ' . $input['id'] . ' ' . $input['termin'] . ' ' . $input['mitarbeiter']);
|
||||
respond(['success' => true]);
|
||||
case 'GET_FDATES':
|
||||
// Returns führungen for calendar display
|
||||
|
||||
@@ -30,7 +30,7 @@ V 0.0 2019-02-04 rxf
|
||||
*/
|
||||
"use strict"
|
||||
|
||||
const DEVELOP=0; // 1 -> Entwicklung 0-> Produktion
|
||||
const DEVELOP=1; // 1 -> Entwicklung 0-> Produktion
|
||||
|
||||
const moment = require('moment');
|
||||
const axios = require('axios');
|
||||
|
||||
@@ -55,7 +55,7 @@ Beobachtergruppe Sternwarte Welzheim`
|
||||
let abgesagt = null
|
||||
let actualdate;
|
||||
let isSmallScreen = false
|
||||
let DateTime = luxon.DateTime
|
||||
const DateTime = luxon.DateTime
|
||||
|
||||
|
||||
function $(selector) {
|
||||
@@ -99,9 +99,17 @@ Beobachtergruppe Sternwarte Welzheim`
|
||||
}
|
||||
|
||||
async function storeAbsage(ids) {
|
||||
if (!DateTime || typeof DateTime.now !== 'function') {
|
||||
console.error('Luxon DateTime ist nicht verfügbar');
|
||||
throw new Error('Datum kann nicht erstellt werden - Luxon nicht geladen');
|
||||
}
|
||||
const dt = DateTime.now()
|
||||
const jetzt = dt.toFormat('yyyy-LL-dd HH:mm')
|
||||
const update = { cmd: 'UPDATE_TLN_BULK', field: 'abgesagt', ids: ids, values: [`"${jetzt}"`] };
|
||||
const jetzt = dt.toFormat('yyyy-LL-dd HH:mm:ss')
|
||||
if (!jetzt || jetzt === 'undefined' || jetzt.includes('undefined')) {
|
||||
console.error('Ungültiges Datum generiert:', jetzt);
|
||||
throw new Error('Ungültiges Datum erstellt');
|
||||
}
|
||||
const update = { cmd: 'UPDATE_TLN_BULK', field: 'abgesagt', ids: ids, values: [jetzt] };
|
||||
await putToDbase(update);
|
||||
abgesagt = jetzt
|
||||
}
|
||||
@@ -122,7 +130,7 @@ Beobachtergruppe Sternwarte Welzheim`
|
||||
|
||||
// Teilnehmer aus 'anmeldungen' austragen und den count in 'fdatum1' anpassen
|
||||
const austragen = async (teilnehmer) => {
|
||||
let update = {cmd: 'DELETEONE', id: parseInt(teilnehmer.id)}
|
||||
let update = {cmd: 'DELETEONE', id: parseInt(teilnehmer.id), typ: query.typ}
|
||||
const erg1 = await putToDbase(update)
|
||||
update = {cmd: 'UPDATECOUNT', date: parseInt(teilnehmer.fdatum), anzahl: parseInt(teilnehmer.anzahl)}
|
||||
const erg2 = await putToDbase(update)
|
||||
@@ -304,13 +312,29 @@ Beobachtergruppe Sternwarte Welzheim`
|
||||
const grundIndex = Array.from($all('input[name=grund]')).find(el => el.checked)?.value || 0;
|
||||
absagegrund = absagegrundListe[grundIndex];
|
||||
|
||||
// Versuche das Absagedatum zu speichern, aber breche nicht ab wenn es fehlschlägt
|
||||
let datumGespeichert = false;
|
||||
try {
|
||||
await storeAbsage(liste.ids);
|
||||
|
||||
if (query.typ !== 'sonnen') {
|
||||
await fetch('https://laufschrift.rexfue.de/switch/switch_on')
|
||||
datumGespeichert = true;
|
||||
} catch (error) {
|
||||
console.error('Fehler beim Speichern des Absagedatums:', error);
|
||||
// Warnung anzeigen, aber weitermachen
|
||||
console.warn('Absagedatum konnte nicht gespeichert werden, aber Mail wird trotzdem versendet');
|
||||
}
|
||||
|
||||
// Laufschrift einschalten (falls regular)
|
||||
if (query.typ !== 'sonnen') {
|
||||
try {
|
||||
await fetch('https://laufschrift.rexfue.de/switch/switch_on')
|
||||
} catch (error) {
|
||||
console.error('Laufschrift konnte nicht eingeschaltet werden:', error);
|
||||
}
|
||||
}
|
||||
|
||||
// Mail senden (wichtigster Teil!)
|
||||
bodyText = bodytext.replace("{absagegrund}", absagegrund);
|
||||
try {
|
||||
const mailRet = await fetchFromDbase({
|
||||
cmd: 'SENDMYMAIL',
|
||||
to: ['rexfue@gmail.com'],
|
||||
@@ -318,15 +342,33 @@ Beobachtergruppe Sternwarte Welzheim`
|
||||
body: bodyText,
|
||||
bcc: liste.emails
|
||||
});
|
||||
|
||||
if (mailRet.error) {
|
||||
$('#errortext').innerHTML = mailRet.errortext
|
||||
$('#errordialog-ok').addEventListener('click', () => $('#errordialog').close())
|
||||
$('#errordialog').showModal();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
console.log("Mailret: ", mailRet, "Gesendet an: ", liste.emails)
|
||||
|
||||
// Zeige Warnung an, wenn Datum nicht gespeichert werden konnte
|
||||
if (!datumGespeichert) {
|
||||
$('#errortext').innerHTML = `<strong>Hinweis:</strong><br>Die Absage-Mail wurde erfolgreich versendet.<br><br>Das Absagedatum konnte jedoch nicht in der Datenbank gespeichert werden. Bitte notieren Sie manuell, dass die Absage gesendet wurde.`;
|
||||
$('#errordialog-ok').addEventListener('click', () => $('#errordialog').close())
|
||||
$('#errordialog').showModal();
|
||||
}
|
||||
|
||||
$('#absagen').innerHTML = TEXTE.absagebutton(abgesagt)
|
||||
$('#absagedialog').close();
|
||||
|
||||
} catch (error) {
|
||||
console.error('Fehler beim Mail-Versand:', error);
|
||||
$('#errortext').innerHTML = `<strong>Fehler beim Versenden der Absage-Mail:</strong><br>${error.message}`;
|
||||
$('#errordialog-ok').addEventListener('click', () => $('#errordialog').close())
|
||||
$('#errordialog').showModal();
|
||||
$('#absagedialog').close();
|
||||
}
|
||||
});
|
||||
|
||||
$('#absagedialog-cancel').addEventListener('click', () => {
|
||||
|
||||
@@ -1,12 +1,22 @@
|
||||
// VersiosNummern und -Geschichte
|
||||
|
||||
const VERSION="1.10.0";
|
||||
const VDATE="2025-11-17";
|
||||
const VERSION="1.12.1";
|
||||
const VDATE="2026-01-20";
|
||||
|
||||
/* History
|
||||
|
||||
Rev. Datum Entwickler
|
||||
|
||||
1.12.1 2026-01-20 rxf
|
||||
- bei DELETEONE den typ mit übergeben (sonst geht storno bei sonne nicht)
|
||||
|
||||
1.12.0 2026-01-11 rxf
|
||||
- Abmeldedatum richtig als einfacher String mit Sekunden abspeichern
|
||||
|
||||
1.11.0 2025-12-24 rxf
|
||||
- Wenn das Absagedatum ungültig ist, eine Fehlermeldung
|
||||
erzeugen, aber die Mails trotzdem versenden
|
||||
|
||||
1.10.0 2025-11-17 rxf
|
||||
- als PHP-Interface nun das DB4js_all.php verwendet
|
||||
- unter Tabelle noch die Namen der Führenden anzeigen
|
||||
|
||||
@@ -568,7 +568,7 @@ function saveSettings() {
|
||||
doAjaxCall_arr(ajaxURL,cmd,showajaxerg);
|
||||
|
||||
if(status == 1) { // offen -> mail an Liste
|
||||
sendmail2liste(id);
|
||||
sendmail2liste(id, termin);
|
||||
}
|
||||
if (status == 2) {
|
||||
sendmail2beo(id, marb, termin)
|
||||
@@ -612,12 +612,15 @@ function showdbase(val) {
|
||||
}
|
||||
|
||||
// Status wurde auf 'offen' gesetzt -> nun eine Mail an die Liste mit der Anfrage senden
|
||||
function sendmail2liste(id) {
|
||||
function sendmail2liste(id, termin) {
|
||||
const liste = 'sternwarte@planetariumsgesellschaft.de';
|
||||
const cmd = {cmd: 'SENDMAIL2LISTE', id: id, to: liste}
|
||||
let cmd = {cmd: 'SENDMAIL2LISTE', id: id, to: liste}
|
||||
console.log("Sende mail to Liste");
|
||||
doAjaxCall_arr(ajaxURL,cmd,showajaxerg);
|
||||
console.log("Mail gesendet");
|
||||
// in den Kalender als Platzhalter (mit ??) eintragen
|
||||
cmd = {cmd: 'PUT2KALENDER', id: id, termin: termin, mitarbeiter: '??'}
|
||||
doAjaxCall_arr(ajaxURL,cmd,showajaxerg);
|
||||
}
|
||||
|
||||
// Status wurde auf 'zugesgat' gesetzt -> nun eine Mail an den BEO senden
|
||||
|
||||
@@ -1,11 +1,14 @@
|
||||
// VersiosNummern und -Geschichte
|
||||
|
||||
var VERSION="1.94";
|
||||
var VDATE="2025-12-23";
|
||||
var VERSION="1.95";
|
||||
var VDATE="2026-01-19";
|
||||
|
||||
/* History
|
||||
|
||||
Rev. Datum Entwickler
|
||||
1.95 2026-01-19
|
||||
- Eintrag in den Kalender auch bei 'offen'
|
||||
|
||||
1.94 2025-12-22 rxf
|
||||
- Autocomplete repariert
|
||||
|
||||
|
||||
Reference in New Issue
Block a user