Built files from Bizgaze WebServer
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

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 = {}));