'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()).''; } }