Files
usher-manage-stack/app/Models/IssueTimeLog.php
2025-11-20 23:21:05 +08:00

60 lines
1.3 KiB
PHP

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class IssueTimeLog extends Model
{
use HasFactory;
protected $fillable = [
'issue_id',
'user_id',
'hours',
'description',
'logged_at',
];
protected $casts = [
'hours' => 'decimal:2',
'logged_at' => 'datetime',
];
public function issue(): BelongsTo
{
return $this->belongsTo(Issue::class);
}
public function user(): BelongsTo
{
return $this->belongsTo(User::class);
}
protected static function boot()
{
parent::boot();
// Update issue actual_hours when time log is created, updated, or deleted
static::created(function ($timeLog) {
$timeLog->updateIssueActualHours();
});
static::updated(function ($timeLog) {
$timeLog->updateIssueActualHours();
});
static::deleted(function ($timeLog) {
$timeLog->updateIssueActualHours();
});
}
protected function updateIssueActualHours(): void
{
$totalHours = $this->issue->timeLogs()->sum('hours');
$this->issue->update(['actual_hours' => $totalHours]);
}
}