Files
time-tracking/backend/routes/api/entry.js
2022-05-03 21:29:38 +02:00

120 lines
2.7 KiB
JavaScript

// Dependencies
const express = require("express");
const mysql = require("../../handlers/mysql_handler");
const logger = require("../../logger");
const request_handler = require("../../handlers/request_handler");
// Global variables
const con = mysql.con;
const router = express.Router();
function formatDate(date) {
let result = date.split("T")[0].split("-");
result = result[2] + "." + result[1] + "." + result[0];
return result;
}
// Calculate time difference
function calcInd(date, checkedIn, checkedOut) {
date = date.split("T")[0];
let ind =
(new Date(date + "T" + checkedOut) - new Date(date + "T" + checkedIn)) /
1000 /
60 /
60;
// round ind to 2 decimal places
ind = Math.round(ind * 100) / 100;
if (ind > 6) {
ind -= 0.5;
}
return ind;
}
//! Bei dieser Funktion habe 112312 Gehirnzellen verloren. Bitte nicht drauf ansprechen.
function calcNorm(date, checkedIn, checkedOut) {
let ind = calcInd(date, checkedIn, checkedOut).toString().split(".");
let hours = parseInt(ind[0]);
let minutes = 0;
if (ind.length > 1) {
minutes = parseInt(ind[1] * 6) / 10;
minutes = Math.round(minutes);
}
if (hours < 10) {
hours = "0" + hours;
}
if (minutes < 10) {
minutes = "0" + minutes;
}
return hours + ":" + minutes;
}
function formatTime(time) {
let result = time.split(":");
result = result[0] + ":" + result[1];
return result;
}
function isInMonth(date, monthYear) {
if (monthYear == undefined) {
return true;
}
date = date.split("-");
let month = parseInt(date[1]);
let year = parseInt(date[0]);
monthYear = monthYear.split("-");
if (month == monthYear[0] && year == monthYear[1]) {
return true;
} else {
return false;
}
}
// monthYear = month number-year number (04-2019)
router.get("/all/:monthYear?", request_handler.LoggerHandler, (req, res) => {
const monthYear = req.params.monthYear;
con.query(`SELECT * FROM entries ORDER BY date ASC`, (err, result) => {
if (err) {
logger.error(err, "routes/api/entries.js");
res.send(JSON.parse(JSON.stringify({ error: err }))); // Send error message
return;
} else {
let entries = [];
result = JSON.parse(JSON.stringify(result));
for (let i = 0; i < result.length; i++) {
if (isInMonth(result[i].date, monthYear)) {
entries.push({
date: formatDate(result[i].date),
checkedIn: formatTime(result[i].checked_in),
checkedOut: formatTime(result[i].checked_out),
ind: calcInd(
result[i].date,
result[i].checked_in,
result[i].checked_out
),
norm: calcNorm(
result[i].date,
result[i].checked_in,
result[i].checked_out
),
result: "-1:20",
});
}
}
res.send(entries); // Send result
}
});
});
module.exports = router;