diff --git a/src/astro-typesafe-api-caller.ts b/src/astro-typesafe-api-caller.ts index 478d3c24..dc71b7df 100644 --- a/src/astro-typesafe-api-caller.ts +++ b/src/astro-typesafe-api-caller.ts @@ -13,6 +13,10 @@ export const createCaller = createCallerFactory({ "admin/registriernummer": await import("../src/pages/api/admin/registriernummer.ts"), "admin/stornieren": await import("../src/pages/api/admin/stornieren.ts"), "aufnahme": await import("../src/pages/api/aufnahme/index.ts"), +<<<<<<< Updated upstream +======= + "ausweise": await import("../src/pages/api/ausweise/index.ts"), +>>>>>>> Stashed changes "auth/access-token": await import("../src/pages/api/auth/access-token.ts"), "auth/passwort-vergessen": await import("../src/pages/api/auth/passwort-vergessen.ts"), "auth/refresh-token": await import("../src/pages/api/auth/refresh-token.ts"), @@ -33,6 +37,8 @@ export const createCaller = createCallerFactory({ "ticket": await import("../src/pages/api/ticket/index.ts"), "user": await import("../src/pages/api/user/index.ts"), "user/self": await import("../src/pages/api/user/self.ts"), + "verbrauchsausweis-gewerbe/[id]": await import("../src/pages/api/verbrauchsausweis-gewerbe/[id].ts"), + "verbrauchsausweis-gewerbe": await import("../src/pages/api/verbrauchsausweis-gewerbe/index.ts"), "verbrauchsausweis-wohnen/[id]": await import("../src/pages/api/verbrauchsausweis-wohnen/[id].ts"), "verbrauchsausweis-wohnen": await import("../src/pages/api/verbrauchsausweis-wohnen/index.ts"), "verbrauchsausweis-gewerbe/[id]": await import("../src/pages/api/verbrauchsausweis-gewerbe/[id].ts"), diff --git a/src/components/Dashboard/DashboardAusweis.svelte b/src/components/Dashboard/DashboardAusweis.svelte index 00174081..eeb89516 100644 --- a/src/components/Dashboard/DashboardAusweis.svelte +++ b/src/components/Dashboard/DashboardAusweis.svelte @@ -257,6 +257,12 @@ let bedarfsausweisFileInput: HTMLInputElement; let bedarfsausweisAdditionalInput: HTMLInputElement; + + let dropdownOpen = false; + + function toggleDropdown() { + dropdownOpen = !dropdownOpen; + }
@@ -273,30 +279,41 @@ {/if}
+ {#if dropdownOpen}
+
+ +
+
+ - +
+ {#if ausweis.bestellt && rechnung} +
+ +
+ {/if} -
+ {/if} + +
{#if ausweis.ausgestellt} Ausgestellt diff --git a/src/modules/KundendatenModule.svelte b/src/modules/KundendatenModule.svelte index 335338b9..306d7145 100644 --- a/src/modules/KundendatenModule.svelte +++ b/src/modules/KundendatenModule.svelte @@ -46,9 +46,8 @@ export let rechnung: RechnungClient | null = null; export let ausweisart: Enums.Ausweisart; export let aktiveBezahlmethode: Bezahlmethoden = Enums.Bezahlmethoden.paypal; - export let partner_code: string; - + export let nurRechnungsadresseUpdate: Boolean | null = false; let email: string, vorname: string, name: string, empfaenger: string, strasse: string, plz: string, ort: string, zusatzzeile: string, telefon: string; @@ -67,9 +66,18 @@ vorname = impersonatedUser.vorname || ""; name = impersonatedUser.name || ""; telefon = impersonatedUser.telefon || ""; + email = impersonatedUser.email || ""; + if (rechnung){ + empfaenger = rechnung?.empfaenger || ""; + strasse = rechnung?.strasse || ""; + plz = rechnung?.plz || ""; + ort = rechnung?.ort || ""; + zusatzzeile = rechnung?.zusatzzeile || ""; + email = rechnung?.email || ""; + } } - let abweichende_versand_adresse = JSON.parse(localStorage.getItem("kundendaten.abweichende_versand_adresse") || "false") + let abweichende_versand_adresse = rechnung?.abweichende_versand_adresse ?? JSON.parse(localStorage.getItem("kundendaten.abweichende_versand_adresse") || "false") let versand_email: string | undefined, versand_zusatzzeile: string | undefined, @@ -77,16 +85,13 @@ versand_strasse: string | undefined, versand_plz: string | undefined, versand_ort: string | undefined; - $: { - if (!abweichende_versand_adresse) { - versand_email = email - versand_zusatzzeile = zusatzzeile - versand_empfaenger = empfaenger - versand_strasse = strasse - versand_plz = plz - versand_ort = ort - } - } + + versand_email = "";//Todo Datenbankfeld fehlt noch + versand_zusatzzeile = rechnung?.versand_zusatzzeile ?? zusatzzeile; + versand_empfaenger = rechnung?.versand_empfaenger ?? empfaenger; + versand_strasse = rechnung?.versand_strasse ?? strasse; + versand_plz = rechnung?.versand_plz ?? plz; + versand_ort = rechnung?.versand_ort ?? ort; $: { // Wir speichern jede Änderung an den Kundendaten im localStorage ab. @@ -274,6 +279,39 @@ resultUser = await benutzerSpeichern(benutzerObjekt); + + let id: string, checkout_url: string | undefined; + + if (rechnung) { + const result = await api.rechnung._id.PATCH.fetch({ + bezahlmethode: aktiveBezahlmethode, + abweichende_versand_adresse: abweichende_versand_adresse, + empfaenger: empfaenger, + strasse: strasse, + plz: plz, + ort: ort, + zusatzzeile: zusatzzeile, + versand_empfaenger: versand_empfaenger, + versand_strasse: versand_strasse, + versand_plz: versand_plz, + versand_ort: versand_ort, + telefon: telefon, + email: email, + versand_zusatzzeile: versand_zusatzzeile + }, { + params: { + id: rechnung.id + }, + headers: { + Authorization: `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}`, + }, + }) + + id = result.id + checkout_url = result.checkout_url + } + + } catch(e) { addNotification({ dismissable: true, @@ -369,6 +407,7 @@ strasse: strasse, plz: plz, ort: ort, + zusatzzeile: zusatzzeile, versand_empfaenger: versand_empfaenger, versand_strasse: versand_strasse, versand_plz: versand_plz, @@ -399,13 +438,16 @@ strasse: strasse, plz: plz, ort: ort, + zusatzzeile: zusatzzeile, versand_empfaenger: versand_empfaenger, versand_strasse: versand_strasse, versand_plz: versand_plz, versand_ort: versand_ort, + versand_zusatzzeile: versand_zusatzzeile, telefon: telefon, ausweis_id: ausweis.id, - partner_code + partner_code, + abweichende_versand_adresse: abweichende_versand_adresse }, { headers: { @@ -445,6 +487,7 @@ let form: HTMLFormElement; +{#if !nurRechnungsadresseUpdate}
{/if}
- +{/if}
@@ -780,7 +823,7 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
- + - {#if (ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen || ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe || ausweisart === Enums.Ausweisart.BedarfsausweisWohnen) && (ausweis.ausweistyp === Enums.AusweisTyp.Standard || ausweis.ausweistyp === Enums.AusweisTyp.standardXL)} + {#if (ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen || ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe || ausweisart === Enums.Ausweisart.BedarfsausweisWohnen) && (ausweis.ausweistyp === Enums.AusweisTyp.Standard || ausweis.ausweistyp === Enums.AusweisTyp.standardXL) && (!nurRechnungsadresseUpdate)}

Bitte untenstehende Punkte bestätigen. Bitte gehen Sie gegebenenfalls zurück zum Formular und überprüfen bzw. korrigieren Ihre Eingaben.

@@ -1115,29 +1158,31 @@ sm:grid-cols-[min-content_min-content_min-content] sm:justify-self-end sm:mt-8" - {#if rechnung && rechnung.status === "paid"} - - - {:else} - {#if gegAnfrage} + {#if !nurRechnungsadresseUpdate} + {#if rechnung && rechnung.status === "paid"} + bestellen()}>Absenden {:else} - + {#if gegAnfrage} + + {:else} + + {/if} {/if} {/if} diff --git a/src/pages/api/rechnung/[id].ts b/src/pages/api/rechnung/[id].ts index e19131b3..5f70c5e6 100644 --- a/src/pages/api/rechnung/[id].ts +++ b/src/pages/api/rechnung/[id].ts @@ -16,12 +16,14 @@ export const PATCH = defineApiRoute({ strasse: true, telefon: true, empfaenger: true, + zusatzzeile: true, versand_empfaenger: true, versand_ort: true, versand_plz: true, versand_strasse: true, versand_zusatzzeile: true, - abweichende_versand_adresse: true + abweichende_versand_adresse: true, + email: true }), output: z.object({ checkout_url: z.string().optional(), @@ -31,22 +33,39 @@ export const PATCH = defineApiRoute({ headers: authorizationHeaders, async fetch(input, context, user) { // Wir holen uns die Rechnung - const rechnung = await prisma.rechnung.findUnique({ - where: { - id: context.params.id, - benutzer: { - id: user.id + let rechnung; + if (user.rolle !== Enums.BenutzerRolle.ADMIN) { + rechnung = await prisma.rechnung.findUnique({ + where: { + id: context.params.id, + benutzer: { + id: user.id + } + }, + include: { + bedarfsausweis_gewerbe: true, + bedarfsausweis_wohnen: true, + geg_nachweis_gewerbe: true, + geg_nachweis_wohnen: true, + verbrauchsausweis_gewerbe: true, + verbrauchsausweis_wohnen: true } - }, - include: { - bedarfsausweis_gewerbe: true, - bedarfsausweis_wohnen: true, - geg_nachweis_gewerbe: true, - geg_nachweis_wohnen: true, - verbrauchsausweis_gewerbe: true, - verbrauchsausweis_wohnen: true - } - }) + }) + } else { + rechnung = await prisma.rechnung.findUnique({ + where: { + id: context.params.id + }, + include: { + bedarfsausweis_gewerbe: true, + bedarfsausweis_wohnen: true, + geg_nachweis_gewerbe: true, + geg_nachweis_wohnen: true, + verbrauchsausweis_gewerbe: true, + verbrauchsausweis_wohnen: true + } + }) + } if (!rechnung) { throw new APIError({ @@ -66,12 +85,14 @@ export const PATCH = defineApiRoute({ strasse: input.strasse, telefon: input.telefon, empfaenger: input.empfaenger, + zusatzzeile: input.zusatzzeile, versand_empfaenger: input.versand_empfaenger, versand_ort: input.versand_ort, versand_plz: input.versand_plz, versand_strasse: input.versand_strasse, versand_zusatzzeile: input.versand_zusatzzeile, abweichende_versand_adresse: input.abweichende_versand_adresse, + email: input.email } }) diff --git a/src/pages/dashboard/rechnung/aendern.astro b/src/pages/dashboard/rechnung/aendern.astro new file mode 100644 index 00000000..cfc37b59 --- /dev/null +++ b/src/pages/dashboard/rechnung/aendern.astro @@ -0,0 +1,108 @@ +--- +import { encodeToken } from "#lib/auth/token"; +import { TokenType } from "#lib/auth/types"; +import { API_ACCESS_TOKEN_COOKIE_NAME, API_REFRESH_TOKEN_COOKIE_NAME } from "#lib/constants"; +import { Enums, prisma } from "#lib/server/prisma"; +import moment from "moment"; +import { createCaller } from "src/astro-typesafe-api-caller"; +import KundendatenModule from "#modules/KundendatenModule.svelte"; +import AusweisLayout from "#layouts/AusweisLayoutPruefung.astro"; +import { getCurrentUser, getOtherUser } from "#lib/server/user"; +import { getAusweisartFromId } from "#components/Ausweis/types"; +import { getAufnahme, getBedarfsausweisWohnen, getBilder, getObjekt, getRechnung, getUnterlagen, getVerbrauchsausweisGewerbe, getVerbrauchsausweisWohnen } from "#lib/server/db"; +import { BenutzerClient } from "#components/Ausweis/types.js"; + +function getExistingAusweis(rechnung) { + if (rechnung.verbrauchsausweis_wohnen) { + return rechnung.verbrauchsausweis_wohnen; + } + if (rechnung.verbrauchsausweis_gewerbe) { + return rechnung.verbrauchsausweis_gewerbe; + } + if (rechnung.bedarfsausweis_wohnen) { + return rechnung.bedarfsausweis_wohnen ; + } + if (rechnung.bedarfsausweis_gewerbe) { + return rechnung.bedarfsausweis_gewerbe; + } + if (rechnung.geg_nachweis_gewerbe) { + return rechnung.geg_nachweis_gewerbe; + } + if (rechnung.geg_nachweis_wohnen) { + return rechnung.geg_nachweis_wohnen; + } + return null; +} + +const user = await getCurrentUser(Astro); + +if (!user) { + return Astro.redirect("/auth/login") +} + +const rechnungid = Astro.url.searchParams.get("rechnungid") + +if (!rechnungid) { + return Astro.redirect("/404") +} + +let rechnung; + +//Only Admin can read foreign invoices +if (user.rolle !== Enums.BenutzerRolle.ADMIN) { + rechnung = await prisma.rechnung.findUnique({ + where: { + id: rechnungid, + benutzer_id: user.id + }, + include: { + verbrauchsausweis_wohnen: true, + verbrauchsausweis_gewerbe: true, + bedarfsausweis_wohnen: true, + bedarfsausweis_gewerbe: true, + geg_nachweis_gewerbe: true, + geg_nachweis_wohnen: true + } + }) +} else { + rechnung = await prisma.rechnung.findUnique({ + where: { + id: rechnungid, + }, + include: { + verbrauchsausweis_wohnen: true, + verbrauchsausweis_gewerbe: true, + bedarfsausweis_wohnen: true, + bedarfsausweis_gewerbe: true, + geg_nachweis_gewerbe: true, + geg_nachweis_wohnen: true + } + }) +} + +if (!rechnung) { + return Astro.redirect("/404") +} + +const ausweis = getExistingAusweis(rechnung); +const ausweisart = getAusweisartFromId(ausweis.id) + +let aufnahme, objekt, bilder, unterlagen, partner_code; + +aufnahme = await getAufnahme(ausweis.aufnahme_id) +objekt = await getObjekt(aufnahme?.objekt_id) +bilder = await getBilder(ausweis.aufnahme_id) +unterlagen = await getUnterlagen(ausweis.aufnahme_id) + + +let impersonatedUser: Partial | null = null; + +if (user){ + if (user.id !== ausweis.benutzer_id && ausweis.benutzer_id !== undefined){ + impersonatedUser = await getOtherUser(Astro, ausweis.benutzer_id) || {} + } +} +--- + + + \ No newline at end of file