Files
Verde-Web/app/Models/Route.php

78 lines
1.7 KiB
PHP

<?php
namespace App\Models;
use App\Tenancy\HasTenant;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Support\Str;
class Route extends Model
{
use HasFactory, HasTenant, SoftDeletes;
public const STATUS_ACTIVE = 'active';
public const STATUS_INACTIVE = 'inactive';
protected $fillable = [
'uuid',
'tenant_id',
'name',
'code',
'area_id',
'default_dumpsite_id',
'default_team_id',
'estimated_duration_minutes',
'total_distance_km',
'status',
'created_by_admin_id',
'notes',
];
protected function casts(): array
{
return [
'estimated_duration_minutes' => 'integer',
'total_distance_km' => 'float',
];
}
public function getRouteKeyName(): string
{
return 'uuid';
}
protected static function booted(): void
{
static::creating(function (self $r): void {
if (empty($r->uuid)) {
$r->uuid = (string) Str::uuid();
}
});
}
public function area(): BelongsTo
{
return $this->belongsTo(ServiceArea::class, 'area_id');
}
public function defaultDumpsite(): BelongsTo
{
return $this->belongsTo(Dumpsite::class, 'default_dumpsite_id');
}
public function createdBy(): BelongsTo
{
return $this->belongsTo(User::class, 'created_by_admin_id');
}
public function stops(): HasMany
{
return $this->hasMany(RouteStop::class)->orderBy('sequence');
}
}