diff --git a/src/client/lib/ausweisSpeichern.ts b/src/client/lib/ausweisSpeichern.ts index 4d3eebbb..7a8cf726 100644 --- a/src/client/lib/ausweisSpeichern.ts +++ b/src/client/lib/ausweisSpeichern.ts @@ -1,221 +1,516 @@ - -import { api } from "astro-typesafe-api/client" +import { api } from "astro-typesafe-api/client"; import { exclude } from "#lib/exclude.js"; import Cookies from "js-cookie"; import { API_ACCESS_TOKEN_COOKIE_NAME } from "#lib/constants.js"; -import { AufnahmeClient, BedarfsausweisWohnenClient, BildClient, ObjektClient, VerbrauchsausweisGewerbeClient, VerbrauchsausweisWohnenClient, } from "#components/Ausweis/types.js"; -import { Enums } from "#lib/client/prisma.js"; +import { + AufnahmeClient, + BedarfsausweisWohnenClient, + BildClient, + ObjektClient, + VerbrauchsausweisGewerbeClient, + VerbrauchsausweisWohnenClient, +} from "#components/Ausweis/types.js"; +import { + BedarfsausweisWohnen, + Enums, + VerbrauchsausweisGewerbe, + VerbrauchsausweisWohnen, +} from "#lib/client/prisma.js"; +import { tryCatch } from "#lib/tryCatch.js"; +import { addNotification } from "@ibcornelsen/ui"; +import { objektSpeichern, aufnahmeSpeichern } from "./speichern.js"; + +export async function verbrauchsausweisWohnenSpeichern( + ausweis: VerbrauchsausweisWohnen, + aufnahme_id: string +): Promise { + if (ausweis.id) { + await api["verbrauchsausweis-wohnen"]._id.PATCH.fetch( + { + ausweistyp: ausweis.ausweistyp, + startdatum: ausweis.startdatum, + alternative_heizung: ausweis.alternative_heizung, + alternative_kuehlung: ausweis.alternative_kuehlung, + alternative_lueftung: ausweis.alternative_lueftung, + alternative_warmwasser: ausweis.alternative_warmwasser, + anteil_warmwasser_1: ausweis.anteil_warmwasser_1, + anteil_warmwasser_2: ausweis.anteil_warmwasser_2, + ausgestellt: ausweis.ausgestellt, + ausstellgrund: ausweis.ausstellgrund, + ausstellungsdatum: ausweis.ausstellungsdatum, + beschreibung: ausweis.beschreibung, + bestellt: ausweis.bestellt, + boxpruefung: ausweis.boxpruefung, + brennstoff_1: ausweis.brennstoff_1, + brennstoff_2: ausweis.brennstoff_2, + einheit_1: ausweis.einheit_1, + einheit_2: ausweis.einheit_2, + energieeffizienzklasse: ausweis.energieeffizienzklasse, + faktorKeller: ausweis.faktorKeller, + kontrolldatei_angefragt: ausweis.kontrolldatei_angefragt, + prueftext: ausweis.prueftext, + registriernummer: ausweis.registriernummer, + storniert: ausweis.storniert, + verbrauch_1: ausweis.verbrauch_1, + verbrauch_2: ausweis.verbrauch_2, + verbrauch_3: ausweis.verbrauch_3, + verbrauch_4: ausweis.verbrauch_4, + verbrauch_5: ausweis.verbrauch_5, + verbrauch_6: ausweis.verbrauch_6, + warmwasser_anteil_bekannt: ausweis.warmwasser_anteil_bekannt, + warmwasser_enthalten: ausweis.warmwasser_enthalten, + zurueckgestellt: ausweis.zurueckgestellt, + zusaetzliche_heizquelle: ausweis.zusaetzliche_heizquelle, + }, + { + params: { + id: ausweis.id, + }, + headers: { + Authorization: `Bearer ${Cookies.get( + API_ACCESS_TOKEN_COOKIE_NAME + )}`, + }, + } + ); + + return ausweis.id; + } else { + const { id } = await api["verbrauchsausweis-wohnen"].PUT.fetch( + { + ausweis: { + ausweistyp: ausweis.ausweistyp, + startdatum: ausweis.startdatum, + alternative_heizung: ausweis.alternative_heizung, + alternative_kuehlung: ausweis.alternative_kuehlung, + alternative_lueftung: ausweis.alternative_lueftung, + alternative_warmwasser: ausweis.alternative_warmwasser, + anteil_warmwasser_1: ausweis.anteil_warmwasser_1, + anteil_warmwasser_2: ausweis.anteil_warmwasser_2, + ausgestellt: ausweis.ausgestellt, + ausstellgrund: ausweis.ausstellgrund, + ausstellungsdatum: ausweis.ausstellungsdatum, + beschreibung: ausweis.beschreibung, + bestellt: ausweis.bestellt, + boxpruefung: ausweis.boxpruefung, + brennstoff_1: ausweis.brennstoff_1, + brennstoff_2: ausweis.brennstoff_2, + einheit_1: ausweis.einheit_1, + einheit_2: ausweis.einheit_2, + energieeffizienzklasse: ausweis.energieeffizienzklasse, + faktorKeller: ausweis.faktorKeller, + kontrolldatei_angefragt: ausweis.kontrolldatei_angefragt, + prueftext: ausweis.prueftext, + registriernummer: ausweis.registriernummer, + storniert: ausweis.storniert, + verbrauch_1: ausweis.verbrauch_1, + verbrauch_2: ausweis.verbrauch_2, + verbrauch_3: ausweis.verbrauch_3, + verbrauch_4: ausweis.verbrauch_4, + verbrauch_5: ausweis.verbrauch_5, + verbrauch_6: ausweis.verbrauch_6, + warmwasser_anteil_bekannt: + ausweis.warmwasser_anteil_bekannt, + warmwasser_enthalten: ausweis.warmwasser_enthalten, + zurueckgestellt: ausweis.zurueckgestellt, + zusaetzliche_heizquelle: ausweis.zusaetzliche_heizquelle, + }, + aufnahme_id, + }, + { + headers: { + Authorization: `Bearer ${Cookies.get( + API_ACCESS_TOKEN_COOKIE_NAME + )}`, + }, + } + ); + + return id; + } +} + +export async function verbrauchsausweisGewerbeSpeichern( + ausweis: VerbrauchsausweisGewerbe, + aufnahme_id: string +): Promise { + if (ausweis.id) { + await api["verbrauchsausweis-gewerbe"]._id.PATCH.fetch( + { + ausweistyp: ausweis.ausweistyp, + startdatum: ausweis.startdatum, + alternative_heizung: ausweis.alternative_heizung, + alternative_kuehlung: ausweis.alternative_kuehlung, + alternative_lueftung: ausweis.alternative_lueftung, + alternative_warmwasser: ausweis.alternative_warmwasser, + anteil_warmwasser_1: ausweis.anteil_warmwasser_1, + anteil_warmwasser_2: ausweis.anteil_warmwasser_2, + ausgestellt: ausweis.ausgestellt, + ausstellgrund: ausweis.ausstellgrund, + ausstellungsdatum: ausweis.ausstellungsdatum, + beschreibung: ausweis.beschreibung, + bestellt: ausweis.bestellt, + boxpruefung: ausweis.boxpruefung, + brennstoff_1: ausweis.brennstoff_1, + brennstoff_2: ausweis.brennstoff_2, + einheit_1: ausweis.einheit_1, + einheit_2: ausweis.einheit_2, + energieeffizienzklasse: ausweis.energieeffizienzklasse, + kontrolldatei_angefragt: ausweis.kontrolldatei_angefragt, + prueftext: ausweis.prueftext, + registriernummer: ausweis.registriernummer, + storniert: ausweis.storniert, + verbrauch_1: ausweis.verbrauch_1, + verbrauch_2: ausweis.verbrauch_2, + verbrauch_3: ausweis.verbrauch_3, + verbrauch_4: ausweis.verbrauch_4, + verbrauch_5: ausweis.verbrauch_5, + verbrauch_6: ausweis.verbrauch_6, + warmwasser_anteil_bekannt: ausweis.warmwasser_anteil_bekannt, + warmwasser_enthalten: ausweis.warmwasser_enthalten, + zurueckgestellt: ausweis.zurueckgestellt, + zusaetzliche_heizquelle: ausweis.zusaetzliche_heizquelle, + anteil_kuehlung_1: ausweis.anteil_kuehlung_1, + anteil_kuehlung_2: ausweis.anteil_kuehlung_2, + keller_beheizt: ausweis.keller_beheizt, + kuehlung_enthalten: ausweis.kuehlung_enthalten, + rechnung_id: ausweis.rechnung_id, + strom_1: ausweis.strom_1, + strom_2: ausweis.strom_2, + strom_3: ausweis.strom_3, + stromverbrauch_enthaelt_beleuchtung: + ausweis.stromverbrauch_enthaelt_beleuchtung, + stromverbrauch_enthaelt_heizung: + ausweis.stromverbrauch_enthaelt_heizung, + stromverbrauch_enthaelt_kuehlung: + ausweis.stromverbrauch_enthaelt_kuehlung, + stromverbrauch_enthaelt_lueftung: + ausweis.stromverbrauch_enthaelt_lueftung, + stromverbrauch_enthaelt_sonstige: + ausweis.stromverbrauch_enthaelt_sonstige, + stromverbrauch_enthaelt_warmwasser: + ausweis.stromverbrauch_enthaelt_warmwasser, + }, + { + params: { + id: ausweis.id, + }, + headers: { + Authorization: `Bearer ${Cookies.get( + API_ACCESS_TOKEN_COOKIE_NAME + )}`, + }, + } + ); + + return ausweis.id; + } else { + const { id } = await api["verbrauchsausweis-gewerbe"].PUT.fetch( + { + ausweis: { + ausweistyp: ausweis.ausweistyp, + startdatum: ausweis.startdatum, + alternative_heizung: ausweis.alternative_heizung, + alternative_kuehlung: ausweis.alternative_kuehlung, + alternative_lueftung: ausweis.alternative_lueftung, + alternative_warmwasser: ausweis.alternative_warmwasser, + anteil_warmwasser_1: ausweis.anteil_warmwasser_1, + anteil_warmwasser_2: ausweis.anteil_warmwasser_2, + ausgestellt: ausweis.ausgestellt, + ausstellgrund: ausweis.ausstellgrund, + ausstellungsdatum: ausweis.ausstellungsdatum, + beschreibung: ausweis.beschreibung, + bestellt: ausweis.bestellt, + boxpruefung: ausweis.boxpruefung, + brennstoff_1: ausweis.brennstoff_1, + brennstoff_2: ausweis.brennstoff_2, + einheit_1: ausweis.einheit_1, + einheit_2: ausweis.einheit_2, + energieeffizienzklasse: ausweis.energieeffizienzklasse, + kontrolldatei_angefragt: ausweis.kontrolldatei_angefragt, + prueftext: ausweis.prueftext, + registriernummer: ausweis.registriernummer, + storniert: ausweis.storniert, + verbrauch_1: ausweis.verbrauch_1, + verbrauch_2: ausweis.verbrauch_2, + verbrauch_3: ausweis.verbrauch_3, + verbrauch_4: ausweis.verbrauch_4, + verbrauch_5: ausweis.verbrauch_5, + verbrauch_6: ausweis.verbrauch_6, + warmwasser_anteil_bekannt: + ausweis.warmwasser_anteil_bekannt, + warmwasser_enthalten: ausweis.warmwasser_enthalten, + zurueckgestellt: ausweis.zurueckgestellt, + zusaetzliche_heizquelle: ausweis.zusaetzliche_heizquelle, + anteil_kuehlung_1: ausweis.anteil_kuehlung_1, + anteil_kuehlung_2: ausweis.anteil_kuehlung_2, + keller_beheizt: ausweis.keller_beheizt, + kuehlung_enthalten: ausweis.kuehlung_enthalten, + rechnung_id: ausweis.rechnung_id, + strom_1: ausweis.strom_1, + strom_2: ausweis.strom_2, + strom_3: ausweis.strom_3, + stromverbrauch_enthaelt_beleuchtung: + ausweis.stromverbrauch_enthaelt_beleuchtung, + stromverbrauch_enthaelt_heizung: + ausweis.stromverbrauch_enthaelt_heizung, + stromverbrauch_enthaelt_kuehlung: + ausweis.stromverbrauch_enthaelt_kuehlung, + stromverbrauch_enthaelt_lueftung: + ausweis.stromverbrauch_enthaelt_lueftung, + stromverbrauch_enthaelt_sonstige: + ausweis.stromverbrauch_enthaelt_sonstige, + stromverbrauch_enthaelt_warmwasser: + ausweis.stromverbrauch_enthaelt_warmwasser, + }, + aufnahme_id, + }, + { + headers: { + Authorization: `Bearer ${Cookies.get( + API_ACCESS_TOKEN_COOKIE_NAME + )}`, + }, + } + ); + + return id; + } +} + +export async function bedarfsausweisWohnenSpeichern( + ausweis: BedarfsausweisWohnen, + aufnahme_id: string +): Promise { + if (ausweis.id) { + await api["bedarfsausweis-wohnen"]._id.PATCH.fetch( + { + ausweistyp: ausweis.ausweistyp, + alternative_heizung: ausweis.alternative_heizung, + alternative_kuehlung: ausweis.alternative_kuehlung, + alternative_lueftung: ausweis.alternative_lueftung, + alternative_warmwasser: ausweis.alternative_warmwasser, + ausstellgrund: ausweis.ausstellgrund, + ausstellungsdatum: ausweis.ausstellungsdatum, + beschreibung: ausweis.beschreibung, + boxpruefung: ausweis.boxpruefung, + energieeffizienzklasse: ausweis.energieeffizienzklasse, + kontrolldatei_angefragt: ausweis.kontrolldatei_angefragt, + prueftext: ausweis.prueftext, + registriernummer: ausweis.registriernummer, + anteil_zusatzheizung: ausweis.anteil_zusatzheizung, + anzahl_gauben: ausweis.anzahl_gauben, + anzahl_vollgeschosse: ausweis.anzahl_vollgeschosse, + aussenwand_bauart: ausweis.aussenwand_bauart, + aussenwand_daemmung: ausweis.aussenwand_daemmung, + aussenwand_flaeche: ausweis.aussenwand_flaeche, + aussenwand_u_wert: ausweis.aussenwand_u_wert, + aussenwandflaeche_unbeheizt: + ausweis.aussenwandflaeche_unbeheizt, + boden_bauart: ausweis.boden_bauart, + boden_daemmung: ausweis.boden_daemmung, + breite_gauben: ausweis.breite_gauben, + dach_bauart: ausweis.dach_bauart, + dach_daemmung: ausweis.dach_daemmung, + dach_u_wert: ausweis.dach_u_wert, + dachfenster_art: ausweis.dachfenster_art, + dachfenster_flaeche: ausweis.dachfenster_flaeche, + dachflaeche: ausweis.dachflaeche, + decke_bauart: ausweis.decke_bauart, + decke_daemmung: ausweis.decke_daemmung, + decke_u_wert: ausweis.decke_u_wert, + deckenflaeche: ausweis.deckenflaeche, + dicht: ausweis.dicht, + fenster_art_1: ausweis.fenster_art_1, + fenster_art_2: ausweis.fenster_art_2, + fenster_flaeche_1: ausweis.fenster_flaeche_1, + fenster_flaeche_2: ausweis.fenster_flaeche_2, + fensterflaeche_nw_no: ausweis.fensterflaeche_nw_no, + fensterflaeche_so_sw: ausweis.fensterflaeche_so_sw, + fussboden_flaeche: ausweis.fussboden_flaeche, + fussboden_u_wert: ausweis.fussboden_u_wert, + geschosshoehe: ausweis.geschosshoehe, + haustuer_art: ausweis.haustuer_art, + haustuer_flaeche: ausweis.haustuer_flaeche, + heizung_speicherung: ausweis.heizung_speicherung, + heizung_verteilung: ausweis.heizung_verteilung, + heizung_zentral: ausweis.heizung_zentral, + kollektor_flaeche: ausweis.kollektor_flaeche, + masse_a: ausweis.masse_a, + masse_b: ausweis.masse_b, + masse_c: ausweis.masse_c, + masse_d: ausweis.masse_d, + masse_e: ausweis.masse_e, + masse_f: ausweis.masse_f, + volumen: ausweis.volumen, + waerme_erzeugung_heizung: ausweis.waerme_erzeugung_heizung, + warmwasser_erzeugung: ausweis.warmwasser_erzeugung, + warmwasser_speicherung: ausweis.warmwasser_speicherung, + warmwasser_verteilung: ausweis.warmwasser_verteilung, + }, + { + params: { + id: ausweis.id, + }, + headers: { + Authorization: `Bearer ${Cookies.get( + API_ACCESS_TOKEN_COOKIE_NAME + )}`, + }, + } + ); + + return ausweis.id; + } else { + const id = await api["bedarfsausweis-wohnen"].PUT.fetch( + { + ausweis: { + ausweistyp: ausweis.ausweistyp, + alternative_heizung: ausweis.alternative_heizung, + alternative_kuehlung: ausweis.alternative_kuehlung, + alternative_lueftung: ausweis.alternative_lueftung, + alternative_warmwasser: ausweis.alternative_warmwasser, + ausstellgrund: ausweis.ausstellgrund, + ausstellungsdatum: ausweis.ausstellungsdatum, + beschreibung: ausweis.beschreibung, + boxpruefung: ausweis.boxpruefung, + energieeffizienzklasse: ausweis.energieeffizienzklasse, + kontrolldatei_angefragt: ausweis.kontrolldatei_angefragt, + prueftext: ausweis.prueftext, + registriernummer: ausweis.registriernummer, + anteil_zusatzheizung: ausweis.anteil_zusatzheizung, + anzahl_gauben: ausweis.anzahl_gauben, + anzahl_vollgeschosse: ausweis.anzahl_vollgeschosse, + aussenwand_bauart: ausweis.aussenwand_bauart, + aussenwand_daemmung: ausweis.aussenwand_daemmung, + aussenwand_flaeche: ausweis.aussenwand_flaeche, + aussenwand_u_wert: ausweis.aussenwand_u_wert, + aussenwandflaeche_unbeheizt: + ausweis.aussenwandflaeche_unbeheizt, + boden_bauart: ausweis.boden_bauart, + boden_daemmung: ausweis.boden_daemmung, + breite_gauben: ausweis.breite_gauben, + dach_bauart: ausweis.dach_bauart, + dach_daemmung: ausweis.dach_daemmung, + dach_u_wert: ausweis.dach_u_wert, + dachfenster_art: ausweis.dachfenster_art, + dachfenster_flaeche: ausweis.dachfenster_flaeche, + dachflaeche: ausweis.dachflaeche, + decke_bauart: ausweis.decke_bauart, + decke_daemmung: ausweis.decke_daemmung, + decke_u_wert: ausweis.decke_u_wert, + deckenflaeche: ausweis.deckenflaeche, + dicht: ausweis.dicht, + fenster_art_1: ausweis.fenster_art_1, + fenster_art_2: ausweis.fenster_art_2, + fenster_flaeche_1: ausweis.fenster_flaeche_1, + fenster_flaeche_2: ausweis.fenster_flaeche_2, + fensterflaeche_nw_no: ausweis.fensterflaeche_nw_no, + fensterflaeche_so_sw: ausweis.fensterflaeche_so_sw, + fussboden_flaeche: ausweis.fussboden_flaeche, + fussboden_u_wert: ausweis.fussboden_u_wert, + geschosshoehe: ausweis.geschosshoehe, + haustuer_art: ausweis.haustuer_art, + haustuer_flaeche: ausweis.haustuer_flaeche, + heizung_speicherung: ausweis.heizung_speicherung, + heizung_verteilung: ausweis.heizung_verteilung, + heizung_zentral: ausweis.heizung_zentral, + kollektor_flaeche: ausweis.kollektor_flaeche, + masse_a: ausweis.masse_a, + masse_b: ausweis.masse_b, + masse_c: ausweis.masse_c, + masse_d: ausweis.masse_d, + masse_e: ausweis.masse_e, + masse_f: ausweis.masse_f, + volumen: ausweis.volumen, + waerme_erzeugung_heizung: ausweis.waerme_erzeugung_heizung, + warmwasser_erzeugung: ausweis.warmwasser_erzeugung, + warmwasser_speicherung: ausweis.warmwasser_speicherung, + warmwasser_verteilung: ausweis.warmwasser_verteilung, + }, + aufnahme_id, + }, + { + headers: { + Authorization: `Bearer ${Cookies.get( + API_ACCESS_TOKEN_COOKIE_NAME + )}`, + }, + } + ); + + return id; + } +} export async function ausweisSpeichern( - ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient | BedarfsausweisWohnenClient, + ausweis: + | VerbrauchsausweisWohnenClient + | VerbrauchsausweisGewerbeClient + | BedarfsausweisWohnenClient, objekt: ObjektClient, aufnahme: AufnahmeClient, bilder: BildClient[], ausweisart: Enums.Ausweisart ) { - if (objekt.id) { - await api.objekt._id.PATCH.fetch({ - adresse: objekt.adresse, - latitude: 0, - longitude: 0, - ort: objekt.ort, - plz: objekt.plz - }, { - params: { - id: objekt.id - }, - headers: { - "Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` - } - }) -} else { - const { id } = await api.objekt.PUT.fetch({ - adresse: objekt.adresse, - latitude: 0, - longitude: 0, - ort: objekt.ort, - plz: objekt.plz - }, { - headers: { - "Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` - } - }) + const [objekt_id, objekt_error] = await tryCatch(objektSpeichern(objekt)); - objekt.id = id; + if (objekt_error) { + addNotification({ + message: "Das hat nicht geklappt.", + subtext: + "Beim Speichern des Objektes ist ein Fehler aufgetreten, bitte versuchen sie es erneut.", + }); + + return; } + objekt.id = objekt_id; + let [aufnahme_id, aufnahme_error] = await tryCatch( + aufnahmeSpeichern(aufnahme, objekt_id) + ); - if (aufnahme.id) { - await api.aufnahme._id.PATCH.fetch({ - baujahr_gebaeude: aufnahme.baujahr_gebaeude, - baujahr_heizung: aufnahme.baujahr_heizung, - baujahr_klima: aufnahme.baujahr_klima || [], - alternative_heizung: aufnahme.alternative_heizung, - alternative_kuehlung: aufnahme.alternative_kuehlung, - alternative_lueftung: aufnahme.alternative_lueftung, - alternative_warmwasser: aufnahme.alternative_warmwasser, - aussenwand_gedaemmt: aufnahme.aussenwand_gedaemmt, - aussenwand_min_12cm_gedaemmt: aufnahme.aussenwand_min_12cm_gedaemmt, - brennwert_kessel: aufnahme.brennwert_kessel, - dachgeschoss: aufnahme.dachgeschoss, - dachgeschoss_gedaemmt: aufnahme.dachgeschoss_gedaemmt, - dachgeschoss_min_12cm_gedaemmt: aufnahme.dachgeschoss_min_12cm_gedaemmt, - doppel_verglasung: aufnahme.doppel_verglasung, - dreifach_verglasung: aufnahme.dreifach_verglasung, - durchlauf_erhitzer: aufnahme.durchlauf_erhitzer, - einfach_verglasung: aufnahme.einfach_verglasung, - einheiten: aufnahme.einheiten, - einzelofen: aufnahme.einzelofen, - fenster_dicht: aufnahme.fenster_dicht, - fenster_teilweise_undicht: aufnahme.fenster_teilweise_undicht, - flaeche: aufnahme.flaeche, - gebaeudeteil: aufnahme.gebaeudeteil, - gebaeudetyp: aufnahme.gebaeudetyp, - heizungsrohre_gedaemmt: aufnahme.heizungsrohre_gedaemmt, - isolier_verglasung: aufnahme.isolier_verglasung, - keller: aufnahme.keller, - keller_decke_gedaemmt: aufnahme.keller_decke_gedaemmt, - keller_wand_gedaemmt: aufnahme.keller_wand_gedaemmt, - kuehlung: aufnahme.kuehlung, - leerstand: aufnahme.leerstand, - lueftung: aufnahme.lueftung, - niedertemperatur_kessel: aufnahme.niedertemperatur_kessel, - nutzflaeche: aufnahme.nutzflaeche, - oberste_geschossdecke_gedaemmt: aufnahme.oberste_geschossdecke_gedaemmt, - oberste_geschossdecke_min_12cm_gedaemmt: aufnahme.oberste_geschossdecke_min_12cm_gedaemmt, - photovoltaik: aufnahme.photovoltaik, - raum_temperatur_regler: aufnahme.raum_temperatur_regler, - rolllaeden_kaesten_gedaemmt: aufnahme.rolllaeden_kaesten_gedaemmt, - saniert: aufnahme.saniert, - solarsystem_warmwasser: aufnahme.solarsystem_warmwasser, - standard_kessel: aufnahme.standard_kessel, - tueren_dicht: aufnahme.tueren_dicht, - tueren_undicht: aufnahme.tueren_undicht, - waermepumpe: aufnahme.waermepumpe, - warmwasser_rohre_gedaemmt: aufnahme.warmwasser_rohre_gedaemmt, - zentralheizung: aufnahme.zentralheizung, - zirkulation: aufnahme.zirkulation - }, { - params: { - id: aufnahme.id - }, - headers: { - "Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` - } - }) - } else { - const { id } = await api.aufnahme.PUT.fetch({ - aufnahme: { - baujahr_gebaeude: aufnahme.baujahr_gebaeude, - baujahr_heizung: aufnahme.baujahr_heizung, - alternative_heizung: aufnahme.alternative_heizung, - alternative_kuehlung: aufnahme.alternative_kuehlung, - alternative_lueftung: aufnahme.alternative_lueftung, - alternative_warmwasser: aufnahme.alternative_warmwasser, - aussenwand_gedaemmt: aufnahme.aussenwand_gedaemmt, - aussenwand_min_12cm_gedaemmt: aufnahme.aussenwand_min_12cm_gedaemmt, - baujahr_klima: aufnahme.baujahr_klima, - brennwert_kessel: aufnahme.brennwert_kessel, - dachgeschoss: aufnahme.dachgeschoss, - dachgeschoss_gedaemmt: aufnahme.dachgeschoss_gedaemmt, - dachgeschoss_min_12cm_gedaemmt: aufnahme.dachgeschoss_min_12cm_gedaemmt, - doppel_verglasung: aufnahme.doppel_verglasung, - dreifach_verglasung: aufnahme.dreifach_verglasung, - durchlauf_erhitzer: aufnahme.durchlauf_erhitzer, - einfach_verglasung: aufnahme.einfach_verglasung, - einheiten: aufnahme.einheiten, - einzelofen: aufnahme.einzelofen, - erstellungsdatum: aufnahme.erstellungsdatum, - fenster_dicht: aufnahme.fenster_dicht, - fenster_teilweise_undicht: aufnahme.fenster_teilweise_undicht, - flaeche: aufnahme.flaeche, - gebaeudeteil: aufnahme.gebaeudeteil, - gebaeudetyp: aufnahme.gebaeudetyp, - heizungsrohre_gedaemmt: aufnahme.heizungsrohre_gedaemmt, - isolier_verglasung: aufnahme.isolier_verglasung, - keller: aufnahme.keller, - keller_decke_gedaemmt: aufnahme.keller_decke_gedaemmt, - keller_wand_gedaemmt: aufnahme.keller_wand_gedaemmt, - kuehlung: aufnahme.kuehlung, - leerstand: aufnahme.leerstand, - lueftung: aufnahme.lueftung, - niedertemperatur_kessel: aufnahme.niedertemperatur_kessel, - nutzflaeche: aufnahme.nutzflaeche, - oberste_geschossdecke_gedaemmt: aufnahme.oberste_geschossdecke_gedaemmt, - oberste_geschossdecke_min_12cm_gedaemmt: aufnahme.oberste_geschossdecke_min_12cm_gedaemmt, - photovoltaik: aufnahme.photovoltaik, - raum_temperatur_regler: aufnahme.raum_temperatur_regler, - rolllaeden_kaesten_gedaemmt: aufnahme.rolllaeden_kaesten_gedaemmt, - saniert: aufnahme.saniert, - solarsystem_warmwasser: aufnahme.solarsystem_warmwasser, - standard_kessel: aufnahme.standard_kessel, - tueren_dicht: aufnahme.tueren_dicht, - tueren_undicht: aufnahme.tueren_undicht, - waermepumpe: aufnahme.waermepumpe, - warmwasser_rohre_gedaemmt: aufnahme.warmwasser_rohre_gedaemmt, - zentralheizung: aufnahme.zentralheizung, - zirkulation: aufnahme.zirkulation - }, - objekt_id: objekt.id - }, { - headers: { - "Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` - } - }) + if (aufnahme_error) { + addNotification({ + message: "Das hat nicht geklappt.", + subtext: + "Beim Speichern der Objektaufnahme ist ein Fehler aufgetreten, bitte versuchen sie es erneut.", + }); - aufnahme.id = id + return; } - let patchRoute: any; - let putRoute: any; + aufnahme.id = aufnahme_id; + if (ausweisart == Enums.Ausweisart.VerbrauchsausweisWohnen) { - patchRoute = api["verbrauchsausweis-wohnen"]._id.PATCH - putRoute = api["verbrauchsausweis-wohnen"].PUT + const id = await verbrauchsausweisWohnenSpeichern(ausweis as VerbrauchsausweisWohnen, aufnahme_id) + ausweis.id = id; } else if (ausweisart == Enums.Ausweisart.VerbrauchsausweisGewerbe) { - patchRoute = api["verbrauchsausweis-gewerbe"]._id.PATCH - putRoute = api["verbrauchsausweis-gewerbe"].PUT + const id = await verbrauchsausweisGewerbeSpeichern(ausweis as VerbrauchsausweisGewerbe, aufnahme_id) + ausweis.id = id; } else if (ausweisart == Enums.Ausweisart.BedarfsausweisWohnen) { - patchRoute = api["bedarfsausweis-wohnen"]._id.PATCH - putRoute = api["bedarfsausweis-wohnen"].PUT - } - - if (ausweis.id) { - await patchRoute.fetch({ - ...exclude(ausweis, ["id"]) - }, { - params: { - id: ausweis.id - }, - headers: { - "Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` - } - }) - } else { - const { id } = await putRoute.fetch({ - ausweis, - aufnahme_id: aufnahme.id - }, { - headers: { - "Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` - } - }) - + const id = await bedarfsausweisWohnenSpeichern(ausweis as BedarfsausweisWohnen, aufnahme_id) ausweis.id = id; } - await api.aufnahme._id.bilder.PUT.fetch(bilder.map(bild => bild.id), { - params: { - id: aufnahme.id - }, - headers: { - "Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` + await api.aufnahme._id.bilder.PUT.fetch( + bilder.map((bild) => bild.id), + { + params: { + id: aufnahme.id, + }, + headers: { + Authorization: `Bearer ${Cookies.get( + API_ACCESS_TOKEN_COOKIE_NAME + )}`, + }, } - }) - + ); + return { ausweis_id: ausweis.id, aufnahme_id: aufnahme.id, - objekt_id: objekt.id - } + objekt_id: objekt.id, + }; } diff --git a/src/client/lib/nachweisSpeichern.ts b/src/client/lib/nachweisSpeichern.ts index b5243e33..f8d2f38a 100644 --- a/src/client/lib/nachweisSpeichern.ts +++ b/src/client/lib/nachweisSpeichern.ts @@ -1,10 +1,143 @@ import { api } from "astro-typesafe-api/client" -import { exclude } from "#lib/exclude.js"; import Cookies from "js-cookie"; import { API_ACCESS_TOKEN_COOKIE_NAME } from "#lib/constants.js"; import { AufnahmeClient, BildClient, ObjektClient, } from "#components/Ausweis/types.js"; import { BedarfsausweisGewerbe, Enums, GEGNachweisGewerbe, GEGNachweisWohnen, Unterlage } from "#lib/client/prisma.js"; +import { tryCatch } from "#lib/tryCatch.js"; +import { addNotification } from "#components/Notifications/shared.js"; +import { aufnahmeSpeichern, objektSpeichern } from "./speichern.js"; + +export async function gegNachweisWohnenSpeichern(nachweis: GEGNachweisWohnen, aufnahme_id: string): Promise { + if (nachweis.id) { + await api["geg-nachweis-wohnen"]._id.PATCH.fetch({ + nachweistyp: nachweis.nachweistyp, + ausstellgrund: nachweis.ausstellgrund, + beschreibung: nachweis.beschreibung, + keller_beheizt: nachweis.keller_beheizt, + }, { + params: { + id: nachweis.id + }, + headers: { + "Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` + } + }) + + return nachweis.id + } else { + const { id } = await api["geg-nachweis-wohnen"].PUT.fetch({ + nachweis: { + nachweistyp: nachweis.nachweistyp, + ausstellgrund: nachweis.ausstellgrund, + beschreibung: nachweis.beschreibung, + keller_beheizt: nachweis.keller_beheizt, + }, + aufnahme_id + }, { + headers: { + "Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` + } + }) + + return id + } +} + +export async function gegNachweisGewerbeSpeichern(nachweis: GEGNachweisGewerbe, aufnahme_id: string): Promise { + if (nachweis.id) { + await api["geg-nachweis-gewerbe"]._id.PATCH.fetch({ + nachweistyp: nachweis.nachweistyp, + ausstellgrund: nachweis.ausstellgrund, + beschreibung: nachweis.beschreibung, + keller_beheizt: nachweis.keller_beheizt, + }, { + params: { + id: nachweis.id + }, + headers: { + "Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` + } + }) + + return nachweis.id + } else { + const { id } = await api["geg-nachweis-gewerbe"].PUT.fetch({ + nachweis: { + nachweistyp: nachweis.nachweistyp, + ausstellgrund: nachweis.ausstellgrund, + beschreibung: nachweis.beschreibung, + keller_beheizt: nachweis.keller_beheizt, + }, + aufnahme_id + }, { + headers: { + "Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` + } + }) + + return id + } +} + +export async function bedarfsausweisGewerbeSpeichern(nachweis: BedarfsausweisGewerbe, aufnahme_id: string): Promise { + if (nachweis.id) { + await api["bedarfsausweis-gewerbe"]._id.PATCH.fetch({ + nachweistyp: nachweis.nachweistyp, + ausstellgrund: nachweis.ausstellgrund, + abluftanlage: nachweis.abluftanlage, + bauteilaktivierung: nachweis.bauteilaktivierung, + direktheizung: nachweis.direktheizung, + dunkelstrahler: nachweis.dunkelstrahler, + fussbodenheizung: nachweis.fussbodenheizung, + hallenheizung: nachweis.hallenheizung, + infrarotstrahler: nachweis.infrarotstrahler, + keller_beheizt: nachweis.keller_beheizt, + klimatisierung: nachweis.klimatisierung, + konditionierung_der_zuluft: nachweis.konditionierung_der_zuluft, + luftheizung: nachweis.luftheizung, + zu_abluftanlage: nachweis.zu_abluftanlage + }, { + params: { + id: nachweis.id + }, + headers: { + "Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` + } + }) + + return nachweis.id + } else { + const id = await api["bedarfsausweis-gewerbe"].PUT.fetch({ + nachweis: { + nachweistyp: nachweis.nachweistyp, + ausstellgrund: nachweis.ausstellgrund, + abluftanlage: nachweis.abluftanlage, + bauteilaktivierung: nachweis.bauteilaktivierung, + direktheizung: nachweis.direktheizung, + dunkelstrahler: nachweis.dunkelstrahler, + fussbodenheizung: nachweis.fussbodenheizung, + hallenheizung: nachweis.hallenheizung, + infrarotstrahler: nachweis.infrarotstrahler, + keller_beheizt: nachweis.keller_beheizt, + klimatisierung: nachweis.klimatisierung, + konditionierung_der_zuluft: nachweis.konditionierung_der_zuluft, + luftheizung: nachweis.luftheizung, + zu_abluftanlage: nachweis.zu_abluftanlage + }, + aufnahme_id + }, { + headers: { + "Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` + } + }) + + return id + } +} + + + export async function nachweisSpeichern( nachweis: BedarfsausweisGewerbe | GEGNachweisWohnen | GEGNachweisGewerbe, @@ -14,195 +147,38 @@ export async function nachweisSpeichern( unterlagen: Unterlage[], ausweisart: Enums.Ausweisart ) { - if (objekt.id) { - await api.objekt._id.PATCH.fetch({ - adresse: objekt.adresse, - latitude: 0, - longitude: 0, - ort: objekt.ort, - plz: objekt.plz - }, { - params: { - id: objekt.id - }, - headers: { - "Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` - } - }) -} else { - const { id } = await api.objekt.PUT.fetch({ - adresse: objekt.adresse, - latitude: 0, - longitude: 0, - ort: objekt.ort, - plz: objekt.plz - }, { - headers: { - "Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` - } + const [objekt_id, objekt_error] = await tryCatch(objektSpeichern(objekt)) + + if (objekt_error) { + addNotification({ + message: "Das hat nicht geklappt.", + subtext: "Beim Speichern des Objektes ist ein Fehler aufgetreten, bitte versuchen sie es erneut." }) - objekt.id = id; + return; } + objekt.id = objekt_id + let [aufnahme_id, aufnahme_error] = await tryCatch(aufnahmeSpeichern(aufnahme, objekt_id)) - if (aufnahme.id) { - await api.aufnahme._id.PATCH.fetch({ - baujahr_gebaeude: aufnahme.baujahr_gebaeude || [], - baujahr_heizung: aufnahme.baujahr_heizung || [], - baujahr_klima: aufnahme.baujahr_klima || [], - alternative_heizung: aufnahme.alternative_heizung, - alternative_kuehlung: aufnahme.alternative_kuehlung, - alternative_lueftung: aufnahme.alternative_lueftung, - alternative_warmwasser: aufnahme.alternative_warmwasser, - aussenwand_gedaemmt: aufnahme.aussenwand_gedaemmt, - aussenwand_min_12cm_gedaemmt: aufnahme.aussenwand_min_12cm_gedaemmt, - brennwert_kessel: aufnahme.brennwert_kessel, - dachgeschoss: aufnahme.dachgeschoss, - dachgeschoss_gedaemmt: aufnahme.dachgeschoss_gedaemmt, - dachgeschoss_min_12cm_gedaemmt: aufnahme.dachgeschoss_min_12cm_gedaemmt, - doppel_verglasung: aufnahme.doppel_verglasung, - dreifach_verglasung: aufnahme.dreifach_verglasung, - durchlauf_erhitzer: aufnahme.durchlauf_erhitzer, - einfach_verglasung: aufnahme.einfach_verglasung, - einheiten: aufnahme.einheiten, - einzelofen: aufnahme.einzelofen, - fenster_dicht: aufnahme.fenster_dicht, - fenster_teilweise_undicht: aufnahme.fenster_teilweise_undicht, - flaeche: aufnahme.flaeche, - gebaeudeteil: aufnahme.gebaeudeteil, - gebaeudetyp: aufnahme.gebaeudetyp, - heizungsrohre_gedaemmt: aufnahme.heizungsrohre_gedaemmt, - isolier_verglasung: aufnahme.isolier_verglasung, - keller: aufnahme.keller, - keller_decke_gedaemmt: aufnahme.keller_decke_gedaemmt, - keller_wand_gedaemmt: aufnahme.keller_wand_gedaemmt, - kuehlung: aufnahme.kuehlung, - leerstand: aufnahme.leerstand, - lueftung: aufnahme.lueftung, - niedertemperatur_kessel: aufnahme.niedertemperatur_kessel, - nutzflaeche: aufnahme.nutzflaeche, - oberste_geschossdecke_gedaemmt: aufnahme.oberste_geschossdecke_gedaemmt, - oberste_geschossdecke_min_12cm_gedaemmt: aufnahme.oberste_geschossdecke_min_12cm_gedaemmt, - photovoltaik: aufnahme.photovoltaik, - raum_temperatur_regler: aufnahme.raum_temperatur_regler, - rolllaeden_kaesten_gedaemmt: aufnahme.rolllaeden_kaesten_gedaemmt, - saniert: aufnahme.saniert, - solarsystem_warmwasser: aufnahme.solarsystem_warmwasser, - standard_kessel: aufnahme.standard_kessel, - tueren_dicht: aufnahme.tueren_dicht, - tueren_undicht: aufnahme.tueren_undicht, - waermepumpe: aufnahme.waermepumpe, - warmwasser_rohre_gedaemmt: aufnahme.warmwasser_rohre_gedaemmt, - zentralheizung: aufnahme.zentralheizung, - zirkulation: aufnahme.zirkulation - }, { - params: { - id: aufnahme.id - }, - headers: { - "Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` - } - }) - } else { - const { id } = await api.aufnahme.PUT.fetch({ - aufnahme: { - baujahr_gebaeude: aufnahme.baujahr_gebaeude, - baujahr_heizung: aufnahme.baujahr_heizung, - alternative_heizung: aufnahme.alternative_heizung, - alternative_kuehlung: aufnahme.alternative_kuehlung, - alternative_lueftung: aufnahme.alternative_lueftung, - alternative_warmwasser: aufnahme.alternative_warmwasser, - aussenwand_gedaemmt: aufnahme.aussenwand_gedaemmt, - aussenwand_min_12cm_gedaemmt: aufnahme.aussenwand_min_12cm_gedaemmt, - baujahr_klima: aufnahme.baujahr_klima, - brennwert_kessel: aufnahme.brennwert_kessel, - dachgeschoss: aufnahme.dachgeschoss, - dachgeschoss_gedaemmt: aufnahme.dachgeschoss_gedaemmt, - dachgeschoss_min_12cm_gedaemmt: aufnahme.dachgeschoss_min_12cm_gedaemmt, - doppel_verglasung: aufnahme.doppel_verglasung, - dreifach_verglasung: aufnahme.dreifach_verglasung, - durchlauf_erhitzer: aufnahme.durchlauf_erhitzer, - einfach_verglasung: aufnahme.einfach_verglasung, - einheiten: aufnahme.einheiten, - einzelofen: aufnahme.einzelofen, - erstellungsdatum: aufnahme.erstellungsdatum, - fenster_dicht: aufnahme.fenster_dicht, - fenster_teilweise_undicht: aufnahme.fenster_teilweise_undicht, - flaeche: aufnahme.flaeche, - gebaeudeteil: aufnahme.gebaeudeteil, - gebaeudetyp: aufnahme.gebaeudetyp, - heizungsrohre_gedaemmt: aufnahme.heizungsrohre_gedaemmt, - isolier_verglasung: aufnahme.isolier_verglasung, - keller: aufnahme.keller, - keller_decke_gedaemmt: aufnahme.keller_decke_gedaemmt, - keller_wand_gedaemmt: aufnahme.keller_wand_gedaemmt, - kuehlung: aufnahme.kuehlung, - leerstand: aufnahme.leerstand, - lueftung: aufnahme.lueftung, - niedertemperatur_kessel: aufnahme.niedertemperatur_kessel, - nutzflaeche: aufnahme.nutzflaeche, - oberste_geschossdecke_gedaemmt: aufnahme.oberste_geschossdecke_gedaemmt, - oberste_geschossdecke_min_12cm_gedaemmt: aufnahme.oberste_geschossdecke_min_12cm_gedaemmt, - photovoltaik: aufnahme.photovoltaik, - raum_temperatur_regler: aufnahme.raum_temperatur_regler, - rolllaeden_kaesten_gedaemmt: aufnahme.rolllaeden_kaesten_gedaemmt, - saniert: aufnahme.saniert, - solarsystem_warmwasser: aufnahme.solarsystem_warmwasser, - standard_kessel: aufnahme.standard_kessel, - tueren_dicht: aufnahme.tueren_dicht, - tueren_undicht: aufnahme.tueren_undicht, - waermepumpe: aufnahme.waermepumpe, - warmwasser_rohre_gedaemmt: aufnahme.warmwasser_rohre_gedaemmt, - zentralheizung: aufnahme.zentralheizung, - zirkulation: aufnahme.zirkulation - }, - objekt_id: objekt.id - }, { - headers: { - "Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` - } + if (aufnahme_error) { + addNotification({ + message: "Das hat nicht geklappt.", + subtext: "Beim Speichern der Objektaufnahme ist ein Fehler aufgetreten, bitte versuchen sie es erneut." }) - aufnahme.id = id + return; } - let patchRoute: any; - let putRoute: any; + aufnahme.id = aufnahme_id + if (ausweisart == Enums.Ausweisart.GEGNachweisWohnen) { - patchRoute = api["geg-nachweis-wohnen"]._id.PATCH - putRoute = api["geg-nachweis-wohnen"].PUT + gegNachweisWohnenSpeichern(nachweis as GEGNachweisWohnen, aufnahme_id) } else if (ausweisart === Enums.Ausweisart.GEGNachweisGewerbe) { - patchRoute = api["geg-nachweis-gewerbe"]._id.PATCH - putRoute = api["geg-nachweis-gewerbe"].PUT + gegNachweisGewerbeSpeichern(nachweis as GEGNachweisGewerbe, aufnahme_id) } else if (ausweisart === Enums.Ausweisart.BedarfsausweisGewerbe) { - patchRoute = api["bedarfsausweis-gewerbe"]._id.PATCH - putRoute = api["bedarfsausweis-gewerbe"].PUT - } - - if (nachweis.id) { - await patchRoute.fetch({ - ...exclude(nachweis, ["id"]) - }, { - params: { - id: nachweis.id - }, - headers: { - "Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` - } - }) - } else { - const { id } = await putRoute.fetch({ - nachweis, - aufnahme_id: aufnahme.id - }, { - headers: { - "Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` - } - }) - - nachweis.id = id; + bedarfsausweisGewerbeSpeichern(nachweis as BedarfsausweisGewerbe, aufnahme_id) } await api.aufnahme._id.bilder.PUT.fetch(bilder.map(bild => bild.id), { @@ -213,8 +189,6 @@ export async function nachweisSpeichern( "Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` } }) - console.log(unterlagen); - await api.aufnahme._id.unterlagen.PUT.fetch(unterlagen.map(unterlage => unterlage.id), { params: { diff --git a/src/client/lib/speichern.ts b/src/client/lib/speichern.ts new file mode 100644 index 00000000..b424785e --- /dev/null +++ b/src/client/lib/speichern.ts @@ -0,0 +1,164 @@ +import { API_ACCESS_TOKEN_COOKIE_NAME } from "#lib/constants.js"; +import { Aufnahme, Objekt } from "#lib/server/prisma.js"; +import { api } from "astro-typesafe-api/client"; +import Cookies from "js-cookie"; + +export async function aufnahmeSpeichern(aufnahme: Aufnahme, objekt_id: string): Promise { + if (aufnahme.id) { + await api.aufnahme._id.PATCH.fetch({ + baujahr_gebaeude: aufnahme.baujahr_gebaeude || [], + baujahr_heizung: aufnahme.baujahr_heizung || [], + baujahr_klima: aufnahme.baujahr_klima || [], + alternative_heizung: aufnahme.alternative_heizung, + alternative_kuehlung: aufnahme.alternative_kuehlung, + alternative_lueftung: aufnahme.alternative_lueftung, + alternative_warmwasser: aufnahme.alternative_warmwasser, + aussenwand_gedaemmt: aufnahme.aussenwand_gedaemmt, + aussenwand_min_12cm_gedaemmt: aufnahme.aussenwand_min_12cm_gedaemmt, + brennwert_kessel: aufnahme.brennwert_kessel, + dachgeschoss: aufnahme.dachgeschoss, + dachgeschoss_gedaemmt: aufnahme.dachgeschoss_gedaemmt, + dachgeschoss_min_12cm_gedaemmt: aufnahme.dachgeschoss_min_12cm_gedaemmt, + doppel_verglasung: aufnahme.doppel_verglasung, + dreifach_verglasung: aufnahme.dreifach_verglasung, + durchlauf_erhitzer: aufnahme.durchlauf_erhitzer, + einfach_verglasung: aufnahme.einfach_verglasung, + einheiten: aufnahme.einheiten, + einzelofen: aufnahme.einzelofen, + fenster_dicht: aufnahme.fenster_dicht, + fenster_teilweise_undicht: aufnahme.fenster_teilweise_undicht, + flaeche: aufnahme.flaeche, + gebaeudeteil: aufnahme.gebaeudeteil, + gebaeudetyp: aufnahme.gebaeudetyp, + heizungsrohre_gedaemmt: aufnahme.heizungsrohre_gedaemmt, + isolier_verglasung: aufnahme.isolier_verglasung, + keller: aufnahme.keller, + keller_decke_gedaemmt: aufnahme.keller_decke_gedaemmt, + keller_wand_gedaemmt: aufnahme.keller_wand_gedaemmt, + kuehlung: aufnahme.kuehlung, + leerstand: aufnahme.leerstand, + lueftung: aufnahme.lueftung, + niedertemperatur_kessel: aufnahme.niedertemperatur_kessel, + nutzflaeche: aufnahme.nutzflaeche, + oberste_geschossdecke_gedaemmt: aufnahme.oberste_geschossdecke_gedaemmt, + oberste_geschossdecke_min_12cm_gedaemmt: aufnahme.oberste_geschossdecke_min_12cm_gedaemmt, + photovoltaik: aufnahme.photovoltaik, + raum_temperatur_regler: aufnahme.raum_temperatur_regler, + rolllaeden_kaesten_gedaemmt: aufnahme.rolllaeden_kaesten_gedaemmt, + saniert: aufnahme.saniert, + solarsystem_warmwasser: aufnahme.solarsystem_warmwasser, + standard_kessel: aufnahme.standard_kessel, + tueren_dicht: aufnahme.tueren_dicht, + tueren_undicht: aufnahme.tueren_undicht, + waermepumpe: aufnahme.waermepumpe, + warmwasser_rohre_gedaemmt: aufnahme.warmwasser_rohre_gedaemmt, + zentralheizung: aufnahme.zentralheizung, + zirkulation: aufnahme.zirkulation + }, { + params: { + id: aufnahme.id + }, + headers: { + "Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` + } + }) + + return aufnahme.id + } else { + const { id } = await api.aufnahme.PUT.fetch({ + aufnahme: { + baujahr_gebaeude: aufnahme.baujahr_gebaeude, + baujahr_heizung: aufnahme.baujahr_heizung, + alternative_heizung: aufnahme.alternative_heizung, + alternative_kuehlung: aufnahme.alternative_kuehlung, + alternative_lueftung: aufnahme.alternative_lueftung, + alternative_warmwasser: aufnahme.alternative_warmwasser, + aussenwand_gedaemmt: aufnahme.aussenwand_gedaemmt, + aussenwand_min_12cm_gedaemmt: aufnahme.aussenwand_min_12cm_gedaemmt, + baujahr_klima: aufnahme.baujahr_klima, + brennwert_kessel: aufnahme.brennwert_kessel, + dachgeschoss: aufnahme.dachgeschoss, + dachgeschoss_gedaemmt: aufnahme.dachgeschoss_gedaemmt, + dachgeschoss_min_12cm_gedaemmt: aufnahme.dachgeschoss_min_12cm_gedaemmt, + doppel_verglasung: aufnahme.doppel_verglasung, + dreifach_verglasung: aufnahme.dreifach_verglasung, + durchlauf_erhitzer: aufnahme.durchlauf_erhitzer, + einfach_verglasung: aufnahme.einfach_verglasung, + einheiten: aufnahme.einheiten, + einzelofen: aufnahme.einzelofen, + erstellungsdatum: aufnahme.erstellungsdatum, + fenster_dicht: aufnahme.fenster_dicht, + fenster_teilweise_undicht: aufnahme.fenster_teilweise_undicht, + flaeche: aufnahme.flaeche, + gebaeudeteil: aufnahme.gebaeudeteil, + gebaeudetyp: aufnahme.gebaeudetyp, + heizungsrohre_gedaemmt: aufnahme.heizungsrohre_gedaemmt, + isolier_verglasung: aufnahme.isolier_verglasung, + keller: aufnahme.keller, + keller_decke_gedaemmt: aufnahme.keller_decke_gedaemmt, + keller_wand_gedaemmt: aufnahme.keller_wand_gedaemmt, + kuehlung: aufnahme.kuehlung, + leerstand: aufnahme.leerstand, + lueftung: aufnahme.lueftung, + niedertemperatur_kessel: aufnahme.niedertemperatur_kessel, + nutzflaeche: aufnahme.nutzflaeche, + oberste_geschossdecke_gedaemmt: aufnahme.oberste_geschossdecke_gedaemmt, + oberste_geschossdecke_min_12cm_gedaemmt: aufnahme.oberste_geschossdecke_min_12cm_gedaemmt, + photovoltaik: aufnahme.photovoltaik, + raum_temperatur_regler: aufnahme.raum_temperatur_regler, + rolllaeden_kaesten_gedaemmt: aufnahme.rolllaeden_kaesten_gedaemmt, + saniert: aufnahme.saniert, + solarsystem_warmwasser: aufnahme.solarsystem_warmwasser, + standard_kessel: aufnahme.standard_kessel, + tueren_dicht: aufnahme.tueren_dicht, + tueren_undicht: aufnahme.tueren_undicht, + waermepumpe: aufnahme.waermepumpe, + warmwasser_rohre_gedaemmt: aufnahme.warmwasser_rohre_gedaemmt, + zentralheizung: aufnahme.zentralheizung, + zirkulation: aufnahme.zirkulation + }, + objekt_id + }, { + headers: { + "Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` + } + }) + + return id; + } +} + +export async function objektSpeichern(objekt: Objekt & { id?: string }): Promise { + if (objekt.id) { + await api.objekt._id.PATCH.fetch({ + adresse: objekt.adresse, + latitude: 0, + longitude: 0, + ort: objekt.ort, + plz: objekt.plz + }, { + params: { + id: objekt.id + }, + headers: { + "Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` + } + }) + + return objekt.id; +} else { + const { id } = await api.objekt.PUT.fetch({ + adresse: objekt.adresse, + latitude: 0, + longitude: 0, + ort: objekt.ort, + plz: objekt.plz + }, { + headers: { + "Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` + } + }) + + return id; + } +} \ No newline at end of file diff --git a/src/components/Ausweis/ButtonWeiterHilfe.svelte b/src/components/Ausweis/ButtonWeiterHilfe.svelte index ee2ee4a1..b119c4bb 100644 --- a/src/components/Ausweis/ButtonWeiterHilfe.svelte +++ b/src/components/Ausweis/ButtonWeiterHilfe.svelte @@ -39,26 +39,39 @@ (form.querySelector("input[name='baujahr_heizung']") as HTMLInputElement).setCustomValidity("") } + new FormData(form).forEach((value, key) => { + if (key === "baujahr_heizung" || key === "baujahr_gebaeude" || key === "baujahr_klima") { + return + } + + const element = (form.querySelector(`[name='${key}']`) as HTMLSelectElement); + if (!value && element.required) { + element.setCustomValidity("Eine Auswahl ist verpflichtend.") + } else { + element.setCustomValidity("") + } + }) + if (!form.checkValidity()) { - // Entferne die Klasse "2xl:mt-[370px]" falls vorhanden - form.classList.remove("2xl:mt-[370px]"); + // Entferne die Klasse "2xl:mt-[370px]" falls vorhanden + form.classList.remove("2xl:mt-[370px]"); - // Verhindere das Scrollen (falls erforderlich) - skala.classList.add("no-scroll"); + // Verhindere das Scrollen (falls erforderlich) + skala.classList.add("no-scroll"); - // Zeige die Validierungsmeldungen - form.reportValidity(); + // Zeige die Validierungsmeldungen + form.reportValidity(); - // Finde das erste ungültige Feld und scrolle sanft darauf - let firstInvalidField = form.querySelector(":invalid"); - if (firstInvalidField) { - let offset = 150; // Abstand für bessere Sichtbarkeit - let fieldPosition = firstInvalidField.getBoundingClientRect().top + window.scrollY; - window.scrollTo({ top: fieldPosition - offset, behavior: "smooth" }); - } + // Finde das erste ungültige Feld und scrolle sanft darauf + let firstInvalidField = form.querySelector(":invalid"); + if (firstInvalidField) { + let offset = 150; // Abstand für bessere Sichtbarkeit + let fieldPosition = firstInvalidField.getBoundingClientRect().top + window.scrollY; + window.scrollTo({ top: fieldPosition - offset, behavior: "smooth" }); + } - return; - } + return; + } if (ausweisart === Enums.Ausweisart.GEGNachweisWohnen || ausweisart === Enums.Ausweisart.GEGNachweisGewerbe || ausweisart === Enums.Ausweisart.BedarfsausweisGewerbe) { openWindowWithPost("/kundendaten", { @@ -97,10 +110,16 @@ let result: Awaited> | Awaited> | null = null; if (ausweisart === Enums.Ausweisart.GEGNachweisWohnen || ausweisart === Enums.Ausweisart.GEGNachweisGewerbe || ausweisart === Enums.Ausweisart.BedarfsausweisGewerbe) { result = await nachweisSpeichern({ ...ausweis as GEGNachweisWohnen, nachweistyp: ausweistyp }, objekt, aufnahme, bilder, unterlagen, ausweisart) - ausweis.id = result.nachweis_id; + + if (result) { + ausweis.id = result.nachweis_id; + } } else { result = await ausweisSpeichern({ ...ausweis as VerbrauchsausweisWohnen, ausweistyp }, objekt, aufnahme, bilder, ausweisart) - ausweis.id = result.ausweis_id; + + if (result) { + ausweis.id = result.ausweis_id; + } } if (result !== null) { diff --git a/src/modules/KundendatenModule.svelte b/src/modules/KundendatenModule.svelte index a887825c..f92d3c8d 100644 --- a/src/modules/KundendatenModule.svelte +++ b/src/modules/KundendatenModule.svelte @@ -2,7 +2,7 @@ import PerformanceScore from "#components/Ausweis/PerformanceScore.svelte"; import Progressbar from "#components/Ausweis/Progressbar.svelte"; import Bereich from "#components/labels/Bereich.svelte"; - import type { Bezahlmethoden, Unterlage } from "#lib/client/prisma.js"; + import type { BedarfsausweisGewerbe, Bezahlmethoden, GEGNachweisGewerbe, GEGNachweisWohnen, Unterlage } from "#lib/client/prisma.js"; import { Enums } from "#lib/client/prisma.js"; import { API_ACCESS_TOKEN_COOKIE_NAME, @@ -232,7 +232,7 @@ let result: Awaited> | Awaited> | null = null; try { if (ausweisart === Enums.Ausweisart.GEGNachweisWohnen || ausweisart === Enums.Ausweisart.GEGNachweisGewerbe || ausweisart === Enums.Ausweisart.BedarfsausweisGewerbe) { - result = await nachweisSpeichern(ausweis, objekt, aufnahme, bilder, unterlagen, ausweisart) + result = await nachweisSpeichern(ausweis as unknown as GEGNachweisWohnen | GEGNachweisGewerbe | BedarfsausweisGewerbe, objekt, aufnahme, bilder, unterlagen, ausweisart) } else { result = await ausweisSpeichern(ausweis, objekt, aufnahme, bilder, ausweisart) } diff --git a/src/pages/api/bedarfsausweis-gewerbe/[id].ts b/src/pages/api/bedarfsausweis-gewerbe/[id].ts index 526312af..3103e429 100644 --- a/src/pages/api/bedarfsausweis-gewerbe/[id].ts +++ b/src/pages/api/bedarfsausweis-gewerbe/[id].ts @@ -1,4 +1,6 @@ import { GEGNachweisWohnenClient, OptionalNullable, UUidWithPrefix, ZodOverlap } from "#components/Ausweis/types.js"; +import { VALID_UUID_PREFIXES } from "#lib/constants.js"; +import { generatePrefixedId } from "#lib/db.js"; import { exclude } from "#lib/exclude.js"; import { authorizationHeaders, authorizationMiddleware } from "#lib/middleware/authorization.js"; import { prisma } from "#lib/server/prisma.js"; @@ -8,11 +10,16 @@ import { z } from "zod"; export const PATCH = defineApiRoute({ input: BedarfsausweisGewerbeSchema.omit({ - uid: true, id: true, benutzer_id: true, geg_einpreisung_id: true, aufnahme_id: true, + bestellt: true, + created_at: true, + rechnung_id: true, + storniert: true, + updated_at: true, + zurueckgestellt: true }), output: z.void(), headers: { @@ -22,7 +29,7 @@ export const PATCH = defineApiRoute({ async fetch(input, ctx, user) { const objekt = await prisma.bedarfsausweisGewerbe.findUnique({ where: { - uid: ctx.params.uid, + id: ctx.params.id, benutzer: { id: user.id } @@ -38,7 +45,7 @@ export const PATCH = defineApiRoute({ await prisma.bedarfsausweisGewerbe.update({ where: { - uid: ctx.params.uid + id: ctx.params.id }, data: input }) @@ -52,9 +59,9 @@ export const DELETE = defineApiRoute({ headers: authorizationHeaders, middleware: authorizationMiddleware, async fetch(input, ctx, user) { - const { uid } = ctx.params; + const { id } = ctx.params; - if (!UUidWithPrefix.safeParse(uid).success) { + if (!UUidWithPrefix.safeParse(id).success) { throw new APIError({ code: "BAD_REQUEST", message: "UID konnte nicht verifiziert werden." @@ -65,7 +72,7 @@ export const DELETE = defineApiRoute({ // Dieser MUSS mit dem Nutzer verknüpft sein. const nachweis = await prisma.bedarfsausweisGewerbe.findUnique({ where: { - uid, + id, } }); @@ -112,10 +119,13 @@ export const DELETE = defineApiRoute({ } }) + const event_id = generatePrefixedId(6, VALID_UUID_PREFIXES.Ticket) + // Wir erstellen ein Event, dass der Nachweis storniert wurde // Dann können wir das in der Historie anzeigen await prisma.event.create({ data: { + id: event_id, title: "Nachweis storniert", description: ((user.rolle === "ADMIN") && (nachweis.benutzer_id !== user.id)) ? "Nachweis wurde von einem Administrator storniert." : "Nachweis wurde vom Besitzer storniert.", benutzer: { @@ -151,9 +161,9 @@ export const GET = defineApiRoute({ } }, output: BedarfsausweisGewerbeSchema.merge(z.object({ - uid_aufnahme: UUidWithPrefix, - uid_objekt: UUidWithPrefix, - uid_benutzer: UUidWithPrefix.optional() + aufnahme_id: UUidWithPrefix, + objekt_id: UUidWithPrefix, + benutzer_id: UUidWithPrefix.optional() })).omit({ id: true, aufnahme_id: true, @@ -161,9 +171,9 @@ export const GET = defineApiRoute({ }), middleware: authorizationMiddleware, async fetch(input, context, user) { - const { uid } = context.params; + const { id } = context.params; - if (!uid) { + if (!id) { throw new APIError({ code: "BAD_REQUEST", message: "Missing uid in request params" @@ -172,21 +182,21 @@ export const GET = defineApiRoute({ const nachweis = await prisma.bedarfsausweisGewerbe.findUnique({ where: { - uid, + id, benutzer_id: user.id }, include: { benutzer: { select: { - uid: true + id: true } }, aufnahme: { select: { - uid: true, + id: true, objekt: { select: { - uid: true + id: true } } } @@ -203,9 +213,9 @@ export const GET = defineApiRoute({ } return { - uid_aufnahme: nachweis.aufnahme.uid, - uid_objekt: nachweis.aufnahme.objekt.uid, - uid_benutzer: nachweis.benutzer?.uid, + aufnahme_id: nachweis.aufnahme.id, + objekt_id: nachweis.aufnahme.objekt.id, + benutzer_id: nachweis.benutzer?.id, ...exclude(nachweis, ["id", "aufnahme_id", "benutzer_id", "aufnahme"]) } }, diff --git a/src/pages/api/bedarfsausweis-gewerbe/index.ts b/src/pages/api/bedarfsausweis-gewerbe/index.ts index 367a3d4f..92e486cc 100644 --- a/src/pages/api/bedarfsausweis-gewerbe/index.ts +++ b/src/pages/api/bedarfsausweis-gewerbe/index.ts @@ -1,4 +1,6 @@ import { UUidWithPrefix } from "#components/Ausweis/types.js"; +import { VALID_UUID_PREFIXES } from "#lib/constants.js"; +import { generatePrefixedId } from "#lib/db.js"; import { authorizationHeaders, authorizationMiddleware } from "#lib/middleware/authorization.js"; import { prisma } from "#lib/server/prisma.js"; import { APIError, defineApiRoute } from "astro-typesafe-api/server"; @@ -16,24 +18,24 @@ export const PUT = defineApiRoute({ nachweis: BedarfsausweisGewerbeSchema.omit({ id: true, benutzer_id: true, - uid: true, - aufnahme_id: true, geg_einpreisung_id: true, - rechnung_id: true + aufnahme_id: true, + bestellt: true, + created_at: true, + rechnung_id: true, + storniert: true, + updated_at: true, + zurueckgestellt: true }), - uid_aufnahme: UUidWithPrefix - }), - output: z.object({ - uid: UUidWithPrefix, - objekt_uid: UUidWithPrefix, - aufnahme_uid: UUidWithPrefix, + aufnahme_id: UUidWithPrefix }), + output: UUidWithPrefix, headers: authorizationHeaders, middleware: authorizationMiddleware, async fetch(input, ctx, user) { const aufnahme = await prisma.aufnahme.findUnique({ where: { - uid: input.uid_aufnahme + id: input.aufnahme_id } }) @@ -44,8 +46,11 @@ export const PUT = defineApiRoute({ }) } + const id = generatePrefixedId(6, VALID_UUID_PREFIXES.GEGNachweisGewerbe) + const nachweis = await prisma.bedarfsausweisGewerbe.create({ data: { + id, ...input.nachweis, benutzer: { connect: { @@ -57,27 +62,10 @@ export const PUT = defineApiRoute({ id: aufnahme.id, }, } - }, - select: { - uid: true, - aufnahme: { - select: { - uid: true, - objekt: { - select: { - uid: true, - }, - }, - }, - }, - }, + } }); - return { - uid: nachweis.uid, - objekt_uid: nachweis.aufnahme.objekt.uid, - aufnahme_uid: nachweis.aufnahme.uid, - }; + return nachweis.id }, }); @@ -101,11 +89,11 @@ export const GET = defineApiRoute({ headers: authorizationHeaders, middleware: authorizationMiddleware, async fetch(input, context, user) { - const { uid } = context.params; + const { id } = context.params; const nachweis = await prisma.bedarfsausweisGewerbe.findUnique({ where: { - uid, + id, }, include: { benutzer: true, @@ -115,7 +103,7 @@ export const GET = defineApiRoute({ include: { benutzer: { select: { - uid: true, + id: true, }, }, }, diff --git a/src/pages/api/bedarfsausweis-wohnen/[id].ts b/src/pages/api/bedarfsausweis-wohnen/[id].ts index 2737389a..cfdc4b5a 100644 --- a/src/pages/api/bedarfsausweis-wohnen/[id].ts +++ b/src/pages/api/bedarfsausweis-wohnen/[id].ts @@ -1,16 +1,25 @@ import { BedarfsausweisWohnenClient, OptionalNullable, UUidWithPrefix, VerbrauchsausweisWohnenClient, ZodOverlap } from "#components/Ausweis/types.js"; +import { VALID_UUID_PREFIXES } from "#lib/constants.js"; +import { generatePrefixedId } from "#lib/db.js"; import { exclude } from "#lib/exclude.js"; import { authorizationHeaders, authorizationMiddleware } from "#lib/middleware/authorization.js"; -import { BedarfsausweisWohnenSchema, prisma, VerbrauchsausweisWohnenSchema } from "#lib/server/prisma"; +import { BedarfsausweisWohnen, prisma } from "#lib/server/prisma.js"; import { APIError, defineApiRoute } from "astro-typesafe-api/server"; +import { BedarfsausweisWohnenSchema } from "src/generated/zod/bedarfsausweiswohnen.js"; import { z } from "zod"; export const PATCH = defineApiRoute({ - input: VerbrauchsausweisWohnenSchema.omit({ - uid: true, + input: BedarfsausweisWohnenSchema.omit({ id: true, benutzer_id: true, aufnahme_id: true, + rechnung_id: true, + ausgestellt: true, + bestellt: true, + zurueckgestellt: true, + created_at: true, + updated_at: true, + storniert: true }), output: z.void(), headers: { @@ -18,9 +27,9 @@ export const PATCH = defineApiRoute({ }, middleware: authorizationMiddleware, async fetch(input, ctx, user) { - const objekt = await prisma.verbrauchsausweisWohnen.findUnique({ + const objekt = await prisma.bedarfsausweisWohnen.findUnique({ where: { - uid: ctx.params.uid, + id: ctx.params.id, benutzer: { id: user.id } @@ -34,9 +43,9 @@ export const PATCH = defineApiRoute({ }) } - await prisma.verbrauchsausweisWohnen.update({ + await prisma.bedarfsausweisWohnen.update({ where: { - uid: ctx.params.uid + id: ctx.params.id }, data: input }) @@ -50,9 +59,9 @@ export const DELETE = defineApiRoute({ headers: authorizationHeaders, middleware: authorizationMiddleware, async fetch(input, ctx, user) { - const { uid } = ctx.params; + const { id } = ctx.params; - if (!UUidWithPrefix.safeParse(uid).success) { + if (!UUidWithPrefix.safeParse(id).success) { throw new APIError({ code: "BAD_REQUEST", message: "UID konnte nicht verifiziert werden." @@ -61,15 +70,11 @@ export const DELETE = defineApiRoute({ // Wir holen uns den Bedarfsausweis // Dieser MUSS mit dem Nutzer verknüpft sein. - const ausweis = await prisma.verbrauchsausweisWohnen.findUnique({ + const ausweis = await prisma.bedarfsausweisWohnen.findUnique({ where: { - uid, - }, - include: { - aufnahme: { - select: { - storniert: true - } + id, + benutzer: { + id: user.id } } }); @@ -100,7 +105,7 @@ export const DELETE = defineApiRoute({ // }); // } - if (ausweis.aufnahme.storniert) { + if (ausweis.storniert) { // Falls der Ausweis bereits storniert ist, werfen wir einen Fehler throw new APIError({ code: "BAD_REQUEST", @@ -108,19 +113,22 @@ export const DELETE = defineApiRoute({ }); } - await prisma.aufnahme.update({ + await prisma.bedarfsausweisWohnen.update({ where: { - id: ausweis.aufnahme_id + id }, data: { storniert: true } }) + const event_id = generatePrefixedId(6, VALID_UUID_PREFIXES.Ticket) + // Wir erstellen ein Event, dass der Ausweis storniert wurde // Dann können wir das in der Historie anzeigen await prisma.event.create({ data: { + id: event_id, title: "Ausweis storniert", description: ((user.rolle === "ADMIN") && (ausweis.benutzer_id !== user.id)) ? "Ausweis wurde von einem Administrator storniert." : "Ausweis wurde vom Besitzer storniert.", benutzer: { @@ -155,10 +163,10 @@ export const GET = defineApiRoute({ } } }, - output: ZodOverlap>(VerbrauchsausweisWohnenSchema.merge(z.object({ - uid_aufnahme: UUidWithPrefix, - uid_objekt: UUidWithPrefix, - uid_benutzer: UUidWithPrefix.optional() + output: ZodOverlap>(BedarfsausweisWohnenSchema.merge(z.object({ + aufnahme_id: UUidWithPrefix, + objekt_id: UUidWithPrefix, + benutzer_id: UUidWithPrefix.optional() })).omit({ id: true, aufnahme_id: true, @@ -166,9 +174,9 @@ export const GET = defineApiRoute({ })), middleware: authorizationMiddleware, async fetch(input, context, user) { - const { uid } = context.params; + const { id } = context.params; - if (!uid) { + if (!id) { throw new APIError({ code: "BAD_REQUEST", message: "Missing uid in request params" @@ -177,21 +185,21 @@ export const GET = defineApiRoute({ const ausweis = await prisma.verbrauchsausweisWohnen.findUnique({ where: { - uid, + id, benutzer_id: user.id }, include: { benutzer: { select: { - uid: true + id: true } }, aufnahme: { select: { - uid: true, + id: true, objekt: { select: { - uid: true + id: true } } } @@ -208,9 +216,9 @@ export const GET = defineApiRoute({ } return { - uid_aufnahme: ausweis.aufnahme.uid, - uid_objekt: ausweis.aufnahme.objekt.uid, - uid_benutzer: ausweis.benutzer?.uid, + aufnahme_id: ausweis.aufnahme.id, + objekt_id: ausweis.aufnahme.objekt.id, + benutzer_id: ausweis.benutzer?.id, ...exclude(ausweis, ["id", "aufnahme_id", "benutzer_id", "aufnahme"]) } }, diff --git a/src/pages/api/bedarfsausweis-wohnen/index.ts b/src/pages/api/bedarfsausweis-wohnen/index.ts index d44b61aa..a45411f4 100644 --- a/src/pages/api/bedarfsausweis-wohnen/index.ts +++ b/src/pages/api/bedarfsausweis-wohnen/index.ts @@ -1,5 +1,10 @@ import { UUidWithPrefix } from "#components/Ausweis/types.js"; -import { authorizationHeaders, authorizationMiddleware } from "#lib/middleware/authorization.js"; +import { VALID_UUID_PREFIXES } from "#lib/constants.js"; +import { generatePrefixedId } from "#lib/db.js"; +import { + authorizationHeaders, + authorizationMiddleware, +} from "#lib/middleware/authorization.js"; import { prisma } from "#lib/server/prisma.js"; import { APIError, defineApiRoute } from "astro-typesafe-api/server"; import { BedarfsausweisWohnenSchema } from "src/generated/zod/bedarfsausweiswohnen.js"; @@ -16,66 +21,58 @@ export const PUT = defineApiRoute({ ausweis: BedarfsausweisWohnenSchema.omit({ id: true, benutzer_id: true, - uid: true, - aufnahme_id: true + aufnahme_id: true, + rechnung_id: true, + ausgestellt: true, + bestellt: true, + zurueckgestellt: true, + created_at: true, + updated_at: true, + storniert: true, }), - uid_aufnahme: UUidWithPrefix - }), - output: z.object({ - uid: UUidWithPrefix, - objekt_uid: UUidWithPrefix, - aufnahme_uid: UUidWithPrefix, + aufnahme_id: UUidWithPrefix, }), + output: UUidWithPrefix, headers: authorizationHeaders, middleware: authorizationMiddleware, async fetch(input, ctx, user) { const aufnahme = await prisma.aufnahme.findUnique({ where: { - uid: input.uid_aufnahme - } - }) + id: input.aufnahme_id, + }, + }); if (!aufnahme || aufnahme.benutzer_id !== user.id) { throw new APIError({ code: "FORBIDDEN", - message: "Aufnahme konnte nicht gefunden werden oder gehört nicht zu diesem Benutzer." - }) + message: + "Aufnahme konnte nicht gefunden werden oder gehört nicht zu diesem Benutzer.", + }); } - const createdAusweis = await prisma.bedarfsausweisWohnen.create({ - data: { - ...input.ausweis, - benutzer: { - connect: { - id: user.id, - }, - }, - aufnahme: { - connect: { - uid: aufnahme.uid, - }, - }, - }, - select: { - uid: true, - aufnahme: { - select: { - uid: true, - objekt: { - select: { - uid: true, - }, - }, - }, - }, - }, - }); + const id = generatePrefixedId( + 6, + VALID_UUID_PREFIXES.BedarfsausweisWohnen + ); - return { - uid: createdAusweis.uid, - objekt_uid: createdAusweis.aufnahme.objekt.uid, - aufnahme_uid: createdAusweis.aufnahme.uid, - }; + await prisma.bedarfsausweisWohnen.create({ + data: { + id, + ...input.ausweis, + benutzer: { + connect: { + id: user.id, + }, + }, + aufnahme: { + connect: { + id: aufnahme.id, + }, + }, + }, + }); + + return id; }, }); @@ -98,27 +95,22 @@ export const GET = defineApiRoute({ }, middleware: authorizationMiddleware, async fetch(input, context, user) { - const { uid } = context.params; + const { id } = context.params; const ausweis = await prisma.bedarfsausweisWohnen.findUnique({ where: { - uid, + id, }, include: { benutzer: true, aufnahme: { include: { - objekt: { - include: { - bilder: true, - }, - }, - rechnungen: true, + bilder: true, events: { include: { benutzer: { select: { - uid: true, + id: true, }, }, }, diff --git a/src/pages/api/geg-nachweis-gewerbe/[id].ts b/src/pages/api/geg-nachweis-gewerbe/[id].ts index bfd8cba1..758b5c69 100644 --- a/src/pages/api/geg-nachweis-gewerbe/[id].ts +++ b/src/pages/api/geg-nachweis-gewerbe/[id].ts @@ -1,17 +1,25 @@ import { GEGNachweisWohnenClient, OptionalNullable, UUidWithPrefix, ZodOverlap } from "#components/Ausweis/types.js"; +import { VALID_UUID_PREFIXES } from "#lib/constants.js"; +import { generatePrefixedId } from "#lib/db.js"; import { exclude } from "#lib/exclude.js"; import { authorizationHeaders, authorizationMiddleware } from "#lib/middleware/authorization.js"; -import { GEGNachweisGewerbeSchema, GEGNachweisWohnenSchema, prisma } from "#lib/server/prisma"; +import { prisma } from "#lib/server/prisma.js"; import { APIError, defineApiRoute } from "astro-typesafe-api/server"; +import { GEGNachweisGewerbeSchema } from "src/generated/zod/gegnachweisgewerbe.js"; import { z } from "zod"; export const PATCH = defineApiRoute({ input: GEGNachweisGewerbeSchema.omit({ - uid: true, id: true, benutzer_id: true, + geg_einpreisung_id: true, aufnahme_id: true, - geg_einpreisung_id: true + bestellt: true, + created_at: true, + rechnung_id: true, + storniert: true, + updated_at: true, + zurueckgestellt: true }), output: z.void(), headers: { @@ -21,7 +29,7 @@ export const PATCH = defineApiRoute({ async fetch(input, ctx, user) { const objekt = await prisma.gEGNachweisGewerbe.findUnique({ where: { - uid: ctx.params.uid, + id: ctx.params.id, benutzer: { id: user.id } @@ -37,7 +45,7 @@ export const PATCH = defineApiRoute({ await prisma.gEGNachweisGewerbe.update({ where: { - uid: ctx.params.uid + id: ctx.params.id }, data: input }) @@ -51,9 +59,9 @@ export const DELETE = defineApiRoute({ headers: authorizationHeaders, middleware: authorizationMiddleware, async fetch(input, ctx, user) { - const { uid } = ctx.params; + const { id } = ctx.params; - if (!UUidWithPrefix.safeParse(uid).success) { + if (!UUidWithPrefix.safeParse(id).success) { throw new APIError({ code: "BAD_REQUEST", message: "UID konnte nicht verifiziert werden." @@ -64,7 +72,7 @@ export const DELETE = defineApiRoute({ // Dieser MUSS mit dem Nutzer verknüpft sein. const nachweis = await prisma.gEGNachweisGewerbe.findUnique({ where: { - uid, + id, } }); @@ -111,10 +119,13 @@ export const DELETE = defineApiRoute({ } }) + + const event_id = generatePrefixedId(6, VALID_UUID_PREFIXES.Ticket) // Wir erstellen ein Event, dass der Nachweis storniert wurde // Dann können wir das in der Historie anzeigen await prisma.event.create({ data: { + id: event_id, title: "Nachweis storniert", description: ((user.rolle === "ADMIN") && (nachweis.benutzer_id !== user.id)) ? "Nachweis wurde von einem Administrator storniert." : "Nachweis wurde vom Besitzer storniert.", benutzer: { @@ -150,9 +161,9 @@ export const GET = defineApiRoute({ } }, output: GEGNachweisGewerbeSchema.merge(z.object({ - uid_aufnahme: UUidWithPrefix, - uid_objekt: UUidWithPrefix, - uid_benutzer: UUidWithPrefix.optional() + aufnahme_id: UUidWithPrefix, + objekt_id: UUidWithPrefix, + benutzer_id: UUidWithPrefix.optional() })).omit({ id: true, aufnahme_id: true, @@ -160,9 +171,9 @@ export const GET = defineApiRoute({ }), middleware: authorizationMiddleware, async fetch(input, context, user) { - const { uid } = context.params; + const { id } = context.params; - if (!uid) { + if (!id) { throw new APIError({ code: "BAD_REQUEST", message: "Missing uid in request params" @@ -171,21 +182,21 @@ export const GET = defineApiRoute({ const nachweis = await prisma.gEGNachweisGewerbe.findUnique({ where: { - uid, + id, benutzer_id: user.id }, include: { benutzer: { select: { - uid: true + id: true } }, aufnahme: { select: { - uid: true, + id: true, objekt: { select: { - uid: true + id: true } } } @@ -202,9 +213,9 @@ export const GET = defineApiRoute({ } return { - uid_aufnahme: nachweis.aufnahme.uid, - uid_objekt: nachweis.aufnahme.objekt.uid, - uid_benutzer: nachweis.benutzer?.uid, + aufnahme_id: nachweis.aufnahme.id, + objekt_id: nachweis.aufnahme.objekt.id, + benutzer_id: nachweis.benutzer?.id, ...exclude(nachweis, ["id", "aufnahme_id", "benutzer_id", "aufnahme"]) } }, diff --git a/src/pages/api/geg-nachweis-gewerbe/index.ts b/src/pages/api/geg-nachweis-gewerbe/index.ts index f0e441d1..5984bbc8 100644 --- a/src/pages/api/geg-nachweis-gewerbe/index.ts +++ b/src/pages/api/geg-nachweis-gewerbe/index.ts @@ -18,11 +18,14 @@ export const PUT = defineApiRoute({ nachweis: GEGNachweisGewerbeSchema.omit({ id: true, benutzer_id: true, - aufnahme_id: true, - created_at: true, - updated_at: true, geg_einpreisung_id: true, - rechnung_id: true + aufnahme_id: true, + bestellt: true, + created_at: true, + rechnung_id: true, + storniert: true, + updated_at: true, + zurueckgestellt: true }), aufnahme_id: UUidWithPrefix }), diff --git a/src/pages/api/geg-nachweis-wohnen/[id].ts b/src/pages/api/geg-nachweis-wohnen/[id].ts index 05b95b6b..7291e0de 100644 --- a/src/pages/api/geg-nachweis-wohnen/[id].ts +++ b/src/pages/api/geg-nachweis-wohnen/[id].ts @@ -14,6 +14,12 @@ export const PATCH = defineApiRoute({ benutzer_id: true, geg_einpreisung_id: true, aufnahme_id: true, + bestellt: true, + created_at: true, + rechnung_id: true, + storniert: true, + updated_at: true, + zurueckgestellt: true }), output: z.void(), headers: { diff --git a/src/pages/api/geg-nachweis-wohnen/index.ts b/src/pages/api/geg-nachweis-wohnen/index.ts index f164233a..d7594d2b 100644 --- a/src/pages/api/geg-nachweis-wohnen/index.ts +++ b/src/pages/api/geg-nachweis-wohnen/index.ts @@ -18,11 +18,14 @@ export const PUT = defineApiRoute({ nachweis: GEGNachweisWohnenSchema.omit({ id: true, benutzer_id: true, - aufnahme_id: true, - updated_at: true, - created_at: true, geg_einpreisung_id: true, - rechnung_id: true + aufnahme_id: true, + bestellt: true, + created_at: true, + rechnung_id: true, + storniert: true, + updated_at: true, + zurueckgestellt: true }), aufnahme_id: UUidWithPrefix }),