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.

attendence.js 73KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011
  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 = "";
  810. let _checkin = instance.log_data.settings.filter(function (o) { return o.settingName === "checkin"; });
  811. if (_checkin.length != 0) {
  812. started_time = _checkin[0].settingValue;
  813. }
  814. instance.employeeid = instance.log_data.userId;
  815. Bizgaze.Apps.Hrms.Managers.AttendenceManager.Instance().getLoginDetails(instance.employeeid).then(function (response) {
  816. if (started_time != '') {
  817. if (response.result != '' && response.result != null) {
  818. let last_record = response.result[response.result.length - 1];
  819. let timeno = last_record.CheckIn;
  820. instance.startdate = last_record.CheckIn;
  821. instance.attendenceid = last_record.AttendanceId;
  822. instance.attendencelogid = last_record.AttendancelogId;
  823. instance.time_ne = moment.utc(last_record.CheckIn).local();
  824. let Checkin_timee = new Date(instance.time_ne);
  825. let start_ampm = Checkin_timee.getHours() >= 12 ? 'PM' : 'AM';
  826. 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;
  827. $('.start_time').html(start_times);
  828. if (timeno == undefined) {
  829. $("#check_in_btn").removeClass("d-none");
  830. $("#check_out_btn").addClass("d-none");
  831. }
  832. else {
  833. instance.startTime = instance.time_ne;
  834. let Checkin_time = new Date(instance.startTime);
  835. let time = Checkin_time.getTime();
  836. instance.timer_arrref = instance.startTime;
  837. instance.timer = setInterval(instance.clockTick, 1000);
  838. $("#check_in_btn").addClass("d-none");
  839. $("#check_out_btn").removeClass("d-none");
  840. $(".timing").addClass("d-none");
  841. $(".start_timing").removeClass("d-none");
  842. $(".output_re").removeClass("d-none");
  843. }
  844. }
  845. }
  846. else {
  847. if (response.result != '' && response.result != null) {
  848. let last_record = response.result[response.result.length - 1];
  849. let timeno = last_record.CheckIn;
  850. instance.startdate = last_record.CheckIn;
  851. instance.attendenceid = last_record.AttendanceId;
  852. instance.attendencelogid = last_record.AttendancelogId;
  853. instance.time_ne = moment.utc(last_record.CheckIn).local();
  854. let Checkin_timeer = new Date(instance.time_ne);
  855. let startt_ampm = Checkin_timeer.getHours() >= 12 ? 'PM' : 'AM';
  856. 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;
  857. $('.start_time').html(start_timers);
  858. if (timeno == undefined) {
  859. $("#check_in_btn").removeClass("d-none");
  860. $("#check_out_btn").addClass("d-none");
  861. }
  862. else {
  863. instance.startTime = instance.time_ne;
  864. instance.timer_arrref = instance.startTime;
  865. instance.timer = setInterval(instance.clockTick, 1000);
  866. $("#check_in_btn").addClass("d-none");
  867. $("#check_out_btn").removeClass("d-none");
  868. $(".timing").addClass("d-none");
  869. $(".start_timing").removeClass("d-none");
  870. $(".output_re").removeClass("d-none");
  871. }
  872. }
  873. }
  874. });
  875. }
  876. postUserDetect(payload) {
  877. return __awaiter(this, void 0, void 0, function* () {
  878. let instance = this;
  879. let res = yield Unibase.Apps.Collaboration.ResumeParsingManager.Instance().postUserDetect(payload);
  880. return res;
  881. });
  882. }
  883. SaveCheckOutDetails(enddate) {
  884. let img = $("#photo").attr("src");
  885. let instance = this;
  886. var Startdate = instance.startdate;
  887. var Attendenceid = instance.attendenceid;
  888. var Attendencelogid = instance.attendencelogid;
  889. var address = instance.address;
  890. var Latitude = instance.mylatitude;
  891. var Longitude = instance.mylongtitude;
  892. let data = Unibase.Platform.Membership.Infos.Identity.getCurrentUser();
  893. let userid = data.userId;
  894. var postData = {
  895. CheckoutLocation: address,
  896. CheckoutImage: img,
  897. Attendenceid: Attendenceid,
  898. Attendencelogid: Attendencelogid,
  899. EndDate: enddate,
  900. Startdate: Startdate,
  901. userid: userid,
  902. Latitude: Latitude,
  903. Longitude: Longitude
  904. };
  905. var jsfiles = ['apps/hrms/managers/attendencemanager.js'];
  906. instance.fileCacheHelper.loadJsFiles(jsfiles, function (response) {
  907. Bizgaze.Apps.Hrms.Managers.AttendenceManager.Instance().SaveCheckOutDetails(postData).then(function (response) {
  908. $('#snapBtn').attr({
  909. "data-dismiss": "modal",
  910. "aria-label": "Close"
  911. });
  912. instance.mediaStream.getTracks().forEach((track) => {
  913. track.stop();
  914. });
  915. MessageHelper.Instance().showSuccess(response.message, '');
  916. });
  917. });
  918. }
  919. getUserApplicableShifts() {
  920. let instance = this;
  921. let data = Unibase.Platform.Membership.Infos.Identity.getCurrentUser();
  922. let userid = data.userId;
  923. Bizgaze.Apps.Hrms.Managers.AttendenceManager.Instance().getUserApplicableShifts(userid).then(function (response) {
  924. var data = response.result;
  925. if (data != null) {
  926. var ele_data = data.length;
  927. if (data != undefined && data != null && ele_data != 0) {
  928. instance.shiftfromtime = moment.utc(data[0].fromtime).local();
  929. let Checktime = new Date(instance.shiftfromtime);
  930. let LI_ampm = Checktime.getHours() >= 12 ? 'PM' : 'AM';
  931. 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;
  932. instance.shifttotime = moment.utc(data[0].totime).local();
  933. let Checktotime = new Date(instance.shifttotime);
  934. let Lo_ampm = Checktotime.getHours() >= 12 ? 'PM' : 'AM';
  935. 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;
  936. $(".shift_name").html(`${data[0].shiftname} :`);
  937. $(".shift_timeings").html(`${spl_val} - ${spls_val}`);
  938. }
  939. }
  940. });
  941. }
  942. getAttendanceLog() {
  943. let instance = this;
  944. let data = Unibase.Platform.Membership.Infos.Identity.getCurrentUser();
  945. let userid = data.userId;
  946. Bizgaze.Apps.Hrms.Managers.AttendenceManager.Instance().getAttendanceLog(userid).then(function (response) {
  947. if (response.result !== null) {
  948. instance.last_checkIn = moment.utc(response.result.CheckIn).local();
  949. let Checkin_time = new Date(instance.last_checkIn);
  950. let time = Checkin_time.getTime();
  951. instance.last_checkOut = moment.utc(response.result.CheckOut).local();
  952. let Checkout_time = new Date(instance.last_checkOut);
  953. let Ctime = Checkout_time.getTime();
  954. let LI_ampm = Checkin_time.getHours() >= 12 ? 'PM' : 'AM';
  955. 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;
  956. let LO_ampm = Checkout_time.getHours() >= 12 ? 'PM' : 'AM';
  957. 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;
  958. if (response.result != null) {
  959. $('.start_time').html(last_checkIn);
  960. $('.end_time').html(last_checkOut);
  961. let difference = Ctime - time;
  962. difference = difference / 1000;
  963. let hourDifference = Math.floor(difference / 3600);
  964. difference -= hourDifference * 3600;
  965. let minuteDifference = Math.floor(difference / 60);
  966. difference -= minuteDifference * 60;
  967. let due_time = `${Bizgaze.Apps.Hrms.Components.Attendence.Instance().addzero(hourDifference)}:${Bizgaze.Apps.Hrms.Components.Attendence.Instance().addzero(minuteDifference)}`;
  968. if (hourDifference > 9 || hourDifference == 9) {
  969. $(".Duration_time").addClass("text-success").removeClass("text-danger");
  970. }
  971. else {
  972. $(".Duration_time").addClass("text-danger").removeClass("text-success");
  973. }
  974. $(".due_time").html(due_time);
  975. }
  976. }
  977. });
  978. }
  979. getAttendanceLogLastRecord() {
  980. let instance = this;
  981. let data = Unibase.Platform.Membership.Infos.Identity.getCurrentUser();
  982. let userid = data.userId;
  983. Bizgaze.Apps.Hrms.Managers.AttendenceManager.Instance().getAttendanceLogLastRecord(userid).then(function (response) {
  984. instance.last_checktable = response.result.CheckOut;
  985. if (instance.last_checktable == "0001-01-01T00:00:00") {
  986. $('.checkIn_err').addClass('d-none');
  987. }
  988. else {
  989. $('.checkIn_err').removeClass('d-none');
  990. $("#modal_closebtn").removeClass('d-none');
  991. $("#snapBtn").addClass('d-none');
  992. $("#cam").addClass('d-none');
  993. $("#user_location").addClass('d-none');
  994. $("#CancelBtn").addClass("d-none");
  995. }
  996. });
  997. }
  998. static Instance() {
  999. if (this.instance === undefined)
  1000. this.instance = new Attendence();
  1001. return this.instance;
  1002. }
  1003. }
  1004. Components.Attendence = Attendence;
  1005. })(Components = Hrms.Components || (Hrms.Components = {}));
  1006. })(Hrms = Apps.Hrms || (Apps.Hrms = {}));
  1007. })(Apps = Bizgaze.Apps || (Bizgaze.Apps = {}));
  1008. })(Bizgaze || (Bizgaze = {}));