selektion vorhanden
This commit is contained in:
@@ -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}
|
||||
@@ -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 });
|
||||
|
||||
|
||||
Reference in New Issue
Block a user