diff --git a/src/pages/pdf/ansichtsausweis.astro b/src/pages/pdf/ansichtsausweis.astro index b9d4cfa9..e99c2951 100644 --- a/src/pages/pdf/ansichtsausweis.astro +++ b/src/pages/pdf/ansichtsausweis.astro @@ -3,10 +3,13 @@ import { generate } from "@pdfme/generator"; import VerbrauchsausweisWohnen2016Template from "../../lib/pdf/templates/GEG24_Verbrauchsausweis.json"; import { convertAusweisData } from "#lib/AusweisData"; import { variable } from "#lib/pdf/plugins/variables"; -import { text, image } from "@pdfme/schemas" +import { text, image } from "@pdfme/schemas"; import { createCaller } from "#lib/caller"; import { VerbrauchsausweisWohnenClient } from "#components/Ausweis/types"; -import { Template } from "@pdfme/common"; +import { Schema, Template } from "@pdfme/common"; +import { Moment } from "moment"; +import { endEnergieVerbrauchVerbrauchsausweis_2016 } from "#lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016"; +import moment from "moment"; const base64 = Astro.url.searchParams.get("base64"); let ausweis: Partial | null = null; @@ -24,30 +27,153 @@ if (base64) { const caller = createCaller(Astro); ausweis = await caller.v1.verbrauchsausweisWohnen.get({ - uid: uidAusweis - }) + uid: uidAusweis, + }); } const template = VerbrauchsausweisWohnen2016Template as Template; +const berechnungen = await endEnergieVerbrauchVerbrauchsausweis_2016(ausweis); -template.schemas.push({}) -template.schemas.push({}) -template.schemas[2]["energie_1"] = { - position: { - x: 15, - y: 140 - }, - height: 5, - width: 14, - type: "text", - fontSize: 8, - verticalAlign: "middle" +let inputs: Record = {}; + +// Verbrauchszeiträume +const addVerbrauchszeitraum = (() => { + let row = 0; + let columnWidth = [16, 16, 80, 12, 18, 18, 18, 12]; + + const getPosition = (column: number) => { + return { + position: { + x: + 15 + + columnWidth.reduce( + (a, c, i) => (i >= column ? a : a + c), + 0 + ), + y: 141 + row * 5, + }, + height: 5, + width: 14, + type: "text", + fontSize: 8, + verticalAlign: "middle", + }; + }; + + return ( + schema: Schema, + start: Moment, + end: Moment, + energietraeger: string, + primaerenergiefaktor: number, + energieverbrauch: number, + anteilWarmwasser: number, + klimafaktor: number + ) => { + inputs[`verbrauchszeitraum_${row}_start`] = start.format("MM.YYYY"); + inputs[`verbrauchszeitraum_${row}_end`] = end.format("MM.YYYY"); + inputs[`verbrauchszeitraum_${row}_energietraeger`] = energietraeger; + inputs[`verbrauchszeitraum_${row}_primaerenergiefaktor`] = + primaerenergiefaktor.toString(); + inputs[`verbrauchszeitraum_${row}_energieverbrauch`] = + energieverbrauch.toString(); + inputs[`verbrauchszeitraum_${row}_anteil_warmwasser`] = Math.round( + anteilWarmwasser * energieverbrauch + ).toString(); + inputs[`verbrauchszeitraum_${row}_anteil_heizung`] = Math.round( + (1 - anteilWarmwasser) * + energieverbrauch + ).toString(); + inputs[`verbrauchszeitraum_${row}_klimafaktor`] = + klimafaktor.toString(); + + schema[`verbrauchszeitraum_${row}_start`] = getPosition(0); + schema[`verbrauchszeitraum_${row}_end`] = getPosition(1); + schema[`verbrauchszeitraum_${row}_energietraeger`] = getPosition(2); + schema[`verbrauchszeitraum_${row}_primaerenergiefaktor`] = + getPosition(3); + schema[`verbrauchszeitraum_${row}_energieverbrauch`] = getPosition(4); + schema[`verbrauchszeitraum_${row}_anteil_warmwasser`] = getPosition(5); + schema[`verbrauchszeitraum_${row}_anteil_heizung`] = getPosition(6); + schema[`verbrauchszeitraum_${row}_klimafaktor`] = getPosition(7); + + row++; + }; +})(); + + +addVerbrauchszeitraum( + template.schemas[2], + moment(ausweis.startdatum), + moment(ausweis.startdatum).add("1", "year"), + ausweis.gebaeude_aufnahme_allgemein?.brennstoff_1, + berechnungen?.primaerfaktorww, + berechnungen?.verbrauch_1_kwh, + ausweis.anteil_warmwasser_1 / 100, + berechnungen?.klimafaktoren[0].klimafaktor +); + +addVerbrauchszeitraum( + template.schemas[2], + moment(ausweis.startdatum).add("1", "year"), + moment(ausweis.startdatum).add("2", "years"), + ausweis.gebaeude_aufnahme_allgemein?.brennstoff_1, + berechnungen?.primaerfaktorww, + berechnungen?.verbrauch_2_kwh, + ausweis.anteil_warmwasser_1 / 100, + berechnungen?.klimafaktoren[1].klimafaktor +); + +addVerbrauchszeitraum( + template.schemas[2], + moment(ausweis.startdatum).add("2", "years"), + moment(ausweis.startdatum).add("3", "years"), + ausweis.gebaeude_aufnahme_allgemein?.brennstoff_1, + berechnungen?.primaerfaktorww, + berechnungen?.verbrauch_3_kwh, + ausweis.anteil_warmwasser_1 / 100, + berechnungen?.klimafaktoren[2].klimafaktor +); + +if (ausweis.zusaetzliche_heizquelle) { + addVerbrauchszeitraum( + template.schemas[2], + moment(ausweis.startdatum), + moment(ausweis.startdatum).add("1", "year"), + ausweis.gebaeude_aufnahme_allgemein?.brennstoff_2, + berechnungen?.primaerfaktorww_1, + berechnungen?.verbrauch_4_kwh, + ausweis.anteil_warmwasser_2 / 100, + berechnungen?.klimafaktoren[0].klimafaktor + ); + + addVerbrauchszeitraum( + template.schemas[2], + moment(ausweis.startdatum).add("1", "year"), + moment(ausweis.startdatum).add("2", "years"), + ausweis.gebaeude_aufnahme_allgemein?.brennstoff_2, + berechnungen?.primaerfaktorww_1, + berechnungen?.verbrauch_5_kwh, + ausweis.anteil_warmwasser_2 / 100, + berechnungen?.klimafaktoren[1].klimafaktor + ); + + addVerbrauchszeitraum( + template.schemas[2], + moment(ausweis.startdatum).add("2", "years"), + moment(ausweis.startdatum).add("3", "years"), + ausweis.gebaeude_aufnahme_allgemein?.brennstoff_2, + berechnungen?.primaerfaktorww_1, + berechnungen?.verbrauch_6_kwh, + ausweis.anteil_warmwasser_2 / 100, + berechnungen?.klimafaktoren[1].klimafaktor + ); } const pdf = await generate({ template, plugins: { text, image, variable }, - inputs: [{...convertAusweisData(ausweis), energie_1: "Hallo"}], + inputs: [{ ...convertAusweisData(ausweis), ...inputs }], options: { author: "IB Cornelsen", creationDate: new Date(), @@ -62,4 +188,4 @@ return new Response(pdf, { "Content-Type": "application/pdf", }, }); ---- \ No newline at end of file +---