diff --git a/.github/workflows/prevent-wrong-pr.yml b/.github/workflows/prevent-wrong-pr.yml index c2073db3..d25826c0 100644 --- a/.github/workflows/prevent-wrong-pr.yml +++ b/.github/workflows/prevent-wrong-pr.yml @@ -13,6 +13,8 @@ jobs: steps: - name: Prevent dev merges run: | + echo "${{ github.head_ref }}"; + echo "${{ github.base_ref }}"; if [[ "${{ github.head_ref }}" == "dev" ]]; then echo "ERROR: Merging 'dev' into '${{ github.base_ref }}' is forbidden!" exit 1 @@ -21,6 +23,8 @@ jobs: - name: Allow only staging into main if: github.base_ref == 'main' run: | + echo "${{ github.head_ref }}"; + echo "${{ github.base_ref }}"; if [[ "${{ github.head_ref }}" != "staging" ]]; then echo "ERROR: Only 'staging' branch is allowed to merge into 'main'. Current: '${{ github.head_ref }}'" exit 1 diff --git a/src/astro-typesafe-api-caller.ts b/src/astro-typesafe-api-caller.ts index 85eb31a1..478d3c24 100644 --- a/src/astro-typesafe-api-caller.ts +++ b/src/astro-typesafe-api-caller.ts @@ -5,7 +5,6 @@ export const createCaller = createCallerFactory({ "klimafaktoren": await import("../src/pages/api/klimafaktoren.ts"), "postleitzahlen": await import("../src/pages/api/postleitzahlen.ts"), "unterlage": await import("../src/pages/api/unterlage.ts"), - "aufnahme": await import("../src/pages/api/aufnahme/index.ts"), "admin/ausstellen": await import("../src/pages/api/admin/ausstellen.ts"), "admin/bedarfsausweis-ausstellen": await import("../src/pages/api/admin/bedarfsausweis-ausstellen.ts"), "admin/bestellbestaetigung": await import("../src/pages/api/admin/bestellbestaetigung.ts"), @@ -13,9 +12,11 @@ export const createCaller = createCallerFactory({ "admin/nicht-ausstellen": await import("../src/pages/api/admin/nicht-ausstellen.ts"), "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"), "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"), + "ausweise": await import("../src/pages/api/ausweise/index.ts"), "bedarfsausweis-gewerbe/[id]": await import("../src/pages/api/bedarfsausweis-gewerbe/[id].ts"), "bedarfsausweis-gewerbe": await import("../src/pages/api/bedarfsausweis-gewerbe/index.ts"), "bedarfsausweis-wohnen/[id]": await import("../src/pages/api/bedarfsausweis-wohnen/[id].ts"), @@ -34,6 +35,8 @@ export const createCaller = createCallerFactory({ "user/self": await import("../src/pages/api/user/self.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"), + "verbrauchsausweis-gewerbe": await import("../src/pages/api/verbrauchsausweis-gewerbe/index.ts"), "webhooks/mollie": await import("../src/pages/api/webhooks/mollie.ts"), "aufnahme/[id]/bilder": await import("../src/pages/api/aufnahme/[id]/bilder.ts"), "aufnahme/[id]": await import("../src/pages/api/aufnahme/[id]/index.ts"), diff --git a/src/components/Abrechnung/AbrechungTable.svelte b/src/components/Abrechnung/AbrechungTable.svelte new file mode 100644 index 00000000..03aa4efb --- /dev/null +++ b/src/components/Abrechnung/AbrechungTable.svelte @@ -0,0 +1,109 @@ + + + {#each periods as dt} + {@const jahrMonat = dt.format("Y-m")} + {#if jahrMonat in bestellungenNachMonat && bestellungenNachMonat[jahrMonat].length > 0} + + {@const provisionMonat = bestellungenNachMonat[jahrMonat].reduce((acc, bestellung) => { + if (bestellung.verbrauchsausweis_wohnen) { + return acc + provisionen[Enums.Ausweisart.VerbrauchsausweisWohnen]; + } + if (bestellung.bedarfsausweis_wohnen) { + return acc + provisionen[Enums.Ausweisart.BedarfsausweisWohnen]; + } + if (bestellung.verbrauchsausweis_gewerbe) { + return acc + provisionen[Enums.Ausweisart.VerbrauchsausweisGewerbe]; + } + + return acc; + }) * 1.19} + + + + + + + + + + + + + + + + {#each bestellungenNachMonat[jahrMonat] as bestellung} + {@const provisionBestellung = bestellung.verbrauchsausweis_wohnen ? provisionen[Enums.Ausweisart.VerbrauchsausweisWohnen] : bestellung.verbrauchsausweis_gewerbe ? provisionen[Enums.Ausweisart.VerbrauchsausweisGewerbe] : provisionen[Enums.Ausweisart.BedarfsausweisWohnen]} + + + + + + + + + + {/each} + + {/if} + {/each} + + + + \ No newline at end of file diff --git a/src/components/Dashboard/DashboardSidebar.svelte b/src/components/Dashboard/DashboardSidebar.svelte index 5a0e4767..a3706fe8 100644 --- a/src/components/Dashboard/DashboardSidebar.svelte +++ b/src/components/Dashboard/DashboardSidebar.svelte @@ -70,6 +70,7 @@ {/if} + Conversions
diff --git a/src/pages/dashboard/abrechnung/index.astro b/src/pages/dashboard/abrechnung/index.astro new file mode 100644 index 00000000..f0fe5e8a --- /dev/null +++ b/src/pages/dashboard/abrechnung/index.astro @@ -0,0 +1,334 @@ +--- +import AbrechungTable from "#components/Abrechnung/AbrechungTable.svelte"; +import { Enums, prisma } from "#lib/server/prisma"; +import { getCurrentUser } from "#lib/server/user"; +import moment from "moment"; + + +const start = moment(Astro.url.searchParams.get("start")) +const end = moment(Astro.url.searchParams.get("end")) + +let startdatum = start.toDate(); +let enddatum = end.toDate(); + +const benutzer = await getCurrentUser(Astro) + +if (!benutzer) { + return Astro.redirect("/404") +} + +const provisionen={ + [Enums.Ausweisart.VerbrauchsausweisWohnen]: 10, + [Enums.Ausweisart.BedarfsausweisWohnen]: 10, + [Enums.Ausweisart.VerbrauchsausweisGewerbe]: 10, +} + +// $kommission = db()->one("SELECT abr_va, abr_ba, abr_vanw FROM users WHERE resellercode = :resellercode", ["resellercode" => $resellercode]); +// Select every entry from database where user was involved. +let bestellungen; +if (start.isValid() && end.isValid()) { + bestellungen = await prisma.rechnung.findMany({ + where: { + partner_code: "immowelt", + OR: [{ + verbrauchsausweis_gewerbe: { + ausgestellt: true + } + }, + { + bedarfsausweis_wohnen: { + ausgestellt: true + } + }, + { + verbrauchsausweis_wohnen: { + ausgestellt: true + } + }], + AND: [{ + created_at: { + gte: startdatum + }, + }, { + created_at: { + lte: enddatum + }, + }] + }, + orderBy: { + created_at: "desc" + }, + include: { + bedarfsausweis_wohnen: true, + verbrauchsausweis_gewerbe: true, + verbrauchsausweis_wohnen: true + } + }); +} else { + bestellungen = await prisma.rechnung.findMany({ + where: { + partner_code: "immowelt", + OR: [{ + verbrauchsausweis_gewerbe: { + ausgestellt: true + } + }, + { + bedarfsausweis_wohnen: { + ausgestellt: true + } + }, + { + verbrauchsausweis_wohnen: { + ausgestellt: true + } + }] + }, + orderBy: { + created_at: "desc" + }, + include: { + bedarfsausweis_wohnen: true, + verbrauchsausweis_gewerbe: true, + verbrauchsausweis_wohnen: true + } + }); +} + +// Wann wurde der partner_code zum ersten mal benutzt? +const partnerCodeErstesMal = (await prisma.rechnung.findFirst({ + select: { + created_at: true + }, + where: { + partner_code: "immowelt", + OR: [{ + verbrauchsausweis_gewerbe: { + ausgestellt: true + } + }, + { + bedarfsausweis_wohnen: { + ausgestellt: true + } + }, + { + verbrauchsausweis_wohnen: { + ausgestellt: true + } + }], + created_at: { + gte: moment().set("year", 2020).set("dayOfYear", 1).toDate() + } + }, + orderBy: { + created_at: "asc" + } +}))?.created_at + +let provision = 0; +const ausweisarten: string[] = []; +for (const bestellung of bestellungen) { + if (bestellung.verbrauchsausweis_wohnen) { + ausweisarten.push(Enums.Ausweisart.VerbrauchsausweisWohnen) + provision += provisionen[Enums.Ausweisart.VerbrauchsausweisWohnen] + } + if (bestellung.bedarfsausweis_wohnen) { + ausweisarten.push(Enums.Ausweisart.BedarfsausweisWohnen) + provision += provisionen[Enums.Ausweisart.BedarfsausweisWohnen] + } + if (bestellung.verbrauchsausweis_gewerbe) { + ausweisarten.push(Enums.Ausweisart.VerbrauchsausweisGewerbe) + provision += provisionen[Enums.Ausweisart.VerbrauchsausweisGewerbe] + } +} + +--- + + + + + + + + Reporting | online-energieausweis.org + + + + + + + + + + + + + + + +
+
+IBCornelsen +
Erziehlte Conversions von {benutzer.email}
+
+ +
+ + + + + + + + + + +
+ + +
+ + + + + + \ No newline at end of file