Zeiterfassung
This commit is contained in:
parent
b87ac43bd4
commit
90891fa77a
|
|
@ -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
128
js/tm.js
|
|
@ -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> 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> 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>';
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue