63 lines
2.6 KiB
PHP
63 lines
2.6 KiB
PHP
<?php
|
|
global $db;
|
|
try {
|
|
$data = json_decode(file_get_contents("php://input"), true);
|
|
if (!$data) { http_response_code(400); echo json_encode(['message'=>'Ungültige Daten']); exit; }
|
|
|
|
if (empty($data['vorname']) || empty($data['nachname']) || empty($data['email']) ||
|
|
empty($data['betrieb_id']) || empty($data['kurs_ids']) || !is_array($data['kurs_ids'])) {
|
|
http_response_code(400);
|
|
echo json_encode(['message' => 'Pflichtfelder fehlen']);
|
|
exit;
|
|
}
|
|
|
|
$db->beginTransaction();
|
|
|
|
$stmt = $db->prepare("INSERT INTO schueler (vorname, nachname, email, geburtsdatum, betrieb_id)
|
|
VALUES (:vorname, :nachname, :email, :geburtsdatum, :betrieb_id)");
|
|
$stmt->execute([
|
|
':vorname' => $data['vorname'],
|
|
':nachname' => $data['nachname'],
|
|
':email' => $data['email'],
|
|
':geburtsdatum' => $data['geburtsdatum'] ?? null,
|
|
':betrieb_id' => $data['betrieb_id']
|
|
]);
|
|
$schueler_id = (int)$db->lastInsertId();
|
|
|
|
$angemeldete_kurse = [];
|
|
foreach ($data['kurs_ids'] as $kurs_id) {
|
|
$check = $db->prepare("SELECT k.name, k.max_teilnehmer, COUNT(a.id) as belegt
|
|
FROM kurse k
|
|
LEFT JOIN anmeldungen a ON k.id = a.kurs_id
|
|
WHERE k.id = :kurs_id
|
|
GROUP BY k.id");
|
|
$check->execute([':kurs_id' => $kurs_id]);
|
|
$kurs = $check->fetch();
|
|
|
|
if (!$kurs) { $db->rollBack(); http_response_code(400); echo json_encode(['message'=>'Kurs nicht gefunden']); exit; }
|
|
if ((int)$kurs['belegt'] >= (int)$kurs['max_teilnehmer']) {
|
|
$db->rollBack(); http_response_code(400);
|
|
echo json_encode(['message' => "Kurs '{$kurs['name']}' ist bereits voll"]);
|
|
exit;
|
|
}
|
|
|
|
$insert = $db->prepare("INSERT INTO anmeldungen (schueler_id, kurs_id, anmeldedatum)
|
|
VALUES (:schueler_id, :kurs_id, NOW())");
|
|
$insert->execute([':schueler_id' => $schueler_id, ':kurs_id' => $kurs_id]);
|
|
|
|
$angemeldete_kurse[] = $kurs['name'];
|
|
}
|
|
|
|
$db->commit();
|
|
http_response_code(201);
|
|
echo json_encode([
|
|
'message' => 'Anmeldung erfolgreich',
|
|
'schueler_id' => $schueler_id,
|
|
'angemeldete_kurse' => $angemeldete_kurse
|
|
]);
|
|
} catch (Exception $e) {
|
|
if ($db->inTransaction()) { $db->rollBack(); }
|
|
error_log("Error in anmeldung/create.php: " . $e->getMessage());
|
|
http_response_code(500);
|
|
echo json_encode(['message' => 'Fehler bei der Anmeldung']);
|
|
} |