Database imports gefixt + Ausweis speichern verbessert
This commit is contained in:
@@ -7,10 +7,19 @@ services:
|
|||||||
environment:
|
environment:
|
||||||
PORT: 3000
|
PORT: 3000
|
||||||
NODE_ENV: "development"
|
NODE_ENV: "development"
|
||||||
network_mode: host
|
ports:
|
||||||
|
- "3000:3000"
|
||||||
volumes:
|
volumes:
|
||||||
- ./:/online-energieausweis
|
- ./:/online-energieausweis
|
||||||
- ./node_modules/@ibcornelsen/ui:/online-energieausweis/node_modules/@ibcornelsen/ui
|
- ./node_modules/@ibcornelsen/ui:/online-energieausweis/node_modules/@ibcornelsen/ui
|
||||||
- ./node_modules/@ibcornelsen/database:/online-energieausweis/node_modules/@ibcornelsen/database
|
- ./node_modules/@ibcornelsen/database:/online-energieausweis/node_modules/@ibcornelsen/database
|
||||||
- ./node_modules/@ibcornelsen/api:/online-energieausweis/node_modules/@ibcornelsen/api
|
- ./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
|
||||||
@@ -27,7 +27,6 @@
|
|||||||
"@mollie/api-client": "^3.7.0",
|
"@mollie/api-client": "^3.7.0",
|
||||||
"@trpc/client": "^10.45.0",
|
"@trpc/client": "^10.45.0",
|
||||||
"@trpc/server": "^10.45.0",
|
"@trpc/server": "^10.45.0",
|
||||||
"@types/body-scroll-lock": "^3.1.2",
|
|
||||||
"astro": "^2.5.1",
|
"astro": "^2.5.1",
|
||||||
"astro-i18next": "1.0.0-beta.21",
|
"astro-i18next": "1.0.0-beta.21",
|
||||||
"astro-spa": "^1.3.9",
|
"astro-spa": "^1.3.9",
|
||||||
@@ -59,6 +58,7 @@
|
|||||||
"zod": "^3.22.4"
|
"zod": "^3.22.4"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@types/body-scroll-lock": "^3.1.2",
|
||||||
"@types/js-cookie": "^3.0.6",
|
"@types/js-cookie": "^3.0.6",
|
||||||
"@types/uuid": "^9.0.1",
|
"@types/uuid": "^9.0.1",
|
||||||
"@typescript-eslint/eslint-plugin": "^5.59.6",
|
"@typescript-eslint/eslint-plugin": "^5.59.6",
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<script lang="ts">
|
<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";
|
import { Buffer } from "buffer";
|
||||||
|
|
||||||
export let ausweis: VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | BedarfsausweisWohnen;
|
export let ausweis: VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | BedarfsausweisWohnen;
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
export let gebaeude: GebaeudeStammdaten;
|
export let gebaeude: GebaeudeStammdaten;
|
||||||
|
|
||||||
import ImageGrid from "../ImageGrid.svelte";
|
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 })[] = [];
|
let images: (File & { data: string })[] = [];
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -4,13 +4,13 @@
|
|||||||
import { addNotification, deleteNotification } from "@ibcornelsen/ui";
|
import { addNotification, deleteNotification } from "@ibcornelsen/ui";
|
||||||
import TagInput from "../TagInput.svelte";
|
import TagInput from "../TagInput.svelte";
|
||||||
import { writable } from "svelte/store";
|
import { writable } from "svelte/store";
|
||||||
import {
|
import type {
|
||||||
BedarfsausweisWohnen,
|
BedarfsausweisWohnen,
|
||||||
Enums,
|
|
||||||
GebaeudeStammdaten,
|
GebaeudeStammdaten,
|
||||||
VerbrauchsausweisGewerbe,
|
VerbrauchsausweisGewerbe,
|
||||||
VerbrauchsausweisWohnen,
|
VerbrauchsausweisWohnen,
|
||||||
} from "@ibcornelsen/database";
|
} from "@ibcornelsen/database/client";
|
||||||
|
import { Enums } from "@ibcornelsen/database/client"
|
||||||
|
|
||||||
export let gebaeude: GebaeudeStammdaten;
|
export let gebaeude: GebaeudeStammdaten;
|
||||||
export let ausweis: VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | BedarfsausweisWohnen;
|
export let ausweis: VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | BedarfsausweisWohnen;
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
import DaemmungImage from "./DaemmungImage.svelte";
|
import DaemmungImage from "./DaemmungImage.svelte";
|
||||||
import FensterImage from "./FensterImage.svelte";
|
import FensterImage from "./FensterImage.svelte";
|
||||||
import Label from "../Label.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 gebaeude: GebaeudeStammdaten;
|
||||||
export let ausweis: VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | BedarfsausweisWohnen;
|
export let ausweis: VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | BedarfsausweisWohnen;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import ImageGrid from "../ImageGrid.svelte";;
|
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 })[] = [];
|
let images: (File & { data: string })[] = [];
|
||||||
export let ausweis: VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | BedarfsausweisWohnen;
|
export let ausweis: VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | BedarfsausweisWohnen;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import ImageGrid from "../ImageGrid.svelte";;
|
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 })[] = [];
|
let images: (File & { data: string })[] = [];
|
||||||
export let ausweis: VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | BedarfsausweisWohnen;
|
export let ausweis: VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | BedarfsausweisWohnen;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import ImageGrid from "../ImageGrid.svelte";;
|
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 })[] = [];
|
let images: (File & { data: string })[] = [];
|
||||||
export let ausweis: VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | BedarfsausweisWohnen;
|
export let ausweis: VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | BedarfsausweisWohnen;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { endEnergieVerbrauchVerbrauchsausweis_2016 } from "#lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016";
|
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 ausweis: VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | BedarfsausweisWohnen;
|
||||||
export let gebaeude: GebaeudeStammdaten;
|
export let gebaeude: GebaeudeStammdaten;
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
import Label from "../Label.svelte";
|
import Label from "../Label.svelte";
|
||||||
import fuelList from "./fuelList";
|
import fuelList from "./fuelList";
|
||||||
import { auditVerbrauchAbweichung } from "../Verbrauchsausweis/audits/VerbrauchAbweichung";
|
import { auditVerbrauchAbweichung } from "../Verbrauchsausweis/audits/VerbrauchAbweichung";
|
||||||
import { GebaeudeStammdaten, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "@ibcornelsen/database";
|
import type { GebaeudeStammdaten, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "@ibcornelsen/database/client";
|
||||||
|
|
||||||
let availableYears = [
|
let availableYears = [
|
||||||
2018, 2019,
|
2018, 2019,
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
import BilderZusatzsysteme from "../Ausweis/BilderZusatzsysteme.svelte";
|
import BilderZusatzsysteme from "../Ausweis/BilderZusatzsysteme.svelte";
|
||||||
import moment from "moment";
|
import moment from "moment";
|
||||||
import { BitChecker } from "src/lib/BitChecker";
|
import { BitChecker } from "src/lib/BitChecker";
|
||||||
import { BedarfsausweisWohnen } from "@ibcornelsen/database";
|
import type { BedarfsausweisWohnen } from "@ibcornelsen/database/client";
|
||||||
|
|
||||||
let ausweis: BedarfsausweisWohnen = {} as BedarfsausweisWohnen;
|
let ausweis: BedarfsausweisWohnen = {} as BedarfsausweisWohnen;
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<script lang="ts">
|
<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";
|
import { Buffer } from "buffer";
|
||||||
|
|
||||||
export let ausweis: VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | BedarfsausweisWohnen;
|
export let ausweis: VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | BedarfsausweisWohnen;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import UploadImages from "./UploadImages.svelte";
|
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 images: (File & { data: string })[] = [];
|
||||||
export let max: number = 4;
|
export let max: number = 4;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { PRICES } from "#lib/constants";
|
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;
|
export let ausweis: VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | BedarfsausweisWohnen;
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
export let hidden: boolean = true;
|
export let hidden: boolean = true;
|
||||||
|
export let closeable: boolean = true;
|
||||||
import { disableBodyScroll, enableBodyScroll } from 'body-scroll-lock';
|
import { disableBodyScroll, enableBodyScroll } from 'body-scroll-lock';
|
||||||
|
|
||||||
$: if (globalThis.window) {
|
$: if (globalThis.window) {
|
||||||
@@ -11,6 +12,13 @@
|
|||||||
}
|
}
|
||||||
</script>
|
</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>
|
<slot></slot>
|
||||||
</div>
|
</div>
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { Bezahlmethoden } from "@ibcornelsen/database";
|
import type { Bezahlmethoden } from "@ibcornelsen/database/client";
|
||||||
|
|
||||||
export let name: string;
|
export let name: string;
|
||||||
export let icon: string;
|
export let icon: string;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { BedarfsausweisWohnen, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "@ibcornelsen/database";
|
import type { BedarfsausweisWohnen, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "@ibcornelsen/database/client";
|
||||||
|
|
||||||
export let max: number = 2;
|
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 {
|
export function auditBedarfsausweisBenoetigt(ausweis: VerbrauchsausweisWohnen, gebaeude: GebaeudeStammdaten): boolean {
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { AuditType, hidden } from "../audits/hidden";
|
import { AuditType, hidden } from "../audits/hidden";
|
||||||
import { GebaeudeStammdaten } from "@ibcornelsen/database";
|
import type { GebaeudeStammdaten } from "@ibcornelsen/database/client";
|
||||||
|
|
||||||
export function auditHeizungGebaeudeBaujahr(gebaeude: GebaeudeStammdaten): boolean {
|
export function auditHeizungGebaeudeBaujahr(gebaeude: GebaeudeStammdaten): boolean {
|
||||||
if ((gebaeude.baujahr_heizung && gebaeude.baujahr_heizung.length > 0) && (gebaeude.baujahr_gebaeude && gebaeude.baujahr_gebaeude.length > 0)) {
|
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 { 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[] {
|
export function auditVerbrauchAbweichung(ausweis: VerbrauchsausweisWohnen, gebaeude: GebaeudeStammdaten): number[] {
|
||||||
if (gebaeude.leerstand && (gebaeude.leerstand > 0)) {
|
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 moment from "moment";
|
||||||
import csv from "csvtojson"
|
import csv from "csvtojson"
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import { getHeizwertfaktor } from "#lib/server/Heizwertfaktor";
|
import { getHeizwertfaktor } from "#lib/server/Heizwertfaktor";
|
||||||
import {
|
import type {
|
||||||
GebaeudeStammdaten,
|
GebaeudeStammdaten,
|
||||||
VerbrauchsausweisWohnen,
|
VerbrauchsausweisWohnen,
|
||||||
} from "@ibcornelsen/database";
|
} from "@ibcornelsen/database/client";
|
||||||
import moment from "moment";
|
import moment from "moment";
|
||||||
import { client } from "src/trpc";
|
import { client } from "src/trpc";
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { getKlimafaktoren } from "#lib/Klimafaktoren";
|
import { getKlimafaktoren } from "#lib/Klimafaktoren";
|
||||||
import { getHeizwertfaktor } from "#lib/server/Heizwertfaktor";
|
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 {
|
export function energetischeNutzflaecheVerbrauchsausweisWohnen_2023(ausweis: VerbrauchsausweisWohnen & { gebaeude_stammdaten: GebaeudeStammdaten }): number {
|
||||||
return (
|
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";
|
import { endEnergieVerbrauchVerbrauchsausweis_2016 } from "./VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016";
|
||||||
|
|
||||||
export async function endEnergieVerbrauch(ausweis: VerbrauchsausweisWohnen & { gebaeude_stammdaten: GebaeudeStammdaten }): Promise<number> {
|
export async function endEnergieVerbrauch(ausweis: VerbrauchsausweisWohnen & { gebaeude_stammdaten: GebaeudeStammdaten }): Promise<number> {
|
||||||
|
|||||||
@@ -1,8 +1,5 @@
|
|||||||
import { prisma } from "@ibcornelsen/database";
|
import { prisma } from "@ibcornelsen/database/server";
|
||||||
import { UserRegisterValidator, UserType, UserTypeValidator } from "./type";
|
import type { Benutzer } from "@ibcornelsen/database/client";
|
||||||
import { v4 as uuid } from "uuid";
|
|
||||||
import { hashPassword } from "../Password";
|
|
||||||
import type { Benutzer } from "@ibcornelsen/database";
|
|
||||||
|
|
||||||
|
|
||||||
export class User {
|
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";
|
import { getEmpfehlungen } from "./getEmpfehlungen";
|
||||||
|
|
||||||
export class AusweisBerechnungen2016 {
|
export class AusweisBerechnungen2016 {
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ import { getHeizwertfaktor } from "#lib/server/Heizwertfaktor";
|
|||||||
import {
|
import {
|
||||||
GebaeudeStammdaten,
|
GebaeudeStammdaten,
|
||||||
VerbrauchsausweisWohnen,
|
VerbrauchsausweisWohnen,
|
||||||
prisma,
|
} from "@ibcornelsen/database/client";
|
||||||
} from "@ibcornelsen/database";
|
import { prisma } from "@ibcornelsen/database/server";
|
||||||
import { AusweisBerechnungen2016 } from "../AusweisBerechnungen2016";
|
import { AusweisBerechnungen2016 } from "../AusweisBerechnungen2016";
|
||||||
import moment from "moment";
|
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";
|
import moment from "moment";
|
||||||
|
|
||||||
export function getEmpfehlungen(ausweis: VerbrauchsausweisWohnen, gebaeude: GebaeudeStammdaten): {
|
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_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.
|
* 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 { inferProcedureOutput } from "@trpc/server";
|
||||||
import Cookies from "js-cookie";
|
import Cookies from "js-cookie";
|
||||||
import { client } from "src/trpc"
|
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> {
|
export async function loginClient(email: string, passwort: string): Promise<inferProcedureOutput<AppRouter["v1"]["benutzer"]["getRefreshToken"]> | null> {
|
||||||
try {
|
try {
|
||||||
@@ -15,8 +16,8 @@ export async function loginClient(email: string, passwort: string): Promise<infe
|
|||||||
path: "/",
|
path: "/",
|
||||||
expires: response.exp
|
expires: response.exp
|
||||||
}
|
}
|
||||||
Cookies.set("accessToken", response.accessToken, options);
|
Cookies.set(API_ACCESS_TOKEN_COOKIE_NAME, response.accessToken, options);
|
||||||
Cookies.set("refreshToken", response.refreshToken, options);
|
Cookies.set(API_REFRESH_TOKEN_COOKIE_NAME, response.refreshToken, options);
|
||||||
Cookies.set("uid", response.uid, options);
|
Cookies.set("uid", response.uid, options);
|
||||||
|
|
||||||
return response;
|
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 { AuditType, hidden } from "#components/Verbrauchsausweis/audits/hidden";
|
||||||
import { auditBedarfsausweisBenoetigt } from "#components/Verbrauchsausweis/audits/BedarfsausweisBenoetigt";
|
import { auditBedarfsausweisBenoetigt } from "#components/Verbrauchsausweis/audits/BedarfsausweisBenoetigt";
|
||||||
import { auditVerbrauchAbweichung } from "#components/Verbrauchsausweis/audits/VerbrauchAbweichung";
|
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 { 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 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 uid: string | null = null;
|
||||||
export let gebaeude: GebaeudeStammdaten = {} as GebaeudeStammdaten;
|
export let gebaeude: GebaeudeStammdaten = {} as GebaeudeStammdaten;
|
||||||
export let ausweis: VerbrauchsausweisWohnen = {
|
export let ausweis: VerbrauchsausweisWohnen = {
|
||||||
ausweisart: Enums.Ausweisart.VerbrauchsausweisWohnen
|
ausweisart: Enums.Ausweisart.VerbrauchsausweisWohnen
|
||||||
} as VerbrauchsausweisWohnen;
|
} as VerbrauchsausweisWohnen;
|
||||||
export let showLoginPage: boolean = false;
|
|
||||||
|
|
||||||
async function spaeterWeitermachen() {
|
async function spaeterWeitermachen() {
|
||||||
|
|
||||||
// Um einen Ausweis zu speichern müssen wir eingeloggt sein, andernfalls wird die API den call ablehnen.
|
// 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.
|
// 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;
|
loginOverlayHidden = false;
|
||||||
showLoginPage = true;
|
|
||||||
|
|
||||||
const getEvent = (event: MessageEvent) => {
|
|
||||||
if (event.data == "AUTHORIZED") {
|
|
||||||
spaeterWeitermachen();
|
|
||||||
window.removeEventListener("message", getEvent)
|
|
||||||
loginOverlayHidden = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
window.addEventListener("message", getEvent)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
loginOverlayHidden = true;
|
||||||
|
|
||||||
if (uid) {
|
if (uid) {
|
||||||
// Anscheinend wurde der Ausweis bereits erstellt und hat eine UID.
|
// Anscheinend wurde der Ausweis bereits erstellt und hat eine UID.
|
||||||
// Jetzt müssen wir ihn nun nur noch abspeichern.
|
// Jetzt müssen wir ihn nun nur noch abspeichern.
|
||||||
try {
|
try {
|
||||||
await client.v1.verbrauchsausweisWohnen[2016].speichern.mutate({
|
await client.v1.verbrauchsausweisWohnen[2016].speichern.mutate({
|
||||||
...ausweis,
|
ausweis,
|
||||||
gebaeude_stammdaten: gebaeude,
|
gebaeude,
|
||||||
uid
|
uid
|
||||||
})
|
})
|
||||||
|
|
||||||
window.location.href = `/ausweis-gespeichert?uid=${uid}`;
|
speichernOverlayHidden = false;
|
||||||
|
window.history.pushState({}, "", `/verbrauchsausweis?uid=${uid}`);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
addNotification({
|
addNotification({
|
||||||
dismissable: false,
|
dismissable: false,
|
||||||
@@ -69,11 +63,13 @@
|
|||||||
} else {
|
} else {
|
||||||
// Wir speichern den Ausweis ab und leiten auf die "ausweis-gespeichert" Seite weiter.
|
// Wir speichern den Ausweis ab und leiten auf die "ausweis-gespeichert" Seite weiter.
|
||||||
try {
|
try {
|
||||||
const { uid } = await client.v1.verbrauchsausweisWohnen[2016].erstellen.mutate({
|
const response = await client.v1.verbrauchsausweisWohnen[2016].erstellen.mutate({
|
||||||
...ausweis,
|
ausweis,
|
||||||
gebaeude_stammdaten: gebaeude
|
gebaeude
|
||||||
})
|
})
|
||||||
window.location.href = `/ausweis-gespeichert?uid=${uid}`;
|
uid = response.uid
|
||||||
|
window.history.pushState({}, "", `/verbrauchsausweis?uid=${uid}`);
|
||||||
|
speichernOverlayHidden = false;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
addNotification({
|
addNotification({
|
||||||
dismissable: false,
|
dismissable: false,
|
||||||
@@ -86,21 +82,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (uid) {
|
console.log(gebaeude, ausweis)
|
||||||
// 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
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
function automatischAusfüllen() {
|
function automatischAusfüllen() {
|
||||||
gebaeude.baujahr_gebaeude = [1962];
|
gebaeude.baujahr_gebaeude = [1962];
|
||||||
@@ -139,13 +121,22 @@
|
|||||||
|
|
||||||
let waitOverlayHidden = true;
|
let waitOverlayHidden = true;
|
||||||
let loginOverlayHidden = true;
|
let loginOverlayHidden = true;
|
||||||
|
let speichernOverlayHidden = true;
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<Overlay hidden={loginOverlayHidden}>
|
<Overlay bind:hidden={loginOverlayHidden}>
|
||||||
<iframe src="/auth/embedded-login" frameborder="0" width="600" height="400"></iframe>
|
<div class="bg-white w-full max-w-screen-sm py-8">
|
||||||
|
<EmbeddedAuthFlowModule onLogin={spaeterWeitermachen}></EmbeddedAuthFlowModule>
|
||||||
|
</div>
|
||||||
</Overlay>
|
</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>
|
<p class="text-white font-semibold text-4xl">Bitte warten sie, ihr Ausweis wird nun erstellt.</p>
|
||||||
</Overlay>
|
</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 { addNotification } from "@ibcornelsen/ui";
|
||||||
import { loginClient } from "#lib/login";
|
import { loginClient } from "#lib/login";
|
||||||
|
|
||||||
let email: string;
|
export let navigate: (target: string) => void;
|
||||||
let passwort: string;
|
export let data: { email: string; passwort: string };
|
||||||
|
|
||||||
export let onLogin: (response: Awaited<ReturnType<typeof loginClient>>) => void;
|
export let onLogin: (response: Awaited<ReturnType<typeof loginClient>>) => void;
|
||||||
|
|
||||||
async function login() {
|
async function login() {
|
||||||
const response = await loginClient(email, passwort)
|
const response = await loginClient(data.email, data.passwort)
|
||||||
|
|
||||||
if (response === null) {
|
if (response === null) {
|
||||||
addNotification({
|
addNotification({
|
||||||
@@ -19,7 +19,6 @@
|
|||||||
dismissable: true
|
dismissable: true
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
parent.postMessage("AUTHORIZED", "*");
|
|
||||||
onLogin(response);
|
onLogin(response);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -35,7 +34,7 @@
|
|||||||
type="text"
|
type="text"
|
||||||
placeholder="Email"
|
placeholder="Email"
|
||||||
name="email"
|
name="email"
|
||||||
bind:value={email}
|
bind:value={data.email}
|
||||||
required
|
required
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
@@ -46,13 +45,13 @@
|
|||||||
type="password"
|
type="password"
|
||||||
placeholder="********"
|
placeholder="********"
|
||||||
name="password"
|
name="password"
|
||||||
bind:value={passwort}
|
bind:value={data.passwort}
|
||||||
required
|
required
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<button class="button" on:click={login}>Einloggen</button>
|
<button class="button" on:click={login}>Einloggen</button>
|
||||||
<div class="flex-row justify-between" style="margin-top: 10px">
|
<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>
|
<a href="/user/passwort_vergessen">Passwort Vergessen?</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -2,6 +2,8 @@
|
|||||||
import { addNotification } from "@ibcornelsen/ui";
|
import { addNotification } from "@ibcornelsen/ui";
|
||||||
import { client } from "src/trpc";
|
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 passwort: string;
|
||||||
let email: string;
|
let email: string;
|
||||||
let vorname: string;
|
let vorname: string;
|
||||||
@@ -16,12 +18,16 @@
|
|||||||
name,
|
name,
|
||||||
});
|
});
|
||||||
|
|
||||||
window.location.href = "/auth/embedded-login";
|
onRegister({
|
||||||
|
email,
|
||||||
|
name,
|
||||||
|
vorname
|
||||||
|
})
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
addNotification({
|
addNotification({
|
||||||
message: "Ups...",
|
message: "Ups...",
|
||||||
subtext:
|
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",
|
type: "error",
|
||||||
timeout: 0,
|
timeout: 0,
|
||||||
dismissable: true,
|
dismissable: true,
|
||||||
@@ -31,7 +37,7 @@
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div style="width:50%;margin: 0 auto">
|
<div style="width:50%;margin: 0 auto">
|
||||||
<h1>Registrieren:</h1>
|
<h1>Registrieren</h1>
|
||||||
<div class="flex flex-col gap-4">
|
<div class="flex flex-col gap-4">
|
||||||
<div class="flex flex-row gap-4 w-full">
|
<div class="flex flex-row gap-4 w-full">
|
||||||
<div class="w-1/2">
|
<div class="w-1/2">
|
||||||
@@ -77,7 +83,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<button class="button" on:click={login}>Registrieren</button>
|
<button class="button" on:click={login}>Registrieren</button>
|
||||||
<div class="flex-row justify-between" style="margin-top: 10px">
|
<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>
|
<a href="/user/passwort_vergessen">Passwort Vergessen?</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -4,7 +4,8 @@
|
|||||||
import ZipSearch from "../components/ZIPSearch.svelte";
|
import ZipSearch from "../components/ZIPSearch.svelte";
|
||||||
import Label from "../components/Label.svelte";
|
import Label from "../components/Label.svelte";
|
||||||
import PriceContainer from "#components/Kaufabschluss/PriceContainer.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 PaymentOption from "#components/PaymentOption.svelte";
|
||||||
import { client } from "src/trpc";
|
import { client } from "src/trpc";
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
import { buildingTypes } from "./BuildingTypes";
|
import { buildingTypes } from "./BuildingTypes";
|
||||||
import BilderZusatzsysteme from "../../components/Ausweis/BilderZusatzsysteme.svelte";
|
import BilderZusatzsysteme from "../../components/Ausweis/BilderZusatzsysteme.svelte";
|
||||||
import moment from "moment";
|
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 uid: string | null = null;
|
||||||
export let gebaeude: GebaeudeStammdaten = {} as GebaeudeStammdaten;
|
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 KundendatenModule from "#modules/KundendatenModule.svelte";
|
||||||
import AusweisLayout from "#layouts/AusweisLayout.astro";
|
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.
|
// 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");
|
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 PDFHeader from "#components/PDF/PDFHeader.svelte";
|
||||||
import PDFSectionHeader from "#components/PDF/PDFSectionHeader.svelte";
|
import PDFSectionHeader from "#components/PDF/PDFSectionHeader.svelte";
|
||||||
import PDFLayout from "#layouts/PDFLayout.astro";
|
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 DatenblattFooter from "#components/DatenblattFooter.svelte";
|
||||||
import DatenblattHeader from "#components/DatenblattHeader.svelte";
|
import DatenblattHeader from "#components/DatenblattHeader.svelte";
|
||||||
import PDFLayout from "#layouts/PDFLayout.astro";
|
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");
|
const base64 = Astro.url.searchParams.get("base64");
|
||||||
let ausweis: (Partial<VerbrauchsausweisWohnen> & { gebaeude_stammdaten: Partial<GebaeudeStammdaten> }) | null = null;
|
let ausweis: (Partial<VerbrauchsausweisWohnen> & { gebaeude_stammdaten: Partial<GebaeudeStammdaten> }) | null = null;
|
||||||
|
|||||||
@@ -2,7 +2,8 @@
|
|||||||
|
|
||||||
import AusweisLayout from "#layouts/AusweisLayout.astro";
|
import AusweisLayout from "#layouts/AusweisLayout.astro";
|
||||||
import VerbrauchsausweisWohnenModule from "#modules/Ausweise/VerbrauchsausweisWohnenModule.svelte";
|
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) {
|
if (uid) {
|
||||||
const request = await prisma.verbrauchsausweisWohnen.findUnique({
|
const request = await prisma.verbrauchsausweisWohnen.findUnique({
|
||||||
where: { uid },
|
where: { uid },
|
||||||
include: { gebaeude_stammdaten: true },
|
include: {
|
||||||
|
gebaeude_stammdaten: true
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
if (request) {
|
if (request) {
|
||||||
ausweis = request;
|
const { gebaeude_stammdaten, ...rest } = request;
|
||||||
gebaeude = request.gebaeude_stammdaten;
|
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