Built files from Bizgaze WebServer
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

timetracker.js 39KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605
  1. var seconds = 0;
  2. var Clock = {
  3. totalSeconds: 0,
  4. interval: 0,
  5. start: function () {
  6. if (Clock.interval !== undefined) {
  7. var self = this;
  8. function pad(val) { return val > 9 ? val : "0" + val; }
  9. if (Clock.interval !== undefined) {
  10. Clock.interval = setInterval(function () {
  11. self.totalSeconds += 1;
  12. if ($("#startButton").is(":visible") != true) {
  13. if (document.getElementsByClassName("startButton Active").length > 0) {
  14. $('#startButton').removeClass('startButton Active');
  15. self.totalSeconds = 0;
  16. $("#hours").text(pad(Math.floor(self.totalSeconds / 3600)));
  17. $("#min").text(pad(Math.floor(self.totalSeconds / 60 % 60)));
  18. $("#sec").text(pad(self.totalSeconds % 60));
  19. var date = new Date($.now());
  20. date = new Date(Unibase.Platform.Helpers.DateTimeHelper.Instance().formatServerDateTime(date));
  21. Unibase.Apps.PM.Components.TimeTracker.Instance().saveTaskSession(date, null, false, false, false, false);
  22. }
  23. else {
  24. if (document.getElementsByClassName("resumeButton Active").length > 0) {
  25. $('#startButton').removeClass('resumeButton Active');
  26. var a = Number(Number($(".beforeTimer").text().split(':')[0]) * 60 * 60) + (Number($(".beforeTimer").text().split(':')[1]) * 60) + (Number($(".beforeTimer").text().split(':')[2]));
  27. if (a < Number(self.totalSeconds - 2)) {
  28. self.totalSeconds = a;
  29. }
  30. }
  31. $("#hours").text(pad(Math.floor(self.totalSeconds / 3600)));
  32. $("#min").text(pad(Math.floor(self.totalSeconds / 60 % 60)));
  33. $("#sec").text(pad(self.totalSeconds % 60));
  34. }
  35. }
  36. }, 1000);
  37. }
  38. }
  39. },
  40. reset: function () {
  41. Clock.totalSeconds = null;
  42. clearInterval(Clock.interval);
  43. $("#hours").text("00");
  44. $("#min").text("00");
  45. $("#sec").text("00");
  46. delete Clock.interval;
  47. },
  48. pause: function () {
  49. clearInterval(Clock.interval);
  50. delete Clock.interval;
  51. },
  52. resume: function () {
  53. Clock.start();
  54. },
  55. stop: function () {
  56. var value = this;
  57. Clock.reset();
  58. },
  59. restart: function () {
  60. Clock.reset();
  61. Clock.start();
  62. },
  63. };
  64. var Unibase;
  65. (function (Unibase) {
  66. let Apps;
  67. (function (Apps) {
  68. let PM;
  69. (function (PM) {
  70. let Components;
  71. (function (Components) {
  72. class TimeTracker extends Unibase.Platform.Core.BaseComponent {
  73. constructor() {
  74. super();
  75. }
  76. cssFiles() {
  77. return [""];
  78. }
  79. jsFiles() {
  80. 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'];
  81. }
  82. init(containerId) {
  83. var instance = this;
  84. instance.html(id, containerId);
  85. $('#startButton').attr('readonly', 'true');
  86. document.addEventListener("click", function (event) {
  87. 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") {
  88. if ($("#pauseButton").is(":visible") == true && $("#stopButton").is(":visible") == true) {
  89. var date = new Date($.now());
  90. date = new Date(Unibase.Platform.Helpers.DateTimeHelper.Instance().formatServerDateTime(date));
  91. instance.ResumeTask(date);
  92. }
  93. }
  94. }, true);
  95. var id = "";
  96. var InstalledAppId = Unibase.Themes.Providers.DetailHelper.installedAppId;
  97. instance.InstalledAppId = InstalledAppId;
  98. for (let obj of Unibase.Themes.Providers.Detail_Settings.Instance().InputParameters) {
  99. if (obj.Key === "hf_" + InstalledAppId + "_recordid") {
  100. id = obj.Value;
  101. }
  102. }
  103. 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'];
  104. instance.fileCacheHelper.loadJsFiles(jsfiles, function () {
  105. var Id = Unibase.Themes.Providers.Detail_Settings.Instance().RecordId;
  106. Bizgaze.Apps.PM.Managers.TaskManager.Instance().getTaskDetails(Id).then(function (response) {
  107. var data = JSON.parse(response.result)[0];
  108. instance.TaskId = data.taskid;
  109. instance.Points = data.points;
  110. instance.RefStatusId = data.refstatusid;
  111. if (data.istaskpause == true) {
  112. var seconds = Number(data.timer.split(":")[0]) * 60 * 60 + Number(data.timer.split(":")[1]) * 60 + data.timer.split(":")[2];
  113. Clock.totalSeconds = Number(seconds);
  114. var timehours = data.timer.split(":")[0];
  115. var timemins = data.timer.split(":")[1];
  116. var timeseconds = data.timer.split(":")[2];
  117. if (timehours == undefined)
  118. timehours = "00:";
  119. if (timemins == undefined)
  120. timehours = "00:";
  121. if (timeseconds == undefined)
  122. timehours = "00";
  123. $('#stopButton').removeClass('hidden');
  124. $('#resumeButton').removeClass('hidden');
  125. if (instance.RefStatusId == 6) {
  126. $('.divTimerResume').removeClass('hidden');
  127. $(".starticon").css("color", "");
  128. }
  129. else if (instance.RefStatusId == 7) {
  130. $("#ProgressButton").prop("disabled", "disabled");
  131. }
  132. }
  133. else if (data.istaskpause == false && data.timerstoppeddate.toString() != "[object Object]") {
  134. $('#stopButton').addClass('hidden');
  135. $('#resumeButton').addClass('hidden');
  136. $("#pauseButton").addClass('hidden');
  137. }
  138. else if (data.istaskpause == false && data.timerstoppeddate.toString() == "[object Object]") {
  139. if (data.timer != "00:00:00" && data.timer.toString() != "[object Object]") {
  140. var timehours = data.timer.split(":")[0];
  141. var timemins = data.timer.split(":")[1];
  142. var timeseconds = data.timer.split(":")[2];
  143. if (timehours == undefined)
  144. timehours = "00:";
  145. if (timemins == undefined)
  146. timehours = "00:";
  147. if (timeseconds == undefined)
  148. timehours = "00";
  149. $('#pauseButton').removeClass('hidden');
  150. $("#ProgressButton").prop("disabled", false);
  151. }
  152. }
  153. instance.load(id, containerId, null);
  154. });
  155. });
  156. }
  157. html(id, containerid) {
  158. let html = `<div class="b-a wrapper"><div class="card"><div id="divTimeTrackerError"></div>
  159. <div class="card-header card-header-action"><span class="" id="hf-widget-title_TimeTracker">Time Tracker</span></div>
  160. <div class="card-body"><div class="row"><div class="col-sm-4 ml-20" style="width:85mm; height:40mm; border:1px solid; background-color: #00acf0; border-radius: 15px; color:white; font-size:15px; font-style:normal;">
  161. <div class="row pt-25"><strong class="pull-left pl-25 pt-0" style="font-size:large">TIMER</strong></div>
  162. <div class="row">
  163. <strong class="pull-left beforeTimer pl-25 pr-15" id="Timer" style="font-size:35px;"><span id="hours">00</span>:<span id="min">00</span>:<span id="sec">00</span></strong>
  164. <a id="startButton" class="divTimerStart btn btn-md">&nbsp;<i class="fa fa-play-circle fa-2x starticon"
  165. aria-hidden="true"></i></a>
  166. <a id="pauseButton" class="divTimerPause hidden btn btn-md">&nbsp;<i class="fa fa-pause-circle-o fa-2x"
  167. aria-hidden="true"></i></a>
  168. <div id="resumeButton" class="divTimerResume hidden btn btn-md">&nbsp;<i class="fa fa-play-circle starticon fa-2x"
  169. aria-hidden="true"></i></div>
  170. <div id="stopButton" class="divTimerStop hidden btn btn-md">&nbsp;<i class="fa fa-stop-circle-o fa-2x" aria-hidden="true"></i></div></div>
  171. <div class="col-xs-5 div_addItems"><a id="btn_additem" title="Show Log" class="default" href="" data-toggle="modal"
  172. data-target="#modalAddItem" data-original-title="Show Log">
  173. <span class="pull-right btn pl-200 pt-2" style="text-decoration:underline;color:white;font-size:large;" onclick="Unibase.Apps.PM.Components.TimeTracker.Instance().showLogDetails();" id="btn_addLog">Log Hours</span></a>
  174. </div></div>
  175. <div class="col-sm-4 ml-20 mt-20 mt-md-0" style="background-color:#7fd5f7;border-radius: 15px;width:85mm; height:40mm;">
  176. <div class="row d-flex mt-20 ml-20">
  177. <span><i class="fa fa-trophy fa-2x" aria-hidden="true" style="color:white"></i></span></div>
  178. <div class="row ml-20"><strong class="pr-15 text-white" style="font-size:40px;" id="txtPoints">
  179. <span>15 pts</span></strong></div></div></div></div></div></div>`;
  180. $("." + containerid).html(html);
  181. return "";
  182. }
  183. load(id, containerid, callback) {
  184. var instance = this;
  185. var Id = Unibase.Themes.Providers.Detail_Settings.Instance().RecordId;
  186. $("#txtPoints").text(instance.Points + ' pts');
  187. $('#startButton').click(function () {
  188. Bizgaze.Apps.PM.Managers.TaskManager.Instance().getTaskByAssignToAndRefStatus().then(function (response) {
  189. if (response.result.toString() != "[]") {
  190. var taskmessage = '';
  191. if (response.result.length == 1)
  192. taskmessage = '' + response.result[0].code + '-' + response.result[0].subject + ' is already Inprogress. Would you like to continue';
  193. else
  194. taskmessage = '' + response.result.length + ' Tasks are inprogress. Would you like to continue';
  195. bootbox.confirm({
  196. message: taskmessage,
  197. buttons: {
  198. confirm: {
  199. label: 'Continue',
  200. className: 'btn-success'
  201. },
  202. cancel: {
  203. label: 'Cancel',
  204. className: 'btn-danger'
  205. }
  206. },
  207. callback: function (result) {
  208. if (result == true) {
  209. $(".divTimerPause").removeClass('hidden');
  210. $(".divTimerStop").removeClass('hidden');
  211. $(".divTimerStart").addClass('hidden');
  212. $("#ProgressButton").prop("disabled", false);
  213. $('#startButton').addClass('startButton Active');
  214. Clock.interval = 0;
  215. Clock.totalSeconds = 0;
  216. var maxId = setTimeout(function () { }, 0);
  217. for (var i = 0; i < maxId; i += 1) {
  218. clearTimeout(i);
  219. }
  220. Clock.start();
  221. }
  222. }
  223. });
  224. }
  225. else {
  226. $(".divTimerPause").removeClass('hidden');
  227. $(".divTimerStop").removeClass('hidden');
  228. $(".divTimerStart").addClass('hidden');
  229. $("#ProgressButton").prop("disabled", false);
  230. $('#startButton').addClass('startButton Active');
  231. Clock.interval = 0;
  232. Clock.totalSeconds = 0;
  233. var maxId = setTimeout(function () { }, 0);
  234. for (var i = 0; i < maxId; i += 1) {
  235. clearTimeout(i);
  236. }
  237. Clock.start();
  238. }
  239. });
  240. });
  241. $('#pauseButton').click(function () {
  242. $(".divTimerPause").addClass('hidden');
  243. $(".divTimerResume").removeClass('hidden');
  244. $(".divTimerStop").removeClass('hidden');
  245. var date = new Date($.now());
  246. date = new Date(Unibase.Platform.Helpers.DateTimeHelper.Instance().formatServerDateTime(date));
  247. instance.pauseTask(date);
  248. Clock.pause();
  249. });
  250. $('#resumeButton').click(function () {
  251. $(".divTimerPause").removeClass('hidden');
  252. $(".divTimerStop").removeClass('hidden');
  253. $(".divTimerResume").addClass('hidden');
  254. seconds = Clock.totalSeconds;
  255. var date = new Date($.now());
  256. var a = document.getElementsByClassName("resume");
  257. if (a != undefined) {
  258. Clock.interval = 0;
  259. }
  260. $('#resumeButton').addClass('resumeButton Active');
  261. Clock.resume();
  262. date = new Date(Unibase.Platform.Helpers.DateTimeHelper.Instance().formatServerDateTime(date));
  263. instance.saveTaskSession(date, null, false, false, false, false);
  264. });
  265. $('#stopButton').click(function () {
  266. $(".divTimerPause").addClass('hidden');
  267. $(".divTimerResume").addClass('hidden');
  268. $(".divTimerStop").addClass('hidden');
  269. $(".divTimerStart").addClass('hidden');
  270. Clock.pause();
  271. var date = new Date($.now());
  272. date = new Date(Unibase.Platform.Helpers.DateTimeHelper.Instance().formatServerDateTime(date));
  273. instance.saveTaskSession(date, date, false, false, true, false);
  274. });
  275. $('#resetButton').click(function () {
  276. Clock.reset();
  277. });
  278. $('#restartButton').click(function () {
  279. Clock.restart();
  280. });
  281. var instance = this;
  282. window.onbeforeunload = function (event) {
  283. if ($("#pauseButton").is(":visible") == true && $("#stopButton").is(":visible") == true) {
  284. var date = new Date($.now());
  285. date = new Date(Unibase.Platform.Helpers.DateTimeHelper.Instance().formatServerDateTime(date));
  286. instance.ResumeTask(date);
  287. }
  288. else {
  289. if ($("#startButton").is(":visible") != true)
  290. instance.updateTimer();
  291. }
  292. };
  293. window.addEventListener("beforeunload", function (e) {
  294. var confirmationMessage = "\o/";
  295. (e || window.event).returnValue = confirmationMessage;
  296. if ($("#pauseButton").is(":visible") == true && $("#stopButton").is(":visible") == true) {
  297. var date = new Date($.now());
  298. date = new Date(Unibase.Platform.Helpers.DateTimeHelper.Instance().formatServerDateTime(date));
  299. instance.ResumeTask(date);
  300. instance.navigationHelper.closePopUp();
  301. }
  302. else {
  303. if ($("#startButton").is(":visible") != true)
  304. instance.updateTimer();
  305. }
  306. return confirmationMessage;
  307. });
  308. instance.getTimer(Id);
  309. if (instance.RefStatusId == 3 || instance.RefStatusId == 6) {
  310. $("#startButton").children.bind('click');
  311. $("#resumeButton").children.bind('click');
  312. }
  313. else {
  314. $("#startButton").children().bind('click', function () { return false; });
  315. $("#resumeButton").children().bind('click', function () { return false; });
  316. $(".starticon").css("color", "#8edde6");
  317. $(".divTimerStop").addClass('hidden');
  318. $("#ProgressButton").prop("disabled", "disabled");
  319. }
  320. if (instance.RefStatusId == 3)
  321. instance.updateTimer();
  322. }
  323. saveTaskSession(startdate, enddate, istimerupdate, ispause, isstop, isloghour) {
  324. var instance = this;
  325. var ismanual = false;
  326. var timer = "";
  327. var pause = false;
  328. var stop = false;
  329. var sessionid = 0;
  330. if (istimerupdate || isstop == true)
  331. timer = $(".beforeTimer").text();
  332. if (ispause)
  333. pause = true;
  334. if (isstop)
  335. stop = true;
  336. startdate = new Date(startdate);
  337. if (($("#hfTaskSessionId").val() != "" && $("#hfTaskSessionId").val() != undefined) || isloghour) {
  338. startdate = Unibase.Platform.Helpers.DateTimeHelper.Instance().formatServerDateTime($("#txt_LogHourStartDate").val());
  339. enddate = Unibase.Platform.Helpers.DateTimeHelper.Instance().formatServerDateTime($("#txt_LogHourEndDate").val());
  340. ismanual = true;
  341. sessionid = $("#hfTaskSessionId").val();
  342. }
  343. var postData = {
  344. taskid: instance.TaskId,
  345. sessionid: sessionid,
  346. startdate: startdate,
  347. enddate: enddate,
  348. timer: timer,
  349. issessionpause: pause,
  350. issessionstop: stop,
  351. ismanual: ismanual,
  352. installedappid: instance.InstalledAppId,
  353. stagestatusid: instance.RefStatusId,
  354. percentage: 0,
  355. };
  356. Bizgaze.Apps.PM.Managers.TaskManager.Instance().saveSessionLog(postData).then(function (response) {
  357. MessageHelper.Instance().showSuccess(response, '');
  358. if (isloghour)
  359. instance.refreshLog();
  360. }, function (response) {
  361. });
  362. }
  363. updateSessionEnd(enddate) {
  364. var instance = this;
  365. var postData = {
  366. taskid: instance.TaskId,
  367. enddate: enddate,
  368. timer: $(".beforeTimer").text(),
  369. percentage: 100,
  370. sessionid: 0,
  371. startdate: new Date(),
  372. issessionpause: false,
  373. issessionstop: false,
  374. ismanual: false,
  375. installedappid: 0,
  376. stagestatusid: 0,
  377. };
  378. Bizgaze.Apps.PM.Managers.TaskManager.Instance().updateSessionLogEndDate(postData).then(function (response) {
  379. MessageHelper.Instance().showSuccess(response, '');
  380. }, function (response) {
  381. MessageHelper.Instance().showError(response, 'divTimeTrackerError');
  382. });
  383. }
  384. pauseTask(enddate) {
  385. var instance = this;
  386. var postData = {
  387. taskid: instance.TaskId,
  388. pausedate: enddate,
  389. timer: $(".beforeTimer").text(),
  390. istaskpause: true,
  391. percentage: 0,
  392. timerstoppeddate: new Date(),
  393. isresumetask: false,
  394. istaskstopped: false
  395. };
  396. Bizgaze.Apps.PM.Managers.TaskManager.Instance().pauseTask(postData).then(function (response) {
  397. instance.saveTaskSession(null, enddate, false, true, false, false);
  398. }, function (response) {
  399. instance.saveTaskSession(null, enddate, false, true, false, false);
  400. MessageHelper.Instance().showError(response, 'divTimeTrackerError');
  401. });
  402. }
  403. ResumeTask(enddate) {
  404. var instance = this;
  405. var postData = {
  406. taskid: instance.TaskId,
  407. pausedate: enddate,
  408. isresumetask: true,
  409. timer: $(".beforeTimer").text(),
  410. istaskpause: false,
  411. percentage: 0,
  412. timerstoppeddate: new Date(),
  413. istaskstopped: false,
  414. };
  415. Bizgaze.Apps.PM.Managers.TaskManager.Instance().resumeTask(postData).then(function (response) {
  416. }, function (response) {
  417. MessageHelper.Instance().showError(response, 'divTimeTrackerError');
  418. });
  419. }
  420. StopTask(enddate) {
  421. var instance = this;
  422. var postData = {
  423. taskid: instance.TaskId,
  424. timerstoppeddate: enddate,
  425. istaskstopped: true,
  426. timer: $(".beforeTimer").text(),
  427. istaskpause: false,
  428. percentage: 0,
  429. pausedate: enddate,
  430. isresumetask: false,
  431. };
  432. Bizgaze.Apps.PM.Managers.TaskManager.Instance().stopTask(postData).then(function (response) {
  433. MessageHelper.Instance().showSuccess(response, '');
  434. }, function (response) {
  435. MessageHelper.Instance().showError(response, 'divTimeTrackerError');
  436. });
  437. }
  438. getTimer(taskId) {
  439. var instance = this;
  440. Bizgaze.Apps.PM.Managers.TaskManager.Instance().getTimerDetails(taskId).then(function (response) {
  441. if (response.result != "") {
  442. if (response != null) {
  443. var result = response.result.split('_');
  444. var data = result[0];
  445. data = data.replace(/['"]+/g, '');
  446. if (result.length > 1) {
  447. if (data == "False") {
  448. var maxId = setTimeout(function () { }, 0);
  449. for (var i = 0; i < maxId; i += 1) {
  450. clearTimeout(i);
  451. }
  452. Clock.totalSeconds = Number(result[1]);
  453. Clock.interval = 0;
  454. Clock.start();
  455. $(".divTimerPause").removeClass('hidden');
  456. $(".divTimerStop").removeClass('hidden');
  457. $(".divTimerStart").addClass('hidden');
  458. }
  459. else if (data == "NotStarted") {
  460. $(".divTimerStart").removeClass('hidden');
  461. $(".divTimerPause").addClass('hidden');
  462. $(".divTimerStop").addClass('hidden');
  463. }
  464. else {
  465. var value = result[1];
  466. value = value.replace(/['"]+/g, '');
  467. function pad(val) { return val > 9 ? val : "0" + val; }
  468. $("#hours").text(pad(Math.floor(Number(value) / 3600)));
  469. $("#min").text(pad(Math.floor(Number(value) / 60 % 60)));
  470. $("#sec").text(pad(parseInt(value) % 60));
  471. Clock.pause();
  472. $(".divTimerStart").addClass('hidden');
  473. $("#ProgressButton").addClass("hidden");
  474. }
  475. }
  476. else {
  477. $(".divTimerStart").removeClass('hidden');
  478. }
  479. }
  480. }
  481. });
  482. }
  483. updateTimer() {
  484. var instance = this;
  485. var date = new Date($.now());
  486. date = new Date(Unibase.Platform.Helpers.DateTimeHelper.Instance().formatServerDateTime(date));
  487. var postData = {
  488. taskid: instance.TaskId,
  489. timerstoppeddate: null,
  490. timer: $(".beforeTimer").text(),
  491. istaskpause: false,
  492. percentage: 0,
  493. pausedate: new Date(),
  494. isresumetask: false,
  495. istaskstopped: false,
  496. };
  497. Bizgaze.Apps.PM.Managers.TaskManager.Instance().updateTimer(postData).then(function (response) {
  498. }, function (response) {
  499. MessageHelper.Instance().showError(response, 'divTimeTrackerError');
  500. });
  501. }
  502. showLogDetails() {
  503. var instance = this;
  504. instance.navigationHelper.popup(0, "", Bizgaze.Apps.PM.Components.SessionLog.Instance(), function () {
  505. instance.refreshLog();
  506. instance.managePermission();
  507. }, Unibase.Platform.Helpers.Size.DockLeft);
  508. }
  509. getTaskSession(id) {
  510. var instance = this;
  511. Bizgaze.Apps.PM.Managers.TaskManager.Instance().getSessionLog(id).then(function (response) {
  512. $('#ul_ShowLog_Details').find('.li-' + id).remove();
  513. $("#hfTaskSessionId").val(id);
  514. Bizgaze.Apps.PM.Components.SessionLog.Instance().addLogHourRow(true);
  515. $("#txt_LogHourStartDate").val(Unibase.Platform.Helpers.DateTimeHelper.Instance().formatLocalDateTimeWithoutSeconds(response.result.startdate));
  516. $("#txt_LogHourEndDate").val(Unibase.Platform.Helpers.DateTimeHelper.Instance().formatLocalDateTimeWithoutSeconds(response.result.enddate));
  517. Bizgaze.Apps.PM.Components.SessionLog.Instance().calculateDateDiff();
  518. }, function (response) {
  519. MessageHelper.Instance().showError(response, 'divTimeTrackerError');
  520. });
  521. }
  522. removeSession(id) {
  523. var instance = this;
  524. Bizgaze.Apps.PM.Managers.TaskManager.Instance().deleteSession(id).then(function (response) {
  525. MessageHelper.Instance().showSuccess(response, '');
  526. instance.refreshLog();
  527. }, function (response) {
  528. MessageHelper.Instance().showError(response, 'divTimeTrackerError');
  529. });
  530. }
  531. refreshLog() {
  532. var instance = this;
  533. var taskId = instance.TaskId;
  534. Bizgaze.Apps.PM.Managers.TaskManager.Instance().getSessionLogDetails(taskId).then(function (response) {
  535. if (response.result.length == 0) {
  536. $('#ul_ShowLog_Details').after('<div class="alert alert-info ma-0" id="div_ShowLog_Details_NoData">There is no Data</div>');
  537. }
  538. $("#ulLogDetails").html('<li class="sessionlog-item hidden"><div class="row mt-10 divAddLogHours_0 hidden"></div></li>');
  539. for (var i = 0; i < response.result.length; i++) {
  540. var data = response.result[i];
  541. var da = moment(data.enddate).format('DD-MM-YYYY hh:mm:ss a');
  542. var ismanual = '';
  543. if (data.ismanual)
  544. ismanual = ' M';
  545. var html = '';
  546. if (data.ismanual) {
  547. html = '<li class="list-group-item sessionlog-item bg-info li-' + data.sessionid + '" >' +
  548. '<div class="row mt-10 divAddLogHours_' + i + ' hidden"></div>' +
  549. '<div class="row mt-10">' +
  550. '<div class="col-sm-4 pl-15"><span class="h6" style="color:white;">' + Unibase.Platform.Helpers.DateTimeHelper.Instance().formatLocalDateTimeWithoutSeconds(data.startdate) + '</span></div>' +
  551. '<div class="col-sm-4 pl-20 mr-45"><span class="h6" style="color:white;">' + Unibase.Platform.Helpers.DateTimeHelper.Instance().formatLocalDateTimeWithoutSeconds(data.enddate) + '</span></div>' +
  552. '<div class="col-sm-2 pl-10"><span class="h6" style="color:white;">' + data.timer + '</span></div>' +
  553. '<div class="col-sm-1 pr-5"><span class="editloghour hidden" onclick="return Unibase.Platform.PM.Components.TimeTracker.Instance().getTaskSession(' + data.sessionid + ');" style="color:white;">' +
  554. '<i class="fa fa-pencil-square-o" aria-hidden="true"></i></span>' +
  555. '<a class="btn-icon pull-right deleteloghour hidden" href="javascript:;" onclick="Unibase.Platform.PM.Components.TimeTracker.Instance().removeSession(' + data.sessionid + ');"><i class="fa fa-trash-o text-white"></i></a></div>' +
  556. '</div></li>';
  557. }
  558. else {
  559. html = '<li class="list-group-item sessionlog-item li-' + data.sessionid + '">' +
  560. '<div class="row mt-10 divAddLogHours_' + i + ' hidden"></div>' +
  561. '<div class="row mt-10">' +
  562. '<div class="col-sm-4 pl-15"><span class="h6">' + Unibase.Platform.Helpers.DateTimeHelper.Instance().formatLocalDateTimeWithoutSeconds(data.startdate) + '</span></div>' +
  563. '<div class="col-sm-4 pl-20 mr-45"><span class="h6">' + Unibase.Platform.Helpers.DateTimeHelper.Instance().formatLocalDateTimeWithoutSeconds(data.enddate) + '</span></div>' +
  564. '<div class="col-sm-2 pl-10"><span class="h6">' + data.timer + '</span></div>' +
  565. '<div class="col-sm-1 pr-5"><span class="editloghour hidden" onclick="return Unibase.Platform.PM.Components.TimeTracker.Instance().getTaskSession(' + data.sessionid + ');">' +
  566. '<i class="fa fa-pencil-square-o" aria-hidden="true"></i></span>' +
  567. '<a class="btn-icon pull-right deleteloghour hidden" href="javascript:;" onclick="Unibase.Platform.PM.Components.TimeTracker.Instance().removeSession(' + data.sessionid + ');"><i class="fa fa-trash-o text-danger"></i></a></div>' +
  568. '</div></li>';
  569. }
  570. $(".sessionlog-item:last").after(html);
  571. }
  572. Bizgaze.Apps.PM.Components.SessionLog.Instance().addLogHourRow(false);
  573. Bizgaze.Apps.PM.Components.SessionLog.Instance().calculateDateDiff();
  574. }, function (response) {
  575. MessageHelper.Instance().showError(response, 'divTimeTrackerError');
  576. });
  577. }
  578. managePermission() {
  579. var instance = this;
  580. Bizgaze.Apps.PM.Managers.TaskManager.Instance().getLogHourPermission().then(function (response) {
  581. if (response.result == '5' || Unibase.Platform.Membership.Infos.Identity.getCurrentUser().isAdmin == true) {
  582. $(".editloghour").removeClass('hidden');
  583. $(".deleteloghour").removeClass('hidden');
  584. }
  585. else {
  586. $(".editloghour").addClass('hidden');
  587. $(".deleteloghour").addClass('hidden');
  588. }
  589. instance.managePermission();
  590. }, function (response) {
  591. MessageHelper.Instance().showError(response, 'divTimeTrackerError');
  592. });
  593. }
  594. static Instance() {
  595. if (this.instance == undefined) {
  596. this.instance = new TimeTracker();
  597. }
  598. return this.instance;
  599. }
  600. }
  601. Components.TimeTracker = TimeTracker;
  602. })(Components = PM.Components || (PM.Components = {}));
  603. })(PM = Apps.PM || (Apps.PM = {}));
  604. })(Apps = Unibase.Apps || (Unibase.Apps = {}));
  605. })(Unibase || (Unibase = {}));