90 lines
1.8 KiB
PHP
90 lines
1.8 KiB
PHP
<?php
|
|
|
|
namespace App\Models;
|
|
|
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
|
use Illuminate\Database\Eloquent\Model;
|
|
|
|
class Tag extends Model
|
|
{
|
|
use HasFactory;
|
|
|
|
// Constantes de status
|
|
const STATUS_AVAILABLE = 'available';
|
|
const STATUS_ASSIGNED = 'assigned';
|
|
const STATUS_CANCELLED = 'cancelled';
|
|
const STATUS_LOST = 'lost';
|
|
|
|
protected $fillable = [
|
|
'folio',
|
|
'tag_number',
|
|
'vehicle_id',
|
|
'package_id',
|
|
'status',
|
|
];
|
|
|
|
public function vehicle()
|
|
{
|
|
return $this->belongsTo(Vehicle::class);
|
|
}
|
|
|
|
public function package()
|
|
{
|
|
return $this->belongsTo(Package::class);
|
|
}
|
|
|
|
public function vehicleTagLogs()
|
|
{
|
|
return $this->hasMany(VehicleTagLog::class);
|
|
}
|
|
|
|
public function scanHistories()
|
|
{
|
|
return $this->hasMany(ScanHistory::class);
|
|
}
|
|
|
|
/**
|
|
* Marcar tag como asignado a un vehículo
|
|
*/
|
|
public function markAsAssigned(int $vehicleId, string $folio): void
|
|
{
|
|
$this->update([
|
|
'vehicle_id' => $vehicleId,
|
|
'folio' => $folio,
|
|
'status' => self::STATUS_ASSIGNED,
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Verificar si el tag está disponible
|
|
*/
|
|
public function isAvailable(): bool
|
|
{
|
|
return $this->status === self::STATUS_AVAILABLE;
|
|
}
|
|
|
|
/**
|
|
* Verificar si el tag está asignado
|
|
*/
|
|
public function isAssigned(): bool
|
|
{
|
|
return $this->status === self::STATUS_ASSIGNED;
|
|
}
|
|
|
|
/**
|
|
* Verificar si el tag está cancelado
|
|
*/
|
|
public function isCancelled(): bool
|
|
{
|
|
return $this->status === self::STATUS_CANCELLED;
|
|
}
|
|
|
|
/**
|
|
* Verificar si el tag está perdido
|
|
*/
|
|
public function isLost(): bool
|
|
{
|
|
return $this->status === self::STATUS_LOST;
|
|
}
|
|
}
|