Compare commits

..

11 Commits

Author SHA1 Message Date
rxf
f6e9f0fef6 DB4ls_all: bei DELTEONE den TYP mit auswerten
anmeld.js: den TYP mit übergeben
Version angepasst
2026-01-20 15:17:13 +01:00
rxf
b77cb63758 sofue: Eintrag in Kalender auch bei 'offen' 2026-01-19 17:15:44 +01:00
rxf
eb46fd0d6d Tippfehler 'jetz' verbessert 2026-01-14 19:05:10 +01:00
rxf
681cf70341 Richtiges Abspeichern des Absagedatums 2026-01-11 09:18:21 +01:00
rxf
01a51a8ed1 Absage-Datum checken 2025-12-24 16:47:37 +01:00
rxf
0e0263abbb Merge branch 'SoFue-mit-Vanilla-javascript' into main 2025-12-24 10:07:52 +01:00
rxf
a8967c707a Version angepasst 2025-12-22 10:32:36 +01:00
rxf
77dc29fa9c Autovervollständigung klappt nun wieder 2025-12-22 10:30:27 +01:00
rxf
2e8e010ceb DB4js_all.php an POHP7.3 angepasst 2025-12-22 10:00:47 +01:00
rxf
61ace47270 Texte bei SoFü angepasst in DB4js_all.php 2025-12-20 20:07:15 +01:00
rxf
66953de7f4 Version updated 2025-12-20 16:59:15 +01:00
7 changed files with 226 additions and 54 deletions

View File

@@ -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 = "
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); $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

View File

@@ -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

View File

@@ -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');

View File

@@ -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,13 +312,29 @@ 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];
// Versuche das Absagedatum zu speichern, aber breche nicht ab wenn es fehlschlägt
let datumGespeichert = false;
try {
await storeAbsage(liste.ids); await storeAbsage(liste.ids);
datumGespeichert = true;
if (query.typ !== 'sonnen') { } catch (error) {
await fetch('https://laufschrift.rexfue.de/switch/switch_on') 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); bodyText = bodytext.replace("{absagegrund}", absagegrund);
try {
const mailRet = await fetchFromDbase({ const mailRet = await fetchFromDbase({
cmd: 'SENDMYMAIL', cmd: 'SENDMYMAIL',
to: ['rexfue@gmail.com'], to: ['rexfue@gmail.com'],
@@ -318,15 +342,33 @@ Beobachtergruppe Sternwarte Welzheim`
body: bodyText, body: bodyText,
bcc: liste.emails bcc: liste.emails
}); });
if (mailRet.error) { if (mailRet.error) {
$('#errortext').innerHTML = mailRet.errortext $('#errortext').innerHTML = mailRet.errortext
$('#errordialog-ok').addEventListener('click', () => $('#errordialog').close()) $('#errordialog-ok').addEventListener('click', () => $('#errordialog').close())
$('#errordialog').showModal(); $('#errordialog').showModal();
return;
} }
console.log("Mailret: ", mailRet, "Gesendet an: ", liste.emails) 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) $('#absagen').innerHTML = TEXTE.absagebutton(abgesagt)
$('#absagedialog').close(); $('#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', () => { $('#absagedialog-cancel').addEventListener('click', () => {

View File

@@ -1,12 +1,22 @@
// 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

30
sternwarte/intern/sofue/js/sofue.js Executable file → Normal file
View 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

View File

@@ -1,11 +1,22 @@
// 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