var seconds = 0; var Clock = { totalSeconds: 0, interval: 0, start: function () { if (Clock.interval !== undefined) { var self = this; function pad(val) { return val > 9 ? val : "0" + val; } if (Clock.interval !== undefined) { Clock.interval = setInterval(function () { self.totalSeconds += 1; if ($("#startButton").is(":visible") != true) { if (document.getElementsByClassName("startButton Active").length > 0) { $('#startButton').removeClass('startButton Active'); self.totalSeconds = 0; $("#hours").text(pad(Math.floor(self.totalSeconds / 3600))); $("#min").text(pad(Math.floor(self.totalSeconds / 60 % 60))); $("#sec").text(pad(self.totalSeconds % 60)); var date = new Date($.now()); date = new Date(Unibase.Platform.Helpers.DateTimeHelper.Instance().formatServerDateTime(date)); Unibase.Apps.PM.Components.TimeTracker.Instance().saveTaskSession(date, null, false, false, false, false); } else { if (document.getElementsByClassName("resumeButton Active").length > 0) { $('#startButton').removeClass('resumeButton Active'); var a = Number(Number($(".beforeTimer").text().split(':')[0]) * 60 * 60) + (Number($(".beforeTimer").text().split(':')[1]) * 60) + (Number($(".beforeTimer").text().split(':')[2])); if (a < Number(self.totalSeconds - 2)) { self.totalSeconds = a; } } $("#hours").text(pad(Math.floor(self.totalSeconds / 3600))); $("#min").text(pad(Math.floor(self.totalSeconds / 60 % 60))); $("#sec").text(pad(self.totalSeconds % 60)); } } }, 1000); } } }, reset: function () { Clock.totalSeconds = null; clearInterval(Clock.interval); $("#hours").text("00"); $("#min").text("00"); $("#sec").text("00"); delete Clock.interval; }, pause: function () { clearInterval(Clock.interval); delete Clock.interval; }, resume: function () { Clock.start(); }, stop: function () { var value = this; Clock.reset(); }, restart: function () { Clock.reset(); Clock.start(); }, }; var Unibase; (function (Unibase) { let Apps; (function (Apps) { let PM; (function (PM) { let Components; (function (Components) { class TimeTracker extends Unibase.Platform.Core.BaseComponent { constructor() { super(); } cssFiles() { return [""]; } jsFiles() { return ['platform/pm/managers/taskmanager.js', 'platform/pm/components/sessionlog.js', 'platform/pm/infos/task.js', 'platform/pm/infos/sessionlog.js', 'platform/pm/requests/task.js', 'platform/pm/requests/sessionlog.js']; } init(containerId) { var instance = this; instance.html(id, containerId); $('#startButton').attr('readonly', 'true'); document.addEventListener("click", function (event) { if ($(this)[0].activeElement.className == "d-flex h-60p align-items-center nav-link active" || $(this)[0].activeElement.className == "btn detail-close mr-auto btn-light btn-sm" || $(this)[0].activeElement.className == "d-flex h-60p align-items-center nav-link") { if ($("#pauseButton").is(":visible") == true && $("#stopButton").is(":visible") == true) { var date = new Date($.now()); date = new Date(Unibase.Platform.Helpers.DateTimeHelper.Instance().formatServerDateTime(date)); instance.ResumeTask(date); } } }, true); var id = ""; var InstalledAppId = Unibase.Themes.Providers.DetailHelper.installedAppId; instance.InstalledAppId = InstalledAppId; for (let obj of Unibase.Themes.Providers.Detail_Settings.Instance().InputParameters) { if (obj.Key === "hf_" + InstalledAppId + "_recordid") { id = obj.Value; } } var jsfiles = ['apps/pm/managers/taskmanager.js', 'apps/pm/components/sessionlog.js', 'apps/pm/infos/task.js', 'apps/pm/infos/sessionlog.js', 'apps/pm/requests/task.js', 'apps/pm/requests/sessionlog.js']; instance.fileCacheHelper.loadJsFiles(jsfiles, function () { var Id = Unibase.Themes.Providers.Detail_Settings.Instance().RecordId; Bizgaze.Apps.PM.Managers.TaskManager.Instance().getTaskDetails(Id).then(function (response) { var data = JSON.parse(response.result)[0]; instance.TaskId = data.taskid; instance.Points = data.points; instance.RefStatusId = data.refstatusid; if (data.istaskpause == true) { var seconds = Number(data.timer.split(":")[0]) * 60 * 60 + Number(data.timer.split(":")[1]) * 60 + data.timer.split(":")[2]; Clock.totalSeconds = Number(seconds); var timehours = data.timer.split(":")[0]; var timemins = data.timer.split(":")[1]; var timeseconds = data.timer.split(":")[2]; if (timehours == undefined) timehours = "00:"; if (timemins == undefined) timehours = "00:"; if (timeseconds == undefined) timehours = "00"; $('#stopButton').removeClass('hidden'); $('#resumeButton').removeClass('hidden'); if (instance.RefStatusId == 6) { $('.divTimerResume').removeClass('hidden'); $(".starticon").css("color", ""); } else if (instance.RefStatusId == 7) { $("#ProgressButton").prop("disabled", "disabled"); } } else if (data.istaskpause == false && data.timerstoppeddate.toString() != "[object Object]") { $('#stopButton').addClass('hidden'); $('#resumeButton').addClass('hidden'); $("#pauseButton").addClass('hidden'); } else if (data.istaskpause == false && data.timerstoppeddate.toString() == "[object Object]") { if (data.timer != "00:00:00" && data.timer.toString() != "[object Object]") { var timehours = data.timer.split(":")[0]; var timemins = data.timer.split(":")[1]; var timeseconds = data.timer.split(":")[2]; if (timehours == undefined) timehours = "00:"; if (timemins == undefined) timehours = "00:"; if (timeseconds == undefined) timehours = "00"; $('#pauseButton').removeClass('hidden'); $("#ProgressButton").prop("disabled", false); } } instance.load(id, containerId, null); }); }); } html(id, containerid) { let html = `
Time Tracker
TIMER
00:00:00  
15 pts
`; $("." + containerid).html(html); return ""; } load(id, containerid, callback) { var instance = this; var Id = Unibase.Themes.Providers.Detail_Settings.Instance().RecordId; $("#txtPoints").text(instance.Points + ' pts'); $('#startButton').click(function () { Bizgaze.Apps.PM.Managers.TaskManager.Instance().getTaskByAssignToAndRefStatus().then(function (response) { if (response.result.toString() != "[]") { var taskmessage = ''; if (response.result.length == 1) taskmessage = '' + response.result[0].code + '-' + response.result[0].subject + ' is already Inprogress. Would you like to continue'; else taskmessage = '' + response.result.length + ' Tasks are inprogress. Would you like to continue'; bootbox.confirm({ message: taskmessage, buttons: { confirm: { label: 'Continue', className: 'btn-success' }, cancel: { label: 'Cancel', className: 'btn-danger' } }, callback: function (result) { if (result == true) { $(".divTimerPause").removeClass('hidden'); $(".divTimerStop").removeClass('hidden'); $(".divTimerStart").addClass('hidden'); $("#ProgressButton").prop("disabled", false); $('#startButton').addClass('startButton Active'); Clock.interval = 0; Clock.totalSeconds = 0; var maxId = setTimeout(function () { }, 0); for (var i = 0; i < maxId; i += 1) { clearTimeout(i); } Clock.start(); } } }); } else { $(".divTimerPause").removeClass('hidden'); $(".divTimerStop").removeClass('hidden'); $(".divTimerStart").addClass('hidden'); $("#ProgressButton").prop("disabled", false); $('#startButton').addClass('startButton Active'); Clock.interval = 0; Clock.totalSeconds = 0; var maxId = setTimeout(function () { }, 0); for (var i = 0; i < maxId; i += 1) { clearTimeout(i); } Clock.start(); } }); }); $('#pauseButton').click(function () { $(".divTimerPause").addClass('hidden'); $(".divTimerResume").removeClass('hidden'); $(".divTimerStop").removeClass('hidden'); var date = new Date($.now()); date = new Date(Unibase.Platform.Helpers.DateTimeHelper.Instance().formatServerDateTime(date)); instance.pauseTask(date); Clock.pause(); }); $('#resumeButton').click(function () { $(".divTimerPause").removeClass('hidden'); $(".divTimerStop").removeClass('hidden'); $(".divTimerResume").addClass('hidden'); seconds = Clock.totalSeconds; var date = new Date($.now()); var a = document.getElementsByClassName("resume"); if (a != undefined) { Clock.interval = 0; } $('#resumeButton').addClass('resumeButton Active'); Clock.resume(); date = new Date(Unibase.Platform.Helpers.DateTimeHelper.Instance().formatServerDateTime(date)); instance.saveTaskSession(date, null, false, false, false, false); }); $('#stopButton').click(function () { $(".divTimerPause").addClass('hidden'); $(".divTimerResume").addClass('hidden'); $(".divTimerStop").addClass('hidden'); $(".divTimerStart").addClass('hidden'); Clock.pause(); var date = new Date($.now()); date = new Date(Unibase.Platform.Helpers.DateTimeHelper.Instance().formatServerDateTime(date)); instance.saveTaskSession(date, date, false, false, true, false); }); $('#resetButton').click(function () { Clock.reset(); }); $('#restartButton').click(function () { Clock.restart(); }); var instance = this; window.onbeforeunload = function (event) { if ($("#pauseButton").is(":visible") == true && $("#stopButton").is(":visible") == true) { var date = new Date($.now()); date = new Date(Unibase.Platform.Helpers.DateTimeHelper.Instance().formatServerDateTime(date)); instance.ResumeTask(date); } else { if ($("#startButton").is(":visible") != true) instance.updateTimer(); } }; window.addEventListener("beforeunload", function (e) { var confirmationMessage = "\o/"; (e || window.event).returnValue = confirmationMessage; if ($("#pauseButton").is(":visible") == true && $("#stopButton").is(":visible") == true) { var date = new Date($.now()); date = new Date(Unibase.Platform.Helpers.DateTimeHelper.Instance().formatServerDateTime(date)); instance.ResumeTask(date); instance.navigationHelper.closePopUp(); } else { if ($("#startButton").is(":visible") != true) instance.updateTimer(); } return confirmationMessage; }); instance.getTimer(Id); if (instance.RefStatusId == 3 || instance.RefStatusId == 6) { $("#startButton").children.bind('click'); $("#resumeButton").children.bind('click'); } else { $("#startButton").children().bind('click', function () { return false; }); $("#resumeButton").children().bind('click', function () { return false; }); $(".starticon").css("color", "#8edde6"); $(".divTimerStop").addClass('hidden'); $("#ProgressButton").prop("disabled", "disabled"); } if (instance.RefStatusId == 3) instance.updateTimer(); } saveTaskSession(startdate, enddate, istimerupdate, ispause, isstop, isloghour) { var instance = this; var ismanual = false; var timer = ""; var pause = false; var stop = false; var sessionid = 0; if (istimerupdate || isstop == true) timer = $(".beforeTimer").text(); if (ispause) pause = true; if (isstop) stop = true; startdate = new Date(startdate); if (($("#hfTaskSessionId").val() != "" && $("#hfTaskSessionId").val() != undefined) || isloghour) { startdate = Unibase.Platform.Helpers.DateTimeHelper.Instance().formatServerDateTime($("#txt_LogHourStartDate").val()); enddate = Unibase.Platform.Helpers.DateTimeHelper.Instance().formatServerDateTime($("#txt_LogHourEndDate").val()); ismanual = true; sessionid = $("#hfTaskSessionId").val(); } var postData = { taskid: instance.TaskId, sessionid: sessionid, startdate: startdate, enddate: enddate, timer: timer, issessionpause: pause, issessionstop: stop, ismanual: ismanual, installedappid: instance.InstalledAppId, stagestatusid: instance.RefStatusId, percentage: 0, }; Bizgaze.Apps.PM.Managers.TaskManager.Instance().saveSessionLog(postData).then(function (response) { MessageHelper.Instance().showSuccess(response, ''); if (isloghour) instance.refreshLog(); }, function (response) { }); } updateSessionEnd(enddate) { var instance = this; var postData = { taskid: instance.TaskId, enddate: enddate, timer: $(".beforeTimer").text(), percentage: 100, sessionid: 0, startdate: new Date(), issessionpause: false, issessionstop: false, ismanual: false, installedappid: 0, stagestatusid: 0, }; Bizgaze.Apps.PM.Managers.TaskManager.Instance().updateSessionLogEndDate(postData).then(function (response) { MessageHelper.Instance().showSuccess(response, ''); }, function (response) { MessageHelper.Instance().showError(response, 'divTimeTrackerError'); }); } pauseTask(enddate) { var instance = this; var postData = { taskid: instance.TaskId, pausedate: enddate, timer: $(".beforeTimer").text(), istaskpause: true, percentage: 0, timerstoppeddate: new Date(), isresumetask: false, istaskstopped: false }; Bizgaze.Apps.PM.Managers.TaskManager.Instance().pauseTask(postData).then(function (response) { instance.saveTaskSession(null, enddate, false, true, false, false); }, function (response) { instance.saveTaskSession(null, enddate, false, true, false, false); MessageHelper.Instance().showError(response, 'divTimeTrackerError'); }); } ResumeTask(enddate) { var instance = this; var postData = { taskid: instance.TaskId, pausedate: enddate, isresumetask: true, timer: $(".beforeTimer").text(), istaskpause: false, percentage: 0, timerstoppeddate: new Date(), istaskstopped: false, }; Bizgaze.Apps.PM.Managers.TaskManager.Instance().resumeTask(postData).then(function (response) { }, function (response) { MessageHelper.Instance().showError(response, 'divTimeTrackerError'); }); } StopTask(enddate) { var instance = this; var postData = { taskid: instance.TaskId, timerstoppeddate: enddate, istaskstopped: true, timer: $(".beforeTimer").text(), istaskpause: false, percentage: 0, pausedate: enddate, isresumetask: false, }; Bizgaze.Apps.PM.Managers.TaskManager.Instance().stopTask(postData).then(function (response) { MessageHelper.Instance().showSuccess(response, ''); }, function (response) { MessageHelper.Instance().showError(response, 'divTimeTrackerError'); }); } getTimer(taskId) { var instance = this; Bizgaze.Apps.PM.Managers.TaskManager.Instance().getTimerDetails(taskId).then(function (response) { if (response.result != "") { if (response != null) { var result = response.result.split('_'); var data = result[0]; data = data.replace(/['"]+/g, ''); if (result.length > 1) { if (data == "False") { var maxId = setTimeout(function () { }, 0); for (var i = 0; i < maxId; i += 1) { clearTimeout(i); } Clock.totalSeconds = Number(result[1]); Clock.interval = 0; Clock.start(); $(".divTimerPause").removeClass('hidden'); $(".divTimerStop").removeClass('hidden'); $(".divTimerStart").addClass('hidden'); } else if (data == "NotStarted") { $(".divTimerStart").removeClass('hidden'); $(".divTimerPause").addClass('hidden'); $(".divTimerStop").addClass('hidden'); } else { var value = result[1]; value = value.replace(/['"]+/g, ''); function pad(val) { return val > 9 ? val : "0" + val; } $("#hours").text(pad(Math.floor(Number(value) / 3600))); $("#min").text(pad(Math.floor(Number(value) / 60 % 60))); $("#sec").text(pad(parseInt(value) % 60)); Clock.pause(); $(".divTimerStart").addClass('hidden'); $("#ProgressButton").addClass("hidden"); } } else { $(".divTimerStart").removeClass('hidden'); } } } }); } updateTimer() { var instance = this; var date = new Date($.now()); date = new Date(Unibase.Platform.Helpers.DateTimeHelper.Instance().formatServerDateTime(date)); var postData = { taskid: instance.TaskId, timerstoppeddate: null, timer: $(".beforeTimer").text(), istaskpause: false, percentage: 0, pausedate: new Date(), isresumetask: false, istaskstopped: false, }; Bizgaze.Apps.PM.Managers.TaskManager.Instance().updateTimer(postData).then(function (response) { }, function (response) { MessageHelper.Instance().showError(response, 'divTimeTrackerError'); }); } showLogDetails() { var instance = this; instance.navigationHelper.popup(0, "", Bizgaze.Apps.PM.Components.SessionLog.Instance(), function () { instance.refreshLog(); instance.managePermission(); }, Unibase.Platform.Helpers.Size.DockLeft); } getTaskSession(id) { var instance = this; Bizgaze.Apps.PM.Managers.TaskManager.Instance().getSessionLog(id).then(function (response) { $('#ul_ShowLog_Details').find('.li-' + id).remove(); $("#hfTaskSessionId").val(id); Bizgaze.Apps.PM.Components.SessionLog.Instance().addLogHourRow(true); $("#txt_LogHourStartDate").val(Unibase.Platform.Helpers.DateTimeHelper.Instance().formatLocalDateTimeWithoutSeconds(response.result.startdate)); $("#txt_LogHourEndDate").val(Unibase.Platform.Helpers.DateTimeHelper.Instance().formatLocalDateTimeWithoutSeconds(response.result.enddate)); Bizgaze.Apps.PM.Components.SessionLog.Instance().calculateDateDiff(); }, function (response) { MessageHelper.Instance().showError(response, 'divTimeTrackerError'); }); } removeSession(id) { var instance = this; Bizgaze.Apps.PM.Managers.TaskManager.Instance().deleteSession(id).then(function (response) { MessageHelper.Instance().showSuccess(response, ''); instance.refreshLog(); }, function (response) { MessageHelper.Instance().showError(response, 'divTimeTrackerError'); }); } refreshLog() { var instance = this; var taskId = instance.TaskId; Bizgaze.Apps.PM.Managers.TaskManager.Instance().getSessionLogDetails(taskId).then(function (response) { if (response.result.length == 0) { $('#ul_ShowLog_Details').after('
There is no Data
'); } $("#ulLogDetails").html(''); for (var i = 0; i < response.result.length; i++) { var data = response.result[i]; var da = moment(data.enddate).format('DD-MM-YYYY hh:mm:ss a'); var ismanual = ''; if (data.ismanual) ismanual = ' M'; var html = ''; if (data.ismanual) { html = '
  • ' + '' + '
    ' + '
    ' + Unibase.Platform.Helpers.DateTimeHelper.Instance().formatLocalDateTimeWithoutSeconds(data.startdate) + '
    ' + '
    ' + Unibase.Platform.Helpers.DateTimeHelper.Instance().formatLocalDateTimeWithoutSeconds(data.enddate) + '
    ' + '
    ' + data.timer + '
    ' + '
    ' + '
    ' + '
  • '; } else { html = '
  • ' + '' + '
    ' + '
    ' + Unibase.Platform.Helpers.DateTimeHelper.Instance().formatLocalDateTimeWithoutSeconds(data.startdate) + '
    ' + '
    ' + Unibase.Platform.Helpers.DateTimeHelper.Instance().formatLocalDateTimeWithoutSeconds(data.enddate) + '
    ' + '
    ' + data.timer + '
    ' + '
    ' + '
    ' + '
  • '; } $(".sessionlog-item:last").after(html); } Bizgaze.Apps.PM.Components.SessionLog.Instance().addLogHourRow(false); Bizgaze.Apps.PM.Components.SessionLog.Instance().calculateDateDiff(); }, function (response) { MessageHelper.Instance().showError(response, 'divTimeTrackerError'); }); } managePermission() { var instance = this; Bizgaze.Apps.PM.Managers.TaskManager.Instance().getLogHourPermission().then(function (response) { if (response.result == '5' || Unibase.Platform.Membership.Infos.Identity.getCurrentUser().isAdmin == true) { $(".editloghour").removeClass('hidden'); $(".deleteloghour").removeClass('hidden'); } else { $(".editloghour").addClass('hidden'); $(".deleteloghour").addClass('hidden'); } instance.managePermission(); }, function (response) { MessageHelper.Instance().showError(response, 'divTimeTrackerError'); }); } static Instance() { if (this.instance == undefined) { this.instance = new TimeTracker(); } return this.instance; } } Components.TimeTracker = TimeTracker; })(Components = PM.Components || (PM.Components = {})); })(PM = Apps.PM || (Apps.PM = {})); })(Apps = Unibase.Apps || (Unibase.Apps = {})); })(Unibase || (Unibase = {}));