HEX
Server: Apache/2.4.41 (Amazon) OpenSSL/1.0.2k-fips PHP/5.6.40
System: Linux ip-172-31-40-18 4.14.146-93.123.amzn1.x86_64 #1 SMP Tue Sep 24 00:45:23 UTC 2019 x86_64
User: apache (48)
PHP: 5.6.40
Disabled: NONE
Upload Files
File: //var/www/html/punjabcabs/app/Http/Controllers/ProviderResources/ProfileController.php
<?php

namespace App\Http\Controllers\ProviderResources;

use Illuminate\Http\Request;
use Illuminate\Database\Eloquent\ModelNotFoundException;

use App\Http\Controllers\Controller;

use Auth;
use Setting;
use Storage;
use Exception;
use Carbon\Carbon;

use App\ProviderProfile;
use App\UserRequests;
use App\ProviderService;
use App\Fleet;
use App\ProviderApplication;
class ProfileController extends Controller
{
    /**
     * Create a new user instance.
     *
     * @return void
     */

    public function __construct()
    {
        $this->middleware('provider.api', ['except' => ['show', 'store', 'available', 'location_edit', 'location_update','application_show','application_store']]);
    }

    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        try {

            Auth::user()->service = ProviderService::where('provider_id',Auth::user()->id)
                                            ->with('service_type')
                                            ->first();
            Auth::user()->fleet = Fleet::find(Auth::user()->fleet);
            Auth::user()->currency = Setting::get('currency', '$');
            Auth::user()->sos = Setting::get('sos_number', '911');

            return Auth::user();

        } catch (Exception $e) {
            return $e->getMessage();
        }
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $this->validate($request, [
                'first_name' => 'required|max:255',
                'last_name' => 'required|max:255',
                'mobile' => 'required',
                'avatar' => 'mimes:jpeg,bmp,png',
                'language' => 'max:255',
                'address' => 'max:255',
                'address_secondary' => 'max:255',
                'city' => 'max:255',
                'country' => 'max:255',
                'postal_code' => 'max:255',
            ]);

        try {

            $Provider = Auth::user();

            if($request->has('first_name')) 
                $Provider->first_name = $request->first_name;

            if($request->has('last_name')) 
                $Provider->last_name = $request->last_name;

            if ($request->has('mobile'))
                $Provider->mobile = $request->mobile;

            if ($request->hasFile('avatar')) {
                Storage::delete($Provider->avatar);
                $Provider->avatar = $request->avatar->store('provider/profile');
            }

            if($request->has('service_type')) {
                if($Provider->service) {
                    if($Provider->service->service_type_id != $request->service_type) {
                        $Provider->status = 'banned';
                    }
                    $ProviderService = ProviderService::find(Auth::user()->id);
                    $ProviderService->service_type_id = $request->service_type;
                    $ProviderService->taxi_type = 1;
                    $ProviderService->service_number = $request->service_number;
                    $ProviderService->service_model = $request->service_model;
                    $ProviderService->save();

                } else {
                    ProviderService::create([
                        'provider_id' => $Provider->id,
                        'service_type_id' => $request->service_type,
                        'taxi_type' => 1,
                        'service_number' => $request->service_number,
                        'service_model' => $request->service_model,
                    ]);
                    $Provider->status = 'banned';
                }
            }

            if($Provider->profile) {
                $Provider->profile->update([
                        'language' => $request->language ? : $Provider->profile->language,
                        'address' => $request->address ? : $Provider->profile->address,
                        'address_secondary' => $request->address_secondary ? : $Provider->profile->address_secondary,
                        'city' => $request->city ? : $Provider->profile->city,
                        'country' => $request->country ? : $Provider->profile->country,
                        'postal_code' => $request->postal_code ? : $Provider->profile->postal_code,
                    ]);
            } else {
                ProviderProfile::create([
                        'provider_id' => $Provider->id,
                        'language' => $request->language,
                        'address' => $request->address,
                        'address_secondary' => $request->address_secondary,
                        'city' => $request->city,
                        'country' => $request->country,
                        'postal_code' => $request->postal_code,
                    ]);
            }


            $Provider->save();

            return redirect(route('provider.profile.index'));
        }

        catch (ModelNotFoundException $e) {
            return response()->json(['error' => 'Provider Not Found!'], 404);
        }
    }

    /**
     * Display the specified resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function show()
    {
        return view('provider.profile.index');
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request)
    {
        $this->validate($request, [
                'first_name' => 'required|max:255',
                'last_name' => 'required|max:255',
                'mobile' => 'required',
                'avatar' => 'mimes:jpeg,bmp,png',
                'language' => 'max:255',
                'address' => 'max:255',
                'address_secondary' => 'max:255',
                'city' => 'max:255',
                'country' => 'max:255',
                'postal_code' => 'max:255',
            ]);

        try {

            $Provider = Auth::user();

            if($request->has('first_name')) 
                $Provider->first_name = $request->first_name;

            if($request->has('last_name')) 
                $Provider->last_name = $request->last_name;

            if ($request->has('mobile'))
                $Provider->mobile = $request->mobile;

            if ($request->hasFile('avatar')) {
                Storage::delete($Provider->avatar);
                $Provider->avatar = $request->avatar->store('provider/profile');
            }

            if($Provider->profile) {
                $Provider->profile->update([
                        'language' => $request->language ? : $Provider->profile->language,
                        'address' => $request->address ? : $Provider->profile->address,
                        'address_secondary' => $request->address_secondary ? : $Provider->profile->address_secondary,
                        'city' => $request->city ? : $Provider->profile->city,
                        'country' => $request->country ? : $Provider->profile->country,
                        'postal_code' => $request->postal_code ? : $Provider->profile->postal_code,
                    ]);
            } else {
                ProviderProfile::create([
                        'provider_id' => $Provider->id,
                        'language' => $request->language,
                        'address' => $request->address,
                        'address_secondary' => $request->address_secondary,
                        'city' => $request->city,
                        'country' => $request->country,
                        'postal_code' => $request->postal_code,
                    ]);
            }


            $Provider->save();

            return $Provider;
        }

        catch (ModelNotFoundException $e) {
            return response()->json(['error' => 'Provider Not Found!'], 404);
        }
    }

    /**
     * Update latitude and longitude of the user.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function location(Request $request)
    {
        $this->validate($request, [
                'latitude' => 'required|numeric',
                'longitude' => 'required|numeric',
            ]);

        if($Provider = Auth::user()){

            $Provider->latitude = $request->latitude;
            $Provider->longitude = $request->longitude;
            $Provider->save();

            return response()->json(['message' => 'Location Updated successfully!']);

        } else {
            return response()->json(['error' => 'Provider Not Found!']);
        }
    }

    /**
     * Toggle service availability of the provider.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function available(Request $request)
    {
        $this->validate($request, [
                'service_status' => 'required|in:active,offline',
            ]);

        $Provider = Auth::user();
        
        if($Provider->service) {
            $Provider->service->update(['status' => $request->service_status]);
        } else {
            return response()->json(['error' => 'You account has not been approved for driving']);
        }

        return $Provider;
    }

    /**
     * Update password of the provider.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function password(Request $request)
    {
        $this->validate($request, [
                'password' => 'required|confirmed',
                'password_old' => 'required',
            ]);

        $Provider = Auth::user();

        if(password_verify($request->password_old, $Provider->password))
        {
            $Provider->password = bcrypt($request->password);
            $Provider->save();

            return response()->json(['message' => 'Password changed successfully!']);
        } else {
            return response()->json(['error' => 'Please enter correct password'], 422);
        }
    }

    /**
     * Show providers daily target.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function target(Request $request)
    {
        try {
            Carbon::setWeekStartsAt(Carbon::SUNDAY);
            $type =$request->type;

            $Rides = UserRequests::where('provider_id', Auth::user()->id)
                    ->where('status', 'COMPLETED')
                    ->where('created_at', '>=', Carbon::today())
                    ->with('payment', 'service_type')
                    ->orderBy('id','desc')
                    ->get();

            if($type == 0){
                $Rides = UserRequests::where('provider_id', Auth::user()->id)
                    ->where('status', 'COMPLETED')
                    ->where('created_at', '>=', Carbon::today())
                    ->with('payment', 'service_type')
                    ->orderBy('id','desc')
                    ->get();
            }elseif($type == 1){
                $Rides = UserRequests::where('provider_id', Auth::user()->id)
                    ->where('status', 'COMPLETED')
                    ->whereBetween('created_at', [Carbon::now()->startOfWeek(),Carbon::now()->endOfWeek()])
                    ->with('payment', 'service_type')
                    ->orderBy('id','desc')
                    ->get();
            }elseif($type == 2){
                $Rides = UserRequests::where('provider_id', Auth::user()->id)
                    ->where('status', 'COMPLETED')
                    ->where('created_at', '>=', Carbon::now()->month)
                    ->with('payment', 'service_type')
                    ->orderBy('id','desc')
                    ->get();
            }elseif($type == 3){
                $Rides = UserRequests::where('provider_id', Auth::user()->id)
                    ->where('status', 'COMPLETED')
                    ->where('created_at', '>=', Carbon::now()->year)
                    ->with('payment', 'service_type')
                    ->orderBy('id','desc')
                    ->get();
            }elseif($type == 4){
                $Rides = UserRequests::where('provider_id', Auth::user()->id)
                    ->where('status', 'COMPLETED')
                    ->with('payment', 'service_type')
                    ->orderBy('id','desc')
                    ->get();
            }
            $total_earnings =0;
            foreach ($Rides as $key => $value) {
                    if($Rides[$key]->payment){
                        $Rides[$key]->payment->earnings = $value->payment->total - $value->payment->commision;
                        $Rides[$key]->payment->trip_amount = $value->payment->total - $value->payment->tip_amount;
                        $total_earnings+= $Rides[$key]->payment->earnings;
                    }
            }

            return response()->json([
                    'rides' => $Rides,
                    'total_earnings' =>$total_earnings,
                    'rides_count' => $Rides->count(),
                    'target' => Setting::get('daily_target','0')
                ]);

        } catch(Exception $e) {
            return $e;
        }
    }
    /**
     * Display the specified resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function application_show()
    {
        return view('provider.application.index');
    }
    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function application_store(Request $request)
    {
        $this->validate($request, [
                'name' => 'required|max:25',
                'last_name' => 'required|max:25',
                'dob' => 'required|max:25',
                'ssn' => 'required|max:25',
                'phone' => 'required|max:25',
                'driver_license' => 'required|max:50',
                'expiration_date' => 'required|max:50',
                'emergency_person' => 'required|max:50',
                'emergency_phone' => 'required|max:50',
                'crime' => 'required|max:50',
                'make' => 'required|max:50',
                'model' => 'required|max:50',
                'model_type' => 'required|max:50',
                'year' => 'required|max:50',
                'color' => 'required|max:50',
                'license_plate' => 'required|max:50',
                'shift1' => 'required|max:50',
                'shift2' => 'required|max:50',
                'shift3' => 'required|max:50',
        ]);

        try {

            $Provider = Auth::user();
            if($request->ajax()) {
                if($request->has('shift1')){
                    $shift1 = $request->shift1;
                }else{
                    $shift1 ="";
                }
                if($request->has('shift2')){
                    $shift2 = $request->shift2;
                }else{
                    $shift2 ="";
                }
                if($request->has('shift3')){
                    $shift3 = $request->shift3;
                }else{
                    $shift3 ="";
                }
            }else{
                if($request->has('shift1')){
                    $shift1 = implode(',', $request->shift1);
                }else{
                    $shift1 ="";
                }

                if($request->has('shift2')){
                    $shift2 = implode(',', $request->shift2);
                }else{
                    $shift2 ="";
                }

                if($request->has('shift3')){
                    $shift3 = implode(',', $request->shift3);
                }else{
                    $shift3 ="";
                }  
            }

            if($Provider->application) {
                $Provider->application->update([
                    'name' => $request->name ? : $Provider->application->name,
                    'last_name' => $request->last_name ? : $Provider->application->last_name,
                    'dob' => $request->dob ? : $Provider->application->dob,
                    'ssn' => $request->ssn ? : $Provider->application->ssn,
                    'phone' => $request->phone ? : $Provider->application->phone,
                    'driver_license' => $request->driver_license ? : $Provider->application->driver_license,
                    'expiration_date' => $request->expiration_date ? : $Provider->application->expiration_date,
                    'emergency_person' => $request->emergency_person ? : $Provider->application->emergency_person,
                    'emergency_phone' => $request->emergency_phone ? : $Provider->application->emergency_phone,
                    'crime' => $request->crime ? : $Provider->application->crime,
                    'crime_explain' => $request->crime_explain ? : $Provider->application->crime_explain,
                    'make' => $request->make ? : $Provider->application->make,    
                    'model' => $request->model ? : $Provider->application->model,
                    'model_type' => $request->model_type ? : $Provider->application->model_type,
                    'year' => $request->year ? : $Provider->application->year,
                    'color' => $request->color ? : $Provider->application->color,
                    'license_plate' => $request->license_plate ? : $Provider->application->license_plate,
                    'shift1' => $shift1,
                    'shift2' => $shift2,
                    'shift3' => $shift3,
                ]);
            } else {
                ProviderApplication::create([
                        'provider_id' => Auth::user()->id,
                        'name' => $request->name,
                        'last_name' => $request->last_name,
                        'dob' => $request->dob,
                        'ssn' => $request->ssn,
                        'phone' => $request->phone,
                        'driver_license' => $request->driver_license,
                        'expiration_date' => $request->expiration_date,
                        'emergency_person' => $request->emergency_person,
                        'emergency_phone' => $request->emergency_phone,
                        'crime' => $request->crime,
                        'crime_explain' => $request->crime_explain ? : '',
                        'make' => $request->make,
                        'model' => $request->model,
                        'model_type' => $request->model_type,
                        'year' => $request->year,
                        'color' => $request->color,
                        'license_plate' => $request->license_plate,
                        'shift1' => $shift1,
                        'shift2' => $shift2,
                        'shift3' => $shift3,
                    ]);
            }


            $Provider->save();

            if($request->ajax()) {
                return response()->json(['message' => trans('Application Updated Successfully')]);
            }else{
                return back()->with('flash_success', 'Application Updated Successfully');
            }
        }

        catch (ModelNotFoundException $e) {
            if($request->ajax()) {
                return response()->json(['error' => trans('api.something_went_wrong')], 500);
            }else{
                return back()->with('flash_error', 'Something went wrong while sending application. Please try again.');
            }
        }
    }
}