random(); } public function subtasks() { return $this->hasMany(SubTask::class); } public function project() { return $this->belongsTo(Project::class); } public function team() { return $this->belongsTo(Team::class); } // vracia userov, ktori su priradeni k subtasku ale nepatria do teamu public function getUsersOutsideTeamAttribute() { $users = $this->subtasks->pluck('user')->unique(); // ak nie je uvedeny ziaden team, tak sa vratia vsetci useri if ( ! $this->team) { return $users; } return $users->filter(function ($user) { return ! in_array($this->team->id, $user->teams->pluck('id')->unique()->toArray()); }); } // vsetci useri, ktory pracuju na master tasku (tzn. maju vytvorene subtasky k danemu master tasku) public function getAllUsersInMasterTaskAttribute() { return $this->subtasks->pluck('user')->unique(); } public function deleteAttachments() { foreach ($this->attachments as $attachment) { $attachment->deleteFromS3(); } $this->attachments()->delete(); return true; } public function attachments() { return $this->hasMany(Attachment::class); } public function recalculateEstimatedTime() { $this->estimated_time = $this->subtasks->sum('estimated_time'); $this->save(); } public function recalculateTrackedTime() { $trackedTime = 0.0; foreach ($this->subtasks as $subtask) { $trackedTime += $subtask->timesheets->sum('time'); } $this->tracked_time = $trackedTime; $this->save(); } }