NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name Attendo_ba_daily_work_time
// @namespace http://tampermonkey.net/
// @version 0.25
// @license MIT
// @description Add missing work timer for current day to attendo.ba
// @author Bootta
// @match https://attendo.ba/attendo/app/entry
// @require https://code.jquery.com/jquery-3.3.1.min.js
// @updateURL https://openuserjs.org/meta/Bootta11/Attendo_ba_daily_work_time.meta.js
// ==/UserScript==
(function () {
'use strict';
let entries_refresh_interval_in_seconds = 300;
let enable_time_without_pause = false;
let $ = window.jQuery;
let worklog_entries;
let refresh_enteries_interval;
let today = new Date();
let dd = today.getDate();
let mm = today.getMonth() + 1; //January is 0!
let yyyy = today.getFullYear();
let today_datetime_string = yyyy + '-' + aln(mm) + '-' + aln(dd);
let daily_work_time_element = `
<li id="daily_work_timer_holder">
<a href="#" onclick="return false" disabled>
Today worked: <big><span id="daily_work_timer" style="color: black"></span></big>
</a>
</li>`;
refreshEnteries();
refresh_enteries_interval = setInterval(refreshEnteries, 1000 * entries_refresh_interval_in_seconds);
setInterval(refreshDailyWorkTime, 1000);
function refreshDailyWorkTime() {
if (worklog_entries) {
let cumulative_daily_time = 0;
for (let i = 0; i < worklog_entries.length; i++) {
let entry = worklog_entries[i];
if (entry.entryType == "CHECK_IN") {
let check_in_start_datetime = new Date(entry.dateTime);
let check_in_end_datetime = new Date();
if (worklog_entries[i + 1]) {
check_in_end_datetime = new Date(worklog_entries[i + 1].dateTime)
}
cumulative_daily_time += Math.abs(check_in_end_datetime - check_in_start_datetime);
}
}
let cumulative_daily_time_without_pause = cumulative_daily_time - (1000 * 60 * 30);
var seconds = Math.floor(((cumulative_daily_time % (1000 * 60)) / 1000));
var minutes = Math.floor(((cumulative_daily_time % (1000 * 60 * 60)) / (1000 * 60)));
var hours = Math.floor((cumulative_daily_time / (1000 * 60 * 60)));
if (!$('#daily_work_timer_holder').length) {
$('.navbar .navbar-right').prepend(daily_work_time_element);
}
let display_time = tsToDisplayTime(cumulative_daily_time);
display_time += (enable_time_without_pause ? '(' + tsToDisplayTime(cumulative_daily_time_without_pause) + ')' : '');
$('#daily_work_timer').text(display_time);
}
}
function refreshEnteries() {
$.get('https://attendo.ba/attendo/app/api/employee/overview/daily?date=' + today_datetime_string, function (data) {
worklog_entries = data.entries;
});
}
//add leading null
function aln(n) {
return (n < 10 ? '0' + n : n);
}
// timestamp to time
function tsToDisplayTime(ts) {
var seconds = Math.floor(((ts % (1000 * 60)) / 1000));
var minutes = Math.floor(((ts % (1000 * 60 * 60)) / (1000 * 60)));
var hours = Math.floor((ts / (1000 * 60 * 60)));
return aln(hours) + ' : ' + aln(minutes) + ' : ' + aln(seconds);
}
})();