JFIF  x x C         C     "        } !1AQa "q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz        w !1AQ aq"2B #3Rbr{ gilour

File "assign_driver.js"

Full Path: /var/www/html/ctctaxi/public/assets/vendor_plugins/timepicker/assign_driver.js
File size: 22.27 KB
MIME-type: text/plain
Charset: utf-8

var html_data = "";
var map;
var markerPositions = [];
var markerarray = [];
markerarray["all"] = []; 
markerarray["online"] = []; 
markerarray["offline"] = []; 
markerarray["onride"] = []; 
var driver_ids = [];
driver_ids["all"] = []; 
driver_ids["online"] = []; 
driver_ids["offline"] = []; 
driver_ids["onride"] = []; 
var mobile = "**********";
var markerMap = {};
var marker; 
var type; 
var database; 
var shouldProcessChildAdded = false;
var baseUrl = appUrl;
  var modal;
  function popup_init(){
       modal = document.getElementById("modal1");
      modal.style.display = "flex";
    }
    function popup_data(model_content){
      $(".model-content-wrapping").html(model_content);
      modal.style.display = "flex"; 
  
    }
    function popup_close()
    {
        setTimeout(function() { 
            modal = document.getElementById("modal1");
            modal.style.display = "none";
            var clickedTab = document.getElementById("online-tab");
            clickedTab.querySelector('.nav-link').classList.add('active');
          
            // Call the fetchDataFromFirebase function with the respective parameter
            var tabValue = clickedTab.getAttribute('data-val');
            fetchDataFromFirebase(tabValue,clickedTab);
        }, 500); 
     
    }
   
  function assign_driver(id,request_id)
{
  // alert(id);
  $("#loader").show();
                    $(".bg-loader").addClass("actv");
    $.ajax({
                    url: baseUrl+'/assign-manual/'+request_id,
                    type: "get",
                    data: {driver_id:id},
                    success: function(result) { 
                      $("#loader").hide();
                      $(".bg-loader").removeClass("actv");
                      popup_init();
                      popup_data(` 
                          <div class="popup-card">
                          
                          <div class="popup-card-content">
                          
                              <img src="${baseUrl}/assets/img/assign.png" style="margin:auto;width: 250px;" alt="">
                              <h1>Driver Assigned Successfully</h1>
                              <br>
                              <p class="driver_confirmation" style="font-size:16px;color:#d62727;">Waiting for Driver Accepting...</p>
                              <a class="btn btn-success" onclick="popup_close()" style="font-size:16px;margin: auto;margin-top: 20px;" href="#">Close</a>
                          </div>
                          </div>
                      `);
                      // setTimeout(function() { 
                      //     window.location.href = baseUrl+'/dispatch/detailed-view/'+request_id; 
                      // }, 500); 
                    }
                });
}

    function removeMarkers() {  
      for (var i = 0; i < markerPositions.length; i++) { 
        markerPositions[i].setMap(null); // Remove the marker from the map
      }
      markerPositions = [];
      markerMap = {};
    }
    function calculateDistance(lat1, lon1, lat2, lon2) {
      const R = 6371; // Radius of the Earth in kilometers
      const dLat = deg2rad(lat2 - lat1);
      const dLon = deg2rad(lon2 - lon1);
      const a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
                Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) *
                Math.sin(dLon / 2) * Math.sin(dLon / 2);
      const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
      const distance = R * c; // Distance in kilometers
      return distance;
  }
  
  function deg2rad(deg) {
      return deg * (Math.PI / 180);
  }
    function get_html_data(text,driverData){
      var distance = calculateDistance(pick_lat,pick_lng,driverData.l[0],driverData.l[1]);
       
                          if(demo !== 'demo'){mobile = driverData.mobile;}
       

      html_data+=`<div class="intro-y g-col-12 g-col-md-12 all-tabss" id="${driverData.id}" data-lat="${driverData.l[0]}" data-lng="${driverData.l[1]}" style="background:#F3F4F4;box-shadow:  0px 0px 8px 1px rgba(0,0,0,0.3);cursor:pointer">
      <div class="box fs mt-10">
          <div class="d-flex flex-column flex-lg-row align-items-center p-5">
              <div class="w-24 h-24 w-lg-32 h-lg-32 image-fit me-lg-1">
                  <img alt="" class="img-fluid rounded-circle" src="${baseUrl}/assets/img/user-dummy.svg">
              </div>
              <div class="ms-lg-2 me-lg-auto text-center text-lg-start mt-3 mt-lg-0">
              <div class="fs p-2"><i class="fa fa-user me-5"></i>${driverData.name} <strong class="mx-2">${driverData.rating}<i class="fa fa-star" style="color:yellow"></i></strong></div>
              <div class="fs p-2"><i class="fa fa-phone me-5"></i>${mobile}</div> 
              </div>
              <div class="ms-lg-2 me-lg-3 text-center text-lg-center mt-3 mt-lg-0">`;

              if(!driverData.is_available )
                          {
                            html_data+= ` <p class="fs mb-2" style="background:#E1FBDE;color:64C319;padding:5px 10px;border-radius:5px;">${text}</p><p class="fs mb-2">${distance.toFixed(2)}km Away</p>`;
                          }
                          else{

                                if(driverData.is_active)
                              {
                                
                                html_data+= ` <p class="fs mb-2" style="background:#E1FBDE;color:64C319;padding:5px 10px;border-radius:5px;">${text}</p><p class="fs mb-2">${distance.toFixed(2)}km Away</p> <button class="btn py-1 px-2 me-2 fs" style="background:#8242F1;color:white;font-weight:800;" data-val="${driverData.id}" onclick="assign_driver('${driverData.id}','${request_id}')">Assign</button>`;
                              }
                              else{
                                html_data+= ` <p class="fs mb-2" style="background:#E1FBDE;color:64C319;padding:5px 10px;border-radius:5px;">${text}</p><p class="fs mb-2">${distance.toFixed(2)}km Away</p>`;
                              }
                          } 
                          html_data+= `</div></div></div></div>`;
                  return html_data;
    }

    function setmap(type,driverData,lastkey=false)
    {  
      if(driverData.hasOwnProperty('is_available'))
      {   
          var eligible_status = 0;
          if(type == "all")
          {
            eligible_status = 1;
          if(driverData.is_active == 1 && driverData.is_available === true)
          {
            var text = "Online";
          }
          if(driverData.is_available === false)
          { 
            var text = "Onride";
          }
          if(driverData.is_active == 0)
          {
            var text = "Offline";
          }
          }
          if(type == "online")
          {
          if(driverData.is_active == 1 && driverData.is_available === true)
          {
            eligible_status = 1;
            var text = "Online";
          }
          }
          if(type == "offline")
          {
            if(driverData.is_active == 0)
            {
              eligible_status = 1;
              var text = "Offline";
            }
          }
          if(type == "onride")
          {
            if(driverData.is_available === false)
            {
              eligible_status = 1;
              var text = "Onride";
            }
          }  
          if(eligible_status == 1)
          {
                // alert("eligible_status");
              var latitude = driverData.l[0];
              var longitude = driverData.l[1];
              // Create marker position
              var markerPosition = { lat: latitude, lng: longitude ,driver_id:driverData.id}; 
            
              driver_ids[type].push(driverData.id);
            // markerarray[type].push(markerPosition); 
            // markerarray.push(markerPosition);   
                  
              driver_ids[type] = [...new Set(driver_ids[type])];  
              (markerarray[type] || (markerarray[type] = [])).push(markerPosition);

              // Convert the array of marker positions to a Set to remove duplicates based on driver ID
              const uniqueMarkerPositions = Array.from(new Set(markerarray[type].map(pos => pos.driver_id)))
              .map(driver_id => markerarray[type].find(pos => pos.driver_id === driver_id));

              // Update markerarray[type] with the unique marker positions
              markerarray[type] = uniqueMarkerPositions; 
          
              // Calculate the center of all marker positions
              var centerLat = 0;
              var centerLng = 0;

              markerarray[type].forEach(function(markerPosition) {
                  centerLat += markerPosition.lat;
                  centerLng += markerPosition.lng;
              });

              centerLat /= markerarray[type].length;
              centerLng /= markerarray[type].length; 
              // Set the map center to the calculated center
              map.setCenter({ lat: centerLat, lng: centerLng }); 
              map.setZoom(5); 
              var html_datas = get_html_data(text,driverData); 
              $(".driver-side-menu").append(html_datas);
            
        
          }  
          if(lastkey)
          {  
            markerarray[type].forEach(function(markerPosition) {
              addMarker(markerPosition.lat,markerPosition.lng,markerPosition.driver_id);
            });
          }
      } 
    }
    function deleteSingleMarker(id)
    { 
      var markerToRemove = markerMap[id];
      if (markerToRemove) { 
          markerToRemove.setMap(null); 
          delete markerMap[id];
      }
    }
    function addMarker(latitude, longitude,id) {
                marker = new google.maps.Marker({
                  position: { lat: latitude, lng: longitude },
                  map: map, // Assuming 'map' is your initialized map object
                  title: "Marker" // You can set a title if needed
              });

              // Push the marker to the array
              markerPositions.push(marker);
              markerMap[id] = marker;  
    }
    var data_array = [];
    function fetchDataFromFirebase(type = undefined,element=undefined) {
       database = firebase.database();
       var requestRef = database.ref('requests');
        
       requestRef.child(request_id).on("value", (snapshot) => {
        // if(shouldProcessChildAdded){
          var snapshot = snapshot.val();
          if(snapshot.hasOwnProperty('is_accept'))
          {
              if(snapshot.is_accept == 1)
              {
                window.location.href = baseUrl+'/dispatch/detailed-view/'+request_id;    
              }
          }
          if(snapshot.hasOwnProperty('driver_rejected_ids'))
          {
            var data_value = snapshot.driver_rejected_ids;
            const difference = data_value.filter(value => !data_array.includes(value));
            
            if(difference.length > 0){
            $(".driver_confirmation").html('Driver Rejected the Request')
            }
            for(var i=0;i<data_value.length;i++)
            { 
            data_array.push(data_value[i]); 
            data_array = [...new Set(data_array)];  
            }
          }
        // }
      });
       $("li.nav-item").removeClass("actv");
      if(element === undefined || type=="all")
      {
        $("#all-tab").addClass("actv");
      }
      else{
        if (element instanceof jQuery) {
          element.addClass("actv");
        } else {
          element.classList.add("actv");
        }
      }
$(".driver-side-menu").html('');


var driverRef = database.ref('drivers').orderByKey().startAt("driver_");
if(type == "online")
{
var driverRef = database.ref('drivers').orderByChild("is_active").equalTo(1);
}
if(type == "offline")
{
var driverRef = database.ref('drivers').orderByChild("is_active").equalTo(0);
}
if(type == "onride")
{
var driverRef = database.ref('drivers').orderByChild("is_available").equalTo(false);
}


var driverIdPattern = "driver_"; // The pattern to match
removeMarkers();
markerarray = [];
driverRef.once("value", function(snapshot) {


var totalChildren = snapshot.numChildren();
if(totalChildren == 0)
{
  html_data = "";
 html_data+= `<div class="box p-2 mt-5" style="height:400px;width:400px"><img src="${baseUrl}/images/no-drivers.png" style="height:100%;width:100%"></div>`;

 $(".driver-side-menu").append(html_data);
}else{
var processedChildren = 0;

    snapshot.forEach(function(childSnapshot) {
      html_data = "";
      processedChildren++;
      var lastkey;
      // Check if this is the last child
      var driverData = childSnapshot.val();
        var driverKey = childSnapshot.key;

      if(driverKey.startsWith("driver_"))
      {
        if (processedChildren === totalChildren)
        {

          if(driverData.hasOwnProperty('is_available'))
          {
            setmap(type,driverData,true);
          }
          else{
              markerarray[type].forEach(function(markerPosition) {
                addMarker(markerPosition.lat,markerPosition.lng,markerPosition.driver_id);
              });

          }

        }
        else{
              setmap(type,driverData,false);
        }
      }
      else{
        if (processedChildren === totalChildren) {
          if(markerarray.length > 0){
            markerarray[type].forEach(function(markerPosition) {
              addMarker(markerPosition.lat,markerPosition.lng,markerPosition.driver_id);
            });
          }else{
            html_data = `<div class="box p-2 mt-5" style="height:400px;width:400px"><img src="${baseUrl}/images/no-drivers.png" style="height:100%;width:100%"></div>`;
            $(".driver-side-menu").append(html_data);
          }
        }
      }
    });
  }
});
}
// document.querySelector(".hamburger").addEventListener("click", function () { 
//       document.querySelector("nav").classList.toggle("toggle-menu") 
//   });

//   document.querySelector(".close").addEventListener("click", function () { 
//       document.querySelector("nav").classList.toggle("toggle-menu") 
//   });
  // window.onload = fetchDataFromFirebase;

  $(document).ready(function() {
    setTimeout(function() {
      shouldProcessChildAdded = true;
      shouldProcessSosChildAdded = true;
      }, 3000);
            // setInterval(function(){ 
              
            // var data_val = $("li.nav-item.actv").attr("data-val");
            // // alert(data_val);
            // fetchDataFromFirebase(data_val,$("li.nav-item.actv")); 
            // }, 60000); 
            fetchDataFromFirebase('all');
            const dbRef = firebase.database().ref();
            dbRef.child("drivers").on("child_changed", (snapshot) => {
              if (snapshot.exists()) {
               
                driverData = "";
                 driverData = snapshot.val();
                 const driverId = snapshot.key;
                 if (driverId.startsWith("driver_")) { 
                 var data_val = $("li.nav-item.actv").attr("data-val");
                //  alert(data_array);
                 if (!data_array.includes(driverData.id)) { 
                 if(data_val == "online")
                 { 
                  var append_status = 0;
                  if(driverData.is_active == 1 && driverData.is_available == true)
                  {
                    var text = "Online";   
                     
                    if (!driver_ids[data_val].includes(driverData.id)) {
                        append_status = 1;
                        driver_ids[data_val].push(driverData.id); 
                        var latitude = driverData.l[0];
                        var longitude = driverData.l[1];
                        addMarker(latitude,longitude,driverData.id);
                    }
                  }
                  else{  
                     $("#"+driverData.id).remove(); 
                     deleteSingleMarker(driverData.id);
                     const index = driver_ids[data_val].indexOf(driverData.id); 
                      if (index !== -1) {
                        driver_ids[data_val].splice(index, 1);
                      } 
                  }
                 }
                 if(data_val == "offline")
                 {
                  var append_status = 0;
                  if(driverData.is_active == 0 && driverData.is_available == true)
                  {
                    var text = "Offline"; 
                    if (!driver_ids[data_val].includes(driverData.id)) {
                     append_status = 1;
                     driver_ids[data_val].push(driverData.id);
                     addMarker(driverData.l[0],driverData.l[1],driverData.id);
                    }
                  }
                  else{
                    deleteSingleMarker(driverData.id);
                    $("#"+driverData.id).remove();
                  }
                 }
                }
                 if(data_val == "onride")
                 {
                  var append_status = 0;
                  if(driverData.is_available == true)
                  {
                    
                    deleteSingleMarker(driverData.id);
                    $("#"+driverData.id).remove();
                  } 
                  else{
                    var text = "Onride";
                    if (!driver_ids[data_val].includes(driverData.id)) {
                        append_status = 1;
                        driver_ids[data_val].push(driverData.id);
                        addMarker(driverData.l[0],driverData.l[1],driverData.id);
                    }
                  }
                 } 
                 if(append_status == 1)
                 { 
                  console.log("sdfdsf");
                  html_data = "";
                  var html_datas = get_html_data(text,driverData);
                  $(".driver-side-menu").prepend(html_datas);
                 }
                }
                
              } else {
                console.log("No data available");
              }
            });
            dbRef.child("drivers").on("child_added", (childSnapshot) => {
              if (shouldProcessChildAdded)
              {
              const driverId = childSnapshot.key;
              const driverData = childSnapshot.val(); 
                 if (driverId.startsWith("driver_")) { 
                  
                 var data_val = $("li.nav-item.actv").attr("data-val"); 
                 if (!data_array.includes(driverData.id)) { 
                  var append_status = 0;  
                 }
                 else{
                  if(data_val == "all")
                  { 
                   var append_status = 0;  
                    
                     if (!driver_ids[data_val].includes(driverData.id)) {
                      append_status = 1;
                      driver_ids[data_val].push(driverData.id);
                      var text = "Online"; 
                     } 
                  }
                  if(data_val == "online")
                  { 
                   var append_status = 0;
                   if(driverData.is_active == 1 && driverData.is_available == true)
                   {
                     var text = "Online";  
                     if (!driver_ids[data_val].includes(driverData.id)) {
                      append_status = 1;
                      driver_ids[data_val].push(driverData.id);
                    
                     }
                   }
                   else{ 
                     console.log(driver_ids[data_val].length);
                      $("#"+driverData.id).remove(); 
                      const index = driver_ids[data_val].indexOf(driverData.id); 
                       if (index !== -1) {
                         driver_ids[data_val].splice(index, 1);
                       } 
                   }
                 }
                 }  
                
                 if(append_status == 1)
                 { 
                  console.log("driver_ids[data_val].length");
                  html_data = "";
                  var html_datas = get_html_data(text,driverData);
                  $(".driver-side-menu").prepend(html_datas);
                 }
                } 
                } 
              }, (error) => {
              console.error("Error listening for new drivers:", error);
              }); 
            
            // $(document).on("mouseleave",".driver-side-menu",function(event){
             
            //     var latitude,longitude; 
            //     var data_val = $("li.nav-item.actv").attr("data-val");    
            //     if(markerarray[data_val] !== undefined)
            //     {
            //       fetchDataFromFirebase(data_val,$("li.nav-item.actv")); 
            //     }
                
            //     // map.setZoom(5); 
            // })
            $(document).on("click", ".all-tabss", function(event) { 
                removeMarkers();
                var lat = parseFloat($(this).attr("data-lat"));
                var lng = parseFloat($(this).attr("data-lng"));
                var id = parseFloat($(this).attr("id"));  
                setTimeout(function() {
                  addMarker(lat,lng,id); 
                }, 100); 
                var zoomLevel = 12; // Adjust as needed 
                var animationDuration = 1000; // Adjust the duration of the animation in milliseconds

                // Pan to the specified location with animation
                map.panTo({ lat: lat, lng: lng });

                // Start the zoom animation
                var startZoom = map.getZoom();
                var zoomDifference = zoomLevel - startZoom;
                var increment = zoomDifference > 0 ? 1 : -1;
                var stepDuration = animationDuration / Math.abs(zoomDifference);
                
                function zoomStep() {
                    if ((increment > 0 && map.getZoom() < zoomLevel) || (increment < 0 && map.getZoom() > zoomLevel)) {
                        map.setZoom(map.getZoom() + increment);
                        setTimeout(zoomStep, stepDuration);
                    }
                } 
                zoomStep();
        }); 


}); 

function toggleActiveTab(tabId) {
  // Remove "active" class from all tabs
  var tabs = document.querySelectorAll('.nav-link');
  tabs.forEach(function(tab) {
      tab.classList.remove('active');
  });

  // Add "active" class to the clicked tab
  var clickedTab = document.getElementById(tabId);
  clickedTab.querySelector('.nav-link').classList.add('active');

  // Call the fetchDataFromFirebase function with the respective parameter
  var tabValue = clickedTab.getAttribute('data-val');
  // fetchDataFromFirebase(tabValue, clickedTab);
}