227 lines
9.3 KiB
PHP
227 lines
9.3 KiB
PHP
<?php
|
|
include_once(__DIR__ . '/../controller/DatabaseController.php');
|
|
include_once(__DIR__ . '/../controller/DataController.php');
|
|
|
|
$msg = "";
|
|
$username = $_SESSION['username'] ?? 'Gast';
|
|
|
|
if (isset($_GET['action']) && $_GET['action'] === 'delete') {
|
|
if (isset($_GET['serien_id']) && !empty($_GET['serien_id'])) {
|
|
$serienId = $_GET['serien_id'];
|
|
DatabaseDelete("Termine", "SERIEN_ID = ?", $serienId);
|
|
$msg = "Komplette Terminserie erfolgreich gelöscht!";
|
|
} elseif (isset($_GET['id'])) {
|
|
$deleteId = (int)$_GET['id'];
|
|
DatabaseDelete("Termine", "ID = ?", $deleteId);
|
|
$msg = "Termin erfolgreich gelöscht!";
|
|
}
|
|
}
|
|
|
|
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['add_termin'])) {
|
|
$datum = $_POST['datum'] ?? '';
|
|
$zeit = $_POST['zeit'] ?? '';
|
|
$name = $_POST['name'] ?? '';
|
|
$notiz = $_POST['notiz'] ?? '';
|
|
$wiederholung = $_POST['wiederholung'] ?? 'none';
|
|
$enddatum = $_POST['enddatum'] ?? '';
|
|
|
|
if (!empty($datum) && !empty($zeit) && !empty($name)) {
|
|
|
|
if ($wiederholung !== 'none' && !empty($enddatum)) {
|
|
$currentDate = new DateTime($datum);
|
|
$endDate = new DateTime($enddatum);
|
|
|
|
if ($endDate < $currentDate) {
|
|
$msg = "Das Enddatum darf nicht vor dem Startdatum liegen.";
|
|
} else {
|
|
$insertedCount = 0;
|
|
$serienId = uniqid('serie_', true);
|
|
|
|
$intervalMapping = [
|
|
'daily' => '+1 day',
|
|
'weekly' => '+1 week',
|
|
'monthly' => '+1 month'
|
|
];
|
|
|
|
$modifier = $intervalMapping[$wiederholung] ?? null;
|
|
|
|
if ($modifier) {
|
|
while ($currentDate <= $endDate) {
|
|
DatabaseInsert(
|
|
"Termine",
|
|
"DATUM, ZEIT, NAME, NOTIZ, ERSTELLT_VON, SERIEN_ID, INTERVALL, SERIEN_ENDE",
|
|
$currentDate->format('Y-m-d'),
|
|
$zeit,
|
|
$name,
|
|
$notiz,
|
|
$username,
|
|
$serienId,
|
|
$wiederholung,
|
|
$enddatum
|
|
);
|
|
$insertedCount++;
|
|
$currentDate->modify($modifier);
|
|
}
|
|
$msg = "Serientermin ($insertedCount Termine) erfolgreich eingetragen!";
|
|
}
|
|
}
|
|
} else {
|
|
DatabaseInsert(
|
|
"Termine",
|
|
"DATUM, ZEIT, NAME, NOTIZ, ERSTELLT_VON",
|
|
$datum,
|
|
$zeit,
|
|
$name,
|
|
$notiz,
|
|
$username
|
|
);
|
|
$msg = "Termin erfolgreich eingetragen!";
|
|
}
|
|
} else {
|
|
$msg = "Bitte alle Pflichtfelder ausfüllen.";
|
|
}
|
|
}
|
|
|
|
$termine = DatabaseShow(
|
|
"Termine",
|
|
"MAX(ID) as ID, MIN(DATUM) as DATUM, ZEIT, NAME, NOTIZ, ERSTELLT_VON, SERIEN_ID, INTERVALL, SERIEN_ENDE",
|
|
"ERSTELLT_VON = ? GROUP BY IFNULL(SERIEN_ID, ID) ORDER BY DATUM ASC, ZEIT ASC",
|
|
$username
|
|
);
|
|
|
|
$intervallNamen = [
|
|
'daily' => 'Täglich',
|
|
'weekly' => 'Wöchentlich',
|
|
'monthly' => 'Monatlich'
|
|
];
|
|
?>
|
|
|
|
<?php if (!empty($msg)): ?>
|
|
<div class="status-msg"><?= htmlspecialchars($msg) ?></div>
|
|
<?php endif; ?>
|
|
|
|
<div class="form-container">
|
|
<h3>📅 Neuen Termin vergeben</h3>
|
|
<form method="POST" class="vergabe-form">
|
|
<div class="vergabe-grid">
|
|
<div class="form-group">
|
|
<label for="datum">Start-Datum *</label>
|
|
<input type="date" id="datum" name="datum" required>
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="zeit">Uhrzeit *</label>
|
|
<input type="time" id="zeit" name="zeit" required
|
|
style="width:100%; padding:10px; border-radius:5px; border:1px solid var(--input-border); background:var(--input-bg); color:var(--input-text);">
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="name">Name / Zweck *</label>
|
|
<input type="text" id="name" name="name" placeholder="z.B. Kundentermin" required>
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="notiz">Notiz (Optional)</label>
|
|
<input type="text" id="notiz" name="notiz" placeholder="Details zum Termin...">
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="wiederholung">Wiederholung</label>
|
|
<select id="wiederholung" name="wiederholung" onchange="toggleEnddatum()"
|
|
style="width:100%; padding:10px; border-radius:5px; border:1px solid var(--input-border); background:var(--input-bg); color:var(--input-text);">
|
|
<option value="none">Keine Wiederholung</option>
|
|
<option value="daily">Täglich</option>
|
|
<option value="weekly">Wöchentlich</option>
|
|
<option value="monthly">Monatlich</option>
|
|
</select>
|
|
</div>
|
|
<div class="form-group" id="enddatum-group" style="display: none;">
|
|
<label for="enddatum">Wiederholen bis *</label>
|
|
<input type="date" id="enddatum" name="enddatum">
|
|
</div>
|
|
<button type="submit" name="add_termin" class="btn-submit-vergabe">Speichern</button>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
|
|
<div class="form-container">
|
|
<h3>📋 Aktuelle Terminbelegungen</h3>
|
|
<div class="table-container">
|
|
<table class="db-table mobile-responsive-table">
|
|
<thead>
|
|
<tr>
|
|
<th>Datum / Turnus</th>
|
|
<th>Uhrzeit</th>
|
|
<th>Termin / Name</th>
|
|
<th>Notiz</th>
|
|
<th>Eingetragen von</th>
|
|
<th>Aktion</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<?php if (empty($termine)): ?>
|
|
<tr>
|
|
<td colspan="6" style="text-align: center; padding: 20px;">Keine Termine eingetragen.</td>
|
|
</tr>
|
|
<?php else: ?>
|
|
<?php foreach ($termine as $termin): ?>
|
|
<?php
|
|
$dateFormatted = date('d.m.Y', strtotime($termin['DATUM']));
|
|
$timeFormatted = date('H:i', strtotime($termin['ZEIT']));
|
|
$istSerie = !empty($termin['SERIEN_ID']);
|
|
?>
|
|
<tr>
|
|
<td data-label="Datum:">
|
|
<strong><?= htmlspecialchars($dateFormatted) ?></strong>
|
|
<?php if ($istSerie): ?>
|
|
<br>
|
|
<small style="color: var(--primary-color, #007bff); font-style: italic;">
|
|
(<?= $intervallNamen[$termin['INTERVALL']] ?? '' ?>
|
|
bis <?= date('d.m.Y', strtotime($termin['SERIEN_ENDE'])) ?>)
|
|
</small>
|
|
<?php endif; ?>
|
|
</td>
|
|
<td data-label="Uhrzeit:"><?= htmlspecialchars($timeFormatted) ?></td>
|
|
<td data-label="Termin / Name:">
|
|
<strong><?= htmlspecialchars($termin['NAME']) ?></strong>
|
|
<?php if ($istSerie): ?>
|
|
<span
|
|
style="font-size: 0.8em; background: #e1f5fe; color: #0288d1; padding: 2px 6px; border-radius: 10px; margin-left: 5px;">Wiederholend</span>
|
|
<?php endif; ?>
|
|
</td>
|
|
<td data-label="Notiz:"><?= htmlspecialchars($termin['NOTIZ'] ?: '-') ?></td>
|
|
<td data-label="Von:"><span class="badge"><?= htmlspecialchars($termin['ERSTELLT_VON']) ?></span>
|
|
</td>
|
|
<td data-label="Aktion:">
|
|
<?php if ($istSerie): ?>
|
|
<a href="?service=termine&action=delete&serien_id=<?= urlencode($termin['SERIEN_ID']) ?>"
|
|
onclick="return confirm('Möchtest du die GESAMTE Terminserie löschen?');">
|
|
<button class="btn-delete" style="background-color: #d32f2f;">löschen</button>
|
|
</a>
|
|
<?php else: ?>
|
|
<a href="?service=termine&action=delete&id=<?= $termin['ID'] ?>"
|
|
onclick="return confirm('Möchtest du diesen Termin wirklich löschen?');">
|
|
<button class="btn-delete">Löschen</button>
|
|
</a>
|
|
<?php endif; ?>
|
|
</td>
|
|
</tr>
|
|
<?php endforeach; ?>
|
|
<?php endif; ?>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
|
|
<script>
|
|
function toggleEnddatum() {
|
|
var wiederholung = document.getElementById('wiederholung').value;
|
|
var enddatumGroup = document.getElementById('enddatum-group');
|
|
var enddatumInput = document.getElementById('enddatum');
|
|
|
|
if (wiederholung !== 'none') {
|
|
enddatumGroup.style.display = 'block';
|
|
enddatumInput.required = true;
|
|
} else {
|
|
enddatumGroup.style.display = 'none';
|
|
enddatumInput.required = false;
|
|
enddatumInput.value = '';
|
|
}
|
|
}
|
|
</script>
|