예제 #1
0
 public function alternative_walkers_xml()
 {
     $id = Request::segment(4);
     $walk = Walk::find($id);
     $schedule = Schedules::find($walk->schedule_id);
     $dog = Dog::find($walk->dog_id);
     $owner = Owner::find($dog->owner_id);
     $current_walker = Walker::find($walk->walker_id);
     $latitude = $owner->latitude;
     $longitude = $owner->longitude;
     $distance = 5;
     // Get Latitude
     $schedule_meta = ScheduleMeta::where('schedule_id', '=', $schedule->id)->orderBy('started_on', 'DESC')->get();
     $flag = 0;
     $date = "0000-00-00";
     $days = array();
     foreach ($schedule_meta as $meta) {
         if ($flag == 0) {
             $date = $meta->started_on;
             $flag++;
         }
         array_push($days, $meta->day);
     }
     $start_time = date('H:i:s', strtotime($schedule->start_time) - 60 * 60);
     $end_time = date('H:i:s', strtotime($schedule->end_time) + 60 * 60);
     $days_str = implode(',', $days);
     $settings = Settings::where('key', 'default_distance_unit')->first();
     $unit = $settings->value;
     if ($unit == 0) {
         $multiply = 1.609344;
     } elseif ($unit == 1) {
         $multiply = 1;
     }
     $query = "SELECT walker.id,walker.bio,walker.first_name,walker.last_name,walker.phone,walker.latitude,walker.longitude from walker where id NOT IN ( SELECT distinct schedules.walker_id FROM `schedule_meta` left join schedules on schedule_meta.schedule_id = schedules.id where schedules.is_confirmed\t != 0 and schedule_meta.day IN ({$days_str}) and schedule_meta.ends_on >= '{$date}' and schedule_meta.started_on <= '{$date}' and ((schedules.start_time > '{$start_time}' and schedules.start_time < '{$end_time}') OR ( schedules.end_time > '{$start_time}' and schedules.end_time < '{$end_time}' )) ) and " . "ROUND((" . $multiply . " * 3956 * acos( cos( radians('{$latitude}') ) * " . "cos( radians(latitude) ) * " . "cos( radians(longitude) - radians('{$longitude}') ) + " . "sin( radians('{$latitude}') ) * " . "sin( radians(latitude) ) ) ) ,8) <= {$distance} ";
     $walkers = DB::select(DB::raw($query));
     $response = "";
     $response .= '<markers>';
     foreach ($walkers as $walker) {
         $response .= '<marker ';
         $response .= 'name="' . $walker->first_name . " " . $walker->last_name . '" ';
         $response .= 'client_name="' . $walker->first_name . " " . $walker->last_name . '" ';
         $response .= 'contact="' . $walker->phone . '" ';
         $response .= 'amount="' . 0 . '" ';
         $response .= 'lat="' . $walker->latitude . '" ';
         $response .= 'lng="' . $walker->longitude . '" ';
         $response .= 'id="' . $walker->id . '" ';
         $response .= 'type="client" ';
         $response .= '/>';
     }
     // Add Current walker
     if ($current_walker) {
         $response .= '<marker ';
         $response .= 'name="' . $current_walker->first_name . " " . $current_walker->last_name . '" ';
         $response .= 'client_name="' . $current_walker->first_name . " " . $current_walker->last_name . '" ';
         $response .= 'contact="' . $current_walker->phone . '" ';
         $response .= 'amount="' . 0 . '" ';
         $response .= 'lat="' . $current_walker->latitude . '" ';
         $response .= 'lng="' . $current_walker->longitude . '" ';
         $response .= 'id="' . $current_walker->id . '" ';
         $response .= 'type="driver" ';
         $response .= '/>';
     }
     // Add Owner
     $response .= '<marker ';
     $response .= 'name="' . $owner->first_name . " " . $owner->last_name . '" ';
     $response .= 'client_name="' . $owner->first_name . " " . $owner->last_name . '" ';
     $response .= 'contact="' . $owner->phone . '" ';
     $response .= 'amount="' . 0 . '" ';
     $response .= 'lat="' . $owner->latitude . '" ';
     $response .= 'lng="' . $owner->longitude . '" ';
     $response .= 'id="' . $owner->id . '" ';
     $response .= 'type="client_pay_done" ';
     $response .= '/>';
     // Add Busy Walkers
     $walkers = DB::table('request')->where('walk.is_started', 1)->where('walk.is_completed', 0)->join('walker', 'walk.walker_id', '=', 'walker.id')->select('walker.id', 'walker.phone', 'walker.first_name', 'walker.last_name', 'walker.latitude', 'walker.longitude')->distinct()->get();
     foreach ($walkers as $walker) {
         $response .= '<marker ';
         $response .= 'name="' . $walker->first_name . " " . $walker->last_name . '" ';
         $response .= 'client_name="' . $walker->first_name . " " . $walker->last_name . '" ';
         $response .= 'contact="' . $walker->phone . '" ';
         $response .= 'amount="' . 0 . '" ';
         $response .= 'lat="' . $walker->latitude . '" ';
         $response .= 'lng="' . $walker->longitude . '" ';
         $response .= 'id="' . $owner->id . '" ';
         $response .= 'type="client_no_pay" ';
         $response .= '/>';
     }
     $response .= '</markers>';
     $content = View::make('walkers_xml')->with('response', $response);
     return Response::make($content, '200')->header('Content-Type', 'text/xml');
 }