selektion vorhanden
This commit is contained in:
@@ -9,14 +9,57 @@
|
|||||||
noteDeutsch?: string;
|
noteDeutsch?: string;
|
||||||
noteMathe?: string;
|
noteMathe?: string;
|
||||||
sozialverhalten?: string;
|
sozialverhalten?: string;
|
||||||
wunsch1?: { name: string };
|
wunsch1?: { id: number; name: string };
|
||||||
wunsch2?: { name: string };
|
wunsch2?: { id: number; name: string };
|
||||||
wunsch3?: { name: string };
|
wunsch3?: { id: number; name: string };
|
||||||
timestamp: number;
|
timestamp: number;
|
||||||
id: number;
|
id: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
let anmeldungen: Anmeldung[] = [];
|
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() {
|
async function ladeAnmeldungen() {
|
||||||
const res = await fetch('/api/admin/anmeldungen');
|
const res = await fetch('/api/admin/anmeldungen');
|
||||||
@@ -113,7 +156,7 @@
|
|||||||
<td class="p-2 text-right">
|
<td class="p-2 text-right">
|
||||||
<button
|
<button
|
||||||
class="text-green-600 hover:underline"
|
class="text-green-600 hover:underline"
|
||||||
on:click={() => annehmen(a.id)}>
|
on:click={() => oeffneAuswahl(a.id)}>
|
||||||
Annehmen
|
Annehmen
|
||||||
</button><br><br>
|
</button><br><br>
|
||||||
<button
|
<button
|
||||||
@@ -141,3 +184,22 @@
|
|||||||
Logout
|
Logout
|
||||||
</button>
|
</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'));
|
const id = Number(url.searchParams.get('id'));
|
||||||
if (!id) return json({ error: 'Ungültige ID' }, { status: 400 });
|
if (!id) return json({ error: 'Ungültige ID' }, { status: 400 });
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user