diff --git a/backend/src/utils/export/datev.ts b/backend/src/utils/export/datev.ts index 862c2d6..7af8a39 100644 --- a/backend/src/utils/export/datev.ts +++ b/backend/src/utils/export/datev.ts @@ -34,17 +34,28 @@ const getCreatedDocumentTotal = (item: any) => { let totalNet = 0; let total19:number = 0; let total7:number = 0; + let net19 = 0; + let net7 = 0; + let net0 = 0; const rows = Array.isArray(item.rows) ? item.rows : []; rows.forEach((row: any) => { if (!['pagebreak', 'title', 'text'].includes(row.mode)) { + const taxPercent = Number(row.taxPercent); let rowPrice = Number(Number(row.quantity) * Number(row.price) * (1 - Number(row.discountPercent) / 100)).toFixed(3); totalNet = totalNet + Number(rowPrice); - if (row.taxPercent === 19) total19 += Number(rowPrice) * Number(0.19); - else if (row.taxPercent === 7) total7 += Number(rowPrice) * Number(0.07); + if (taxPercent === 19) { + net19 += Number(rowPrice); + total19 += Number(rowPrice) * Number(0.19); + } else if (taxPercent === 7) { + net7 += Number(rowPrice); + total7 += Number(rowPrice) * Number(0.07); + } else if (taxPercent === 0) { + net0 += Number(rowPrice); + } } }); return { - totalNet, total19, total7, + totalNet, total19, total7, net19, net7, net0, totalGross: Number(totalNet.toFixed(2)) + Number(total19.toFixed(2)) + Number(total7.toFixed(2)) }; }; @@ -58,13 +69,31 @@ const displayCurrency = (input: number, onlyAbs = false) => { }; const getCreatedDocumentDatevTaxKey = (document: { taxType?: string | null }) => { - return document.taxType === "13b UStG" ? "46" : ""; + return document.taxType === "13b UStG" ? "46" : "3"; }; const getCreatedDocumentPaymentDatevTaxKey = (document: { taxType?: string | null }) => { return document.taxType === "13b UStG" ? "46" : "3"; }; +const getCreatedDocumentRevenueLines = (document: any) => { + const totals = getCreatedDocumentTotal(document); + + if (document.taxType === "13b UStG") { + return [{ account: "8337", amount: totals.totalGross }]; + } + + if (document.taxType === "19 UStG") { + return [{ account: "8192", amount: totals.totalGross }]; + } + + return [ + { account: "8400", amount: Number(totals.net19.toFixed(2)) }, + { account: "8334", amount: Number(totals.net7.toFixed(2)) }, + { account: "8290", amount: Number(totals.net0.toFixed(2)) }, + ].filter((line) => line.amount !== 0); +}; + // --------------------------------------------------------- // MAIN EXPORT FUNCTION // --------------------------------------------------------- @@ -297,25 +326,24 @@ export async function buildExportZip( // AR createddocumentsList.forEach(cd => { let file = filesCreateddocuments.find(i => i.createddocument === cd.id); - let total = 0; let typeString = ""; if(cd.type === "invoices") { - total = getCreatedDocumentTotal(cd).totalGross; typeString = "AR"; } else if(cd.type === "advanceInvoices") { - total = getCreatedDocumentTotal(cd).totalGross; typeString = "ARAbschlag"; } else if(cd.type === "cancellationInvoices") { - total = getCreatedDocumentTotal(cd).totalGross; typeString = "ARStorno"; } - let shSelector = Math.sign(total) === -1 ? "H" : "S"; const cust = cd.customer; // durch Mapping verfügbar const datevTaxKey = getCreatedDocumentDatevTaxKey(cd); + const revenueLines = getCreatedDocumentRevenueLines(cd); - bookingLines.push(`${displayCurrency(total,true)};"${shSelector}";;;;;${cust?.customerNumber || ""};8400;"${datevTaxKey}";${dayjs(cd.documentDate).format("DDMM")};"${cd.documentNumber}";;;"${`${typeString} ${cd.documentNumber} - ${cust?.name || ""}`.substring(0,59)}";;;;;;${file ? `"BEDI ""${file.id}"""` : ""};"Geschäftspartner";"${cust?.name || ""}";"Kundennummer";"${cust?.customerNumber || ""}";"Belegnummer";"${cd.documentNumber}";"Leistungsdatum";"${dayjs(cd.deliveryDate).format("DD.MM.YYYY")}";"Belegdatum";"${dayjs(cd.documentDate).format("DD.MM.YYYY")}";;;;;;;;;;"";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0;;;;"";;;;;;;`); + revenueLines.forEach((revenueLine) => { + let shSelector = Math.sign(revenueLine.amount) === -1 ? "H" : "S"; + bookingLines.push(`${displayCurrency(revenueLine.amount,true)};"${shSelector}";;;;;${cust?.customerNumber || ""};${revenueLine.account};"${datevTaxKey}";${dayjs(cd.documentDate).format("DDMM")};"${cd.documentNumber}";;;"${`${typeString} ${cd.documentNumber} - ${cust?.name || ""}`.substring(0,59)}";;;;;;${file ? `"BEDI ""${file.id}"""` : ""};"Geschäftspartner";"${cust?.name || ""}";"Kundennummer";"${cust?.customerNumber || ""}";"Belegnummer";"${cd.documentNumber}";"Leistungsdatum";"${dayjs(cd.deliveryDate).format("DD.MM.YYYY")}";"Belegdatum";"${dayjs(cd.documentDate).format("DD.MM.YYYY")}";;;;;;;;;;"";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0;;;;"";;;;;;;`); + }); }); // ER