HOR-6 "No se puede reasignar un caso cuando se..." SOLVED
Issue:
No se puede reasignar un caso cuando se tiene asignados a la tarea 40000 usuarios
Cause:
El metodo "Cases::getUsersToReassign()" no es optimo
Solution:
- Se a creado el metodo "\ProcessMaker\BusinessModel\Cases::getUsersToReassign()", el cual esta optimizado (backend)
- Se hizo un refactor de las interfaces (frontend)
This commit is contained in:
@@ -518,14 +518,33 @@ class Ajax
|
|||||||
print G::json_encode( $response );
|
print G::json_encode( $response );
|
||||||
die();
|
die();
|
||||||
}
|
}
|
||||||
G::LoadClass( 'tasks' );
|
|
||||||
$task = new Task();
|
|
||||||
$tasks = $task->load($_SESSION['TASK']);
|
|
||||||
$case = new Cases();
|
|
||||||
$result = new stdclass();
|
|
||||||
$result->data = $case->getUsersToReassign($_SESSION['TASK'], $_SESSION['USER_LOGGED'], $tasks['PRO_UID']);
|
|
||||||
|
|
||||||
print G::json_encode($result);
|
$taskUid = $_SESSION['TASK'];
|
||||||
|
$search = $_POST['search'];
|
||||||
|
$pageSize = $_POST['pageSize'];
|
||||||
|
|
||||||
|
$sortField = (isset($_POST['sort']))? $_POST['sort'] : '';
|
||||||
|
$sortDir = (isset($_POST['dir']))? $_POST['dir'] : '';
|
||||||
|
$start = (isset($_POST['start']))? $_POST['start'] : 0;
|
||||||
|
$limit = (isset($_POST['limit']))? $_POST['limit'] : $pageSize;
|
||||||
|
|
||||||
|
$response = [];
|
||||||
|
|
||||||
|
try {
|
||||||
|
$case = new \ProcessMaker\BusinessModel\Cases();
|
||||||
|
|
||||||
|
$result = $case->getUsersToReassign($_SESSION['USER_LOGGED'], $taskUid, ['filter' => $search], $sortField, $sortDir, $start, $limit);
|
||||||
|
|
||||||
|
$response['status'] = 'OK';
|
||||||
|
$response['success'] = true;
|
||||||
|
$response['resultTotal'] = $result['total'];
|
||||||
|
$response['resultRoot'] = $result['data'];
|
||||||
|
} catch (Exception $e) {
|
||||||
|
$response['status'] = 'ERROR';
|
||||||
|
$response['message'] = $e->getMessage();
|
||||||
|
}
|
||||||
|
|
||||||
|
echo G::json_encode($response);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function reassignCase()
|
public function reassignCase()
|
||||||
|
|||||||
@@ -85,7 +85,7 @@ if ($actionAjax == "userValues") {
|
|||||||
$cUsers->addSelectColumn(UsersPeer::USR_FIRSTNAME);
|
$cUsers->addSelectColumn(UsersPeer::USR_FIRSTNAME);
|
||||||
$cUsers->addSelectColumn(UsersPeer::USR_LASTNAME);
|
$cUsers->addSelectColumn(UsersPeer::USR_LASTNAME);
|
||||||
$cUsers->add( UsersPeer::USR_STATUS, 'CLOSED', Criteria::NOT_EQUAL );
|
$cUsers->add( UsersPeer::USR_STATUS, 'CLOSED', Criteria::NOT_EQUAL );
|
||||||
|
|
||||||
if (!is_null($query)) {
|
if (!is_null($query)) {
|
||||||
$filters = $cUsers->getNewCriterion( UsersPeer::USR_FIRSTNAME, '%'.$query.'%', Criteria::LIKE )->addOr(
|
$filters = $cUsers->getNewCriterion( UsersPeer::USR_FIRSTNAME, '%'.$query.'%', Criteria::LIKE )->addOr(
|
||||||
$cUsers->getNewCriterion( UsersPeer::USR_LASTNAME, '%'.$query.'%', Criteria::LIKE )->addOr(
|
$cUsers->getNewCriterion( UsersPeer::USR_LASTNAME, '%'.$query.'%', Criteria::LIKE )->addOr(
|
||||||
@@ -217,14 +217,32 @@ if ($actionAjax == "processListExtJs") {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($actionAjax == "getUsersToReassign") {
|
if ($actionAjax == "getUsersToReassign") {
|
||||||
$_SESSION['TASK'] = $_REQUEST['TAS_UID'];
|
$taskUid = $_POST['taskUid'];
|
||||||
$case = new Cases();
|
$search = $_POST['search'];
|
||||||
G::LoadClass( 'tasks' );
|
$pageSize = $_POST['pageSize'];
|
||||||
$task = new Task();
|
|
||||||
$tasks = $task->load($_SESSION['TASK']);
|
$sortField = (isset($_POST['sort']))? $_POST['sort'] : '';
|
||||||
$result = new stdclass();
|
$sortDir = (isset($_POST['dir']))? $_POST['dir'] : '';
|
||||||
$result->data = $case->getUsersToReassign( $_SESSION['TASK'], $_SESSION['USER_LOGGED'], $tasks['PRO_UID'] );
|
$start = (isset($_POST['start']))? $_POST['start'] : 0;
|
||||||
print G::json_encode( $result );
|
$limit = (isset($_POST['limit']))? $_POST['limit'] : $pageSize;
|
||||||
|
|
||||||
|
$response = [];
|
||||||
|
|
||||||
|
try {
|
||||||
|
$case = new \ProcessMaker\BusinessModel\Cases();
|
||||||
|
|
||||||
|
$result = $case->getUsersToReassign($_SESSION['USER_LOGGED'], $taskUid, ['filter' => $search], $sortField, $sortDir, $start, $limit);
|
||||||
|
|
||||||
|
$response['status'] = 'OK';
|
||||||
|
$response['success'] = true;
|
||||||
|
$response['resultTotal'] = $result['total'];
|
||||||
|
$response['resultRoot'] = $result['data'];
|
||||||
|
} catch (Exception $e) {
|
||||||
|
$response['status'] = 'ERROR';
|
||||||
|
$response['message'] = $e->getMessage();
|
||||||
|
}
|
||||||
|
|
||||||
|
echo G::json_encode($response);
|
||||||
}
|
}
|
||||||
if ($actionAjax == 'reassignCase') {
|
if ($actionAjax == 'reassignCase') {
|
||||||
|
|
||||||
|
|||||||
@@ -2477,4 +2477,196 @@ class Cases
|
|||||||
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
|
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Users to reassign
|
||||||
|
*
|
||||||
|
* @param string $userUid Unique id of User (User logged)
|
||||||
|
* @param string $taskUid Unique id of Task
|
||||||
|
* @param array $arrayFilterData Data of the filters
|
||||||
|
* @param string $sortField Field name to sort
|
||||||
|
* @param string $sortDir Direction of sorting (ASC, DESC)
|
||||||
|
* @param int $start Start
|
||||||
|
* @param int $limit Limit
|
||||||
|
*
|
||||||
|
* @return array Return Users to reassign
|
||||||
|
*/
|
||||||
|
public function getUsersToReassign($userUid, $taskUid, $arrayFilterData = null, $sortField = null, $sortDir = null, $start = null, $limit = null)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
$arrayUser = [];
|
||||||
|
|
||||||
|
$numRecTotal = 0;
|
||||||
|
|
||||||
|
//Set variables
|
||||||
|
$task = \TaskPeer::retrieveByPK($taskUid);
|
||||||
|
|
||||||
|
$processUid = $task->getProUid();
|
||||||
|
|
||||||
|
$user = new \ProcessMaker\BusinessModel\User();
|
||||||
|
$task = new \Tasks();
|
||||||
|
$group = new \Groups();
|
||||||
|
|
||||||
|
//Set variables
|
||||||
|
$filterName = 'filter';
|
||||||
|
|
||||||
|
if (!is_null($arrayFilterData) && is_array($arrayFilterData) && isset($arrayFilterData['filter'])) {
|
||||||
|
$arrayAux = [
|
||||||
|
'' => 'filter',
|
||||||
|
'LEFT' => 'lfilter',
|
||||||
|
'RIGHT' => 'rfilter'
|
||||||
|
];
|
||||||
|
|
||||||
|
$filterName = $arrayAux[(isset($arrayFilterData['filterOption']))? $arrayFilterData['filterOption'] : ''];
|
||||||
|
}
|
||||||
|
|
||||||
|
//Get data
|
||||||
|
if (!is_null($limit) && $limit . '' == '0') {
|
||||||
|
//Return
|
||||||
|
return [
|
||||||
|
'total' => $numRecTotal,
|
||||||
|
'start' => (int)((!is_null($start))? $start : 0),
|
||||||
|
'limit' => (int)((!is_null($limit))? $limit : 0),
|
||||||
|
$filterName => (!is_null($arrayFilterData) && is_array($arrayFilterData) && isset($arrayFilterData['filter']))? $arrayFilterData['filter'] : '',
|
||||||
|
'data' => $arrayUser
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
//Set variables
|
||||||
|
$processSupervisor = new \ProcessMaker\BusinessModel\ProcessSupervisor();
|
||||||
|
|
||||||
|
$arrayResult = $processSupervisor->getProcessSupervisors($processUid, 'ASSIGNED', null, null, null, 'group');
|
||||||
|
|
||||||
|
$arrayGroupUid = array_merge(
|
||||||
|
array_map(function ($value) { return $value['GRP_UID']; }, $task->getGroupsOfTask($taskUid, 1)), //Groups
|
||||||
|
array_map(function ($value) { return $value['GRP_UID']; }, $task->getGroupsOfTask($taskUid, 2)), //AdHoc Groups
|
||||||
|
array_map(function ($value) { return $value['grp_uid']; }, $arrayResult['data']) //ProcessSupervisor Groups
|
||||||
|
);
|
||||||
|
|
||||||
|
$sqlTaskUser = '
|
||||||
|
SELECT ' . \TaskUserPeer::USR_UID . '
|
||||||
|
FROM ' . \TaskUserPeer::TABLE_NAME . '
|
||||||
|
WHERE ' . \TaskUserPeer::TAS_UID . ' = \'%s\' AND
|
||||||
|
' . \TaskUserPeer::TU_TYPE . ' IN (1, 2) AND
|
||||||
|
' . \TaskUserPeer::TU_RELATION . ' = 1
|
||||||
|
';
|
||||||
|
|
||||||
|
$sqlGroupUser = '
|
||||||
|
SELECT ' . \GroupUserPeer::USR_UID . '
|
||||||
|
FROM ' . \GroupUserPeer::TABLE_NAME . '
|
||||||
|
WHERE ' . \GroupUserPeer::GRP_UID . ' IN (%s)
|
||||||
|
';
|
||||||
|
|
||||||
|
$sqlProcessSupervisor = '
|
||||||
|
SELECT ' . \ProcessUserPeer::USR_UID . '
|
||||||
|
FROM ' . \ProcessUserPeer::TABLE_NAME . '
|
||||||
|
WHERE ' . \ProcessUserPeer::PRO_UID . ' = \'%s\' AND
|
||||||
|
' . \ProcessUserPeer::PU_TYPE . ' = \'%s\'
|
||||||
|
';
|
||||||
|
|
||||||
|
$sqlUserToReassign = '(' . sprintf($sqlTaskUser, $taskUid) . ')';
|
||||||
|
|
||||||
|
if (!empty($arrayGroupUid)) {
|
||||||
|
$sqlUserToReassign .= ' UNION (' . sprintf($sqlGroupUser, '\'' . implode('\', \'', $arrayGroupUid) . '\'') . ')';
|
||||||
|
}
|
||||||
|
|
||||||
|
$sqlUserToReassign .= ' UNION (' . sprintf($sqlProcessSupervisor, $processUid, 'SUPERVISOR') . ')';
|
||||||
|
|
||||||
|
//Query
|
||||||
|
$criteria = new \Criteria('workflow');
|
||||||
|
|
||||||
|
$criteria->addSelectColumn(\UsersPeer::USR_UID);
|
||||||
|
$criteria->addSelectColumn(\UsersPeer::USR_USERNAME);
|
||||||
|
$criteria->addSelectColumn(\UsersPeer::USR_FIRSTNAME);
|
||||||
|
$criteria->addSelectColumn(\UsersPeer::USR_LASTNAME);
|
||||||
|
|
||||||
|
$criteria->addAlias('USER_TO_REASSIGN', '(' . $sqlUserToReassign . ')');
|
||||||
|
|
||||||
|
$criteria->addJoin(\UsersPeer::USR_UID, 'USER_TO_REASSIGN.USR_UID', \Criteria::INNER_JOIN);
|
||||||
|
|
||||||
|
if (!is_null($arrayFilterData) && is_array($arrayFilterData) && isset($arrayFilterData['filter']) && trim($arrayFilterData['filter']) != '') {
|
||||||
|
$arraySearch = [
|
||||||
|
'' => '%' . $arrayFilterData['filter'] . '%',
|
||||||
|
'LEFT' => $arrayFilterData['filter'] . '%',
|
||||||
|
'RIGHT' => '%' . $arrayFilterData['filter']
|
||||||
|
];
|
||||||
|
|
||||||
|
$search = $arraySearch[(isset($arrayFilterData['filterOption']))? $arrayFilterData['filterOption'] : ''];
|
||||||
|
|
||||||
|
$criteria->add(
|
||||||
|
$criteria->getNewCriterion(\UsersPeer::USR_USERNAME, $search, \Criteria::LIKE)->addOr(
|
||||||
|
$criteria->getNewCriterion(\UsersPeer::USR_FIRSTNAME, $search, \Criteria::LIKE))->addOr(
|
||||||
|
$criteria->getNewCriterion(\UsersPeer::USR_LASTNAME, $search, \Criteria::LIKE))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$criteria->add(\UsersPeer::USR_STATUS, 'ACTIVE', \Criteria::EQUAL);
|
||||||
|
|
||||||
|
if (!$user->checkPermission($userUid, 'PM_SUPERVISOR')) {
|
||||||
|
$criteria->add(\UsersPeer::USR_UID, $userUid, \Criteria::NOT_EQUAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Number records total
|
||||||
|
$criteriaCount = clone $criteria;
|
||||||
|
|
||||||
|
$criteriaCount->clearSelectColumns();
|
||||||
|
$criteriaCount->addSelectColumn('COUNT(' . \UsersPeer::USR_UID . ') AS NUM_REC');
|
||||||
|
|
||||||
|
$rsCriteriaCount = \UsersPeer::doSelectRS($criteriaCount);
|
||||||
|
$rsCriteriaCount->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
|
||||||
|
|
||||||
|
$result = $rsCriteriaCount->next();
|
||||||
|
$row = $rsCriteriaCount->getRow();
|
||||||
|
|
||||||
|
$numRecTotal = (int)($row['NUM_REC']);
|
||||||
|
|
||||||
|
//Query
|
||||||
|
if (!is_null($sortField) && trim($sortField) != '') {
|
||||||
|
$sortField = strtoupper($sortField);
|
||||||
|
|
||||||
|
if (in_array(\UsersPeer::TABLE_NAME . '.' . $sortField, $criteria->getSelectColumns())) {
|
||||||
|
$sortField = \UsersPeer::TABLE_NAME . '.' . $sortField;
|
||||||
|
} else {
|
||||||
|
$sortField = \UsersPeer::USR_FIRSTNAME;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$sortField = \UsersPeer::USR_FIRSTNAME;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!is_null($sortDir) && trim($sortDir) != '' && strtoupper($sortDir) == 'DESC') {
|
||||||
|
$criteria->addDescendingOrderByColumn($sortField);
|
||||||
|
} else {
|
||||||
|
$criteria->addAscendingOrderByColumn($sortField);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!is_null($start)) {
|
||||||
|
$criteria->setOffset((int)($start));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!is_null($limit)) {
|
||||||
|
$criteria->setLimit((int)($limit));
|
||||||
|
}
|
||||||
|
|
||||||
|
$rsCriteria = \UsersPeer::doSelectRS($criteria);
|
||||||
|
$rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
|
||||||
|
|
||||||
|
while ($rsCriteria->next()) {
|
||||||
|
$row = $rsCriteria->getRow();
|
||||||
|
|
||||||
|
$arrayUser[] = $row;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Return
|
||||||
|
return [
|
||||||
|
'total' => $numRecTotal,
|
||||||
|
'start' => (int)((!is_null($start))? $start : 0),
|
||||||
|
'limit' => (int)((!is_null($limit))? $limit : 0),
|
||||||
|
$filterName => (!is_null($arrayFilterData) && is_array($arrayFilterData) && isset($arrayFilterData['filter']))? $arrayFilterData['filter'] : '',
|
||||||
|
'data' => $arrayUser
|
||||||
|
];
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
throw $e;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
namespace ProcessMaker\BusinessModel;
|
namespace ProcessMaker\BusinessModel;
|
||||||
|
|
||||||
use \G;
|
use \G;
|
||||||
use Luracast\Restler\User;
|
|
||||||
|
|
||||||
class ProcessSupervisor
|
class ProcessSupervisor
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1460,7 +1460,8 @@ Ext.onReady ( function() {
|
|||||||
var APP_UID = optionMenuReassignGlobal.APP_UID;
|
var APP_UID = optionMenuReassignGlobal.APP_UID;
|
||||||
var DEL_INDEX = optionMenuReassignGlobal.DEL_INDEX;
|
var DEL_INDEX = optionMenuReassignGlobal.DEL_INDEX;
|
||||||
|
|
||||||
var rowSelected = Ext.getCmp('reassignGrid').getSelectionModel().getSelected();
|
var rowSelected = Ext.getCmp("grdpnlUsersToReassign").getSelectionModel().getSelected();
|
||||||
|
|
||||||
if( rowSelected ) {
|
if( rowSelected ) {
|
||||||
PMExt.confirm(_('ID_CONFIRM'), _('ID_REASSIGN_CONFIRM'), function(){
|
PMExt.confirm(_('ID_CONFIRM'), _('ID_REASSIGN_CONFIRM'), function(){
|
||||||
var loadMask = new Ext.LoadMask(winReassignInCasesList.getEl(), {msg: _('ID_PROCESSING')});
|
var loadMask = new Ext.LoadMask(winReassignInCasesList.getEl(), {msg: _('ID_PROCESSING')});
|
||||||
@@ -1500,6 +1501,8 @@ Ext.onReady ( function() {
|
|||||||
|
|
||||||
//optionMenuPause.setMinValue('2010-11-04');
|
//optionMenuPause.setMinValue('2010-11-04');
|
||||||
|
|
||||||
|
var loadMaskUsersToReassign = new Ext.LoadMask(Ext.getBody(), {msg: _("ID_LOADING_GRID")});
|
||||||
|
|
||||||
var optionMenuReassignGlobal = {};
|
var optionMenuReassignGlobal = {};
|
||||||
optionMenuReassignGlobal.APP_UID = "";
|
optionMenuReassignGlobal.APP_UID = "";
|
||||||
optionMenuReassignGlobal.DEL_INDEX = "";
|
optionMenuReassignGlobal.DEL_INDEX = "";
|
||||||
@@ -1548,83 +1551,156 @@ Ext.onReady ( function() {
|
|||||||
optionMenuReassignGlobal.APP_UID = APP_UID;
|
optionMenuReassignGlobal.APP_UID = APP_UID;
|
||||||
optionMenuReassignGlobal.DEL_INDEX = DEL_INDEX;
|
optionMenuReassignGlobal.DEL_INDEX = DEL_INDEX;
|
||||||
if( rowSelected ){
|
if( rowSelected ){
|
||||||
var store = new Ext.data.Store( {
|
//Variables
|
||||||
autoLoad: true,
|
var pageSizeUsersToReassign = 10;
|
||||||
proxy : new Ext.data.HttpProxy({
|
|
||||||
url: 'casesList_Ajax?actionAjax=getUsersToReassign&TAS_UID='+TAS_UID
|
//Stores
|
||||||
|
var storeUsersToReassign = new Ext.data.Store({
|
||||||
|
proxy: new Ext.data.HttpProxy({
|
||||||
|
url: "casesList_Ajax",
|
||||||
|
method: "POST"
|
||||||
}),
|
}),
|
||||||
reader : new Ext.data.JsonReader( {
|
|
||||||
root: 'data',
|
reader: new Ext.data.JsonReader({
|
||||||
fields : [
|
root: "resultRoot",
|
||||||
{name : 'USR_UID'},
|
totalProperty: "resultTotal",
|
||||||
{name : 'USR_USERNAME'},
|
fields: [
|
||||||
{name : 'USR_FIRSTNAME'},
|
{name : "USR_UID"},
|
||||||
{name : 'USR_LASTNAME'}
|
{name : "USR_USERNAME"},
|
||||||
|
{name : "USR_FIRSTNAME"},
|
||||||
|
{name : "USR_LASTNAME"}
|
||||||
]
|
]
|
||||||
})
|
}),
|
||||||
|
|
||||||
|
remoteSort: true,
|
||||||
|
|
||||||
|
listeners: {
|
||||||
|
beforeload: function (store)
|
||||||
|
{
|
||||||
|
winReassignInCasesList.setDisabled(true);
|
||||||
|
|
||||||
|
loadMaskUsersToReassign.show();
|
||||||
|
|
||||||
|
this.baseParams = {
|
||||||
|
actionAjax: "getUsersToReassign",
|
||||||
|
taskUid: TAS_UID,
|
||||||
|
search: Ext.getCmp("txtSearchUsersToReassign").getValue(),
|
||||||
|
pageSize: pageSizeUsersToReassign
|
||||||
|
};
|
||||||
|
},
|
||||||
|
load: function (store, record, opt)
|
||||||
|
{
|
||||||
|
winReassignInCasesList.setDisabled(false);
|
||||||
|
|
||||||
|
loadMaskUsersToReassign.hide();
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var grid = new Ext.grid.GridPanel( {
|
//Components
|
||||||
id: 'reassignGrid',
|
var pagingUsersToReassign = new Ext.PagingToolbar({
|
||||||
height:300,
|
id: "pagingUsersToReassign",
|
||||||
width:'300',
|
|
||||||
title : '',
|
pageSize: pageSizeUsersToReassign,
|
||||||
stateful : true,
|
store: storeUsersToReassign,
|
||||||
stateId : 'gridCasesList',
|
displayInfo: true,
|
||||||
|
displayMsg: _("ID_DISPLAY_ITEMS"),
|
||||||
|
emptyMsg: _("ID_NO_RECORDS_FOUND")
|
||||||
|
});
|
||||||
|
|
||||||
|
var cmodelUsersToReassign = new Ext.grid.ColumnModel({
|
||||||
|
defaults: {
|
||||||
|
width: 200,
|
||||||
|
sortable: true
|
||||||
|
},
|
||||||
|
columns: [
|
||||||
|
{id: "USR_UID", dataIndex: "USR_UID", hidden: true, hideable: false},
|
||||||
|
{id: "USR_FIRSTNAME", dataIndex: "USR_FIRSTNAME", header: _("ID_FIRSTNAME"), width: 300},
|
||||||
|
{id: "USR_LASTNAME", dataIndex: "USR_LASTNAME", header: _("ID_LASTNAME"), width: 300}
|
||||||
|
]
|
||||||
|
});
|
||||||
|
|
||||||
|
var smodelUsersToReassign = new Ext.grid.RowSelectionModel({
|
||||||
|
singleSelect: true
|
||||||
|
});
|
||||||
|
|
||||||
|
var grdpnlUsersToReassign = new Ext.grid.GridPanel({
|
||||||
|
id: "grdpnlUsersToReassign",
|
||||||
|
|
||||||
|
store: storeUsersToReassign,
|
||||||
|
colModel: cmodelUsersToReassign,
|
||||||
|
selModel: smodelUsersToReassign,
|
||||||
|
|
||||||
|
columnLines: true,
|
||||||
|
viewConfig: {forceFit: true},
|
||||||
enableColumnResize: true,
|
enableColumnResize: true,
|
||||||
enableHdMenu: true,
|
enableHdMenu: true,
|
||||||
frame:false,
|
|
||||||
cls : 'grid_with_checkbox',
|
|
||||||
columnLines: true,
|
|
||||||
|
|
||||||
viewConfig: {
|
tbar: [
|
||||||
forceFit:true
|
|
||||||
},
|
|
||||||
|
|
||||||
cm: new Ext.grid.ColumnModel({
|
|
||||||
defaults: {
|
|
||||||
width: 200,
|
|
||||||
sortable: true
|
|
||||||
},
|
|
||||||
columns: [
|
|
||||||
{id:'USR_UID', dataIndex: 'USR_UID', hidden:true, hideable:false},
|
|
||||||
{header: _('ID_FIRSTNAME'), dataIndex: 'USR_FIRSTNAME', width: 300},
|
|
||||||
{header: _('ID_LASTNAME'), dataIndex: 'USR_LASTNAME', width: 300}
|
|
||||||
]
|
|
||||||
}),
|
|
||||||
|
|
||||||
store: store,
|
|
||||||
|
|
||||||
tbar:[
|
|
||||||
{
|
{
|
||||||
text:_('ID_REASSIGN'),
|
text: _("ID_REASSIGN"),
|
||||||
iconCls: 'ICON_CASES_TO_REASSIGN',
|
iconCls: "ICON_CASES_TO_REASSIGN",
|
||||||
handler: function(){
|
|
||||||
//Actions.reassignCase
|
handler: function ()
|
||||||
|
{
|
||||||
reassingCaseToUser();
|
reassingCaseToUser();
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"->",
|
||||||
|
{
|
||||||
|
xtype: "textfield",
|
||||||
|
id: "txtSearchUsersToReassign",
|
||||||
|
|
||||||
|
emptyText: _("ID_EMPTY_SEARCH"),
|
||||||
|
width: 150,
|
||||||
|
allowBlank: true,
|
||||||
|
|
||||||
|
listeners: {
|
||||||
|
specialkey: function (f, e)
|
||||||
|
{
|
||||||
|
if (e.getKey() == e.ENTER) {
|
||||||
|
pagingUsersToReassign.moveFirst();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "X",
|
||||||
|
ctCls: "pm_search_x_button",
|
||||||
|
|
||||||
|
handler: function ()
|
||||||
|
{
|
||||||
|
Ext.getCmp("txtSearchUsersToReassign").reset();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: _("ID_SEARCH"),
|
||||||
|
|
||||||
|
handler: function ()
|
||||||
|
{
|
||||||
|
pagingUsersToReassign.moveFirst();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
listeners: {
|
bbar: pagingUsersToReassign,
|
||||||
//rowdblclick: openCase,
|
|
||||||
render: function(){
|
title: ""
|
||||||
this.loadMask = new Ext.LoadMask(this.body, {msg:_('ID_LOADING')});
|
|
||||||
this.ownerCt.doLayout();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
winReassignInCasesList = new Ext.Window({
|
winReassignInCasesList = new Ext.Window({
|
||||||
title: '',
|
title: '',
|
||||||
width: 450,
|
width: 450,
|
||||||
height: 280,
|
height: 350,
|
||||||
layout:'fit',
|
layout:'fit',
|
||||||
autoScroll:true,
|
autoScroll:true,
|
||||||
modal: true,
|
modal: true,
|
||||||
maximizable: false,
|
maximizable: false,
|
||||||
items: [grid]
|
items: [grdpnlUsersToReassign]
|
||||||
});
|
});
|
||||||
|
|
||||||
winReassignInCasesList.show();
|
winReassignInCasesList.show();
|
||||||
|
|
||||||
|
grdpnlUsersToReassign.store.load();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -926,82 +926,153 @@ Ext.onReady(function(){
|
|||||||
|
|
||||||
Actions.getUsersToReassign = function()
|
Actions.getUsersToReassign = function()
|
||||||
{
|
{
|
||||||
var store = new Ext.data.Store( {
|
var loadMaskUsersToReassign = new Ext.LoadMask(Ext.getBody(), {msg: _("ID_LOADING_GRID")});
|
||||||
autoLoad: true,
|
|
||||||
proxy : new Ext.data.HttpProxy({
|
//Variables
|
||||||
url: 'ajaxListener?action=getUsersToReassign'
|
var pageSizeUsersToReassign = 10;
|
||||||
}),
|
|
||||||
reader : new Ext.data.JsonReader( {
|
//Stores
|
||||||
root: 'data',
|
var storeUsersToReassign = new Ext.data.Store({
|
||||||
fields : [
|
proxy: new Ext.data.HttpProxy({
|
||||||
{name : 'USR_UID'},
|
url: "ajaxListener",
|
||||||
{name : 'USR_USERNAME'},
|
method: "POST"
|
||||||
{name : 'USR_FIRSTNAME'},
|
}),
|
||||||
{name : 'USR_LASTNAME'}
|
|
||||||
]
|
reader: new Ext.data.JsonReader({
|
||||||
})
|
root: "resultRoot",
|
||||||
|
totalProperty: "resultTotal",
|
||||||
|
fields: [
|
||||||
|
{name : "USR_UID"},
|
||||||
|
{name : "USR_USERNAME"},
|
||||||
|
{name : "USR_FIRSTNAME"},
|
||||||
|
{name : "USR_LASTNAME"}
|
||||||
|
]
|
||||||
|
}),
|
||||||
|
|
||||||
|
remoteSort: true,
|
||||||
|
|
||||||
|
listeners: {
|
||||||
|
beforeload: function (store)
|
||||||
|
{
|
||||||
|
winReassignInCasesList.setDisabled(true);
|
||||||
|
|
||||||
|
loadMaskUsersToReassign.show();
|
||||||
|
|
||||||
|
this.baseParams = {
|
||||||
|
action: "getUsersToReassign",
|
||||||
|
search: Ext.getCmp("txtSearchUsersToReassign").getValue(),
|
||||||
|
pageSize: pageSizeUsersToReassign
|
||||||
|
};
|
||||||
|
},
|
||||||
|
load: function (store, record, opt)
|
||||||
|
{
|
||||||
|
winReassignInCasesList.setDisabled(false);
|
||||||
|
|
||||||
|
loadMaskUsersToReassign.hide();
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var grid = new Ext.grid.GridPanel( {
|
//Components
|
||||||
id: 'reassignGrid',
|
var pagingUsersToReassign = new Ext.PagingToolbar({
|
||||||
height:300,
|
id: "pagingUsersToReassign",
|
||||||
width:'300',
|
|
||||||
title : '',
|
|
||||||
stateful : true,
|
|
||||||
stateId : 'gridCasesOpen',
|
|
||||||
enableColumnResize: true,
|
|
||||||
enableHdMenu: true,
|
|
||||||
frame:false,
|
|
||||||
cls : 'grid_with_checkbox',
|
|
||||||
columnLines: true,
|
|
||||||
|
|
||||||
viewConfig: {
|
pageSize: pageSizeUsersToReassign,
|
||||||
forceFit:true
|
store: storeUsersToReassign,
|
||||||
},
|
displayInfo: true,
|
||||||
|
displayMsg: _("ID_DISPLAY_ITEMS"),
|
||||||
|
emptyMsg: _("ID_NO_RECORDS_FOUND")
|
||||||
|
});
|
||||||
|
|
||||||
cm: new Ext.grid.ColumnModel({
|
var cmodelUsersToReassign = new Ext.grid.ColumnModel({
|
||||||
defaults: {
|
defaults: {
|
||||||
width: 200,
|
width: 200,
|
||||||
sortable: true
|
sortable: true
|
||||||
},
|
},
|
||||||
columns: [
|
columns: [
|
||||||
{id:'USR_UID', dataIndex: 'USR_UID', hidden:true, hideable:false},
|
{id: "USR_UID", dataIndex: "USR_UID", hidden: true, hideable: false},
|
||||||
{header: _('ID_USER_NAME'), dataIndex: 'USR_USERNAME', width: 300},
|
{id: "USR_FIRSTNAME", dataIndex: "USR_FIRSTNAME", header: _("ID_FIRSTNAME"), width: 300},
|
||||||
{header: _('ID_FIRSTNAME'), dataIndex: 'USR_FIRSTNAME', width: 300},
|
{id: "USR_LASTNAME", dataIndex: "USR_LASTNAME", header: _("ID_LASTNAME"), width: 300}
|
||||||
{header: _('ID_LASTNAME'), dataIndex: 'USR_LASTNAME', width: 300}
|
|
||||||
]
|
]
|
||||||
}),
|
|
||||||
sm: new Ext.grid.RowSelectionModel({singleSelect: true}),
|
|
||||||
store: store,
|
|
||||||
|
|
||||||
tbar:[
|
|
||||||
{
|
|
||||||
text:_('ID_REASSIGN'),
|
|
||||||
iconCls: 'ICON_CASES_TO_REASSIGN',
|
|
||||||
handler: Actions.reassignCase
|
|
||||||
}
|
|
||||||
],
|
|
||||||
listeners: {
|
|
||||||
//rowdblclick: openCase,
|
|
||||||
render: function(){
|
|
||||||
this.loadMask = new Ext.LoadMask(this.body, {msg:_('ID_LOADING')});
|
|
||||||
this.ownerCt.doLayout();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
var win = new Ext.Window({
|
var smodelUsersToReassign = new Ext.grid.RowSelectionModel({
|
||||||
|
singleSelect: true
|
||||||
|
});
|
||||||
|
|
||||||
|
var grdpnlUsersToReassign = new Ext.grid.GridPanel({
|
||||||
|
id: "grdpnlUsersToReassign",
|
||||||
|
|
||||||
|
store: storeUsersToReassign,
|
||||||
|
colModel: cmodelUsersToReassign,
|
||||||
|
selModel: smodelUsersToReassign,
|
||||||
|
|
||||||
|
columnLines: true,
|
||||||
|
viewConfig: {forceFit: true},
|
||||||
|
enableColumnResize: true,
|
||||||
|
enableHdMenu: true,
|
||||||
|
|
||||||
|
tbar: [
|
||||||
|
{
|
||||||
|
text: _("ID_REASSIGN"),
|
||||||
|
iconCls: "ICON_CASES_TO_REASSIGN",
|
||||||
|
|
||||||
|
handler: Actions.reassignCase
|
||||||
|
},
|
||||||
|
"->",
|
||||||
|
{
|
||||||
|
xtype: "textfield",
|
||||||
|
id: "txtSearchUsersToReassign",
|
||||||
|
|
||||||
|
emptyText: _("ID_EMPTY_SEARCH"),
|
||||||
|
width: 150,
|
||||||
|
allowBlank: true,
|
||||||
|
|
||||||
|
listeners: {
|
||||||
|
specialkey: function (f, e)
|
||||||
|
{
|
||||||
|
if (e.getKey() == e.ENTER) {
|
||||||
|
pagingUsersToReassign.moveFirst();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "X",
|
||||||
|
ctCls: "pm_search_x_button",
|
||||||
|
|
||||||
|
handler: function ()
|
||||||
|
{
|
||||||
|
Ext.getCmp("txtSearchUsersToReassign").reset();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: _("ID_SEARCH"),
|
||||||
|
|
||||||
|
handler: function ()
|
||||||
|
{
|
||||||
|
pagingUsersToReassign.moveFirst();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
bbar: pagingUsersToReassign,
|
||||||
|
|
||||||
|
title: ""
|
||||||
|
});
|
||||||
|
|
||||||
|
var winReassignInCasesList = new Ext.Window({
|
||||||
title: '',
|
title: '',
|
||||||
width: 450,
|
width: 450,
|
||||||
height: 280,
|
height: 350,
|
||||||
layout:'fit',
|
layout:'fit',
|
||||||
autoScroll:true,
|
autoScroll:true,
|
||||||
modal: true,
|
modal: true,
|
||||||
resizable: false,
|
resizable: false,
|
||||||
maximizable: false,
|
maximizable: false,
|
||||||
items: [grid]
|
items: [grdpnlUsersToReassign]
|
||||||
});
|
});
|
||||||
Ext.Ajax.request({
|
|
||||||
|
Ext.Ajax.request({
|
||||||
url : 'ajaxListener' ,
|
url : 'ajaxListener' ,
|
||||||
params : {action : 'verifySession'},
|
params : {action : 'verifySession'},
|
||||||
success: function ( result, request ) {
|
success: function ( result, request ) {
|
||||||
@@ -1026,7 +1097,9 @@ Ext.onReady(function(){
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
win.show();
|
winReassignInCasesList.show();
|
||||||
|
|
||||||
|
grdpnlUsersToReassign.store.load();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
failure: function ( result, request) {
|
failure: function ( result, request) {
|
||||||
@@ -1039,7 +1112,8 @@ Ext.onReady(function(){
|
|||||||
|
|
||||||
Actions.reassignCase = function()
|
Actions.reassignCase = function()
|
||||||
{
|
{
|
||||||
var rowSelected = Ext.getCmp('reassignGrid').getSelectionModel().getSelected();
|
var rowSelected = Ext.getCmp("grdpnlUsersToReassign").getSelectionModel().getSelected();
|
||||||
|
|
||||||
if( rowSelected ) {
|
if( rowSelected ) {
|
||||||
PMExt.confirm(_('ID_CONFIRM'), _('ID_REASSIGN_CONFIRM'), function(){
|
PMExt.confirm(_('ID_CONFIRM'), _('ID_REASSIGN_CONFIRM'), function(){
|
||||||
Ext.Ajax.request({
|
Ext.Ajax.request({
|
||||||
|
|||||||
Reference in New Issue
Block a user