From eac6f0c0356896f53de20b5455f8e423d82d1373 Mon Sep 17 00:00:00 2001 From: Moritz Utcke Date: Thu, 20 Feb 2025 17:07:49 +1100 Subject: [PATCH] Bestellung --- src/components/Ausweis/Bezahlung.svelte | 56 ---- src/components/PaymentOption.svelte | 42 ++- src/lib/constants.ts | 38 ++- src/lib/server/mail/invoice.ts | 2 + src/modules/KundendatenModule.svelte | 336 +++++++++++++++--------- src/pages/api/rechnung/index.ts | 12 +- src/pages/payment/success.astro | 2 +- 7 files changed, 272 insertions(+), 216 deletions(-) delete mode 100644 src/components/Ausweis/Bezahlung.svelte diff --git a/src/components/Ausweis/Bezahlung.svelte b/src/components/Ausweis/Bezahlung.svelte deleted file mode 100644 index f710a792..00000000 --- a/src/components/Ausweis/Bezahlung.svelte +++ /dev/null @@ -1,56 +0,0 @@ - - - -
- - - - - - - - - - - -
\ No newline at end of file diff --git a/src/components/PaymentOption.svelte b/src/components/PaymentOption.svelte index f5a11267..3a667aeb 100644 --- a/src/components/PaymentOption.svelte +++ b/src/components/PaymentOption.svelte @@ -1,33 +1,27 @@
+ (aktiveBezahlmethode = bezahlmethode)} + /> - selectedPaymentType = paymentType} /> - - - -
- - \ No newline at end of file + + \ No newline at end of file diff --git a/src/lib/constants.ts b/src/lib/constants.ts index b587b006..9912380e 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -21,16 +21,42 @@ export enum VALID_UUID_PREFIXES { "gnw" = "GEG Nachweis Wohnen" } +export enum AusweisTyp { + Standard, + Beratung, + Offline +} + /** * Ein Objekt welches alle definierten Preise für unsere Basisprodukte enthält. */ -export const PRICES: Record = { +export const PRICES: Record> = { // per E-Mail , inkl.Beratung, offline - BedarfsausweisWohnen: [95, 125, 295], - VerbrauchsausweisWohnen: [65, 95, 180], - VerbrauchsausweisGewerbe: [95, 125, 360], - BedarfsausweisGewerbe: [500, 700, 1000], - GEGNachweisWohnen: [500, 700, 1000] + BedarfsausweisWohnen: { + [AusweisTyp.Standard]: 95, + [AusweisTyp.Beratung]: 125, + [AusweisTyp.Offline]: 295 + }, + VerbrauchsausweisWohnen: { + [AusweisTyp.Standard]: 65, + [AusweisTyp.Beratung]: 95, + [AusweisTyp.Offline]: 180 + }, + VerbrauchsausweisGewerbe: { + [AusweisTyp.Standard]: 95, + [AusweisTyp.Beratung]: 125, + [AusweisTyp.Offline]: 360 + }, + BedarfsausweisGewerbe: { + [AusweisTyp.Standard]: 500, + [AusweisTyp.Beratung]: 700, + [AusweisTyp.Offline]: 1000 + }, + GEGNachweisWohnen: { + [AusweisTyp.Standard]: 500, + [AusweisTyp.Beratung]: 700, + [AusweisTyp.Offline]: 1000 + } }; export const SERVICES: Record< diff --git a/src/lib/server/mail/invoice.ts b/src/lib/server/mail/invoice.ts index dc0faf3e..abcae55a 100644 --- a/src/lib/server/mail/invoice.ts +++ b/src/lib/server/mail/invoice.ts @@ -15,6 +15,8 @@ export async function sendInvoiceMail( rechnung: Rechnung, user: Benutzer ) { + console.log(ausweis); + const aufnahme = await prisma.aufnahme.findUnique({ where: { id: ausweis.aufnahme_id, diff --git a/src/modules/KundendatenModule.svelte b/src/modules/KundendatenModule.svelte index 92e7311c..0bc2f207 100644 --- a/src/modules/KundendatenModule.svelte +++ b/src/modules/KundendatenModule.svelte @@ -4,12 +4,15 @@ import Bereich from "#components/labels/Bereich.svelte"; import Ansprechpartner from "#components/Ausweis/Ansprechpartner.svelte"; import Rechnungsadresse from "#components/Ausweis/Rechnungsadresse.svelte"; - import Bezahlung from "#components/Ausweis/Bezahlung.svelte"; import type { Bezahlmethoden } from "@ibcornelsen/database/client"; import { Enums } from "@ibcornelsen/database/client"; import { dialogs } from "svelte-dialogs"; import LoginDialog from "#components/LoginDialog.svelte"; - import { API_ACCESS_TOKEN_COOKIE_NAME, PRICES } from "#lib/constants.js"; + import { + API_ACCESS_TOKEN_COOKIE_NAME, + AusweisTyp, + PRICES, + } from "#lib/constants.js"; import Cookies from "js-cookie"; import { AufnahmeClient, @@ -21,12 +24,15 @@ } from "#components/Ausweis/types.js"; import { validateAccessTokenClient } from "src/client/lib/validateAccessToken.js"; import { api } from "astro-typesafe-api/client"; - + import PaymentOption from "#components/PaymentOption.svelte"; + export let user: BenutzerClient; export let ausweis: VerbrauchsausweisWohnenClient; export let aufnahme: AufnahmeClient; export let objekt: ObjektClient; export let ausweisart: Enums.Ausweisart; + export let aktiveBezahlmethode: Bezahlmethoden = Enums.Bezahlmethoden.paypal; + export let ausweis_typ: AusweisTyp = AusweisTyp.Standard; let rechnung: Partial = { email: user.email, @@ -39,9 +45,14 @@ versand_plz: user.plz, versand_ort: user.ort, telefon: user.telefon, - } + }; - let services: { name: string, id: Enums.Service, price: number, selected: boolean }[] = [ + let services: { + name: string; + id: Enums.Service; + price: number; + selected: boolean; + }[] = [ { name: "Qualitätsdruck per Post (zusätzlich zur PDF Version)", id: Enums.Service.Qualitaetsdruck, @@ -68,9 +79,6 @@ }, ]; - export let bezahlmethode: Bezahlmethoden = - Enums.Bezahlmethoden.paypal; - let prices = PRICES[ausweisart]; let basePrice: number = prices[0]; @@ -83,14 +91,21 @@ ); const zurueck = { - [Enums.Ausweisart.VerbrauchsausweisWohnen]: `/energieausweis-erstellen/verbrauchsausweis-wohngebaeude?uid=${ausweis.uid}`, - [Enums.Ausweisart.VerbrauchsausweisGewerbe]: `/energieausweis-erstellen/verbrauchsausweis-gewerbe?uid=${ausweis.uid}`, - [Enums.Ausweisart.BedarfsausweisWohnen]: `/energieausweis-erstellen/bedarfsausweis-wohnen?uid=${ausweis.uid}`, - [Enums.Ausweisart.BedarfsausweisGewerbe]: `/energieausweis-erstellen/bedarfsausweis-gewerbe?uid=${ausweis.uid}`, - [Enums.Ausweisart.GEGNachweisWohnen]: `/angebot-anfragen/geg-nachweis-wohnen-anfragen?uid=${ausweis.uid}`, - [Enums.Ausweisart.GEGNachweisGewerbe]: `/angebot-anfragen/geg-nachweis-gewerbe-anfragen?uid=${ausweis.uid}`, - [Enums.Ausweisart.GEGNachweisBedarfsausweis]: `/angebot-anfragen/bedarfsausweis-gewerbe-anfragen?uid=${ausweis.uid}`, - }[ausweisart] + [Enums.Ausweisart.VerbrauchsausweisWohnen]: + `/energieausweis-erstellen/verbrauchsausweis-wohngebaeude?uid=${ausweis.uid}`, + [Enums.Ausweisart.VerbrauchsausweisGewerbe]: + `/energieausweis-erstellen/verbrauchsausweis-gewerbe?uid=${ausweis.uid}`, + [Enums.Ausweisart.BedarfsausweisWohnen]: + `/energieausweis-erstellen/bedarfsausweis-wohnen?uid=${ausweis.uid}`, + [Enums.Ausweisart.BedarfsausweisGewerbe]: + `/energieausweis-erstellen/bedarfsausweis-gewerbe?uid=${ausweis.uid}`, + [Enums.Ausweisart.GEGNachweisWohnen]: + `/angebot-anfragen/geg-nachweis-wohnen-anfragen?uid=${ausweis.uid}`, + [Enums.Ausweisart.GEGNachweisGewerbe]: + `/angebot-anfragen/geg-nachweis-gewerbe-anfragen?uid=${ausweis.uid}`, + [Enums.Ausweisart.GEGNachweisBedarfsausweis]: + `/angebot-anfragen/bedarfsausweis-gewerbe-anfragen?uid=${ausweis.uid}`, + }[ausweisart]; async function speichern(e: SubmitEvent) { e.preventDefault(); @@ -111,53 +126,58 @@ // uid: ausweis.uid, // }); - localStorage.clear() + localStorage.clear(); window.location.href = `/kaufabschluss?uid=${ausweis.uid}`; } async function anfordern() { // TODO Angebot anfordern - } async function bestellen() { - const ausweisart = getAusweisartFromUUID(ausweis.uid) as Enums.Ausweisart; - + const ausweisart = getAusweisartFromUUID( + ausweis.uid + ) as Enums.Ausweisart; + try { - const { uid, checkout_url } = await api.rechnung.PUT.fetch({ - ausweisart, - bezahlmethode, - services: services.filter(service => service.selected).map(service => service.id), - email: rechnung.email, - empfaenger: rechnung.empfaenger, - strasse: rechnung.strasse, - plz: rechnung.plz, - ort: rechnung.ort, - versand_empfaenger: rechnung.versand_empfaenger, - versand_strasse: rechnung.versand_strasse, - versand_plz: rechnung.versand_plz, - versand_ort: rechnung.versand_ort, - telefon: rechnung.telefon, - ausweis_uid: ausweis.uid - }, { - headers: { - Authorization: `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` + const { uid, checkout_url } = await api.rechnung.PUT.fetch( + { + ausweisart, + bezahlmethode: aktiveBezahlmethode, + services: services + .filter((service) => service.selected) + .map((service) => service.id), + email: rechnung.email, + empfaenger: rechnung.empfaenger, + strasse: rechnung.strasse, + plz: rechnung.plz, + ort: rechnung.ort, + versand_empfaenger: rechnung.versand_empfaenger, + versand_strasse: rechnung.versand_strasse, + versand_plz: rechnung.versand_plz, + versand_ort: rechnung.versand_ort, + telefon: rechnung.telefon, + ausweis_uid: ausweis.uid, + ausweis_typ, + }, + { + headers: { + Authorization: `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}`, + }, } - }) + ); // Alle alten Ausweisdateien im localStorage löschen. localStorage.clear(); - - if (bezahlmethode === Enums.Bezahlmethoden.rechnung) { - window.location.href = `/payment/success?r=${uid}&a=${ausweis.uid}` + + if (aktiveBezahlmethode === Enums.Bezahlmethoden.rechnung) { + window.location.href = `/payment/success?r=${uid}&a=${ausweis.uid}`; } else { window.location.href = checkout_url as string; } - } catch(e) { - } + } catch (e) {} } - /** * TODO * Ausschlusskriterien: Neubau, Modernisierung @@ -169,11 +189,26 @@ Fehlende Angaben zum Sanierungsstand (Bei F mindestens 2 Haken), (Bei G mindestens 1 Haken) */ let bestellenNichtMoeglich = false; - if (((ausweis.ausstellgrund === "Neubau" || ausweis.ausstellgrund === "Modernisierung") && aufnahme.baujahr_gebaeude[0] < 1978 && aufnahme.saniert === false && aufnahme.einheiten && aufnahme.einheiten > 4) || (new Date().getFullYear() - aufnahme.baujahr_heizung[0] < 3) || (!ausweis.verbrauch_1 || !ausweis.verbrauch_2 || !ausweis.verbrauch_3) || (aufnahme.leerstand && aufnahme.leerstand > 30)) { - bestellenNichtMoeglich = true + if ( + ((ausweis.ausstellgrund === "Neubau" || + ausweis.ausstellgrund === "Modernisierung") && + aufnahme.baujahr_gebaeude[0] < 1978 && + aufnahme.saniert === false && + aufnahme.einheiten && + aufnahme.einheiten > 4) || + new Date().getFullYear() - aufnahme.baujahr_heizung[0] < 3 || + !ausweis.verbrauch_1 || + !ausweis.verbrauch_2 || + !ausweis.verbrauch_3 || + (aufnahme.leerstand && aufnahme.leerstand > 30) + ) { + bestellenNichtMoeglich = true; } -const gegAnfrage = (ausweisart === Enums.Ausweisart.GEGNachweisWohnen) || (ausweisart === Enums.Ausweisart.GEGNachweisBedarfsausweis) || (ausweisart === Enums.Ausweisart.GEGNachweisGewerbe) + const gegAnfrage = + ausweisart === Enums.Ausweisart.GEGNachweisWohnen || + ausweisart === Enums.Ausweisart.GEGNachweisBedarfsausweis || + ausweisart === Enums.Ausweisart.GEGNachweisGewerbe;
-{#if !gegAnfrage} -
- -
-{/if} + {#if !gegAnfrage} +
+ +
+ {/if}

Energiesausweis erstellen

- {ausweisart} {prices[0]} € + {ausweisart} + {prices[0]} €

{#if gegAnfrage} - + {:else} - + {/if}
@@ -224,72 +266,107 @@ const gegAnfrage = (ausweisart === Enums.Ausweisart.GEGNachweisWohnen) || (auswe > {#if !gegAnfrage} - - -
-
-

Zusatzleistungen:

+ +
+ + + + + +
+
+
+

Zusatzleistungen:

- {#each services as service} -
- -
- {@html service.price} € inkl. Mwst -
-
{@html service.name}
-
- {/each} -
- -
-

Kosten:

- -
-
-
Netto-Preis Energieausweis
-
:
-
- {(price * 0.81).toFixed(2) + " €"} -
-
- -
-
Zusatzleistung (Prüfung Mehraufwand)
-
:
-
0.00 €
-
- -
-
19% gesetzl. MwSt.
-
:
-
- {(price * 0.19).toFixed(2) + " €"} -
-
-
-
Preis inkl. MwSt.
-
:
-
- {price.toFixed(2) + " €"} -
-
-
-
Bezahlmethode
-
:
-
- {bezahlmethode} + +
+ {@html service.price} € inkl. Mwst +
+
{@html service.name}
+
+ {/each} +
+ +
+

Kosten:

+ +
+
+
Netto-Preis Energieausweis
+
:
+
+ {(price * 0.81).toFixed(2) + " €"} +
+
+ +
+
Zusatzleistung (Prüfung Mehraufwand)
+
:
+
0.00 €
+
+ +
+
19% gesetzl. MwSt.
+
:
+
+ {(price * 0.19).toFixed(2) + " €"} +
+
+
+
Preis inkl. MwSt.
+
:
+
+ {price.toFixed(2) + " €"} +
+
+
+
Bezahlmethode
+
:
+
+ {aktiveBezahlmethode} +
-
{/if}
Speichern {#if gegAnfrage} - + {:else} - + {/if}
- - - +