File: //var/www/html/punjabcabs/Original_Backup/app/Http/Controllers/MainController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use DB;
use Log;
use Setting;
use Session;
use Auth;
use Exception;
use Notification;
use Carbon\Carbon;
use App\Helpers\Helper;
use Mail;
use App\User;
use App\Dispatcher;
use App\Provider;
use App\UserRequests;
use App\RequestFilter;
use App\ProviderService;
use App\ServiceType;
use App\Http\Controllers\SendPushNotification;
use App\Http\Controllers\ProviderResources\TripController;
class MainController extends Controller
{
/**
* Contact Email.
*
* @return \Illuminate\Http\Response
*/
public function contactprocess(Request $request)
{
try{
$user = $request->all();
// send welcome email here
if(Setting::get('mail_enable', 0) == 1) {
Mail::send('emails.contact', ['user' => $user], function ($message) use ($user){
$message->to(config('app.email'), config('app.name'))->subject(config('app.name').' - Contact Form Inquiry');
});
}
return back()->with('flash_success','Your message sent. Thanks for contacting.');
}
catch (Exception $e) {
return back()->with('flash_error', 'Sorry, something went wrong. try again later.');
}
}
public function changelang(Request $request)
{
$this->validate($request, [
'language' => 'in:en,fr,de,es',
]);
$language = $request->language;
Session::put('language',$language);
app()->setLocale($language);
return back();
}
/**
* Dispatcher Panel.
*
* @param \App\Provider $provider
* @return \Illuminate\Http\Response
*/
public function index()
{
if(Auth::guard('admin')->user()){
$services = ServiceType::get();
return view('admin.main.index',compact('services'));
}elseif(Auth::guard('dispatcher')->user()){
$services = ServiceType::get();
return view('dispatcher.main.index',compact('services'));
}
}
/**
* Dispatcher Panel.
*
* @param \App\Provider $provider
* @return \Illuminate\Http\Response
*/
public function schedule()
{
if(Auth::guard('admin')->user()){
$services = ServiceType::get();
return view('admin.main.schedule',compact('services'));
}elseif(Auth::guard('dispatcher')->user()){
$services = ServiceType::get();
return view('dispatcher.main.schedule',compact('services'));
}
}
public function listall(Request $request)
{
$tripstatus = $request->tripstatus;
$servicetype = $request->servicetype;
$booking_by = $request->booking_by;
$fromdate = Carbon::today();
$todate = Carbon::now();
if($request->fromdate !=''){
$fromdate = Helper::date_formatter($request->fromdate);
}
if($request->todate !=''){
$todate = Helper::date_formatter($request->todate);
}
$trips = UserRequests::with('user', 'provider', 'service_type', 'payment')
->where('status', 'LIKE', '%'.$tripstatus.'%')
->where('service_type_id', 'LIKE', '%'.$servicetype.'%')
->where('booking_by', 'LIKE', '%'.$booking_by.'%')
->where('created_at', '>=', $fromdate)
->where('created_at', '<', $todate)
->orderBy('assigned_at','desc')->get();
/*dd($trips);*/
$currency =setting::get('currency');
$diskm =setting::get('distance_unit');
if(Auth::guard('admin')->user()){
return view('admin.main.show', compact('trips', 'currency', 'diskm'));
}elseif(Auth::guard('dispatcher')->user()){
return view('dispatcher.main.show', compact('trips', 'currency', 'diskm'));
}
}
public function showdetail(Request $request)
{
if($request->has('id')){
$id = $request->id;
$request = UserRequests::with('user','provider', 'service_type','payment')->findOrFail($id);
return $request;
}
}
public function editdetail($request_id)
{
$request = UserRequests::with('user','provider', 'service_type','payment')->findOrFail($request_id);
$services = ServiceType::get();
if(Auth::guard('admin')->user()){
return view('admin.main.modal.edit', compact('request', 'services'));
}elseif(Auth::guard('dispatcher')->user()){
return view('dispatcher.main.modal.edit', compact('request', 'services'));
}
}
public function storedetail(Request $request, $id)
{
$this->validate($request, [
's_address' => 'required|max:255',
'd_address' => 'required|max:255',
'service_type_id' => 'required',
]);
try {
$trip = UserRequests::findOrFail($id);
$status = $request->status;
if($status !='SEARCHING' && $status !='SCHEDULED' && $status !='CANCELLED'){
if($request->has('s_longitude')) {
$details = "https://maps.googleapis.com/maps/api/directions/json?origin=".$request->s_latitude.",".$request->s_longitude."&destination=".$request->d_latitude.",".$request->d_longitude."&mode=driving&key=".env('GOOGLE_MAP_KEY');
$json = curl($details);
$details = json_decode($json, TRUE);
$route_key = $details['routes'][0]['overview_polyline']['points'];
$meter = $details['routes'][0]['legs'][0]['distance']['value'];
$unit =Setting::get('distance_unit');
if($unit =='km'){
$kilometer = $meter/1000;
}else{
$base = $meter/1000;
$kilometer = $base * 0.62137119;
}
$trip->distance = $kilometer;
$trip->s_latitude = $request->s_latitude;
$trip->s_longitude = $request->s_longitude;
$trip->d_latitude = $request->d_latitude;
$trip->d_longitude = $request->d_longitude;
$trip->route_key = $route_key;
$trip->s_address = $request->s_address;
$trip->d_address = $request->d_address;
$trip->save();
return back()->with('flash_success', 'Updated details');
}
}
if($request->has('s_longitude')) {
$details = "https://maps.googleapis.com/maps/api/directions/json?origin=".$request->s_latitude.",".$request->s_longitude."&destination=".$request->d_latitude.",".$request->d_longitude."&mode=driving&key=".env('GOOGLE_MAP_KEY');
$json = curl($details);
$details = json_decode($json, TRUE);
$route_key = $details['routes'][0]['overview_polyline']['points'];
$meter = $details['routes'][0]['legs'][0]['distance']['value'];
$unit =Setting::get('distance_unit');
if($unit =='km'){
$kilometer = $meter/1000;
}else{
$base = $meter/1000;
$kilometer = $base * 0.62137119;
}
$trip->distance = $kilometer;
$trip->s_latitude = $request->s_latitude;
$trip->s_longitude = $request->s_longitude;
$trip->d_latitude = $request->d_latitude;
$trip->d_longitude = $request->d_longitude;
$trip->route_key = $route_key;
}
$trip->s_address = $request->s_address;
$trip->d_address = $request->d_address;
$trip->service_type_id = $request->service_type_id;
$trip->provider_id = 0;
$trip->current_provider_id = 0;
$trip->cancelled_by ="NONE";
$trip->cancel_reason ="";
$trip->booking_by ="DISPATCHER";
$checkstatus ='';
$trip->assigned_at = Carbon::now();
if($request->has('schedule_at')) {
$trip->schedule_at = Carbon::parse($request->schedule_at);
$trip->status ="SCHEDULED";
$trip->push = 'AUTO';
}else{
$trip->schedule_at = Null;
$trip->status ="SEARCHING";
$trip->push = Null;
$checkstatus = "SEARCHING";
}
$trip->user_rated =0;
$trip->provider_rated =0;
$trip->save();
if($request->provider_auto_assign == 'on' && $trip->status =='SEARCHING'){
$ActiveProviders = ProviderService::where('service_type_id', $request->service_type_id)
->where('status', 'active')->get()
->pluck('provider_id');
$distance = Setting::get('provider_search_radius', '10');
$latitude = $trip->s_latitude;
$longitude = $trip->s_longitude;
$Providers = Provider::whereIn('id', $ActiveProviders)
->where('status', 'approved')
->selectRaw("* , (1.609344 * 3956 * acos( cos( radians('$latitude') ) * cos( radians(latitude) ) * cos( radians(longitude) - radians('$longitude') ) + sin( radians('$latitude') ) * sin( radians(latitude) ) ) ) AS distance")
->having('distance', '<', $distance)
->orderBy('distance')
->get();
if(count($Providers) > 0) {
$trip->current_provider_id = $Providers[0]->id;
$trip->save();
ProviderService::where('provider_id',$Providers[0]->id)->update(['status' =>'riding']);
(new SendPushNotification)->IncomingRequest($Providers[0]->id);
foreach ($Providers as $key => $Provider) {
$Filter = new RequestFilter;
// Send push notifications to the first provider
// incoming request push to provider
$Filter->request_id = $trip->id;
$Filter->provider_id = $Provider->id;
$Filter->save();
}
}else{
$trip->status = 'CANCELLED';
$trip->cancelled_by = 'NODRIVER';
$trip->save();
}
}
return back()->with('flash_success', 'Updated details');
}
catch (ModelNotFoundException $e) {
return back()->with('flash_error', 'Something Went Wrong');
}
}
public function canceldetail(Request $request, $id)
{
try {
$trip = UserRequests::findOrFail($id);
$trip->status ="CANCELLED";
$trip->cancelled_by ="DISPATCHER";
$trip->push = Null;
$trip->save();
$RequestFilter = RequestFilter::where('request_id', $id)
->delete();
return back()->with('flash_success', 'Trip Canceled Successfully');
}
catch (ModelNotFoundException $e) {
return back()->with('flash_error', 'Something Went Wrong');
}
}
public function autotrip($request_id)
{
$trip = UserRequests::findOrFail($request_id);
$trip->provider_id = 0;
$trip->current_provider_id = 0;
$trip->cancelled_by ="NONE";
$trip->cancel_reason ="";
$trip->booking_by ="DISPATCHER";
$trip->paid =0;
$trip->assigned_at = Carbon::now();
$trip->push = Null;
$trip->schedule_at = Null;
$trip->status ="SEARCHING";
$trip->save();
if($trip->status =='SEARCHING'){
$ActiveProviders = ProviderService::where('service_type_id', $trip->service_type_id)
->where('status', 'active')->get()
->pluck('provider_id');
$distance = Setting::get('provider_search_radius', '10');
$latitude = $trip->s_latitude;
$longitude = $trip->s_longitude;
$Providers = Provider::whereIn('id', $ActiveProviders)
->where('status', 'approved')
->selectRaw("* , (1.609344 * 3956 * acos( cos( radians('$latitude') ) * cos( radians(latitude) ) * cos( radians(longitude) - radians('$longitude') ) + sin( radians('$latitude') ) * sin( radians(latitude) ) ) ) AS distance")
->having('distance', '<', $distance)
->orderBy('distance')
->get();
if(count($Providers) > 0) {
$trip->current_provider_id = $Providers[0]->id;
$trip->save();
ProviderService::where('provider_id',$Providers[0]->id)->update(['status' =>'riding']);
(new SendPushNotification)->IncomingRequest($Providers[0]->id);
foreach ($Providers as $key => $Provider) {
$Filter = new RequestFilter;
// Send push notifications to the first provider
// incoming request push to provider
$Filter->request_id = $trip->id;
$Filter->provider_id = $Provider->id;
$Filter->save();
}
}else{
$trip->status = 'CANCELLED';
$trip->cancelled_by = 'NODRIVER';
$trip->save();
}
}
}
}