233 lines
4.6 KiB
Plaintext
233 lines
4.6 KiB
Plaintext
---
|
|
import AbrechnungTable from "#components/Abrechnung/AbrechnungTable.svelte";
|
|
import BlankLayout from "#layouts/BlankLayout.astro";
|
|
import { getProvision } from "#lib/provision";
|
|
import { extrahiereAusweisAusFeldMitMehrerenAusweisen } from "#lib/server/ausweis";
|
|
import { Enums, prisma } from "#lib/server/prisma";
|
|
import { getCurrentUser } from "#lib/server/user";
|
|
import moment from "moment-timezone";
|
|
|
|
moment.tz.setDefault("Europe/Berlin");
|
|
|
|
const start = moment(Astro.url.searchParams.get("start"));
|
|
const end = moment(Astro.url.searchParams.get("end"));
|
|
|
|
let startdatum = start.isValid() ? start.toDate() : moment().startOf("month").toDate();
|
|
let enddatum = end.isValid() ? end.toDate() : moment().endOf("month").toDate();
|
|
|
|
const benutzer = await getCurrentUser(Astro);
|
|
|
|
if (!benutzer) {
|
|
return Astro.redirect("/404");
|
|
}
|
|
|
|
// $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: benutzer.partner_code,
|
|
OR: [
|
|
{
|
|
verbrauchsausweis_gewerbe: {
|
|
ausgestellt: true,
|
|
},
|
|
},
|
|
{
|
|
bedarfsausweis_wohnen: {
|
|
ausgestellt: true,
|
|
},
|
|
},
|
|
{
|
|
verbrauchsausweis_wohnen: {
|
|
ausgestellt: true,
|
|
},
|
|
},
|
|
],
|
|
AND: [
|
|
{
|
|
erstellt_am: {
|
|
gte: startdatum,
|
|
},
|
|
},
|
|
{
|
|
erstellt_am: {
|
|
lte: enddatum,
|
|
},
|
|
},
|
|
],
|
|
},
|
|
orderBy: {
|
|
erstellt_am: "desc",
|
|
},
|
|
include: {
|
|
bedarfsausweis_wohnen: {
|
|
include: {
|
|
aufnahme: {
|
|
include: {
|
|
objekt: true,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
verbrauchsausweis_gewerbe: {
|
|
include: {
|
|
aufnahme: {
|
|
include: {
|
|
objekt: true,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
verbrauchsausweis_wohnen: {
|
|
include: {
|
|
aufnahme: {
|
|
include: {
|
|
objekt: true,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
});
|
|
} else {
|
|
bestellungen = await prisma.rechnung.findMany({
|
|
where: {
|
|
partner_code: benutzer.partner_code,
|
|
OR: [
|
|
{
|
|
verbrauchsausweis_gewerbe: {
|
|
ausgestellt: true,
|
|
},
|
|
},
|
|
{
|
|
bedarfsausweis_wohnen: {
|
|
ausgestellt: true,
|
|
},
|
|
},
|
|
{
|
|
verbrauchsausweis_wohnen: {
|
|
ausgestellt: true,
|
|
},
|
|
},
|
|
],
|
|
},
|
|
orderBy: {
|
|
erstellt_am: "desc",
|
|
},
|
|
include: {
|
|
bedarfsausweis_wohnen: {
|
|
include: {
|
|
aufnahme: {
|
|
include: {
|
|
objekt: true,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
verbrauchsausweis_gewerbe: {
|
|
include: {
|
|
aufnahme: {
|
|
include: {
|
|
objekt: true,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
verbrauchsausweis_wohnen: {
|
|
include: {
|
|
aufnahme: {
|
|
include: {
|
|
objekt: true,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
});
|
|
}
|
|
|
|
// Wann wurde der partner_code zum ersten mal benutzt?
|
|
if (!startdatum) {
|
|
startdatum = (
|
|
await prisma.rechnung.findFirst({
|
|
select: {
|
|
erstellt_am: true,
|
|
},
|
|
where: {
|
|
partner_code: benutzer.partner_code,
|
|
OR: [
|
|
{
|
|
verbrauchsausweis_gewerbe: {
|
|
ausgestellt: true,
|
|
},
|
|
},
|
|
{
|
|
bedarfsausweis_wohnen: {
|
|
ausgestellt: true,
|
|
},
|
|
},
|
|
{
|
|
verbrauchsausweis_wohnen: {
|
|
ausgestellt: true,
|
|
},
|
|
},
|
|
],
|
|
erstellt_am: {
|
|
gte: moment().set("year", 2020).set("dayOfYear", 1).toDate(),
|
|
},
|
|
},
|
|
orderBy: {
|
|
erstellt_am: "asc",
|
|
},
|
|
})
|
|
)?.erstellt_am || moment().startOf("month").toDate();
|
|
}
|
|
|
|
|
|
const provisionen = await prisma.provisionen.findMany({
|
|
where: {
|
|
benutzer_id: benutzer.id
|
|
}
|
|
})
|
|
|
|
bestellungen = bestellungen.map((bestellung) =>
|
|
extrahiereAusweisAusFeldMitMehrerenAusweisen(bestellung)
|
|
);
|
|
|
|
let provision = 0;
|
|
for (const bestellung of bestellungen) {
|
|
const { provision_betrag, provision_prozent } = getProvision(bestellung.ausweis.ausweisart, bestellung.ausweis.ausweistyp, provisionen);
|
|
provision += provision_betrag;
|
|
}
|
|
---
|
|
|
|
<BlankLayout title="Monatliche Abrechnung">
|
|
<AbrechnungTable
|
|
bestellungen={bestellungen}
|
|
{provisionen}
|
|
startdatum={startdatum}
|
|
enddatum={enddatum}
|
|
email={benutzer.email}
|
|
client:load
|
|
/>
|
|
|
|
<div class="fixed bottom-0 left-0 right-0 bg-white p-4 shadow">
|
|
<div class="flex justify-between items-center">
|
|
<div>
|
|
<p>
|
|
Abrechnungsbetrag gesamt: <b>{provision.toFixed(2)} €</b>
|
|
</p>
|
|
</div>
|
|
<a
|
|
target="_blank"
|
|
rel="noreferrer noopener"
|
|
class="bg-secondary text-white px-4 py-2 rounded-lg hover:bg-secondary-focus"
|
|
href=`/dashboard/abrechnung/monatlich.pdf?d=${moment().subtract(1, "month").format("YYYY-MM")}`
|
|
>PDF für letzten Monat generieren.</a
|
|
>
|
|
</div>
|
|
</div>
|
|
</BlankLayout>
|