Zeiterfassung

This commit is contained in:
Holger Trampe 2021-09-10 12:31:27 +02:00
parent b87ac43bd4
commit 90891fa77a
3 changed files with 164 additions and 14 deletions

View File

@ -12,6 +12,8 @@ return [
# TIME MANAGEMENT # TIME MANAGEMENT
['name' => 'page#startWorkDay', 'url' => '/startday', 'verb' => 'GET'], ['name' => 'page#startWorkDay', 'url' => '/startday', 'verb' => 'GET'],
['name' => 'page#endWorkDay', 'url' => '/endday', 'verb' => 'GET'], ['name' => 'page#endWorkDay', 'url' => '/endday', 'verb' => 'GET'],
['name' => 'page#startBreak', 'url' => '/startbreak', 'verb' => 'GET'],
['name' => 'page#endBreak', 'url' => '/endbreak', 'verb' => 'GET'],
['name' => 'page#loadTime', 'url' => '/loadtime', 'verb' => 'GET'], ['name' => 'page#loadTime', 'url' => '/loadtime', 'verb' => 'GET'],
# AGENCY # AGENCY
['name' => 'agency#show', 'url' => '/getagencydata', 'verb' => 'GET'], ['name' => 'agency#show', 'url' => '/getagencydata', 'verb' => 'GET'],

128
js/tm.js
View File

@ -6,8 +6,8 @@ var isbreak = false;
var breaktime = 0; var breaktime = 0;
function loadTMIcon(){ function loadTMIcon(){
var baseUrl = OC.generateUrl('/svg/core/actions/user-admin'); var iconBaseUrl = OC.generateUrl('/svg/core/actions/user-admin');
icon = $('<a href="#" class="header-menu"><img src="'+baseUrl+'"></a>'); icon = $('<a href="#" class="header-menu" style="margin-right: 20px; margin-top: 2px;"><img src="'+iconBaseUrl+'"></a>');
$('.header-right').prepend(icon); $('.header-right').prepend(icon);
} }
@ -22,7 +22,7 @@ function addTMDiv(){
realtimediv = $("<div style='position: fixed; z-index: 2000;top: 50px;right: 0;box-sizing: border-box;margin: 0;border-radius: 0 0 var(--border-radius) var(--border-radius);background-color: var(--color-main-background);filter: drop-shadow(0 1px 5px var(--color-box-shadow));'></div>"); realtimediv = $("<div style='position: fixed; z-index: 2000;top: 50px;right: 0;box-sizing: border-box;margin: 0;border-radius: 0 0 var(--border-radius) var(--border-radius);background-color: var(--color-main-background);filter: drop-shadow(0 1px 5px var(--color-box-shadow));'></div>");
realtimediv.html(html_content); realtimediv.html(html_content);
realtimediv.css("width", "300px"); realtimediv.css("width", "300px");
realtimediv.css("height", "250px"); realtimediv.css("height", "125px");
realtimediv.css("right", "50px"); realtimediv.css("right", "50px");
realtimediv.css("position", "fixed"); realtimediv.css("position", "fixed");
realtimediv.css("overflow", "hidden"); realtimediv.css("overflow", "hidden");
@ -31,22 +31,37 @@ function addTMDiv(){
$('.header-right').append(realtimediv); $('.header-right').append(realtimediv);
// Adding Listener // Adding Listener
// Start WorkDay
$("#startWorkDay").click(function(){ $("#startWorkDay").click(function(){
startWorkDay(); startWorkDay();
$("#activeDay").show(); $("#activeDay").show();
$("#start_workday").hide(); $("#start_workday").hide();
}) })
// End WorkDay
$("#end_workday").click(function(){ $("#end_workday").click(function(){
endWorkDay(); endWorkDay();
}) })
// Start Break
$("#start_break").click(function(){
startBreak();
})
// Start Break
$("#end_break").click(function(){
endBreak();
})
// ACTUAL TIME INFO // ACTUAL TIME INFO
// Load Time // Load Time
$.ajax({ $.ajax({
url: "/apps/da_agency/loadtime", url: "/apps/da_agency/loadtime",
type: 'GET', type: 'GET',
}).success(function (response) { }).success(function (response) {
$("#td_content").show();
$("#loader").hide();
responsedata = JSON.parse(response); responsedata = JSON.parse(response);
$("#actualTime").html(responsedata['actualtime']); $("#actualTime").html(responsedata['actualtime']);
// No workday found // No workday found
@ -56,18 +71,36 @@ function addTMDiv(){
isbreak = false; isbreak = false;
breaktime = 0; breaktime = 0;
$("#breaksum").html("00:00:00"); $("#breaksum").html("00:00:00");
$("#activeDay").hide();
} }
// Workday found // Workday found
else{ else{
isbreak = false; realtimediv.css("height", "250px");
start = responsedata['workdaydata_workday']; $("#breaksum").html(convertMS(responsedata['breaksum']));
startbreaktime_view = 0; var breaktime = responsedata['breaksum'];
starttime_view = parseDate(responsedata['workdaydata_workday']); // Break found
console.log(starttime_view); if(responsedata['breakstatus']){
$("#start_workday").hide(); isbreak = true;
$("#activeDay").show(); startbreaktime_view = responsedata['breaktimer'];
$("#starttime").html(responsedata['workdaydata_starttime']); starttime_view = Date.parse(responsedata['workdaydata_workday']);
$("#start_workday").hide();
$("#activeDay").show();
$("#worktime").hide();
$("#breaktimeclock").show();
$("#end_break").show();
$("#start_break").hide();
$("#starttime").html(responsedata['workdaydata_starttime']);
}
// NO BREAK - Day is active
else{
isbreak = false;
start = responsedata['workdaydata_workday'];
startbreaktime_view = 0;
starttime_view = parseDate(responsedata['workdaydata_workday']);
$("#start_workday").hide();
$("#activeDay").show();
$("#starttime").html(responsedata['workdaydata_starttime']);
}
} }
}); });
@ -139,10 +172,16 @@ $(document).ready(function(){
addTMDiv(); addTMDiv();
}) })
function startWorkDay(){ function startWorkDay(){
realtimediv.css("height", "250px");
$("#td_content").hide();
$("#loader").show();
$.ajax({ $.ajax({
url: "/apps/da_agency/startday", url: "/apps/da_agency/startday",
type: 'GET', type: 'GET',
}).success(function (response) { }).success(function (response) {
$("#td_content").show();
$("#loader").hide();
responsedata = JSON.parse(response); responsedata = JSON.parse(response);
if(responsedata["success"]){ if(responsedata["success"]){
@ -156,10 +195,15 @@ function startWorkDay(){
} }
function endWorkDay(){ function endWorkDay(){
$("#td_content").hide();
$("#loader").show();
$.ajax({ $.ajax({
url: "/apps/da_agency/endday", url: "/apps/da_agency/endday",
type: 'GET', type: 'GET',
}).success(function (response) { }).success(function (response) {
realtimediv.css("height", "125px");
$("#td_content").show();
$("#loader").hide();
responsedata = JSON.parse(response); responsedata = JSON.parse(response);
if(responsedata["success"]){ if(responsedata["success"]){
$("#breaktimeclock").hide(); $("#breaktimeclock").hide();
@ -182,4 +226,62 @@ function endWorkDay(){
} }
var html_content = '<style>hr.hr_style { border: 1px solid #dadada; margin: 10px; }</style><div id="activeDay" style="display: none;"><span id="worktime"><h3>Heutiger Arbeitstag</h3><h2 id="realtimeclock">00:00</h2><hr class="hr_style"></span><span id="breaktimeclock" style="display: none"><h3>Aktuelle Pause</h3><h2 id="realtimeclock_break">00:00</h2><hr class="hr_style"></span><span><button onclick="javascript:endBreak()" type="button" id="end_break" class="btn btn-success" style="display: none;"><i class="fas fa-play"></i></button><button onclick="javascript:startBreak()" type="button" id="start_break" class="btn btn-primary">Pause</button><button type="button" id="end_workday" class="btn btn-secondary">Beenden</button></span><hr class="hr_style"></div><div>Arbeitsbeginn: <span id="starttime">00:00:00</span><br /> Arbeitsende: <span id="endtime">00:00:00</span><br />Pausenzeit: <span id="breaksum">00:00:00</span> </div><div id="start_workday"><hr class="hr_style"><button type="button" id="startWorkDay" class="btn btn-success">Arbeitstag starten</button><hr class="hr_style">Gleitzeitkonto: <b><span id="actualTime">Lade...</span>&nbsp;Stunden</b></div>'; function startBreak(){
$("#td_content").hide();
$("#loader").show();
$.ajax({
url: "/apps/da_agency/startbreak",
type: 'GET',
}).success(function (response) {
responsedata = JSON.parse(response);
isbreak = true;
$("#td_content").show();
$("#loader").hide();
//$("#timemanagement_clock").click(function(e){
// e.stopPropagation();
//})
$("#breaktimeclock").show();
$("#realtimeclock").hide();
$("#end_break").show();
$("#start_break").hide();
$("#worktime").hide();
startbreaktime_view = -1000;
realTimeBreakClock();
});
}
function endBreak(){
$("#td_content").hide();
$("#loader").show();
$.ajax({
url: "/apps/da_agency/endbreak",
type: 'GET',
}).success(function (response) {
$("#td_content").show();
$("#loader").hide();
responsedata = JSON.parse(response);
isbreak = false;
$("#breaktimeclock").hide();
$("#realtimeclock").show();
$("#end_break").hide();
$("#start_break").show();
$("#worktime").show();
breaktime = responsedata["actualbreaktime"];
startbreaktime_view = responsedata["actualbreaktime"];
starttime_view = Date.parse(responsedata["wdtime"]);
$("#breaksum").html(convertMS(responsedata["actualbreaktime"]));
});
}
function realTimeBreakClock(){
breaktime = startbreaktime_view + 1000;
startbreaktime_view = startbreaktime_view + 1000;
$("#realtimeclock_break").html(convertMS(startbreaktime_view));
}
var html_content = '<div id="td_content" style="display: none";><style>hr.hr_style { border: 1px solid #dadada; margin: 10px; }</style><div id="activeDay" style="display: none;"><span id="worktime"><h3>Heutiger Arbeitstag</h3><h2 id="realtimeclock">00:00</h2><hr class="hr_style"></span><span id="breaktimeclock" style="display: none"><h3>Aktuelle Pause</h3><h2 id="realtimeclock_break">00:00</h2><hr class="hr_style"></span><span><button type="button" id="end_break" class="btn btn-success" style="display: none;">Pause Ende</i></button><button type="button" id="start_break" class="btn btn-primary">Pause</button><button type="button" id="end_workday" class="btn btn-secondary">Arbeitstag beenden</button></span><hr class="hr_style">Arbeitsbeginn: <span id="starttime">00:00:00</span><br /> Arbeitsende: <span id="endtime">00:00:00</span><br />Pausenzeit: <span id="breaksum">00:00:00</span></div><div id="start_workday"><hr class="hr_style"><button type="button" id="startWorkDay" class="btn btn-success">Arbeitstag starten</button><hr class="hr_style">Gleitzeitkonto: <b><span id="actualTime">00:00</span>&nbsp;Stunden</b></div></div><style> .loader {border: 3px solid #f3f3f3; /* Light grey */border-top: 3px solid grey; border-radius: 50%;width: 30px;height: 30px;animation: spin 1s linear infinite;}@keyframes spin {0% { transform: rotate(0deg); }100% { transform: rotate(360deg); }}</style><div id="loader" class="loader" style="margin: auto; margin-top: 18%; "></div>';

View File

@ -64,7 +64,7 @@ class PageController extends Controller {
return new DataResponse($file); return new DataResponse($file);
} }
/** /**
* @NoCSRFRequired * @NoCSRFRequired
* *
* Beendet einen Arbeitstag * Beendet einen Arbeitstag
@ -87,6 +87,52 @@ class PageController extends Controller {
return new DataResponse($file); return new DataResponse($file);
} }
/**
* @NoCSRFRequired
*
* Beendet einen Arbeitstag
*/
public function startBreak() {
$opts = [
"http" => array(
"method" => "GET",
"header" => ""
),
"ssl"=> array(
"verify_peer"=>false,
"verify_peer_name"=>false,
),
];
$context = stream_context_create($opts);
$file = file_get_contents($this->nclink.'/api/tm/startbreak/'.$this->userSession->getUser()->getUId().'/87zuhjk87GHJ546tzgvhas76aaskbdhr45edfVHAKia87s6gbAVGFGSR3451627gBHAKJBN', false, $context);
#$response = new TemplateResponse('da_agency', 'realtimeclock', ['userId' => $this->userSession->getUser()->getUID(), 'data' => "none"]);
return new DataResponse($file);
}
/**
* @NoCSRFRequired
*
* Beendet einen Arbeitstag
*/
public function endBreak() {
$opts = [
"http" => array(
"method" => "GET",
"header" => ""
),
"ssl"=> array(
"verify_peer"=>false,
"verify_peer_name"=>false,
),
];
$context = stream_context_create($opts);
$file = file_get_contents($this->nclink.'/api/tm/endbreak/'.$this->userSession->getUser()->getUId().'/87zuhjk87GHJ546tzgvhas76aaskbdhr45edfVHAKia87s6gbAVGFGSR3451627gBHAKJBN', false, $context);
#$response = new TemplateResponse('da_agency', 'realtimeclock', ['userId' => $this->userSession->getUser()->getUID(), 'data' => "none"]);
return new DataResponse($file);
}
/** /**
* @NoCSRFRequired * @NoCSRFRequired