API Docs for:
Show:

File: Report\PositioningTool.js

/*================================================================================================================\
+
+ 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("Atleast one checkbox must be checked");
    }

}





/**
* 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);
            var marker = new google.maps.Marker({
                position: position,
                map: map,
                title: 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.title + "')>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.title + "')>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;
}