Files
online-energieausweis/src/pages/energieausweis-erstellen/[ausweisart]/index.astro
Moritz Utcke 5cca857358 Vereinfachter Registrierungsprozess
Nicht-eingeloggte Nutzer sollen sich einfacher registrieren/authentifizieren können.

Speichern oder Bestellen nicht-eingeloggte Nutzer auf der Kundendaten-Seite, so soll ein Popup aufgehen, wo sie einen Bestätigungscode eingeben können. Dieser Code wird umgehend an ihre eingegene Email gesendet.

Wird der Code efolgreich eingegeben gibt es zwei Fälle:

Unter der Email existiert bereits ein Account → Der Ausweis wird dann diesem User zugewiesen

Unter der Email existiet noch kein Account → Ein neuer Account wird angelegt und der Ausweise dem neuen Account zugewiesen

Wird ein neuner Account automatisch angelegt, so benötigen wir auch noch einen Prozess, wie der Nutzer dann sein Passwort vergeben kann. Idealerweise erhält er in seiner Willkommensmail einen Link zur Passwort setzung. Alternativ nutzt er einfach die bestehende Passwortrücksetzen-Funktion auf der Webseite.

Um bei der Erstregistrierung soll ein Zahlencode an die eingegebene E-Mail verschickt werden. Dieser muss dann vom User eingegeben werden um die Registrierung bzw. meistens ja dann die Erstbestellung abzuschließen. Der Zahlencode kann ja dann das Passwort sein. Wir weisen den Kunden darauf hin sich ein eigenes Passwort zu vergeben.
2025-10-16 10:24:35 -04:00

273 lines
6.9 KiB
Plaintext

---
import AusweisLayout from "#layouts/AusweisLayoutDaten.astro";
import VerbrauchsausweisWohnenModule from "#modules/VerbrauchsausweisWohnen/VerbrauchsausweisWohnenModule.svelte";
import {
Aufnahme,
BedarfsausweisWohnen,
Bild,
Enums,
Objekt,
prisma,
Unterlage,
VerbrauchsausweisGewerbe,
VerbrauchsausweisWohnen,
} from "#lib/server/prisma";
import {
getAufnahme,
getBedarfsausweisWohnen,
getBilder,
getObjekt,
getUnterlagen,
getVerbrauchsausweisGewerbe,
getVerbrauchsausweisWohnen,
} from "#lib/server/db";
import { getCurrentUser } from "#lib/server/user";
import { AusstellungsTyp } from "#lib/constants";
import VerbrauchsausweisGewerbeModule from "#modules/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbeModule.svelte";
import BedarfsausweisWohnenModule from "#modules/BedarfsausweisWohnen/BedarfsausweisWohnenModule.svelte";
import { getPrismaAusweisAdapter } from "#lib/server/ausweis";
const ausweisart = Astro.params.ausweisart as string;
if (
ausweisart !== "verbrauchsausweis-wohngebaeude" &&
ausweisart !== "verbrauchsausweis-gewerbe" &&
ausweisart !== "bedarfsausweis-wohngebaeude"
) {
return Astro.redirect("/404");
}
const user = await getCurrentUser(Astro);
const ausweis_id = Astro.url.searchParams.get("ausweis_id");
const typ = Astro.url.searchParams.get("typ") as AusstellungsTyp;
let ausweistyp =
(Astro.url.searchParams.get("ausweistyp") as Enums.AusweisTyp) ||
Enums.AusweisTyp.Standard;
let ausweis:
| VerbrauchsausweisWohnen
| VerbrauchsausweisGewerbe
| BedarfsausweisWohnen
| null = {} as VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | BedarfsausweisWohnen;
let aufnahme: Aufnahme | null = {} as Aufnahme;
let objekt: Objekt | null = {} as Objekt;
let bilder: Bild[] = [];
let unterlagen: Unterlage[] = [];
let loadFromDatabase = false;
if (typ === AusstellungsTyp.Neuausstellung) {
if (!user) {
// Der Nutzer muss eingeloggt sein um eine Neuausstellung anzufordern,
// sonst können wir nicht sicher sein, dass der Nutzer berechtigt ist auf den Ausweis zuzugreifen.
return Astro.redirect(`/auth/login?r=${Astro.url.toString()}`);
}
if (!ausweis_id) {
// Falls es keine Ausweis ID gibt können wir nicht fortfahren.
return Astro.redirect("/400");
}
const adapter = getPrismaAusweisAdapter(ausweis_id)
ausweis = await adapter?.findUnique({
where: {
id: ausweis_id
}
})
aufnahme = await prisma.aufnahme.findUnique({
where: {
id: ausweis?.aufnahme_id,
},
});
objekt = await prisma.objekt.findUnique({
where: {
id: aufnahme?.objekt_id,
},
});
if (
!ausweis ||
!aufnahme ||
!objekt ||
((ausweis.benutzer_id !== user.id ||
aufnahme.benutzer_id !== user.id ||
objekt.benutzer_id !== user.id) && user.rolle !== Enums.BenutzerRolle.ADMIN)
) {
return Astro.redirect("/405");
}
// Wir setzen alle Daten vom Ausweis zurück, sonst könnte es passieren, dass der Ausweis als der alte Ausweis gespeichert wird.
ausweis.id = "";
aufnahme.id = "";
aufnahme.erstellungsdatum = null;
ausweis.created_at = new Date()
ausweis.updated_at = new Date();
ausweis.alte_ausweis_id = null;
ausweis.ausgestellt = false;
ausweis.bestellt = false;
ausweis.kontrolldatei_angefragt = false;
ausweis.energieeffizienzklasse = null;
ausweis.ausstellungsdatum = null;
ausweis.ausweistyp = Enums.AusweisTyp.Standard;
ausweis.zurueckgestellt = false;
ausweis.storniert = false;
ausweis.rechnung_id = null;
ausweis.registriernummer = null;
// Die Daten sollen nicht aus dem localStorage genommen werden sonst kann es vorkommen, dass die ID noch besteht und der Vorgang nicht neu angelegt wird.
loadFromDatabase = true;
} else if (typ === AusstellungsTyp.Speichern) {
if (!user) {
return Astro.redirect(`/auth/login?r=${Astro.url.toString()}`);
}
if (!ausweis_id) {
return Astro.redirect("/400");
}
if (ausweisart === "verbrauchsausweis-wohngebaeude") {
ausweis = await getVerbrauchsausweisWohnen(ausweis_id);
} else if (ausweisart === "verbrauchsausweis-gewerbe") {
ausweis = await getVerbrauchsausweisGewerbe(ausweis_id);
} else {
ausweis = await getBedarfsausweisWohnen(ausweis_id);
}
if (!ausweis) {
// Falls der Ausweis nicht gefunden wurde, können wir nicht fortfahren.
return Astro.redirect("/404");
}
ausweistyp = ausweis.ausweistyp;
aufnahme = (await getAufnahme(ausweis.aufnahme_id)) as Aufnahme;
objekt = (await getObjekt(aufnahme.objekt_id)) as Objekt;
if (
!ausweis ||
!aufnahme ||
!objekt ||
((ausweis.benutzer_id !== user.id ||
aufnahme.benutzer_id !== user.id ||
objekt.benutzer_id !== user.id) && user.rolle !== Enums.BenutzerRolle.ADMIN)
) {
return Astro.redirect("/405");
}
bilder = await getBilder(aufnahme.id);
unterlagen = await getUnterlagen(aufnahme.id);
loadFromDatabase = true;
} else if (typ === AusstellungsTyp.Alternativdokument) {
if (!user) {
return Astro.redirect(`/auth/login?r=${Astro.url.toString()}`);
}
if (!ausweis_id) {
return Astro.redirect("/400");
}
const adapter = getPrismaAusweisAdapter(ausweis_id)
ausweis = await adapter?.findUnique({
where: {
id: ausweis_id
}
})
aufnahme = await prisma.aufnahme.findUnique({
where: {
id: ausweis?.aufnahme_id,
},
});
objekt = await prisma.objekt.findUnique({
where: {
id: aufnahme?.objekt_id,
},
});
if (
!ausweis ||
!aufnahme ||
!objekt ||
((ausweis.benutzer_id !== user.id ||
aufnahme.benutzer_id !== user.id ||
objekt.benutzer_id !== user.id) && user.rolle !== Enums.BenutzerRolle.ADMIN)
) {
return Astro.redirect("/405");
}
ausweis.id = "";
aufnahme.erstellungsdatum = null;
ausweis.created_at = new Date()
ausweis.updated_at = new Date();
ausweis.alte_ausweis_id = null;
ausweis.ausgestellt = false;
ausweis.bestellt = false;
ausweis.kontrolldatei_angefragt = false;
ausweis.energieeffizienzklasse = null;
ausweis.ausstellungsdatum = null;
ausweis.ausweistyp = Enums.AusweisTyp.Standard;
ausweis.zurueckgestellt = false;
ausweis.storniert = false;
ausweis.rechnung_id = null;
ausweis.registriernummer = null;
// Die Daten sollen nicht aus dem localStorage genommen werden sonst kann es vorkommen, dass die ID noch besteht und der Vorgang nicht neu angelegt wird.
loadFromDatabase = true;
}
---
<AusweisLayout title="Verbrauchsausweis erstellen">
{
ausweisart === "verbrauchsausweis-wohngebaeude" && (
<VerbrauchsausweisWohnenModule
client:only
{ausweis}
{objekt}
{aufnahme}
{bilder}
{ausweis_id}
{ausweistyp}
{user}
{loadFromDatabase}
partner_code=""
/>
)
}
{
ausweisart === "verbrauchsausweis-gewerbe" && (
<VerbrauchsausweisGewerbeModule
client:only
{ausweis}
{objekt}
{aufnahme}
{bilder}
{ausweistyp}
{user}
{ausweis_id}
{loadFromDatabase}
/>
)
}
{
ausweisart === "bedarfsausweis-wohngebaeude" && (
<BedarfsausweisWohnenModule
client:only
{ausweis}
{objekt}
{aufnahme}
{bilder}
{ausweistyp}
{unterlagen}
{ausweis_id}
{user}
{loadFromDatabase}
/>
)
}
</AusweisLayout>