/*================================================================================================================\ + + 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 = "

Open Ticket : " + vObj.title + "

" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "
Ticket Creation Date" + vObj.TicketCreationDate + "Ticket Status" + vObj.TicketStatus + "Customer Name" + vObj.CustomerName + "View Detail
EOS Team Member" + vObj.ServiceEngineerName + "Mobile No." + vObj.CustomerContactNumber + "Assigned To" + vObj.AssignedTo + "
"; break; case 2: vReturn = "

Close Ticket : " + vObj.title + "

" + "" + "" + "" + "" + "" + "" + "" + "" + "
Ticket Creation Date" + vObj.TicketCreationDate + "Customer Name" + vObj.CustomerName + "Assigned To" + vObj.AssignedTo + "
EOS Team Member" + vObj.ServiceEngineerName + "Mobile No." + vObj.CustomerContactNumber + "View Detail
"; 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 = "

" + vTitle + " : " + vObj.title + "

" + "" + "" + "" + "" + "" + "" + "" + "
Ticket Creation Date" + vObj.TicketCreationDate + "Customer Name" + vObj.CustomerName + "Assigned To" + vObj.AssignedTo + "
EOS Team Member" + vObj.ServiceEngineerName + "Mobile No." + vObj.CustomerContactNumber + "
"; 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($('').val("").html("-Select-")); // add data to dropdown. if (TimeDuration) { //console.log('v p v'); for (var counter = 0; counter < TimeDuration.length; counter++) { $("#ddTimeDuration").append($('').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; }