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.

w_employeeroute.js 70KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048
  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 EmployeeRoute extends Unibase.Platform.Core.BaseComponent {
  12. constructor() {
  13. super(...arguments);
  14. this._bizgazegps_TripStatus = null;
  15. this._bizgazegps_TripId = 0;
  16. this._bizgazegps_AddressId = 0;
  17. this._bizgazegps_btnText = "Arrived";
  18. this._tripTrackStatusId = 0;
  19. this._tripTrackStatusIds = 0;
  20. this.tripTrackStatus = "Arrived";
  21. this._tripDistancAndDurations = [];
  22. this._meterTripIdId = 0;
  23. this._bizgaze_latd = 0;
  24. this._bizgaze_lgtd = 0;
  25. }
  26. cssFiles() {
  27. return [];
  28. }
  29. jsFiles() {
  30. return ['apps/crm/employees/managers/gpslocationmanager.js', 'apps/routes/managers/routemanager.js', 'apps/transact/managers/invoicemanager.js', 'apps/transact/managers/orders/ordermanager.js', 'platform/core/helpers/numberhelper/numberhelper.js', 'apps/crm/employees/components/meterreading.js', 'apps/crm/contacts/managers/contactmanager.js'];
  31. }
  32. html(id, containerid) {
  33. var html = `<section class="">
  34. <div class="panel panel-info">
  35. <div class="row wrapper-sm">
  36. <input type="hidden" value="0" id="hfMeterReadingId" />
  37. <input type="hidden" value="" id="hfBizgaze_GpsTripGroupName" />
  38. <input type="hidden" value="0" id="hfDistance" />
  39. <input type="hidden" value="0" id="hfDuration" />
  40. <input type="hidden" value="0" id="hflat" />
  41. <input type="hidden" value="0" id="hflag" />
  42. <input type="hidden" value="0" id="hfTripGroupId" />
  43. <input type="hidden" value="0" id="hfSeletedRouteId" />
  44. <input type="hidden" value="" id="hfTripGroupStatus" />
  45. <div class="col-sm-4 divRouteName hidden">
  46. <strong class="h4 block m-t-xs" id="lbRouteName"></strong>
  47. </div>
  48. <div class="col-sm-4 divcmdroutes">
  49. <div class="form-group floating-label-form-group floating-label-form-group-with-value">
  50. <select id="cmbRoutes" data-required="true" class="form-control"></select>
  51. </div>
  52. </div>
  53. <div class="col-sm-4">
  54. <div class="btn-group btn-group-justified" data-toggle="buttons">
  55. <label class="btn btn-default btn-lg active" id="btnMap"> <input type="radio" name="options" value="1"><i class="fa fa-check text-active"></i> Map </label>
  56. <label class="btn btn-default btn-lg" id="btnGrid"> <input type="radio" name="options" value="2"><i class="fa fa-check text-active"></i> Grid </label>
  57. </div>
  58. </div>
  59. <div class="col-sm-3">
  60. <a class="m-r-xs btn btn-group-justified btn-lg btn-primary btnStartTrip" id="btnStartTrip">Start Trip</a>
  61. <div class="btn-group btn-group-justified">
  62. <a class="m-r-xs btn btn-lg btn-danger btnStopTrip hidden" id="btnCancelTrip">Cancel</a>
  63. <a class="m-r-xs btn btn-lg btn-warning btnStopTrip hidden" id="btnStopTrip">Close Trip</a>
  64. </div>
  65. </div>
  66. <div class="col-sm-1">
  67. <a class="m-r-xs btn btn-group-justified btn-lg btn-primary btnCreateLead hidden" id="btnCreateLead">CreateLead</a>
  68. </div>
  69. </div>
  70. <div class="row m-l-none m-r-none bg-light lter">
  71. <div class="col-xs-6 padder-v b-r b-light lt" id="bizTotalDistance">
  72. <a class="clear" href="javaScript:;">
  73. <span class="h4 block m-t-xs"><strong id="bizTotalKm">0.00</strong></span>
  74. <small class="text-uc ordered-label">Total Distance (Km)</small>
  75. </a>
  76. </div>
  77. <div class="col-xs-6 padder-v b-r b-light lt">
  78. <span id="bizTotalCustomers12">
  79. <a class="clear" id="bizTotalCustomers" href="javascript:;">
  80. <span class="h4 block m-t-xs"><strong class="lbCustomers">0</strong></span>
  81. <small class="text-uc">Number Of Customer</small>
  82. </a>
  83. </span>
  84. </div>
  85. </div>
  86. <div class="divmap1">
  87. <div class="btnCustomerTrips"></div>
  88. <div class="divmap">
  89. <div id="NavigateEmployeeMap" style="width:100%;height:100%; min-height:400px;"></div>
  90. </div>
  91. <div class="divgrid hidden" id="gridDiv">
  92. <div class="">
  93. <div class="clear m-t-sm">
  94. <div class="clear m-t-sm">
  95. <div class="customerList">
  96. </div>
  97. </div>
  98. </div>
  99. </div>
  100. </div>
  101. </div>
  102. </div>
  103. </section>
  104. <div class="modal fade" id="divTotalCusomers" tabindex="-1" role="dialog" aria-labelledby="divTotalCusomersLabel" style="display: none;" aria-hidden="true" data-backdrop="false">
  105. <div class="modal-dialog" role="document">
  106. <div class="modal-content">
  107. <div class="modal-body1">
  108. <div class="form-group m-t h4">
  109. <div class="clear">
  110. <div class="col-xs-5"><strong class="block">Company Name</strong></div>
  111. <div class="col-xs-4"><strong class="block">Contact Person</strong></div>
  112. <div class="col-xs-3"><strong class="block">Phone No</strong></div>
  113. </div>
  114. </div>
  115. <div id="divTotalCustomerlist" class="routeCustomer-item">
  116. </div>
  117. </div>
  118. <div class="modal-footer">
  119. <button type="button" id="btn_Close" class="btn btn-default pull-right" data-dismiss="modal">
  120. Close
  121. </button>
  122. </div>
  123. </div>
  124. </div>
  125. </div>
  126. <div class="modal fade" id="divTotalDueAmount" tabindex="-1" role="dialog" aria-labelledby="divTotalDueAmountLabel" style="display: none;" aria-hidden="true" data-backdrop="false">
  127. <div class="modal-dialog" role="document">
  128. <div class="modal-content">
  129. <div class="modal-body1">
  130. <div class="form-group m-t h4">
  131. <div class="clear">
  132. <div class="col-xs-5"><strong class="block">Contact Name</strong></div>
  133. <div class="col-xs-5"><span class="">Invoice No</span></div>
  134. <div class="col-xs-2"><span class="">Due Amount</span></div>
  135. </div>
  136. </div>
  137. <div id="divDueAmountlist" class="routeDueAmt-item">
  138. </div>
  139. </div>
  140. <div class="modal-footer">
  141. <button type="button" id="btn_Close" class="btn btn-default pull-right" data-dismiss="modal">
  142. Close
  143. </button>
  144. </div>
  145. </div>
  146. </div>
  147. </div>
  148. <div class="modal fade" id="divCusomerDetails" tabindex="-1" role="dialog" aria-labelledby="divCusomerDetailsLabel" style="display: none;" aria-hidden="true" data-backdrop="false">
  149. <div class="modal-dialog" role="document">
  150. <div class="modal-content">
  151. <input type="hidden" id="hfRouteScheduleItemId" />
  152. <div class="modal-header">
  153. <button type="button" class="close" data-dismiss="modal" aria-hidden="true">
  154. ×
  155. </button>
  156. <h4 class="modal-title">
  157. CustomerDetails
  158. </h4>
  159. </div>
  160. <div class="modal-body">
  161. <div id="divRoutesCustomerlist" class="panel-group m-b divRoutesCustomerlist ">
  162. </div>
  163. </div>
  164. <div class="modal-footer">
  165. <button type="button" id="btn_Close" class="btn btn-default pull-right" data-dismiss="modal">
  166. Close
  167. </button>
  168. </div>
  169. </div>
  170. </div>
  171. </div>`;
  172. return html;
  173. }
  174. init(containerid) {
  175. var instance = this;
  176. instance.fileCacheHelper.loadJsFiles(["apps/crm/employees/components/w_employeeroute.js", "apps/crm/employees/managers/gpslocationmanager.js"], function () {
  177. instance.navigationHelper.loadSection(0, containerid, Bizgaze.Apps.Crm.Employees.Components.EmployeeRoute.Instance(), null, null);
  178. });
  179. }
  180. load(id, containerid, callback) {
  181. let instance = this;
  182. instance.loadRoutes();
  183. $("#cmbRoutes").change(function () {
  184. $('#hfSeletedRouteId').val($("#cmbRoutes").val());
  185. instance.loadRouteMap($("#cmbRoutes").val());
  186. });
  187. $("#btnMap").click(function () {
  188. $(".divgrid").addClass('hidden');
  189. $(".divmap").removeClass('hidden');
  190. });
  191. $("#btnGrid").click(function () {
  192. $(".divgrid").removeClass('hidden');
  193. $(".divmap").addClass('hidden');
  194. });
  195. $("#btnNewTrip").click(function () {
  196. instance.createTrip($("#hfTripGroupId").val());
  197. });
  198. $('#btnCreateLead').click(function () {
  199. });
  200. $("#btnStartTrip").click(function () {
  201. var callback = instance.callbacks;
  202. Bizgaze.Apps.Crm.Employees.Components.MeterReading.Instance().loadPop(1, $("#hfMeterReadingId").val(), instance._meterTripIdId, callback);
  203. });
  204. $("#btnStopTrip").click(function () {
  205. var callback = instance.callbacks;
  206. Bizgaze.Apps.Crm.Employees.Components.MeterReading.Instance().loadPop(0, $("#hfMeterReadingId").val(), instance._meterTripIdId, callback);
  207. });
  208. $("#bizTotalCustomers").click(function () {
  209. $('#divTotalCusomers').modal();
  210. var val = $("#cmbRoutes").val();
  211. if (val == "")
  212. val = $("#hfSeletedRouteId").val();
  213. instance.getCustomerDetailsByRouteId(val);
  214. });
  215. $("#btnAddMeeting").click(function () {
  216. });
  217. $("#bizDueAmount").click(function () {
  218. $('#divTotalDueAmount').modal();
  219. });
  220. }
  221. callbacks(tripId) {
  222. let instance = this;
  223. instance._meterTripIdId = tripId;
  224. }
  225. getMeterReading() {
  226. let instance = this;
  227. Bizgaze.Apps.Crm.Employees.Managers.GpsLocationmanager.Instance().GetMyMeterReading().then(function (response) {
  228. debugger;
  229. if (response.result != null && response.result.meterReadingId != 0) {
  230. $(".btnStopTrip").removeClass('hidden');
  231. $(".btnStartTrip").addClass('hidden');
  232. $("#hfMeterReadingId").val(response.result.meterReadingId);
  233. instance._meterTripIdId = response.result.tripId;
  234. }
  235. else {
  236. $(".btnStopTrip").addClass('hidden');
  237. $(".btnStartTrip").removeClass('hidden');
  238. }
  239. });
  240. }
  241. getCustomerDetailsByRouteId(routeId) {
  242. $(".customer-additem").each(function () {
  243. $(this).remove();
  244. });
  245. Number(routeId);
  246. Bizgaze.Apps.Crm.Employees.Managers.GpsLocationmanager.Instance().GetCustomerDetailsByRouteId(routeId).then(function (response) {
  247. if (response.result != null) {
  248. for (var i = 0; i < response.result.length; i++) {
  249. var data = response.result[i];
  250. var spocNumber = "--";
  251. if (data.PhoneNumber != null) {
  252. spocNumber = data.PhoneNumber;
  253. }
  254. let html = '<li class="list-group-item routeCustomer-item customer-additem">' +
  255. '<span class="clear">' +
  256. '<div class="col-xs-5"><span class="">' + data.OrganizationName + '</span></div>' +
  257. '<div class="col-xs-4 mute"><small>' + data.OrgContactName + ' Months recuring</small></div>' +
  258. '<div class="col-xs-3 Text-right"><a class="" href="javascript:;">' + spocNumber + '</a></div>' +
  259. '</span>' +
  260. '</li>';
  261. $(".routeCustomer-item:last").after(html);
  262. }
  263. }
  264. });
  265. }
  266. getDutAmount() {
  267. }
  268. saveTrip(toAddressId, routeVersionGuid, status, routeStatus, MeterId, tripId) {
  269. var instance = this;
  270. if (routeStatus == 1) {
  271. $(".divbtnTripStart_" + toAddressId).addClass('hidden');
  272. $(".divbtnTripCancel_" + toAddressId).removeClass('hidden');
  273. $(".btnTripTrackStatus_Arrived").removeClass("hidden");
  274. $(".btnCustomerTripStart").addClass('hidden');
  275. }
  276. if (status == "Started") {
  277. status = 1;
  278. }
  279. else if (status == "Canceled") {
  280. status = 2;
  281. }
  282. else if (status == "Completed") {
  283. status = 3;
  284. }
  285. var postData = {
  286. TripId: tripId,
  287. ToAddressId: toAddressId,
  288. RefGuid: routeVersionGuid,
  289. TripStatus: status,
  290. TripGroupId: Number($("#hfTripGroupId").val())
  291. };
  292. Bizgaze.Apps.Crm.Employees.Managers.GpsLocationmanager.Instance().SaveTrip(postData).then(function (response) {
  293. var id = response.result.tripId;
  294. var status = response.result.tripStatusId;
  295. var AddressId = response.result.toAddressId;
  296. instance._bizgazegps_AddressId = AddressId;
  297. instance._bizgazegps_TripId = id;
  298. if (status == 1) {
  299. $(".btnCustomerTripStart").addClass('hidden');
  300. instance._tripTrackStatusIds = 1;
  301. instance.saveTripTrack('Started', id);
  302. }
  303. else if (status == 2) {
  304. instance._bizgazegps_AddressId = 0;
  305. instance.saveTripTrack('Stepout', id);
  306. instance._bizgazegps_TripId = 0;
  307. }
  308. else if (status == 3) {
  309. instance._tripTrackStatusIds = 0;
  310. $(".btnCustomerTripComplete").addClass('hidden');
  311. instance.saveTripTrack('Completed', id);
  312. }
  313. instance.loadRouteMap($("#cmbRoutes").val());
  314. }, function (response) {
  315. MessageHelper.Instance().showError(response, 'bizgaze_CreateErrorMessages');
  316. });
  317. }
  318. saveTripTrack(status, tripId) {
  319. let instance = this;
  320. if (status == "Started") {
  321. status = 1;
  322. }
  323. else if (status == "Stepout") {
  324. status = 3;
  325. }
  326. else if (status == "Completed") {
  327. status = 2;
  328. }
  329. var postData = {
  330. TripId: tripId,
  331. TripTrackStatus: status,
  332. };
  333. Bizgaze.Apps.Crm.Employees.Managers.GpsLocationmanager.Instance().SaveTripTrack(postData).then(function (response) {
  334. var statusId = response.result.tripTrackStatusId;
  335. var AddressId = response.result.toAddressId;
  336. instance._bizgazegps_AddressId = AddressId;
  337. if (status == "Arrived") {
  338. $(".btnTripTrackStatus_Arrived").addClass('hidden');
  339. $(".btnTripTrack_Completed").removeClass('hidden');
  340. }
  341. if (statusId == 1) {
  342. instance._tripTrackStatusId = 1;
  343. instance._bizgazegps_btnText = "Arrived";
  344. instance.tripTrackStatus = "Arrived";
  345. }
  346. else if (statusId == 2) {
  347. instance._tripTrackStatusId = 2;
  348. $(".btnTripTrack_Completed").removeClass("hidden");
  349. }
  350. else if (statusId == 3) {
  351. instance._bizgazegps_TripId = 0;
  352. $(".divbtnTripStart_" + AddressId).addClass('hidden');
  353. instance._bizgazegps_AddressId = 0;
  354. instance._tripTrackStatusIds = 0;
  355. instance.loadRouteMap($("#hfSeletedRouteId").val());
  356. }
  357. }, function (response) {
  358. bootbox.alert("Co-ordinate mismatched...");
  359. });
  360. }
  361. editMeeting(addressId) {
  362. }
  363. loadRouteMap(routeId) {
  364. let instance = this;
  365. Bizgaze.Apps.Crm.Employees.Managers.GpsLocationmanager.Instance().GetRouteById(routeId).then(function (response) {
  366. var routeDistance = 0;
  367. var routeDuration = 0;
  368. var markerdata = [];
  369. var distance = [];
  370. var Currentlat = instance._bizgaze_latd;
  371. var Currentlgt = instance._bizgaze_lgtd;
  372. var distance = [];
  373. var lat1 = "";
  374. var lgt1 = "";
  375. var lat2 = "";
  376. var lgt2 = "";
  377. var myLatlng = new google.maps.LatLng(Currentlat, Currentlgt);
  378. var mapOptions = {
  379. center: myLatlng,
  380. zoom: 6,
  381. mapTypeId: google.maps.MapTypeId.ROADMAP
  382. };
  383. var map = new google.maps.Map(document.getElementById("NavigateEmployeeMap"), mapOptions);
  384. var infoWindow = new google.maps.InfoWindow();
  385. var lat_lng = new Array();
  386. var latlngbounds = new google.maps.LatLngBounds();
  387. var distance1 = 0;
  388. var coordinates = [];
  389. if (response.result == null || response.result.length <= 0) {
  390. $('#NavigateEmployeeMap').html("<span style='color:white;background-color:red;font-size: xx-large;position: relative;top: 40%;left: 30%;padding:2%;'>NO RECORD FOUND</span>");
  391. }
  392. else {
  393. $("#tblMap").empty();
  394. }
  395. var unknownAddresstableView = "";
  396. var MissingCoordinatesName = "";
  397. $(".customerList").html('<div class="routeUser-item hidden"></div>');
  398. for (var i = 0; i < response.result.length; i++) {
  399. var model = response.result[i];
  400. if (!model.CoordinatesNotFound) {
  401. MissingCoordinatesName += model.contactName + ",";
  402. var MissingContactName = MissingCoordinatesName.substring(0, MissingCoordinatesName.length - 1);
  403. $(".lbMissingCustomersName").text(MissingContactName);
  404. unknownAddresstableView = "<tr bgcolor='C70039' class='text-white' id=row" + i + ">";
  405. unknownAddresstableView = unknownAddresstableView + "<td>" + model.contactName + "</td>";
  406. unknownAddresstableView = unknownAddresstableView + "<td id=rows" + i + ">" + model.addressName + ',' + model.addressLine1 + '' + model.cityName + ',' + model.districtName + ',' + model.stateName + ' ' + model.zipCode + ' - ' + model.countryName + "</td>";
  407. }
  408. let p1;
  409. let p2;
  410. let lat = parseFloat($("#hflat").val().toString());
  411. let lng = parseFloat($("#hflag").val().toString());
  412. if (i == 0) {
  413. }
  414. else {
  415. p1 = new google.maps.LatLng(lat, lng);
  416. p2 = new google.maps.LatLng(model.latId, model.lngId);
  417. }
  418. $("#hflat").val(model.latId);
  419. $("#hflag").val(model.lngId);
  420. if (model.tripStatus == "Started") {
  421. instance._tripTrackStatusIds = model.activetripTrackStatus;
  422. }
  423. $("#hfBizgaze_GpsTripGroupName").val(model.routeName + '-' + model.scheduleDate);
  424. if (model.tripGroupStatus == "Started") {
  425. $(".divcmdroutes").addClass('hidden');
  426. $(".divRouteName").removeClass('hidden');
  427. var routeName = $("#cmbRoutes option:selected").text();
  428. $("#lbRouteName").html(routeName);
  429. }
  430. else {
  431. if (model.tripGroupStatus != "" && model.tripGroupStatus != 0 && model.tripGroupStatus != null) {
  432. $(".divcmdroutes").removeClass('hidden');
  433. $(".divRouteName").addClass('hidden');
  434. }
  435. }
  436. if (model.tripGroupStatus != "" && model.tripGroupStatus != null) {
  437. $("#hfTripGroupStatus").val(model.tripGroupStatus);
  438. if (model.tripGroupStatus != 0) {
  439. $("#btnStartTrip").hide();
  440. $('#btnCancelTrip').removeClass('hidden');
  441. $('#btnStopTrip').removeClass('hidden');
  442. $("#btnCreateLead").removeClass('hidden');
  443. }
  444. }
  445. markerdata.push({
  446. lat: parseFloat(model.latId),
  447. lng: parseFloat(model.lngId),
  448. ContactAddressId: model.contactAddressId,
  449. contactId: model.contactId,
  450. distance: 0,
  451. point1: p1, point2: p2,
  452. contactName: model.contactName,
  453. routeVersionGuid: model.routeVersionGuid,
  454. tripStatus: model.tripStatus,
  455. tripId: model.tripId,
  456. activeTripAddressId: model.activeTripAddressId,
  457. IsActiveTrip: model.isActiveTrip,
  458. contactPhotoUrl: model.contactPhotoUrl,
  459. activetripTrackStatus: model.activetripTrackStatus,
  460. routeIndex: model.routeIndex
  461. });
  462. $(".lbCustomers").text(response.result.length - 1);
  463. if (model.tripGroupId != 0) {
  464. $("#hfTripGroupId").val(model.tripGroupId);
  465. $(".divNewTrip").removeClass('hidden');
  466. }
  467. }
  468. var markers = markerdata;
  469. var lan1 = "";
  470. var lat1 = "";
  471. for (var i = 0; i < markers.length; i++) {
  472. var data = markers[i];
  473. var myLatlng = new google.maps.LatLng(parseFloat(data.lat), parseFloat(data.lng));
  474. lat_lng.push(myLatlng);
  475. var icon = "";
  476. if (i == 0) {
  477. icon = "Views/Bizgaze_GpsTrack/Widgets/Mapicon/selasemain_02.png";
  478. }
  479. else {
  480. if (data.tripStatus == "Started") {
  481. icon = "Views/Bizgaze_GpsTrack/Widgets/Mapicon/Company.png?chst=d_map_pin_letter&chld=5|FF0000|";
  482. }
  483. else if (data.tripStatus == "Completed") {
  484. icon = "Views/Bizgaze_GpsTrack/Widgets/Mapicon/Success.png?chst=d_map_pin_letter&chld=5|FF0000|";
  485. }
  486. else if (data.tripStatus == "Canceled") {
  487. icon = "Views/Bizgaze_GpsTrack/Widgets/Mapicon/Cancel.png?chst=d_map_pin_letter&chld=5|FF0000|";
  488. }
  489. else {
  490. icon = "Views/Bizgaze_GpsTrack/Widgets/Mapicon/compant-location_02.png?chst=d_map_pin_letter&chld=5|FF0000";
  491. }
  492. }
  493. var image = {
  494. url: icon,
  495. origin: new google.maps.Point(0, 0),
  496. anchor: new google.maps.Point(25, 25),
  497. scaledSize: new google.maps.Size(50, 50)
  498. };
  499. var marker = new google.maps.Marker({
  500. position: myLatlng,
  501. map: map,
  502. draggable: false,
  503. animation: google.maps.Animation.DROP,
  504. icon: image,
  505. title: data.title
  506. });
  507. latlngbounds.extend(myLatlng);
  508. if (i == 0) {
  509. lan1 = markers[0].lng;
  510. lat1 = markers[0].lat;
  511. }
  512. var lan2 = data.lat;
  513. var latt2 = data.lng;
  514. var url = "https://www.google.co.in/maps/dir/" + parseFloat(lat1) + parseFloat(lan1) + parseFloat(lan2) + parseFloat(latt2);
  515. (function (marker, data) {
  516. google.maps.event.addListener(marker, "click", function (e) {
  517. if (data.distance == 0) {
  518. var isStarted1 = "";
  519. var isCompleted1 = "hidden";
  520. var isCanceled1 = "hidden";
  521. var isArrived1 = "hidden";
  522. if (data.tripStatus == "Started") {
  523. isStarted1 = 'hidden';
  524. isArrived1 = '';
  525. isCanceled1 = '';
  526. if (data.activetripTrackStatus == "2") {
  527. isArrived1 = 'hidden';
  528. isCompleted1 = '';
  529. }
  530. }
  531. if (data.tripStatus == "Completed") {
  532. isCompleted1 = 'hidden';
  533. isStarted1 = 'hidden';
  534. isCanceled1 = 'hidden';
  535. }
  536. if (data.tripStatus == "Canceled") {
  537. isCanceled1 = 'hidden';
  538. isArrived1 = 'hidden';
  539. isStarted1 = 'hidden';
  540. }
  541. if (instance._tripTrackStatusIds == 2 || instance._tripTrackStatusIds == 1)
  542. isStarted1 = 'hidden';
  543. if (instance._bizgazegps_AddressId == data.contactAddressId) {
  544. if (instance._tripTrackStatusId == 1)
  545. isArrived1 = "";
  546. else
  547. isCompleted1 = '';
  548. isCanceled1 = '';
  549. }
  550. instance._bizgazegps_TripId = data.tripId;
  551. instance.calcDistance(data.point1, data.point2, function (dist) {
  552. infoWindow.setContent('<div class="btnCustomerTripComplete">' +
  553. '<strong class="block">' + data.contactName + '</strong>' +
  554. '<span class="">Distance: ' + dist[0].distance + ' km <a class="btn btn-xs m-l-lg btn-default" onclick="javascript:return Bizgaze.Apps.Crm.Employees.Components.EmployeeRoute.Instance().showCustomerDetails(' + data.contactId + ',' + '\'' + data.contactName + '\')">View Details</a></span>' +
  555. '<div class=""><span>Duration: ' + dist[0].duration + ' minutes </span>' +
  556. '</div>' +
  557. '<span class="m-t"><div class="text-center ' + isStarted1 + ' btnCustomerTripStart divbtnTripStart_' + data.ContactAddressId + '"><a class="btn btn-primary btn-sm" onclick="Bizgaze.Apps.Crm.Employees.Components.EmployeeRoute.Instance().saveTrip(' + data.ContactAddressId + ',\'' + data.routeVersionGuid + '\',\'Started\',1,0,' + data.tripId + ')">Start</a></div>' +
  558. '<div class="text-center ' + isCanceled1 + ' divbtnTripCancel_' + data.contactAddressId + '"><a class="btn btn-warning btn-sm" onclick="Bizgaze.Apps.Crm.Employees.Components.EmployeeRoute.Instance().saveTrip(' + data.contactAddressId + ',\'' + data.routeVersionGuid + '\',\'Canceled\',1,0,' + data.tripId + ')">Cancel</a>' +
  559. '<a class="btn btn-info btn-sm ' + isArrived1 + ' btnTripTrackStatus btnTripTrackStatus_Arrived" onclick="Bizgaze.Apps.Crm.Employees.Components.EmployeeRoute.Instance().saveTrip(' + data.contactAddressId + ',\'' + data.routeVersionGuid + '\',\'Completed\',1,0,' + data.tripId + ')">Arrived</a>' +
  560. '<a class="btn btn-primary ' + isCompleted1 + ' divbtnTripCompleted_' + data.contactAddressId + ' btnTripTrack_Completed btn-sm" onclick="Bizgaze.Apps.Crm.Employees.Components.EmployeeRoute.Instance().saveTrip(' + data.contactAddressId + ',\'' + data.routeVersionGuid + '\',\'Completed\',1,0,' + data.tripId + ')">Done</a>' +
  561. '</span></div>' +
  562. '<p class="pull-right"><a href="javascript:;" class="btn btn-twitter1 btn-sm" onclick="Bizgaze.Apps.Crm.Employees.Components.EmployeeRoute.Instance().loadNavigate(\'' + data.lat + '\',\'' + data.lng + '\')"><span class=""> Navigate </span></a></p>' +
  563. '</div>');
  564. infoWindow.open(map, marker);
  565. });
  566. }
  567. else {
  568. infoWindow.open(map, marker);
  569. }
  570. });
  571. })(marker, data);
  572. map.setCenter(latlngbounds.getCenter());
  573. map.fitBounds(latlngbounds);
  574. if (i != 0) {
  575. var count = i;
  576. var htm = "";
  577. if (markerdata[i].lat != 0 && markerdata[i].lng != 0) {
  578. instance.calcDistance(markerdata[i].point1, markerdata[i].point2, function (dist) {
  579. htm += '<span>' + dist[0].distance + ' KM Away.</span><br>' +
  580. '<span>' + dist[0].duration + ' Minutes to reach</span><hr>';
  581. });
  582. }
  583. var completed = "";
  584. if (data.tripStatus == "Completed")
  585. completed = '<span class="label bg-primary pull-right"><i class="fa fa-check"></i></span>';
  586. if (data.tripStatus == "Canceled")
  587. completed = '<span class="label bg-danger pull-right"><i class="fa fa-times"></i></span>';
  588. var html = '<div class="col-sm-2 routeUser-item addRoute-item">' +
  589. '<section class="panel panel-default">' +
  590. '<div class="text-center wrapper bg-light lt">' +
  591. '<span class="fa-stack pull-left m-l-xs">' +
  592. '<i class="fa fa-circle text-success fa-stack-2x"></i>' +
  593. '<span class="text-white fa-stack-1x">' + markerdata[count].routeIndex + '</span>' +
  594. '</span> ' +
  595. '<strong class="m-r-xs">' + markerdata[count].contactName + '</strong><br>' +
  596. '</div>' +
  597. '' + completed + '' +
  598. '<div class="text-center">';
  599. html = html + htm;
  600. html += '</div>';
  601. var isStarted = "";
  602. var isCompleted = "hidden";
  603. var isCanceled = "hidden";
  604. var isArrived = "hidden";
  605. var IsCreate = "hidden";
  606. var IsDetails = "hidden";
  607. if (data.tripStatus == "Started") {
  608. isStarted = 'hidden';
  609. isArrived = '';
  610. isCanceled = '';
  611. if (data.activetripTrackStatus == "2") {
  612. isArrived = 'hidden';
  613. isCompleted = '';
  614. }
  615. }
  616. if (data.tripStatus == "Completed") {
  617. isCompleted = 'hidden';
  618. isStarted = 'hidden';
  619. isCanceled = 'hidden';
  620. IsCreate = '';
  621. IsDetails = '';
  622. }
  623. if (data.tripStatus == "Canceled") {
  624. isCanceled = 'hidden';
  625. isArrived = 'hidden';
  626. isStarted = 'hidden';
  627. }
  628. if ((instance._tripTrackStatusIds == 2 || instance._tripTrackStatusIds == 1) && data.tripStatus != "Completed") {
  629. isStarted = 'hidden';
  630. isArrived = '';
  631. isCanceled = '';
  632. }
  633. if ($('#hfTripGroupStatus').val() == "Started" && data.tripStatus == "") {
  634. isStarted = 'hidden';
  635. isArrived = '';
  636. isCanceled = '';
  637. }
  638. html += '<div class="text-center m-b-xs">' +
  639. '<a title="Options" class="btn btn-sm btn-default ' + IsCreate + '" data-toggle="dropdown" data-target=".divbizgaze_createOption_' + markerdata[count].ContactAddressId + '">' +
  640. '<small class="text-sm block">Create</small>' +
  641. '</a>' +
  642. ' <a href="#" class="btn btn-sm btn-default ' + IsDetails + '" onclick=" Bizgaze.Apps.Crm.Employees.Components.EmployeeRoute.Instance().showCustomerDetails(' + markerdata[count].contactId + ',' + '\'' + markerdata[count].contactName + '\')">Details</a>';
  643. html += '<span class="btnCustomerTripComplete"><span class="' + isStarted + ' btnCustomerTripStart divbtnTripStart_' + data.ContactAddressId + '"><a class="btn btn-primary btn-sm" onclick="Bizgaze.Apps.Crm.Employees.Components.EmployeeRoute.Instance().saveTrip(' + markerdata[count].ContactAddressId + ',\'' + markerdata[count].routeVersionGuid + '\',\'Started\',1,0,' + data.tripId + ')">Start</a></span>' +
  644. '<span class="' + isCanceled + ' divbtnTripCancel_' + markerdata[count].ContactAddressId + '"><a class="btn btn-warning btn-sm" onclick="Bizgaze.Apps.Crm.Employees.Components.EmployeeRoute.Instance().saveTrip(' + markerdata[count].ContactAddressId + ',\'' + markerdata[count].routeVersionGuid + '\',\'Canceled\',1,0,' + data.tripId + ')">Cancel</a>' +
  645. '<a class="btn btn-info btn-sm ' + isArrived + ' btnTripTrackStatus btnTripTrackStatus_Arrived" onclick="Bizgaze.Apps.Crm.Employees.Components.EmployeeRoute.Instance().saveTrip(' + markerdata[count].ContactAddressId + ',\'' + markerdata[count].routeVersionGuid + '\',\'Completed\',1,0,' + data.tripId + ')">' + instance._bizgazegps_btnText + '</a>' +
  646. '<a class="btn btn-primary ' + isCompleted + ' divbtnTripCompleted_' + markerdata[count].ContactAddressId + ' btnTripTrack_Completed btn-sm" onclick="Bizgaze.Apps.Crm.Employees.Components.EmployeeRoute.Instance().saveTrip(' + markerdata[count].ContactAddressId + ',\'' + markerdata[count].routeVersionGuid + '\',\'Completed\',1,0,' + data.tripId + ')">Done</a>' +
  647. '</span>' +
  648. '<div id="divbizgaze_createOption" class="dropup divbizgaze_createOption_' + markerdata[count].ContactAddressId + '">' +
  649. '<section class="dropdown-menu pull-right col-sm-5 col-xs-12 m-l-n">' +
  650. '<div class="text-center">' +
  651. '<div class="text-center nav-item-body">' +
  652. '<div class="col-xs-4 no-padder">' +
  653. ' <div class="text-center nav-item-body">' +
  654. '<a href="javascript:;" onclick="Bizgaze.Apps.Crm.Employees.Components.EmployeeRoute.Instance().creates(2,' + markerdata[count].contactId + ')">' +
  655. '<div class="text-center"><div class="thumb-sm avatar b-3x m-t-sm rounded-cornor "> ' +
  656. '<img src="/Tenants/_default/icons/Salesorder.png"> </div>' +
  657. '<div style="height:36px; overflow:hidden;">Order</div></div></a></div></div>' +
  658. '<div class="col-xs-4 no-padder">' +
  659. ' <div class="text-center nav-item-body">' +
  660. '<a href="javascript:;" onclick="Bizgaze.Apps.Crm.Employees.Components.EmployeeRoute.Instance().creates(3,' + markerdata[count].contactId + ')">' +
  661. '<div class="text-center"><div class="thumb-sm avatar b-3x m-t-sm rounded-cornor "> ' +
  662. '<img src="/wwwroot\_files\appicons\receipts.png"> </div>' +
  663. '<div style="height:36px; overflow:hidden;">Receipt</div></div></a></div></div>' +
  664. '</div>' +
  665. '</section>' +
  666. '</div>' +
  667. '</div>' +
  668. '</section></div>';
  669. $(".routeUser-item:last").after(html);
  670. }
  671. let _numberHelper = Unibase.Core.Helpers.NumberHelper.Instance();
  672. var totalDistance = 0;
  673. var totalDuration = 0;
  674. if (data.distance == 0) {
  675. instance.calcDistance(data.point1, data.point2, function (dist) {
  676. totalDistance += parseFloat(dist[0].distance);
  677. totalDuration += parseFloat(dist[0].duration);
  678. $("#bizTotalKm").text(_numberHelper.roundNumber(totalDistance, 1));
  679. $(".lbDuration").text(totalDuration);
  680. });
  681. }
  682. }
  683. var iconsetngs = {
  684. path: google.maps.SymbolPath.FORWARD_CLOSED_ARROW
  685. };
  686. var polylineoptns = {
  687. strokeOpacity: 0.8,
  688. strokeWeight: 3,
  689. map: map,
  690. strokeColor: "#008000",
  691. icons: [{
  692. repeat: '70px',
  693. icon: iconsetngs,
  694. offset: '100%',
  695. }]
  696. };
  697. let polyline = new google.maps.Polyline(polylineoptns);
  698. var z = 0;
  699. var path = [];
  700. path[z] = polyline.getPath();
  701. for (var i = 0; i < markers.length; i++) {
  702. var pos = markers[i];
  703. var marker = new google.maps.Marker({
  704. position: pos,
  705. map: map,
  706. });
  707. path[z].push(marker.getPosition());
  708. }
  709. });
  710. }
  711. createTrip(tripGroupId) {
  712. }
  713. creates(status, contactId) {
  714. let instance = this;
  715. ;
  716. Bizgaze.Apps.Crm.Contacts.Managers.ContactManager.Instance().getOrganizationById(contactId).then(function (response) {
  717. var spocId = contactId;
  718. var OrgGroupId = 0;
  719. if (response.result != null) {
  720. spocId = response.result.DefaultOrgContactId;
  721. OrgGroupId = response.result.OrganizationGroupId;
  722. }
  723. var url = '';
  724. if (status == "1") {
  725. if (response.result != null)
  726. url = '/bizgazeapp/organization/CreateOrganization?RefGuid=&Id=' + OrgGroupId;
  727. else {
  728. url = '/bizgazeapp/spoc/Createspoc';
  729. }
  730. }
  731. else if (status == "2")
  732. url = '/bizgazetransact/Orders/CreateSalesOrderByOrg?OrgId=' + contactId;
  733. else if (status == "3") {
  734. if (response.result != null)
  735. url = '/bizgazetransact/Payments/CreateReceiptByOrgGuid?OrgGuid=' + response.result.VersionGuid;
  736. else
  737. url = '/bizgazetransact/Payments/CreateReceipt?paymentType=Receipt&contactId=' + contactId;
  738. }
  739. });
  740. }
  741. loadRoutes() {
  742. let instance = this;
  743. instance.getMeterReading();
  744. Bizgaze.Apps.Routes.Managers.RouteManager.Instance().getMyRoutes().then(function (response) {
  745. var startedRoute = 0;
  746. var cmbRoutes = document.getElementById('cmbRoutes');
  747. $('#cmbRoutes').empty();
  748. var defaultOpt = document.createElement("option");
  749. defaultOpt.text = "--Select Route--";
  750. defaultOpt.value = "";
  751. cmbRoutes.append(defaultOpt);
  752. for (var i = 0; i < response.result.length; i++) {
  753. var opt = document.createElement("option");
  754. opt.text = response.result[i].RouteName;
  755. opt.value = response.result[i].RouteDefinitionId;
  756. cmbRoutes.append(opt);
  757. }
  758. if (response.result.length == 1) {
  759. for (var j = 0; j < response.result.length; j++) {
  760. var routeName = response.result[j].RouteName;
  761. var routeId = response.result[j].RouteDefinitionId;
  762. $("#lbRouteName").text(routeName);
  763. $("#lbRouteAssignedEmployee").text(response.result[j].RouteAssignedEmployee);
  764. instance.loadRouteMap(routeId);
  765. $('#hfSeletedRouteId').val(routeId);
  766. }
  767. $(".divcmdroutes").addClass('hidden');
  768. $(".divRouteName").removeClass('hidden');
  769. }
  770. else {
  771. $(".divcmdroutes").removeClass('hidden');
  772. $(".divRouteName").addClass('hidden');
  773. if (startedRoute != 0)
  774. instance.loadRouteMap(startedRoute);
  775. }
  776. });
  777. }
  778. showCustomerDetails(contactId, orgname) {
  779. let instance = this;
  780. instance.loadInvoiceDetails(contactId, orgname);
  781. instance.loadOrderDetails(contactId);
  782. $('#divCusomerDetails').modal();
  783. }
  784. loadInvoiceDetails(customerId, orgname) {
  785. let instance = this;
  786. $(".Bizgaze_Crm_Route_customer_addedrow").each(function () {
  787. $(this).remove();
  788. });
  789. Bizgaze.Apps.Transact.Managers.InvoiceManager.Instance().getPendingSalesInvoicesByContactId(Number(customerId), false).then(function (response) {
  790. if (response.result.length > 0) {
  791. var html = '<div class="Bizgaze_Crm_Route_customer_addedrow">' +
  792. '<label>Invoice Details</label>' +
  793. '<table class="table table-bordered text-sm " >' +
  794. ' <thead> ' +
  795. '<tr><th class="col-sm-2">Invoice No</th>' +
  796. '<th class="col-sm-4">Invoice Date</th>' +
  797. '<th class="col-sm-2">Total Amount</th>' +
  798. '<th class="col-sm-4">Balance Amount</th>' +
  799. '</tr>' +
  800. '</thead>' +
  801. '<tr class="bizgazecrm_customer_invoice_row_' + customerId + '"></tr>' +
  802. '</table>' +
  803. '<label>Order Details</label>' +
  804. '<table class="table table-bordered text-sm">' +
  805. '<tr><th class="col-sm-6">Last Order No</th>' +
  806. '<th class="col-sm-6">Date</th>' +
  807. '</tr>' +
  808. '<tr class="bizgazecrm_customer_Order_row_' + customerId + '"></tr>' +
  809. '</table>' +
  810. '<div class="btn-group col-sm-2 form-group pull-right" id="btn-onOff">' +
  811. '</div>' +
  812. '</div>';
  813. $(".divRoutesCustomerlist:last").after(html);
  814. var data = [];
  815. if (response.result.length == 0) {
  816. $(".invoiceNotFount").removeClass('hidden');
  817. var html = '<tr class="divRoutesCustomerlist-addeditem divRoutesCustomerlist invoiceNotFount">' +
  818. '<td class="col-sm-12" colspan="5" align="center">' + 'No invoices Found!' + '</td>' + '</tr>';
  819. $(".bizgazecrm_customer_invoice_row_" + customerId + ":last").after(html);
  820. }
  821. for (var i = 0; i < response.result.length; i++) {
  822. data = response.result[i];
  823. instance.addInvoiceRow(data, customerId);
  824. }
  825. $(".invoiceNotFount").addClass('hidden');
  826. }
  827. else {
  828. $(".divRoutesCustomerlist").html('');
  829. var html = '<tr class="divRoutesCustomerlist-addeditem divRoutesCustomerlist">' +
  830. '<td class="col-sm-12" colspan="5" align="center">' + 'No invoices Found!' + '</td>' + '</tr>';
  831. $(".divRoutesCustomerlist:last").after(html);
  832. }
  833. });
  834. }
  835. addInvoiceRow(data, customerId) {
  836. let _dateTimeHelper = Unibase.Platform.Helpers.DateTimeHelper.Instance();
  837. let _numberHelper = Unibase.Core.Helpers.NumberHelper.Instance();
  838. var html = '';
  839. var balAmount = data.TotalAmount - data.PaidAmount;
  840. if (balAmount != 0) {
  841. html = '<tr class="bizgazecrm_customer_invoice_row bizgazecrm_customer_invoice_addedrow">' +
  842. '<td class="col-sm-2">' + data.InvoiceNo + '</td>' +
  843. '<td class="col-sm-4">' + _dateTimeHelper.formatLocalDate1(data.InvoiceDate, '') + '</td>' +
  844. '<td class="col-sm-2 text-right">' + _numberHelper.roundNumber(data.TotalAmount, 2) + '</td>' +
  845. '<td class="col-sm-4 text-right">' + _numberHelper.roundNumber(balAmount, 2) + '</td>' +
  846. '</tr>';
  847. }
  848. else {
  849. html = '<tr class="bizgazecrm_customer_invoice_row bizgazecrm_customer_invoice_addedrow">' +
  850. '<td class="col-sm-12" colspan="5" align="center">' + 'Data Not Found!' + '</td>' + '</tr>';
  851. }
  852. $(".bizgazecrm_customer_invoice_row_" + customerId + ":last").after(html);
  853. }
  854. loadOrderDetails(customerId) {
  855. let instance = this;
  856. $(".bizgazecrm_customer_Order_addedrow").each(function () {
  857. $(this).remove();
  858. });
  859. Bizgaze.Apps.Transact.Managers.OrderManager.Instance().getLastOrder(customerId).then(function (response) {
  860. if (response.result != null) {
  861. instance.addOrderRow(response.result, customerId);
  862. }
  863. if (response.result.OrderNo == 0) {
  864. var html = '<tr class="divRoutesCustomerlist-addeditem divRoutesCustomerlist">' +
  865. '<td class="col-sm-12" colspan="5" align="center">' + 'No orders Found!' + '</td>' + '</tr>';
  866. $(".bizgazecrm_customer_Order_row_" + customerId + ":last").after(html);
  867. }
  868. });
  869. }
  870. addOrderRow(data, customerId) {
  871. let _dateTimeHelper = Unibase.Platform.Helpers.DateTimeHelper.Instance();
  872. var html = '';
  873. if (data.OrderNo != null) {
  874. html = '<tr class="bizgazecrm_customer_Order_row bizgazecrm_customer_Order_addedrow">' +
  875. '<td class="col-sm-6">' + data.OrderNo + '</td>' +
  876. '<td class="col-sm-6">' + _dateTimeHelper.formatLocalDate(data.OrderDate) + '</td>' +
  877. '</tr>';
  878. }
  879. else {
  880. html = '<tr class="bizgazecrm_customer_Order_row bizgazecrm_customer_Order_addedrow">' +
  881. '<td class="col-sm-12" colspan="2" align="center">' + 'Data Not Found!' + '</td>' + '</tr>';
  882. }
  883. $(".bizgazecrm_customer_Order_row_" + customerId + ":last").after(html);
  884. }
  885. CheckGpsStatus() {
  886. }
  887. calcDistance(p1, p2, callback) {
  888. var distanceArrary = [];
  889. var service = new google.maps.DistanceMatrixService();
  890. service.getDistanceMatrix({
  891. origins: [p1],
  892. destinations: [p2],
  893. travelMode: google.maps.TravelMode.DRIVING,
  894. unitSystem: google.maps.UnitSystem.METRIC,
  895. avoidHighways: false,
  896. avoidTolls: false
  897. }, function (response, status) {
  898. if (status == google.maps.DistanceMatrixStatus.OK && response.rows[0].elements[0].status != "ZERO_RESULTS") {
  899. var distance = response.rows[0].elements[0].distance.text;
  900. var duration = response.rows[0].elements[0].duration.text;
  901. var dis = distance.split(' ');
  902. var dur = duration.split(' ');
  903. distanceArrary.push({ distance: dis[0], duration: dur[0] });
  904. callback(distanceArrary);
  905. }
  906. });
  907. }
  908. loadData() {
  909. let instance = this;
  910. Bizgaze.Apps.Crm.Contacts.Managers.ContactManager.Instance().getCustomerLocations().then(function (response) {
  911. var markerdata = [];
  912. var lat = instance._bizgaze_latd;
  913. var lgt = instance._bizgaze_lgtd;
  914. var distance = [];
  915. var mapOptions = {
  916. center: new google.maps.LatLng(lat, lgt),
  917. zoom: 6,
  918. mapTypeId: google.maps.MapTypeId.ROADMAP
  919. };
  920. var map = new google.maps.Map(document.getElementById("NavigateMap"), mapOptions);
  921. var infoWindow = new google.maps.InfoWindow();
  922. var lat_lng = new Array();
  923. var latlngbounds = new google.maps.LatLngBounds();
  924. for (var i = 0; i < response.result.length; i++) {
  925. var model = response.result[i];
  926. var p1 = new google.maps.LatLng(lat, lgt);
  927. var p2 = new google.maps.LatLng(model.Latitude, model.Longitude);
  928. markerdata.push({ lat: model.Latitude, lng: model.Longitude, userName: model.UserName, distance: 0, point1: p1, point2: p2 });
  929. }
  930. var markers = markerdata;
  931. var lan1 = "";
  932. var lat1 = "";
  933. for (var i = 0; i < markers.length; i++) {
  934. var data = markers[i];
  935. var myLatlng = new google.maps.LatLng(data.lat, data.lng);
  936. lat_lng.push(myLatlng);
  937. var icon = "";
  938. if (i == 0) {
  939. icon = "yellow";
  940. }
  941. else {
  942. icon = "green";
  943. }
  944. icon = "http://maps.google.com/mapfiles/ms/icons/" + icon + ".png";
  945. var image = {
  946. url: icon,
  947. origin: new google.maps.Point(0, 0),
  948. anchor: new google.maps.Point(25, 25),
  949. scaledSize: new google.maps.Size(50, 50)
  950. };
  951. var marker = new google.maps.Marker({
  952. position: myLatlng,
  953. map: map,
  954. draggable: true,
  955. animation: google.maps.Animation.DROP,
  956. icon: image,
  957. title: data.title
  958. });
  959. latlngbounds.extend(myLatlng);
  960. if (i == 0) {
  961. lan1 = markers[0].lng + "/";
  962. lat1 = markers[0].lat + "+";
  963. }
  964. var lan2 = data.lat + "+";
  965. var lat2 = data.lng + "/";
  966. var url = "https://www.google.co.in/maps/dir/" + lat1 + lan1 + lan2 + lat2;
  967. (function (marker, data) {
  968. google.maps.event.addListener(marker, "click", function (e) {
  969. if (data.distance == 0) {
  970. instance.calcDistance(data.point1, data.point2, function (dist) {
  971. data.distance = dist[0].distance;
  972. infoWindow.setContent('<strong class="block">' + data.userName + '</strong>' + '<span class="">Distance: ' + dist[0].distance + '</span>' +
  973. '<div class="">Duration: ' + dist[0].duration + '</div>' +
  974. '<p><a href="#" class="btn" onclick="gpsTrackNavigateDirection.loadNavigate(\'' + url + '\')">Click here</a></p>');
  975. infoWindow.open(map, marker);
  976. });
  977. }
  978. else {
  979. infoWindow.open(map, marker);
  980. }
  981. });
  982. })(marker, data);
  983. map.setCenter(latlngbounds.getCenter());
  984. map.fitBounds(latlngbounds);
  985. }
  986. });
  987. }
  988. loadNavigate(lat, lang) {
  989. var map = new google.maps.Map(document.getElementById('map'), {
  990. zoom: 4,
  991. center: { lat: lat, lng: lang }
  992. });
  993. var pathname = (window.location.pathname);
  994. window.open(map, '', 'width=800,height=450,resizable=yes,dependent,screenx=80,screeny=80,left=80,top=20,scrollbars=no');
  995. }
  996. getAddresss(id, lat, lng) {
  997. let instance = this;
  998. var url = "https://maps.googleapis.com/maps/api/geocode/json?latlng=" + lat + "," + lng;
  999. var xhr = instance.createCORSRequest('Get', url);
  1000. if (!xhr) {
  1001. bootbox.alert('CORS not supported');
  1002. return;
  1003. }
  1004. xhr.onload = function () {
  1005. var text = xhr.responseText;
  1006. var json = JSON.parse(text);
  1007. $("#pac-inputs").val(json.results[0].formatted_address);
  1008. document.getElementById(id).innerHTML = json.results[0].formatted_address;
  1009. };
  1010. xhr.onerror = function () {
  1011. bootbox.alert('Woops, there was an error making the request.');
  1012. };
  1013. xhr.send();
  1014. }
  1015. createCORSRequest(method, url) {
  1016. let XDomainRequest;
  1017. var xhr = new XMLHttpRequest();
  1018. if ("withCredentials" in xhr) {
  1019. xhr.open(method, url, true);
  1020. }
  1021. else if (typeof XDomainRequest != "undefined") {
  1022. xhr = new XDomainRequest();
  1023. xhr.open(method, url);
  1024. }
  1025. else {
  1026. xhr = null;
  1027. }
  1028. return xhr;
  1029. }
  1030. static Instance() {
  1031. if (this.instance === undefined) {
  1032. this.instance = new EmployeeRoute();
  1033. }
  1034. return this.instance;
  1035. }
  1036. }
  1037. Components.EmployeeRoute = EmployeeRoute;
  1038. })(Components = Employees.Components || (Employees.Components = {}));
  1039. })(Employees = Crm.Employees || (Crm.Employees = {}));
  1040. })(Crm = Apps.Crm || (Apps.Crm = {}));
  1041. })(Apps = Bizgaze.Apps || (Bizgaze.Apps = {}));
  1042. })(Bizgaze || (Bizgaze = {}));