Files
online-energieausweis/src/pages/[partner]/energieausweis-erstellen/[ausweisart]/index.astro
Moritz Utcke 1380dcb43a Partner
2025-04-29 11:15:57 -03:00

266 lines
6.6 KiB
Plaintext

---
import AusweisLayoutDatenPartner from "#layouts/AusweisLayoutDatenPartner.astro";
import VerbrauchsausweisWohnenModule from "#modules/VerbrauchsausweisWohnen/VerbrauchsausweisWohnenModule.svelte";
import {
Aufnahme,
BedarfsausweisWohnen,
Bild,
Enums,
Objekt,
prisma,
VerbrauchsausweisGewerbe,
VerbrauchsausweisWohnen,
} from "#lib/server/prisma";
import {
getAufnahme,
getBedarfsausweisWohnen,
getBilder,
getObjekt,
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;
const partner_code = Astro.params.partner 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 loadFromDatabase = false;
if (typ === AusstellungsTyp.Neuausstellung) {
if (!user) {
return Astro.redirect(`/auth/login?redirect=${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 = null;
aufnahme.id = null;
delete aufnahme.erstellungsdatum;
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?redirect=${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);
}
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);
loadFromDatabase = true;
} else if (typ === AusstellungsTyp.Alternativdokument) {
if (!user) {
return Astro.redirect(`/auth/login?redirect=${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 = null;
delete aufnahme.erstellungsdatum;
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;
}
---
<AusweisLayoutDatenPartner title="Verbrauchsausweis erstellen" tab={
ausweisart === "verbrauchsausweis-wohngebaeude" ? 0 :
ausweisart === "verbrauchsausweis-gewerbe" ? 1 :
ausweisart === "bedarfsausweis-wohngebaeude" ? 2 : 0
}>
{
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}
{partner_code}
/>
)
}
{
ausweisart === "bedarfsausweis-wohngebaeude" && (
<BedarfsausweisWohnenModule
client:only
{ausweis}
{objekt}
{aufnahme}
{bilder}
{ausweistyp}
{ausweis_id}
{user}
{loadFromDatabase}
{partner_code}
/>
)
}
</AusweisLayoutDatenPartner>