1, 'TO_DO' => 2, 'COMPLETED' => 3, 'CANCELLED' => 4]; /** * Current user related to the application */ public function currentUser() { return $this->belongsTo(User::class, 'APP_CUR_USER', 'USR_UID'); } /** * Creator user related to the application */ public function creatorUser() { return $this->belongsTo(User::class, 'APP_INIT_USER', 'USR_UID'); } /** * Scope a query to only include specific user * * @param \Illuminate\Database\Eloquent\Builder $query * @param int $user * @return \Illuminate\Database\Eloquent\Builder */ public function scopeUserId($query, int $user) { return $query->where('APP_DELEGATION.USR_ID', '=', $user); } /** * Scope for query to get the creator * * @param \Illuminate\Database\Eloquent\Builder $query * @param int $usrId * * @return \Illuminate\Database\Eloquent\Builder */ public function scopeCreator($query, $usrId) { return $query->where('APP_INIT_USER_ID', '=', $usrId); } /** * Scope for query to get the application by APP_UID. * * @param \Illuminate\Database\Eloquent\Builder $query * @param string $appUid * * @return \Illuminate\Database\Eloquent\Builder */ public function scopeAppUid($query, $appUid) { return $query->where('APP_UID', '=', $appUid); } /** * Scope a query to only include specific cases by APP_UID * * @param \Illuminate\Database\Eloquent\Builder $query * @param array $cases * * @return \Illuminate\Database\Eloquent\Builder */ public function scopeSpecificCasesByUid($query, array $cases) { return $query->whereIn('APP_UID', $cases); } /** * Scope for query to get the application by APP_NUMBER * * @param \Illuminate\Database\Eloquent\Builder $query * @param int $appNumber * * @return \Illuminate\Database\Eloquent\Builder */ public function scopeCase($query, $appNumber) { return $query->where('APPLICATION.APP_NUMBER', '=', $appNumber); } /** * Scope for query to get the positive cases * * @param \Illuminate\Database\Eloquent\Builder $query * * @return \Illuminate\Database\Eloquent\Builder */ public function scopePositiveCases($query) { return $query->where('APPLICATION.APP_NUMBER', '>', 0); } /** * Scope a query to only include specific cases * * @param \Illuminate\Database\Eloquent\Builder $query * @param array $cases * * @return \Illuminate\Database\Eloquent\Builder */ public function scopeSpecificCases($query, array $cases) { return $query->whereIn('APPLICATION.APP_NUMBER', $cases); } /** * Scope more than one range of cases * * @param \Illuminate\Database\Eloquent\Builder $query * @param array $rangeCases * * @return \Illuminate\Database\Eloquent\Builder */ public function scopeRangeOfCases($query, array $rangeCases) { $query->where(function ($query) use ($rangeCases) { foreach ($rangeCases as $fromTo) { $fromTo = explode("-", $fromTo); if (count($fromTo) === 2) { $from = $fromTo[0]; $to = $fromTo[1]; if ($to > $from) { $query->orWhere(function ($query) use ($from, $to) { $query->casesFrom($from)->casesTo($to); }); } } } }); } /** * Scope more than one range of cases * * @param \Illuminate\Database\Eloquent\Builder $query * @param array $cases * @param array $rangeCases * * @return \Illuminate\Database\Eloquent\Builder */ public function scopeCasesOrRangeOfCases($query, array $cases, array $rangeCases) { $query->where(function ($query) use ($cases, $rangeCases) { // Get the cases related to the task self service $query->specificCases($cases); foreach ($rangeCases as $fromTo) { $fromTo = explode("-", $fromTo); if (count($fromTo) === 2) { $from = $fromTo[0]; $to = $fromTo[1]; if ($to > $from) { $query->orWhere(function ($query) use ($from, $to) { $query->casesFrom($from)->casesTo($to); }); } } } }); } /** * Scope a query to only include cases from a range * * @param \Illuminate\Database\Eloquent\Builder $query * @param int $from * * @return \Illuminate\Database\Eloquent\Builder */ public function scopeCasesFrom($query, int $from) { return $query->where('APPLICATION.APP_NUMBER', '>=', $from); } /** * Scope a query to only include cases from a range * * @param \Illuminate\Database\Eloquent\Builder $query * @param int $to * * @return \Illuminate\Database\Eloquent\Builder */ public function scopeCasesTo($query, int $to) { return $query->where('APPLICATION.APP_NUMBER', '<=', $to); } /** * Scope for query to get the application by status Id * * @param \Illuminate\Database\Eloquent\Builder $query * @param integer $status * * @return \Illuminate\Database\Eloquent\Builder */ public function scopeStatusId($query, int $status) { return $query->where('APP_STATUS_ID', '=', $status); } /** * Scope a more status * * @param \Illuminate\Database\Eloquent\Builder $query * @param array $statuses * * @return \Illuminate\Database\Eloquent\Builder */ public function scopeStatusIds($query, array $statuses) { return $query->whereIn('APPLICATION.APP_STATUS_ID', $statuses); } /** * Scope a query to only include specific category * * @param \Illuminate\Database\Eloquent\Builder $query * @param int $category * * @return \Illuminate\Database\Eloquent\Builder */ public function scopeCategory($query, $category) { return $query->where('PROCESS.CATEGORY_ID', $category); } /** * Scope for query to get the applications by PRO_UID. * * @param \Illuminate\Database\Eloquent\Builder $query * @param string $proUid * * @return \Illuminate\Database\Eloquent\Builder */ public function scopeProUid($query, $proUid) { return $query->where('APPLICATION.PRO_UID', '=', $proUid); } /** * Scope a query to only include a specific start date * * @param \Illuminate\Database\Eloquent\Builder $query * @param string $from * * @return \Illuminate\Database\Eloquent\Builder */ public function scopeStartDateFrom($query, string $from) { return $query->where('APPLICATION.APP_CREATE_DATE', '>=', $from); } /** * Scope a query to only include a specific start date * * @param \Illuminate\Database\Eloquent\Builder $query * @param string $to * * @return \Illuminate\Database\Eloquent\Builder */ public function scopeStartDateTo($query, string $to) { return $query->where('APPLICATION.APP_CREATE_DATE', '<=', $to); } /** * Scope a query to only include a specific finish date * * @param \Illuminate\Database\Eloquent\Builder $query * @param string $from * * @return \Illuminate\Database\Eloquent\Builder */ public function scopeFinishCaseFrom($query, string $from) { return $query->where('APPLICATION.APP_FINISH_DATE', '>=', $from); } /** * Scope a query to only include a specific finish date * * @param \Illuminate\Database\Eloquent\Builder $query * @param string $to * * @return \Illuminate\Database\Eloquent\Builder */ public function scopeFinishCaseTo($query, string $to) { return $query->where('APPLICATION.APP_FINISH_DATE', '<=', $to); } /** * Scope a query to only include a specific task * * @param \Illuminate\Database\Eloquent\Builder $query * @param int $task * * @return \Illuminate\Database\Eloquent\Builder */ public function scopeTask($query, int $task) { return $query->where('APP_DELEGATION.TAS_ID', '=', $task); } /** * Scope join with process * * @param \Illuminate\Database\Eloquent\Builder $query * * @return \Illuminate\Database\Eloquent\Builder */ public function scopeJoinProcess($query) { $query->leftJoin('PROCESS', function ($leftJoin) { $leftJoin->on('APPLICATION.PRO_UID', '=', 'PROCESS.PRO_UID'); }); return $query; } /** * Scope join with delegation * * @param \Illuminate\Database\Eloquent\Builder $query * * @return \Illuminate\Database\Eloquent\Builder */ public function scopeJoinDelegation($query) { $query->leftJoin('APP_DELEGATION', function ($leftJoin) { $leftJoin->on('APPLICATION.APP_NUMBER', '=', 'APP_DELEGATION.APP_NUMBER'); }); return $query; } /** * Scope the Draft cases * * @param \Illuminate\Database\Eloquent\Builder $query * @param int $user * * @return \Illuminate\Database\Eloquent\Builder */ public function scopeDraft($query, $user) { // Filter the status draft $query->statusId(Application::STATUS_DRAFT); // Filter the creator $query->creator($user); return $query; } /** * Get Applications by PRO_UID, ordered by APP_NUMBER. * * @param string $proUid * * @return object * @see ReportTables->populateTable() */ public static function getByProUid($proUid) { $query = Application::query() ->select() ->proUid($proUid) ->positiveCases() ->orderBy('APP_NUMBER', 'ASC'); return $query->get(); } /** * Get information related to the case, avoiding to load the APP_DATA * * @param string $appUid * * @return array|bool */ public static function getCase($appUid) { $query = Application::query()->select([ 'APP_NUMBER', 'APP_STATUS', 'PRO_UID', 'PRO_ID', 'APP_INIT_USER' ]); $query->appUid($appUid); $result = $query->get()->toArray(); $firstElement = head($result); return $firstElement; } /** * Get app number * * @param string $appUid * * @return int */ public static function getCaseNumber($appUid) { $query = Application::query()->select(['APP_NUMBER']) ->appUid($appUid) ->limit(1); $results = $query->get(); $caseNumber = 0; $results->each(function ($item) use (&$caseNumber) { $caseNumber = $item->APP_NUMBER; }); return $caseNumber; } /** * Update properties * * @param string $appUid * @param array $fields * * @return array */ public static function updateColumns($appUid, $fields) { $properties = []; $properties['APP_ROUTING_DATA'] = !empty($fields['APP_ROUTING_DATA']) ? serialize($fields['APP_ROUTING_DATA']) : serialize([]); // This column will to update only when the thread is related to the user if (!empty($fields['APP_CUR_USER'])) { $properties['APP_CUR_USER'] = $fields['APP_CUR_USER']; } Application::query()->appUid($appUid)->update($properties); return $properties; } /** * Get Applications by PRO_UID, ordered by APP_NUMBER. * * @param string $proUid * @param int $status * * @return object * @see ReportTables->populateTable() */ public static function getCountByProUid(string $proUid, $status = 2) { $query = Application::query() ->select() ->proUid($proUid) ->statusId($status) ->positiveCases(); return $query->get()->count(['APP_NUMBER']); } }