From 05357acddbde28932f918c57741640f70a9a8475 Mon Sep 17 00:00:00 2001 From: Thomas Hackner Date: Fri, 3 Jul 2026 16:39:46 +0200 Subject: [PATCH] Fix monthly PDF export to include only the selected month The month dropdown carried only the month (e.g. "07") while the year was a separate select; the export required month AND year, so a month-only selection fell through to exporting every application. Encode the year in the month option value ("YYYY-MM"), parse it client-side to always send the exact month+year, and harden /api/export so a month can never fall through to "export all". Co-Authored-By: Claude Opus 4.8 --- public/js/main.js | 18 +++++++++++++++--- server.js | 5 +++++ views/index.ejs | 4 ++-- 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/public/js/main.js b/public/js/main.js index 58ce97a..f4b130a 100644 --- a/public/js/main.js +++ b/public/js/main.js @@ -251,9 +251,21 @@ function openPdfExportModal() { function generatePDF(event) { event.preventDefault(); - const month = document.getElementById('pdfMonth').value; - const year = document.getElementById('pdfYear').value; - + // The month option encodes its year ("YYYY-MM"), so a chosen month always + // exports exactly that month of that year, regardless of the year select. + const monthRaw = document.getElementById('pdfMonth').value; + let year = document.getElementById('pdfYear').value; + let month = ''; + if (monthRaw) { + if (monthRaw.indexOf('-') !== -1) { + const parts = monthRaw.split('-'); + year = parts[0]; + month = parts[1]; + } else { + month = monthRaw; + } + } + // Fetch data for PDF let url = '/api/export?'; const params = []; diff --git a/server.js b/server.js index 964a5eb..edd69f7 100644 --- a/server.js +++ b/server.js @@ -849,6 +849,11 @@ initializeDatabase().then(() => { if (month && year) { query = 'SELECT * FROM bewerbungen WHERE strftime("%m", datum) = ? AND strftime("%Y", datum) = ? ORDER BY datum DESC'; params.push(month.padStart(2, '0'), year); + } else if (month) { + // A month without a year must still restrict the export to that month — + // never fall through to exporting every application. + query = 'SELECT * FROM bewerbungen WHERE strftime("%m", datum) = ? ORDER BY datum DESC'; + params.push(month.padStart(2, '0')); } else if (year) { query = 'SELECT * FROM bewerbungen WHERE strftime("%Y", datum) = ? ORDER BY datum DESC'; params.push(year); diff --git a/views/index.ejs b/views/index.ejs index 95c1d79..1d86ac9 100644 --- a/views/index.ejs +++ b/views/index.ejs @@ -568,11 +568,11 @@ class="w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md bg-white dark:bg-gray-700 text-gray-800 dark:text-white"> <% availableMonths.forEach(m => { %> - + <% }); %> - +