From 3886e64ef6b6698a766e9498030f8a9083149c78 Mon Sep 17 00:00:00 2001 From: sebseb7 Date: Fri, 1 Aug 2025 15:15:01 +0200 Subject: [PATCH] Enhance transaction retrieval in data.js by adding additional fields from the UmsatzBeleg table and implementing a separate query for links data. Update transaction mapping to include new document data and filter links based on transaction IDs. --- src/routes/data.js | 41 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 37 insertions(+), 4 deletions(-) diff --git a/src/routes/data.js b/src/routes/data.js index e992a04..bd26153 100644 --- a/src/routes/data.js +++ b/src/routes/data.js @@ -126,12 +126,16 @@ router.get('/transactions/:timeRange', authenticateToken, async (req, res) => { bat.assigned_kreditor_id, ak.name as assigned_kreditor_name, 0 as isJTLOnly, - 1 as isFromCSV + 1 as isFromCSV, + ub.textContent as jtl_document_data, + ub.kUmsatzBeleg, + ub.datevlink FROM fibdash.CSVTransactions csv LEFT JOIN eazybusiness.dbo.tZahlungsabgleichUmsatz jtl ON ( ABS(csv.numeric_amount - jtl.fBetrag) < 0.01 AND ABS(DATEDIFF(day, csv.parsed_date, jtl.dBuchungsdatum)) <= 1 ) + LEFT JOIN eazybusiness.dbo.tUmsatzBeleg ub ON ub.kZahlungsabgleichUmsatz = jtl.kZahlungsabgleichUmsatz LEFT JOIN fibdash.Kreditor k ON csv.kontonummer_iban = k.iban LEFT JOIN fibdash.BankingAccountTransactions bat ON csv.id = bat.csv_transaction_id LEFT JOIN fibdash.Kreditor ak ON bat.assigned_kreditor_id = ak.id @@ -159,8 +163,12 @@ router.get('/transactions/:timeRange', authenticateToken, async (req, res) => { NULL as assigned_kreditor_id, NULL as assigned_kreditor_name, 1 as isJTLOnly, - 0 as isFromCSV + 0 as isFromCSV, + ub.textContent as jtl_document_data, + ub.kUmsatzBeleg, + ub.datevlink FROM eazybusiness.dbo.tZahlungsabgleichUmsatz jtl + LEFT JOIN eazybusiness.dbo.tUmsatzBeleg ub ON ub.kZahlungsabgleichUmsatz = jtl.kZahlungsabgleichUmsatz WHERE NOT EXISTS ( SELECT 1 FROM fibdash.CSVTransactions csv WHERE ABS(csv.numeric_amount - jtl.fBetrag) < 0.01 @@ -171,6 +179,25 @@ router.get('/transactions/:timeRange', authenticateToken, async (req, res) => { `; const result = await executeQuery(query); + + // Get links data separately to avoid duplicate rows + const linksQuery = ` + SELECT + zul.kZahlungsabgleichUmsatz, + zul.linktarget, + zul.linktype, + zul.note, + po.kPdfObjekt, + po.textContent, + po.markDown, + po.extraction + FROM eazybusiness.dbo.tZahlungsabgleichUmsatzLink zul + LEFT JOIN eazybusiness.dbo.tPdfObjekt po ON zul.linktarget = po.kLieferantenbestellung + WHERE zul.linktype = 'kLieferantenBestellung' + `; + const linksResult = await executeQuery(linksQuery); + const linksData = linksResult.recordset || []; + const transactions = result.recordset.map(transaction => ({ ...transaction, parsedDate: new Date(transaction.parsed_date), @@ -187,8 +214,14 @@ router.get('/transactions/:timeRange', authenticateToken, async (req, res) => { name: transaction.assigned_kreditor_name, id: transaction.assigned_kreditor_id } : null, - pdfs: [], - links: [] + pdfs: transaction.jtl_document_data ? [{ + content: transaction.jtl_document_data, + kUmsatzBeleg: transaction.kUmsatzBeleg, + datevlink: transaction.datevlink + }] : [], + links: transaction.jtlId ? linksData.filter(link => + link.kZahlungsabgleichUmsatz === transaction.jtlId + ) : [] })); let filteredTransactions = [];