selektion vorhanden

This commit is contained in:
titver968
2025-06-17 15:10:36 +02:00
parent d118a7e831
commit ad65207313
2 changed files with 68 additions and 6 deletions

View File

@@ -9,15 +9,58 @@
noteDeutsch?: string;
noteMathe?: string;
sozialverhalten?: string;
wunsch1?: { name: string };
wunsch2?: { name: string };
wunsch3?: { name: string };
wunsch1?: { id: number; name: string };
wunsch2?: { id: number; name: string };
wunsch3?: { id: number; name: string };
timestamp: number;
id: number;
}
let anmeldungen: Anmeldung[] = [];
let auswahlDialogOffen = false;
let auswahlAnmeldungId: number | null = null;
let ausgewaehlteDienststelleId: number | null = null;
let aktuelleWuensche: { id: number, name: string }[] = [];
function oeffneAuswahl(id: number) {
const anmeldung = anmeldungen.find(a => a.id === id);
if (!anmeldung) return;
aktuelleWuensche = [
anmeldung.wunsch1 && { id: anmeldung.wunsch1.id, name: `1. Wunsch: ${anmeldung.wunsch1.name}` },
anmeldung.wunsch2 && { id: anmeldung.wunsch2.id, name: `2. Wunsch: ${anmeldung.wunsch2.name}` },
anmeldung.wunsch3 && { id: anmeldung.wunsch3.id, name: `3. Wunsch: ${anmeldung.wunsch3.name}` }
].filter(Boolean) as { id: number, name: string }[];
ausgewaehlteDienststelleId = aktuelleWuensche[0]?.id ?? null;
auswahlAnmeldungId = id;
auswahlDialogOffen = true;
}
async function bestaetigeAnnahme() {
if (!auswahlAnmeldungId || !ausgewaehlteDienststelleId) return;
try {
const res = await fetch(`/api/admin/anmeldungen?id=${auswahlAnmeldungId}`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ dienststelleId: ausgewaehlteDienststelleId })
});
if (!res.ok) {
const errorText = await res.text();
throw new Error(`Fehler beim Annehmen (${res.status}): ${errorText}`);
}
auswahlDialogOffen = false;
auswahlAnmeldungId = null;
await ladeAnmeldungen();
} catch (error) {
console.error(error);
alert('Fehler beim Annehmen der Anmeldung.\n' + (error as Error).message);
}
}
async function ladeAnmeldungen() {
const res = await fetch('/api/admin/anmeldungen');
anmeldungen = await res.json();
@@ -113,7 +156,7 @@
<td class="p-2 text-right">
<button
class="text-green-600 hover:underline"
on:click={() => annehmen(a.id)}>
on:click={() => oeffneAuswahl(a.id)}>
Annehmen
</button><br><br>
<button
@@ -140,4 +183,23 @@
class="bg-red-600 text-white px-4 py-3 rounded text-center hover:bg-red-700">
Logout
</button>
</div>
</div>
{#if auswahlDialogOffen}
<div class="fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50">
<div class="bg-white p-6 rounded shadow max-w-sm w-full space-y-4">
<h2 class="text-lg font-bold">Dienststelle auswählen</h2>
<select bind:value={ausgewaehlteDienststelleId} class="w-full border p-2 rounded">
{#each aktuelleWuensche as w}
<option value={w.id}>{w.name}</option>
{/each}
</select>
<div class="flex justify-end gap-2">
<button on:click={() => auswahlDialogOffen = false} class="px-4 py-2 bg-gray-200 rounded">Abbrechen</button>
<button on:click={bestaetigeAnnahme} class="px-4 py-2 bg-green-600 text-white rounded">Zuweisen</button>
</div>
</div>
</div>
{/if}

View File

@@ -28,7 +28,7 @@ export const GET: RequestHandler = async ({ cookies }) => {
});
};
export const POST: RequestHandler = async ({ cookies, url }) => {
export const POST: RequestHandler = async ({ url }) => {
const id = Number(url.searchParams.get('id'));
if (!id) return json({ error: 'Ungültige ID' }, { status: 400 });