Verbrauchsausweis Gewerbe

This commit is contained in:
Moritz Utcke
2024-01-12 14:26:15 +07:00
parent 9de268f32a
commit 898575d80f
24 changed files with 281 additions and 234 deletions

View File

@@ -21,8 +21,8 @@
"@astrojs/node": "^5.1.4", "@astrojs/node": "^5.1.4",
"@astrojs/svelte": "^2.2.0", "@astrojs/svelte": "^2.2.0",
"@astrojs/tailwind": "^3.1.3", "@astrojs/tailwind": "^3.1.3",
"@ibcornelsen/api": "link:@ibcornelsen/api",
"@ibcornelsen/database": "link:@ibcornelsen/database", "@ibcornelsen/database": "link:@ibcornelsen/database",
"@ibcornelsen/api": "link:@ibcornelsen/api",
"@ibcornelsen/ui": "^0.0.2", "@ibcornelsen/ui": "^0.0.2",
"@mollie/api-client": "^3.7.0", "@mollie/api-client": "^3.7.0",
"@trpc/client": "^10.45.0", "@trpc/client": "^10.45.0",
@@ -30,6 +30,7 @@
"@types/body-scroll-lock": "^3.1.2", "@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",
"body-scroll-lock": "^4.0.0-beta.0", "body-scroll-lock": "^4.0.0-beta.0",
"buffer": "^6.0.3", "buffer": "^6.0.3",
"bun": "^1.0.2", "bun": "^1.0.2",

View File

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

View File

@@ -3,11 +3,11 @@
import DatenblattButton from "#components/DatenblattButton.svelte"; import DatenblattButton from "#components/DatenblattButton.svelte";
import HelpLabel from "#components/HelpLabel.svelte"; import HelpLabel from "#components/HelpLabel.svelte";
export let ausweis: VerbrauchsausweisWohnen; export let ausweis: VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | BedarfsausweisWohnen;
export let gebaeude: GebaeudeStammdaten; export let gebaeude: GebaeudeStammdaten;
import ImageGrid from "../ImageGrid.svelte"; import ImageGrid from "../ImageGrid.svelte";
import { GebaeudeStammdaten, VerbrauchsausweisWohnen } from "@ibcornelsen/database"; import { BedarfsausweisWohnen, GebaeudeStammdaten, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "@ibcornelsen/database";
let images: (File & { data: string })[] = []; let images: (File & { data: string })[] = [];
</script> </script>

View File

@@ -4,76 +4,44 @@
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 { GebaeudeStammdaten, VerbrauchsausweisWohnen } from "@ibcornelsen/database"; import {
BedarfsausweisWohnen,
Enums,
GebaeudeStammdaten,
VerbrauchsausweisGewerbe,
VerbrauchsausweisWohnen,
} from "@ibcornelsen/database";
export let gebaeude: GebaeudeStammdaten; export let gebaeude: GebaeudeStammdaten;
export let ausweis: VerbrauchsausweisWohnen; export let ausweis: VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | BedarfsausweisWohnen;
$: baujahrHeizung = writable(gebaeude.baujahr_heizung || []) $: baujahrHeizung = writable(gebaeude.baujahr_heizung || []);
$: baujahr = writable(gebaeude.baujahr_gebaeude || []); $: baujahr = writable(gebaeude.baujahr_gebaeude || []);
</script> </script>
<div class="GRB"> <div class="GRB">
<!-- Anlass für Energieausweis --> <!-- Anlass für Energieausweis -->
<div class="flex flex-col"> <div class="flex flex-col">
<span <span>Anlass für Energieausweis * </span>
>Anlass für Energieausweis * <div class="grid grid-cols-2 gap-x-2 items-center lg:grid-cols-3">
</span> {#each Object.entries(Enums.Ausstellgrund) as [name, ausstellgrund]}
<div <label class="radio-inline">
class="grid grid-cols-2 gap-x-2 items-center lg:grid-cols-3" <input
> type="radio"
<label class="radio-inline"> value={ausstellgrund}
<input bind:group={ausweis.ausstellgrund}
type="radio" />{name}</label
value="Neubau" >
name="IGanlass" {/each}
bind:group={ausweis.ausstellgrund}
/>Neubau</label
>
<label class="radio-inline"
><input
type="radio"
value="Vermietung"
checked
name="IGanlass"
bind:group={ausweis.ausstellgrund}
/>Vermietung</label
>
<label class="radio-inline"
><input
type="radio"
value="Verkauf"
name="IGanlass"
bind:group={ausweis.ausstellgrund}
/>Verkauf</label
>
<label class="radio-inline"
><input
type="radio"
value="Modernisierung"
name="IGanlass"
bind:group={ausweis.ausstellgrund}
/>Modernisierung</label
>
<label class="radio-inline"
><input
type="radio"
value="Sonstiges"
name="IGanlass"
bind:group={ausweis.ausstellgrund}
/>Sonstiges</label
>
</div> </div>
</div> </div>
<!-- Baujahr Heizung --> <!-- Baujahr Heizung -->
<div class="form-group col-md-2"> <div class="form-group col-md-2">
<HelpLabel title="Baujahr Heizung *"> <HelpLabel title="Baujahr Heizung *">
Bitte geben Sie hier das Baujahr der Bitte geben Sie hier das Baujahr der Heizungsanlage ein. Sollten
Heizungsanlage ein. Sollten unterschiedliche Baujahre vorliegen, dann geben Sie einen
unterschiedliche Baujahre vorliegen, Zeitbereich ein <br />z.B. 1994-2001.
dann geben Sie einen Zeitbereich ein <br
/>z.B. 1994-2001.
</HelpLabel> </HelpLabel>
<div> <div>
<TagInput <TagInput
@@ -83,17 +51,20 @@
onFocusIn={() => { onFocusIn={() => {
addNotification({ addNotification({
message: "Info", message: "Info",
subtext: "Wussten sie, dass sie mehrere Jahre angeben können in denen z.B. Renovierungen an ihrer Heizung durchgeführt wurden. Drücken sie dafür einfach <kbd>Enter</kbd> oder <kbd>Space</kbd> nach jedem Jahr.", subtext:
"Wussten sie, dass sie mehrere Jahre angeben können in denen z.B. Renovierungen an ihrer Heizung durchgeführt wurden. Drücken sie dafür einfach <kbd>Enter</kbd> oder <kbd>Space</kbd> nach jedem Jahr.",
dismissable: true, dismissable: true,
uid: "HEIZUNG_BAUJAHR", uid: "HEIZUNG_BAUJAHR",
timeout: 0, timeout: 0,
type: "info" type: "info",
}); });
}} }}
onFocusOut={() => { onFocusOut={() => {
deleteNotification("HEIZUNG_BAUJAHR") deleteNotification("HEIZUNG_BAUJAHR");
}} }}
className="{auditHeizungGebaeudeBaujahr(gebaeude) ? "linked" : ""}" className={auditHeizungGebaeudeBaujahr(gebaeude)
? "linked"
: ""}
bind:tags={baujahrHeizung} bind:tags={baujahrHeizung}
/> />
</div> </div>
@@ -102,12 +73,9 @@
<!-- Baujahr --> <!-- Baujahr -->
<div class="form-group col-md-2"> <div class="form-group col-md-2">
<HelpLabel title="Baujahr Gebäude *"> <HelpLabel title="Baujahr Gebäude *">
Bitte geben Sie hier das Baujahr des Bitte geben Sie hier das Baujahr des Gebäudes ein. Sollte eine eine
Gebäudes ein. Sollte eine eine grundlegende Sanierung von Dach, Fenster und Heizung stattgefunden
grundlegende Sanierung von Dach, haben, dann berücksichtigen Sie das in dem Sie bei Sanierungsstatus
Fenster und Heizung stattgefunden
haben, dann berücksichtigen Sie das
in dem Sie bei Sanierungsstatus
-saniert- angeben. -saniert- angeben.
</HelpLabel> </HelpLabel>
<div> <div>
@@ -118,17 +86,20 @@
onFocusIn={() => { onFocusIn={() => {
addNotification({ addNotification({
message: "Info", message: "Info",
subtext: "Wussten sie, dass sie mehrere Jahre angeben können in denen z.B. Renovierungen an ihrem Gebäude durchgeführt wurden. Drücken sie dafür einfach <kbd>Enter</kbd> oder <kbd>Space</kbd> nach jedem Jahr.", subtext:
"Wussten sie, dass sie mehrere Jahre angeben können in denen z.B. Renovierungen an ihrem Gebäude durchgeführt wurden. Drücken sie dafür einfach <kbd>Enter</kbd> oder <kbd>Space</kbd> nach jedem Jahr.",
dismissable: true, dismissable: true,
uid: "GEBAEUDE_BAUJAHR", uid: "GEBAEUDE_BAUJAHR",
timeout: 0, timeout: 0,
type: "info" type: "info",
}); });
}} }}
onFocusOut={() => { onFocusOut={() => {
deleteNotification("GEBAEUDE_BAUJAHR") deleteNotification("GEBAEUDE_BAUJAHR");
}} }}
className="{auditHeizungGebaeudeBaujahr(gebaeude) ? "linked" : ""}" className={auditHeizungGebaeudeBaujahr(gebaeude)
? "linked"
: ""}
bind:tags={baujahr} bind:tags={baujahr}
/> />
</div> </div>
@@ -137,9 +108,8 @@
<!-- Anzahl der Wohnungen --> <!-- Anzahl der Wohnungen -->
<div class="form-group col-md-2"> <div class="form-group col-md-2">
<HelpLabel title="Anzahl Wohnungen *"> <HelpLabel title="Anzahl Wohnungen *">
Bitte geben Sie hier die Anzahl der Bitte geben Sie hier die Anzahl der Wohnungen ein, die sich im
Wohnungen ein, die sich im Gebäude Gebäude befinden.
befinden.
</HelpLabel> </HelpLabel>
<div> <div>
<input <input
@@ -159,12 +129,9 @@
<!-- Dachgeschoss --> <!-- Dachgeschoss -->
<div class="form-group col-md-2"> <div class="form-group col-md-2">
<HelpLabel title="Sanierungsstatus *"> <HelpLabel title="Sanierungsstatus *">
Bitte geben Sie an ob das Gebäude Bitte geben Sie an ob das Gebäude energetisch saniert oder unsaniert
energetisch saniert oder unsaniert ist. Wenn das Dach mindestens 12 cm gedämmt und Heizung sowie
ist. Wenn das Dach mindestens 12 cm Fenster nicht älter als 30 Jahre sind, können Sie saniert auswählen.
gedämmt und Heizung sowie Fenster
nicht älter als 30 Jahre sind,
können Sie saniert auswählen.
</HelpLabel> </HelpLabel>
<div> <div>
<select <select
@@ -175,12 +142,8 @@
bind:value={gebaeude.saniert} bind:value={gebaeude.saniert}
> >
<option disabled>Bitte auswählen</option> <option disabled>Bitte auswählen</option>
<option value={true} <option value={true}>saniert</option>
>saniert</option <option value={false}>unsaniert</option>
>
<option value={false}
>unsaniert</option
>
</select> </select>
</div> </div>
</div> </div>

View File

@@ -5,10 +5,10 @@
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 { GebaeudeStammdaten, VerbrauchsausweisWohnen } from "@ibcornelsen/database"; import { BedarfsausweisWohnen, GebaeudeStammdaten, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "@ibcornelsen/database";
export let gebaeude: GebaeudeStammdaten; export let gebaeude: GebaeudeStammdaten;
export let ausweis: VerbrauchsausweisWohnen; export let ausweis: VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | BedarfsausweisWohnen;
</script> </script>

View File

@@ -1,9 +1,9 @@
<script lang="ts"> <script lang="ts">
import ImageGrid from "../ImageGrid.svelte";; import ImageGrid from "../ImageGrid.svelte";;
import { VerbrauchsausweisWohnen } from "@ibcornelsen/database"; import { BedarfsausweisWohnen, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "@ibcornelsen/database";
let images: (File & { data: string })[] = []; let images: (File & { data: string })[] = [];
export let ausweis: VerbrauchsausweisWohnen; export let ausweis: VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | BedarfsausweisWohnen;
</script> </script>
<div class="grid grid-cols-2 gap-4"> <div class="grid grid-cols-2 gap-4">

View File

@@ -1,9 +1,9 @@
<script lang="ts"> <script lang="ts">
import ImageGrid from "../ImageGrid.svelte";; import ImageGrid from "../ImageGrid.svelte";;
import { VerbrauchsausweisWohnen } from "@ibcornelsen/database"; import { BedarfsausweisWohnen, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "@ibcornelsen/database";
let images: (File & { data: string })[] = []; let images: (File & { data: string })[] = [];
export let ausweis: VerbrauchsausweisWohnen; export let ausweis: VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | BedarfsausweisWohnen;
</script> </script>
<div class="grid grid-cols-2 gap-4"> <div class="grid grid-cols-2 gap-4">

View File

@@ -1,9 +1,9 @@
<script lang="ts"> <script lang="ts">
import ImageGrid from "../ImageGrid.svelte";; import ImageGrid from "../ImageGrid.svelte";;
import { VerbrauchsausweisWohnen } from "@ibcornelsen/database"; import { BedarfsausweisWohnen, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "@ibcornelsen/database";
let images: (File & { data: string })[] = []; let images: (File & { data: string })[] = [];
export let ausweis: VerbrauchsausweisWohnen; export let ausweis: VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | BedarfsausweisWohnen;
</script> </script>
<div class="grid grid-cols-2 gap-4"> <div class="grid grid-cols-2 gap-4">

View File

@@ -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, VerbrauchsausweisWohnen } from "@ibcornelsen/database"; import { GebaeudeStammdaten, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "@ibcornelsen/database";
let availableYears = [ let availableYears = [
2018, 2019, 2018, 2019,
@@ -25,7 +25,7 @@
]; ];
export let gebaeude: GebaeudeStammdaten; export let gebaeude: GebaeudeStammdaten;
export let ausweis: VerbrauchsausweisWohnen; export let ausweis: VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe;
const fuelMap: Record<string, string[]> = {}; const fuelMap: Record<string, string[]> = {};
for (const fuel of fuelList) { for (const fuel of fuelList) {

View File

@@ -10,8 +10,9 @@
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";
let ausweis = new Bedarfsausweis(); let ausweis: BedarfsausweisWohnen = {} as BedarfsausweisWohnen;
let daemmungsBreiten = [0, 0.02, 0.05, 0.08, 0.12, 0.16, 0.2, 0.3, 0.4]; let daemmungsBreiten = [0, 0.02, 0.05, 0.08, 0.12, 0.16, 0.2, 0.3, 0.4];

View File

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

View File

@@ -1,10 +1,10 @@
<script lang="ts"> <script lang="ts">
import UploadImages from "./UploadImages.svelte"; import UploadImages from "./UploadImages.svelte";
import { VerbrauchsausweisWohnen } from "@ibcornelsen/database"; import { BedarfsausweisWohnen, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "@ibcornelsen/database";
export let images: (File & { data: string })[] = []; export let images: (File & { data: string })[] = [];
export let max: number = 4; export let max: number = 4;
export let ausweis: VerbrauchsausweisWohnen; export let ausweis: VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | BedarfsausweisWohnen;
</script> </script>
<div class="flex flex-col gap-4"> <div class="flex flex-col gap-4">

View File

@@ -1,18 +1,17 @@
<script lang="ts"> <script lang="ts">
export let prices: number[]; import { PRICES } from "#lib/constants";
import { BedarfsausweisWohnen, Enums, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "@ibcornelsen/database";
export let ausweis: VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | BedarfsausweisWohnen;
const prices = PRICES[ausweis.ausweisart];
export let services: { name: string, price: number, selected: boolean, id: Enums.Service }[] = [];
let basePrice: number = prices[0]; let basePrice: number = prices[0];
let Printing: boolean;
let Aushang: boolean;
let SameDayService: boolean;
let TelephoneAdvice: boolean;
$: price = $: price =
basePrice + basePrice + services.reduce((acc, service) => (service.selected && acc + service.price) || acc, 0)
(Printing ? 9 : 0) +
(Aushang ? 10 : 0) +
(SameDayService ? 29 : 0) +
(TelephoneAdvice ? 75 : 0);
</script> </script>
<div> <div>
@@ -180,62 +179,20 @@
<table> <table>
<strong>Zusatzleistungen:<br /></strong> <strong>Zusatzleistungen:<br /></strong>
<tr> {#each services as service}
<td <tr>
>Qualitätsdruck per Post (zusätzlich zur PDF Version) für 9€ <td
inkl. MwSt.</td >{service.name}</td
> >
<td <td
><input ><input
type="checkbox" type="checkbox"
class="IGZusatzleistung" class="IGZusatzleistung"
bind:checked={Printing} bind:checked={service.selected}
name="QD" />
/> </td>
</td> </tr>
</tr> {/each}
<tr>
<td
>Aushang (für öffentliche Gebäude gesetzlich vorgeschrieben)
für 10€ inkl. MwSt.</td
>
<td
><input
type="checkbox"
class="IGZusatzleistung"
bind:checked={Aushang}
name="AH"
/>
</td>
</tr>
<tr>
<td
>Same Day Service (Bestellung Werktags vor 12:00 Uhr -
Ausstellung bis 18:00 Uhr am gleichen Tag) für 29€ inkl.
MwSt.</td
>
<td
><input
type="checkbox"
class="IGZusatzleistung"
bind:checked={SameDayService}
name="SD"
/>
</td>
</tr>
<tr>
<td
>Telefonische Energieeffizienzberatung für 75€ inkl. MwSt.</td
>
<td
><input
type="checkbox"
class="IGZusatzleistung"
bind:checked={TelephoneAdvice}
name="NA"
/>
</td>
</tr>
</table> </table>
</div> </div>
</div> </div>

View File

@@ -1,11 +1,11 @@
<script lang="ts"> <script lang="ts">
import { VerbrauchsausweisWohnen } from "@ibcornelsen/database"; import { BedarfsausweisWohnen, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "@ibcornelsen/database";
export let max: number = 2; export let max: number = 2;
// Array of base64 encoded images read into the input. // Array of base64 encoded images read into the input.
export let images: (File & { data: string })[] = []; export let images: (File & { data: string })[] = [];
export let ausweis: VerbrauchsausweisWohnen; export let ausweis: VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | BedarfsausweisWohnen;
function getAllImages(this: HTMLInputElement) { function getAllImages(this: HTMLInputElement) {
const files = this.files || []; const files = this.files || [];

View File

@@ -1 +1,33 @@
import { Enums } from "@ibcornelsen/database";
export const API_ACCESS_TOKEN_COOKIE_NAME = "accessToken"; export const API_ACCESS_TOKEN_COOKIE_NAME = "accessToken";
/**
* Ein Objekt welches alle definierten Preise für unsere Basisprodukte enthält.
*/
export const PRICES: Record<Enums.Ausweisart, [number, number, number]> = {
BedarfsausweisWohnen: [135, 145, 290],
VerbrauchsausweisWohnen: [45, 55, 180],
VerbrauchsausweisGewerbe: [65, 75, 360],
};
export const SERVICES: Record<Enums.Ausweisart, Record<Enums.Service, number>> = {
BedarfsausweisWohnen: {
Qualitaetsdruck: 9,
Aushang: 10,
SameDay: 29,
Telefonberatung: 30,
},
VerbrauchsausweisWohnen: {
Qualitaetsdruck: 9,
Aushang: 10,
SameDay: 29,
Telefonberatung: 20,
},
VerbrauchsausweisGewerbe: {
Qualitaetsdruck: 9,
Aushang: 10,
SameDay: 29,
Telefonberatung: 25,
},
};

View File

@@ -1,4 +1,4 @@
import { AppRoute } from "@ibcornelsen/api"; 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"

View File

@@ -14,13 +14,18 @@
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 { GebaeudeStammdaten, VerbrauchsausweisWohnen } from "@ibcornelsen/database"; import { Enums, GebaeudeStammdaten, VerbrauchsausweisWohnen } from "@ibcornelsen/database";
import { client } from "src/trpc"; import { client } from "src/trpc";
import Cookies from "js-cookie"; import Cookies from "js-cookie";
import { API_ACCESS_TOKEN_COOKIE_NAME } from "#lib/constants"; import { API_ACCESS_TOKEN_COOKIE_NAME } from "#lib/constants";
import Overlay from "#components/Overlay.svelte"; import Overlay from "#components/Overlay.svelte";
export let uid: string | null = null; 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() { async function spaeterWeitermachen() {
@@ -28,6 +33,7 @@
// 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 (!Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)) {
loginOverlayHidden = false; loginOverlayHidden = false;
showLoginPage = true;
const getEvent = (event: MessageEvent) => { const getEvent = (event: MessageEvent) => {
if (event.data == "AUTHORIZED") { if (event.data == "AUTHORIZED") {
@@ -80,8 +86,6 @@
} }
} }
export let gebaeude: GebaeudeStammdaten = {} as GebaeudeStammdaten;
export let ausweis: VerbrauchsausweisWohnen = {} as VerbrauchsausweisWohnen;
if (uid) { if (uid) {
// NOTE: Funktioniert nicht mehr // NOTE: Funktioniert nicht mehr
async () => { async () => {

View File

@@ -5,6 +5,8 @@
let email: string; let email: string;
let passwort: string; let passwort: string;
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(email, passwort)
@@ -18,6 +20,7 @@
}) })
} else { } else {
parent.postMessage("AUTHORIZED", "*"); parent.postMessage("AUTHORIZED", "*");
onLogin(response);
} }
} }
</script> </script>

View File

@@ -4,14 +4,36 @@
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 { Benutzer, Bezahlmethoden, Enums, Rechnungen, VerbrauchsausweisWohnen } from "@ibcornelsen/database"; import { BedarfsausweisWohnen, Benutzer, Bezahlmethoden, Enums, Rechnungen, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "@ibcornelsen/database";
import PaymentOption from "#components/PaymentOption.svelte"; import PaymentOption from "#components/PaymentOption.svelte";
import { client } from "src/trpc"; import { client } from "src/trpc";
export let user: Benutzer; export let user: Benutzer;
export let ausweis: VerbrauchsausweisWohnen export let ausweis: VerbrauchsausweisWohnen | BedarfsausweisWohnen | VerbrauchsausweisGewerbe;
let rechnung: Rechnungen = {} as Rechnungen; let rechnung: Rechnungen = {} as Rechnungen;
let services = [{
name: "Qualitätsdruck per Post (zusätzlich zur PDF Version) für 9€ inkl. MwSt.",
id: Enums.Service.Qualitaetsdruck,
price: 9,
selected: false
}, {
name: "Aushang (für öffentliche Gebäude gesetzlich vorgeschrieben) für 10€ inkl. MwSt.",
id: Enums.Service.Aushang,
price: 10,
selected: false
}, {
name: "Same Day Service (Bestellung Werktags vor 12:00 Uhr - Ausstellung bis 18:00 Uhr am gleichen Tag) für 29€ inkl. MwSt.",
id: Enums.Service.SameDay,
price: 29,
selected: false
}, {
name: "Telefonische Energieeffizienzberatung für 75€ inkl. MwSt.",
id: Enums.Service.Telefonberatung,
price: 75,
selected: false
}]
export let selectedPaymentType: Bezahlmethoden = Enums.Bezahlmethoden.PAYPAL; export let selectedPaymentType: Bezahlmethoden = Enums.Bezahlmethoden.PAYPAL;
let agbAkzeptiert: boolean; let agbAkzeptiert: boolean;
@@ -19,10 +41,10 @@
async function createPayment() { async function createPayment() {
const response = await client.v1.rechnungen.erstellen.mutate({ const response = await client.v1.rechnungen.erstellen.mutate({
ausweisart: "VerbrauchsausweisWohnen", ausweisart: ausweis.ausweisart,
uid: ausweis.uid, uid: ausweis.uid,
payment_method: selectedPaymentType, payment_method: selectedPaymentType,
services: [] services: services.filter(service => service.selected).map(service => service.id)
}) })
window.location.href = response.checkout_url window.location.href = response.checkout_url
@@ -328,7 +350,7 @@
</div> </div>
</div> </div>
<div class="w-2/5"> <div class="w-2/5">
<PriceContainer prices={[45, 60, 160]} /> <PriceContainer {ausweis} bind:services />
</div> </div>
</div> </div>
</div> </div>

View File

@@ -6,65 +6,56 @@
import Verbrauch from "#components/Ausweis/Verbrauch.svelte"; import Verbrauch from "#components/Ausweis/Verbrauch.svelte";
import Label from "#components/Label.svelte"; import Label from "#components/Label.svelte";
import Ausweisart from "#components/Ausweis/Ausweisart.svelte"; import Ausweisart from "#components/Ausweis/Ausweisart.svelte";
import ZipSearch from "../ZIPSearch.svelte"; import ZipSearch from "../../components/ZIPSearch.svelte";
import { buildingTypes } from "./BuildingTypes"; import { buildingTypes } from "./BuildingTypes";
import BilderZusatzsysteme from "../Ausweis/BilderZusatzsysteme.svelte"; import BilderZusatzsysteme from "../../components/Ausweis/BilderZusatzsysteme.svelte";
import moment from "moment"; import moment from "moment";
import { VerbrauchsausweisGewerbe } from "@ibcornelsen/database"; import { Enums, GebaeudeStammdaten, VerbrauchsausweisGewerbe } from "@ibcornelsen/database";
let ausweis: VerbrauchsausweisGewerbe = {}; export let uid: string | null = null;
export let gebaeude: GebaeudeStammdaten = {} as GebaeudeStammdaten;
export let ausweis: VerbrauchsausweisGewerbe = {
ausweisart: Enums.Ausweisart.VerbrauchsausweisGewerbe
} as VerbrauchsausweisGewerbe;
let additionalHeating: boolean = false; let additionalHeating: boolean = false;
let heatedWaterIncluded: boolean = false; let heatedWaterIncluded: boolean = false;
let heatedWaterPortion: number = 18; let heatedWaterPortion: number = 18;
let hasCellar: boolean = false;
let area = 0;
let zip: string = "";
let city: string = "";
let baujahrGebaeude: number;
let baujahrHeizungsAnlage: number;
let apartmentCount: number;
let certificateReason:
| "Vermietung"
| "Neubau"
| "Verkauf"
| "Modernisierung"
| "Sonstiges";
let sanitationStatus: boolean;
let needsRequirementCertificate: boolean = false; let needsRequirementCertificate: boolean = false;
$: needsRequirementCertificate = $: needsRequirementCertificate =
(ausweis.baujahr_gebaeude < 1978 && (gebaeude.baujahr_gebaeude[0] < 1978 &&
ausweis.anzahl_einheiten <= 4 && (gebaeude.einheiten || 0) <= 4 &&
ausweis.objekt_saniert == false && gebaeude.saniert == false &&
(ausweis.ausstellgrund == "Vermietung" || (ausweis.ausstellgrund == "Vermietung" ||
ausweis.ausstellgrund == "Sonstiges")) || ausweis.ausstellgrund == "Sonstiges")) ||
ausweis.ausstellgrund == "Neubau" || ausweis.ausstellgrund == "Neubau" ||
ausweis.ausstellgrund == "Modernisierung" || ausweis.ausstellgrund == "Modernisierung" ||
ausweis.ausstellgrund == "Verkauf"; ausweis.ausstellgrund == "Verkauf";
function automatischAusfüllen() { function automatischAusfüllen() {
ausweis.baujahr_gebaeude = 1962; gebaeude.baujahr_gebaeude = [1962];
ausweis.baujahr_anlage = 1974; gebaeude.baujahr_heizung = [1952];
ausweis.objekt_saniert = true; gebaeude.saniert = true;
ausweis.anzahl_einheiten = 1; gebaeude.einheiten = 1;
ausweis.ausstellgrund = "Vermietung"; ausweis.ausstellgrund = "Vermietung";
ausweis.energieverbrauch_1_heizquelle_1 = 15000; ausweis.verbrauch_1 = 15000;
ausweis.energieverbrauch_2_heizquelle_1 = 14000; ausweis.verbrauch_2 = 14000;
ausweis.energieverbrauch_3_heizquelle_1 = 16000; ausweis.verbrauch_3 = 16000;
ausweis.wohnflaeche = 152; gebaeude.flaeche = 152;
ausweis.keller_beheizt = true; ausweis.keller_beheizt = true;
ausweis.energietraeger_1 = "Erdgas H"; ausweis.brennstoff_1 = "Erdgas H";
ausweis.energietraeger_einheit_heizquelle_1 = "kWh"; ausweis.einheit_1 = "kWh";
ausweis.warmwasser_enthalten = true;
ausweis.anteil_warmwasser_1 = 18; ausweis.anteil_warmwasser_1 = 18;
ausweis.energieverbrauch_zeitraum = moment("12.01.2019"); ausweis.startdatum = moment("12.01.2019").toDate();
ausweis.objekt_plz = "21039"; gebaeude.plz = "21039";
ausweis.objekt_ort = "Hamburg"; gebaeude.ort = "Hamburg";
ausweis.objekt_strasse = "Curslacker Deich 170"; gebaeude.adresse = "Curslacker Deich 170";
gebaeude.gebaeudeteil = "Gesamtgebäude";
gebaeude = gebaeude;
ausweis = ausweis;
} }
</script> </script>
@@ -97,7 +88,7 @@
<Label>A - Prüfung der Ausweisart</Label> <Label>A - Prüfung der Ausweisart</Label>
<Ausweisart bind:ausweis /> <Ausweisart bind:ausweis bind:gebaeude />
<div <div
class="flex flex-col p-4" class="flex flex-col p-4"
@@ -144,7 +135,7 @@
required required
data-msg-minlength="min. 5 Zeichen" data-msg-minlength="min. 5 Zeichen"
data-msg-maxlength="max. 40 Zeichen" data-msg-maxlength="max. 40 Zeichen"
bind:value={ausweis.objekt_strasse} bind:value={gebaeude.adresse}
/> />
</div> </div>
</div> </div>
@@ -152,8 +143,8 @@
<!-- PLZ --> <!-- PLZ -->
<div class="form-group col-md-4 PLZ"> <div class="form-group col-md-4 PLZ">
<ZipSearch <ZipSearch
bind:zip={ausweis.objekt_plz} bind:zip={gebaeude.plz}
bind:city={ausweis.objekt_ort} bind:city={gebaeude.ort}
name="zip" name="zip"
/> />
</div> </div>
@@ -168,7 +159,7 @@
name="IGort" name="IGort"
readonly={true} readonly={true}
bind:value={ausweis.objekt_ort} bind:value={gebaeude.ort}
type="text" type="text"
/> />
</div> </div>
@@ -190,7 +181,7 @@
autocomplete="off" autocomplete="off"
data-rule-minlength="2" data-rule-minlength="2"
data-msg-minlength="min. 2 Zeichen" data-msg-minlength="min. 2 Zeichen"
bind:value={ausweis.wohnflaeche} bind:value={gebaeude.flaeche}
/> />
</div> </div>
</div> </div>
@@ -202,7 +193,7 @@
<select <select
name="IGkeller" name="IGkeller"
required required
bind:value={ausweis.keller_beheizt} bind:value={gebaeude.keller}
> >
<option>Bitte auswählen</option> <option>Bitte auswählen</option>
<option value={false}>nicht vorhanden</option> <option value={false}>nicht vorhanden</option>
@@ -232,7 +223,7 @@
</div> </div>
<div class="GRB"> <div class="GRB">
<Verbrauch bind:ausweis /> <Verbrauch bind:ausweis bind:gebaeude />
</div> </div>
<hr /> <hr />
<div> <div>
@@ -434,7 +425,7 @@
> >
</div> </div>
<BilderZusatzsysteme {ausweis} /> <BilderZusatzsysteme {ausweis} {gebaeude} />
<div class="flex flex-row justify-between"> <div class="flex flex-row justify-between">
<Hilfe /> <Hilfe />

View File

@@ -0,0 +1,64 @@
<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

@@ -0,0 +1,10 @@
---
import Layout from "../../layouts/Layout.astro";
---
<Layout title="Zahlung Erfolgreich - IBCornelsen">
Supa! Hat geklappt ne!
</Layout>

View File

@@ -1,11 +1,10 @@
--- ---
import AusweisLayout from "#layouts/AusweisLayout.astro"; import AusweisLayout from "#layouts/AusweisLayout.astro";
import VerbrauchsausweisGewerbeContent from "#components/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbeContent.svelte"; import VerbrauchsausweisGewerbeModule from "#modules/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbeModule.svelte";
--- ---
<AusweisLayout title="Verbrauchsausweis Gewerbe erstellen | IBCornelsen"> <AusweisLayout title="Verbrauchsausweis Gewerbe erstellen | IBCornelsen">
<VerbrauchsausweisGewerbeContent client:load></VerbrauchsausweisGewerbeContent> <VerbrauchsausweisGewerbeModule client:load></VerbrauchsausweisGewerbeModule>
</AusweisLayout> </AusweisLayout>