Database imports gefixt + Ausweis speichern verbessert
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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>
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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 {
|
||||
|
||||
|
||||
@@ -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)) {
|
||||
|
||||
@@ -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)) {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { prisma } from "@ibcornelsen/database";
|
||||
import { prisma } from "@ibcornelsen/database/server";
|
||||
import moment from "moment";
|
||||
import csv from "csvtojson"
|
||||
|
||||
|
||||
@@ -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";
|
||||
|
||||
|
||||
@@ -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 (
|
||||
|
||||
@@ -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> {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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";
|
||||
|
||||
|
||||
@@ -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): {
|
||||
|
||||
@@ -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
8
src/lib/exclude.ts
Normal 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>
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
42
src/lib/validateAccessToken.ts
Normal file
42
src/lib/validateAccessToken.ts
Normal 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;
|
||||
}
|
||||
}
|
||||
15
src/modules/Ausweise/AusweisGespeichertModule.svelte
Normal file
15
src/modules/Ausweise/AusweisGespeichertModule.svelte
Normal 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}
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
26
src/modules/EmbeddedAuthFlowModule.svelte
Normal file
26
src/modules/EmbeddedAuthFlowModule.svelte
Normal 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}
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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";
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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}
|
||||
@@ -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>
|
||||
@@ -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");
|
||||
|
||||
@@ -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";
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user