Bestellung
This commit is contained in:
@@ -1,56 +0,0 @@
|
|||||||
<script lang="ts">
|
|
||||||
|
|
||||||
import HelpLabel from "#components/labels/HelpLabel.svelte";
|
|
||||||
import Inputlabel from "#components/labels/InputLabel.svelte";
|
|
||||||
import ZipSearch from "#components/PlzSuche.svelte";
|
|
||||||
|
|
||||||
import { Bezahlmethoden, Enums } from "@ibcornelsen/database/client";
|
|
||||||
import PaymentOption from "#components/PaymentOption.svelte";
|
|
||||||
|
|
||||||
export let selectedPaymentType: Bezahlmethoden =
|
|
||||||
Enums.Bezahlmethoden.paypal;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</script>
|
|
||||||
|
|
||||||
|
|
||||||
<div id="bezahlung" class="bereich-box grid
|
|
||||||
grid-cols-5 justify-around justify-items-center items-center">
|
|
||||||
|
|
||||||
<PaymentOption
|
|
||||||
paymentType={Enums.Bezahlmethoden.paypal}
|
|
||||||
bind:selectedPaymentType
|
|
||||||
name={"PayPal"}
|
|
||||||
icon={"/images/paypal.png"}
|
|
||||||
></PaymentOption>
|
|
||||||
<PaymentOption
|
|
||||||
paymentType={Enums.Bezahlmethoden.sofort}
|
|
||||||
bind:selectedPaymentType
|
|
||||||
name={"Sofort"}
|
|
||||||
icon={"/images/sofort.png"}
|
|
||||||
></PaymentOption>
|
|
||||||
<PaymentOption
|
|
||||||
paymentType={Enums.Bezahlmethoden.giropay}
|
|
||||||
bind:selectedPaymentType
|
|
||||||
name={"Giropay"}
|
|
||||||
icon={"/images/giropay.png"}
|
|
||||||
></PaymentOption>
|
|
||||||
<PaymentOption
|
|
||||||
paymentType={Enums.Bezahlmethoden.creditcard}
|
|
||||||
bind:selectedPaymentType
|
|
||||||
name={"Kreditkarte"}
|
|
||||||
icon={"/images/creditcard.png"}
|
|
||||||
></PaymentOption>
|
|
||||||
<PaymentOption
|
|
||||||
paymentType={Enums.Bezahlmethoden.rechnung}
|
|
||||||
bind:selectedPaymentType
|
|
||||||
name={"Rechnung"}
|
|
||||||
icon={"/images/rechnung.png"}
|
|
||||||
></PaymentOption>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
@@ -1,33 +1,27 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import type { Bezahlmethoden } from "@ibcornelsen/database/client";
|
import type { Bezahlmethoden } from "@ibcornelsen/database/client";
|
||||||
import Input from "radix-svelte-icons/src/lib/icons/Input.svelte";
|
|
||||||
|
|
||||||
export let name: string;
|
export let name: string;
|
||||||
export let icon: string;
|
export let icon: string;
|
||||||
export let paymentType: Bezahlmethoden;
|
export let bezahlmethode: Bezahlmethoden;
|
||||||
export let selectedPaymentType: Bezahlmethoden;
|
export let aktiveBezahlmethode: Bezahlmethoden;
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
|
<input
|
||||||
|
type="radio"
|
||||||
|
data-cy={bezahlmethode}
|
||||||
|
id={bezahlmethode}
|
||||||
|
name="paymentType"
|
||||||
|
on:change={() => (aktiveBezahlmethode = bezahlmethode)}
|
||||||
|
/>
|
||||||
|
|
||||||
<input type="radio" data-cy={paymentType} id={paymentType} name="paymentType" on:change={() => selectedPaymentType = paymentType} />
|
<label for={bezahlmethode}>
|
||||||
|
<div
|
||||||
<label for={paymentType}>
|
class="grid grid-rows-[1fr_20px] justify-items-center items-center cursor-pointer"
|
||||||
<div class="grid grid-rows-[1fr_20px] justify-items-center items-center cursor-pointer">
|
>
|
||||||
<img src={icon} alt={name} />
|
<img src={icon} alt={name} />
|
||||||
{name}
|
{name}
|
||||||
</div>
|
</div>
|
||||||
</label>
|
</label>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!--
|
|
||||||
<button type="button" class="bg-white px-4 py-2" on:click={() => selectedPaymentType = paymentType}>
|
|
||||||
<div class="grid grid-rows-[max-content-max-content] w-fit">
|
|
||||||
<img src={icon} alt={name} />
|
|
||||||
<span aria-label={name}>
|
|
||||||
{name}
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</button>
|
|
||||||
-->
|
|
||||||
@@ -21,16 +21,42 @@ export enum VALID_UUID_PREFIXES {
|
|||||||
"gnw" = "GEG Nachweis Wohnen"
|
"gnw" = "GEG Nachweis Wohnen"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export enum AusweisTyp {
|
||||||
|
Standard,
|
||||||
|
Beratung,
|
||||||
|
Offline
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Ein Objekt welches alle definierten Preise für unsere Basisprodukte enthält.
|
* Ein Objekt welches alle definierten Preise für unsere Basisprodukte enthält.
|
||||||
*/
|
*/
|
||||||
export const PRICES: Record<Enums.Ausweisart, [number, number, number]> = {
|
export const PRICES: Record<Enums.Ausweisart, Record<AusweisTyp, number>> = {
|
||||||
// per E-Mail , inkl.Beratung, offline
|
// per E-Mail , inkl.Beratung, offline
|
||||||
BedarfsausweisWohnen: [95, 125, 295],
|
BedarfsausweisWohnen: {
|
||||||
VerbrauchsausweisWohnen: [65, 95, 180],
|
[AusweisTyp.Standard]: 95,
|
||||||
VerbrauchsausweisGewerbe: [95, 125, 360],
|
[AusweisTyp.Beratung]: 125,
|
||||||
BedarfsausweisGewerbe: [500, 700, 1000],
|
[AusweisTyp.Offline]: 295
|
||||||
GEGNachweisWohnen: [500, 700, 1000]
|
},
|
||||||
|
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<
|
export const SERVICES: Record<
|
||||||
|
|||||||
@@ -15,6 +15,8 @@ export async function sendInvoiceMail(
|
|||||||
rechnung: Rechnung,
|
rechnung: Rechnung,
|
||||||
user: Benutzer
|
user: Benutzer
|
||||||
) {
|
) {
|
||||||
|
console.log(ausweis);
|
||||||
|
|
||||||
const aufnahme = await prisma.aufnahme.findUnique({
|
const aufnahme = await prisma.aufnahme.findUnique({
|
||||||
where: {
|
where: {
|
||||||
id: ausweis.aufnahme_id,
|
id: ausweis.aufnahme_id,
|
||||||
|
|||||||
@@ -4,12 +4,15 @@
|
|||||||
import Bereich from "#components/labels/Bereich.svelte";
|
import Bereich from "#components/labels/Bereich.svelte";
|
||||||
import Ansprechpartner from "#components/Ausweis/Ansprechpartner.svelte";
|
import Ansprechpartner from "#components/Ausweis/Ansprechpartner.svelte";
|
||||||
import Rechnungsadresse from "#components/Ausweis/Rechnungsadresse.svelte";
|
import Rechnungsadresse from "#components/Ausweis/Rechnungsadresse.svelte";
|
||||||
import Bezahlung from "#components/Ausweis/Bezahlung.svelte";
|
|
||||||
import type { Bezahlmethoden } from "@ibcornelsen/database/client";
|
import type { Bezahlmethoden } from "@ibcornelsen/database/client";
|
||||||
import { Enums } from "@ibcornelsen/database/client";
|
import { Enums } from "@ibcornelsen/database/client";
|
||||||
import { dialogs } from "svelte-dialogs";
|
import { dialogs } from "svelte-dialogs";
|
||||||
import LoginDialog from "#components/LoginDialog.svelte";
|
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 Cookies from "js-cookie";
|
||||||
import {
|
import {
|
||||||
AufnahmeClient,
|
AufnahmeClient,
|
||||||
@@ -21,12 +24,15 @@
|
|||||||
} from "#components/Ausweis/types.js";
|
} from "#components/Ausweis/types.js";
|
||||||
import { validateAccessTokenClient } from "src/client/lib/validateAccessToken.js";
|
import { validateAccessTokenClient } from "src/client/lib/validateAccessToken.js";
|
||||||
import { api } from "astro-typesafe-api/client";
|
import { api } from "astro-typesafe-api/client";
|
||||||
|
import PaymentOption from "#components/PaymentOption.svelte";
|
||||||
|
|
||||||
export let user: BenutzerClient;
|
export let user: BenutzerClient;
|
||||||
export let ausweis: VerbrauchsausweisWohnenClient;
|
export let ausweis: VerbrauchsausweisWohnenClient;
|
||||||
export let aufnahme: AufnahmeClient;
|
export let aufnahme: AufnahmeClient;
|
||||||
export let objekt: ObjektClient;
|
export let objekt: ObjektClient;
|
||||||
export let ausweisart: Enums.Ausweisart;
|
export let ausweisart: Enums.Ausweisart;
|
||||||
|
export let aktiveBezahlmethode: Bezahlmethoden = Enums.Bezahlmethoden.paypal;
|
||||||
|
export let ausweis_typ: AusweisTyp = AusweisTyp.Standard;
|
||||||
|
|
||||||
let rechnung: Partial<RechnungClient> = {
|
let rechnung: Partial<RechnungClient> = {
|
||||||
email: user.email,
|
email: user.email,
|
||||||
@@ -39,9 +45,14 @@
|
|||||||
versand_plz: user.plz,
|
versand_plz: user.plz,
|
||||||
versand_ort: user.ort,
|
versand_ort: user.ort,
|
||||||
telefon: user.telefon,
|
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)",
|
name: "Qualitätsdruck per Post (zusätzlich zur PDF Version)",
|
||||||
id: Enums.Service.Qualitaetsdruck,
|
id: Enums.Service.Qualitaetsdruck,
|
||||||
@@ -68,9 +79,6 @@
|
|||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
export let bezahlmethode: Bezahlmethoden =
|
|
||||||
Enums.Bezahlmethoden.paypal;
|
|
||||||
|
|
||||||
let prices = PRICES[ausweisart];
|
let prices = PRICES[ausweisart];
|
||||||
|
|
||||||
let basePrice: number = prices[0];
|
let basePrice: number = prices[0];
|
||||||
@@ -83,14 +91,21 @@
|
|||||||
);
|
);
|
||||||
|
|
||||||
const zurueck = {
|
const zurueck = {
|
||||||
[Enums.Ausweisart.VerbrauchsausweisWohnen]: `/energieausweis-erstellen/verbrauchsausweis-wohngebaeude?uid=${ausweis.uid}`,
|
[Enums.Ausweisart.VerbrauchsausweisWohnen]:
|
||||||
[Enums.Ausweisart.VerbrauchsausweisGewerbe]: `/energieausweis-erstellen/verbrauchsausweis-gewerbe?uid=${ausweis.uid}`,
|
`/energieausweis-erstellen/verbrauchsausweis-wohngebaeude?uid=${ausweis.uid}`,
|
||||||
[Enums.Ausweisart.BedarfsausweisWohnen]: `/energieausweis-erstellen/bedarfsausweis-wohnen?uid=${ausweis.uid}`,
|
[Enums.Ausweisart.VerbrauchsausweisGewerbe]:
|
||||||
[Enums.Ausweisart.BedarfsausweisGewerbe]: `/energieausweis-erstellen/bedarfsausweis-gewerbe?uid=${ausweis.uid}`,
|
`/energieausweis-erstellen/verbrauchsausweis-gewerbe?uid=${ausweis.uid}`,
|
||||||
[Enums.Ausweisart.GEGNachweisWohnen]: `/angebot-anfragen/geg-nachweis-wohnen-anfragen?uid=${ausweis.uid}`,
|
[Enums.Ausweisart.BedarfsausweisWohnen]:
|
||||||
[Enums.Ausweisart.GEGNachweisGewerbe]: `/angebot-anfragen/geg-nachweis-gewerbe-anfragen?uid=${ausweis.uid}`,
|
`/energieausweis-erstellen/bedarfsausweis-wohnen?uid=${ausweis.uid}`,
|
||||||
[Enums.Ausweisart.GEGNachweisBedarfsausweis]: `/angebot-anfragen/bedarfsausweis-gewerbe-anfragen?uid=${ausweis.uid}`,
|
[Enums.Ausweisart.BedarfsausweisGewerbe]:
|
||||||
}[ausweisart]
|
`/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) {
|
async function speichern(e: SubmitEvent) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
@@ -111,23 +126,27 @@
|
|||||||
// uid: ausweis.uid,
|
// uid: ausweis.uid,
|
||||||
// });
|
// });
|
||||||
|
|
||||||
localStorage.clear()
|
localStorage.clear();
|
||||||
window.location.href = `/kaufabschluss?uid=${ausweis.uid}`;
|
window.location.href = `/kaufabschluss?uid=${ausweis.uid}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function anfordern() {
|
async function anfordern() {
|
||||||
// TODO Angebot anfordern
|
// TODO Angebot anfordern
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async function bestellen() {
|
async function bestellen() {
|
||||||
const ausweisart = getAusweisartFromUUID(ausweis.uid) as Enums.Ausweisart;
|
const ausweisart = getAusweisartFromUUID(
|
||||||
|
ausweis.uid
|
||||||
|
) as Enums.Ausweisart;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const { uid, checkout_url } = await api.rechnung.PUT.fetch({
|
const { uid, checkout_url } = await api.rechnung.PUT.fetch(
|
||||||
|
{
|
||||||
ausweisart,
|
ausweisart,
|
||||||
bezahlmethode,
|
bezahlmethode: aktiveBezahlmethode,
|
||||||
services: services.filter(service => service.selected).map(service => service.id),
|
services: services
|
||||||
|
.filter((service) => service.selected)
|
||||||
|
.map((service) => service.id),
|
||||||
email: rechnung.email,
|
email: rechnung.email,
|
||||||
empfaenger: rechnung.empfaenger,
|
empfaenger: rechnung.empfaenger,
|
||||||
strasse: rechnung.strasse,
|
strasse: rechnung.strasse,
|
||||||
@@ -138,25 +157,26 @@
|
|||||||
versand_plz: rechnung.versand_plz,
|
versand_plz: rechnung.versand_plz,
|
||||||
versand_ort: rechnung.versand_ort,
|
versand_ort: rechnung.versand_ort,
|
||||||
telefon: rechnung.telefon,
|
telefon: rechnung.telefon,
|
||||||
ausweis_uid: ausweis.uid
|
ausweis_uid: ausweis.uid,
|
||||||
}, {
|
ausweis_typ,
|
||||||
|
},
|
||||||
|
{
|
||||||
headers: {
|
headers: {
|
||||||
Authorization: `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}`
|
Authorization: `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}`,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
})
|
);
|
||||||
|
|
||||||
// Alle alten Ausweisdateien im localStorage löschen.
|
// Alle alten Ausweisdateien im localStorage löschen.
|
||||||
localStorage.clear();
|
localStorage.clear();
|
||||||
|
|
||||||
if (bezahlmethode === Enums.Bezahlmethoden.rechnung) {
|
if (aktiveBezahlmethode === Enums.Bezahlmethoden.rechnung) {
|
||||||
window.location.href = `/payment/success?r=${uid}&a=${ausweis.uid}`
|
window.location.href = `/payment/success?r=${uid}&a=${ausweis.uid}`;
|
||||||
} else {
|
} else {
|
||||||
window.location.href = checkout_url as string;
|
window.location.href = checkout_url as string;
|
||||||
}
|
}
|
||||||
} catch(e) {
|
} catch (e) {}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO
|
* TODO
|
||||||
@@ -169,11 +189,26 @@
|
|||||||
Fehlende Angaben zum Sanierungsstand (Bei F mindestens 2 Haken), (Bei G mindestens 1 Haken)
|
Fehlende Angaben zum Sanierungsstand (Bei F mindestens 2 Haken), (Bei G mindestens 1 Haken)
|
||||||
*/
|
*/
|
||||||
let bestellenNichtMoeglich = false;
|
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)) {
|
if (
|
||||||
bestellenNichtMoeglich = true
|
((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;
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
@@ -184,11 +219,14 @@ const gegAnfrage = (ausweisart === Enums.Ausweisart.GEGNachweisWohnen) || (auswe
|
|||||||
"
|
"
|
||||||
>
|
>
|
||||||
{#if !gegAnfrage}
|
{#if !gegAnfrage}
|
||||||
<div id="performance-box" class="w-full box relative px-4 order-1 self-stretch grid grid-cols-1">
|
<div
|
||||||
|
id="performance-box"
|
||||||
|
class="w-full box relative px-4 order-1 self-stretch grid grid-cols-1"
|
||||||
|
>
|
||||||
<PerformanceScore
|
<PerformanceScore
|
||||||
bind:ausweis
|
bind:ausweis
|
||||||
bind:aufnahme={aufnahme}
|
bind:aufnahme
|
||||||
bind:objekt={objekt}
|
bind:objekt
|
||||||
{ausweisart}
|
{ausweisart}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
@@ -200,10 +238,14 @@ const gegAnfrage = (ausweisart === Enums.Ausweisart.GEGNachweisWohnen) || (auswe
|
|||||||
>
|
>
|
||||||
<h1 class="text-secondary text-3xl m-0">Energiesausweis erstellen</h1>
|
<h1 class="text-secondary text-3xl m-0">Energiesausweis erstellen</h1>
|
||||||
<h2 class="text-primary text-xl">
|
<h2 class="text-primary text-xl">
|
||||||
{ausweisart} {prices[0]} €
|
{ausweisart}
|
||||||
|
{prices[0]} €
|
||||||
</h2>
|
</h2>
|
||||||
{#if gegAnfrage}
|
{#if gegAnfrage}
|
||||||
<Progressbar active={1} steps={["Gebäudedaten", "Kundendaten", "Bestätigung"]}/>
|
<Progressbar
|
||||||
|
active={1}
|
||||||
|
steps={["Gebäudedaten", "Kundendaten", "Bestätigung"]}
|
||||||
|
/>
|
||||||
{:else}
|
{:else}
|
||||||
<Progressbar active={1} />
|
<Progressbar active={1} />
|
||||||
{/if}
|
{/if}
|
||||||
@@ -225,7 +267,42 @@ const gegAnfrage = (ausweisart === Enums.Ausweisart.GEGNachweisWohnen) || (auswe
|
|||||||
|
|
||||||
{#if !gegAnfrage}
|
{#if !gegAnfrage}
|
||||||
<Bereich bereich="3" title="Bezahlmethode">
|
<Bereich bereich="3" title="Bezahlmethode">
|
||||||
<Bezahlung bind:selectedPaymentType={bezahlmethode} /></Bereich
|
<div
|
||||||
|
id="bezahlung"
|
||||||
|
class="bereich-box grid
|
||||||
|
grid-cols-5 justify-around justify-items-center items-center"
|
||||||
|
>
|
||||||
|
<PaymentOption
|
||||||
|
bezahlmethode={Enums.Bezahlmethoden.paypal}
|
||||||
|
bind:aktiveBezahlmethode
|
||||||
|
name={"PayPal"}
|
||||||
|
icon={"/images/paypal.png"}
|
||||||
|
></PaymentOption>
|
||||||
|
<PaymentOption
|
||||||
|
bezahlmethode={Enums.Bezahlmethoden.sofort}
|
||||||
|
bind:aktiveBezahlmethode
|
||||||
|
name={"Sofort"}
|
||||||
|
icon={"/images/sofort.png"}
|
||||||
|
></PaymentOption>
|
||||||
|
<PaymentOption
|
||||||
|
bezahlmethode={Enums.Bezahlmethoden.giropay}
|
||||||
|
bind:aktiveBezahlmethode
|
||||||
|
name={"Giropay"}
|
||||||
|
icon={"/images/giropay.png"}
|
||||||
|
></PaymentOption>
|
||||||
|
<PaymentOption
|
||||||
|
bezahlmethode={Enums.Bezahlmethoden.creditcard}
|
||||||
|
bind:aktiveBezahlmethode
|
||||||
|
name={"Kreditkarte"}
|
||||||
|
icon={"/images/creditcard.png"}
|
||||||
|
></PaymentOption>
|
||||||
|
<PaymentOption
|
||||||
|
bezahlmethode={Enums.Bezahlmethoden.rechnung}
|
||||||
|
bind:aktiveBezahlmethode
|
||||||
|
name={"Rechnung"}
|
||||||
|
icon={"/images/rechnung.png"}
|
||||||
|
></PaymentOption>
|
||||||
|
</div></Bereich
|
||||||
>
|
>
|
||||||
<div class="grid grid-cols-2 gap-x-6 my-6">
|
<div class="grid grid-cols-2 gap-x-6 my-6">
|
||||||
<div class="zusaetze bereich-box bg-white">
|
<div class="zusaetze bereich-box bg-white">
|
||||||
@@ -282,8 +359,8 @@ const gegAnfrage = (ausweisart === Enums.Ausweisart.GEGNachweisWohnen) || (auswe
|
|||||||
<div>:</div>
|
<div>:</div>
|
||||||
<div class="justify-self-end">
|
<div class="justify-self-end">
|
||||||
<img
|
<img
|
||||||
src="images/{bezahlmethode}.png"
|
src="images/{aktiveBezahlmethode}.png"
|
||||||
alt={bezahlmethode}
|
alt={aktiveBezahlmethode}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -302,9 +379,17 @@ const gegAnfrage = (ausweisart === Enums.Ausweisart.GEGNachweisWohnen) || (auswe
|
|||||||
<button class="button">Speichern</button>
|
<button class="button">Speichern</button>
|
||||||
|
|
||||||
{#if gegAnfrage}
|
{#if gegAnfrage}
|
||||||
<button class="button cursor-pointer" data-cy="bestellen" on:click={anfordern} >Angebot anfordern</button>
|
<button
|
||||||
|
class="button cursor-pointer"
|
||||||
|
data-cy="bestellen"
|
||||||
|
on:click={anfordern}>Angebot anfordern</button
|
||||||
|
>
|
||||||
{:else}
|
{:else}
|
||||||
<button class="button cursor-pointer" data-cy="bestellen" on:click={bestellen} >Kostenpflichtig bestellen</button>
|
<button
|
||||||
|
class="button cursor-pointer"
|
||||||
|
data-cy="bestellen"
|
||||||
|
on:click={bestellen}>Kostenpflichtig bestellen</button
|
||||||
|
>
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -441,7 +526,6 @@ const gegAnfrage = (ausweisart === Enums.Ausweisart.GEGNachweisWohnen) || (auswe
|
|||||||
|
|
||||||
<!-- <ButtonZurueckSpeichernKaufabschluss bind:ausweis bind:aufnahme bind:objekt bind:bilder bind:user /> -->
|
<!-- <ButtonZurueckSpeichernKaufabschluss bind:ausweis bind:aufnahme bind:objekt bind:bilder bind:user /> -->
|
||||||
|
|
||||||
|
|
||||||
<style lang="postcss">
|
<style lang="postcss">
|
||||||
h3 {
|
h3 {
|
||||||
@apply text-[1.25rem] ml-0 font-bold mb-6;
|
@apply text-[1.25rem] ml-0 font-bold mb-6;
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import {
|
|||||||
} from "#lib/middleware/authorization.js";
|
} from "#lib/middleware/authorization.js";
|
||||||
import { UUidWithPrefix } from "#components/Ausweis/types.js";
|
import { UUidWithPrefix } from "#components/Ausweis/types.js";
|
||||||
import { getPrismaAusweisAdapter } from "#lib/server/ausweis.js";
|
import { getPrismaAusweisAdapter } from "#lib/server/ausweis.js";
|
||||||
|
import { AusweisTyp, PRICES, SERVICES } from "#lib/constants.js";
|
||||||
|
|
||||||
export const PUT = defineApiRoute({
|
export const PUT = defineApiRoute({
|
||||||
meta: {
|
meta: {
|
||||||
@@ -22,6 +23,7 @@ export const PUT = defineApiRoute({
|
|||||||
.object({
|
.object({
|
||||||
ausweisart: z.nativeEnum(Enums.Ausweisart),
|
ausweisart: z.nativeEnum(Enums.Ausweisart),
|
||||||
ausweis_uid: UUidWithPrefix,
|
ausweis_uid: UUidWithPrefix,
|
||||||
|
ausweis_typ: z.nativeEnum(AusweisTyp)
|
||||||
})
|
})
|
||||||
.merge(
|
.merge(
|
||||||
RechnungSchema.omit({
|
RechnungSchema.omit({
|
||||||
@@ -47,9 +49,13 @@ export const PUT = defineApiRoute({
|
|||||||
// Wir erstellen eine Mollie Payment Referenz und eine neue Rechnung in unserer Datenbank, daraufhin geben
|
// Wir erstellen eine Mollie Payment Referenz und eine neue Rechnung in unserer Datenbank, daraufhin geben
|
||||||
// wir eine Checkout URL zurück auf die der Nutzer weitergeleitet werden kann.
|
// wir eine Checkout URL zurück auf die der Nutzer weitergeleitet werden kann.
|
||||||
|
|
||||||
const { ausweis_uid, ausweisart, bezahlmethode, services } = input;
|
const { ausweis_uid, ausweisart, bezahlmethode, services, ausweis_typ } = input;
|
||||||
|
let betrag = PRICES[ausweisart][ausweis_typ]
|
||||||
|
|
||||||
// TODO: Services Implementieren
|
const servicePriceList = SERVICES[ausweisart]
|
||||||
|
for (const service of input.services) {
|
||||||
|
betrag += servicePriceList[service]
|
||||||
|
}
|
||||||
|
|
||||||
const adapter = getPrismaAusweisAdapter(ausweis_uid);
|
const adapter = getPrismaAusweisAdapter(ausweis_uid);
|
||||||
|
|
||||||
@@ -84,7 +90,7 @@ export const PUT = defineApiRoute({
|
|||||||
const rechnung = await prisma.rechnung.create({
|
const rechnung = await prisma.rechnung.create({
|
||||||
data: {
|
data: {
|
||||||
benutzer_id: user.id,
|
benutzer_id: user.id,
|
||||||
betrag: 0,
|
betrag,
|
||||||
bezahlmethode: bezahlmethode,
|
bezahlmethode: bezahlmethode,
|
||||||
status: Enums.Rechnungsstatus.open,
|
status: Enums.Rechnungsstatus.open,
|
||||||
aufnahme_id: ausweis.aufnahme_id,
|
aufnahme_id: ausweis.aufnahme_id,
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ if (!adapter) {
|
|||||||
return Astro.redirect("/")
|
return Astro.redirect("/")
|
||||||
}
|
}
|
||||||
|
|
||||||
const ausweis = adapter.findUnique({
|
const ausweis = await adapter.findUnique({
|
||||||
where: {
|
where: {
|
||||||
uid: uidAusweis
|
uid: uidAusweis
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user