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/UserRequests.php
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Carbon\Carbon;
class UserRequests extends Model
{
    use SoftDeletes;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'provider_id',
        'user_id',
        'current_provider_id',
        'service_type_id',
        'status',
        'cancelled_by',
        'paid',
        'distance',
        's_latitude',
        'd_latitude',
        's_longitude',
        'd_longitude',
        'driver_message',
        'paid',
        's_address',
        'd_address',
        'assigned_at',
        'schedule_at',
        'accepted_at',
        'started_at',
        'finished_at',
        'waiting_time',
        'use_wallet',
        'user_rated',
        'provider_rated',
        'surge'
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        // 'created_at', 'updated_at'
    ];
    
    /**
     * The attributes that should be mutated to dates.
     *
     * @var array
     */
    protected $dates = [
        'created_at',
        'updated_at',
        'deleted_at',
        'assigned_at',
        'schedule_at',
        'started_at',
        'finished_at',
    ];
    
    /**
     * ServiceType Model Linked
     */
    public function service_type()
    {
        return $this->belongsTo('App\ServiceType');
    }
    
    /**
     * UserRequestPayment Model Linked
     */
    public function payment()
    {
        return $this->hasOne('App\UserRequestPayment', 'request_id');
    }

    /**
     * UserRequestRating Model Linked
     */
    public function rating()
    {
        return $this->hasOne('App\UserRequestRating', 'request_id');
    }

    /**
     * UserRequestRating Model Linked
     */
    public function filter()
    {
        return $this->hasMany('App\RequestFilter', 'request_id');
    }

    /**
     * The user who created the request.
     */
    public function user()
    {
        return $this->belongsTo('App\User');
    }

    /**
     * The provider assigned to the request.
     */
    public function provider()
    {
        return $this->belongsTo('App\Provider');
    }

    public function provider_service()
    {
        return $this->belongsTo('App\ProviderService', 'provider_id', 'provider_id');
    }

    public function scopePendingRequest($query, $user_id)
    {
        return $query->where('user_id', $user_id)
                ->whereNotIn('status' , ['CANCELLED', 'COMPLETED', 'SCHEDULED']);
    }
    public function scopePendingDriverRequest($query, $provider_id)
    {
        return $query->where('provider_id', $provider_id)
                ->whereNotIn('status' , ['CANCELLED', 'COMPLETED', 'SCHEDULED'])
                ->where('booking_by', 'STREET');
    }           
    public function scopeRequestHistory($query)
    {
        return $query->orderBy('user_requests.created_at', 'desc')
                        ->has('user')
                        ->has('payment')
                        ->has('provider');
    }

    public function scopeUserTrips($query, $user_id)
    {
        return $query->where('user_requests.user_id', '=', $user_id)
                    ->whereNotIn('user_requests.status', ['SCHEDULED'])
                    ->whereBetween('user_requests.created_at', [Carbon::now()->startOfWeek(),Carbon::now()->endOfWeek()])
                    ->orderBy('user_requests.created_at','desc')
                    ->select('user_requests.*')
                    ->with('payment','service_type');
    }

    public function scopeDashboardUserTrips($query, $user_id)
    {
        return $query->where('user_requests.user_id', '=', $user_id)
                    ->whereIn('user_requests.status', ['CANCELLED', 'COMPLETED'])
                    ->orderBy('user_requests.created_at','desc')
                    ->select('user_requests.*')
                    ->has('payment')
                    ->has('service_type')
                    ->has('provider');
    }

    public function scopeUserUpcomingTrips($query, $user_id)
    {
        return $query->where('user_requests.user_id', '=', $user_id)
                    ->where('user_requests.status', '=', 'SCHEDULED')
                    ->whereBetween('user_requests.created_at', [Carbon::now()->startOfWeek(),Carbon::now()->endOfWeek()])
                    ->orderBy('user_requests.created_at','desc')
                    ->select('user_requests.*')
                    ->with('service_type','provider');
    }

    public function scopeDashboardUserUpcomingTrips($query, $user_id)
    {
        return $query->where('user_requests.user_id', '=', $user_id)
                    ->where('user_requests.status', '=', 'SCHEDULED')
                    ->orderBy('user_requests.created_at','desc')
                    ->select('user_requests.*')
                    ->with('service_type','provider');
    }

    public function scopeProviderUpcomingRequest($query, $user_id)
    {
        return $query->where('user_requests.provider_id', '=', $user_id)
                    ->where('user_requests.status', '=', 'SCHEDULED')
                    ->select('user_requests.*')
                    ->with('service_type','user','provider');
    }

    public function scopeUserTripDetails($query, $user_id, $request_id)
    {
        return $query->where('user_requests.user_id', '=', $user_id)
                    ->where('user_requests.id', '=', $request_id)
                    ->select('user_requests.*')
                    ->with('payment','service_type','user','provider','rating');
    }

    public function scopeUserUpcomingTripDetails($query, $user_id, $request_id)
    {
        return $query->where('user_requests.user_id', '=', $user_id)
                    ->where('user_requests.id', '=', $request_id)
                    ->where('user_requests.status', '=', 'SCHEDULED')
                    ->select('user_requests.*')
                    ->with('service_type','user','provider');
    }

    public function scopeUserRequestStatusCheck($query, $user_id, $check_status)
    {
        return $query->where('user_requests.user_id', $user_id)
                    ->where('user_requests.user_rated',0)
                    ->whereNotIn('user_requests.status', $check_status)
                    ->select('user_requests.*')
                    ->with('user','provider','service_type','provider_service','rating','payment');
    }

    public function scopeUserRequestAssignProvider($query, $user_id, $check_status)
    {
        return $query->where('user_requests.user_id', $user_id)
                    ->where('user_requests.user_rated',0)
                    ->where('user_requests.provider_id',0)
                    ->whereIn('user_requests.status', $check_status)
                    ->select('user_requests.*')
                    ->with('filter');
    }
}