Commit 9b029154 by Tobin

dc

parent 96c7a6da
......@@ -139,8 +139,8 @@ class Driver extends CI_Controller {
$err = 1;
$errMsg = 'Provide a valid Active Location';
} else {
$_POST['active_loc_lat'] = $acLatLng['lat'];
$_POST['active_loc_lng'] = $acLatLng['lng'];
$_POST['lat_driver'] = $acLatLng['lat'];
$_POST['lng_driver'] = $acLatLng['lng'];
}
}
......@@ -318,8 +318,8 @@ class Driver extends CI_Controller {
$err = 1;
$errMsg = 'Provide a valid Active Location';
} else {
$_POST['active_loc_lat'] = $acLatLng['lat'];
$_POST['active_loc_lng'] = $acLatLng['lng'];
$_POST['lat_driver'] = $acLatLng['lat'];
$_POST['lng_driver'] = $acLatLng['lng'];
}
if($err == 1){
......@@ -360,9 +360,5 @@ class Driver extends CI_Controller {
}
echo json_encode($return_arr);exit;
}
}
?>
\ No newline at end of file
......@@ -915,8 +915,7 @@ class Ride extends CI_Controller {
if(empty($ride_data) || (isset($ride_data->is_scheduled) && $ride_data->is_scheduled != '0'))
return $status;
$appointment_time = $ride_data->appointment_time;
$aTime = $ride_data->appointment_time;
if(!isset($ride_data->drop_lat) || empty($ride_data->drop_lat) ||
!isset($ride_data->drop_lng) || empty($ride_data->drop_lng) ||
!isset($ride_data->pickup_lat) || empty($ride_data->pickup_lat) ||
......@@ -926,8 +925,7 @@ class Ride extends CI_Controller {
$locData = array('dlat'=>$ride_data->drop_lat,'dlng'=>$ride_data->drop_lng,
'plat'=>$ride_data->pickup_lat,'plng'=>$ride_data->pickup_lng);
$status = $this->Ride_model->autoAssignDriver
($ride_id,$appointment_time,$locData,$drivers,$no_driver);
$status = $this->Ride_model->autoAssignDriver($ride_id,$aTime,$locData,$drivers,$no_driver);
} else {
$status = $this->Ride_model->changeSchuduleStatus($ride_id,$is_scheduled);
}
......@@ -996,7 +994,8 @@ class Ride extends CI_Controller {
$headerArr =array("TD.medical_no"=>"Medicaid_Number","TD.patient_name"=>"Members_First_Name",
"TD.appointment_time"=>"Appointment_Date","TD.appointment_time."=>"Appointment_Time",
"TD.trip_cost"=>"Trip_Cost","TD.pickup_location"=>"Pickup_Address",
"TD.drop_location"=>"Delivery_Address");
"TD.drop_location"=>"Delivery_Address","TD.is_scheduled"=>"Is_Scheduled",
"TD.trip_status"=>"Trip_Status");
$respData = array();
$where_data = array();
......@@ -1010,11 +1009,19 @@ class Ride extends CI_Controller {
if(!empty($value['search'])) {
$where = array();
foreach($headerArr as $key => $c) {
if($c == 'Medicaid_Number' || $c == 'Members_First_Name' ||
$c == 'Pickup_Address' || $c == 'Delivery_Address'){
$where_data[] = $key." LIKE '%".$value['search']."%' ";
}
if(strtolower($value['search']) == 'ss0'){
$where_data[] = "TD.is_scheduled='0' AND TD.trip_status='S1'";
} else if(strtolower($value['search']) == 'ss1'){
$where_data[] = "TD.is_scheduled='1'";
} else if(strtolower($value['search']) == 'err'){
$where_data[] = "TD.trip_status!='S1'";
} else {
foreach($headerArr as $key => $c) {
if($c == 'Medicaid_Number' || $c == 'Members_First_Name' ||
$c == 'Pickup_Address' || $c == 'Delivery_Address' || $c == 'Trip_Status'){
$where_data[] = $key." LIKE '%".$value['search']."%' ";
}
}
}
$value['where'] = implode(" OR ", $where_data);
}
......@@ -1056,9 +1063,17 @@ class Ride extends CI_Controller {
$json_ride = array_merge(array_flip($headerArr),$json_ride);
foreach($json_ride AS $key => $data){
if(!in_array($key,$headerArr)){
continue;
continue;
}
$data = ($key=='Appointment_Time' && $ride->is_scheduled==3)?'--':$data;
if($key=='Is_Scheduled'){
if($json_ride['Trip_Status'] == 'S1'){
$data = ($ride->is_scheduled == '1')?'SS1':'SS0';
} else {
$data = 'ERR';
}
$data = '<span id="scheduleStatus_'.$ride->transport_id.'">'.$data.'</span>';
}
array_push($rowArr, $data);
}
array_push($rowArr, (!empty($ride->broker_name))?$ride->broker_name:'Phone Booking');
......@@ -1069,4 +1084,4 @@ class Ride extends CI_Controller {
echo json_encode($resp);
}
}
?>
\ No newline at end of file
?>
......@@ -134,6 +134,42 @@ function getLatLngFromLocation($location = ''){
return $locArr;
}
function getDistance($lat1,$lng1,$lat2,$lng2) {
if(empty($lat1) || empty($lat2) || empty($lng1) || empty($lng2)){
return;
}
$thisObj = & get_instance();
$url = "https://maps.googleapis.com/maps/api/distancematrix/json?origins=".$lat1.",".$lng1."&destinations=".$lat2.",".$lng2."&mode=driving"."&key=".$thisObj->session->userdata['settings']['google_api_key'];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_PROXYPORT, 3128);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$response = curl_exec($ch);
curl_close($ch);
$distArr = array();
if(empty($response) || empty($response = json_decode($response, true)) ||
!isset($response['status']) || $response['status'] != 'OK' ||
!isset($response['rows']) ||
!isset($response['rows'][0]) ||
!isset($response['rows'][0]['elements']) ||
!isset($response['rows'][0]['elements'][0]) ||
$response['rows'][0]['elements'][0]['status'] != 'OK' ||
!isset($response['rows'][0]['elements'][0]['distance']) ||
!isset($response['rows'][0]['elements'][0]['duration']) ||
empty($response['rows'][0]['elements'][0]['distance']) ||
empty($response['rows'][0]['elements'][0]['duration']) ||
empty($distArr = $response['rows'][0]['elements'][0])){
return;
}
return array('distance_text'=>$distArr['distance']['text'],
'duration_text'=>$distArr['duration']['text'],
'distance_value'=>$distArr['distance']['value'],
'duration_value'=>$distArr['duration']['value']);
}
function getSettings(){
$CI = & get_instance();
$settings = $CI->db->get('setting');
......
......@@ -209,71 +209,90 @@ class Ride_model extends CI_Model {
$this->db->delete('ride_status',array('ride_id'=>$ride_id));
}
function autoAssignDriver($ride_id = '', $appointment_time = '', $locData = array(),
$drivers = array(), $no_driver = '0'){
if(empty($ride_id) || empty($appointment_time) || empty($locData) ||
function autoAssignDriver($ride_id='',$aTime='',$locData=array(),$drivers=array(),$no_driver='0'){
if(empty($ride_id) || empty($aTime) || empty($locData) ||
!isset($locData['plat']) || $locData['plat'] == '' ||
!isset($locData['plng']) || $locData['plng'] == '' ||
!isset($locData['dlat']) || $locData['dlat'] == '' ||
!isset($locData['dlng']) || $locData['dlng'] == ''){
!isset($locData['dlng']) || $locData['dlng'] == '' ||
empty($distData=getDistance($locData['plat'],$locData['plng'],$locData['dlat'],$locData['dlng']))){
return 0;
}
$appTime = date("H:i",$appointment_time);
$arrTime = date("H:i",$appointment_time - 3600);
$endDateTime = $appointment_time + 4800;
$startDateTime = $appointment_time - 3600;
if(!empty($drivers)){
$sql = "SELECT GROUP_CONCAT(TD.assigned_driver) AS assigned_drivers
FROM transport_details AS TD
INNER JOIN drivers AS DRV ON (DRV.driver_id = TD.assigned_driver)
WHERE TD.driver_assign_status='0' AND TD.assigned_driver<>'0' AND
TD.is_scheduled='1' AND TD.request_type='3' AND
TD.appointment_time>$startDateTime AND TD.appointment_time<$endDateTime AND
TD.status IN (3,4,5,8) AND TD.assigned_driver IN (".implode(",",$drivers).")";
$prvDrivers = $this->db->query($sql);
$driverCond = '';
if(!empty($prvDrivers) && $prvDrivers->num_rows() > 0 &&
!empty($prvDrivers=$prvDrivers->row_array()) && isset($prvDrivers['assigned_drivers']) &&
!empty($prvDrivers['assigned_drivers'])){
$prvDrivers = explode(',',$prvDrivers['assigned_drivers']);
$drivers = array_diff($drivers,$prvDrivers);
}
if(!empty($drivers)){
$drv_ids = implode(",",$drivers);
$sql = "SELECT DRV.driver_id,DRV.fcm_token,
3956*2*ASIN(SQRT(POWER(SIN((".$locData['plat']."-DRV.active_loc_lat)*
pi()/180/2),2)+COS(".$locData['plat']."*pi()/180)*COS(DRV.active_loc_lat*
pi()/180)*POWER(SIN((".$locData['plng']."-DRV.active_loc_lng)*
$appTime = date("H:i",$aTime);
$drv_ids = implode(",",$drivers);
$appDate = date("Y-m-d H:i",$aTime);
$addTime = strtotime('-'.round(($distData['duration_value']/60)+10).' minutes', $aTime);
$arrTime = date("Y-m-d H:i",$addTime);
$sql = "SELECT DRV.driver_id,DRV.fcm_token,
3956*2*ASIN(SQRT(POWER(SIN((".$locData['plat']."-DRV.virtual_lat)*
pi()/180/2),2)+COS(".$locData['plat']."*pi()/180)*COS(DRV.virtual_lat*
pi()/180)*POWER(SIN((".$locData['plng']."-DRV.virtual_lng)*
pi()/180/2),2))) AS distance
FROM drivers AS DRV
WHERE DRV.status = 1 AND DRV.driver_id IN ($drv_ids) AND
DRV.online_start_time<'$appTime' AND DRV.online_end_time>'$appTime' AND
DRV.expected_arrival_time<'$arrTime' AND DRV.fcm_token IS NOT NULL AND
DRV.fcm_token!=''
ORDER BY distance
LIMIT 0,1";
$driverData = $this->db->query($sql)->row_array();
if(empty($driverData)){
$sql = "SELECT GROUP_CONCAT(REQ.driver_id) AS assigned_drivers
FROM transport_details AS TD
INNER JOIN driver_request AS REQ ON (REQ.trip_id = TD.transport_id)
WHERE TD.driver_assign_status='0' AND TD.is_scheduled='1' AND
TD.appointment_time>".strtotime($arrTime)." AND TD.status IN (3) AND
TD.appointment_time<".strtotime($appDate)." AND REQ.status IN (0,1) AND
REQ.driver_id IN (".implode(",",$drivers).")";
$prvDrivers = $this->db->query($sql);
$driverCond = '';
if(!empty($prvDrivers) && $prvDrivers->num_rows() > 0 &&
!empty($prvDrivers=$prvDrivers->row_array()) && isset($prvDrivers['assigned_drivers']) &&
!empty($prvDrivers['assigned_drivers'])){
$prvDrivers = explode(',',$prvDrivers['assigned_drivers']);
$drivers = array_diff($drivers,$prvDrivers);
}
$sql = "SELECT DRV.driver_id,DRV.fcm_token,
3956*2*ASIN(SQRT(POWER(SIN((".$locData['plat']."-DRV.lat_driver)*
pi()/180/2),2)+COS(".$locData['plat']."*pi()/180)*COS(DRV.lat_driver*
pi()/180)*POWER(SIN((".$locData['plng']."-DRV.lng_driver)*
pi()/180/2),2))) AS distance
FROM drivers AS DRV
WHERE DRV.status = 1 AND DRV.driver_id IN ($drv_ids) AND
DRV.online_start_time<'$arrTime' AND DRV.online_end_time>'$appTime' AND
DRV.fcm_token IS NOT NULL AND DRV.fcm_token != ''
DRV.online_start_time<'$appTime' AND DRV.online_end_time>'$appTime' AND
DRV.fcm_token IS NOT NULL AND DRV.fcm_token!='' AND
(DRV.virtual_lat IS NULL OR DRV.virtual_lat='0' OR DRV.virtual_lat='' OR
DRV.virtual_lng IS NULL AND DRV.virtual_lng='0' AND DRV.virtual_lng='')
ORDER BY distance
LIMIT 0,1";
$driverData = $this->db->query($sql);
if(!empty($driverData) && $driverData->num_rows() > 0 &&
!empty($nearByDriver = $driverData->row_array())){
$driver_id = $nearByDriver['driver_id'];
$status = $this->db->update('transport_details',
array('driver_assign_status'=>'0','is_scheduled'=>'1','status'=>'3'),
array('transport_id'=>$ride_id));
$this->db->insert('driver_request',
array('trip_id'=>$ride_id,'driver_id'=>$driver_id,
'request_time'=>date('Y-m-d H:i:s'),'status'=>'0'));
$fcm_data = array('title'=>'Scheduled Ride','message'=>'Schedule Ride Request',
'request_id'=>$ride_id);
push_sent_cancel(1,$nearByDriver['fcm_token'],$fcm_data);
return $status;
}
}
$driverData = $this->db->query($sql)->row_array();
}
if(!empty($driverData) && !empty($driver_id = $driverData['driver_id'])){
$status = $this->db->update('transport_details',
array('driver_assign_status'=>0,'is_scheduled'=>'1','status'=>'3'),
array('transport_id'=>$ride_id));
$this->db->insert('driver_request',
array('trip_id'=>$ride_id,'driver_id'=>$driver_id,
'request_time'=>date('Y-m-d H:i:s'),'status'=>'0'));
$this->db->update('drivers',array('virtual_lat'=>$locData['dlat'],
'virtual_lng'=>$locData['dlng'],
'expected_arrival_time'=>$appDate),
array('driver_id'=>$driver_id));
$fcmData = array('title'=>'Scheduled Ride','request_id'=>$ride_id,
'message'=>'Schedule Ride Request');
push_sent_cancel(1,$driverData['fcm_token'],$fcmData);
return $status;
}
}
if($no_driver == '1'){
......@@ -291,7 +310,6 @@ class Ride_model extends CI_Model {
array('transport_id'=>$ride_id));
return $status;
}
}
$status = $this->db->update('transport_details',
array('driver_assign_status'=>'1','status'=>'3','is_scheduled'=>'1'),
......
......@@ -348,7 +348,7 @@ class Webservices_driver_model extends CI_Model {
$rs = $query->row();
if (!empty($request["latitude"] && $request['longitude'])) {
if (!empty($request["latitude"]) && !empty($request['longitude'])) {
$data = array('lat_driver' => $request['latitude'], 'lng_driver' => $request['longitude']);
......
......@@ -38,26 +38,30 @@
<thead>
<tr>
<th class="hidden">ID</th>
<th width="150px;">Driver Name</th>
<th width="100px;">Driver Name</th>
<th width="150px;">Email ID</th>
<th width="150px;">Phone</th>
<th width="150px;">Company</th>
<th width="50px;">Status</th>
<th width="500px;">Action</th>
<th width="100px;">Phone</th>
<th width="100px;">Company</th>
<th width="100px;">Status</th>
<th width="300px;">Action</th>
</tr>
</thead>
<tbody>
<?php
if(!empty($drivers_data)){
foreach($drivers_data as $driver) {
?>
foreach($drivers_data as $driver) { ?>
<tr>
<th class="hidden"><?= $driver->driver_id ?></th>
<td class="center"><?= $driver->first_name.' '.$driver->last_name ?></th>
<td class="center"><?= $driver->email_id ?></th>
<td class="center"><?= $driver->phone ?></th>
<td class="center"><?= $driver->company_name ?></th>
<td class="center"><?= ($driver->status == '1')?'Active':'Inactive'?></td>
<td class="center">
<?php if($driver->status == '1'){
echo 'Active ';
if (empty($driver->fcm_token)) echo '(Mobile Login Required)';
} else echo 'Inactive';
?></td>
<td class="center">
<a class="btn btn-sm btn-primary" id="viewDriver" driver_id="<?= encode_param($driver->driver_id) ?>">
<i class="fa fa-fw fa-edit"></i>View
......@@ -77,14 +81,14 @@
</a>
<?php } else { ?>
<a class="btn btn-sm btn-success" href="<?= base_url("Driver/changeStatus/".encode_param($driver->driver_id))."/1" ?>">
<i class="fa fa-cog"></i> Activate
<i class="fa fa-cog"></i> Active
</a>
<?php } ?>
</td>
</tr>
<?php
if(!empty($driver->active_loc_lat) && !empty($driver->active_loc_lng))
$drvLatLng = $driver->active_loc_lat.','.$driver->active_loc_lng;
if(!empty($driver->lat_driver) && !empty($driver->lng_driver))
$drvLatLng = $driver->lat_driver.','.$driver->lng_driver;
$mapLocData[]=array('DisplayText'=>$driver->first_name.' '.$driver->last_name,
'MarkerId'=>base_url('assets/images/mapCarIconPref.png'),
......
<?php
$headerArr = array("Medicaid_Number","Members_First_Name","Appointment_Date","Appointment_Time","Trip_Cost","Pickup_Address","Delivery_Address");
$headerArr = array("Medical_Number","Members_First_Name","Appointment_Date","Appointment_Time","Trip_Cost","Pickup_Address","Delivery_Address","Scheduled","Trip_Status");
?>
<div class="content-wrapper" >
<section class="content-header">
......
......@@ -346,8 +346,10 @@ function markAsScheduled(transport_id,is_scheduled,thisObj){
jQuery.each(resp['succArr'], function(index,value) {
if(ride_ids != undefined && ride_ids != 'undefined' && ride_ids != null && ride_ids != 'null' && ride_ids != ''){
if(is_scheduled == '1'){
jQuery('[id="scheduleStatus_'+value+'"]').html('SS1');
if(ride_ids.includes(value)){ ride_ids.splice(ride_ids.indexOf(value),1); }
} else {
jQuery('[id="scheduleStatus_'+value+'"]').html('SS0');
if(!ride_ids.includes(value)){ ride_ids.push(value); }
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment