67 lines
2.1 KiB
JavaScript
67 lines
2.1 KiB
JavaScript
const express = require('express');
|
|
const router = express.Router();
|
|
const { calculateNetHours } = require('../utils/timeCalculator');
|
|
|
|
/**
|
|
* Initialize export routes with database instance
|
|
* @param {Database} db - SQLite database instance
|
|
* @returns {Router} - Configured Express router
|
|
*/
|
|
function createExportRouter(db) {
|
|
/**
|
|
* GET /api/export?from=YYYY-MM-DD&to=YYYY-MM-DD
|
|
* Export entries as CSV
|
|
*/
|
|
router.get('/', (req, res) => {
|
|
try {
|
|
const { from, to } = req.query;
|
|
|
|
let query = 'SELECT * FROM entries';
|
|
const params = [];
|
|
|
|
if (from && to) {
|
|
query += ' WHERE date >= ? AND date <= ?';
|
|
params.push(from, to);
|
|
} else if (from) {
|
|
query += ' WHERE date >= ?';
|
|
params.push(from);
|
|
} else if (to) {
|
|
query += ' WHERE date <= ?';
|
|
params.push(to);
|
|
}
|
|
|
|
query += ' ORDER BY date ASC, start_time ASC';
|
|
|
|
const stmt = db.prepare(query);
|
|
const entries = stmt.all(...params);
|
|
|
|
// Generate CSV with German formatting
|
|
let csv = 'Datum,Startzeit,Endzeit,Pause in Minuten,Gesamtstunden\n';
|
|
|
|
entries.forEach(entry => {
|
|
const calculated = calculateNetHours(entry.start_time, entry.end_time, entry.pause_minutes);
|
|
|
|
// Format date as DD.MM.YYYY
|
|
const [year, month, day] = entry.date.split('-');
|
|
const formattedDate = `${day}.${month}.${year}`;
|
|
|
|
// Use comma as decimal separator for hours
|
|
const netHoursFormatted = calculated.netHours.toFixed(2).replace('.', ',');
|
|
|
|
csv += `${formattedDate},${entry.start_time},${entry.end_time},${entry.pause_minutes},${netHoursFormatted}\n`;
|
|
});
|
|
|
|
res.setHeader('Content-Type', 'text/csv; charset=utf-8');
|
|
res.setHeader('Content-Disposition', 'attachment; filename="zeiterfassung.csv"');
|
|
res.send(csv);
|
|
} catch (error) {
|
|
console.error('Error exporting entries:', error);
|
|
res.status(500).json({ error: 'Failed to export entries' });
|
|
}
|
|
});
|
|
|
|
return router;
|
|
}
|
|
|
|
module.exports = createExportRouter;
|