File: /var/www/html/dashboard.orbiwheels.com/app/Models/Transporter.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;
class Transporter extends Authenticatable
{
use HasFactory, Notifiable, SoftDeletes, HasApiTokens;
protected $fillable = [
'company_name',
'first_name',
'last_name',
'contact_person',
'email',
'phone',
'otp',
'otp_expires_at',
'password',
'status',
'mode',
'bank_details',
'address',
'transporter_type',
'image',
];
protected $hidden = [
'password',
];
const INDIVIDUAL = 1;
const TAXI_STAND = 2;
const PENDING = 0;
const APPROVED = 1;
const SUSPENDED = 2;
protected function casts(): array
{
return [
'password' => 'hashed',
'transporter_type' => 'integer',
];
}
public function documents()
{
return $this->morphMany(Document::class, 'owner');
}
public function drivers()
{
return $this->hasMany(Driver::class, 'transporter_id');
}
public function vehicles()
{
return $this->hasMany(Vehicle::class, 'transporter_id');
}
public function settings()
{
return $this->hasMany(TransporterSetting::class, 'transporter_id');
}
protected $casts = [
'ride_permissions' => 'array',
];
public function refreshVerificationStatus()
{
$this->load('documents');
$hasDocs = $this->documents()->count() > 0;
$allDocsVerified = $hasDocs && $this->documents()->where('is_verified', 0)->count() == 0;
$this->is_verified = $allDocsVerified;
$this->save();
}
public function getTransporterTypeBadgeAttribute()
{
return match ($this->transporter_type) {
1 => '<span class="badge badge-secondary">Individual</span>',
2 => '<span class="badge badge-warning">Taxi Stand</span>',
default => '<span class="badge badge-secondary">N/A</span>',
};
}
}