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.

employee_locations.js 84KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071
  1. var Bizgaze;
  2. (function (Bizgaze) {
  3. let Apps;
  4. (function (Apps) {
  5. let Crm;
  6. (function (Crm) {
  7. let Employees;
  8. (function (Employees) {
  9. let Components;
  10. (function (Components) {
  11. class EmployeeLocations extends Unibase.Platform.Core.BaseComponent {
  12. constructor() {
  13. super(...arguments);
  14. this.showdetails = "";
  15. this.initalLoad = true;
  16. this.isTrackingTable = false;
  17. this.lastSelectedEmp = '';
  18. this._gpsTrackEmployee_position_index_pageindex = 0;
  19. this._dateTimeHelper = Unibase.Platform.Helpers.DateTimeHelper.Instance();
  20. this.trackingTodayHTML = '';
  21. this.tableHtmlEmp = '';
  22. this.isMobile = false;
  23. }
  24. cssFiles() {
  25. return [];
  26. }
  27. jsFiles() {
  28. return ['apps/crm/employees/managers/gpslocationmanager.js', 'platform/core/helpers/numberhelper/numberhelper.js', 'apps/crm/employees/components/employee_locations_table.js'];
  29. }
  30. html(id, containerid) {
  31. this.isMobile = $(window).width() <= 1198;
  32. ;
  33. let htmlPort = '';
  34. if (this.isMobile) {
  35. htmlPort = "<div class='fullContainer'><div class='mapContainerMobile'><div id='employeeTrackingMapMobileContainer' class='align-items-center d-flex justify-content-center' style='width:100%;height:100%; min-height:400px;'></div></div></div>";
  36. }
  37. else {
  38. htmlPort = " <div class='row'><div class='employees_list_location col-sm-3 d-flex flex-column align-items-start'> <div class='w-100 searchEmp_containerParent'><div class='d-flex' style='gap:5px'><div class='position-relative searchEmp_container w-100'> <span class='search_emp_icon '> <i class='fa fa-search'></i> </span> <input class='w-100 py-2 employee_search_filter_input' type='text' placeholder='Search Employees'> <a class='filtermodal_emp btn-icon d-none p-2 px-3 pt-3'> <i class='fa fa-close filterIconEmp p-1'></i> </a> <div class='dropdown-menu empfilter_dropdown mt-2 biz-custom-dropdown w-100' > <div style='gap:10px' class='d-flex flex-column'> <div class='d-flex justify-content-between w-100'> <div class='w-40 '><div>Date</div></div><div class='w-40 '><div>Accuracy</div><select class='form-select form-control emp_accurately_select' onclick='event.stopPropagation();' aria-label='Default select example'> <option selected value='3'>Low</option> <option value='5'>Medium </option> <option value='7'>High</option> </select></div> </div> <div style='align-self: end;' class='d-flex justify-content-between w-100'> <button class='btn btn-success emp_filter_add'>Apply</button><button class='btn btn-danger clearfilterbtn'>Clear</button> </div> </div> </div> </div><button class='btn w-40 d-none btn-danger clearfilterbtn'>Clear</button></div> <div class='d-flex justify-content-between pt-1 align-items-center'><span style='position: absolute;'><i class=' fa fa-calendar font-16 p-1 pl-2 pt-2'></i></span><input style='border: 1px solid #ced4da !important;' onclick='event.stopPropagation();' type='text' id='emp_start_date' class='lastSyncDate pl-30 pt-2 w-100 datepicker-input form-control required mt-1' placeholder='DD/MM/YYYY' data-placeholder='DD/MM/YYYY' data-label='LastSyncDate'></div></div> <div id='emps_card_container' class='emps_card w-100 '> </div> </div> <div id='employeeTrackingMap' class='employees_map_location bg-white col-sm-9'> speed </div></div>";
  39. }
  40. var html = "<div class='px-3 py-2 emp_map_track_container overflow-hidden'><div class='pb-1 row'><div class='font-weight-500 font-16 col-lg-3 d-flex justify-content-between position-relative'><div class='tracking-heading'>Employee Trackings</div><div class='font-weight-500 font-24 font-md-16 font-lg-16'><span class='pr-1 text-dark filtermodal_emp position-relative t-0 l-0 d-none back_btn ' data-whichgps='1' title='Back'><i class=' fa fa-arrow-left font-24 font-md-16 font-lg-16'></i></span></div><div class='d-block d-lg-none'><div class='filter_gps'><i class='la la-filter mt-1 font-22 font-weight-700 drop-filter'></i></div><div class='bg-white border fullContainer p-3 position-absolute rounded filter-drop d-none'style='left:0px;z-index:9;width:100%;max-width:97%;top:107%;margin:0px 0px 0px 5px;'><div class='form-group'><div class='col-sm-12' id='employeeSelect_container'><div class='floating-label-form-group floating-label-form-group-with-value'id='select_width'><select type='text' id='selectGps_members' data-live-search='true' class='search_mbil form-control'></select><input type='hidden'id='GPSTrackingEmployee' /><input type='hidden' id='currentDate' /></div></div></div><div class='form-group'><div class='col-sm-12 startDateContainerMobile'><div class='floating-label-form-group'><div class='input-group'><input type='text' class='form-control datepicker-input' required Id='mobiledateinput' placeholder='Start date' /><span class='input-group-addon no-border'><i class='fa fa-calendar'></i></span></div></div></div></div><div class='form-group'><div class='col-sm-4 accuracyContainer hidden'><label for='btnSelectAccuracy'>Accuracy:</label><a href='#' id='btnSelectAccuracy' class='btn btn-default'><i class='fa fa-cog fa-1x'></i></a></div> <div class='col-sm-8 divAccuracySelect hidden'><div class='floating-label-form-group floating-label-form-group-with-value'><select id='frmGPSTrack_cmbSelectAccuracy_select' class='form-control'><option value='3'>Low</option><option value='5'>Medium</option><option value='7'>High</option> </select></div></div></div><div class='form-group'><div class='col-sm-12 d-flex justify-content-between align-items-center searchMobileContainer'> <button class='btn btn-danger clearfilterbtn'>Clear Filter</button><a id='btnSearchMap'class='btn btn-s-sm btn-primary pull-right'>Search</a></div></div></div></div></div><div class='col-lg-9 tracking-header-btns'><div class='d-flex justify-content-lg-end justify-content-between' style='gap:10px'><div class='d-flex'><div class='d-flex align-items-baseline align-items-lg-center justify-content-center pr-3'><span class='pr-1 text-green cursor-pointer gpscurrentcount ' data-whichgps='1' title='tracking'><i class=' fa fa-map-marker font-24 font-lg-16'></i></span><span class='tracking text-dark'></span></div><div class='d-flex align-items-baseline align-items-lg-center justify-content-center pr-3'><span class='pr-1 text-grey cursor-pointer gpscurrentcount' data-whichgps='2' title='inactive'><i class=' fa fa-map-marker font-24 font-lg-16'></i> </span><span class='gpsinactive text-dark'></span></div><div class='d-flex align-items-baseline align-items-lg-center justify-content-center pr-3'><span class='pr-1 text-red cursor-pointer gpscurrentcount' data-whichgps='3' title='non tracking'><i class=' fa fa-map-marker font-24 font-lg-16'></i> </span><span class='nontracking text-dark'></span></div><div class='popuptable d-none d-lg-block btn-flush-biz-theme btn-icon btn-rounded flush-soft-hover h-30p w-30p '><span class='btn-icon-wrap'><i class='dripicons dripicons-graph-pie font-18 text-grey tableiconemp activepop'></i></span></div></div><div><div class='popuptable d-lg-none btn-flush-biz-theme btn-icon btn-rounded flush-soft-hover h-30p w-30p'><span class='btn-icon-wrap'><i class='dripicons dripicons-graph-pie font-18 text-grey tableiconemp'></i></span></div></div></div></div></div>" + htmlPort + "</div>";
  41. return html;
  42. }
  43. init(containerid) {
  44. var instance = this;
  45. instance.fileCacheHelper.loadJsFiles(["apps/crm/employees/components/employee_locations.js", "apps/crm/employees/managers/gpslocationmanager.js"], function () {
  46. instance.navigationHelper.loadSection(0, containerid, Bizgaze.Apps.Crm.Employees.Components.EmployeeLocations.Instance(), null, null);
  47. });
  48. }
  49. loadModalEmp() {
  50. let ModalHtml = "<div class='modal fade' id='emp_filter_modal' data-backdrop='static' data-keyboard='false' tabindex='-1' role='dialog' aria-hidden='true'> <div class='modal-dialog modal-lg modal-dialog-centered ' role='document'> <div class='modal-content rounded-10 text-center bg-white' class='img-fluid pt-20 pb-10 w-80p m-auto '> <div class='modal-body text-center pb-30'> <div> <input type='text' id='emp_start_date' class='lastSyncDate datepicker-input form-control required' placeholder='yyyy/mm/dd hh:mm' data-placeholder='DD/MM/YYYY' data-label='LastSyncDate'><input id='accurately ' /></div> <button data-dismiss='modal' aria-label='Close' class='close_emp_modal'>Close</button> </div> </div> </div></div>";
  51. }
  52. load(id, containerid, callback) {
  53. let instance = this;
  54. var _datetimehelper = Unibase.Platform.Helpers.DateTimeHelper.Instance();
  55. var serverdate = instance._dateTimeHelper.formatServerDateTime(new Date($.now()));
  56. let heightCal = $('#bizDbHeader').outerHeight();
  57. if (instance.isMobile === false) {
  58. $('.emp_map_track_container').attr('style', `height:calc(100vh - ${heightCal}px)`);
  59. }
  60. serverdate = serverdate.replace('/', '-').replace('/', '-');
  61. $("#frmGPSTrack_cmbSelectAccuracy").val(3);
  62. $("#btnSwtichToGrid").click(function () {
  63. $(".divAddressGrid").addClass('hidden');
  64. $(".divEmployeemap").removeClass('hidden');
  65. });
  66. $("#btnSwtichToMap").click(function () {
  67. $(".divAddressGrid").removeClass('hidden');
  68. $(".divEmployeemap").addClass('hidden');
  69. });
  70. $("#btnExport").click(function () {
  71. });
  72. $("#frmGPSTrack_cmbSelectEmployee").change(function () {
  73. var value = $("#frmGPSTrack_cmbSelectEmployee").val();
  74. var accuracyvalue = $("#frmGPSTrack_cmbSelectAccuracy").val();
  75. $("#lbGpsDistance").text(0);
  76. if (value != "0") {
  77. $(".divStartDate").removeClass('hidden');
  78. $(".divAccuracy").removeClass('hidden');
  79. $(".divUsersCount").addClass('hidden');
  80. $(".divRefreshUserCount").addClass('hidden');
  81. instance.checkGpsStatus(value);
  82. }
  83. else {
  84. $(".divAccuracy").addClass('hidden');
  85. $(".divUsersCount").removeClass('hidden');
  86. $(".divRefreshUserCount").removeClass('hidden');
  87. }
  88. $("#frmGPSTrack_cmbSelectEmployee").val(value);
  89. $("#GPSTrackingEmployee").val(value);
  90. var Fromdate = _datetimehelper.formatServerDateTime($("#txtFromDate").val());
  91. Fromdate = Fromdate.replace('/', '-').replace('/', '-');
  92. instance.getLocations(value, Fromdate, accuracyvalue, true);
  93. });
  94. $("#frmGPSTrack_cmbSelectAccuracy").change(function () {
  95. var value = $("#frmGPSTrack_cmbSelectEmployee").val();
  96. var accuracyvaue = $("#frmGPSTrack_cmbSelectAccuracy").val();
  97. $("#frmGPSTrack_cmbSelectEmployee").val(value);
  98. $("#GPSTrackingEmployee").val(value);
  99. var Fromdate = _datetimehelper.formatServerDateTime($("#txtFromDate").val());
  100. Fromdate = Fromdate.replace('/', '-').replace('/', '-');
  101. instance.getLocations(value, Fromdate, accuracyvaue, false);
  102. });
  103. $('#mobiledateinput').daterangepicker({
  104. locale: {
  105. format: 'DD/MM/YYYY',
  106. },
  107. singleDatePicker: true,
  108. showDropdowns: true,
  109. minYear: 1901,
  110. maxDate: new Date(2050, 11, 31)
  111. });
  112. $("#emp_start_date").daterangepicker({
  113. locale: {
  114. format: 'DD/MM/YYYY'
  115. },
  116. singleDatePicker: true,
  117. showDropdowns: true,
  118. minYear: 1901,
  119. maxDate: new Date(Date.now())
  120. });
  121. $('#emp_start_date').change(function (e) {
  122. let accurately = $('.emp_accurately_select').val();
  123. let filterDate = $('#emp_start_date').val();
  124. let serverdate = instance._dateTimeHelper.formatServerDateTime(filterDate);
  125. serverdate = serverdate.replace('/', '-').replace('/', '-');
  126. instance.getLocations(instance.lastSelectedEmp, serverdate, accurately, true);
  127. });
  128. if ($("#txtFromDate").val() == '')
  129. $("#txtFromDate").val(instance._dateTimeHelper.formatLocalDateformat(new Date($.now()), ''));
  130. $("#btnSearchMap").click(function () {
  131. $('.filter-drop').addClass("d-none").removeClass('d-block');
  132. $(".filter_gps").find(".la-times").removeClass("la-times").addClass("la-filter");
  133. var userid = Number(Unibase.Platform.Membership.Infos.Identity.currentUser.userId);
  134. if ($("#hfContactId").val() != undefined) {
  135. var Fromdate = _datetimehelper.formatServerDateTime($("#mobiledateinput").val());
  136. Fromdate = Fromdate.replace('/', '-').replace('/', '-');
  137. instance.getLocations($("#selectGps_members").val(), Fromdate, '3', true);
  138. }
  139. else {
  140. var Fromdate = _datetimehelper.formatServerDateTime($("#mobiledateinput").val());
  141. Fromdate = Fromdate.replace('/', '-').replace('/', '-');
  142. instance.getLocations($("#selectGps_members").val(), Fromdate, $("3").val(), true);
  143. }
  144. });
  145. $("#chkGpsEnable").change(function () {
  146. instance.saveGpsUser($("#hfContactId").val());
  147. });
  148. var userid = Number(Unibase.Platform.Membership.Infos.Identity.currentUser.userId);
  149. if ($("#hfContactId").val() != undefined) {
  150. $("#divEmployeeSelect").hide();
  151. $(".divUsersCount").addClass('hidden');
  152. $(".divRefreshUserCount").addClass('hidden');
  153. $(".divAccuracy").removeClass('hidden');
  154. var Fromdate = _datetimehelper.formatServerDateTime($("#txtFromDate").val());
  155. instance.getLocations($("#hfContactId").val(), serverdate, $("#frmGPSTrack_cmbSelectAccuracy").val(), true);
  156. }
  157. if ($("#hfContactId").val() != undefined) {
  158. instance.checkGpsStatus($("#hfContactId").val());
  159. $("#divStatus").show();
  160. }
  161. else {
  162. if (instance.isMobile) {
  163. instance.loadEmployees();
  164. }
  165. else {
  166. instance.loadEmployees_card();
  167. }
  168. }
  169. $('.popuptable').click(function (e) {
  170. if (!$(this).hasClass('activepop')) {
  171. return;
  172. }
  173. instance.isTrackingTable = false;
  174. var instanceTableObj = Bizgaze.Apps.Crm.Employees.Components.EmployeeLocationTable.Instance();
  175. Unibase.Platform.Helpers.NavigationHelper.Instance().popup(0, '', instanceTableObj, null, Unibase.Platform.Helpers.Size.DockLeft);
  176. });
  177. $('.gpscurrentcount').each(function (i, el) {
  178. $(this).click(function (e) {
  179. let type = +$(this).attr('data-whichgps');
  180. var instanceTableObj = Bizgaze.Apps.Crm.Employees.Components.EmployeeLocationTable.Instance();
  181. switch (type) {
  182. case 1:
  183. instance.isTrackingTable = true;
  184. Bizgaze.Apps.Crm.Employees.Components.EmployeeLocationTable.Instance();
  185. Unibase.Platform.Helpers.NavigationHelper.Instance().popup(0, '', instanceTableObj, null, Unibase.Platform.Helpers.Size.DockLeft);
  186. break;
  187. case 2:
  188. instance.loadWidgets('unibase_gps_inactive_users');
  189. break;
  190. case 3:
  191. instance.loadWidgets('unibase_gps_nontracking_users');
  192. break;
  193. default:
  194. console.warn("Wrong Value");
  195. }
  196. });
  197. });
  198. $('.employee_search_filter_input').on('input', function (e) {
  199. let user_text = $(e.target).val();
  200. $('.boxEmp').remove();
  201. $('.emp_card_single').each(function (i, card) {
  202. let empName = $(card).find('[data-name]').attr('data-name').toLowerCase();
  203. let empPhoneNumber = $(card).find('[data-contant]').attr('data-contant');
  204. let empId = $(card).find('[data-empid]').attr('data-empid');
  205. if (user_text == '') {
  206. $(card).removeClass('d-none').addClass('d-flex');
  207. }
  208. else {
  209. $('.filtermodal_emp').removeClass('d-none');
  210. user_text = user_text.toString().toLowerCase();
  211. if (empName.includes(`${user_text}`) || empPhoneNumber.includes(`${user_text}`) || empId.includes(`${user_text}`)) {
  212. $(card).removeClass('d-none').addClass('d-flex flex-column');
  213. }
  214. else {
  215. $(card).addClass('d-none').removeClass('item_name d-flex flex-column');
  216. }
  217. }
  218. });
  219. });
  220. $('.filtermodal_emp').click(function (e) {
  221. });
  222. $(".divUserCount").click(function () {
  223. $(".divAddressGrid").removeClass('hidden');
  224. $(".divEmployeemap").addClass('hidden');
  225. });
  226. $("#btnSelectAccuracy").click(function () {
  227. if ($(".divAccuracySelect").is(":visible")) {
  228. $(".divAccuracySelect").addClass('hidden');
  229. }
  230. else {
  231. $(".divAccuracySelect").removeClass('hidden');
  232. }
  233. });
  234. $('.divNonTrackingUserCount').click(function () {
  235. instance.showdetails = 'TotalNonTrackingUsers';
  236. instance._gpsTrackEmployee_position_index_pageindex = 0;
  237. instance.loadDetails();
  238. $('#headers').html('Total Non Tracking Users');
  239. $(".details-items").html('');
  240. });
  241. $('.divInActiveUserCount').click(function () {
  242. instance.showdetails = 'TotalInActiveUsers';
  243. instance._gpsTrackEmployee_position_index_pageindex = 0;
  244. instance.loadDetails();
  245. $('#headers').html('Total In-Active Users');
  246. $(".details-items").html('');
  247. });
  248. if ($("#hfContactId").val() == undefined) {
  249. instance.getTrackingCount();
  250. }
  251. $('#btnGpsBack').click(function () {
  252. $(".divAddressGrid").addClass('hidden');
  253. $(".divEmployeemap").removeClass('hidden');
  254. instance.loadEmployees();
  255. instance.loadEmployees_card();
  256. });
  257. $('.drop-filter').on('click', function () {
  258. let filterdropvar = $('.emp_map_track_container').find('.filter-drop').hasClass('d-none');
  259. if (filterdropvar == true) {
  260. $('.filter-drop').removeClass("d-none").addClass('d-block');
  261. $(".filter_gps").find(".la-filter").removeClass("la-filter").addClass("la-times");
  262. }
  263. else {
  264. $('.filter-drop').addClass("d-none").removeClass('d-block');
  265. $(".filter_gps").find(".la-times").removeClass("la-times").addClass("la-filter");
  266. }
  267. });
  268. $('#selectGps_members').select2();
  269. $("#select_width").find(".select2-container").addClass("w-100");
  270. $('#select_width').find('.select2-selection__rendered').addClass('text-charcoal-dark-4 font-weight-400');
  271. }
  272. getTrackingLocations() {
  273. }
  274. getLocations(userId, fromdate, accuracyvalue, showPoints, callback) {
  275. let instance = this;
  276. let mapContainer = instance.isMobile ? 'employeeTrackingMapMobileContainer' : 'employeeTrackingMap';
  277. let url = "apis/v4/GPS/getlocationsbyuser/userid/" + userId + "/fromdate/" + fromdate + "/todate/" + fromdate;
  278. if (userId == "0") {
  279. $(".divUsersCount").removeClass('hidden');
  280. $(".divRefreshUserCount").removeClass('hidden');
  281. $(".divStartDate").addClass('hidden');
  282. var serverdate = instance._dateTimeHelper.formatServerDateTime(new Date($.now()));
  283. serverdate = serverdate.replace('/', '-').replace('/', '-');
  284. url = "apis/v4/GPS/getemployeelocationsbylogin/fromdate/" + serverdate;
  285. }
  286. Bizgaze.Apps.Crm.Employees.Managers.GpsLocationmanager.Instance().getLocations(url).then(function (result) {
  287. var points = [];
  288. if (result.totalRecords == 0) {
  289. let ele_len = $("#emps_card_container").find('[data-empid =' + userId + ']').hasClass('d-none');
  290. let start_data = $("#emp_start_date").val();
  291. if (ele_len == false) {
  292. let Emp_Details = `<div class="bg-white border-top boxEmp d-flex mt-1 py-1">
  293. <div class="d-flex w-100 flex-column">
  294. <div class="boxEmp_startDate">Start Date : <span>${start_data}</span></div>
  295. <div class="boxEmp_endDate">End Date : <span>${start_data}</span></div>
  296. <div class="boxEmp_distance_travel">Distance Travel : <span>0</span> Kms</div>
  297. </div>
  298. </div>`;
  299. $(".emp_card_single.item_name").find('.boxEmpContainer').after(Emp_Details);
  300. let box_Length = $('[data-empid =' + userId + ']').find(".boxEmp").length;
  301. if (box_Length >= 0) {
  302. $('.boxEmp').not(':first').remove();
  303. }
  304. }
  305. }
  306. if (result == null || result.totalRecords < 1) {
  307. let htmlForDevice = instance.isMobile ? `<span style='color: rgb(25, 88, 159);position: relative;'>NO RECORD FOUND</span>` : `<span style='color: rgb(25, 88, 159);position: relative;top: 50%;left: 45%;'>NO RECORD FOUND</span>`;
  308. $(`#${mapContainer}`).html(htmlForDevice);
  309. $("#tblMap").html('');
  310. $("#lblUserCount").text(result.length);
  311. $("#lbGpsEndTime").text(instance._dateTimeHelper.currentDate());
  312. $("#lbGpsStartTime").text(instance._dateTimeHelper.currentDate());
  313. instance.tableHtmlEmp = '';
  314. }
  315. else {
  316. $("#tblMap").empty();
  317. let tableView = "<thead><tr>";
  318. if (result.totalRecords > 0) {
  319. tableView = tableView + "<td>Accuracy</td>";
  320. }
  321. if (callback) {
  322. callback();
  323. }
  324. tableView = tableView + "<td>Time</td><td>Address</td><td>Distance(K.M)</td><td>Duration</td></tr></thead>";
  325. $('#tblMap').append(tableView);
  326. tableView = '';
  327. $('#tblMap').append("<tbody/>");
  328. var i = 0;
  329. var no = 0;
  330. var lat = "";
  331. var lag = "";
  332. for (var i = 0; i < result.totalRecords; i++) {
  333. var rdata = result.result[i];
  334. if (userId != "0") {
  335. $(".divUsersCount").addClass('hidden');
  336. $(".divRefreshUserCount").addClass('hidden');
  337. }
  338. else {
  339. $(".divUsersCount").removeClass('hidden');
  340. $("#lblUserCount").text(result.totalRecords);
  341. $("#lbGpsEndTime").text(instance._dateTimeHelper.currentDate());
  342. $("#lbGpsStartTime").text(instance._dateTimeHelper.currentDate());
  343. $("#lbGpsDistance").text(0);
  344. }
  345. var date = new Date(instance._dateTimeHelper.formatLocalDateTimeWithT(rdata.TrackTime));
  346. var time = instance._dateTimeHelper.formatLocalDateTime(rdata.TrackTime);
  347. var ndate = instance._dateTimeHelper.formatLocal(time);
  348. var diff = ndate.split(' ');
  349. var hrs = date.getHours();
  350. var mins = date.getMinutes();
  351. var formattedTime = hrs + ":" + mins;
  352. var UName = rdata.UserName == null ? "UNKNOWN" : rdata.UserName + "<br/>";
  353. var pts = instance.getPoints(result.result, userId);
  354. var pointss = pts[0];
  355. var i = 0;
  356. var mapOptions = {
  357. center: new google.maps.LatLng(pts[0].lat, pts[0].lng),
  358. zoom: 1,
  359. mapTypeId: google.maps.MapTypeId.ROADMAP
  360. };
  361. var map = new google.maps.Map(document.getElementById(`${mapContainer}`), mapOptions);
  362. map.setZoom(1);
  363. var infoWindow = new google.maps.InfoWindow({
  364. pixelOffset: new google.maps.Size(0, -5)
  365. });
  366. var lat_lng = new Array();
  367. var no = 1;
  368. var latlngbounds = new google.maps.LatLngBounds();
  369. var markPoints = new Array();
  370. if (!showPoints && userId != "0") {
  371. markPoints.push(pts[0]);
  372. if (pts.length > 0)
  373. markPoints.push(pts[pts.length - 1]);
  374. }
  375. else {
  376. markPoints = pts;
  377. }
  378. for (var i = 0; i < markPoints.length; i++) {
  379. var data = markPoints[i];
  380. var myLatlng = new google.maps.LatLng(data.lat, data.lng);
  381. lat_lng.push(myLatlng);
  382. var icon = data.color;
  383. var numberr = "" + no + "";
  384. var lineSymbol = {
  385. path: google.maps.SymbolPath.FORWARD_CLOSED_ARROW
  386. };
  387. icon = "https://maps.google.com/mapfiles/ms/icons/" + icon + ".png";
  388. var mIcon = {
  389. path: google.maps.SymbolPath.CIRCLE,
  390. fillOpacity: 1,
  391. fillColor: data.color,
  392. strokeOpacity: 1,
  393. strokeWeight: 1,
  394. strokeColor: '#333',
  395. scale: 12,
  396. scaledSize: new google.maps.Size(54, 44)
  397. };
  398. var marker;
  399. if (userId != "0") {
  400. marker = new google.maps.Marker({
  401. position: myLatlng,
  402. map: map,
  403. draggable: false,
  404. title: data.title,
  405. label: {
  406. fontSize: '12px', fontWeight: '200', text: '.'
  407. }
  408. });
  409. marker.setIcon({
  410. path: google.maps.SymbolPath.CIRCLE,
  411. fillOpacity: 1,
  412. fillColor: data.color,
  413. strokeOpacity: 1,
  414. strokeWeight: 1,
  415. strokeColor: '#333',
  416. scale: 3,
  417. scaledSize: new google.maps.Size(54, 44),
  418. });
  419. }
  420. else {
  421. marker = new google.maps.Marker({
  422. position: myLatlng,
  423. map: map,
  424. draggable: false,
  425. icon: mIcon,
  426. title: data.title,
  427. label: {
  428. fontSize: '12px', fontWeight: '200',
  429. text: numberr.toString(), color: "white"
  430. }
  431. });
  432. }
  433. latlngbounds.extend(marker.position);
  434. no = no + 1;
  435. (function (marker, data) {
  436. let close_btn = document.getElementsByClassName("gm-ui-hover-effect");
  437. $(".ui-tooltip.ui-corner-all").remove();
  438. $('.gm-ui-hover-effect').attr("title", "").css({ "display": "none", "visibility": "hidden", "opacity": "none" });
  439. google.maps.event.addListener(marker, "click", function (e) {
  440. var serverdate = instance._dateTimeHelper.formatServerDateTime($("#emp_start_date").val());
  441. serverdate = serverdate.replace('/', '-').replace('/', '-');
  442. instance.getLocations(data.UserId, serverdate, 3, true);
  443. if (screen.width >= 1200) {
  444. $(".back_btn").removeClass("d-none");
  445. }
  446. $('.popuptable').addClass('cursor-pointer activepop');
  447. $(".ui-tooltip.ui-corner-all").remove();
  448. $('.gm-ui-hover-effect').attr("title", "").css({ "display": "none", "visibility": "hidden", "opacity": "none" });
  449. $(close_btn).css({ "display": "none", "visibility": "hidden", "opacity": "none" });
  450. $("[role='tooltip']").remove();
  451. });
  452. google.maps.event.addListener(marker, 'mouseover', function (e) {
  453. var time = data.TrackTime;
  454. infoWindow.setContent(data.UserName + '<br>' + instance._dateTimeHelper.formatLocalWithOutTime(time) + '');
  455. infoWindow.open(map, marker);
  456. $('.gm-ui-hover-effect').remove();
  457. $('.gm-ui-hover-effect').attr("title", "");
  458. });
  459. google.maps.event.addListener(marker, 'mouseout', function (e) {
  460. infoWindow.close();
  461. });
  462. google.maps.event.addDomListener(close_btn, "click", () => {
  463. $("[role='tooltip']").remove();
  464. });
  465. map.addListener('mousemove', function () {
  466. $("[role='tooltip']").remove();
  467. });
  468. google.maps.event.addListener(marker, 'click', function (e) {
  469. $("#emps_card_container").find(".emp_card_single").addClass("d-none").removeClass("d-flex flex-column");
  470. let empLoc_id = $("#emps_card_container").find('[data-empid =' + data.UserId + ']').removeClass("d-none").addClass("item_name");
  471. let id = $("#emps_card_container").find(".emp_card_single.item_name").attr('data-empid');
  472. let accurately = $('.emp_accurately_select').val();
  473. let filterDate = $('#emp_start_date').val();
  474. let serverdate = instance._dateTimeHelper.formatServerDateTime(filterDate);
  475. serverdate = serverdate.replace('/', '-').replace('/', '-');
  476. let accu_no = accurately == 0 ? rdata.Accuracy : accurately;
  477. let datad = String(data.UserId);
  478. let emp_id = $("#emps_card_container").find('[data-empid =' + datad + ']').hasClass('d-none');
  479. if (emp_id == false) {
  480. instance.getLocations(datad, serverdate, accu_no, true, function () {
  481. let Emp_Details = `<div class="bg-white border-top boxEmp d-flex mt-1 py-1">
  482. <div class="d-flex w-100 flex-column">
  483. <div class="boxEmp_startDate">Start Date : <span>14/5/2022</span></div>
  484. <div class="boxEmp_endDate">End Date : <span>14/5/2022</span></div>
  485. <div class="boxEmp_distance_travel">Distance Travel : <span class="pr-1">0</span> Kms</div>
  486. </div>
  487. </div>`;
  488. $(".emp_card_single.item_name").find('.boxEmpContainer').after(Emp_Details);
  489. let box_Length = $('[data-empid =' + datad + ']').find(".boxEmp").length;
  490. if (box_Length >= 0) {
  491. $('.boxEmp').not(':first').remove();
  492. }
  493. });
  494. }
  495. });
  496. })(marker, data);
  497. map.setCenter(latlngbounds.getCenter());
  498. map.fitBounds(latlngbounds);
  499. map.setZoom(1);
  500. }
  501. if (userId != "0") {
  502. var path = new google.maps.MVCArray();
  503. var service = new google.maps.DirectionsService();
  504. var directionsDisplay = new google.maps.DirectionsRenderer;
  505. var poly = new google.maps.Polyline({
  506. map: map, strokeColor: '#4986E7', geodesic: true, strokeOpacity: 1.0,
  507. strokeWeight: 2, path: lat_lng
  508. });
  509. }
  510. let number = 1;
  511. var totaldis = 0;
  512. instance.tableHtmlEmp = '';
  513. for (var i = 0; i < result.result.length; i++) {
  514. var rdata = result.result[i];
  515. var serverdate = instance._dateTimeHelper.formatServerDateTime($("#txtFromDate").val());
  516. var statuscolor = instance.getColor(result.result, diff, userId, i);
  517. var color = "bg-" + statuscolor;
  518. var id = 'rows' + i;
  519. var duartioncolor = "text-success";
  520. number = number + 1;
  521. if (userId == "0") {
  522. console.log(rdata);
  523. tableView = "<li class='list-group-item data-list-item biz-transparent-text-color no-background list-border-color'><div class='row d-flex align-items-center'><div class='col-sm-4'>" + rdata.UserName + " (" + number + ")</div><div class='col-sm-4'>" + instance._dateTimeHelper.formatLocalDateTimeWithT(rdata.TrackTime) + "</div><div class='col-sm-4'>" + rdata.Address + "</div> </div></li>";
  524. }
  525. else {
  526. var duration = "0";
  527. var durations = instance.getDurations(result.result, userId);
  528. console.log(result);
  529. var time = rdata.TrackTime;
  530. var ndate = instance._dateTimeHelper.formatPeriod(time.toString());
  531. var diff = ndate.split(' ');
  532. if (i == (result.result.length - 1)) {
  533. $(".boxEmp_endDate").find('span').text(instance._dateTimeHelper.formatLocalDateTimeWithT(rdata.TrackTime));
  534. }
  535. if (i == 0) {
  536. $(".boxEmp_startDate").find('span').text(instance._dateTimeHelper.formatLocalDateTimeWithT(rdata.TrackTime));
  537. }
  538. if (i != 0)
  539. duration = durations[i - 1].Duration;
  540. tableView = tableView + "<td>" + instance._dateTimeHelper.formatLocalDateTimeWithT(rdata.TrackTime) + "</td><td id=rows" + i + ">" + rdata.Address + "</td>";
  541. if (i != 0 || result.result.length === 1) {
  542. var dis = rdata.Distance / 1000;
  543. tableView = tableView + "<td>" + Unibase.Core.Helpers.NumberHelper.Instance().roundNumber(dis, 2) + "</td>";
  544. totaldis += dis;
  545. $(".boxEmp_distance_travel").find('span').text(Unibase.Core.Helpers.NumberHelper.Instance().roundNumber(totaldis, 2));
  546. }
  547. let newDatee = instance._dateTimeHelper.formatServerDateTime(rdata.TrackTime);
  548. debugger;
  549. function formatDate(date) {
  550. var d = new Date(date), month = '' + (d.getMonth() + 1), day = '' + d.getDate(), year = d.getFullYear();
  551. if (month.length < 2)
  552. month = '0' + month;
  553. if (day.length < 2)
  554. day = '0' + day;
  555. return [day, month, year].join('/');
  556. }
  557. let qwert = instance._dateTimeHelper.formatLocalDateTimeWithT(rdata.TrackTime);
  558. let resu_time = `${formatDate(qwert)} ${qwert.slice(-8)}`;
  559. let dis_due = duration.split('');
  560. console.log(dis_due[0]);
  561. tableView = "<li class='list-group-item data-list-item biz-transparent-text-color no-background list-border-color'><div class='row d-flex align-items-center'><div class='col-sm-2'>" + resu_time + "</div><div class='col-sm-5'>" + rdata.Address + "</div><div class='col-sm-2'>" + Unibase.Core.Helpers.NumberHelper.Instance().roundNumber(dis, 2) + "</div><div class='col-sm-2'>" + dis_due[0] + " min</div><div class='col-sm-1 text-center'>" + rdata.BatteryLevel + " %</div> </div> </li>";
  562. }
  563. instance.tableHtmlEmp = instance.tableHtmlEmp + tableView;
  564. }
  565. if (instance.initalLoad) {
  566. instance.trackingTodayHTML = instance.tableHtmlEmp;
  567. instance.tableHtmlEmp = instance.tableHtmlEmp;
  568. instance.initalLoad = false;
  569. }
  570. }
  571. }
  572. }, function (response) {
  573. return "";
  574. });
  575. }
  576. getPoints(result, userId) {
  577. let instance = this;
  578. var points = [];
  579. for (var i = 0; i < result.length; i++) {
  580. var statusColor = "";
  581. var rdata = result[i];
  582. var date = new Date(instance._dateTimeHelper.formatLocalDateTime(rdata.TrackTime));
  583. var ndate = instance._dateTimeHelper.formatPeriod(date);
  584. var diff = ndate.split(' ');
  585. var statusColor = instance.getColor(result, diff, userId, i);
  586. var UName = rdata.UserName == null ? "UNKNOWN" : rdata.UserName + "<br/>";
  587. points.push({ lat: rdata.Latitude, lng: rdata.Longitude, UserName: rdata.UserName, color: statusColor, TrackTime: rdata.TrackTime, UserId: rdata.UserId, TrackTimeString: rdata.TrackTimeString });
  588. }
  589. return points;
  590. }
  591. loadFromGrid(id) {
  592. let instance = this;
  593. var points = [];
  594. $(".divAddressGrid").addClass('hidden');
  595. $(".divEmployeemap").removeClass('hidden');
  596. var serverdate = instance._dateTimeHelper.formatServerDateTime($("#txtFromDate").val());
  597. serverdate = serverdate.replace('/', '-').replace('/', '-');
  598. instance.getLocations(id, serverdate, 3, true);
  599. }
  600. getColor(result, diff, userId, id) {
  601. var statusColor = "";
  602. var firstdate = new Date(result[id].TrackTime);
  603. firstdate.setTime(firstdate.getTime() + (15 * 60 * 1000));
  604. var seconddate = new Date(result[id].TrackTime);
  605. seconddate.setTime(seconddate.getTime() + (30 * 60 * 1000));
  606. var dt = new Date();
  607. if (userId == "0") {
  608. if (dt < firstdate)
  609. statusColor = "green";
  610. if (dt < seconddate && dt > firstdate)
  611. statusColor = "orange";
  612. if (dt > seconddate)
  613. statusColor = "red";
  614. }
  615. else {
  616. if (id == 0)
  617. statusColor = "green";
  618. if (id == result.length - 1)
  619. statusColor = "orange";
  620. if (id != 0 && id != result.length - 1)
  621. statusColor = "blue";
  622. }
  623. return statusColor;
  624. }
  625. calcDistance(p1, p2, callback) {
  626. var distanceArrary = [];
  627. var service = new google.maps.DistanceMatrixService();
  628. service.getDistanceMatrix({
  629. origins: [p1],
  630. destinations: [p2],
  631. travelMode: google.maps.TravelMode.DRIVING,
  632. unitSystem: google.maps.UnitSystem.METRIC,
  633. avoidHighways: false,
  634. avoidTolls: false
  635. }, function (response, status) {
  636. if (status == google.maps.DistanceMatrixStatus.OK && response.rows[0].elements[0].status != "ZERO_RESULTS") {
  637. var distance = response.rows[0].elements[0].distance.text;
  638. var dis = distance.split(' ');
  639. distanceArrary.push({ Distance: dis[0] });
  640. callback(distanceArrary);
  641. }
  642. else {
  643. bootbox.alert("Unable to find the distance via road.");
  644. }
  645. });
  646. }
  647. getAddresss(id, lat, lng) {
  648. var url = "https://maps.googleapis.com/maps/api/geocode/json?latlng=" + lat + "," + lng;
  649. var xhr = this.createCORSRequest('Get', url);
  650. if (!xhr) {
  651. bootbox.alert('CORS not supported');
  652. return;
  653. }
  654. xhr.onload = function () {
  655. var text = xhr.responseText;
  656. var json = JSON.parse(text);
  657. if (json.results[0].formatted_address != undefined)
  658. document.getElementById(id).innerHTML = json.results[0].formatted_address;
  659. };
  660. xhr.onerror = function () {
  661. bootbox.alert('Woops, there was an error making the request.');
  662. };
  663. xhr.send();
  664. }
  665. saveGpsUser(id) {
  666. var status = "InActive";
  667. var gpsStatus = $("#chkGpsEnable").prop("checked");
  668. if ($("#chkGpsEnable").is(":checked")) {
  669. status = "Active";
  670. }
  671. var postdata = {
  672. GpsUserId: $("#hfGpsUserId").val(),
  673. Status: status,
  674. ContactId: id
  675. };
  676. Bizgaze.Apps.Crm.Employees.Managers.GpsLocationmanager.Instance().SaveGpsUser(postdata).then(function (result) {
  677. var id = result.getResponseHeader("GpsUserId");
  678. var status = result.getResponseHeader("StatusName");
  679. if (status == "Active")
  680. MessageHelper.Instance().showSuccess("Gps Enabled", "");
  681. else
  682. MessageHelper.Instance().showSuccess("Gps Disabled", "");
  683. $("#hfGpsUserId").val(id);
  684. }, function (response) {
  685. MessageHelper.Instance().showError(response, 'bizgaze_CreateErrorMessages');
  686. });
  687. }
  688. getTrackingCount() {
  689. let instance = this;
  690. var serverdate = instance._dateTimeHelper.formatServerDateTime(new Date($.now()));
  691. serverdate = serverdate.replace('/', '-').replace('/', '-');
  692. Bizgaze.Apps.Crm.Employees.Managers.GpsLocationmanager.Instance().GetGPSTrackingCount(serverdate).then(function (result) {
  693. if (result != null) {
  694. var data = result.result;
  695. $('.gpsinactive').text(data.InActiveUserCount);
  696. $('.tracking').text(data.TrackingCount);
  697. $('.nontracking').text(data.NonTrackingCount);
  698. }
  699. });
  700. }
  701. checkGpsStatus(id) {
  702. let instance = this;
  703. Number(id);
  704. Bizgaze.Apps.Crm.Employees.Managers.GpsLocationmanager.Instance().GetGpsUser(id).then(function (result) {
  705. if (result != null) {
  706. $("#hfGpsUserId").val(result.GpsUserId);
  707. if (result.StatusName == "Active")
  708. $("#chkGpsEnable").prop("checked", true);
  709. else
  710. $("#chkGpsEnable").prop("checked", false);
  711. }
  712. });
  713. }
  714. getEmployee_cardHTML(empCardData) {
  715. let { EmployeeId, EmployeeName, FirstName, LastName, ImageUrl, PhoneNumber, StatusId } = empCardData;
  716. let isDot = FirstName.split('.');
  717. if (FirstName.split('.').length == 1) {
  718. isDot = `${FirstName[0]}${FirstName[1]} `;
  719. }
  720. else {
  721. let strArr = FirstName.split('.');
  722. isDot = `${strArr[0][0]}${strArr[1][0]} `;
  723. }
  724. isDot = isDot.toUpperCase();
  725. let empPic = ImageUrl == null ? "<div class='align-items-center biz-highlight-color text-white d-flex h-50p justify-content-center rounded-circle w-50p'>" + isDot + "</div>" : "<img style='width:100px' height='100px' class='' src='" + ImageUrl + "'/>";
  726. let isActive = StatusId == 1 ? "<span data-active='isActive' class='text-success'>Active</span>" : "<span data-active='isActive' class='text-danger'>Inactive</span>";
  727. let isActiveBol = StatusId == 1 ? 'text-green' : 'text-grey';
  728. return " <div data-empid='" + EmployeeId + "' class='bg-white cursor-pointer emp_card_single p-2 w-100 flex-column '> <div class='d-flex w-100 boxEmpContainer'> <div class='profile_emp d-flex mr-2 align-items-center'>" + empPic + " </div> <div class='d-flex flex-column '> <span class='list-item-main-title text-truncate w-250p emp_name' data-name='" + EmployeeName + "'>" + EmployeeName + "</span> <span class='d-none' data-empid='" + EmployeeId + "'><span class='d-none'><span><i class='fa fa-user pr-1'></i> Employee ID </span> : " + EmployeeId + "</span></span> <span data-contant='" + PhoneNumber + "'><span> <i class='fa fa-phone pr-1'></i></span> : " + PhoneNumber + "</span> </div> <div class='d-none " + isActiveBol + " d-flex align-items-center justify-content-center flex-column'> <i class='font-35 fa fa-map-marker d-none'></i><span class='font-weight-600 font-12'></span> </div></div> </div>";
  729. }
  730. loadEmployees_card() {
  731. let instance = this;
  732. $(".searchEmp_container").find('.emp_filter_add').click(function (e) {
  733. let accurately = $('.emp_accurately_select').val();
  734. let filterDate = $('#emp_start_date').val();
  735. let serverdate = instance._dateTimeHelper.formatServerDateTime(filterDate);
  736. serverdate = serverdate.replace('/', '-').replace('/', '-');
  737. instance.getLocations(instance.lastSelectedEmp, serverdate, accurately, true);
  738. });
  739. $(".searchEmp_containerParent").find('.clearfilterbtn').click(function (e) {
  740. let accurately = $('.emp_accurately_select').val();
  741. let serverdate = instance._dateTimeHelper.formatServerDateTime(new Date($.now()));
  742. serverdate = serverdate.replace('/', '-').replace('/', '-');
  743. let dataNew = serverdate;
  744. let dataArr = dataNew.split(' ')[0].split('-');
  745. dataNew = `${dataArr[2]}/${dataArr[1]}/${dataArr[0]}`;
  746. $('#emp_start_date').val(dataNew).data('daterangepicker').setEndDate(dataNew);
  747. $('#emp_start_date').val(dataNew).data('daterangepicker').setStartDate(dataNew);
  748. instance.getLocations('0', serverdate, accurately, true);
  749. $('.employee_search_filter_input').val('');
  750. $('.boxEmp').remove();
  751. let user_text = '';
  752. $('.emp_card_single').each(function (i, card) {
  753. let empName = $(card).find('[data-name]').attr('data-name').toLowerCase();
  754. let empPhoneNumber = $(card).find('[data-contant]').attr('data-contant');
  755. let empId = $(card).find('[data-empid]').attr('data-empid');
  756. if (user_text == '') {
  757. $(card).removeClass('d-none').addClass('d-flex flex-column');
  758. }
  759. else {
  760. user_text = `${user_text}`.toLowerCase();
  761. if (empName.includes(`${user_text}`) || empPhoneNumber.includes(`${user_text}`) || empId.includes(`${user_text}`)) {
  762. $(card).removeClass('d-none').addClass('d-flex');
  763. }
  764. else {
  765. $(card).addClass('d-none').removeClass('d-flex');
  766. }
  767. }
  768. });
  769. });
  770. $('.filtermodal_emp').click(function () {
  771. let accurately = $('.emp_accurately_select').val();
  772. let serverdate = instance._dateTimeHelper.formatServerDateTime(new Date($.now()));
  773. serverdate = serverdate.replace('/', '-').replace('/', '-');
  774. let dataNew = serverdate;
  775. let dataArr = dataNew.split(' ')[0].split('-');
  776. dataNew = `${dataArr[2]}/${dataArr[1]}/${dataArr[0]}`;
  777. $('#emp_start_date').val(dataNew).data('daterangepicker').setEndDate(dataNew);
  778. $('#emp_start_date').val(dataNew).data('daterangepicker').setStartDate(dataNew);
  779. instance.getLocations('0', serverdate, accurately, true);
  780. $('.employee_search_filter_input').val('');
  781. $('.boxEmp').remove();
  782. let user_text = '';
  783. $('.emp_card_single').each(function (i, card) {
  784. let empName = $(card).find('[data-name]').attr('data-name').toLowerCase();
  785. let empPhoneNumber = $(card).find('[data-contant]').attr('data-contant');
  786. let empId = $(card).find('[data-empid]').attr('data-empid');
  787. if (user_text == '') {
  788. $(card).removeClass('d-none').addClass('d-flex flex-column');
  789. }
  790. else {
  791. user_text = `${user_text}`.toLowerCase();
  792. if (empName.includes(`${user_text}`) || empPhoneNumber.includes(`${user_text}`) || empId.includes(`${user_text}`)) {
  793. $(card).removeClass('d-none').addClass('d-flex');
  794. }
  795. else {
  796. $(card).addClass('d-none').removeClass('d-flex');
  797. }
  798. }
  799. });
  800. $('.popuptable').removeClass('cursor-pointer activepop');
  801. $('.filtermodal_emp').addClass('d-none');
  802. $(".back_btn").addClass("d-none");
  803. });
  804. $(`.employees_list_location`).on('hide.bs.dropdown', function () {
  805. $(`.filtermodal_emp > i`).removeClass('la-times').removeClass('filterHover').addClass('la-filter');
  806. });
  807. var serverdate = instance._dateTimeHelper.formatServerDateTime(new Date($.now()));
  808. serverdate = serverdate.replace('/', '-').replace('/', '-');
  809. instance.getLocations('0', serverdate, '3', true);
  810. let heightWidget = +$('.emp_map_track_container').outerHeight();
  811. let searchEmp_container = +$('.searchEmp_container').outerHeight();
  812. let heightCardContainer = heightWidget - (searchEmp_container);
  813. $('#emps_card_container').height(heightCardContainer - 200).addClass('biz-custom-scrollbar');
  814. var branchid = Unibase.Platform.Membership.Infos.Identity.currentUser.settings.find(x => x.settingName == 'branchid').settingValue;
  815. Bizgaze.Apps.Crm.Employees.Managers.GpsLocationmanager.Instance().GetEmployees(branchid).then(function (response) {
  816. if (response.result.length > 0) {
  817. let empArr = response.result;
  818. for (let i = 0; i < empArr.length; i++) {
  819. let emp_card_HTML = instance.getEmployee_cardHTML(empArr[i]);
  820. $('#emps_card_container').append(emp_card_HTML);
  821. }
  822. $('.emp_card_single').each(function (i, e) {
  823. $(e).click(function (el) {
  824. $('.filtermodal_emp').removeClass('d-none');
  825. let id = $(this).attr('data-empid');
  826. let accurately = $('.emp_accurately_select').val();
  827. let filterDate = $('#emp_start_date').val();
  828. let serverdate = instance._dateTimeHelper.formatServerDateTime(filterDate);
  829. serverdate = serverdate.replace('/', '-').replace('/', '-');
  830. if ($(el.target).attr('data-active') == 'isActive') {
  831. console.log('active and inactive logic');
  832. return;
  833. }
  834. let name = $(this).find('[data-name]').attr('data-name');
  835. $('.employee_search_filter_input').val(name);
  836. instance.lastSelectedEmp = id;
  837. $('.popuptable').addClass('cursor-pointer activepop');
  838. let elThis = this;
  839. instance.getLocations(id, serverdate, accurately, true, function () {
  840. let boxEoxHtml = `<div class="bg-white border-top boxEmp d-flex mt-1 py-1">
  841. <div class="d-flex w-100 flex-column">
  842. <div class="boxEmp_startDate">Start Date : <span>14/5/2022</span></div>
  843. <div class="boxEmp_endDate">End Date : <span>14/5/2022</span></div>
  844. <div class="boxEmp_distance_travel">Distance Travel : <span class="pr-1">14</span> Kms</div>
  845. </div>
  846. </div>`;
  847. $('.boxEmp').remove();
  848. $(elThis).find('.boxEmpContainer').after(boxEoxHtml);
  849. });
  850. });
  851. });
  852. }
  853. else {
  854. $("#lblInActiveUserCount").text(0);
  855. $("#lblNonTrackingUserCount").text(0);
  856. $("#frmGPSTrack_cmbSelectEmployee").html('<option value="0">no employees found..</option>');
  857. }
  858. });
  859. }
  860. loadEmployees() {
  861. let instance = this;
  862. var branchid = Unibase.Platform.Membership.Infos.Identity.currentUser.settings.find(x => x.settingName == 'branchid').settingValue;
  863. Bizgaze.Apps.Crm.Employees.Managers.GpsLocationmanager.Instance().GetEmployees(branchid).then(function (response) {
  864. if (response.result.length > 0) {
  865. var frmGPSTrack_cmbSelectEmployee = document.getElementById('selectGps_members');
  866. $('#selectGps_members').empty();
  867. $('#selectGps_members').html('<option selected value="0">All</option>');
  868. for (var i = 0; i < response.result.length; i++) {
  869. var opt = document.createElement("option");
  870. opt.text = response.result[i].EmployeeName;
  871. opt.value = response.result[i].EmployeeId;
  872. frmGPSTrack_cmbSelectEmployee.append(opt);
  873. }
  874. $("#selectGps_members").val(0);
  875. var serverdate = instance._dateTimeHelper.formatServerDateTime(new Date($.now()));
  876. serverdate = serverdate.replace('/', '-').replace('/', '-');
  877. instance.getLocations($("#selectGps_members").val(), serverdate, $("#mobiledateinput").val(), true);
  878. $('#selectGps_members').change(function (e) {
  879. $('.popuptable').addClass('cursor-pointer activepop');
  880. });
  881. }
  882. else {
  883. $("#lblInActiveUserCount").text(0);
  884. $("#lblNonTrackingUserCount").text(0);
  885. $("#selectGps_members").html('<option value="0">no employees found..</option>');
  886. }
  887. $(".searchMobileContainer").find('.clearfilterbtn').click(function (e) {
  888. let accurately = $('.emp_accurately_select').val();
  889. $('#selectGps_members').val(0);
  890. let serverdate = instance._dateTimeHelper.formatServerDateTime(new Date($.now()));
  891. serverdate = serverdate.replace('/', '-').replace('/', '-');
  892. let dataNew = serverdate;
  893. let dataArr = dataNew.split(' ')[0].split('-');
  894. dataNew = `${dataArr[2]}/${dataArr[1]}/${dataArr[0]}`;
  895. $('#select_width').find('.select2-selection__rendered').html('');
  896. $('#mobiledateinput').val(dataNew).data('daterangepicker').setEndDate(dataNew);
  897. $('#mobiledateinput').val(dataNew).data('daterangepicker').setStartDate(dataNew);
  898. instance.getLocations('0', serverdate, accurately, true);
  899. $('.employee_search_filter_input').val('');
  900. $('.boxEmp').remove();
  901. });
  902. }, function (response) {
  903. MessageHelper.Instance().showError(response.responseText, 'bizgaze_CreateErrorMessages');
  904. return false;
  905. });
  906. }
  907. loadWidgets(uniqueid) {
  908. Unibase.Platform.Widgets.Managers.WidgetManager.Instance().getWidgetbyuniqueid(uniqueid).then(function (response) {
  909. var linkwidgetid = response.result.WidgetId;
  910. Unibase.Platform.Widgets.Managers.WidgetManager.Instance().getWidget(linkwidgetid).then(function (res) {
  911. let ReplaceText = [];
  912. let split = res.result.Parameter.split(':');
  913. Unibase.Themes.Compact.Components.ReportWidgets.Default.Instance().getReportWidget(0, linkwidgetid, "", ReplaceText, null, true, Unibase.Themes.Providers.DetailHelper.installedAppId, true);
  914. });
  915. });
  916. }
  917. loadDetails() {
  918. let instance = this;
  919. $('#divTrackingDetails').modal();
  920. var serverdate = instance._dateTimeHelper.formatServerDateTime(new Date($.now()));
  921. serverdate = serverdate.replace('/', '-').replace('/', '-');
  922. Bizgaze.Apps.Crm.Employees.Managers.GpsLocationmanager.Instance().GetGPSUSerDetails(instance.showdetails, serverdate).then(function (result) {
  923. if (result.rows.length > 0) {
  924. $(".details-users").html('');
  925. var html = '';
  926. $(".details-users:first").after(html);
  927. var total = 0;
  928. if (this.showdetails == 'TotalNonTrackingUsers') {
  929. html = '<tr class="details-users details-addeditem">'
  930. + '<th>Employee Name</th>' +
  931. '<th>PhoneNumber</th>';
  932. $(".details-users:last").after(html);
  933. for (var i = 0; i < result.rows.length; i++) {
  934. var data = result.rows[i].cell;
  935. html = '<tr class="details-users details-addeditem">' +
  936. '<td>' + data[0] + '</td>' +
  937. '<td>' + data[1] + '</td>';
  938. html += '</tr>';
  939. $(".details-users:last").after(html);
  940. }
  941. }
  942. if (this.showdetails == 'TotalInActiveUsers') {
  943. html = '<tr class="details-users details-addeditem">'
  944. + '<th>Employee name</th>' +
  945. '<th>PhoneNumber</th>';
  946. $(".details-users:last").after(html);
  947. for (var i = 0; i < result.rows.length; i++) {
  948. var data = result.rows[i].cell;
  949. html = '<tr class="details-users details-addeditem">' +
  950. '<td>' + data[0] + '</td>' +
  951. '<td>' + data[1] + '</td>';
  952. html += '</tr>';
  953. $(".details-users:last").after(html);
  954. }
  955. }
  956. }
  957. else {
  958. MessageHelper.Instance().showError('error ', 'bizgaze_CreateErrorMessages');
  959. $("#divUsersDetails").html('<div class="clear"><center>no details found....</center></div>');
  960. }
  961. }, function (response) {
  962. });
  963. }
  964. getDurations(result, userId) {
  965. var durations = [];
  966. if (userId == "0") {
  967. for (var i = 0; i < result.length; i++) {
  968. var rdata = result[i];
  969. if (i != result.length - 1) {
  970. var date1 = new Date();
  971. var date2 = new Date(rdata.TrackTime);
  972. var difftime = Math.abs(date1.getDate() - date2.getDate());
  973. var seconds = Math.floor(difftime / 1000);
  974. var minutes = Math.floor(seconds / 60);
  975. var duration = "";
  976. seconds = seconds % 60;
  977. var hours = Math.floor(minutes / 60);
  978. minutes = minutes % 60;
  979. if (hours > 0)
  980. duration = hours + " hours" + minutes + " minutes";
  981. else
  982. duration = minutes + " minutes";
  983. durations.push({ Duration: duration });
  984. }
  985. else {
  986. return durations;
  987. }
  988. }
  989. }
  990. else {
  991. for (var i = 0; i < result.length; i++) {
  992. var rdata = result[i];
  993. new Date();
  994. if (i != result.length - 1) {
  995. var date1 = new Date(result[i + 1].TrackTime);
  996. var date2 = new Date(rdata.TrackTime);
  997. var difftime = Math.abs(date1.getDate() - date2.getDate());
  998. var seconds = Math.floor(difftime / 1000);
  999. var minutes = Math.floor(seconds / 60);
  1000. var duration = "";
  1001. seconds = seconds % 60;
  1002. var hours = Math.floor(minutes / 60);
  1003. minutes = minutes % 60;
  1004. if (hours > 0)
  1005. duration = hours + " hours" + minutes + " minutes";
  1006. else
  1007. duration = minutes + " minutes";
  1008. durations.push({ Duration: duration });
  1009. }
  1010. else {
  1011. return durations;
  1012. }
  1013. }
  1014. }
  1015. return durations;
  1016. }
  1017. createCORSRequest(method, url) {
  1018. var xhr = new XMLHttpRequest();
  1019. if ("withCredentials" in xhr) {
  1020. xhr.open(method, url, true);
  1021. }
  1022. else {
  1023. xhr = null;
  1024. }
  1025. return xhr;
  1026. }
  1027. getDistanceFromLatLonInKm(lat1, lon1, lat2, lon2) {
  1028. var R = 6371;
  1029. var dLat = this.deg2rad(lat2 - lat1);
  1030. var dLon = this.deg2rad(lon2 - lon1);
  1031. var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
  1032. Math.cos(this.deg2rad(lat1)) * Math.cos(this.deg2rad(lat2)) *
  1033. Math.sin(dLon / 2) * Math.sin(dLon / 2);
  1034. var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
  1035. var d = R * c;
  1036. return d;
  1037. }
  1038. deg2rad(deg) {
  1039. return deg * (Math.PI / 180);
  1040. }
  1041. getemployeemap() {
  1042. const instance = this;
  1043. Unibase.Platform.Helpers.FileCacheHelper.Instance().loadJsFile('apps/crm/employees/managers/gpslocationmanager.js', function () {
  1044. instance.navigationHelper.popup('', '', instance, function () {
  1045. const visibleContainerId = instance.navigationHelper.getLastContainerId();
  1046. Bizgaze.Apps.Crm.Employees.Components.EmployeeLocations.Instance().getLocations('', '', '', '', () => {
  1047. const containerEl = $(`#${visibleContainerId}`);
  1048. containerEl.find('.tracking-heading').prepend(`<a href="javascript:void(0);" id="trackingCloseBtn" class="btn btn-icon btn-flush-biz-theme btn-rounded flush-soft-hover w-30p h-30p mr-15 text-dark"><span class="btn-icon-wrap"><i data-icon="l"></i></span></a>`);
  1049. $('#trackingCloseBtn').click(function () {
  1050. instance.navigationHelper.closePopUp();
  1051. });
  1052. });
  1053. }, Unibase.Platform.Helpers.Size.Auto);
  1054. });
  1055. }
  1056. static Instance() {
  1057. if (this.instance === undefined) {
  1058. this.instance = new EmployeeLocations();
  1059. }
  1060. return this.instance;
  1061. }
  1062. }
  1063. Components.EmployeeLocations = EmployeeLocations;
  1064. })(Components = Employees.Components || (Employees.Components = {}));
  1065. })(Employees = Crm.Employees || (Crm.Employees = {}));
  1066. })(Crm = Apps.Crm || (Apps.Crm = {}));
  1067. })(Apps = Bizgaze.Apps || (Bizgaze.Apps = {}));
  1068. })(Bizgaze || (Bizgaze = {}));