Compare commits
11 Commits
4297a98511
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| f6e9f0fef6 | |||
| b77cb63758 | |||
| eb46fd0d6d | |||
| 681cf70341 | |||
| 01a51a8ed1 | |||
| 0e0263abbb | |||
| a8967c707a | |||
| 77dc29fa9c | |||
| 2e8e010ceb | |||
| 61ace47270 | |||
| 66953de7f4 |
@@ -355,9 +355,10 @@ class RepoAnmeld
|
|||||||
$id
|
$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
|
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; }));
|
$ids = array_values(array_filter(array_map('intval', $ids), function ($v) { return $v > 0; }));
|
||||||
if (empty($ids)) return 0;
|
if (empty($ids)) return 0;
|
||||||
|
|
||||||
$placeholders = implode(',', array_fill(0, count($ids), '?'));
|
$placeholders = implode(',', array_fill(0, count($ids), '?'));
|
||||||
$sql = "UPDATE " . TBL_ANMELD . " SET $field=? WHERE id IN ($placeholders)";
|
$sql = "UPDATE " . TBL_ANMELD . " SET $field=? WHERE id IN ($placeholders)";
|
||||||
$params = array_merge([$value], $ids);
|
$params = array_merge([$value], $ids);
|
||||||
@@ -824,7 +826,7 @@ class RepoStatistikJahre
|
|||||||
{
|
{
|
||||||
$sql = "SELECT YEAR(datum) as jahr FROM " . self::TBL . " GROUP BY YEAR(datum) ORDER BY YEAR(datum) DESC";
|
$sql = "SELECT YEAR(datum) as jahr FROM " . self::TBL . " GROUP BY YEAR(datum) ORDER BY YEAR(datum) DESC";
|
||||||
$rows = DB::all($sql);
|
$rows = DB::all($sql);
|
||||||
return array_map(fn($r) => (int)$r['jahr'], $rows);
|
return array_map(function($r) { return (int)$r['jahr']; }, $rows);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -927,7 +929,7 @@ class Mailer
|
|||||||
$ccList = $cc ? [$cc] : [];
|
$ccList = $cc ? [$cc] : [];
|
||||||
$result = sendmail(
|
$result = sendmail(
|
||||||
$subject,
|
$subject,
|
||||||
'info@sternwarte-welzheim.de',
|
'sternwarte.welzheim@gmx.de',
|
||||||
$body,
|
$body,
|
||||||
$ccList,
|
$ccList,
|
||||||
[],
|
[],
|
||||||
@@ -947,9 +949,9 @@ class Mailer
|
|||||||
require_once __DIR__ . '/phpmailer/dosendmail.php';
|
require_once __DIR__ . '/phpmailer/dosendmail.php';
|
||||||
|
|
||||||
// sanitize lists
|
// sanitize lists
|
||||||
$toList = array_values(array_filter($toList, fn($v) => is_string($v) && trim($v) !== ''));
|
$toList = array_values(array_filter($toList, function($v) { return is_string($v) && trim($v) !== ''; }));
|
||||||
$ccList = array_values(array_filter($ccList, fn($v) => is_string($v) && trim($v) !== ''));
|
$ccList = array_values(array_filter($ccList, function($v) { return is_string($v) && trim($v) !== ''; }));
|
||||||
$bccList = array_values(array_filter($bccList, fn($v) => is_string($v) && trim($v) !== ''));
|
$bccList = array_values(array_filter($bccList, function($v) { return is_string($v) && trim($v) !== ''; }));
|
||||||
|
|
||||||
if (empty($toList)) {
|
if (empty($toList)) {
|
||||||
return false;
|
return false;
|
||||||
@@ -957,7 +959,7 @@ class Mailer
|
|||||||
|
|
||||||
$result = sendmail(
|
$result = sendmail(
|
||||||
$subject,
|
$subject,
|
||||||
'info@sternwarte-welzheim.de',
|
'sternwarte.welzheim@gmx.de',
|
||||||
$body,
|
$body,
|
||||||
$ccList,
|
$ccList,
|
||||||
$bccList,
|
$bccList,
|
||||||
@@ -1114,10 +1116,10 @@ try {
|
|||||||
RepoAnmeld::update((int)$input['id'], $input);
|
RepoAnmeld::update((int)$input['id'], $input);
|
||||||
respond(['success' => true]);
|
respond(['success' => true]);
|
||||||
case 'DELETE_TLN':
|
case 'DELETE_TLN':
|
||||||
RepoAnmeld::delete((int)$input['id']);
|
RepoAnmeld::delete((int)$input['id'], $input['typ']);
|
||||||
respond(['success' => true]);
|
respond(['success' => true]);
|
||||||
case 'DELETEONE': // alias for legacy
|
case 'DELETEONE': // alias for legacy
|
||||||
RepoAnmeld::delete((int)$input['id']);
|
RepoAnmeld::delete((int)$input['id'], $input['typ']);
|
||||||
respond(['success' => true]);
|
respond(['success' => true]);
|
||||||
case 'UPDATE_TLN_BULK':
|
case 'UPDATE_TLN_BULK':
|
||||||
if (!isset($input['ids'], $input['field'], $input['values'])) respondError('Missing fields');
|
if (!isset($input['ids'], $input['field'], $input['values'])) respondError('Missing fields');
|
||||||
@@ -1207,33 +1209,119 @@ try {
|
|||||||
case 'SENDMAILZUSAGE':
|
case 'SENDMAILZUSAGE':
|
||||||
$info = RepoSoFue::getById((int)$input['id']);
|
$info = RepoSoFue::getById((int)$input['id']);
|
||||||
if (!$info) respondError('Führung nicht gefunden', 404);
|
if (!$info) respondError('Führung nicht gefunden', 404);
|
||||||
$subject = 'Ihre Sonderführung am ' . date('d.m.Y', strtotime($input['termin']));
|
$ma = RepoBeos::getByName($input['mitarbeiter']);
|
||||||
$body = "Hallo {$info['name']}, Ihre Sonderführung am " . $input['termin'] . " findet mit Mitarbeiter " . $input['mitarbeiter'] . " statt.";
|
$ma_name = $ma['name'];
|
||||||
$ok = Mailer::sendPlain($info['email'], $subject, $body, 'info@sternwarte-welzheim.de');
|
$ma_vorname = $ma['vorname'];
|
||||||
|
$gender = $ma['gender'] == 'm';
|
||||||
|
$ma_mail = $ma['email_1'];
|
||||||
|
$ge1 = $gender ? "unser ehrenamtlicher Mitarbeiter, Herr" : "unsere ehrenamtliche Mitarbeiterin, Frau";
|
||||||
|
$ge2 = $gender ? "ihn" : "sie";
|
||||||
|
$ge3 = $gender ? "Herrn" : "Frau";
|
||||||
|
$dt = date('d.m.Y H:i', strtotime($input['termin']));
|
||||||
|
$subject = 'ZUSAGE - Sternführung am ' . $dt . ' Uhr';
|
||||||
|
$body = "
|
||||||
|
Guten Tag,
|
||||||
|
|
||||||
|
für Ihren Wunschtermin, {$dt} Uhr, hat sich {$ge1} {$ma_vorname} {$ma_name} bereit erklärt,
|
||||||
|
die Sonderführung zu übernehmen. Sie erreichen {$ge2} über die e-mail-Adresse: {$ma_mail}
|
||||||
|
|
||||||
|
Um nähere Besuchsmodalitäten zu klären, bitten wir Sie, mit {$ge3} {$ma_name} Kontakt aufzunehmen.
|
||||||
|
|
||||||
|
Wir bitten Sie, die Spende in Höhe von €50.00 auf unten aufgeführtes Konto zu überweisen oder in bar zur Führung mitzubringen.
|
||||||
|
|
||||||
|
Gesellschaft zur Förderung des Planetariums Stuttgart und der Sternwarte Welzheim e.V.
|
||||||
|
BANKVERBINDUNG: Deutsche Bank AG Stuttgart
|
||||||
|
IBAN DE18 6007 0070 0122 0383 00
|
||||||
|
BIC: DEUTDESSXXX
|
||||||
|
|
||||||
|
|
||||||
|
Mit sternfreundlichen Grüßen
|
||||||
|
Reinhard X. Fürst
|
||||||
|
Sternwarte Welzheim
|
||||||
|
";
|
||||||
|
$ok = Mailer::sendPlain($info['email'], $subject, $body, 'rexfue@gmail.com');
|
||||||
respond(['success' => $ok]);
|
respond(['success' => $ok]);
|
||||||
|
|
||||||
case 'SENDMAIL2BEO':
|
case 'SENDMAIL2BEO':
|
||||||
$mail = RepoBeos::email($input['ma']);
|
$mail = RepoBeos::email($input['ma']);
|
||||||
$vor = RepoBeos::vorname($input['ma']);
|
$vor = RepoBeos::vorname($input['ma']);
|
||||||
|
$dt = date('d.m.Y H:i', strtotime($input['termin']));
|
||||||
if (!$mail) respondError('Mitarbeiter nicht gefunden', 404);
|
if (!$mail) respondError('Mitarbeiter nicht gefunden', 404);
|
||||||
$info = RepoSoFue::getByTermin($input['termin']);
|
$info = RepoSoFue::getByTermin($input['termin']);
|
||||||
if (!$info) respondError('Führung nicht gefunden', 404);
|
if (!$info) respondError('Führung nicht gefunden', 404);
|
||||||
$subject = 'Sonderführung am ' . date('d.m.Y', strtotime($input['termin']));
|
$subject = 'Vereinbarte Sonderführung am ' . date('d.m.Y', strtotime($input['termin']));
|
||||||
$body = "Hallo $vor, du hast eine Sonderführung am {$input['termin']}. Teilnehmer: " . ($info['anzahl'] ?? '-');
|
$body = "
|
||||||
$ok = Mailer::sendPlain($mail, $subject, $body, 'info@sternwarte-welzheim.de');
|
Hallo " . $vor .",
|
||||||
|
|
||||||
|
vielen Dank für die Bereitschaft, die Sonderführung am {$dt} zu übernehmen.
|
||||||
|
Bitte den Termin nicht vergessen und bitte ggf. auch das Teammitglied, das die
|
||||||
|
Führung mitmacht, informieren.
|
||||||
|
|
||||||
|
Der Termin wurde in den Sternwartenkalender eingetragen.
|
||||||
|
|
||||||
|
Die Kontaktdaten sind auf der Sonderführungsseite ( https://sternwarte-welzheim.de/intern/sofue/sofue.php ) zu finden.
|
||||||
|
|
||||||
|
Viele Grüße
|
||||||
|
Reinhard
|
||||||
|
|
||||||
|
Diese Meldung wurde automatisch erzeugt. Es kann nicht geantwortet werden.";
|
||||||
|
|
||||||
|
|
||||||
|
$ok = Mailer::sendPlain($mail, $subject, $body, 'rexfue@gmail.com');
|
||||||
respond(['success' => $ok]);
|
respond(['success' => $ok]);
|
||||||
case 'SENDMAIL2LISTE':
|
case 'SENDMAIL2LISTE':
|
||||||
$info = RepoSoFue::getById((int)$input['id']);
|
$info = RepoSoFue::getById((int)$input['id']);
|
||||||
if (!$info) respondError('Führung nicht gefunden', 404);
|
if (!$info) respondError('Führung nicht gefunden', 404);
|
||||||
$to = $input['to'] ?? LISTE_EMAIL;
|
$to = $input['to'] ?? LISTE_EMAIL;
|
||||||
$subject = 'Neue Anfrage Sonderführung ' . date('d.m.Y', strtotime($info['wtermin']));
|
$subject = 'Neue Anfrage Sonderführung am ' . date('d.m.Y', strtotime($info['wtermin']));
|
||||||
$body = 'Neue Anfrage: ' . $info['name'] . ' Personen: ' . ($info['anzahl'] ?? '-');
|
$body = "
|
||||||
$ok = Mailer::sendPlain($to, $subject, $body);
|
Liebe BEOs,
|
||||||
|
|
||||||
|
wer kann folgende Sonderführung übernehmen?
|
||||||
|
|
||||||
|
Viele Grüße
|
||||||
|
Reinhard
|
||||||
|
|
||||||
|
---------------------------------------------------------------------------------------------------";
|
||||||
|
|
||||||
|
$body = $body . "
|
||||||
|
Name, Vorname: " . $info['name'] . " " . $info['vorname'] . "
|
||||||
|
Verein / Organisation : " . $info['verein'] . "
|
||||||
|
Wunsch - Termin: " . $info['wtermin'] . "
|
||||||
|
Teilnehmerzahl ca.: " . $info['anzahl'] . "
|
||||||
|
|
||||||
|
Weitere Fragen oder Mitteilungen:
|
||||||
|
" . $info['mitteilung'] . "
|
||||||
|
Spendenbescheinigung: \t" . $info['spende'] . "
|
||||||
|
---------------------------------------------------------------------------------------------------";
|
||||||
|
$ok = Mailer::sendPlain($to, $subject, $body);
|
||||||
respond(['success' => $ok]);
|
respond(['success' => $ok]);
|
||||||
|
|
||||||
// Kalender
|
// Kalender
|
||||||
case 'PUT2KALENDER':
|
case 'PUT2KALENDER':
|
||||||
if (!isset($input['id'], $input['termin'], $input['mitarbeiter'])) respondError('Missing fields');
|
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]);
|
respond(['success' => true]);
|
||||||
case 'GET_FDATES':
|
case 'GET_FDATES':
|
||||||
// Returns führungen for calendar display
|
// Returns führungen for calendar display
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
# Production Environment Variables
|
# Production Environment Variables
|
||||||
VITE_API_URL=/intern/sofue/php/sofueDB.php
|
# VITE_API_URL=/intern/sofue/php/sofueDB.php
|
||||||
|
VITE_API_URL=/DB4js_all.php # Lokales Development Backend (über Proxy)
|
||||||
|
|
||||||
# HTTP Basic Authentication
|
# HTTP Basic Authentication
|
||||||
VITE_API_USERNAME=beogruppe
|
VITE_API_USERNAME=beogruppe
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ V 0.0 2019-02-04 rxf
|
|||||||
*/
|
*/
|
||||||
"use strict"
|
"use strict"
|
||||||
|
|
||||||
const DEVELOP=0; // 1 -> Entwicklung 0-> Produktion
|
const DEVELOP=1; // 1 -> Entwicklung 0-> Produktion
|
||||||
|
|
||||||
const moment = require('moment');
|
const moment = require('moment');
|
||||||
const axios = require('axios');
|
const axios = require('axios');
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ Beobachtergruppe Sternwarte Welzheim`
|
|||||||
let abgesagt = null
|
let abgesagt = null
|
||||||
let actualdate;
|
let actualdate;
|
||||||
let isSmallScreen = false
|
let isSmallScreen = false
|
||||||
let DateTime = luxon.DateTime
|
const DateTime = luxon.DateTime
|
||||||
|
|
||||||
|
|
||||||
function $(selector) {
|
function $(selector) {
|
||||||
@@ -99,9 +99,17 @@ Beobachtergruppe Sternwarte Welzheim`
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function storeAbsage(ids) {
|
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 dt = DateTime.now()
|
||||||
const jetzt = dt.toFormat('yyyy-LL-dd HH:mm')
|
const jetzt = dt.toFormat('yyyy-LL-dd HH:mm:ss')
|
||||||
const update = { cmd: 'UPDATE_TLN_BULK', field: 'abgesagt', ids: ids, values: [`"${jetzt}"`] };
|
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);
|
await putToDbase(update);
|
||||||
abgesagt = jetzt
|
abgesagt = jetzt
|
||||||
}
|
}
|
||||||
@@ -122,7 +130,7 @@ Beobachtergruppe Sternwarte Welzheim`
|
|||||||
|
|
||||||
// Teilnehmer aus 'anmeldungen' austragen und den count in 'fdatum1' anpassen
|
// Teilnehmer aus 'anmeldungen' austragen und den count in 'fdatum1' anpassen
|
||||||
const austragen = async (teilnehmer) => {
|
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)
|
const erg1 = await putToDbase(update)
|
||||||
update = {cmd: 'UPDATECOUNT', date: parseInt(teilnehmer.fdatum), anzahl: parseInt(teilnehmer.anzahl)}
|
update = {cmd: 'UPDATECOUNT', date: parseInt(teilnehmer.fdatum), anzahl: parseInt(teilnehmer.anzahl)}
|
||||||
const erg2 = await putToDbase(update)
|
const erg2 = await putToDbase(update)
|
||||||
@@ -304,29 +312,63 @@ Beobachtergruppe Sternwarte Welzheim`
|
|||||||
const grundIndex = Array.from($all('input[name=grund]')).find(el => el.checked)?.value || 0;
|
const grundIndex = Array.from($all('input[name=grund]')).find(el => el.checked)?.value || 0;
|
||||||
absagegrund = absagegrundListe[grundIndex];
|
absagegrund = absagegrundListe[grundIndex];
|
||||||
|
|
||||||
await storeAbsage(liste.ids);
|
// Versuche das Absagedatum zu speichern, aber breche nicht ab wenn es fehlschlägt
|
||||||
|
let datumGespeichert = false;
|
||||||
|
try {
|
||||||
|
await storeAbsage(liste.ids);
|
||||||
|
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') {
|
if (query.typ !== 'sonnen') {
|
||||||
await fetch('https://laufschrift.rexfue.de/switch/switch_on')
|
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);
|
bodyText = bodytext.replace("{absagegrund}", absagegrund);
|
||||||
const mailRet = await fetchFromDbase({
|
try {
|
||||||
cmd: 'SENDMYMAIL',
|
const mailRet = await fetchFromDbase({
|
||||||
to: ['rexfue@gmail.com'],
|
cmd: 'SENDMYMAIL',
|
||||||
betreff: betreff,
|
to: ['rexfue@gmail.com'],
|
||||||
body: bodyText,
|
betreff: betreff,
|
||||||
bcc: liste.emails
|
body: bodyText,
|
||||||
});
|
bcc: liste.emails
|
||||||
if (mailRet.error) {
|
});
|
||||||
$('#errortext').innerHTML = mailRet.errortext
|
|
||||||
|
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-ok').addEventListener('click', () => $('#errordialog').close())
|
||||||
$('#errordialog').showModal();
|
$('#errordialog').showModal();
|
||||||
|
$('#absagedialog').close();
|
||||||
}
|
}
|
||||||
console.log("Mailret: ", mailRet, "Gesendet an: ", liste.emails)
|
|
||||||
$('#absagen').innerHTML = TEXTE.absagebutton(abgesagt)
|
|
||||||
$('#absagedialog').close();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
$('#absagedialog-cancel').addEventListener('click', () => {
|
$('#absagedialog-cancel').addEventListener('click', () => {
|
||||||
|
|||||||
@@ -1,17 +1,27 @@
|
|||||||
// VersiosNummern und -Geschichte
|
// VersiosNummern und -Geschichte
|
||||||
|
|
||||||
const VERSION="1.10.0";
|
const VERSION="1.12.1";
|
||||||
const VDATE="2025-11-17";
|
const VDATE="2026-01-20";
|
||||||
|
|
||||||
/* History
|
/* History
|
||||||
|
|
||||||
Rev. Datum Entwickler
|
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
|
1.10.0 2025-11-17 rxf
|
||||||
- als PHP-Interface nun das DB4js_all.php verwendet
|
- als PHP-Interface nun das DB4js_all.php verwendet
|
||||||
- unter Tabelle noch die Namen der Führenden anzeigen
|
- unter Tabelle noch die Namen der Führenden anzeigen
|
||||||
|
|
||||||
1.9.0 2025-11-07 rxf
|
1.9.0 2025-11-07 rxf
|
||||||
- Datum der Absge mit in der DB (abgesagt). Wird angezeigt, wenn abgesagt wurde.
|
- Datum der Absge mit in der DB (abgesagt). Wird angezeigt, wenn abgesagt wurde.
|
||||||
|
|
||||||
1.8.1 2025-10-19 rxf
|
1.8.1 2025-10-19 rxf
|
||||||
|
|||||||
30
sternwarte/intern/sofue/js/sofue.js
Executable file → Normal file
30
sternwarte/intern/sofue/js/sofue.js
Executable file → Normal file
@@ -284,6 +284,7 @@ function addEditbox(detail) {
|
|||||||
|
|
||||||
//bei der Eingabe der BEOs eine Autovervollständigung durchführen
|
//bei der Eingabe der BEOs eine Autovervollständigung durchführen
|
||||||
function buildBeosComplete() {
|
function buildBeosComplete() {
|
||||||
|
|
||||||
function split( val ) {
|
function split( val ) {
|
||||||
return val.split( /,\s*/ );
|
return val.split( /,\s*/ );
|
||||||
}
|
}
|
||||||
@@ -291,6 +292,19 @@ function buildBeosComplete() {
|
|||||||
return split( term ).pop();
|
return split( term ).pop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Konvertiere beos Array: wenn Objekte, extrahiere die Namen
|
||||||
|
var beosNames = beos.map(function(item) {
|
||||||
|
if (typeof item === 'string') {
|
||||||
|
return item;
|
||||||
|
} else if (item && item.name) {
|
||||||
|
return item.name;
|
||||||
|
} else {
|
||||||
|
return String(item);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log("buildBeosComplete - Original beos:", beos);
|
||||||
|
console.log("buildBeosComplete - Converted names:", beosNames);
|
||||||
|
|
||||||
$( "#curmar" )
|
$( "#curmar" )
|
||||||
// don't navigate away from the field on tab when selecting an item
|
// don't navigate away from the field on tab when selecting an item
|
||||||
@@ -304,8 +318,11 @@ function buildBeosComplete() {
|
|||||||
minLength: 0,
|
minLength: 0,
|
||||||
source: function( request, response ) {
|
source: function( request, response ) {
|
||||||
// delegate back to autocomplete, but extract the last term
|
// delegate back to autocomplete, but extract the last term
|
||||||
response( $.ui.autocomplete.filter(
|
var term = extractLast( request.term );
|
||||||
beos, extractLast( request.term ) ) );
|
console.log("Searching for:", term);
|
||||||
|
var filtered = $.ui.autocomplete.filter(beosNames, term);
|
||||||
|
console.log("Filtered results:", filtered);
|
||||||
|
response( filtered );
|
||||||
},
|
},
|
||||||
focus: function() {
|
focus: function() {
|
||||||
// prevent value inserted on focus
|
// prevent value inserted on focus
|
||||||
@@ -551,7 +568,7 @@ function saveSettings() {
|
|||||||
doAjaxCall_arr(ajaxURL,cmd,showajaxerg);
|
doAjaxCall_arr(ajaxURL,cmd,showajaxerg);
|
||||||
|
|
||||||
if(status == 1) { // offen -> mail an Liste
|
if(status == 1) { // offen -> mail an Liste
|
||||||
sendmail2liste(id);
|
sendmail2liste(id, termin);
|
||||||
}
|
}
|
||||||
if (status == 2) {
|
if (status == 2) {
|
||||||
sendmail2beo(id, marb, termin)
|
sendmail2beo(id, marb, termin)
|
||||||
@@ -595,12 +612,15 @@ function showdbase(val) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Status wurde auf 'offen' gesetzt -> nun eine Mail an die Liste mit der Anfrage senden
|
// 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 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");
|
console.log("Sende mail to Liste");
|
||||||
doAjaxCall_arr(ajaxURL,cmd,showajaxerg);
|
doAjaxCall_arr(ajaxURL,cmd,showajaxerg);
|
||||||
console.log("Mail gesendet");
|
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
|
// Status wurde auf 'zugesgat' gesetzt -> nun eine Mail an den BEO senden
|
||||||
|
|||||||
@@ -1,17 +1,28 @@
|
|||||||
// VersiosNummern und -Geschichte
|
// VersiosNummern und -Geschichte
|
||||||
|
|
||||||
var VERSION="1.92";
|
var VERSION="1.95";
|
||||||
var VDATE="2024-09-20";
|
var VDATE="2026-01-19";
|
||||||
|
|
||||||
/* History
|
/* History
|
||||||
|
|
||||||
Rev. Datum Entwickler
|
Rev. Datum Entwickler
|
||||||
|
1.95 2026-01-19
|
||||||
|
- Eintrag in den Kalender auch bei 'offen'
|
||||||
|
|
||||||
|
1.94 2025-12-22 rxf
|
||||||
|
- Autocomplete repariert
|
||||||
|
|
||||||
|
1.93 2025-12-20 rxf
|
||||||
|
- Texte in DB4js_all angepasst, so dass sie wie im alten sofue.js erscheinen
|
||||||
|
- DB4js_all.php nun verwenden
|
||||||
|
- prüfen auf 'termin === null' ich check1900()
|
||||||
|
|
||||||
1.92 2024-09-20 rxf
|
1.92 2024-09-20 rxf
|
||||||
- Probleme mit 'Zusgae sende' behoben
|
- Probleme mit 'Zusgae sende' behoben
|
||||||
- auch bei mehreren BEOs geht nun die Mail richtig
|
- auch bei mehreren BEOs geht nun die Mail richtig
|
||||||
|
|
||||||
1.91 2024-09-14 rxf
|
1.91 2024-09-14 rxf
|
||||||
- and den BEOS keine Kontaktdaten mehr senden (die stehen in der Übersichtsseite)
|
- and den BEOS keine Kontaktdaten mehr senden (die stehen in der Übersichtsseite)
|
||||||
|
|
||||||
1.90 2024-09-02 rxf
|
1.90 2024-09-02 rxf
|
||||||
- Automatisch Mails senden an Liste bei 'offen' und am BEO und den Anmeldenden bei 'Zusage'
|
- Automatisch Mails senden an Liste bei 'offen' und am BEO und den Anmeldenden bei 'Zusage'
|
||||||
|
|||||||
Reference in New Issue
Block a user