Built files from Bizgaze WebServer
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

attendence.js 73KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007
  1. var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
  2. function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
  3. return new (P || (P = Promise))(function (resolve, reject) {
  4. function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
  5. function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
  6. function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
  7. step((generator = generator.apply(thisArg, _arguments || [])).next());
  8. });
  9. };
  10. var Bizgaze;
  11. (function (Bizgaze) {
  12. let Apps;
  13. (function (Apps) {
  14. let Hrms;
  15. (function (Hrms) {
  16. let Components;
  17. (function (Components) {
  18. class Attendence extends Unibase.Platform.Core.BaseComponent {
  19. constructor() {
  20. super(...arguments);
  21. this.attendencelogid = 0;
  22. this.timer = null;
  23. this.timer_arrref = [];
  24. this.starttimerobj = [];
  25. }
  26. init(containerid) {
  27. let instance = this;
  28. instance.fileCacheHelper.loadJsFiles(["platform/membership/components/checkindetails.js", "apps/hrms/managers/attendencemanager.js", "apps/communications/ai/components/resumeparsingmanager.js"], function () {
  29. instance.loadCustomHTML(containerid);
  30. });
  31. }
  32. cssFiles() {
  33. return [];
  34. }
  35. html(id, containerid) {
  36. var instance = this;
  37. let html = ``;
  38. return html;
  39. }
  40. load(id, containerid, callback) {
  41. var instance = this;
  42. }
  43. jsFiles() {
  44. return ["apps/hrms/components/attendence.js", "apps/hrms/managers/attendencemanager.js", "apps/communications/ai/components/resumeparsingmanager.js", "platform/core/helpers/mobile/interfaces/imobilehelper.js"];
  45. }
  46. loadCustomHTML(containerid) {
  47. let instance = this;
  48. let capture_modal = `
  49. <div class="modal fade hide" id="caputerModel" tabindex="-1" role="dialog" aria-labelledby="exampleModalCenterTitle" aria-hidden="true">
  50. <div class="modal-dialog modal-dialog-centered" role="document">
  51. <div class="modal-content">
  52. <div class="modal-header border-0 py-2">
  53. <button type="button" class="close" data-dismiss="modal" id="CancelBtn" aria-label="Close" data-tooltip="true" data-placement="right" title="Cancel">
  54. <span aria-hidden="true">&times;</span>
  55. </button>
  56. </div>
  57. <div class="modal-body pt-0 position-relative">
  58. <div class="pb-40 pt-40 shift_err text-center d-none"><p>No Shift's Available</p></div>
  59. <div class="pb-20 pt-40 checkIn_err text-center d-none"><p>You are Already Check Out</p></div>
  60. <div id="caputer_video" class="d-none User_Picture">
  61. <div class="position-relative">
  62. <video id="cam" autoplay muted playsinline style="transform: scaleX(-1);">Not available </video>
  63. <canvas id="canvas" class="d-none" style="transform: scaleX(-1);"></canvas>
  64. <img id="photo" alt="The screen capture will appear in this box." style="transform: scaleX(-1);" class="d-none">
  65. <div class="text-center position-absolute suggest_err">
  66. <span class="loader-pendulums d-none" id="img_check"></span>
  67. <span class="capture_err d-none text-danger font-16"></span>
  68. </div>
  69. <div class="position-absolute switch_cam d-none" style="bottom:0px;width:100%;text-align:center;font-size:20px">
  70. <div class="cam_view" style="width:100%;max-width:10%;margin:auto">
  71. <input type="checkbox" id="camera_view" class="d-none"/>
  72. <label class="cam_front" for="camera_view">
  73. <img src="tenants/themes/compact/imgs/rotate.png" class="cam_img p-1 bg-white" style="width:100%;"/>
  74. </label>
  75. </div>
  76. </div>
  77. </div>
  78. <div class="bg-white" id="location_data"></div>
  79. </div>
  80. </div>
  81. </div>
  82. </div>`;
  83. $("#_bizgaze_modal").html(capture_modal);
  84. let html = '';
  85. if (screen.width > 576) {
  86. html = ` <div class="check_in_timer" id="Check_in_timer">
  87. <div class="card border-0 shadow p-3">
  88. <div class="check_in_body">
  89. <div class="d-flex align-items-center justify-content-between pb-1">
  90. <span class="biz-highlight-bg-color font-weight-500 font-16">Attendance</span>
  91. <span class="" data-tooltip="true" title="Report"><i class="dripicons dripicons-graph-pie view_Details cursor-pointer"></i></span>
  92. </div>
  93. <div class="text-center">
  94. <div class="timer font-weight-600 font-25 d-flex justify-content-center align-items-center">
  95. <img src="tenants/themes/compact/imgs/start_timer.png" class="timing"/>
  96. <img src="tenants/themes/compact/imgs/start_timer1.gif" class="d-none start_timing"/>
  97. <div class="run_time">
  98. <span class="output">00:00:00</span>
  99. <span class="output_re d-none"></span>
  100. </div>
  101. <div>Hrs</div>
  102. </div>
  103. <div class="text-dark h-10p">
  104. <span class="list-item-main-title font-weight-500 shift_name font-14"></span>
  105. <span class="shift_timeings font-14"></span>
  106. </div>
  107. </div>
  108. <div class="text-center pt-4 pb-3">
  109. <div>
  110. <button type="button" class="btn btn-primary px-0 w-50" id="check_in_btn">
  111. <span>Check-in</span>
  112. </button>
  113. <button type="button" class="btn btn-primary text-white py-1 d-none px-0 w-50" id="check_out_btn">
  114. <span>Check-out</span>
  115. </button>
  116. </div>
  117. </div>
  118. <div class="pt-1 check_timings">
  119. <div class="row align-items-center font-weight-500">
  120. <div class="col-4 strttime">
  121. <div class="d-flex align-items-center startime justify-content-md-center">
  122. <img src="tenants/themes/compact/imgs/Start.png"/>
  123. <div class="d-flex flex-column flex-shrink-0" id="Check_in_time">
  124. <span class="start_time mb-0 text-dark font-13">00:00</span>
  125. <span class="font-13">Check In</span>
  126. </div>
  127. </div>
  128. </div>
  129. <div class="col-4 text-center border-left border-right endtime">
  130. <div class="d-flex justify-content-center align-items-center">
  131. <img src="tenants/themes/compact/imgs/End.png"/>
  132. <div class="d-flex flex-column flex-shrink-0 text-left" id="Check_out_time">
  133. <span class="end_time mb-0 text-dark font-13">00:00</span>
  134. <span class="font-13">Check Out</span>
  135. </div>
  136. </div>
  137. </div>
  138. <div class="col-4 text-right">
  139. <div class="d-flex justify-content-center align-items-center duration">
  140. <img src="tenants/themes/compact/imgs/Duration.png"/>
  141. <div class="d-flex flex-column flex-shrink-0 text-left" id="Check_duration">
  142. <span class="mb-0 Duration_time font-13 text-danger"><span class="due_time">00:00</span> Hrs</span>
  143. <span class="font-13">Duration</span>
  144. </div>
  145. </div>
  146. </div>
  147. </div>
  148. </div>
  149. </div>
  150. </div>
  151. </div>`;
  152. $('.suggest_err').attr({ 'style': 'top:50%;width:100%;max-width:100%' });
  153. }
  154. else {
  155. html = `<div class="check_in_timer" id="Check_in_timer">
  156. <div class="card border-0 shadow p-3">
  157. <div class="check_in_body">
  158. <div class="d-flex align-items-center justify-content-between">
  159. <span class="font-weight-600 font-18">Attendance</span>
  160. <span><i class="dripicons dripicons-graph-pie view_Details cursor-pointer"></i></span>
  161. </div>
  162. <div class="py-1">
  163. <div class="timer d-flex justify-content-between align-items-center">
  164. <div class="timer font-weight-600 font-25 d-flex flex-grow-1 align-items-center">
  165. <img src="tenants/themes/compact/imgs/start_timer.png" class="timing"/>
  166. <img src="tenants/themes/compact/imgs/start_timer1.gif" class="d-none start_timing"/>
  167. <div class="run_time">
  168. <span class="output">00:00:00</span>
  169. <span class="output_re d-none"></span>
  170. </div>
  171. <div class="font-18">Hrs</div>
  172. </div>
  173. <div class="">
  174. <button type="button" class="btn btn-primary" id="check_in_btn">
  175. <span class="font-14">Check In</span>
  176. </button>
  177. <button type="button" class="btn biz-highlight-color text-white d-none" id="check_out_btn">
  178. <span class="font-14">Check Out</span>
  179. </button>
  180. </div>
  181. </div>
  182. <div class="d-flex align-items-center font-13">
  183. <div class="list-item-main-title pr-1 font-weight-500 font-13 shift_name"></div>
  184. <div class="text-dark">
  185. <span class="shift_timeings"></span>
  186. </div>
  187. </div>
  188. </div>
  189. <div class="pt-2 check_timings">
  190. <div class="row align-items-center font-weight-500">
  191. <div class="col-4 strttime">
  192. <div class="d-flex align-items-center">
  193. <img src="tenants/themes/compact/imgs/Start.png"/>
  194. <div class="d-flex flex-column flex-shrink-0 " id="Check_in_time">
  195. <span class="start_time mb-0 text-dark">00:00</span>
  196. <span class="check">Check In</span>
  197. </div>
  198. </div>
  199. </div>
  200. <div class="col-4 text-center border-left border-right endtime">
  201. <div class="d-flex justify-content-center align-items-center">
  202. <img src="tenants/themes/compact/imgs/End.png"/>
  203. <div class="d-flex flex-column flex-shrink-0 text-left" id="Check_out_time">
  204. <span class="end_time mb-0 text-dark">00:00</span>
  205. <span class="check">Check Out</span>
  206. </div>
  207. </div>
  208. </div>
  209. <div class="col-4 text-right duration">
  210. <div class="d-flex justify-content-center align-items-center">
  211. <img src="tenants/themes/compact/imgs/Duration.png"/>
  212. <div class="d-flex flex-column flex-shrink-0 text-left" id="Check_duration">
  213. <span class="mb-0 Duration_time text-danger"><span class="due_time">00:00</span> Hrs</span>
  214. <span class="check">Duration</span>
  215. </div>
  216. </div>
  217. </div>
  218. </div>
  219. </div>
  220. </div>
  221. </div>
  222. </div>`;
  223. $('.suggest_err').attr({ 'style': 'top:50%;width:100%;max-width:100%' });
  224. $("#canvas").removeAttr("width");
  225. $("#canvas").removeAttr("height");
  226. }
  227. $('#' + containerid).html(html);
  228. let check_profile = Unibase.Platform.Membership.Infos.Identity.currentUser.photoUrl;
  229. if (check_profile == '' || check_profile == null) {
  230. let err_html = `<div>
  231. <p class="font-15 no_profile pt-10 text-center text-danger">Please Upload Your Profile Picture</p>
  232. </div>`;
  233. $("#location_data").html(err_html);
  234. $(".loader-icon").addClass("d-none");
  235. $("#caputerModel").removeClass("show").attr("style", "display:none;");
  236. }
  237. else {
  238. let no_html = `<div> <p id="user_location" class="font-14 py-2 text-dark text-left"></p>
  239. <div class="d-flex align-items-center justify-content-end pb-3">
  240. <button type="button" class="btn btn-primary rounded-pill py-1" id="snapBtn" aria-label="Close">Capture</button>
  241. <button type="button" class="btn btn-danger rounded-pill d-none py-1" id="retakeBtn">Re-Capture</button>
  242. <button type="button" class="btn btn-primary rounded-pill d-none py-1" data-dismiss="modal" aria-label="Close" id="modal_closebtn">Ok</button>
  243. </div>
  244. </div>`;
  245. $("#location_data").html(no_html);
  246. }
  247. instance.getAttendanceLog();
  248. instance.attendenceCheckIn();
  249. instance.getUserApplicableShifts();
  250. instance.takeImage();
  251. instance.retakeImage();
  252. instance.viewattendenceReport();
  253. instance.afterload();
  254. instance.attendencecheckout();
  255. instance.modalcheckout();
  256. instance.attendenceCancle();
  257. }
  258. loadCheckIn(containerid) {
  259. let instance = this;
  260. instance.loadCustomHTML(containerid);
  261. }
  262. Location() {
  263. if (navigator.geolocation) {
  264. $("#snapBtn").attr("disabled", "disabled");
  265. navigator.geolocation.getCurrentPosition(Bizgaze.Apps.Hrms.Components.Attendence.Instance().geoLocationSuccess, Bizgaze.Apps.Hrms.Components.Attendence.Instance().geoLocationError, { timeout: 10000 });
  266. }
  267. else {
  268. alert("your browser doesn't support geolocation");
  269. }
  270. ;
  271. }
  272. geoLocationSuccess(pos) {
  273. const instance = Bizgaze.Apps.Hrms.Components.Attendence.Instance();
  274. let loadingTimeout;
  275. instance.mylatitude = pos.coords.latitude;
  276. instance.mylongtitude = pos.coords.longitude;
  277. var loading = function () {
  278. $("#user_location").text("fetching...");
  279. };
  280. loadingTimeout = setTimeout(loading, 600);
  281. const apikey = _mapsettings.key();
  282. var request = $.get(`https://maps.googleapis.com/maps/api/geocode/json?latlng=${instance.mylatitude},${instance.mylongtitude}&key=${apikey}`).done(function (data) {
  283. if (loadingTimeout) {
  284. clearTimeout(loadingTimeout);
  285. loadingTimeout = null;
  286. instance.address = data.results[0].formatted_address;
  287. $("#user_location").html("<span class='font-weight-600'>Location :</span> " + instance.address);
  288. let ele = $("#user_location").find("span");
  289. let ele_val = ele[0];
  290. let Cam_ele = $("#cam").hasClass("d-none");
  291. if (ele_val != undefined && Cam_ele == false) {
  292. $("#snapBtn").removeAttr("disabled");
  293. }
  294. else {
  295. $("#snapBtn").attr("disabled", "disabled");
  296. }
  297. }
  298. }).fail(function () {
  299. $("#snapBtn").addClass("d-none");
  300. });
  301. }
  302. ;
  303. geoLocationError(error) {
  304. var errors = {
  305. 1: "Permission denied",
  306. 2: "Position unavailable",
  307. 3: "Request timeout"
  308. };
  309. if (errors[error.code]) {
  310. $("#user_location").html("<span class='font-weight-500 text-danger'>Please enable your Location...</span>");
  311. $("#snapBtn").attr("disabled", "disabled");
  312. }
  313. }
  314. ;
  315. addzero(x) {
  316. if (x < 10) {
  317. return x = '0' + x;
  318. }
  319. else {
  320. return x;
  321. }
  322. }
  323. twelvehours(x) {
  324. if (x > 12) {
  325. return x = x - 12;
  326. }
  327. else if (x == 0) {
  328. return x = 12;
  329. }
  330. else {
  331. return x;
  332. }
  333. }
  334. cemeraCapture() {
  335. const instance = Bizgaze.Apps.Hrms.Components.Attendence.Instance();
  336. instance.constraints = {
  337. audio: false,
  338. video: {
  339. width: { ideal: 640 },
  340. height: { ideal: 480 },
  341. facingMode: "user"
  342. },
  343. };
  344. instance.getMediaStream();
  345. }
  346. getMediaStream() {
  347. const instance = Bizgaze.Apps.Hrms.Components.Attendence.Instance();
  348. function getMediaStream(constraints) {
  349. return __awaiter(this, void 0, void 0, function* () {
  350. try {
  351. instance.mediaStream = yield navigator.mediaDevices.getUserMedia(constraints);
  352. instance.video = document.getElementById('cam');
  353. instance.video.srcObject = instance.mediaStream;
  354. instance.video.onloadedmetadata = (event) => {
  355. let cam_err = event.currentTarget;
  356. if (cam_err != null) {
  357. let shift_err = $('.checkIn_err').hasClass("d-none");
  358. if (shift_err == true) {
  359. $("#cam").removeClass("d-none");
  360. instance.video.play();
  361. $(".cam_err").remove();
  362. }
  363. }
  364. };
  365. }
  366. catch (err) {
  367. console.log(err.message);
  368. $("#cam").addClass("d-none");
  369. $(".cam_err").removeClass("d-none");
  370. let arr_val = $("#user_location").find("span").hasClass("cam_loc_err");
  371. if (arr_val != true) {
  372. $("#cam").after("<span class='font-weight-500 text-danger cam_err'>Please enable your Camera...</span>");
  373. }
  374. let cam_val = $("#cam").parent().find("span").hasClass("cam_err");
  375. let loc_val = $("#user_location").find("span").hasClass("text-danger");
  376. if (cam_val && loc_val) {
  377. $("#cam").parent().find(".cam_err").remove();
  378. $("#user_location").html("<span class='font-weight-500 text-danger cam_loc_err'>Please enable your Location and Camera...</span>");
  379. }
  380. $("#snapBtn").attr("disabled", "disabled");
  381. }
  382. });
  383. }
  384. getMediaStream(instance.constraints);
  385. }
  386. switchCamera(cameraMode) {
  387. return __awaiter(this, void 0, void 0, function* () {
  388. const instance = Bizgaze.Apps.Hrms.Components.Attendence.Instance();
  389. try {
  390. if (instance.mediaStream != null && instance.mediaStream.active) {
  391. var tracks = instance.mediaStream.getVideoTracks();
  392. tracks.forEach(track => {
  393. track.stop();
  394. });
  395. }
  396. document.getElementById('cam').srcObject = null;
  397. instance.constraints.video.facingMode = cameraMode;
  398. yield instance.getMediaStream();
  399. }
  400. catch (err) {
  401. console.log(err.message);
  402. }
  403. });
  404. }
  405. takePicture() {
  406. const instance = Bizgaze.Apps.Hrms.Components.Attendence.Instance();
  407. instance.canvas = document.getElementById('canvas');
  408. instance.videos = document.getElementById('cam');
  409. let photo = document.getElementById('photo');
  410. let context = instance.canvas.getContext('2d');
  411. const height = instance.videos.videoHeight;
  412. const width = instance.videos.videoWidth;
  413. if (width && height) {
  414. instance.canvas.width = width;
  415. instance.canvas.height = height;
  416. context.drawImage(instance.video, 0, 0, width, height);
  417. var data = instance.canvas.toDataURL('image/png');
  418. const webp = context.canvas.toDataURL("image/webp", 0.8);
  419. photo.setAttribute('style', "transform: scaleX(-1)");
  420. $("#photo").attr('src', data);
  421. }
  422. else {
  423. Bizgaze.Apps.Hrms.Components.Attendence.Instance().clearPhoto();
  424. }
  425. }
  426. ;
  427. clearPhoto() {
  428. let instance = Bizgaze.Apps.Hrms.Components.Attendence.Instance();
  429. let photo = document.getElementById('photo');
  430. let context = instance.canvas.getContext('2d');
  431. context.fillStyle = "#AAA";
  432. context.fillRect(0, 0, instance.canvas.width, instance.canvas.height);
  433. var data = instance.canvas.toDataURL('image/png');
  434. photo.removeAttribute('src');
  435. }
  436. ;
  437. clockTick() {
  438. const instance = Bizgaze.Apps.Hrms.Components.Attendence.Instance();
  439. let r_datd = $(".output_re").hasClass("d-none");
  440. const date = Date.now();
  441. const timer_run = $('#check_in_btn').hasClass("d-none");
  442. if (timer_run == true) {
  443. if (r_datd == false) {
  444. instance.timer_arrref;
  445. const timeref = new Date(date - Number(instance.timer_arrref));
  446. const refhours = timeref.getUTCHours();
  447. const refmins = timeref.getUTCMinutes();
  448. const refsecs = timeref.getUTCSeconds();
  449. const refcount_hrs = refhours > 9 ? refhours : "0" + refhours;
  450. const refcount_mins = refmins > 9 ? refmins : "0" + refmins;
  451. const refcount_secs = refsecs > 9 ? refsecs : "0" + refsecs;
  452. $(".output").html(`${refcount_hrs}:${refcount_mins}:${refcount_secs}`);
  453. }
  454. else {
  455. const timeElaspsed = new Date(date - Number(instance.starttimerobj));
  456. const hours = timeElaspsed.getUTCHours();
  457. const mins = timeElaspsed.getUTCMinutes();
  458. const secs = timeElaspsed.getUTCSeconds();
  459. const count_hrs = hours > 9 ? hours : "0" + hours;
  460. const count_mins = mins > 9 ? mins : "0" + mins;
  461. const count_secs = secs > 9 ? secs : "0" + secs;
  462. $(".output").html(`${count_hrs}:${count_mins}:${count_secs}`);
  463. }
  464. }
  465. }
  466. reset() {
  467. const instance = Bizgaze.Apps.Hrms.Components.Attendence.Instance();
  468. clearInterval(instance.timer);
  469. let timerreset = $('.output').text();
  470. let timerin = timerreset.includes("NaN");
  471. if (timerin == true) {
  472. $('.output').empty();
  473. $('.output').html(`00:00:00`);
  474. }
  475. else {
  476. $('.output').empty();
  477. $('.output').html(`00:00:00`);
  478. }
  479. }
  480. attenanceSnap() {
  481. let instance = Bizgaze.Apps.Hrms.Components.Attendence.Instance();
  482. let checkedIn = $("#check_in_btn").hasClass("d-none");
  483. let online_cather = window.navigator.onLine;
  484. if (checkedIn == false) {
  485. if (online_cather) {
  486. $("#check_in_btn").attr({ "data-toggle": "modal", "data-backdrop": "false", "data-target": "#caputerModel" });
  487. let shift_name = $('.shift_name').text();
  488. let shift_time = $('.shift_timeings').text();
  489. if (shift_name == '' && shift_time == '') {
  490. $('.close').removeClass("d-none");
  491. $('.shift_err').removeClass('d-none');
  492. }
  493. else {
  494. $("#caputer_video").removeClass("d-none");
  495. $("#user_location").removeClass("d-none");
  496. $("#CancelBtn").removeClass("d-none");
  497. $(".capture_err").addClass("d-none");
  498. $(".loader-icon").addClass("d-none");
  499. $('.checkIn_err').addClass('d-none');
  500. $("#modal_closebtn").addClass('d-none');
  501. $('#Check_in_time').removeClass("d-none");
  502. $("#cam").removeClass("d-none");
  503. $("#location_data").removeClass("d-none");
  504. $("#snapBtn").removeClass("d-none");
  505. $("#retakeBtn").addClass("d-none");
  506. $("#close_btn").addClass("d-none");
  507. }
  508. }
  509. else {
  510. $(this).removeAttr("data-target data-toggle data-backdrop");
  511. }
  512. }
  513. else {
  514. if (online_cather) {
  515. $("#check_out_btn").attr({ "data-toggle": "modal", "data-backdrop": "false", "data-target": "#caputerModel" });
  516. $("#caputer_video").removeClass("d-none");
  517. $(".capture_err").addClass("d-none");
  518. $(".loader-icon").addClass("d-none");
  519. $('#Check_in_time').removeClass("d-none");
  520. $("#cam").removeClass("d-none");
  521. $("#location_data").removeClass("d-none");
  522. $("#CancelBtn").removeClass("d-none");
  523. $("#snapBtn").removeClass("d-none");
  524. $("#retakeBtn").addClass("d-none");
  525. let removeVide = $('#modal_closebtn').hasClass("d-none");
  526. if (removeVide == false) {
  527. instance.mediaStream.getTracks().forEach((track) => {
  528. track.stop();
  529. });
  530. }
  531. }
  532. else {
  533. $(this).removeAttr("data-target data-toggle data-backdrop");
  534. }
  535. }
  536. }
  537. attendenceCheckIn() {
  538. if (isMobileApp()) {
  539. Unibase.Platform.Helpers.MobileHelper.Instance().grantPermission(Unibase.Platform.Helpers.Enums.MobilePermissionType.Camera, Bizgaze.Apps.Hrms.Components.Attendence.Instance().cemeraCapture);
  540. Unibase.Platform.Helpers.MobileHelper.Instance().grantPermission(Unibase.Platform.Helpers.Enums.MobilePermissionType.Location, Bizgaze.Apps.Hrms.Components.Attendence.Instance().Location);
  541. }
  542. $("#check_in_btn").click(function () {
  543. $("#canvas").addClass("d-none");
  544. Bizgaze.Apps.Hrms.Components.Attendence.Instance().Location();
  545. Bizgaze.Apps.Hrms.Components.Attendence.Instance().cemeraCapture();
  546. Bizgaze.Apps.Hrms.Components.Attendence.Instance().attenanceSnap();
  547. });
  548. }
  549. attendencecheckout() {
  550. if (isMobileApp()) {
  551. Unibase.Platform.Helpers.MobileHelper.Instance().grantPermission(Unibase.Platform.Helpers.Enums.MobilePermissionType.Camera, Bizgaze.Apps.Hrms.Components.Attendence.Instance().cemeraCapture);
  552. Unibase.Platform.Helpers.MobileHelper.Instance().grantPermission(Unibase.Platform.Helpers.Enums.MobilePermissionType.Location, Bizgaze.Apps.Hrms.Components.Attendence.Instance().Location);
  553. }
  554. $("#check_out_btn").click(function () {
  555. $("#canvas").addClass("d-none");
  556. Bizgaze.Apps.Hrms.Components.Attendence.Instance().getAttendanceLogLastRecord();
  557. Bizgaze.Apps.Hrms.Components.Attendence.Instance().Location();
  558. Bizgaze.Apps.Hrms.Components.Attendence.Instance().cemeraCapture();
  559. Bizgaze.Apps.Hrms.Components.Attendence.Instance().attenanceSnap();
  560. });
  561. }
  562. attendenceCancle() {
  563. const instance = Bizgaze.Apps.Hrms.Components.Attendence.Instance();
  564. $("#CancelBtn").click(function () {
  565. $(this).addClass("d-none");
  566. $("#caputer_video").addClass("d-none");
  567. $("#photo").attr("src", '');
  568. $("#retakeBtn").addClass("d-none");
  569. $("#close_btn").addClass("d-none");
  570. $("#img_check").addClass("d-none");
  571. $(".cam_err").remove();
  572. $(".cam_loc_err").remove();
  573. instance.mediaStream.getTracks().forEach((track) => {
  574. track.stop();
  575. });
  576. $(".capture_err").addClass("d-none");
  577. $(".capture_err").parent().removeClass("align-items-end");
  578. });
  579. }
  580. modalcheckout() {
  581. const instance = Bizgaze.Apps.Hrms.Components.Attendence.Instance();
  582. $('#modal_closebtn').click(function () {
  583. instance.mediaStream.getTracks().forEach((track) => {
  584. track.stop();
  585. });
  586. Bizgaze.Apps.Hrms.Components.Attendence.Instance().reset();
  587. if (instance.startTime != null || instance.timer_arrref != null) {
  588. instance.startTime = undefined;
  589. instance.timer_arrref = undefined;
  590. instance.starttimerobj = undefined;
  591. }
  592. $(".output").removeClass("d-none");
  593. let re_btn = $(".output").hasClass("d-none");
  594. if (re_btn == false) {
  595. $(".output_re").empty();
  596. $('.output').html(`00:00:00`);
  597. $(".output_re").addClass("d-none");
  598. }
  599. $('.output').html(`00:00:00`);
  600. $("#check_out_btn").addClass("d-none");
  601. $("#check_in_btn").removeClass("d-none");
  602. $(".start_timing").addClass('d-none');
  603. $(".timing").removeClass('d-none');
  604. $(".output").removeClass("d-none");
  605. $(".output_re").addClass("d-none");
  606. Bizgaze.Apps.Hrms.Components.Attendence.Instance().getAttendanceLog();
  607. });
  608. }
  609. takeImage() {
  610. const instance = Bizgaze.Apps.Hrms.Components.Attendence.Instance();
  611. let emp_id = Unibase.Platform.Membership.Infos.Identity.currentUser.unibaseId;
  612. let data = Unibase.Platform.Membership.Infos.Identity.getCurrentUser();
  613. let userid = data.userId;
  614. $("#snapBtn").click(function (e) {
  615. return __awaiter(this, void 0, void 0, function* () {
  616. Bizgaze.Apps.Hrms.Components.Attendence.Instance().takePicture();
  617. $("#cam").addClass("d-none");
  618. $(this).addClass("d-none");
  619. $("#img_check").removeClass("d-none");
  620. $("#canvas").addClass("d-none");
  621. $("#canvas").attr("style", "filter:blur(7px);transform:scaleX(-1);max-width:100%");
  622. instance.img_stored = $("#photo").attr("src");
  623. debugger;
  624. if (instance.img_stored !== '') {
  625. $("#canvas").removeClass("d-none");
  626. }
  627. else {
  628. $("#canvas").addClass("d-none");
  629. }
  630. var date = new Date();
  631. let get_month = date.getMonth();
  632. let months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
  633. instance.startDate = Unibase.Platform.Helpers.DateTimeHelper.instance.formatServerDateTime(date);
  634. let userCheckindetails = {
  635. "Latitude": instance.mylatitude,
  636. "Longitude": instance.mylongtitude,
  637. "Address": instance.address,
  638. "imageurl": instance.img_stored,
  639. "Userid": userid,
  640. "StartDate": instance.startDate,
  641. "user_url": window.location.host
  642. };
  643. var Attendenceid = instance.attendenceid;
  644. var Attendencelogid = instance.attendencelogid;
  645. let enddate = Unibase.Platform.Helpers.DateTimeHelper.instance.formatServerDateTime(date);
  646. var Startdate = instance.startdate;
  647. var userCheckoutdetails = {
  648. CheckoutLocation: instance.address,
  649. CheckoutImage: instance.img_stored,
  650. Attendenceid: Attendenceid,
  651. Attendencelogid: Attendencelogid,
  652. Startdate: Startdate,
  653. EndDate: enddate,
  654. userid: userid,
  655. Latitude: instance.mylatitude,
  656. Longitude: instance.mylongtitude,
  657. user_url: window.location.host
  658. };
  659. var jsfiles = ['apps/hrms/managers/attendencemanager.js'];
  660. let checkin = $('#check_in_btn').hasClass("d-none");
  661. if (checkin == false) {
  662. instance.fileCacheHelper.loadJsFiles(jsfiles, function (response) {
  663. Bizgaze.Apps.Hrms.Managers.AttendenceManager.Instance().SaveCheckInDetails(userCheckindetails).then(function (response) {
  664. var CheckIn_data = response.result;
  665. if (CheckIn_data == null) {
  666. $('#caputerModel').modal("show");
  667. $("#canvas").removeClass("d-none");
  668. $("#retakeBtn").removeClass("d-none");
  669. $(".loader-icon").addClass("d-none");
  670. $("#retakeBtn").removeClass("d-none");
  671. let html = `<span class="font-weight-600">${response.message}</span>`;
  672. $(".capture_err").html(html);
  673. $(".capture_err").removeClass("d-none");
  674. $("#img_check").addClass("d-none");
  675. }
  676. else {
  677. $('#caputerModel').modal("hide");
  678. $("#check_out_btn").attr({ "data-toggle": "modal", "data-backdrop": "false", "data-target": "#caputerModel" });
  679. $(".timing").addClass("d-none");
  680. $(".start_timing").removeClass("d-none");
  681. $('#snapBtn').addClass("d-none");
  682. $("#img_check").addClass("d-none");
  683. $("#caputer_video").addClass("d-none");
  684. $("#retakeBtn").addClass("d-none");
  685. $("#caputer_video").addClass("d-none");
  686. $("#retakeBtn").addClass("d-none");
  687. $("#check_in_btn").removeAttr("data-toggle data-backdrop data-target");
  688. $("#location_data").addClass("d-none");
  689. $("#check_in_btn").addClass("d-none");
  690. $("#check_out_btn").removeClass("d-none");
  691. instance.mediaStream.getTracks().forEach((track) => {
  692. track.stop();
  693. });
  694. instance.startTime = Date.now();
  695. instance.re_timer = Date.now();
  696. instance.starttimerobj = instance.re_timer;
  697. instance.timer = setInterval(instance.clockTick, 1000);
  698. instance.time_Now = new Date();
  699. let hours = instance.time_Now.getHours();
  700. let ampm = hours >= 12 ? 'PM' : 'AM';
  701. let time = instance.addzero(instance.twelvehours(instance.time_Now.getHours())) + ":" + instance.addzero(instance.time_Now.getMinutes());
  702. instance.Start_time = instance.addzero(instance.twelvehours(instance.time_Now.getHours())) + ":" + instance.addzero(instance.time_Now.getMinutes()) + ' ' + ampm;
  703. $('.start_time').html(instance.Start_time);
  704. }
  705. instance.attendenceid = CheckIn_data.Attendanceid;
  706. instance.attendencelogid = CheckIn_data._Id;
  707. instance.startdate = CheckIn_data.Checkin;
  708. let date_end = `${date.getDate()} ${months[get_month]} ${date.getFullYear()}`;
  709. let User_endTime = `${date_end} ${instance.Start_time}`;
  710. let User_name = Unibase.Platform.Membership.Infos.Identity.currentUser.name;
  711. let User_img = Unibase.Platform.Membership.Infos.Identity.currentUser.photoUrl;
  712. MessageHelper.Instance().ShowAttendenceSuccess(User_name, User_img, response.message, User_endTime, instance.address);
  713. $("#bizgaze_body").parent().find('.jq-toast-wrap').find('.d-flex.list-inline .mr-4').addClass("d-none");
  714. $("#bizgaze_body").parent().find('.jq-toast-wrap').find('.d-flex.list-inline h3.font-14.font-weight-400').addClass("d-none");
  715. });
  716. });
  717. }
  718. else {
  719. instance.fileCacheHelper.loadJsFiles(jsfiles, function (response) {
  720. Bizgaze.Apps.Hrms.Managers.AttendenceManager.Instance().SaveCheckOutDetails(userCheckoutdetails).then(function (response) {
  721. var Check_data = response.result;
  722. if (Check_data == null) {
  723. $('#caputerModel').modal("show");
  724. $("#canvas").removeClass("d-none");
  725. $("#retakeBtn").removeClass("d-none");
  726. $(".loader-icon").addClass("d-none");
  727. $("#retakeBtn").removeClass("d-none");
  728. let html = `<span class="font-weight-600">${response.message}</span>`;
  729. $(".capture_err").html(html);
  730. $(".capture_err").removeClass("d-none");
  731. $("#img_check").addClass("d-none");
  732. }
  733. else {
  734. $('#caputerModel').modal("hide");
  735. instance.mediaStream.getTracks().forEach((track) => {
  736. track.stop();
  737. });
  738. $("#check_out_btn").addClass('d-none');
  739. $("#check_in_btn").removeClass("d-none");
  740. $('.starting_time').addClass("d-none");
  741. $(".start_timing").addClass("d-none");
  742. $("#canvas").addClass('d-none');
  743. $(".loader-pendulums").addClass('d-none');
  744. $("#location_data").addClass("d-none");
  745. $(".timing").removeClass("d-none");
  746. $("#Check_duration").removeClass("d-none");
  747. $("#check_out_btn").removeAttr("data-toggle data-backdrop data-target");
  748. let Current_Time = new Date();
  749. let hours = Current_Time.getHours();
  750. let ampm = hours >= 12 ? 'PM' : 'AM';
  751. instance.End_time = instance.addzero(instance.twelvehours(Current_Time.getHours())) + ":" + instance.addzero(Current_Time.getMinutes()) + ' ' + ampm;
  752. $(".end_time").html(instance.End_time);
  753. let key = "settingValue";
  754. Bizgaze.Apps.Hrms.Components.Attendence.Instance().reset();
  755. if (instance.startTime != null || instance.timer_arrref != null) {
  756. instance.startTime = undefined;
  757. instance.timer_arrref = undefined;
  758. instance.starttimerobj = undefined;
  759. }
  760. $(".output").removeClass("d-none");
  761. let re_btn = $(".output").hasClass("d-none");
  762. if (re_btn == false) {
  763. $(".output_re").empty();
  764. $('.output').html(`00:00:00`);
  765. $(".output_re").addClass("d-none");
  766. }
  767. $('.output').html(`00:00:00`);
  768. let del_setting_val = instance.log_data.settings.filter(function (o) { return o.settingName === "checkin"; })[0];
  769. delete del_setting_val[key];
  770. Bizgaze.Apps.Hrms.Components.Attendence.Instance().getAttendanceLog();
  771. let date_end = `${Current_Time.getDate()} ${months[get_month]} ${Current_Time.getFullYear()}`;
  772. let User_startTime = `${date_end} ${instance.End_time}`;
  773. let User_name = Unibase.Platform.Membership.Infos.Identity.currentUser.name;
  774. let User_img = Unibase.Platform.Membership.Infos.Identity.currentUser.photoUrl;
  775. MessageHelper.Instance().ShowAttendenceSuccess(User_name, User_img, response.message, User_startTime, instance.address);
  776. $("#bizgaze_body").parent().find('.jq-toast-wrap').find('.d-flex.list-inline .mr-4').addClass("d-none");
  777. $("#bizgaze_body").parent().find('.jq-toast-wrap').find('.d-flex.list-inline h3.font-14.font-weight-400').addClass("d-none");
  778. }
  779. });
  780. });
  781. }
  782. });
  783. });
  784. }
  785. retakeImage() {
  786. $("#retakeBtn").click(function () {
  787. $(this).addClass("d-none");
  788. Bizgaze.Apps.Hrms.Components.Attendence.Instance().takePicture();
  789. $("#cam").removeClass("d-none");
  790. $("#canvas").addClass('d-none');
  791. $("#snapBtn").removeClass("d-none");
  792. $("#close_btn").addClass("d-none");
  793. $("#photo").attr('src', '');
  794. $(".capture_err").addClass("d-none");
  795. $(".capture_err").parent().removeClass("align-items-end");
  796. });
  797. }
  798. viewattendenceReport() {
  799. $(".view_Details").click(function () {
  800. var uniqueid = 'Bizgaze_Platform_Analytics_Reports_AttendanceLogdashboard';
  801. var date_now = new Date();
  802. const fromDate = Unibase.Platform.Helpers.DateTimeHelper.Instance().formatServerDate(date_now);
  803. Unibase.Platform.Analytics.Components.ReportViewer.Instance().getReportByUniqueId(uniqueid, null, null, null, fromDate, fromDate);
  804. });
  805. }
  806. afterload() {
  807. const instance = Bizgaze.Apps.Hrms.Components.Attendence.Instance();
  808. instance.log_data = Unibase.Platform.Membership.Infos.Identity.getCurrentUser();
  809. let started_time = instance.log_data.settings.filter(function (o) { return o.settingName === "checkin"; })[0].settingValue;
  810. instance.employeeid = instance.log_data.userId;
  811. Bizgaze.Apps.Hrms.Managers.AttendenceManager.Instance().getLoginDetails(instance.employeeid).then(function (response) {
  812. if (started_time != '') {
  813. if (response.result != '' && response.result != null) {
  814. let last_record = response.result[response.result.length - 1];
  815. let timeno = last_record.CheckIn;
  816. instance.startdate = last_record.CheckIn;
  817. instance.attendenceid = last_record.AttendanceId;
  818. instance.attendencelogid = last_record.AttendancelogId;
  819. instance.time_ne = moment.utc(last_record.CheckIn).local();
  820. let Checkin_timee = new Date(instance.time_ne);
  821. let start_ampm = Checkin_timee.getHours() >= 12 ? 'PM' : 'AM';
  822. let start_times = Bizgaze.Apps.Hrms.Components.Attendence.Instance().addzero(Bizgaze.Apps.Hrms.Components.Attendence.Instance().twelvehours(Checkin_timee.getHours())) + ":" + Bizgaze.Apps.Hrms.Components.Attendence.Instance().addzero(Checkin_timee.getMinutes()) + ' ' + start_ampm;
  823. $('.start_time').html(start_times);
  824. if (timeno == undefined) {
  825. $("#check_in_btn").removeClass("d-none");
  826. $("#check_out_btn").addClass("d-none");
  827. }
  828. else {
  829. instance.startTime = instance.time_ne;
  830. let Checkin_time = new Date(instance.startTime);
  831. let time = Checkin_time.getTime();
  832. instance.timer_arrref = instance.startTime;
  833. instance.timer = setInterval(instance.clockTick, 1000);
  834. $("#check_in_btn").addClass("d-none");
  835. $("#check_out_btn").removeClass("d-none");
  836. $(".timing").addClass("d-none");
  837. $(".start_timing").removeClass("d-none");
  838. $(".output_re").removeClass("d-none");
  839. }
  840. }
  841. }
  842. else {
  843. if (response.result != '' && response.result != null) {
  844. let last_record = response.result[response.result.length - 1];
  845. let timeno = last_record.CheckIn;
  846. instance.startdate = last_record.CheckIn;
  847. instance.attendenceid = last_record.AttendanceId;
  848. instance.attendencelogid = last_record.AttendancelogId;
  849. instance.time_ne = moment.utc(last_record.CheckIn).local();
  850. let Checkin_timeer = new Date(instance.time_ne);
  851. let startt_ampm = Checkin_timeer.getHours() >= 12 ? 'PM' : 'AM';
  852. let start_timers = Bizgaze.Apps.Hrms.Components.Attendence.Instance().addzero(Bizgaze.Apps.Hrms.Components.Attendence.Instance().twelvehours(Checkin_timeer.getHours())) + ":" + Bizgaze.Apps.Hrms.Components.Attendence.Instance().addzero(Checkin_timeer.getMinutes()) + ' ' + startt_ampm;
  853. $('.start_time').html(start_timers);
  854. if (timeno == undefined) {
  855. $("#check_in_btn").removeClass("d-none");
  856. $("#check_out_btn").addClass("d-none");
  857. }
  858. else {
  859. instance.startTime = instance.time_ne;
  860. instance.timer_arrref = instance.startTime;
  861. instance.timer = setInterval(instance.clockTick, 1000);
  862. $("#check_in_btn").addClass("d-none");
  863. $("#check_out_btn").removeClass("d-none");
  864. $(".timing").addClass("d-none");
  865. $(".start_timing").removeClass("d-none");
  866. $(".output_re").removeClass("d-none");
  867. }
  868. }
  869. }
  870. });
  871. }
  872. postUserDetect(payload) {
  873. return __awaiter(this, void 0, void 0, function* () {
  874. let instance = this;
  875. let res = yield Unibase.Apps.Collaboration.ResumeParsingManager.Instance().postUserDetect(payload);
  876. return res;
  877. });
  878. }
  879. SaveCheckOutDetails(enddate) {
  880. let img = $("#photo").attr("src");
  881. let instance = this;
  882. var Startdate = instance.startdate;
  883. var Attendenceid = instance.attendenceid;
  884. var Attendencelogid = instance.attendencelogid;
  885. var address = instance.address;
  886. var Latitude = instance.mylatitude;
  887. var Longitude = instance.mylongtitude;
  888. let data = Unibase.Platform.Membership.Infos.Identity.getCurrentUser();
  889. let userid = data.userId;
  890. var postData = {
  891. CheckoutLocation: address,
  892. CheckoutImage: img,
  893. Attendenceid: Attendenceid,
  894. Attendencelogid: Attendencelogid,
  895. EndDate: enddate,
  896. Startdate: Startdate,
  897. userid: userid,
  898. Latitude: Latitude,
  899. Longitude: Longitude
  900. };
  901. var jsfiles = ['apps/hrms/managers/attendencemanager.js'];
  902. instance.fileCacheHelper.loadJsFiles(jsfiles, function (response) {
  903. Bizgaze.Apps.Hrms.Managers.AttendenceManager.Instance().SaveCheckOutDetails(postData).then(function (response) {
  904. $('#snapBtn').attr({
  905. "data-dismiss": "modal",
  906. "aria-label": "Close"
  907. });
  908. instance.mediaStream.getTracks().forEach((track) => {
  909. track.stop();
  910. });
  911. MessageHelper.Instance().showSuccess(response.message, '');
  912. });
  913. });
  914. }
  915. getUserApplicableShifts() {
  916. let instance = this;
  917. let data = Unibase.Platform.Membership.Infos.Identity.getCurrentUser();
  918. let userid = data.userId;
  919. Bizgaze.Apps.Hrms.Managers.AttendenceManager.Instance().getUserApplicableShifts(userid).then(function (response) {
  920. var data = response.result;
  921. if (data != null) {
  922. var ele_data = data.length;
  923. if (data != undefined && data != null && ele_data != 0) {
  924. instance.shiftfromtime = moment.utc(data[0].fromtime).local();
  925. let Checktime = new Date(instance.shiftfromtime);
  926. let LI_ampm = Checktime.getHours() >= 12 ? 'PM' : 'AM';
  927. let spl_val = Bizgaze.Apps.Hrms.Components.Attendence.Instance().addzero(Bizgaze.Apps.Hrms.Components.Attendence.Instance().twelvehours(Checktime.getHours())) + ":" + Bizgaze.Apps.Hrms.Components.Attendence.Instance().addzero(Checktime.getMinutes()) + ' ' + LI_ampm;
  928. instance.shifttotime = moment.utc(data[0].totime).local();
  929. let Checktotime = new Date(instance.shifttotime);
  930. let Lo_ampm = Checktotime.getHours() >= 12 ? 'PM' : 'AM';
  931. let spls_val = Bizgaze.Apps.Hrms.Components.Attendence.Instance().addzero(Bizgaze.Apps.Hrms.Components.Attendence.Instance().twelvehours(Checktotime.getHours())) + ":" + Bizgaze.Apps.Hrms.Components.Attendence.Instance().addzero(Checktotime.getMinutes()) + ' ' + Lo_ampm;
  932. $(".shift_name").html(`${data[0].shiftname} :`);
  933. $(".shift_timeings").html(`${spl_val} - ${spls_val}`);
  934. }
  935. }
  936. });
  937. }
  938. getAttendanceLog() {
  939. let instance = this;
  940. let data = Unibase.Platform.Membership.Infos.Identity.getCurrentUser();
  941. let userid = data.userId;
  942. Bizgaze.Apps.Hrms.Managers.AttendenceManager.Instance().getAttendanceLog(userid).then(function (response) {
  943. if (response.result !== null) {
  944. instance.last_checkIn = moment.utc(response.result.CheckIn).local();
  945. let Checkin_time = new Date(instance.last_checkIn);
  946. let time = Checkin_time.getTime();
  947. instance.last_checkOut = moment.utc(response.result.CheckOut).local();
  948. let Checkout_time = new Date(instance.last_checkOut);
  949. let Ctime = Checkout_time.getTime();
  950. let LI_ampm = Checkin_time.getHours() >= 12 ? 'PM' : 'AM';
  951. let last_checkIn = Bizgaze.Apps.Hrms.Components.Attendence.Instance().addzero(Bizgaze.Apps.Hrms.Components.Attendence.Instance().twelvehours(Checkin_time.getHours())) + ":" + Bizgaze.Apps.Hrms.Components.Attendence.Instance().addzero(Checkin_time.getMinutes()) + ' ' + LI_ampm;
  952. let LO_ampm = Checkout_time.getHours() >= 12 ? 'PM' : 'AM';
  953. let last_checkOut = Bizgaze.Apps.Hrms.Components.Attendence.Instance().addzero(Bizgaze.Apps.Hrms.Components.Attendence.Instance().twelvehours(Checkout_time.getHours())) + ":" + Bizgaze.Apps.Hrms.Components.Attendence.Instance().addzero(Checkout_time.getMinutes()) + ' ' + LO_ampm;
  954. if (response.result != null) {
  955. $('.start_time').html(last_checkIn);
  956. $('.end_time').html(last_checkOut);
  957. let difference = Ctime - time;
  958. difference = difference / 1000;
  959. let hourDifference = Math.floor(difference / 3600);
  960. difference -= hourDifference * 3600;
  961. let minuteDifference = Math.floor(difference / 60);
  962. difference -= minuteDifference * 60;
  963. let due_time = `${Bizgaze.Apps.Hrms.Components.Attendence.Instance().addzero(hourDifference)}:${Bizgaze.Apps.Hrms.Components.Attendence.Instance().addzero(minuteDifference)}`;
  964. if (hourDifference > 9 || hourDifference == 9) {
  965. $(".Duration_time").addClass("text-success").removeClass("text-danger");
  966. }
  967. else {
  968. $(".Duration_time").addClass("text-danger").removeClass("text-success");
  969. }
  970. $(".due_time").html(due_time);
  971. }
  972. }
  973. });
  974. }
  975. getAttendanceLogLastRecord() {
  976. let instance = this;
  977. let data = Unibase.Platform.Membership.Infos.Identity.getCurrentUser();
  978. let userid = data.userId;
  979. Bizgaze.Apps.Hrms.Managers.AttendenceManager.Instance().getAttendanceLogLastRecord(userid).then(function (response) {
  980. instance.last_checktable = response.result.CheckOut;
  981. if (instance.last_checktable == "0001-01-01T00:00:00") {
  982. $('.checkIn_err').addClass('d-none');
  983. }
  984. else {
  985. $('.checkIn_err').removeClass('d-none');
  986. $("#modal_closebtn").removeClass('d-none');
  987. $("#snapBtn").addClass('d-none');
  988. $("#cam").addClass('d-none');
  989. $("#user_location").addClass('d-none');
  990. $("#CancelBtn").addClass("d-none");
  991. }
  992. });
  993. }
  994. static Instance() {
  995. if (this.instance === undefined)
  996. this.instance = new Attendence();
  997. return this.instance;
  998. }
  999. }
  1000. Components.Attendence = Attendence;
  1001. })(Components = Hrms.Components || (Hrms.Components = {}));
  1002. })(Hrms = Apps.Hrms || (Apps.Hrms = {}));
  1003. })(Apps = Bizgaze.Apps || (Bizgaze.Apps = {}));
  1004. })(Bizgaze || (Bizgaze = {}));