JFIF x x C C " } !1AQa "q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w !1AQ aq"2B #3Rbr{
File "assign_driver.js"
Full Path: /var/www/html/ctctaxi/public/assets/js/dashboard/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);
}