Merged in bugfix/PMCORE-3136 (pull request #8055)

PMCORE-3136

Approved-by: Julio Cesar Laura Avendaño
This commit is contained in:
Andrea Adamczyk
2021-08-20 19:35:49 +00:00
committed by Julio Cesar Laura Avendaño
8 changed files with 710 additions and 4 deletions

View File

@@ -1583,4 +1583,78 @@ class AbstractCases implements CasesInterface
}
return $query->get()->values()->toArray();
}
/**
* Get cases risk by process
*
* @param int $processId
* @param string $dateFrom
* @param string $dateTo
* @param string $riskStatus
* @param int $topCases
*
* @return array
*/
public function getCasesRisk($processId, $dateFrom = null, $dateTo = null, $riskStatus = 'ON_TIME', $topCases = null)
{
$date = new DateTime('now');
$currentDate = $date->format('Y-m-d H:i:s');
$query = Delegation::selectRaw('
APP_DELEGATION.APP_NUMBER as number_case,
APP_DELEGATION.DEL_DELEGATE_DATE as delegated,
APP_DELEGATION.DEL_RISK_DATE as at_risk,
APP_DELEGATION.DEL_TASK_DUE_DATE as due_date,
APP_DELEGATION.APP_UID as app_uid,
APP_DELEGATION.DEL_INDEX as del_index,
APP_DELEGATION.TAS_UID as tas_uid
');
$listArray = explode("\\", get_class($this));
$list = end($listArray);
switch ($list) {
case 'Inbox':
$query->inbox($this->getUserId());
break;
case 'Draft':
$query->draft($this->getUserId());
break;
case 'Paused':
$query->paused($this->getUserId());
break;
case 'Unassigned':
$query->selfService($this->getUserUid());
break;
}
$query->joinProcess();
$query->processInList([$processId]);
if (!is_null($dateFrom)) {
$query->where('APP_DELEGATION.DEL_DELEGATE_DATE', '>=', $dateFrom);
}
if (!is_null($dateTo)) {
$query->where('APP_DELEGATION.DEL_DELEGATE_DATE', '<=', $dateTo);
}
if (!is_null($topCases)) {
$query->orderBy('APP_DELEGATION.DEL_DELEGATE_DATE', 'ASC')->limit($topCases);
}
$value = 'due_date';
switch ($riskStatus) {
case 'ON_TIME':
$query->onTime($currentDate);
$value = 'at_risk';
break;
case 'AT_RISK':
$query->atRisk($currentDate);
break;
case 'OVERDUE':
$query->overdue($currentDate);
break;
}
$res = $query->get()->values()->toArray();
foreach ($res as $key => $values) {
$riskDate = new DateTime($values[$value]);
$days = ['days' => $date->diff($riskDate)->days];
$res[$key] = $days + $res[$key];
}
return $res;
}
}

View File

@@ -388,7 +388,7 @@ class Delegation extends Model
*/
public function scopeAtRisk($query, $now)
{
return $query->where('DEL_RISK_DATE', '>=', $now)->where('DEL_TASK_DUE_DATE', '>=', $now);
return $query->where('DEL_RISK_DATE', '<=', $now)->where('DEL_TASK_DUE_DATE', '>=', $now);
}
/**
@@ -401,7 +401,7 @@ class Delegation extends Model
*/
public function scopeOverdue($query, $now)
{
return $query->where('DEL_TASK_DUE_DATE', '>', $now);
return $query->where('DEL_TASK_DUE_DATE', '<', $now);
}
/**

View File

@@ -157,4 +157,46 @@ class Metrics extends Api
throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage());
}
}
/**
* Get total cases risk
*
* @url GET /cases-risk
*
* @param string $caseList
* @param int $process
* @param string $dateFrom
* @param string $dateTo
* @param string $riskStatus
* @param int $topCases
*
* @return array
*
* @throws RestException
*/
public function getCasesRiskByProcess($caseList = 'inbox', $process, $dateFrom = null, $dateTo = null, $riskStatus = 'ON_TIME', $topCases = null)
{
try {
$usrId = $this->getUserId();
switch ($caseList) {
case 'inbox':
$list = new Inbox();
break;
case 'draft':
$list = new Draft();
break;
case 'paused':
$list = new Paused();
break;
case 'unassigned':
$list = new Unassigned();
break;
}
$list->setUserId($usrId);
$result = $list->getCasesRisk($process, $dateFrom, $dateTo, $riskStatus, $topCases);
return $result;
} catch (Exception $e) {
throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage());
}
}
}