Database imports gefixt + Ausweis speichern verbessert

This commit is contained in:
Moritz Utcke
2024-01-13 12:56:54 +07:00
parent 218fea5d62
commit 54b26bdf42
46 changed files with 211 additions and 195 deletions

View File

@@ -7,10 +7,19 @@ services:
environment:
PORT: 3000
NODE_ENV: "development"
network_mode: host
ports:
- "3000:3000"
volumes:
- ./:/online-energieausweis
- ./node_modules/@ibcornelsen/ui:/online-energieausweis/node_modules/@ibcornelsen/ui
- ./node_modules/@ibcornelsen/database:/online-energieausweis/node_modules/@ibcornelsen/database
- ./node_modules/@ibcornelsen/api:/online-energieausweis/node_modules/@ibcornelsen/api
- ./persistent:/persistent
- ./persistent:/persistent
ibcornelsen-api:
extends:
file: ../api/docker-compose.yml
service: ibcornelsen-api
ibcornelsen-database:
extends:
file: ../database/docker-compose.yml
service: ibcornelsen-database

View File

@@ -27,7 +27,6 @@
"@mollie/api-client": "^3.7.0",
"@trpc/client": "^10.45.0",
"@trpc/server": "^10.45.0",
"@types/body-scroll-lock": "^3.1.2",
"astro": "^2.5.1",
"astro-i18next": "1.0.0-beta.21",
"astro-spa": "^1.3.9",
@@ -59,6 +58,7 @@
"zod": "^3.22.4"
},
"devDependencies": {
"@types/body-scroll-lock": "^3.1.2",
"@types/js-cookie": "^3.0.6",
"@types/uuid": "^9.0.1",
"@typescript-eslint/eslint-plugin": "^5.59.6",

View File

@@ -1,5 +1,5 @@
<script lang="ts">
import { BedarfsausweisWohnen, GebaeudeStammdaten, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "@ibcornelsen/database";
import type { BedarfsausweisWohnen, GebaeudeStammdaten, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "@ibcornelsen/database/client";
import { Buffer } from "buffer";
export let ausweis: VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | BedarfsausweisWohnen;

View File

@@ -7,7 +7,7 @@
export let gebaeude: GebaeudeStammdaten;
import ImageGrid from "../ImageGrid.svelte";
import { BedarfsausweisWohnen, GebaeudeStammdaten, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "@ibcornelsen/database";
import type { BedarfsausweisWohnen, GebaeudeStammdaten, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "@ibcornelsen/database/client";
let images: (File & { data: string })[] = [];
</script>

View File

@@ -4,13 +4,13 @@
import { addNotification, deleteNotification } from "@ibcornelsen/ui";
import TagInput from "../TagInput.svelte";
import { writable } from "svelte/store";
import {
import type {
BedarfsausweisWohnen,
Enums,
GebaeudeStammdaten,
VerbrauchsausweisGewerbe,
VerbrauchsausweisWohnen,
} from "@ibcornelsen/database";
} from "@ibcornelsen/database/client";
import { Enums } from "@ibcornelsen/database/client"
export let gebaeude: GebaeudeStammdaten;
export let ausweis: VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | BedarfsausweisWohnen;

View File

@@ -5,7 +5,7 @@
import DaemmungImage from "./DaemmungImage.svelte";
import FensterImage from "./FensterImage.svelte";
import Label from "../Label.svelte";
import { BedarfsausweisWohnen, GebaeudeStammdaten, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "@ibcornelsen/database";
import type { BedarfsausweisWohnen, GebaeudeStammdaten, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "@ibcornelsen/database/client";
export let gebaeude: GebaeudeStammdaten;
export let ausweis: VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | BedarfsausweisWohnen;

View File

@@ -1,6 +1,6 @@
<script lang="ts">
import ImageGrid from "../ImageGrid.svelte";;
import { BedarfsausweisWohnen, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "@ibcornelsen/database";
import type { BedarfsausweisWohnen, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "@ibcornelsen/database/client";
let images: (File & { data: string })[] = [];
export let ausweis: VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | BedarfsausweisWohnen;

View File

@@ -1,6 +1,6 @@
<script lang="ts">
import ImageGrid from "../ImageGrid.svelte";;
import { BedarfsausweisWohnen, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "@ibcornelsen/database";
import type { BedarfsausweisWohnen, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "@ibcornelsen/database/client";
let images: (File & { data: string })[] = [];
export let ausweis: VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | BedarfsausweisWohnen;

View File

@@ -1,6 +1,6 @@
<script lang="ts">
import ImageGrid from "../ImageGrid.svelte";;
import { BedarfsausweisWohnen, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "@ibcornelsen/database";
import type { BedarfsausweisWohnen, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "@ibcornelsen/database/client";
let images: (File & { data: string })[] = [];
export let ausweis: VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | BedarfsausweisWohnen;

View File

@@ -1,6 +1,6 @@
<script lang="ts">
import { endEnergieVerbrauchVerbrauchsausweis_2016 } from "#lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016";
import { BedarfsausweisWohnen, GebaeudeStammdaten, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "@ibcornelsen/database";
import type { BedarfsausweisWohnen, GebaeudeStammdaten, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "@ibcornelsen/database/client";
export let ausweis: VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | BedarfsausweisWohnen;
export let gebaeude: GebaeudeStammdaten;

View File

@@ -4,7 +4,7 @@
import Label from "../Label.svelte";
import fuelList from "./fuelList";
import { auditVerbrauchAbweichung } from "../Verbrauchsausweis/audits/VerbrauchAbweichung";
import { GebaeudeStammdaten, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "@ibcornelsen/database";
import type { GebaeudeStammdaten, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "@ibcornelsen/database/client";
let availableYears = [
2018, 2019,

View File

@@ -10,7 +10,7 @@
import BilderZusatzsysteme from "../Ausweis/BilderZusatzsysteme.svelte";
import moment from "moment";
import { BitChecker } from "src/lib/BitChecker";
import { BedarfsausweisWohnen } from "@ibcornelsen/database";
import type { BedarfsausweisWohnen } from "@ibcornelsen/database/client";
let ausweis: BedarfsausweisWohnen = {} as BedarfsausweisWohnen;

View File

@@ -1,5 +1,5 @@
<script lang="ts">
import { BedarfsausweisWohnen, GebaeudeStammdaten, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "@ibcornelsen/database";
import type { BedarfsausweisWohnen, GebaeudeStammdaten, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "@ibcornelsen/database/client";
import { Buffer } from "buffer";
export let ausweis: VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | BedarfsausweisWohnen;

View File

@@ -1,6 +1,6 @@
<script lang="ts">
import UploadImages from "./UploadImages.svelte";
import { BedarfsausweisWohnen, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "@ibcornelsen/database";
import type { BedarfsausweisWohnen, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "@ibcornelsen/database/client";
export let images: (File & { data: string })[] = [];
export let max: number = 4;

View File

@@ -1,6 +1,6 @@
<script lang="ts">
import { PRICES } from "#lib/constants";
import { BedarfsausweisWohnen, Enums, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "@ibcornelsen/database";
import type { BedarfsausweisWohnen, Enums, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "@ibcornelsen/database/client";
export let ausweis: VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | BedarfsausweisWohnen;

View File

@@ -1,5 +1,6 @@
<script lang="ts">
export let hidden: boolean = true;
export let closeable: boolean = true;
import { disableBodyScroll, enableBodyScroll } from 'body-scroll-lock';
$: if (globalThis.window) {
@@ -11,6 +12,13 @@
}
</script>
<div class="fixed top-0 left-0 w-[100vw] h-[100vh] flex items-center justify-center bg-[rgba(0,0,0,0.8)] z-50" class:hidden={hidden}>
<div class="fixed top-0 left-0 w-[100vw] h-[100vh] flex items-center justify-center bg-[rgba(0,0,0,0.8)] z-50" class:hidden={hidden} on:click|self={() => {
hidden = closeable ? true : hidden;
}}>
{#if closeable}
<button class="absolute top-4 left-4 text-white" on:click={() => {
hidden = true;
}}>Schließen</button>
{/if}
<slot></slot>
</div>

View File

@@ -1,5 +1,5 @@
<script lang="ts">
import { Bezahlmethoden } from "@ibcornelsen/database";
import type { Bezahlmethoden } from "@ibcornelsen/database/client";
export let name: string;
export let icon: string;

View File

@@ -1,5 +1,5 @@
<script lang="ts">
import { BedarfsausweisWohnen, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "@ibcornelsen/database";
import type { BedarfsausweisWohnen, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "@ibcornelsen/database/client";
export let max: number = 2;

View File

@@ -1,4 +1,4 @@
import { GebaeudeStammdaten, VerbrauchsausweisWohnen } from "@ibcornelsen/database";
import type { GebaeudeStammdaten, VerbrauchsausweisWohnen } from "@ibcornelsen/database/client";
export function auditBedarfsausweisBenoetigt(ausweis: VerbrauchsausweisWohnen, gebaeude: GebaeudeStammdaten): boolean {

View File

@@ -1,5 +1,5 @@
import { AuditType, hidden } from "../audits/hidden";
import { GebaeudeStammdaten } from "@ibcornelsen/database";
import type { GebaeudeStammdaten } from "@ibcornelsen/database/client";
export function auditHeizungGebaeudeBaujahr(gebaeude: GebaeudeStammdaten): boolean {
if ((gebaeude.baujahr_heizung && gebaeude.baujahr_heizung.length > 0) && (gebaeude.baujahr_gebaeude && gebaeude.baujahr_gebaeude.length > 0)) {

View File

@@ -1,6 +1,5 @@
import { Gebaeude } from "src/lib/Gebaeude";
import { AuditType, hidden } from "./hidden";
import { GebaeudeStammdaten, VerbrauchsausweisWohnen } from "@ibcornelsen/database";
import type { GebaeudeStammdaten, VerbrauchsausweisWohnen } from "@ibcornelsen/database/client";
export function auditVerbrauchAbweichung(ausweis: VerbrauchsausweisWohnen, gebaeude: GebaeudeStammdaten): number[] {
if (gebaeude.leerstand && (gebaeude.leerstand > 0)) {

View File

@@ -1,4 +1,4 @@
import { prisma } from "@ibcornelsen/database";
import { prisma } from "@ibcornelsen/database/server";
import moment from "moment";
import csv from "csvtojson"

View File

@@ -1,8 +1,8 @@
import { getHeizwertfaktor } from "#lib/server/Heizwertfaktor";
import {
import type {
GebaeudeStammdaten,
VerbrauchsausweisWohnen,
} from "@ibcornelsen/database";
} from "@ibcornelsen/database/client";
import moment from "moment";
import { client } from "src/trpc";

View File

@@ -1,6 +1,6 @@
import { getKlimafaktoren } from "#lib/Klimafaktoren";
import { getHeizwertfaktor } from "#lib/server/Heizwertfaktor";
import { GebaeudeStammdaten, VerbrauchsausweisWohnen } from "@ibcornelsen/database";
import type { GebaeudeStammdaten, VerbrauchsausweisWohnen } from "@ibcornelsen/database/client";
export function energetischeNutzflaecheVerbrauchsausweisWohnen_2023(ausweis: VerbrauchsausweisWohnen & { gebaeude_stammdaten: GebaeudeStammdaten }): number {
return (

View File

@@ -1,4 +1,4 @@
import { BedarfsausweisWohnen, GebaeudeStammdaten, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "@ibcornelsen/database";
import type { GebaeudeStammdaten, VerbrauchsausweisWohnen } from "@ibcornelsen/database/client";
import { endEnergieVerbrauchVerbrauchsausweis_2016 } from "./VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016";
export async function endEnergieVerbrauch(ausweis: VerbrauchsausweisWohnen & { gebaeude_stammdaten: GebaeudeStammdaten }): Promise<number> {

View File

@@ -1,8 +1,5 @@
import { prisma } from "@ibcornelsen/database";
import { UserRegisterValidator, UserType, UserTypeValidator } from "./type";
import { v4 as uuid } from "uuid";
import { hashPassword } from "../Password";
import type { Benutzer } from "@ibcornelsen/database";
import { prisma } from "@ibcornelsen/database/server";
import type { Benutzer } from "@ibcornelsen/database/client";
export class User {

View File

@@ -1,4 +1,5 @@
import { GebaeudeStammdaten, VerbrauchsausweisWohnen, prisma } from "@ibcornelsen/database";
import { GebaeudeStammdaten, VerbrauchsausweisWohnen } from "@ibcornelsen/database/client";
import { prisma } from "@ibcornelsen/database/server";
import { getEmpfehlungen } from "./getEmpfehlungen";
export class AusweisBerechnungen2016 {

View File

@@ -7,8 +7,8 @@ import { getHeizwertfaktor } from "#lib/server/Heizwertfaktor";
import {
GebaeudeStammdaten,
VerbrauchsausweisWohnen,
prisma,
} from "@ibcornelsen/database";
} from "@ibcornelsen/database/client";
import { prisma } from "@ibcornelsen/database/server";
import { AusweisBerechnungen2016 } from "../AusweisBerechnungen2016";
import moment from "moment";

View File

@@ -1,4 +1,4 @@
import { GebaeudeStammdaten, VerbrauchsausweisWohnen } from "@ibcornelsen/database";
import type { GebaeudeStammdaten, VerbrauchsausweisWohnen } from "@ibcornelsen/database/client";
import moment from "moment";
export function getEmpfehlungen(ausweis: VerbrauchsausweisWohnen, gebaeude: GebaeudeStammdaten): {

View File

@@ -1,6 +1,7 @@
import { Enums } from "@ibcornelsen/database";
import { Enums } from "@ibcornelsen/database/client";
export const API_ACCESS_TOKEN_COOKIE_NAME = "accessToken";
export const API_REFRESH_TOKEN_COOKIE_NAME = "refreshToken";
/**
* Ein Objekt welches alle definierten Preise für unsere Basisprodukte enthält.

8
src/lib/exclude.ts Normal file
View File

@@ -0,0 +1,8 @@
export function exclude<T extends Object, Key extends keyof T>(
object: T,
keys: Key[]
): Omit<T, Key> {
return Object.fromEntries(
Object.entries(object).filter(([key]) => !keys.includes(key as Key))
) as Omit<T, Key>
}

View File

@@ -2,6 +2,7 @@ import { AppRouter } from "@ibcornelsen/api";
import { inferProcedureOutput } from "@trpc/server";
import Cookies from "js-cookie";
import { client } from "src/trpc"
import { API_ACCESS_TOKEN_COOKIE_NAME, API_REFRESH_TOKEN_COOKIE_NAME } from "./constants";
export async function loginClient(email: string, passwort: string): Promise<inferProcedureOutput<AppRouter["v1"]["benutzer"]["getRefreshToken"]> | null> {
try {
@@ -15,8 +16,8 @@ export async function loginClient(email: string, passwort: string): Promise<infe
path: "/",
expires: response.exp
}
Cookies.set("accessToken", response.accessToken, options);
Cookies.set("refreshToken", response.refreshToken, options);
Cookies.set(API_ACCESS_TOKEN_COOKIE_NAME, response.accessToken, options);
Cookies.set(API_REFRESH_TOKEN_COOKIE_NAME, response.refreshToken, options);
Cookies.set("uid", response.uid, options);
return response;

View File

@@ -0,0 +1,42 @@
import Cookies from "js-cookie";
import { API_ACCESS_TOKEN_COOKIE_NAME, API_REFRESH_TOKEN_COOKIE_NAME } from "./constants";
import { client } from "src/trpc";
export async function validateAccessToken() {
const accessToken = Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME);
const refreshToken = Cookies.get(API_REFRESH_TOKEN_COOKIE_NAME);
if (accessToken) {
return true;
}
// Wir haben keinen Access Token mehr, vielleicht ist dieser ausgelaufen.
// Schauen wir mal, ob wir einen Refresh Token haben.
if (!refreshToken) {
// Wir haben keinen Refresh Token, also müssen wir uns neu anmelden.
return false;
}
// Wir haben einen Refresh Token, also versuchen wir uns damit anzumelden.
// Wenn das klappt, dann haben wir auch einen neuen Access Token.
// Wenn das nicht klappt, dann müssen wir uns neu anmelden.
try {
const { accessToken: newAccessToken, exp } = await client.v1.benutzer.getAccessToken.query({
refreshToken
})
const options = {
domain: `.${window.location.hostname}`,
path: "/",
expires: exp
}
Cookies.set(API_ACCESS_TOKEN_COOKIE_NAME, newAccessToken, options);
return true;
} catch (e) {
Cookies.remove(API_ACCESS_TOKEN_COOKIE_NAME);
Cookies.remove(API_REFRESH_TOKEN_COOKIE_NAME);
return false;
}
}

View File

@@ -0,0 +1,15 @@
<script lang="ts">
export let uid: string | null;
$: url = `https://ibcornelsen.de/verbrauchsausweis?uid=${uid}`;
</script>
{#if uid === null}
<h1>Ausweis nicht gespeichert.</h1>
<p>Ihr Ausweis wurde noch nicht gespeichert.</p>
{:else}
<h1>Ausweis gespeichert.</h1>
<p>Der Ausweis wurde erfolgreich gespeichert. Sie können den Ausweis nun weiter bearbeiten oder diese Seite schließen und über ihr Profil sowie folgenden Link wieder aufrufen.</p>
<code>{url}</code>
{/if}

View File

@@ -14,49 +14,43 @@
import { AuditType, hidden } from "#components/Verbrauchsausweis/audits/hidden";
import { auditBedarfsausweisBenoetigt } from "#components/Verbrauchsausweis/audits/BedarfsausweisBenoetigt";
import { auditVerbrauchAbweichung } from "#components/Verbrauchsausweis/audits/VerbrauchAbweichung";
import { Enums, GebaeudeStammdaten, VerbrauchsausweisWohnen } from "@ibcornelsen/database";
import type { GebaeudeStammdaten, VerbrauchsausweisWohnen } from "@ibcornelsen/database/client";
import { Enums } from "@ibcornelsen/database/client"
import { client } from "src/trpc";
import Cookies from "js-cookie";
import { API_ACCESS_TOKEN_COOKIE_NAME } from "#lib/constants";
import Overlay from "#components/Overlay.svelte";
import EmbeddedAuthFlowModule from "#modules/EmbeddedAuthFlowModule.svelte";
import AusweisGespeichertModule from "./AusweisGespeichertModule.svelte";
import { validateAccessToken } from "#lib/validateAccessToken";
export let uid: string | null = null;
export let gebaeude: GebaeudeStammdaten = {} as GebaeudeStammdaten;
export let ausweis: VerbrauchsausweisWohnen = {
ausweisart: Enums.Ausweisart.VerbrauchsausweisWohnen
} as VerbrauchsausweisWohnen;
export let showLoginPage: boolean = false;
async function spaeterWeitermachen() {
// Um einen Ausweis zu speichern müssen wir eingeloggt sein, andernfalls wird die API den call ablehnen.
// Wir prüfen also ob wir eingeloggt sind und leiten den Nutzer ggf. auf die Login Seite weiter.
if (!Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)) {
if (!await validateAccessToken()) {
loginOverlayHidden = false;
showLoginPage = true;
const getEvent = (event: MessageEvent) => {
if (event.data == "AUTHORIZED") {
spaeterWeitermachen();
window.removeEventListener("message", getEvent)
loginOverlayHidden = true;
}
}
window.addEventListener("message", getEvent)
return
}
loginOverlayHidden = true;
if (uid) {
// Anscheinend wurde der Ausweis bereits erstellt und hat eine UID.
// Jetzt müssen wir ihn nun nur noch abspeichern.
try {
await client.v1.verbrauchsausweisWohnen[2016].speichern.mutate({
...ausweis,
gebaeude_stammdaten: gebaeude,
ausweis,
gebaeude,
uid
})
window.location.href = `/ausweis-gespeichert?uid=${uid}`;
speichernOverlayHidden = false;
window.history.pushState({}, "", `/verbrauchsausweis?uid=${uid}`);
} catch (e) {
addNotification({
dismissable: false,
@@ -69,11 +63,13 @@
} else {
// Wir speichern den Ausweis ab und leiten auf die "ausweis-gespeichert" Seite weiter.
try {
const { uid } = await client.v1.verbrauchsausweisWohnen[2016].erstellen.mutate({
...ausweis,
gebaeude_stammdaten: gebaeude
const response = await client.v1.verbrauchsausweisWohnen[2016].erstellen.mutate({
ausweis,
gebaeude
})
window.location.href = `/ausweis-gespeichert?uid=${uid}`;
uid = response.uid
window.history.pushState({}, "", `/verbrauchsausweis?uid=${uid}`);
speichernOverlayHidden = false;
} catch (e) {
addNotification({
dismissable: false,
@@ -86,21 +82,7 @@
}
}
if (uid) {
// NOTE: Funktioniert nicht mehr
async () => {
const result = await fetch(`/api/verbrauchsausweis?uid=${uid}`, {
method: "GET",
});
const json = await result.json();
if (json.success) {
gebaeude = json.data.gebaeude
ausweis = json.data.ausweis
}
};
}
console.log(gebaeude, ausweis)
function automatischAusfüllen() {
gebaeude.baujahr_gebaeude = [1962];
@@ -139,13 +121,22 @@
let waitOverlayHidden = true;
let loginOverlayHidden = true;
let speichernOverlayHidden = true;
</script>
<Overlay hidden={loginOverlayHidden}>
<iframe src="/auth/embedded-login" frameborder="0" width="600" height="400"></iframe>
<Overlay bind:hidden={loginOverlayHidden}>
<div class="bg-white w-full max-w-screen-sm py-8">
<EmbeddedAuthFlowModule onLogin={spaeterWeitermachen}></EmbeddedAuthFlowModule>
</div>
</Overlay>
<Overlay hidden={waitOverlayHidden}>
<Overlay bind:hidden={speichernOverlayHidden}>
<div class="bg-white w-full max-w-screen-sm py-8 px-8">
<AusweisGespeichertModule {uid}></AusweisGespeichertModule>
</div>
</Overlay>
<Overlay bind:hidden={waitOverlayHidden}>
<p class="text-white font-semibold text-4xl">Bitte warten sie, ihr Ausweis wird nun erstellt.</p>
</Overlay>

View File

@@ -0,0 +1,26 @@
<script lang="ts">
import EmbeddedLoginModule from "./EmbeddedLoginModule.svelte"
import EmbeddedRegisterModule from "./EmbeddedRegisterModule.svelte"
export let onLogin: () => void
let route: "login" | "signup" = "login"
const navigate = (target: typeof route) => {
route = target
}
const loginData = {
email: "",
passwort: "",
}
</script>
{#if route == "login"}
<EmbeddedLoginModule onLogin={onLogin} data={loginData} {navigate} />
{:else}
<EmbeddedRegisterModule onRegister={(response) => {
loginData.email = response.email
navigate("login")
}} {navigate} />
{/if}

View File

@@ -2,13 +2,13 @@
import { addNotification } from "@ibcornelsen/ui";
import { loginClient } from "#lib/login";
let email: string;
let passwort: string;
export let navigate: (target: string) => void;
export let data: { email: string; passwort: string };
export let onLogin: (response: Awaited<ReturnType<typeof loginClient>>) => void;
async function login() {
const response = await loginClient(email, passwort)
const response = await loginClient(data.email, data.passwort)
if (response === null) {
addNotification({
@@ -19,7 +19,6 @@
dismissable: true
})
} else {
parent.postMessage("AUTHORIZED", "*");
onLogin(response);
}
}
@@ -35,7 +34,7 @@
type="text"
placeholder="Email"
name="email"
bind:value={email}
bind:value={data.email}
required
/>
</div>
@@ -46,13 +45,13 @@
type="password"
placeholder="********"
name="password"
bind:value={passwort}
bind:value={data.passwort}
required
/>
</div>
<button class="button" on:click={login}>Einloggen</button>
<div class="flex-row justify-between" style="margin-top: 10px">
<a href="/auth/embedded-signup">Registrieren</a>
<button on:click={() => navigate("signup")}>Registrieren</button>
<a href="/user/passwort_vergessen">Passwort Vergessen?</a>
</div>
</div>

View File

@@ -2,6 +2,8 @@
import { addNotification } from "@ibcornelsen/ui";
import { client } from "src/trpc";
export let navigate: (target: string) => void;
export let onRegister: (response: { email: string, name: string, vorname: string }) => void;
let passwort: string;
let email: string;
let vorname: string;
@@ -16,12 +18,16 @@
name,
});
window.location.href = "/auth/embedded-login";
onRegister({
email,
name,
vorname
})
} catch (e) {
addNotification({
message: "Ups...",
subtext:
"Da ist wohl etwas schiefgelaufen... Diese Email Adresse ist bereits in Benutzung, haben sie vielleicht bereits ein Konto bei uns?",
"Da ist wohl etwas schiefgelaufen. Diese Email Adresse ist bereits in Benutzung, haben sie vielleicht bereits ein Konto bei uns?",
type: "error",
timeout: 0,
dismissable: true,
@@ -31,7 +37,7 @@
</script>
<div style="width:50%;margin: 0 auto">
<h1>Registrieren:</h1>
<h1>Registrieren</h1>
<div class="flex flex-col gap-4">
<div class="flex flex-row gap-4 w-full">
<div class="w-1/2">
@@ -77,7 +83,7 @@
</div>
<button class="button" on:click={login}>Registrieren</button>
<div class="flex-row justify-between" style="margin-top: 10px">
<a href="/auth/embedded-login">Einloggen</a>
<button on:click={() => navigate("login")}>Einloggen</button>
<a href="/user/passwort_vergessen">Passwort Vergessen?</a>
</div>
</div>

View File

@@ -4,7 +4,8 @@
import ZipSearch from "../components/ZIPSearch.svelte";
import Label from "../components/Label.svelte";
import PriceContainer from "#components/Kaufabschluss/PriceContainer.svelte";
import { BedarfsausweisWohnen, Benutzer, Bezahlmethoden, Enums, Rechnungen, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "@ibcornelsen/database";
import type { BedarfsausweisWohnen, Benutzer, Bezahlmethoden, Rechnungen, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "@ibcornelsen/database/client";
import { Enums } from "@ibcornelsen/database/client"
import PaymentOption from "#components/PaymentOption.svelte";
import { client } from "src/trpc";

View File

@@ -10,7 +10,7 @@
import { buildingTypes } from "./BuildingTypes";
import BilderZusatzsysteme from "../../components/Ausweis/BilderZusatzsysteme.svelte";
import moment from "moment";
import { Enums, GebaeudeStammdaten, VerbrauchsausweisGewerbe } from "@ibcornelsen/database";
import { GebaeudeStammdaten, VerbrauchsausweisGewerbe, Enums } from "@ibcornelsen/database/client";
export let uid: string | null = null;
export let gebaeude: GebaeudeStammdaten = {} as GebaeudeStammdaten;

View File

@@ -1,64 +0,0 @@
<script lang="ts">
import { GebaeudeStammdaten, VerbrauchsausweisWohnen } from "@ibcornelsen/database";
import VerbrauchsausweisWohnenModule from "./Ausweise/VerbrauchsausweisWohnenModule.svelte";
import EmbeddedLoginModule from "./EmbeddedLoginModule.svelte";
import { client } from "src/trpc";
import { addNotification } from "@ibcornelsen/ui";
export let uid: string | null = null;
export let gebaeude: GebaeudeStammdaten = {} as GebaeudeStammdaten;
export let ausweis: VerbrauchsausweisWohnen = {} as VerbrauchsausweisWohnen;
let showLoginPage = false;
</script>
{#if !showLoginPage}
<VerbrauchsausweisWohnenModule {uid} {gebaeude} {ausweis} bind:showLoginPage></VerbrauchsausweisWohnenModule>
{/if}
{#if showLoginPage}
<EmbeddedLoginModule onLogin={async (response) => {
if (uid) {
// Anscheinend wurde der Ausweis bereits erstellt und hat eine UID.
// Jetzt müssen wir ihn nun nur noch abspeichern.
try {
await client.v1.verbrauchsausweisWohnen[2016].speichern.mutate({
...ausweis,
gebaeude_stammdaten: gebaeude,
uid
})
window.location.href = `/ausweis-gespeichert?uid=${uid}`;
} catch (e) {
showLoginPage = false;
addNotification({
dismissable: false,
message: "Ausweis konnte nicht gespeichert werden, bitte versuchen sie es erneut.",
subtext: "Sollte das Problem weiterhin bestehen, kontaktieren sie bitte den Support.",
timeout: 6000,
type: "error"
})
}
} else {
// Wir speichern den Ausweis ab und leiten auf die "ausweis-gespeichert" Seite weiter.
try {
const { uid } = await client.v1.verbrauchsausweisWohnen[2016].erstellen.mutate({
...ausweis,
gebaeude_stammdaten: gebaeude
})
window.location.href = `/ausweis-gespeichert?uid=${uid}`;
} catch (e) {
showLoginPage = false;
addNotification({
dismissable: false,
message: "Ausweis konnte nicht gespeichert werden, bitte versuchen sie es erneut.",
subtext: "Sollte das Problem weiterhin bestehen, kontaktieren sie bitte den Support.",
timeout: 6000,
type: "error"
})
}
}
}}></EmbeddedLoginModule>
{/if}

View File

@@ -1,29 +0,0 @@
---
import AusweisLayout from "#layouts/AusweisLayout.astro";
import { prisma } from "@ibcornelsen/database";
const uid = Astro.url.searchParams.get("uid");
if (!uid) {
return Astro.redirect("/404");
}
const ausweis = await prisma.verbrauchsausweisWohnen.findUnique({
where: {
uid,
},
});
if (!ausweis) {
return Astro.redirect("/404");
}
const url = `https://ibcornelsen.de/verbrauchsausweis?uid=${uid}`
---
<AusweisLayout title="Ausweis Gespeichert">
<h1>Ausweis Gespeichert</h1>
<p>
Der Ausweis wurde erfolgreich gespeichert. Sie können ihn nun unter <a href={url}>{url}</a> fortsetzen.
</p>
</AusweisLayout>

View File

@@ -2,7 +2,8 @@
import KundendatenModule from "#modules/KundendatenModule.svelte";
import AusweisLayout from "#layouts/AusweisLayout.astro";
import { Benutzer, Enums, prisma } from "@ibcornelsen/database";
import { Benutzer, Enums } from "@ibcornelsen/database/client";
import { prisma } from "@ibcornelsen/database/server";
// Man sollte nur auf diese Seite kommen, wenn ein Ausweis bereits vorliegt und in der Datenbank abgespeichert wurde.
const uidAusweis = Astro.url.searchParams.get("uid");

View File

@@ -5,7 +5,7 @@ import Checkbox from "#components/Checkbox.svelte";
import PDFHeader from "#components/PDF/PDFHeader.svelte";
import PDFSectionHeader from "#components/PDF/PDFSectionHeader.svelte";
import PDFLayout from "#layouts/PDFLayout.astro";
import { VerbrauchsausweisWohnen, GebaeudeStammdaten, prisma } from "@ibcornelsen/database";
import { VerbrauchsausweisWohnen, GebaeudeStammdaten, prisma } from "@ibcornelsen/database/client";

View File

@@ -4,7 +4,7 @@ import Checkbox from "#components/Checkbox.svelte";
import DatenblattFooter from "#components/DatenblattFooter.svelte";
import DatenblattHeader from "#components/DatenblattHeader.svelte";
import PDFLayout from "#layouts/PDFLayout.astro";
import { GebaeudeStammdaten, VerbrauchsausweisWohnen, prisma } from "@ibcornelsen/database";
import { GebaeudeStammdaten, VerbrauchsausweisWohnen, prisma } from "@ibcornelsen/database/client";
const base64 = Astro.url.searchParams.get("base64");
let ausweis: (Partial<VerbrauchsausweisWohnen> & { gebaeude_stammdaten: Partial<GebaeudeStammdaten> }) | null = null;

View File

@@ -2,7 +2,8 @@
import AusweisLayout from "#layouts/AusweisLayout.astro";
import VerbrauchsausweisWohnenModule from "#modules/Ausweise/VerbrauchsausweisWohnenModule.svelte";
import { GebaeudeStammdaten, VerbrauchsausweisWohnen, prisma } from "@ibcornelsen/database";
import { GebaeudeStammdaten, VerbrauchsausweisWohnen, prisma } from "@ibcornelsen/database/server";
import { exclude } from "#lib/exclude";
@@ -13,12 +14,15 @@ let gebaeude: GebaeudeStammdaten = {} as GebaeudeStammdaten;
if (uid) {
const request = await prisma.verbrauchsausweisWohnen.findUnique({
where: { uid },
include: { gebaeude_stammdaten: true },
include: {
gebaeude_stammdaten: true
}
})
if (request) {
ausweis = request;
gebaeude = request.gebaeude_stammdaten;
const { gebaeude_stammdaten, ...rest } = request;
ausweis = exclude(rest, ["id", "uid", "gebaeude_stammdaten_id", "ausweisart", "benutzer_id", "rechnungen_id"]) as VerbrauchsausweisWohnen;
gebaeude = exclude(request.gebaeude_stammdaten, ["id", "uid", "benutzer_id"]) as GebaeudeStammdaten;
}
}