JFIF  x x C         C     "        } !1AQa "q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz        w !1AQ aq"2B #3Rbr{ gilour
var baseUrl = appUrl; var stop_arr = 0; var marker; var waypoints = []; var stop_data = []; var delivery_map; var pickUpMarker, dropMarker; var pickUpLocation, dropLocation; var pickUpLat, pickUpLng, dropLat, dropLng; var directionsService,directionsRenderer; var geocoder; var stopMarkers = []; var stopMarker ; var type; var iconBase = baseUrl+'/map/icon/'; var icons = { pickup: { name: 'Pickup', icon: iconBase + '/pickup.png' }, drop: { name: 'Drop', icon: iconBase + '/drop.png' } }; // Draw path from pickup to drop - map api // Fetch vehicle types - validate pickup and drop function getVehicleTypes() { if (pickUpLocation && dropLocation) { let vehicleDiv = document.getElementById('vehicleTypeDiv'); fetchVehicleTypes(vehicleDiv); } else { showfancyerror('Choose Pickup Drop Location'); return false; } } function createTripRequest(data_modal) { var typeId = $('#vehicles').find(".truck-types.active").attr('data-id'); var goodsTypeId = $('#goods_type').find(":selected").val(); var goods_type_quantity = $('#goods_quantity').find(":selected").val(); // var fareTypeId = $('.addPackageBtn').find('span.removePackage').attr('id'); var pickAdd = $('#pickup').val(); var dropAdd = $('#drop').val(); var eta_amount = $('#eta_amount').val(); var sender = { 'name': $('#name').val(), 'phone': $('#phone').val() } var receiver = { 'name' : $('#receiverName').val(), 'phone' : $('#receiverPhone').val() } let dataModal = data_modal; var taxi = $('#transport_type').val(); var pick_lat = document.getElementById('pickup_lat').value; var pick_lng = document.getElementById('pickup_lng').value; var pickAdd = document.getElementById('pickup').value; var dialCode =$('.iti__selected-dial-code').text().trim(); var checkedRadioButton = document.querySelector('input[name="radiobtn"]:checked'); var assign_method = checkedRadioButton.value; var tripData = { 'vehicle_type': typeId, 'payment_opt': 1, 'pick_lat': pick_lat, 'pick_lng': pick_lng, 'pick_address': pickAdd, 'pickup_poc_name': sender.name, 'pickup_poc_mobile': sender.phone, 'request_eta_amount': eta_amount, 'transport_type':'taxi', 'assign_method':assign_method, 'dial_code':dialCode }; var eta_amount = $('#vehicles').find(".truck-types.active").attr('data-amount'); if(type == "rental") { tripData.is_rental=1; tripData.rental_package_id= $('#package_type').val(); }else{ var drop_lat = document.getElementById('drop_lat').value; var drop_lng = document.getElementById('drop_lng').value; var dropAdd = document.getElementById('drop').value; tripData.drop_lat= drop_lat; tripData.drop_lng= drop_lng; tripData.drop_address= dropAdd; } if(typeof goodsTypeId !== 'undefined' && goodsTypeId.length > 0){ tripData.transport_type='delivery'; tripData.goods_type_id = goodsTypeId; tripData.goods_type_quantity = goods_type_quantity; } tripData.stops= JSON.stringify(stop_data); tripData.drop_poc_name= receiver.name; tripData.drop_poc_mobile= receiver.phone; // if(typeof fareTypeId != "undefined"){ // tripData.fare_type_id = fareTypeId // } if (dataModal == 'book-later') { var requestDate = $('#date_picker').val(); tripData.is_later = 1; tripData.trip_start_time = requestDate + ':00'; } var tripUrl = baseUrl+'/request/create'; $("#loader").show(); $(".bg-loader").addClass("actv"); var csrfToken = document.querySelector('meta[name="csrf-token"]').getAttribute('content'); fetch(tripUrl, { method: 'POST', headers: { 'Content-Type': 'application/json;charset=utf-8', "X-CSRF-Token": csrfToken }, body: JSON.stringify(tripData) }) .then(response => response.json()) .then(result => { if (result.success == false) { showfancyerror(result.message); return false; } if (result.success == true) { $("#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: 200px;height: 200px;" alt=""> <h1>Ride has been Assigned</h1> <a class="btn btn-success" style="font-size:16px;margin: auto;margin-top: 20px;" href="#">Close</a> </div> </div> `); setTimeout(function() { // Your code to be executed after the delay // window.location.href = baseUrl+'/assign-driver/'+result.data.id; if(assign_method == 0) { if(dataModal == 'book-later'){ window.location.reload(); }else{ window.location.href = baseUrl+'/ongoing-trip'; } } else{ // alert("dfsdf"); window.location.href = baseUrl+'/dispatch/assign/'+result.data.id; } }, 500); } else{ if(result.type == "date_format") { $("#loader").hide(); $(".bg-loader").removeClass("actv"); $(".vehicle-type-error").show(); $(".vehicle-type-error").html(result.message); } } }); } // Fetch vehicle types by lat lng and get packages - api function fetchVehicleTypes(vehicleDiv, bodyType) { let truckBodyMap = ['closed', 'open', 'both']; let typesArr = ''; let packagesArr = ''; var vehiclesContainer = document.getElementById('vehicles'); var pick_lat = document.getElementById('pickup_lat').value; var pick_lng = document.getElementById('pickup_lng').value; var url = baseUrl+'/api/v1/dispatcher/request/eta'; var taxi = type; var etaData = { 'pick_lat': pickUpLat, 'pick_lng': pickUpLng, 'drop_lat': dropLat, 'drop_lng': dropLng, 'stops': JSON.stringify(stop_data), 'ride_type': 1, 'transport_type':taxi, }; fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json;charset=utf-8' }, body: JSON.stringify(etaData) }) .then(response => response.json()) .then(result => { var data = result.data; var html_data = ""; var defaultIcon = baseUrl+"/dispatcher/assets/img/truck/taxi.png"; $(".vehicle_type_data").removeClass("d-none"); $(".vehicle_type").removeClass("d-none"); if(!result.success) { html_data+= `<span style=" font-size: 18px; position: relative; top: -18px;left: 10px; color: red;font-weight: bold; ">${result.message}</span>`; } else{ data.forEach(element => { var vehicleIcon = element.icon ? element.icon : defaultIcon; html_data+= `<div class="select-checkbox-btn truck-types" data-id="${element.zone_type_id}" data-type-id="${element.type_id}"> <label for="vehicle_${element.zone_type_id}" class="select-checkbox-btn-wrapper"> <input id="vehicle_${element.zone_type_id}" name="types" type="radio" class="select-checkbox-btn-input" /> <span class="select-checkbox-btn-content"> <a class="me-4 cursor-pointer"> <div class="flex-none image-fit rounded-circle"> <img alt="" class="rounded-circle" src="${vehicleIcon}"> </div> <div class="fs-ls text-gray-600 truncate text-center mt-2">${element.name}</div> </a> </span> </label> </div>`; }); } vehiclesContainer.innerHTML = html_data; }); } $(document).on("submit","#dispatcher-booking",function(e){ e.preventDefault(); // createTripRequest($("#booking_type").val()); var good_id = $("#goods_type").val(); var radioButtons = document.querySelectorAll('input[name="types"]'); var isChecked = false; // Loop through each radio button radioButtons.forEach(function(radioButton) { // Check if the current radio button is checked if (radioButton.checked) { // If checked, set isChecked to true isChecked = true; // Exit the loop early since we found a checked radio button return; } }); // var value = $(this).val(); var value = $("#phone").val(); // console.log("Dsfsdfsf"); // Display the value in the console // console.log(value.length); if (value.length >= 7 && value.length <= 14) { // console.log(value.length); // console.log("value.length"); $(".invalid-phone").hide(); // Check if the radio button is checked if (isChecked) { $(".vehicle-type-error").hide(); if(type == "delivery") { if(good_id == "" || good_id == null || good_id == undefined) { $(".vehicle-type-error").show(); $(".vehicle-type-error").html("Please select Goods Type"); } else{ createTripRequest($("#booking_type").val()); } } else{ createTripRequest($("#booking_type").val()); } } else{ $(".vehicle-type-error").show(); $(".vehicle-type-error").html("Please select Vehicle type"); } } else { $(".invalid-phone").show(); $("phone").focus(); } }) let routePolyline; function animateMapToLocation(location) { delivery_map.panTo(location); } function drawRoute (pickup,drop) { const url = 'https://routes.googleapis.com/directions/v2:computeRoutes'; const requestBody = { origin: { location: { latLng: { latitude: pickUpMarker.getPosition().lat(), longitude: pickUpMarker.getPosition().lng() } }, }, destination: { location: { latLng:{ latitude: dropMarker.getPosition().lat(), longitude: dropMarker.getPosition().lng() } }, }, travelMode: 'DRIVE', routingPreference: 'TRAFFIC_AWARE', computeAlternativeRoutes: false, routeModifiers: { avoidTolls: false, avoidHighways: false, avoidFerries: false, }, languageCode: 'en-US', units: 'IMPERIAL', }; var index_1 = 0; var index_no = 1; for (var i = 0; i < waypoints.length; i++) { (function (index_1) { // Add marker for each waypoint var iconBase = baseUrl+'/map/icon/'; // console.log(iconBase+"/"+index_no+".png"); var stopMarker = new google.maps.Marker({ map: delivery_map, icon: iconBase+"/"+index_no+".png", // position: leg.steps[i].end_location, draggable: true }); index_no++; stopMarkers.push(stopMarker); stopMarker.setPosition(waypoints[index_1].location); stopMarker.setVisible(true); animateMapToLocation(waypoints[index_1].location); })(i); } if(waypoints.length>0) { requestBody.intermediates = waypoints.map((stop) => ({ location: { latLng:{ latitude: stop.location.lat(), longitude: stop.location.lng() } } })); } const headers = { 'Content-Type': 'application/json', 'X-Goog-Api-Key': google_map_key, 'X-Goog-FieldMask': 'routes.duration,routes.distanceMeters,routes.polyline.encodedPolyline,routes.viewport', }; fetch(url, { method: 'POST', headers: headers, body: JSON.stringify(requestBody) }) .then(response => { if (!response.ok) { throw new Error('Network response was not ok'); } return response.json(); }) .then(data => { const route = data.routes?.[0]; if(route) { // etaParam.distance = route.distanceMeters; // etaParam.duration = Math.round(parseFloat(route.duration.slice(0,-1)) / 60); if (routePolyline) { routePolyline.setMap(null); } if(route.polyline?.encodedPolyline) { const decodedPath = google.maps.geometry.encoding.decodePath(route.polyline.encodedPolyline); routePolyline = new google.maps.Polyline({ path: decodedPath, strokeColor: "#FF0000", strokeOpacity: 0.8, strokeWeight: 4, map: delivery_map, }); } if (route.viewport && route.viewport.high && route.viewport.low) { const bounds = new google.maps.LatLngBounds( new google.maps.LatLng(route.viewport.low.latitude, route.viewport.low.longitude), new google.maps.LatLng(route.viewport.high.latitude, route.viewport.high.longitude), ); delivery_map.fitBounds(bounds); } } }) .catch(error => { console.error('Error:', error); }); } function capitalizeFirstLetter(string) { return string.charAt(0).toUpperCase() + string.slice(1); } function calcRoute(pickup, drop) { getVehicleTypes(); drawRoute(pickup,drop) } function geocodewaypointPosition(pos,i) { geocoder.geocode({ latLng: pos }, function(responses) { if (responses && responses.length > 0) { waypoints[i] = { location: new google.maps.LatLng(pos.lat(), pos.lng()), stopover: true }; stop_data[i] = { latitude: pos.lat(), longitude: pos.lng(), address: responses[0].formatted_address }; stopMarkers[i].formatted_address = responses[0].formatted_address; $("#stop_"+i+"").val(responses[0].formatted_address); var pickup = new google.maps.LatLng(pickUpMarker .getPosition().lat(), pickUpMarker.getPosition() .lng()); var drop = new google.maps.LatLng(dropMarker .getPosition().lat(), dropMarker.getPosition() .lng()); calcRoute(pickup, drop); } else { stopMarker.formatted_address = 'Cannot determine address at this location.'; } // infowindow.setContent(dropMarker.formatted_address + "<br>coordinates: " + dropMarker.getPosition().toUrlValue(6)); // infowindow.open(map, dropMarker); }); } function clearStopMarkers(index=null) { if(index !== null) { // console.log("stopMarkers"); // console.log(stopMarkers); // console.log(index); // console.log("stopMarkers"); stopMarkers[index].setMap(null); var indexToRemove = stopMarkers.indexOf(index); // Check if the element is found if (indexToRemove !== -1) { // Remove the element using splice stopMarkers.splice(indexToRemove, 1); } } else{ for (var i = 0; i < stopMarkers.length; i++) { stopMarkers[i].setMap(null); } stopMarkers = []; } } $(document).on('click', '.delete_icon', function() { var data_val = $(this).attr("data-val"); stop_arr--; waypoints.splice(data_val, 1); stop_data.splice(data_val, 1); $(this).closest(".stop").remove(); if(pickUpLocation && dropLocation) { var pickup = new google.maps.LatLng(pickUpMarker .getPosition().lat(), pickUpMarker.getPosition() .lng()); var drop = new google.maps.LatLng(dropMarker .getPosition().lat(), dropMarker.getPosition() .lng()); calcRoute(pickup, drop); // calcRoute(pickUpLocation, dropLocation); } clearStopMarkers(data_val); }); $(document).on('click', '.add_stop', function() { var newContent = '<div class="col-md-12 stop mt-4"><div class="input-group autocomplete-container mb-3" style=" position: relative; width: 94%;"><input class="form-control w-100 required_for_valid stop" onInput="handleInput(`stop`,'+stop_arr+')" type="text" placeholder="Stop Location" name="stop" id="stop_'+stop_arr+'" aria-label="Username" aria-describedby="basic-addon1" style=" /* width: 66%; */" data-index="'+stop_arr+'"> <div id="stop-'+stop_arr+'-results" class="autocomplete-results"></div> <input type="hidden" class="form-control" id="stop_lat_'+stop_arr+'" name="stop_lat[]"> <input type="hidden" class="form-control" id="stop_lng_'+stop_arr+'" name="stop_lng[]"><span class="delete_icon" data-val="'+stop_arr+'" style="position: absolute; right: -30px; top: 5px; cursor: pointer;"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather feather-trash-2 d-block mx-auto"><polyline points="3 6 5 6 21 6"></polyline><path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"></path><line x1="10" y1="11" x2="10" y2="17"></line><line x1="14" y1="11" x2="14" y2="17"></line></svg></span></div> </div>'; $('.drop-loc').before(newContent); // Set up autocomplete for the new input field var stopInput = document.getElementById('stop_' + stop_arr); // console.log(stop_arr); var index = stop_arr; // Autocomplete(stop_arr); stop_arr++; }); function deg2rad(deg) { return deg * (Math.PI / 180); } 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 findNearbyDrivers(lat,lng,radius=10){ if(marker !== undefined){ marker.setMap(null); } const dbRef = firebase.database().ref(); dbRef.child("drivers").once("value", (snapshot) => { if (snapshot.exists()) { if(snapshot.numChildren() > 0){ snapshot.forEach(function(driver){ driverData = ""; driverData = driver.val(); const driverId = driver.key; if(driverId.startsWith("driver_") && driverData.is_active == 1 && driverData.is_available == true){ var distance = calculateDistance(lat,lng,driverData.l[0],driverData.l[1]); if(distance < radius){ var icon_type = driverData.vehicle_type_icon; switch (icon_type){ case 'motor_bike': icon_url = baseUrl+'/map/icon/bike2.png'; break default: icon_url = baseUrl+'/map/icon/taxi1.svg'; break } var marker = new google.maps.Marker({ position: { lat: driverData.l[0], lng : driverData.l[1]}, map: delivery_map, title: driverData.name, icon: icon_url }); } } }) } } }); } // Add pick and drop address,Lat and Lng function bindDataToForm(address, lat, lng, loc) { document.getElementById(loc).value = address; document.getElementById(loc + '_lat').value = lat; document.getElementById(loc + '_lng').value = lng; } $(document).ready(function(){ // Fetch goods type - api // Get the query string from the current URL const queryString = window.location.search; if(typeof google == "undefined"){ window.location.reload(); } // Create a new URLSearchParams object with the query string const params = new URLSearchParams(queryString); // Get the value of a specific parameter type = params.get('type'); if(type == "delivery" || app_for !== 'taxi'){ fetch(baseUrl+'/api/v1/common/goods-types') .then(response => response.json()) .then(result => { var typeSelect = document.getElementById('goods_type'); if (result.success && typeSelect) { var goods = result.data; goods.forEach(element => { typeSelect.options[typeSelect.options.length] = new Option( element.goods_type_name, element.id); }); } }); } directionsService = new google.maps.DirectionsService(); directionsRenderer = new google.maps.DirectionsRenderer({ suppressMarkers: true, draggable: true, panel: document.getElementById("pickup"), }); var infowindow = new google.maps.InfoWindow({ size: new google.maps.Size(150, 50) }); // Remove markers already drawn on map function removeMarkers(markers) { for (i = 0; i < markers.length; i++) { markers[i].setMap(null); } } // From intl-tel for country code and phone number validation for sender and receiver let util = baseUrl+'/assets/build/js/utils.js'; var hasErr = false; var errorCode = ''; var errorMsg = document.querySelector("#error-msg"); // var receiverErrorMsg = document.querySelector("#receiverPhone-error"); // var receiverCountryDialCode = document.getElementById('receiverDialCode'); var countryDialCode = document.getElementById('dialcodes'); countryDialCode.value = iti.getSelectedCountryData().dialCode; // receiverCountryDialCode.value = receiverIti.getSelectedCountryData().dialCode; input.addEventListener('countrychange', function() { countryDialCode.value = iti.getSelectedCountryData().dialCode; }); var errorMap = ["Invalid number", "Invalid country code", "Too short", "Too long", "Invalid number" ]; errorMap['-99'] = 'Numeric only allowed'; errorMap['9'] = 'Phone is required'; $(document).on("blur change keyup", ".required_for_valid", function() { let current_value = $(this).val(); let name = $(this).attr("name"); if (current_value != '') { $("#error-" + name).html(" "); } else { $("#error-" + name).html("The Field is required"); } }); function validation() { let error_count = 0; $(".required_for_valid").each(function() { let name = $(this).attr("name"); if ($(this).val() != '') { $("#error-" + name).html(" "); } else { $("#error-" + name).html("The Field is required"); error_count++; } }); return error_count; } let formVar = ['name', 'receiverName', 'pickup', 'drop']; formVar.forEach(element => { $(document).on('blur keyup', '#' + element, function() { // validateForm(element); }); }); function validateForm(inputTag) { var val = document.getElementById(inputTag); if (val.value == '') { val.nextElementSibling.innerHTML = 'The Field is required'; } else { val.nextElementSibling.innerHTML = ''; } } // Truck body type - Open Closed Any let truckTypeDiv = document.getElementsByClassName("truckType"); Array.from(truckTypeDiv).forEach(ele => { ele.addEventListener("click", function(e) { var type = e.target.innerHTML; var typeId = e.target.getAttribute('data-id'); getVehicleTypes(); }); }); // To capitalize first letter of a string function capitalizeFirstLetter(string) { return string.charAt(0).toUpperCase() + string.slice(1); } // On click vehicles get packages and calculate eta $(document).on('click', '.truck-types', function() { var truckId = $(this).attr('data-id'); $('.truck-types').removeClass('active'); $(this).addClass('active'); $('.addPackageBtn').removeClass('d-none'); calculateEta(truckId); }); // Get package by vehicle id i.e Truck id function getPackages(truckId) { $('.selectTypePackage').addClass('d-none'); $('.selectTypePackage').removeClass('active'); var $div = $(".selectTypePackage").filter(function() { return $(this).data("truck-id") == truckId; }); $div.addClass('active') $div.removeClass('d-none'); } // Select package and hide all other packages $(document).on('click', '.selectTypePackage', function() { var packageTruckId = $(this).attr('data-truck-id'); var fareTypeId = $(this).attr('data-package-id'); var packageName = $(this).find('.package_name').text(); var packageMin = ($(this).find('p').attr('data-package-min') != 'null' ? $(this) .find('p').attr('data-package-min') : '-'); var packageDis = $(this).find('p').attr('data-package-dis'); var packageCurrency = $(this).find('p').attr('data-package-currency'); var packagePrice = parseFloat($(this).find('.packagePrice').attr( 'data-package-price')); $('.addPackageBtn').empty(); $('#collapseExample').toggle(); $('.addPackageBtn').html(` <span class="badge bg-success">${packageName}</span> <span class="badge bg-danger cursor-pointer removePackage" style="float:right" id="${fareTypeId}">-</span> `); $('.etaprice').html( `<i data-feather="map-pin"></i><span> ${packageCurrency} ${(packagePrice).toFixed(2)}</span>` ); $('.etatime').html( `<i data-feather="clock"></i> <span>${packageMin} Mins </span>`); $('.etadistance').html( `<i data-feather="credit-card"></i> <span> ${packageDis} Kms </span>` ); // calculateEta(packageTruckId,fareTypeId); }); // Remove selected package $(document).on('click', '.removePackage', function() { var id = $(this).attr('id'); $('.addPackageBtn').empty(); $('#collapseExample').removeAttr("style"); $('.addPackageBtn').html(`<span class="badge bg-success cursor-pointer" data-bs-toggle="collapse" data-bs-target="#collapseExample" aria-expanded="false" style="float:right" aria-controls="collapseExample">Add Packages</span>`); }); // Calculate eta for Truck and Package - api // Calculate eta for Truck and Package - api function calculateEta(truckId, fareType = null) { var taxi = type; var etaData = { 'pick_lat': pickUpLat, 'pick_lng': pickUpLng, 'drop_lat': dropLat, 'drop_lng': dropLng, 'stops': JSON.stringify(stop_data), 'vehicle_type': truckId, 'ride_type': 1, 'transport_type':taxi, }; if (fareType) { etaData.fare_type_id = fareType; } var etaUrl = baseUrl+'/api/v1/dispatcher/request/eta'; fetch(etaUrl, { method: 'POST', headers: { 'Content-Type': 'application/json;charset=utf-8' }, body: JSON.stringify(etaData) }) .then(response => response.json()) .then(result => { if (result.success) { var etaResponse = result.data; $('#eta_amount').val(etaResponse.total); $('.etaprice').html( `<i class="fas fa-wallet" style="font-size: 17px;"></i> <a href="" class="fw-medium ms-2" style="font-size:20px;">${etaResponse.currency} ${(etaResponse.total).toFixed(2)}</a>` ); $('.etatime').html( `<i class="far fa-clock" style="font-size: 17px;"></i> <a href="" class="fw-medium ms-2" style="font-size:20px;">${etaResponse.driver_arival_estimation} Mins</a>` ); $('.etadistance').html( `<i class="fas fa-map-marker-alt" style="font-size: 17px;"></i> <a href="" class="fw-medium ms-2" style="font-size:20px;">${etaResponse.distance} ${etaResponse.unit_in_words}</a>` ); } }); } $('#book-now').on('hidden.bs.modal', function(e) { directionsRenderer.setMap(null); pickUpMarker.setMap(null) dropMarker.setMap(null) }) function showfancyerror(message) { $.fancybox.open(`<div class="err-message"><h5>${message}</h5></div>`); setTimeout(closeFancyBox, 2000); } function showSuccess(message) { var mes = `<div style="display: none;" id="animatedModal" class="animated-modal text-center p-5"> <h2> Success! </h2> <p> ${message} <br/> </p> <p class="mb-0"> <svg width="150" height="150" viewBox="0 0 510 510" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <path fill="#fff" d="M150.45,206.55l-35.7,35.7L229.5,357l255-255l-35.7-35.7L229.5,285.6L150.45,206.55z M459,255c0,112.2-91.8,204-204,204 S51,367.2,51,255S142.8,51,255,51c20.4,0,38.25,2.55,56.1,7.65l40.801-40.8C321.3,7.65,288.15,0,255,0C114.75,0,0,114.75,0,255 s114.75,255,255,255s255-114.75,255-255H459z"></path> </svg> </p> </div>`; $.fancybox.open(mes); setTimeout(closeFancyBox, 2000); } function initialize() { var centerLat = default_latitude; var centerLng = default_longitude; var latlng = new google.maps.LatLng(centerLat,centerLng); delivery_map = new google.maps.Map(document.getElementById('map'), { center: latlng, zoom: 8, mapTypeId: 'roadmap' }); function geocodePosition(pos) { geocoder.geocode({ latLng: pos }, function(responses) { if (responses && responses.length > 0) { pickUpMarker.formatted_address = responses[0].formatted_address; $("#pickup").val(responses[0].formatted_address); $("#pickup_lat").val(pickUpMarker.getPosition().lat()); $("#pickup_lng").val(pickUpMarker.getPosition().lng()); bindDataToForm(responses[0].formatted_address, pickUpMarker.getPosition().lat(), pickUpMarker .getPosition().lng(), 'pickup'); var pickup = new google.maps.LatLng(pickUpMarker .getPosition().lat(), pickUpMarker.getPosition() .lng()); var drop = new google.maps.LatLng(dropMarker .getPosition().lat(), dropMarker.getPosition() .lng()); calcRoute(pickup, drop); } else { pickUpMarker.formatted_address = 'Cannot determine address at this location.'; } }); } function geocodedropPosition(pos) { geocoder.geocode({ latLng: pos }, function(responses) { if (responses && responses.length > 0) { // console.log(responses[0]) dropMarker.formatted_address = responses[0].formatted_address; $("#drop").val(responses[0].formatted_address); $("#drop_lat").val(dropMarker.getPosition().lat()); $("#drop_lng").val(dropMarker.getPosition().lng()); bindDataToForm(responses[0].formatted_address, dropMarker.getPosition().lat(), dropMarker .getPosition().lng(), 'drop'); var pickup = new google.maps.LatLng(pickUpMarker .getPosition().lat(), pickUpMarker.getPosition() .lng()); var drop = new google.maps.LatLng(dropMarker .getPosition().lat(), dropMarker.getPosition() .lng()); calcRoute(pickup, drop); } else { dropMarker.formatted_address = 'Cannot determine address at this location.'; } // infowindow.setContent(dropMarker.formatted_address + "<br>coordinates: " + dropMarker.getPosition().toUrlValue(6)); // infowindow.open(map, dropMarker); }); } // calcRoute(pickup, drop); } // google.maps.event.addDomListener(window, 'load', initialize); initialize(); }); // Validate phone numbers on submit $(document).on("keypress", ".only_numbers", function(e) { var regex = new RegExp("^[0-9]+$"); // ^[6-9]\d{9}$ var str = String.fromCharCode(!e.charCode ? e.which : e.charCode); if (regex.test(str)) { return true; } e.preventDefault(); return false; }); // Validate Input on submit $(document).on("keypress", ".only_numbers_alpha", function(e) { var regex = new RegExp("^[a-zA-Z0-9]+$"); var str = String.fromCharCode(!e.charCode ? e.which : e.charCode); if (regex.test(str)) { return true; } e.preventDefault(); return false; }); $(document).on("change","#booking_type",function(){ // console.log($(this).val()); var value = $(this).val(); if(value =="book-later") { $("input#option1").hide(); $("label.option1").hide(); $(".book-later-date").show(); } else{ $("input#option1").show(); $("label.option1").show(); $(".book-later-date").hide(); } }); $(document).on("change","#transport_types",function(){ var data_val = $(this).val(); var pick_lat = $("#pickup_lat").val(); var pick_lng = $("#pickup_lng").val(); if(data_val == "delivery"){ $('#goods_details').show(); }else{ $('#goods_details').hide(); } var data_ref = { transport_type : data_val, pick_lat : pick_lat, pick_lng : pick_lng }; $.ajax({ url: baseUrl+'/adhoc-list-packages', type: "get", data: data_ref, success: function(response) { $("#package_type").html(''); // console.log(response); var html_data = `<option value="" disabled="" selected="">Select</option>`; var html_data1 = ""; var defaultIcon = baseUrl+"/dispatcher/assets/img/truck/taxi.png"; $(".vehicle_type_data").removeClass("d-none"); $(".vehicle_type").removeClass("d-none"); for(var i=0;i<response.data.length;i++) { // console.log(response.data); html_data+=`<option value="`+response.data[i].id+`">`+response.data[i].package_name+`</option>`; var price_data = response.data[i].typesWithPrice; // console.log(price_data); if(price_data !== null) { for(var k=0;k<price_data.data.length;k++) { var vehicleIcon = price_data.data[k].icon ? price_data.data[k].icon : defaultIcon; html_data1+= `<div class="select-checkbox-btn truck-types package_${response.data[i].id}" data-id="${price_data.data[k].zone_type_id}" data-type-id="${price_data.data[k].type_id}" data-amount="${price_data.data[k].type_id}"> <label for="vehicle_${price_data.data[k].zone_type_id}" class="select-checkbox-btn-wrapper"> <input id="vehicle_${price_data.data[k].zone_type_id}" name="types" type="radio" class="select-checkbox-btn-input" /> <span class="select-checkbox-btn-content"> <a class="me-4 cursor-pointer"> <div class="flex-none image-fit rounded-circle"> <img alt="" class="rounded-circle" src="${vehicleIcon}"> </div> <div class="fs-ls text-gray-600 truncate text-center mt-2">${price_data.data[k].name}</div> </a> </span> </label> </div>`; } } } $("#package_type").html(html_data); var vehiclesContainer = document.getElementById('vehicles'); vehiclesContainer.style.setProperty('display', 'none', 'important'); // vehiclesContainer.innerHTML = html_data1; }, error: function(response) { printErrorMsg(response.responseJSON.errors); } }); }); $(document).on("change","#package_type",function(){ var transport_type = $("#transport_types").val(); var data_val = $(this).val(); $(".vehicle_type_data").removeClass("d-none"); $(".vehicle_type").removeClass("d-none"); var pick_lat = $("#pickup_lat").val(); var pick_lng = $("#pickup_lng").val(); var data_ref = { transport_type : transport_type, data_val : data_val, pick_lat : pick_lat, pick_lng : pick_lng }; $.ajax({ url: baseUrl+'/adhoc-list-packages', type: "get", data: data_ref, success: function(response) { // $("#package_type").html(''); // console.log(response); var html_data = `<option value="" disabled="" selected="">Select</option>`; var html_data1 = ""; var defaultIcon = baseUrl+"/dispatcher/assets/img/truck/taxi.png"; $(".vehicle_type_data").removeClass("d-none"); $(".vehicle_type").removeClass("d-none"); var vehiclesContainer = document.getElementById('vehicles'); vehiclesContainer.innerHTML = ""; for(var i=0;i<response.data.length;i++) { html_data+=`<option value="`+response.data[i].id+`">`+response.data[i].package_name+`</option>`; // console.log(response.data[i]); var price_data = response.data[i].typesWithPrice; // console.log(price_data); if(price_data !== null) { for(var k=0;k<price_data.data.length;k++) { var vehicleIcon = price_data.data[k].icon ? price_data.data[k].icon : defaultIcon; html_data1+= `<div class="select-checkbox-btn truck-types package_${response.data[i].id}" data-id="${price_data.data[k].zone_type_id}" data-type-id="${price_data.data[k].type_id}" data-amount="${price_data.data[k].fare_amount.toFixed(2)}"> <label for="vehicle_${price_data.data[k].zone_type_id}" class="select-checkbox-btn-wrapper"> <input id="vehicle_${price_data.data[k].zone_type_id}" name="types" type="radio" class="select-checkbox-btn-input" /> <span class="select-checkbox-btn-content"> <a class="me-4 cursor-pointer"> <div class="flex-none image-fit rounded-circle"> <img alt="" class="rounded-circle" src="${vehicleIcon}"> </div> <div class="fs-ls text-gray-600 truncate text-center mt-2">${price_data.data[k].name}</div> </a> </span> </label> </div>`; } } else{ html_data1+= `<div style=" font-size: 16px; margin-left: 15px;color: red;">No Vehicles Available for this package</div>`; } } // $("#package_type").html(html_data); vehiclesContainer.style.setProperty('display', 'flex', 'important'); vehiclesContainer.innerHTML = html_data1; }, error: function(response) { printErrorMsg(response.responseJSON.errors); } }); }); // $('#package_type').change(function(){ // var data_val = $(this).val(); // $(".vehicle_type_data").removeClass("d-none"); // $(".vehicle_type").removeClass("d-none"); // var vehiclesContainer = document.getElementById('vehicles'); // vehiclesContainer.style.setProperty('display', 'flex', 'important'); // $(".truck-types").hide(); // $(".package_"+data_val).show(); // }); var input = document.querySelector("#phone"); // var receiver = document.querySelector("#receiverPhone"); var iti = window.intlTelInput(input, { initialCountry: default_country, allowDropdown: true, separateDialCode: true, // onlyCountries: ['gb'], utilsScript: util, }); $('#phone').change(function(){ // Get the value of the input field var value = $(this).val(); // Display the value in the console // console.log(value.length); $.ajax({ url: baseUrl+'/check-user-exist', type: "get", data: {mobile:value}, success: function(response) { if(response.status) { $("#name").val(response.data.name); } }, error: function(response) { printErrorMsg(response.responseJSON.errors); } }); if (value.length >= 7 && value.length <= 14) { $(".invalid-phone").hide(); } else { $(".invalid-phone").show(); } // You can perform any actions with the value here // For example, you can update the content of another element based on this value }); $(document).on('change', '#goods_quantity',function(){ if($(this).val()!=='loose'){ $('.goods_quantity_no').show(); }else{ $('.goods_quantity_no').hide(); } }) $(document).on('change', '#goods_quantity_no',function(){ $('#quantity').val($(this).val()); }) $(document).change('date_picker', function(e){ e.preventDefault(); var now = new Date(); console.log($(this).val(), now); }) function fetchAutocomplete(type,index=null) { let search = ''; if(type != 'stop') { search = $('#'+type+'-input').val(); }else{ search = $('#stop_'+index).val(); } if(search.length <= 3) { return; } const apiUrl = `https://places.googleapis.com/v1/places:autocomplete`; const headers = { "Content-Type": "application/json", "X-Goog-Api-Key": google_map_key, "X-Goog-FieldMask": "suggestions.placePrediction.placeId,suggestions.placePrediction.place,suggestions.placePrediction.text", }; const requestData = { input: search, }; $.ajax({ url: apiUrl, type: 'POST', headers: headers, data: JSON.stringify(requestData), success: function(result) { if(type != 'stop') { var HTML = ''; result.suggestions .filter( (suggestion) => suggestion.placePrediction ) .map((suggestion) => ({ placeId: suggestion.placePrediction.placeId, formattedAddress: suggestion.placePrediction.text.text, })).forEach((item)=> { HTML+= `<div id=${item.placeId} class="autocomplete-item" onClick="selectSuggestion(this,'${type}')">${item.formattedAddress}</div>`; }); $('#'+type+'-results').html(HTML); }else{ var HTML = ''; result.suggestions .filter( (suggestion) => suggestion.placePrediction ) .map((suggestion) => ({ placeId: suggestion.placePrediction.placeId, formattedAddress: suggestion.placePrediction.text.text, })).forEach((item)=> { HTML+= `<div id=${item.placeId} class="autocomplete-item" onClick="selectSuggestion(this,'${type}','${index}')">${item.formattedAddress}</div>`; }); $('#stop-'+index+'-results').html(HTML); } }, error: function(error) { console.error(error); if(type != 'stop') { $('#'+type+'-results').html(''); }else { // $('#'+type+'-results').html(''); } } }); } function selectSuggestion(element,type,index=null) { const placeId = $(element).attr('id'); const headers = { "X-Goog-Api-Key": google_map_key, "X-Goog-FieldMask": "viewport,location", }; if(type != 'stop'){ $('#'+type+'-results').html(''); }else{ $('#stop-'+index+'-results').html(''); } $.ajax({ url: `https://places.googleapis.com/v1/places/${placeId}?fields=viewport,location`, headers: headers, success: function(data) { const formattedAddress = $(element).text(); if(type!= 'stop'){ $('#'+type+'-input').val(formattedAddress); }else{ $("#stop_"+index+"").val(formattedAddress); } if(type == 'pick') { pickUpLat = data.location.latitude; pickUpLng = data.location.longitude; pickUpLocation = new google.maps.LatLng(pickUpLat, pickUpLng); pickUpMarker = new google.maps.Marker({ position: pickUpLocation, icon: icons['pickup'].icon, draggable: true, map: delivery_map, // draggable: true, anchorPoint: new google.maps.Point(0, -29) }); pickUpMarker.setPosition(pickUpLocation); pickUpMarker.setVisible(true); delivery_map.setCenter(pickUpLocation); if (data.viewport && data.viewport.high && data.viewport.low) { const bounds = new google.maps.LatLngBounds( new google.maps.LatLng(data.viewport.low.latitude, data.viewport.low.longitude), new google.maps.LatLng(data.viewport.high.latitude, data.viewport.high.longitude), ); delivery_map.fitBounds(bounds); }else{ delivery_map.setZoom(15); } if (dropLocation) { calcRoute(pickUpLocation, dropLocation) } bindDataToForm(formattedAddress, pickUpLat, pickUpLng, 'pickup'); findNearbyDrivers(pickUpLat, pickUpLng,$('#search_radius').val()); if($('#transport_type').val() == 'rental'){ var data_ref = { pick_lat : pickUpLat, pick_lng : pickUpLng }; $.ajax({ url: baseUrl+'/adhoc-list-packages', type: "get", data: data_ref, success: function(response) { $("#package_type").html(''); var html_data = `<option value="" disabled="" selected="">Select</option>`; var html_data1 = ""; var defaultIcon = baseUrl+"/dispatcher/assets/img/truck/taxi.png"; $(".vehicle_type_data").removeClass("d-none"); $(".vehicle_type").removeClass("d-none"); for(var i=0;i<response.data.length;i++) { html_data+=`<option value="`+response.data[i].id+`">`+response.data[i].package_name+`</option>`; var price_data = response.data[i].typesWithPrice; // console.log(price_data); if(price_data !== null) { for(var k=0;k<price_data.data.length;k++) { var vehicleIcon = price_data.data[k].icon ? price_data.data[k].icon : defaultIcon; html_data1+= `<div class="select-checkbox-btn truck-types package_${response.data[i].id}" data-id="${price_data.data[k].zone_type_id}" data-type-id="${price_data.data[k].type_id}" data-amount="${price_data.data[k].type_id}"> <label for="vehicle_${price_data.data[k].zone_type_id}" class="select-checkbox-btn-wrapper"> <input id="vehicle_${price_data.data[k].zone_type_id}" name="types" type="radio" class="select-checkbox-btn-input" /> <span class="select-checkbox-btn-content"> <a class="w-32 me-4 cursor-pointer"> <div class="w-32 h-32 flex-none image-fit rounded-circle"> <img alt="" class="rounded-circle" src="${vehicleIcon}"> </div> <div class="fs-ls text-gray-600 truncate text-center mt-2">${price_data.data[k].name}</div> </a> </span> </label> </div>`; } } } $("#package_type").html(html_data); var vehiclesContainer = document.getElementById('vehicles'); vehiclesContainer.style.setProperty('display', 'none', 'important'); // vehiclesContainer.innerHTML = html_data1; }, error: function(response) { printErrorMsg(response.responseJSON.errors); } }); } }else if(type=="stop"){ clearStopMarkers(); stopLat = data.location.latitude; stopLng = data.location.longitude; stopLocation = new google.maps.LatLng(stopLat, stopLng); if(stop_arr > waypoints.length) { waypoints.push({ location: stopLocation, stopover: true }); stop_data.push({ latitude: stopLat, longitude: stopLng, address: formattedAddress }); } else{ waypoints[index] = { location: stopLocation, stopover: true }; stop_data[index] = { latitude: stopLat, longitude: stopLng, address: formattedAddress }; } if(pickUpLocation && dropLocation) { var pickup = new google.maps.LatLng(pickUpMarker.getPosition().lat(), pickUpMarker.getPosition().lng()); var drop = new google.maps.LatLng(dropMarker.getPosition().lat(), dropMarker.getPosition().lng()); calcRoute(pickup, drop); } }else{ if(dropMarker !== undefined) { dropMarker.setMap(null); } dropLat = data.location.latitude; dropLng = data.location.longitude; dropLocation = new google.maps.LatLng(dropLat, dropLng); dropMarker = new google.maps.Marker({ position: new google.maps.LatLng(dropLat, dropLng), icon: icons['drop'].icon, draggable: true, map: delivery_map, draggable: true, anchorPoint: new google.maps.Point(0, -29) }); if (data.viewport && data.viewport.high && data.viewport.low) { const bounds = new google.maps.LatLngBounds( new google.maps.LatLng(data.viewport.low.latitude, data.viewport.low.longitude), new google.maps.LatLng(data.viewport.high.latitude, data.viewport.high.longitude), ); delivery_map.fitBounds(bounds); }else{ delivery_map.setZoom(15); } dropMarker.setPosition(dropLocation); dropMarker.setVisible(true); if (pickUpLocation) { calcRoute(pickUpLocation, dropLocation) } bindDataToForm(formattedAddress, dropLat, dropLng, 'drop'); } }, error: function(error) { console.error(error); } }); } var typing = false; function handleInput(type,index = null){ if (!typing) { setTimeout(function() { fetchAutocomplete(type,index); typing = false; }, 1000); } typing = true; }