Bestellung
This commit is contained in:
@@ -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<RechnungClient> = {
|
||||
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;
|
||||
</script>
|
||||
|
||||
<div
|
||||
@@ -183,16 +218,19 @@ const gegAnfrage = (ausweisart === Enums.Ausweisart.GEGNachweisWohnen) || (auswe
|
||||
2xl:grid-cols-2 2xl:gap-x-8
|
||||
"
|
||||
>
|
||||
{#if !gegAnfrage}
|
||||
<div id="performance-box" class="w-full box relative px-4 order-1 self-stretch grid grid-cols-1">
|
||||
<PerformanceScore
|
||||
bind:ausweis
|
||||
bind:aufnahme={aufnahme}
|
||||
bind:objekt={objekt}
|
||||
{ausweisart}
|
||||
/>
|
||||
</div>
|
||||
{/if}
|
||||
{#if !gegAnfrage}
|
||||
<div
|
||||
id="performance-box"
|
||||
class="w-full box relative px-4 order-1 self-stretch grid grid-cols-1"
|
||||
>
|
||||
<PerformanceScore
|
||||
bind:ausweis
|
||||
bind:aufnahme
|
||||
bind:objekt
|
||||
{ausweisart}
|
||||
/>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div
|
||||
id="progress-box"
|
||||
@@ -200,12 +238,16 @@ const gegAnfrage = (ausweisart === Enums.Ausweisart.GEGNachweisWohnen) || (auswe
|
||||
>
|
||||
<h1 class="text-secondary text-3xl m-0">Energiesausweis erstellen</h1>
|
||||
<h2 class="text-primary text-xl">
|
||||
{ausweisart} {prices[0]} €
|
||||
{ausweisart}
|
||||
{prices[0]} €
|
||||
</h2>
|
||||
{#if gegAnfrage}
|
||||
<Progressbar active={1} steps={["Gebäudedaten", "Kundendaten", "Bestätigung"]}/>
|
||||
<Progressbar
|
||||
active={1}
|
||||
steps={["Gebäudedaten", "Kundendaten", "Bestätigung"]}
|
||||
/>
|
||||
{:else}
|
||||
<Progressbar active={1}/>
|
||||
<Progressbar active={1} />
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
@@ -224,72 +266,107 @@ const gegAnfrage = (ausweisart === Enums.Ausweisart.GEGNachweisWohnen) || (auswe
|
||||
>
|
||||
|
||||
{#if !gegAnfrage}
|
||||
<Bereich bereich="3" title="Bezahlmethode">
|
||||
<Bezahlung bind:selectedPaymentType={bezahlmethode} /></Bereich
|
||||
>
|
||||
<div class="grid grid-cols-2 gap-x-6 my-6">
|
||||
<div class="zusaetze bereich-box bg-white">
|
||||
<h3>Zusatzleistungen:</h3>
|
||||
<Bereich bereich="3" title="Bezahlmethode">
|
||||
<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="zusaetze bereich-box bg-white">
|
||||
<h3>Zusatzleistungen:</h3>
|
||||
|
||||
{#each services as service}
|
||||
<div class="zusatz">
|
||||
<input
|
||||
type="checkbox"
|
||||
bind:checked={service.selected}
|
||||
/>
|
||||
<div class="text-right pr-6">
|
||||
<b>{@html service.price} €</b> inkl. Mwst
|
||||
</div>
|
||||
<div>{@html service.name}</div>
|
||||
</div>
|
||||
{/each}
|
||||
</div>
|
||||
|
||||
<div class=" bereich-box bg-white ring-primary/50 ring-2">
|
||||
<h3>Kosten:</h3>
|
||||
|
||||
<div class="ProduktKostenTabelle">
|
||||
<div class="zeile betrag">
|
||||
<div>Netto-Preis Energieausweis</div>
|
||||
<div>:</div>
|
||||
<div class="text-right">
|
||||
<b>{(price * 0.81).toFixed(2) + " €"}</b>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="zeile betrag">
|
||||
<div>Zusatzleistung (Prüfung Mehraufwand)</div>
|
||||
<div>:</div>
|
||||
<div class="text-right"><b>0.00 €</b></div>
|
||||
</div>
|
||||
|
||||
<div class="zeile betrag">
|
||||
<div>19% gesetzl. MwSt.</div>
|
||||
<div>:</div>
|
||||
<div class="text-right">
|
||||
<b>{(price * 0.19).toFixed(2) + " €"}</b>
|
||||
</div>
|
||||
</div>
|
||||
<div class="zeile betrag mt-4">
|
||||
<div><b>Preis inkl. MwSt.</b></div>
|
||||
<div>:</div>
|
||||
<div class="text-right">
|
||||
<b>{price.toFixed(2) + " €"}</b>
|
||||
</div>
|
||||
</div>
|
||||
<div class="zeile betrag mt-4 items-center">
|
||||
<div><b>Bezahlmethode</b></div>
|
||||
<div>:</div>
|
||||
<div class="justify-self-end">
|
||||
<img
|
||||
src="images/{bezahlmethode}.png"
|
||||
alt={bezahlmethode}
|
||||
{#each services as service}
|
||||
<div class="zusatz">
|
||||
<input
|
||||
type="checkbox"
|
||||
bind:checked={service.selected}
|
||||
/>
|
||||
<div class="text-right pr-6">
|
||||
<b>{@html service.price} €</b> inkl. Mwst
|
||||
</div>
|
||||
<div>{@html service.name}</div>
|
||||
</div>
|
||||
{/each}
|
||||
</div>
|
||||
|
||||
<div class=" bereich-box bg-white ring-primary/50 ring-2">
|
||||
<h3>Kosten:</h3>
|
||||
|
||||
<div class="ProduktKostenTabelle">
|
||||
<div class="zeile betrag">
|
||||
<div>Netto-Preis Energieausweis</div>
|
||||
<div>:</div>
|
||||
<div class="text-right">
|
||||
<b>{(price * 0.81).toFixed(2) + " €"}</b>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="zeile betrag">
|
||||
<div>Zusatzleistung (Prüfung Mehraufwand)</div>
|
||||
<div>:</div>
|
||||
<div class="text-right"><b>0.00 €</b></div>
|
||||
</div>
|
||||
|
||||
<div class="zeile betrag">
|
||||
<div>19% gesetzl. MwSt.</div>
|
||||
<div>:</div>
|
||||
<div class="text-right">
|
||||
<b>{(price * 0.19).toFixed(2) + " €"}</b>
|
||||
</div>
|
||||
</div>
|
||||
<div class="zeile betrag mt-4">
|
||||
<div><b>Preis inkl. MwSt.</b></div>
|
||||
<div>:</div>
|
||||
<div class="text-right">
|
||||
<b>{price.toFixed(2) + " €"}</b>
|
||||
</div>
|
||||
</div>
|
||||
<div class="zeile betrag mt-4 items-center">
|
||||
<div><b>Bezahlmethode</b></div>
|
||||
<div>:</div>
|
||||
<div class="justify-self-end">
|
||||
<img
|
||||
src="images/{aktiveBezahlmethode}.png"
|
||||
alt={aktiveBezahlmethode}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div
|
||||
@@ -302,15 +379,23 @@ const gegAnfrage = (ausweisart === Enums.Ausweisart.GEGNachweisWohnen) || (auswe
|
||||
<button class="button">Speichern</button>
|
||||
|
||||
{#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}
|
||||
<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}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--
|
||||
<!--
|
||||
<div class="bereich-box pr-12 mt-6">
|
||||
<Pruefung
|
||||
bereich="A"
|
||||
@@ -439,8 +524,7 @@ const gegAnfrage = (ausweisart === Enums.Ausweisart.GEGNachweisWohnen) || (auswe
|
||||
</div>
|
||||
<ButtonZurueckSpeichernKaufabschluss bind:ausweis bind:aufnahme bind:objekt bind:bilder bind:user /> -->
|
||||
|
||||
<!-- <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">
|
||||
h3 {
|
||||
|
||||
Reference in New Issue
Block a user