PM_Console/backend/app/Models/Task.php

85 خطوط
2.1 KiB
PHP

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\MorphMany;
class Task extends Model
{
protected $fillable = [
'title', 'description', 'project_id', 'assignee_id', 'reporter_id',
'priority', 'status', 'blocker_type', 'blocker_note', 'start_date', 'due_date', 'estimated_time',
'actual_time', 'tags', 'sort_order', 'created_by',
];
protected $casts = [
'tags' => 'array',
'start_date' => 'date',
'due_date' => 'date',
'estimated_time' => 'decimal:2',
'actual_time' => 'decimal:2',
];
public function scopeBlocked(Builder $query): Builder
{
return $query->where(function (Builder $blocked) {
$blocked->whereNotNull('blocker_type')
->orWhereNotNull('blocker_note');
});
}
public function getIsBlockedAttribute(): bool
{
return filled($this->blocker_type) || filled($this->blocker_note);
}
public function project(): BelongsTo
{
return $this->belongsTo(Project::class);
}
public function assignee(): BelongsTo
{
return $this->belongsTo(User::class, 'assignee_id');
}
public function reporter(): BelongsTo
{
return $this->belongsTo(User::class, 'reporter_id');
}
public function creator(): BelongsTo
{
return $this->belongsTo(User::class, 'created_by');
}
public function checklists(): HasMany
{
return $this->hasMany(Checklist::class);
}
public function subtasks(): HasMany
{
return $this->hasMany(Subtask::class);
}
public function comments(): MorphMany
{
return $this->morphMany(Comment::class, 'commentable');
}
public function files(): MorphMany
{
return $this->morphMany(File::class, 'fileable');
}
public function sprints()
{
return $this->belongsToMany(Sprint::class, 'sprint_task')->withTimestamps();
}
}