belongsTo(Process::class, 'PRO_UID', 'PRO_UID'); } public function delegations() { return $this->hasMany(Delegation::class, 'TAS_ID', 'TAS_ID'); } /** * Scope a query to only include self-service * * @param \Illuminate\Database\Eloquent\Builder $query * @return \Illuminate\Database\Eloquent\Builder */ public function scopeIsSelfService($query) { return $query->where('TAS_ASSIGN_TYPE', '=', 'SELF_SERVICE') ->where('TAS_GROUP_VARIABLE', '=', ''); } /** * Scope a query to specific title * * @param \Illuminate\Database\Eloquent\Builder $query * @param string $title * @return \Illuminate\Database\Eloquent\Builder */ public function scopeTitle($query, $title) { return $query->where('TAS_TITLE', 'LIKE', "%{$title}%"); } /** * Scope a query to include a specific process * * @param \Illuminate\Database\Eloquent\Builder $query * @param string $category * @return \Illuminate\Database\Eloquent\Builder * @todo Auto populate the PRO_ID in TASK table */ public function scopeProcessId($query, $proId) { $query->join('PROCESS', function ($join) use ($proId) { $join->on('TASK.PRO_UID', '=', 'PROCESS.PRO_UID') ->where('PROCESS.PRO_ID', '=', $proId); }); return $query; } /** * Get the title of the task * * @param integer $tasId * * @return string */ public function title($tasId) { $query = Task::query()->select('TAS_TITLE'); $query->where('TAS_ID', $tasId); $results = $query->get(); $title = ''; $results->each(function ($item, $key) use (&$title) { $title = $item->TAS_TITLE; switch ($title) { case "INTERMEDIATE-THROW-EMAIL-EVENT": $title = G::LoadTranslation('ID_INTERMEDIATE_THROW_EMAIL_EVENT'); break; case "INTERMEDIATE-THROW-MESSAGE-EVENT": $title = G::LoadTranslation('ID_INTERMEDIATE_THROW_MESSAGE_EVENT'); break; case "INTERMEDIATE-CATCH-MESSAGE-EVENT": $title = G::LoadTranslation('ID_INTERMEDIATE_CATCH_MESSAGE_EVENT'); break; case "INTERMEDIATE-CATCH-TIMER-EVENT": $title = G::LoadTranslation('ID_INTERMEDIATE_CATCH_TIMER_EVENT'); break; } }); return $title; } /** * Get the title of the task * * @param string $tasUid * * @return string */ public function taskCaseTitle(string $tasUid) { $query = Task::query()->select(['TAS_DEF_TITLE']); $query->where('TAS_UID', $tasUid); $query->limit(1); $results = $query->get(); $title = ''; $results->each(function ($item) use (&$title) { $title = $item->TAS_DEF_TITLE; }); return $title; } /** * Get task data * * @param string $tasUid * * @return array */ public function load($tasUid) { $query = Task::query(); $query->where('TAS_UID', $tasUid); return $query->get()->toArray(); } /** * Get task thread information * * @param string $appUid * @param string $tasUid * @param string $delIndex * * @return array */ public function information(string $appUid, string $tasUid, string $delIndex) { // Load the the task information $taskInfo = $this->load($tasUid); $taskInfo = head($taskInfo); $taskType = $taskInfo['TAS_TYPE']; // Load the dates related to the thread $dates = Delegation::getDatesFromThread($appUid, $delIndex, $tasUid, $taskType); // Set the dates $taskInfo['INIT_DATE'] = !empty($dates['DEL_INIT_DATE']) ? $dates['DEL_INIT_DATE'] : G::LoadTranslation('ID_CASE_NOT_YET_STARTED'); $taskInfo['DUE_DATE'] = !empty($dates['DEL_TASK_DUE_DATE']) ? $dates['DEL_TASK_DUE_DATE'] : G::LoadTranslation('ID_NOT_FINISHED'); $taskInfo['FINISH'] = !empty($dates['DEL_FINISH_DATE']) ? $dates['DEL_FINISH_DATE'] : G::LoadTranslation('ID_NOT_FINISHED'); $taskInfo['DURATION'] = !empty($dates['DEL_THREAD_DURATION']) ? $dates['DEL_THREAD_DURATION'] : G::LoadTranslation('ID_NOT_FINISHED'); return $taskInfo; } /** * Set the TAS_DEF_TITLE value * * @param string $evnUid * @param string $caseTitle * * @return \Illuminate\Database\Eloquent\Builder */ public static function setTaskDefTitle($evnUid, $caseTitle) { $query = Task::select(['TASK.TAS_UID']); $query->join('ELEMENT_TASK_RELATION', function ($join) use ($evnUid) { $join->on('ELEMENT_TASK_RELATION.TAS_UID', '=', 'TASK.TAS_UID') ->where('ELEMENT_TASK_RELATION.ELEMENT_UID', '=', $evnUid); }); $query->update(['TASK.TAS_DEF_TITLE' => $caseTitle]); return $query; } /** * Get the TAS_DEF_TITLE value * * @param string $evnUid * * @return \Illuminate\Database\Eloquent\Builder */ public static function getTaskDefTitle($evnUid) { $query = Task::select(['TASK.TAS_DEF_TITLE']); $query->join('ELEMENT_TASK_RELATION', function ($join) use ($evnUid) { $join->on('ELEMENT_TASK_RELATION.TAS_UID', '=', 'TASK.TAS_UID') ->where('ELEMENT_TASK_RELATION.ELEMENT_UID', '=', $evnUid); }); return $query->get()->values()->toArray()['0']['TAS_DEF_TITLE']; } /** * Get all tasks, paged optionally, can be sent a string to filter results by "TAS_TITLE" * * @param string $text * @param string $proId * @param int $offset * @param int $limit * * @return array */ public static function getTasksForHome($text = null, $proId = null, $offset = null, $limit = null) { // Get base query $query = Task::query()->select(['TAS_ID', 'TAS_TITLE']); // Set "TAS_TITLE" condition if is sent if (!is_null($text)) { $query->title($text); } // Set "PRO_ID" condition if is sent if (!is_null($proId)) { $query->processId($proId); } // Set pagination if offset and limit are sent if (!is_null($offset) && !is_null($limit)) { $query->offset($offset); $query->limit($limit); } // Order by "TAS_TITLE" $query->orderBy('TAS_TITLE'); // Return tasks return $query->get()->toArray(); } }