'date',
'approved_at' => 'datetime',
];
public function user()
{
return $this->belongsTo(User::class);
}
public function scopeForBusiness($query, $business_id)
{
return $query->where('business_id', $business_id);
}
public function scopeActive($query)
{
return $query->where('task_status', 0);
}
public function scopeAssignable($query)
{
return $query->where(function ($q) {
$q->where('task_source', self::SOURCE_SYSTEM)
->orWhere('approval_status', self::APPROVAL_APPROVED);
});
}
public function scopeSystemTasks($query)
{
return $query->where('task_source', self::SOURCE_SYSTEM);
}
public function scopeUserSubmitted($query)
{
return $query->where('task_source', self::SOURCE_USER);
}
public function scopePendingApproval($query)
{
return $query->userSubmitted()->where('approval_status', self::APPROVAL_PENDING);
}
public function creator()
{
return $this->belongsTo(User::class, 'created_by');
}
public function approver()
{
return $this->belongsTo(User::class, 'approved_by');
}
public function timeLines()
{
return $this->hasMany(MtUserTimeLine::class, 'user_task_id');
}
public function dailyReports()
{
return $this->hasMany(MtDailyReport::class, 'mt_user_task_id');
}
public function ppProject()
{
return $this->belongsTo(\Modules\ProfessionalProject\Entities\PpProject::class, 'project_id');
}
public function isSystemTask(): bool
{
return $this->task_source === self::SOURCE_SYSTEM;
}
public function isUserSubmitted(): bool
{
return $this->task_source === self::SOURCE_USER;
}
public function isPendingApproval(): bool
{
return $this->isUserSubmitted() && $this->approval_status === self::APPROVAL_PENDING;
}
public function isAssignable(): bool
{
return $this->isSystemTask() || $this->approval_status === self::APPROVAL_APPROVED;
}
public static function statusLabels(): array
{
return [
0 => __('managementtools::lang.task_status_active'),
1 => __('managementtools::lang.task_status_completed'),
2 => __('managementtools::lang.task_status_cancelled'),
];
}
public static function sourceLabels(): array
{
return [
self::SOURCE_SYSTEM => __('managementtools::lang.task_source_system'),
self::SOURCE_USER => __('managementtools::lang.task_source_user'),
];
}
public static function approvalLabels(): array
{
return [
self::APPROVAL_PENDING => __('managementtools::lang.approval_pending'),
self::APPROVAL_APPROVED => __('managementtools::lang.approval_approved'),
self::APPROVAL_REJECTED => __('managementtools::lang.approval_rejected'),
];
}
public function statusLabel(): string
{
return self::statusLabels()[$this->task_status] ?? '—';
}
public function sourceLabel(): string
{
return self::sourceLabels()[$this->task_source] ?? '—';
}
public function approvalLabel(): ?string
{
if ($this->isSystemTask()) {
return null;
}
return self::approvalLabels()[$this->approval_status] ?? '—';
}
public function sourceBadgeHtml(): string
{
if ($this->isSystemTask()) {
return ''.e($this->sourceLabel()).'';
}
return ''.e($this->sourceLabel()).'';
}
public function approvalBadgeHtml(): string
{
if ($this->isSystemTask()) {
return '—';
}
$class = match ($this->approval_status) {
self::APPROVAL_APPROVED => 'label-success',
self::APPROVAL_REJECTED => 'label-danger',
default => 'label-warning',
};
return ''.e($this->approvalLabel()).'';
}
}