541 lines
19 KiB
JavaScript
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 }
|
|
}
|
|
|