EOS/obj/Release/Package/PositioningTool.js
Nidhi Bhargava f0c1ab20e1 code push
2025-09-04 16:25:07 +05:30

541 lines
19 KiB
JavaScript

/*================================================================================================================\
+
+ Project : GODATA-VECV
+ Filename : PositioningTool.js
+ Module Name : GeoModule
+ Purpose : To show the Geo Analysis Report.
+ Coded By : Gourav Jhangikhel
+
+================================================================================================================*/
/**
* To show geo analysis and positioning tool report.
* @module Geo
*/
/**
* To show geo analysis and positioning tool report.
* @class PositioningTool_Report
* @constructor
*/
var GA_ArrOpenTicket = new Array();
var GA_ArrCloseTicket = new Array();
var GA_ArrDealerDetl = new Array();
var GA_ArrSlaNotMeet = new Array();
var GA_ArrSlaNotMeet = new Array();
var GA_AllTickets = new Array();
// Initialising Vehicle Product Variant List and making them available globally in JSON object.
var TimeDuration = [
{
'Value': '3',
'Text': '0-3',
'FromDate': '-3',
'ToDate' : '0'
},
{
'Value': '6',
'Text': '3-6',
'FromDate': '-6',
'ToDate': '-3'
},
{
'Value': '9',
'Text': '6-9',
'FromDate': '-9',
'ToDate': '-6'
},
{
'Value': '12',
'Text': '>12',
'FromDate': '01-Jan-1947',
'ToDate': '-12'
}
];
var latlngbounds;
var map = null;
//array of source and destination markers
var GA_openTicketMarkerArray = [];
var GA_closeTicketMarkerArray = [];
var GA_slaNotMeetMarkerArray = [];
var GA_slaMeetMarkerArray = [];
var infoWindow = new google.maps.InfoWindow();
// Instance of MarkerClusterer.js.
var masterClusterInstance = '';
// Instance of OverlappingMarkerSpiderfier.js.
var oms = '';
var ZoomLevel = 8;
// MarkerClusterer options
var clusterOptions = { gridSize: 60, maxZoom: 9 };
//initialize markers
var GA_CloseTicketMarker = '../../Scripts/map_api/icons/AnalysisIcons/slaMeet.png'; //marker for source
var GA_OpenTicketMarker = '../../Scripts/map_api/icons/AnalysisIcons/OpenTicketyellow.png';
var GA_slaNotMeetMarkerImage = "../../Scripts/map_api/icons/AnalysisIcons/SlaNotMeet.png";
var GA_slaMeetMarkerImage = "../../Scripts/map_api/icons/AnalysisIcons/CloseTicketgreen.png";
/**
* Complete Calling For Geo Analysis Report.
* @method showReport
* @for PositioningTool_Report
*/
function showReport() {
GA_SetMap("map-canvas");
GA_GetDetailFromServer();
initialize();
GA_SetBitTrue();
}
/**
* Function to get Information From Server According to Year, Month, Eos van, Open Ticket, close Ticket, Dealer.
* @method GA_GetDetailFromServer
* @for PositioningTool_Report
*/
function GA_GetDetailFromServer() {
var FromDate = '';
var ToDate = '';
GA_openTicketMarkerArray = []; //array of source and destination markers
GA_closeTicketMarkerArray = [];
GA_ArrSlaNotMeet = [];
GA_ArrSlaMeet = [];
GA_AllTickets = [];
oms = '';
/*Create a instance of OverlappingMarkerSpiderfier*/
oms = new OverlappingMarkerSpiderfier(map,
{ markersWontMove: true, markersWontHide: true });
var vIsOpenTicket = true,
vIsClosedTickets = true,
vIsSLAMet = $("#btnSlaMeet").is(':checked'),
vIsSLANotMet = $("#btnSlaNotMeet").is(':checked'),
stateVal = $("#stateCombobox1").val();
for (var counter = 0; counter < TimeDuration.length; counter++) {
if ($("#ddTimeDuration").val() == TimeDuration[counter].Value) {
FromDate = TimeDuration[counter].FromDate;
ToDate = TimeDuration[counter].ToDate;
break;
}
}
oAnalysis = {};
oAnalysis.IsOpenTicket = vIsOpenTicket;
oAnalysis.IsClosedTickets = vIsClosedTickets;
oAnalysis.IsSLAMet = vIsSLAMet;
oAnalysis.IsSLANotMet = vIsSLANotMet;
oAnalysis.State = stateVal;
oAnalysis.FromDate = FromDate;
oAnalysis.ToDate = ToDate;
if (oAnalysis.IsSLAMet == true || oAnalysis.IsSLANotMet == true) {
if (AllValid()) {
$("#div_load").show();
for (var i = 0; i < GA_slaMeetMarkerArray.length; i++) {
GA_slaMeetMarkerArray[i].setMap(null);
}
for (var j = 0; j < GA_slaNotMeetMarkerArray.length; j++) {
GA_slaNotMeetMarkerArray[j].setMap(null);
}
GA_slaNotMeetMarkerArray = [];
GA_slaMeetMarkerArray = [];
$.ajax({
type: "GET",
url: "/Analysis/Analysis_GetPositioningRprtDetl/",
data: oAnalysis,
dataType: "json",
success: function (data) {
$("#slaMetCount").html("(" + data.SLAMetCount + ")");
$("#slaNotMetCount").html("(" + data.SLANotMetCount + ")");
$("#totalBreakDown").html("(" + parseInt(data.SLAMetCount + data.SLANotMetCount) + ")");
GA_ArrOpenTicket = data.GeoAnalysisModelReport.lsOpenTicket;
GA_ArrCloseTicket = data.GeoAnalysisModelReport.lsCloseTicket;
GA_PutMarker(GA_ArrOpenTicket, GA_OpenTicketMarker, false);
GA_PutMarker(GA_ArrCloseTicket, GA_CloseTicketMarker, false);
////var vTempMarkerCluster = new Array();
////vTempMarkerCluster = vTempMarkerCluster.concat(GA_slaNotMeetMarkerArray);
////vTempMarkerCluster = vTempMarkerCluster.concat(GA_slaMeetMarkerArray);
//masterClusterInstance = new MarkerClusterer(map, GA_AllTickets, { maxZoom: 9 });
//GA_slaNotMeetMarkerArray = [];
//GA_slaMeetMarkerArray = [];
//initialize();
},
complete: function () {
$("#div_load").hide();
setMapCenterToAddress(stateVal);
// map.fitBounds(latlngbounds);
//$("#stateCombobox").data('kendoComboBox').select(0);
},
error: function (jqXHR, textStatus, errorThrown) {
}
});
}
}
else {
jAlert(MANAGE_POSTIONINGTOOL_MESSAGES.atleastOnecheckbox, "Message");
}
}
/**
* Function to Put the Marker On Google Map.
* @method GA_PutMarker
* @param {Array} Arr Array That is put On Google Map.
* @param {String} MarkerImagePath Marker Image Path
* @param {boolean} IsAnimation Is Marker will Animate Or not
* @for PositioningTool_Report
*/
function GA_PutMarker(Arr, MarkerImagePath, IsAnimation) {
latlngbounds = new google.maps.LatLngBounds();
// Display multiple markers on a map
ticketDetailsMarkerArray = [];
// Loop through our array of markers & place each one on the map
if (Arr.length > 0) {
for (i = 0; i < Arr.length; i++) {
if (Arr[i].SlaMet == "True") {
MarkerImagePath = GA_slaMeetMarkerImage;
}
else {
MarkerImagePath = GA_slaNotMeetMarkerImage;
}
var position = new google.maps.LatLng(Arr[i].DefaultLattitude, Arr[i].DefaultLongitude);
if (Arr[i].TicketIdAlias == null)
Arr[i].TicketIdAlias = "";
var marker = new google.maps.Marker({
position: position,
map: map,
title: Arr[i].TicketIdAlias,
TicketId: Arr[i].Id,
icon: MarkerImagePath,
Latitude: Arr[i].DefaultLattitude,
Longitude: Arr[i].DefaultLongitude,
ServiceEngineerName: Arr[i].ServiceEnggName,
DealerName: Arr[i].DealerName,
MobileNo: Arr[i].ServiceEnggContactNumber,
VanRegNo: Arr[i].VanRegistrationNumber,
TicketStatus: Arr[i].TicketStatusAlias,
AssignedTo: Arr[i].AssignTo,
TicketCreationDate: Arr[i].CreationTime,
DealerCityName: Arr[i].City,
DealerStateName: Arr[i].State,
lstType: Arr[i].lstType,
SlaMet: Arr[i].SlaMet,
CustomerContactNumber: Arr[i].CustomerContactNumber,
CustomerName: Arr[i].CustomerName,
DealerContact: Arr[i].DealerContact,
IsOppurLost: Arr[i].oppurLost
});
var sourceVan = new google.maps.LatLng(Arr[i].DefaultLattitude, Arr[i].DefaultLongitude); // ceating van lat-long object
latlngbounds.extend(sourceVan); // extending lat-long object
// Add marker to OMS.
oms.addMarker(marker);
GA_AllTickets.push(marker);
/*Add Marker To Cluster*/
//if (IsAnimation)
// marker.setAnimation(google.maps.Animation.BOUNCE);
// In Which Array Marker is Push
//0 : EOS VAN
//1 : Open Ticket
//2 : Close Ticket
//3 : Dealer Detail
//4 : SlA Meet
//5 : SLA Not Meet
//6 : Opportunity Lost
switch (Arr[i].lstType) {
case 1:
GA_openTicketMarkerArray.push(marker);
break;
case 2:
GA_closeTicketMarkerArray.push(marker);
break;
case 4:
GA_slaMeetMarkerArray.push(marker);
break;
case 5:
GA_slaNotMeetMarkerArray.push(marker);
break;
}
// Automatically center the map fitting all markers on the screen
google.maps.event.addListener(marker, 'click', GA_AddInfoWindow);
}
//ccplMapGeo.fitBounds(latlngbounds);
//var position = new google.maps.LatLng(defaultLat, defaultLng);
//bounds.extend(position);
//var sourceVan = new google.maps.LatLng(van.VanDefaultLatitude, van.VanDefaultLongitude); // ceating van lat-long object
//latlngbounds.extend(sourceVan); // extending lat-long object
}
}
/**
* Function to AddInfo On Click On marker.
* @method GA_AddInfoWindow
* @for PositioningTool_Report
*/
function GA_AddInfoWindow(e) {
infoWindow.close();
var infoWindowContent = GA_GetInfoWindowsTemplate(this);
infoWindow.setContent(infoWindowContent);
infoWindow.open(map, this);
}
/**
* Function to Set the Info Wimdow Template
* @method GA_GetInfoWindowsTemplate
* @param {Object} vObj Contain Information About Marker Object.
* @for PositioningTool_Report
*/
function GA_GetInfoWindowsTemplate(vObj) {
var vReturn = "";
// Set Info Window Template According to List Type
//0 : EOS VAN
//1 : Open Ticket
//2 : Close Ticket
//3 : Dealer Detail
//4 : SLA Meet
//5 : SLA Not Met
//6 : Opportunity Lost
switch (vObj.lstType) {
case 1:
vReturn = "<h2 class='EngName_heading'> Open Ticket : " + vObj.title + "</h2>" +
"<table class='InfoWindowTbl' width='100%' cellpadding='0' cellspacing='0'><tbody><tr>" +
"<td><span>Ticket Creation Date</span></td><td>" + vObj.TicketCreationDate + "</td>" +
"<td><span>Ticket Status</span></td><td>" + vObj.TicketStatus + "</td>" +
"<td><span>Customer Name</span></td><td>" + vObj.CustomerName + "</td>" +
"<td rowspan='2'><a href='#' onclick=Open_ticket_Detail('" + vObj.TicketId + "')>View Detail</a></td>" +
"</tr><tr>" +
"<td><span>EOS Team Member</span></td><td>" + vObj.ServiceEngineerName + "</td>" +
"<td><span>Mobile No.</span></td><td>" + vObj.CustomerContactNumber + "</td>" +
"<td><span>Assigned To</span></td><td>" + vObj.AssignedTo + "</td>" +
"</tr></tbody></table>";
break;
case 2:
vReturn = "<h2 class='EngName_heading'> Close Ticket : " + vObj.title + "</h2>" +
"<table class='InfoWindowTbl' width='100%' cellpadding='0' cellspacing='0'><tbody><tr>" +
"<td><span>Ticket Creation Date</span></td><td>" + vObj.TicketCreationDate + "</td>" +
"<td><span>Customer Name</span></td><td>" + vObj.CustomerName + "</td>" +
"<td><span>Assigned To</span></td><td>" + vObj.AssignedTo + "</td>" +
"</tr><tr>" +
"<td><span>EOS Team Member</span></td><td>" + vObj.ServiceEngineerName + "</td>" +
"<td><span>Mobile No.</span></td><td>" + vObj.CustomerContactNumber + "</td>" +
"<td colspan ='2'><a href='#' onclick=Close_ticket_Detail('" + vObj.TicketId + "')>View Detail</a></td>" +
"</tr><tr></tbody></table>";
break;
case 4:
case 5:
case 6:
var vTitle = "";
if (vObj.lstType == 4) {
vTitle = "SLA Met";
}
else if (vObj.lstType == 5) {
vTitle = "SLA Not Met";
}
vReturn = "<h2 class='EngName_heading'>" + vTitle + " : " + vObj.title + "</h2>" +
"<table class='InfoWindowTbl' width='100%' cellpadding='0' cellspacing='0'><tbody><tr>" +
"<td><span>Ticket Creation Date</span></td><td>" + vObj.TicketCreationDate + "</td>" +
"<td><span>Customer Name</span></td><td>" + vObj.CustomerName + "</td>" +
"<td><span>Assigned To</span></td><td>" + vObj.AssignedTo + "</td>" +
"</tr><tr>" +
"<td><span>EOS Team Member</span></td><td>" + vObj.ServiceEngineerName + "</td>" +
"<td><span>Mobile No.</span></td><td>" + vObj.CustomerContactNumber + "</td>" +
"</tr></tbody></table>";
break;
}
return vReturn;
}
/**
* Function to un Check All Checkboxes
* @method Ga_UncheckCheckBox
* @for PositioningTool_Report
*/
function Ga_UncheckCheckBox() {
$("#btnSlaMeet,#btnSlaNotMeet").prop('checked', false);
}
/**
* Function to Initalize google map
* @method GA_SetMap
* @param {string} id Id Of Google Map.
* @for PositioningTool_Report
*/
function GA_SetMap(id) {
map = new google.maps.Map(document.getElementById(id), {
mapTypeId: google.maps.MapTypeId.ROADMAP,
center: new google.maps.LatLng(defaultLat, defaultLng),
zoom: ZoomLevel
});
}
/**
* Function to Load All State on Page Load.
* @method loadStateChoices1
* @for PositioningTool_Report
*/
function loadStateChoices1() {
SecurityToken = securityToken;
utcMinutes = parseInt(UtcMinutes, 10);
UserId = userId;
$.ajax({
type: "POST",
url: WCFRESTURL.GetStateListIdWise,
data: { Token: SecurityToken, UtcMinutes: utcMinutes, UserId: UserId },
dataType: "json",
success: function (data) {
//data.push({
// StateId: 0,
// StateAlias: "-Select-"
//});
data.sort(function SortState(a, b) { // non-anonymous as you ordered...
return b.StateAlias < a.StateAlias ? 1 // if b should come earlier, push a to end
: b.StateAlias > a.StateAlias ? -1 // if b should come later, push a to begin
: 0; // a and b are equal
});
$("#stateCombobox1").kendoComboBox({
dataTextField: "StateAlias",
dataValueField: "StateAlias",
filter: "contains",
dataSource: data
});
},
complete: function () {
$("#stateCombobox").focus(function () {
$(this).select();
});
},
error: function (jqXHR, textStatus, errorThrown) {
}
});
}
/**
* Function To bind Manager Level list
* @method bindManagerLevel
* @for PositioningTool_Report
*/
function bindTimeDuration() {
// empty data source dropdown.
$("#ddTimeDuration").text("");
// by default add select text.
$("#ddTimeDuration").append($('<option></option>').val("").html("-Select-"));
// add data to dropdown.
if (TimeDuration) {
//console.log('v p v');
for (var counter = 0; counter < TimeDuration.length; counter++) {
$("#ddTimeDuration").append($('<option></option>').val(TimeDuration[counter].Value).html(TimeDuration[counter].Text));
}
}
}
/**
* This function is Used to Validate the Sate and time duration
* @method AllValidVanDetail
* @for PositioningTool_Report
*/
function AllValid() {
var vResult = false;
var State = $("#stateCombobox1").val();
var duration = $("#ddTimeDuration").val();
$("#spanState").hide();
$("#spanTimeDuration").hide();
if (State == "") {
$("#spanState").show();
}
else if (duration == "") {
$("#spanTimeDuration").show();
}
else {
vResult = true;
}
return vResult;
}
//-------------- *** HERE API Implementation for Distance *** ---------------------
function callHereAPIForDistance(details) {
var resultElsForDistance = [];
var destinationLongitute = details.destination.lng();
var destinatiionLatitude = details.destination.lat();
var originLongitude = details.origin.lng();
var originLatitude = details.origin.lat();
var travelMode = details.travelMode;
var url = "https://router.hereapi.com/v8/routes?";
url += "transportMode=" + travelMode;
url += "&origin=" + originLatitude + "," + originLongitude;
url += "&destination=" + destinatiionLatitude + "," + destinationLongitute;
url += "&apiKey=DW3-YCFFZtJzlAQpTfVPoXADcZpEeZe3t8h6ganVsqo";
url += "&return=summary";
var request = GetDataHerefromAPI("get", url);
if (request) {
request.onload = function (data) {
var res = JSON.parse(data.target.response);
resultElsForDistance.status = "OK";
resultElsForDistance.response = res;
copyResulElsForDistance.push(resultElsForDistance);
}
request.send();
}
}
function GetDataHerefromAPI(method, url) {
var xhr = new XMLHttpRequest();
xhr.withCredentials = false;
if ("withCredentials" in xhr) {
xhr.open(method, url, false);
} else if (typeof XDomainRequest != "undefined") {
xhr = new XDomainRequest();
xhr.open(method, url);
} else {
xhr = null;
}
return xhr;
}
function calculatedistance(distance, str) {
return distance = { text: str.slice(str.indexOf("length") + 8, str.indexOf("</span>")), value: distance };
}
function calculatetime(time, str) {
return duration = { text: str.slice(str.indexOf("time") + 6, str.indexOf("</span>.")), value: time }
}