Include initial transform to transform results to desired necessity. Change proxyCaseList to utilize Delegation search.

This commit is contained in:
Taylor Dondich
2019-04-25 15:32:23 -07:00
committed by Paula Quispe
parent 2bf175ac85
commit e79503f590
2 changed files with 175 additions and 8 deletions

View File

@@ -1,4 +1,9 @@
<?php
use ProcessMaker\Model\Delegation;
/**
* Authentication check for session. If not logged in, return json error
*/
if (!isset($_SESSION['USER_LOGGED'])) {
$responseObject = new stdclass();
$responseObject->error = G::LoadTranslation('ID_LOGIN_AGAIN');
@@ -9,31 +14,59 @@ if (!isset($_SESSION['USER_LOGGED'])) {
}
/**
* Do input filtering, although filtering should be done on the frontend rendering, not here
*/
$filter = new InputFilter();
$_GET = $filter->xssFilterHard($_GET);
$_REQUEST = $filter->xssFilterHard($_REQUEST);
$_SESSION['USER_LOGGED'] = $filter->xssFilterHard($_SESSION['USER_LOGGED']);
//Getting the extJs parameters
// Callback in the UI to utilize
$callback = isset($_REQUEST["callback"]) ? $_REQUEST["callback"] : "stcCallback1001";
//This default value was defined in casesList.js
$dir = isset($_REQUEST["dir"]) ? $_REQUEST["dir"] : "DESC";
//This default value was defined in casesList.js
// Sort column
$sort = isset($_REQUEST["sort"]) ? $_REQUEST["sort"] : "APP_NUMBER";
// Sort direction
$dir = isset($_REQUEST["dir"]) ? $_REQUEST["dir"] : "DESC";
// Pagination control
$start = !empty($_REQUEST["start"]) ? $_REQUEST["start"] : 0;
$limit = !empty($_REQUEST["limit"]) ? $_REQUEST["limit"] : 25;
// Our search filter
$filter = isset($_REQUEST["filter"]) ? $_REQUEST["filter"] : "";
// What process
$process = isset($_REQUEST["process"]) ? $_REQUEST["process"] : "";
// What category
$category = isset($_REQUEST["category"]) ? $_REQUEST["category"] : "";
// What status
$status = isset($_REQUEST["status"]) ? strtoupper($_REQUEST["status"]) : "";
$filterStatus = isset($_REQUEST["filterStatus"]) ? strtoupper($_REQUEST["filterStatus"]) : "";
// What user
$user = isset($_REQUEST["user"]) ? $_REQUEST["user"] : "";
// What search???
$search = isset($_REQUEST["search"]) ? $_REQUEST["search"] : "";
// What kind of action
$action = isset($_GET["action"]) ? $_GET["action"] : (isset($_REQUEST["action"]) ? $_REQUEST["action"] : "todo");
// What kind of search
$type = isset($_GET["type"]) ? $_GET["type"] : (isset($_REQUEST["type"]) ? $_REQUEST["type"] : "extjs");
// Date ranges
$dateFrom = isset($_REQUEST["dateFrom"]) ? substr($_REQUEST["dateFrom"], 0, 10) : "";
$dateTo = isset($_REQUEST["dateTo"]) ? substr($_REQUEST["dateTo"], 0, 10) : "";
// First? No idea
$first = isset($_REQUEST["first"]) ? true : false;
$openApplicationUid = (isset($_REQUEST['openApplicationUid']) && $_REQUEST['openApplicationUid'] != '') ?
$_REQUEST['openApplicationUid'] : null;
$search = (!is_null($openApplicationUid)) ? $openApplicationUid : $search;
@@ -67,10 +100,10 @@ try {
break;
}
$apps = new Applications();
//$apps = new Applications();
if ($action == 'search') {
$data = $apps->searchAll(
$data = Delegation::search(
$userUid,
$start,
$limit,
@@ -85,7 +118,7 @@ try {
$columnSearch
);
} else {
$data = $apps->getAll(
$data = Delegation::search(
$userUid,
$start,
$limit,

View File

@@ -3,13 +3,14 @@
namespace ProcessMaker\Model;
use Illuminate\Database\Eloquent\Model;
use G;
class Delegation extends Model
{
protected $table = "APP_DELEGATION";
// We don't have our standard timestamp columns
protected $timestamps = false;
public $timestamps = false;
/**
* Returns the application this delegation belongs to
@@ -42,4 +43,137 @@ class Delegation extends Model
{
return $this->belongsTo(Process::class, 'PRO_ID', 'PRO_ID');
}
/**
* Searches for delegations which match certain criteria
*
* The query is related to advanced search with different filters
* We can search by process, status of case, category of process, users, delegate date from and to
*
* @param string $userUid
* @param integer $start for the pagination
* @param integer $limit for the pagination
* @param string $search
* @param integer $process the pro_id
* @param integer $status of the case
* @param string $dir if the order is DESC or ASC
* @param string $sort name of column by sort, can be:
* [APP_NUMBER, APP_TITLE, APP_PRO_TITLE, APP_TAS_TITLE, APP_CURRENT_USER, APP_UPDATE_DATE, DEL_DELEGATE_DATE, DEL_TASK_DUE_DATE, APP_STATUS_LABEL]
* @param string $category uid for the process
* @param date $dateFrom
* @param date $dateTo
* @param string $filterBy name of column for a specific search, can be: [APP_NUMBER, APP_TITLE, TAS_TITLE]
* @return array $result result of the query
*/
public static function search(
$userUid,
$start = null,
$limit = null,
$search = null,
$process = null,
$status = null,
$dir = null,
$sort = null,
$category = null,
$dateFrom = null,
$dateTo = null,
$filterBy = 'APP_TITLE'
)
{
// Default pagination values
$start = $start ? $start : 0;
$limit = $limit ? $limit : 25;
// Start the query builder
$query = self::query();
// Add pagination to the query
$query = $query->offset($start)
->limit($limit);
// Fetch results and transform to a laravel collection
$results = collect($query->get());
// Transform with additional data
$priorities = ['1' => 'VL','2' => 'L','3' => 'N','4' => 'H','5' => 'VH'];
$results->transform(function($item, $key) use($priorities) {
// Grab related records
$application = Application::where('APP_UID', $item['APP_UID'])->first();
if(!$application) {
// Application wasn't found, return null
return null;
}
$task = Task::where('TAS_ID', $item['TAS_ID'])->first();
if(!$task) {
// Task not found, return null
return null;
}
$user = User::where('USR_ID', $item['USR_ID'])->first();
if(!$user) {
// User not found, return null
return null;
}
$process = Process::where('PRO_ID', $item['PRO_ID'])->first();;
if(!$process) {
// Process not found, return null
return null;
}
// Rewrite priority string
if($item['DEL_PRIORITY']) {
$item['DEL_PRIORITY'] = G::LoadTranslation( "ID_PRIORITY_{$priorities[$item['DEL_PRIORITY']]}" );
}
// Merge in desired application data
$item['APP_STATUS'] = $application->APP_STATUS;
if($item['APP_STATUS']) {
$item['APP_STATUS_LABEL'] = G::LoadTranslation( "ID_${item['APP_STATUS']}");
} else {
$item['APP_STATUS_LABEL'] = $application->APP_STATUS;
}
$item['APP_CREATE_DATE'] = $application->APP_CREATE_DATE;
$item['APP_FINISH_DATE'] = $application->APP_FINISH_DATE;
$item['APP_UPDATE_DATE'] = $application->APP_UPDATE_DATE;
$item['APP_TITLE'] = $application->APP_TITLE;
// Merge in desired process data
$item['APP_PRO_TITLE'] = $process->PRO_TITLE;
// Merge in desired task data
$item['APP_TAS_TITLE'] = $task->TAS_TITLE;
$item['APP_TAS_TYPE'] = $task->TAS_TYPE;
// Merge in desired user data
$item['USR_LASTNAME'] = $user->USR_LASTNAME;
$item['USR_FIRSTNAME'] = $user->USR_FIRSTNAME;
$item['USR_USERNAME'] = $user->USR_USERNAME;
//@todo: this section needs to use 'User Name Display Format', currently in the extJs is defined this
$item["APP_CURRENT_USER"] = $item["USR_LASTNAME"].' '.$item["USR_FIRSTNAME"];
$item["APPDELCR_APP_TAS_TITLE"] = '';
$item["USRCR_USR_UID"] = $item["USR_UID"];
$item["USRCR_USR_FIRSTNAME"] = $item["USR_FIRSTNAME"];
$item["USRCR_USR_LASTNAME"] = $item["USR_LASTNAME"];
$item["USRCR_USR_USERNAME"] = $item["USR_USERNAME"];
$item["APP_OVERDUE_PERCENTAGE"] = '';
return $item;
});
// Remove any empty erroenous data
$results = $results->filter();
// Bundle into response array
$response = [
// Fake totalCount to show pagination
'totalCount' => $start + $limit + 1,
'data' => $results->toArray()
];
return $response;
}
}