HOR-509 "Departaments> Al dar click en todos para asignar..." SOLVED
Issue:
Departaments> Al dar click en todos para asignar usuarios en Departamentos tarda demasiado y sale un error
Cause:
El codigo en la seccion "assignedUsers" y "availableUsers" en departments_Ajax.php no son optimos
Solution:
- Se implemento el metodo \ProcessMaker\BusinessModel\Department::getUsers() (Back-End)
- Se agrego el pager a los grids en ADMIN>Users>Departments>Users (Front-End)
This commit is contained in:
@@ -63,6 +63,11 @@ $oHeadPublisher->addContent( 'departments/departmentUsers' ); //adding a html fi
|
|||||||
G::LoadClass( 'configuration' );
|
G::LoadClass( 'configuration' );
|
||||||
$c = new Configurations();
|
$c = new Configurations();
|
||||||
|
|
||||||
|
$arrayConfigPage = $c->getConfiguration('departmentUsersList', 'pageSize', null, $_SESSION['USER_LOGGED']);
|
||||||
|
|
||||||
|
$arrayConfig = [];
|
||||||
|
$arrayConfig['pageSize'] = (isset($arrayConfigPage['pageSize']))? $arrayConfigPage['pageSize'] : 20;
|
||||||
|
|
||||||
$dep = new Department();
|
$dep = new Department();
|
||||||
$dep->Load( $_GET['dUID'] );
|
$dep->Load( $_GET['dUID'] );
|
||||||
|
|
||||||
@@ -73,6 +78,7 @@ $depart['DEP_MANAGER'] = $dep->getDepManager();
|
|||||||
|
|
||||||
$oHeadPublisher->assign( 'DEPARTMENT', $depart );
|
$oHeadPublisher->assign( 'DEPARTMENT', $depart );
|
||||||
$oHeadPublisher->assign( 'FORMATS', $c->getFormats() );
|
$oHeadPublisher->assign( 'FORMATS', $c->getFormats() );
|
||||||
|
$oHeadPublisher->assign('CONFIG', $arrayConfig);
|
||||||
|
|
||||||
G::RenderPage( 'publish', 'extJs' );
|
G::RenderPage( 'publish', 'extJs' );
|
||||||
|
|
||||||
|
|||||||
@@ -22,12 +22,6 @@
|
|||||||
* For more information, contact Colosa Inc, 2566 Le Jeune Rd.,
|
* For more information, contact Colosa Inc, 2566 Le Jeune Rd.,
|
||||||
* Coral Gables, FL, 33134, USA, or email info@colosa.com.
|
* Coral Gables, FL, 33134, USA, or email info@colosa.com.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
G::LoadSystem('inputfilter');
|
|
||||||
$filter = new InputFilter();
|
|
||||||
$_POST = $filter->xssFilterHard($_POST);
|
|
||||||
$_REQUEST = $filter->xssFilterHard($_REQUEST);
|
|
||||||
|
|
||||||
function LookForChildren ($parent, $level, $aDepUsers)
|
function LookForChildren ($parent, $level, $aDepUsers)
|
||||||
{
|
{
|
||||||
G::LoadClass( 'configuration' );
|
G::LoadClass( 'configuration' );
|
||||||
@@ -251,7 +245,7 @@ switch ($_POST['action']) {
|
|||||||
|
|
||||||
while ($oDataset->next()) {
|
while ($oDataset->next()) {
|
||||||
$aRow = $oDataset->getRow();
|
$aRow = $oDataset->getRow();
|
||||||
$managerName = $aRow['USR_USERNAME'] ? " - Department Manager: ".$aRow['USR_USERNAME'] : 'No Manager';
|
$managerName = $aRow['USR_USERNAME'] ? " - Department Manager: ".$aRow['USR_USERNAME'] : 'No Manager';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -282,55 +276,43 @@ switch ($_POST['action']) {
|
|||||||
echo '{success: true}';
|
echo '{success: true}';
|
||||||
break;
|
break;
|
||||||
case 'assignedUsers':
|
case 'assignedUsers':
|
||||||
$filter = isset( $_POST['textFilter'] ) ? $_POST['textFilter'] : '';
|
|
||||||
$dep_uid = $_REQUEST['dUID'];
|
|
||||||
$oDept = new Department();
|
|
||||||
$oDept->Load( $dep_uid );
|
|
||||||
$manager = $oDept->getDepManager();
|
|
||||||
$oCriteria = new Criteria( 'workflow' );
|
|
||||||
$oCriteria->addSelectColumn( UsersPeer::USR_UID );
|
|
||||||
$oCriteria->addSelectColumn( UsersPeer::USR_USERNAME );
|
|
||||||
$oCriteria->addSelectColumn( UsersPeer::USR_FIRSTNAME );
|
|
||||||
$oCriteria->addSelectColumn( UsersPeer::USR_LASTNAME );
|
|
||||||
$oCriteria->addSelectColumn( UsersPeer::USR_STATUS );
|
|
||||||
$oCriteria->add( UsersPeer::DEP_UID, '' );
|
|
||||||
$oCriteria->add( UsersPeer::USR_STATUS, 'CLOSED', Criteria::NOT_EQUAL );
|
|
||||||
if ($filter != '') {
|
|
||||||
$oCriteria->add( $oCriteria->getNewCriterion( UsersPeer::USR_USERNAME, '%' . $filter . '%', Criteria::LIKE )->addOr( $oCriteria->getNewCriterion( UsersPeer::USR_FIRSTNAME, '%' . $filter . '%', Criteria::LIKE )->addOr( $oCriteria->getNewCriterion( UsersPeer::USR_LASTNAME, '%' . $filter . '%', Criteria::LIKE ) ) ) );
|
|
||||||
}
|
|
||||||
$oCriteria->add( UsersPeer::DEP_UID, $dep_uid );
|
|
||||||
$oDataset = UsersPeer::doSelectRS( $oCriteria );
|
|
||||||
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
|
|
||||||
$aUsers = array ();
|
|
||||||
while ($oDataset->next()) {
|
|
||||||
$aUsers[] = $oDataset->getRow();
|
|
||||||
$index = sizeof( $aUsers ) - 1;
|
|
||||||
$aUsers[$index]['USR_SUPERVISOR'] = ($manager == $aUsers[$index]['USR_UID']) ? true : false;
|
|
||||||
}
|
|
||||||
echo '{users:' . G::json_encode( $aUsers ) . '}';
|
|
||||||
break;
|
|
||||||
case 'availableUsers':
|
case 'availableUsers':
|
||||||
$filter = isset( $_POST['textFilter'] ) ? $_POST['textFilter'] : '';
|
$response = [];
|
||||||
$dep_uid = $_REQUEST['dUID'];
|
|
||||||
$oCriteria = new Criteria( 'workflow' );
|
|
||||||
$oCriteria->addSelectColumn( UsersPeer::USR_UID );
|
|
||||||
$oCriteria->addSelectColumn( UsersPeer::USR_USERNAME );
|
|
||||||
$oCriteria->addSelectColumn( UsersPeer::USR_FIRSTNAME );
|
|
||||||
$oCriteria->addSelectColumn( UsersPeer::USR_LASTNAME );
|
|
||||||
$oCriteria->addSelectColumn( UsersPeer::USR_STATUS );
|
|
||||||
$oCriteria->add( UsersPeer::DEP_UID, '' );
|
|
||||||
$oCriteria->add( UsersPeer::USR_STATUS, 'CLOSED', Criteria::NOT_EQUAL );
|
|
||||||
|
|
||||||
if ($filter != '') {
|
try {
|
||||||
$oCriteria->add( $oCriteria->getNewCriterion( UsersPeer::USR_USERNAME, '%' . $filter . '%', Criteria::LIKE )->addOr( $oCriteria->getNewCriterion( UsersPeer::USR_FIRSTNAME, '%' . $filter . '%', Criteria::LIKE )->addOr( $oCriteria->getNewCriterion( UsersPeer::USR_LASTNAME, '%' . $filter . '%', Criteria::LIKE ) ) ) );
|
$option = $_POST['option'];
|
||||||
|
$departmentUid = $_POST['departmentUid'];
|
||||||
|
|
||||||
|
$pageSize = $_POST['pageSize'];
|
||||||
|
$filter = $_POST['filter'];
|
||||||
|
|
||||||
|
$sortField = (isset($_POST['sort']) && $_POST['sort'] != 'USR_USERNAME')? $_POST['sort']: '';
|
||||||
|
$sortDir = (isset($_POST['dir']))? $_POST['dir']: 'ASC';
|
||||||
|
$start = (isset($_POST['start']))? $_POST['start']: 0;
|
||||||
|
$limit = (isset($_POST['limit']))? $_POST['limit']: $pageSize;
|
||||||
|
|
||||||
|
$department = new \ProcessMaker\BusinessModel\Department();
|
||||||
|
|
||||||
|
$result = $department->getUsers(
|
||||||
|
$departmentUid,
|
||||||
|
$option,
|
||||||
|
['filter' => $filter, 'filterOption' => ''],
|
||||||
|
$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();
|
||||||
}
|
}
|
||||||
$oDataset = UsersPeer::doSelectRS( $oCriteria );
|
|
||||||
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
|
echo G::json_encode($response);
|
||||||
$aUsers = array ();
|
|
||||||
while ($oDataset->next()) {
|
|
||||||
$aUsers[] = $oDataset->getRow();
|
|
||||||
}
|
|
||||||
echo '{users:' . G::json_encode( $aUsers ) . '}';
|
|
||||||
break;
|
break;
|
||||||
case 'assignDepartmentToUserMultiple':
|
case 'assignDepartmentToUserMultiple':
|
||||||
$DEP_UID = $_REQUEST['DEP_UID'];
|
$DEP_UID = $_REQUEST['DEP_UID'];
|
||||||
|
|||||||
@@ -146,95 +146,6 @@ class Department
|
|||||||
return $aDepts;
|
return $aDepts;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Get list for Assigned User
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @author Brayan Pereyra (Cochalo) <brayan@colosa.com>
|
|
||||||
* @copyright Colosa - Bolivia
|
|
||||||
*
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
public function getAssignedUser($dep_uid)
|
|
||||||
{
|
|
||||||
$dep_uid = Validator::depUid($dep_uid);
|
|
||||||
$oDept = new \Department();
|
|
||||||
$oDept->Load( $dep_uid );
|
|
||||||
$manager = $oDept->getDepManager();
|
|
||||||
$oCriteria = new \Criteria( 'workflow' );
|
|
||||||
$oCriteria->addSelectColumn( UsersPeer::USR_UID );
|
|
||||||
$oCriteria->addSelectColumn( UsersPeer::USR_USERNAME );
|
|
||||||
$oCriteria->addSelectColumn( UsersPeer::USR_FIRSTNAME );
|
|
||||||
$oCriteria->addSelectColumn( UsersPeer::USR_LASTNAME );
|
|
||||||
$oCriteria->addSelectColumn( UsersPeer::USR_STATUS );
|
|
||||||
$oCriteria->add( UsersPeer::DEP_UID, '' );
|
|
||||||
$oCriteria->add( UsersPeer::USR_STATUS, 'CLOSED', \Criteria::NOT_EQUAL );
|
|
||||||
$oCriteria->add( UsersPeer::DEP_UID, $dep_uid );
|
|
||||||
$oDataset = UsersPeer::doSelectRS( $oCriteria );
|
|
||||||
$oDataset->setFetchmode( \ResultSet::FETCHMODE_ASSOC );
|
|
||||||
$aUsers = array ();
|
|
||||||
while ($oDataset->next()) {
|
|
||||||
$dataTemp = $oDataset->getRow();
|
|
||||||
$aUsers[] = array_change_key_case($dataTemp, CASE_LOWER);
|
|
||||||
$index = sizeof( $aUsers ) - 1;
|
|
||||||
$aUsers[$index]['usr_supervisor'] = ($manager == $aUsers[$index]['usr_uid']) ? true : false;
|
|
||||||
}
|
|
||||||
return $aUsers;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get list for Available User
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @author Brayan Pereyra (Cochalo) <brayan@colosa.com>
|
|
||||||
* @copyright Colosa - Bolivia
|
|
||||||
*
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
public function getAvailableUser($dep_uid, $start = 0, $limit = 0, $search = '')
|
|
||||||
{
|
|
||||||
$dep_uid = Validator::depUid($dep_uid);
|
|
||||||
|
|
||||||
$start = (int)$start;
|
|
||||||
$start = abs($start);
|
|
||||||
if ($start != 0) {
|
|
||||||
$start+1;
|
|
||||||
}
|
|
||||||
|
|
||||||
$limit = (int)$limit;
|
|
||||||
$limit = abs($limit);
|
|
||||||
if ($limit == 0) {
|
|
||||||
$limit = 25;
|
|
||||||
} else {
|
|
||||||
$limit = (int)$limit;
|
|
||||||
}
|
|
||||||
|
|
||||||
$oCriteria = new \Criteria( 'workflow' );
|
|
||||||
$oCriteria->addSelectColumn( UsersPeer::USR_UID );
|
|
||||||
$oCriteria->addSelectColumn( UsersPeer::USR_USERNAME );
|
|
||||||
$oCriteria->addSelectColumn( UsersPeer::USR_FIRSTNAME );
|
|
||||||
$oCriteria->addSelectColumn( UsersPeer::USR_LASTNAME );
|
|
||||||
$oCriteria->addSelectColumn( UsersPeer::USR_STATUS );
|
|
||||||
$oCriteria->add( UsersPeer::DEP_UID, '' );
|
|
||||||
$oCriteria->add( UsersPeer::USR_STATUS, 'CLOSED', \Criteria::NOT_EQUAL );
|
|
||||||
|
|
||||||
$oCriteria->setLimit( $limit );
|
|
||||||
$oCriteria->setOffset( $start );
|
|
||||||
|
|
||||||
if ($search != '') {
|
|
||||||
$oCriteria->add( $oCriteria->getNewCriterion( UsersPeer::USR_USERNAME, '%' . $search . '%', \Criteria::LIKE )->addOr( $oCriteria->getNewCriterion( UsersPeer::USR_FIRSTNAME, '%' . $search . '%', \Criteria::LIKE )->addOr( $oCriteria->getNewCriterion( UsersPeer::USR_LASTNAME, '%' . $search . '%', \Criteria::LIKE ) ) ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
$oDataset = UsersPeer::doSelectRS( $oCriteria );
|
|
||||||
$oDataset->setFetchmode( \ResultSet::FETCHMODE_ASSOC );
|
|
||||||
$aUsers = array ();
|
|
||||||
while ($oDataset->next()) {
|
|
||||||
$dataTemp = $oDataset->getRow();
|
|
||||||
$aUsers[] = array_change_key_case($dataTemp, CASE_LOWER);
|
|
||||||
}
|
|
||||||
return $aUsers;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Assign User to Department
|
* Assign User to Department
|
||||||
*
|
*
|
||||||
@@ -323,6 +234,217 @@ class Department
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get custom record
|
||||||
|
*
|
||||||
|
* @param array $record Record
|
||||||
|
*
|
||||||
|
* @return array Return an array with custom record
|
||||||
|
*/
|
||||||
|
private function __getUserCustomRecordFromRecord(array $record)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
$recordc = [
|
||||||
|
'usr_uid' => $record['USR_UID'],
|
||||||
|
'usr_username' => $record['USR_USERNAME'],
|
||||||
|
'usr_firstname' => $record['USR_FIRSTNAME'],
|
||||||
|
'usr_lastname' => $record['USR_LASTNAME'],
|
||||||
|
'usr_status' => $record['USR_STATUS']
|
||||||
|
];
|
||||||
|
|
||||||
|
if (isset($record['USR_SUPERVISOR'])) {
|
||||||
|
$recordc['usr_supervisor'] = $record['USR_SUPERVISOR'];
|
||||||
|
}
|
||||||
|
|
||||||
|
return $recordc;
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
throw $e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get all Users of a Department (Assigned/Available)
|
||||||
|
*
|
||||||
|
* @param string $departmentUid Unique id of Department
|
||||||
|
* @param string $option Option (ASSIGNED, AVAILABLE)
|
||||||
|
* @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
|
||||||
|
* @param bool $flagRecord Flag that set the "getting" of record
|
||||||
|
* @param bool $throwException Flag to throw the exception (This only if the parameters are invalid)
|
||||||
|
* (TRUE: throw the exception; FALSE: returns FALSE)
|
||||||
|
*
|
||||||
|
* @return array Return an array with all Users of a Department, ThrowTheException/FALSE otherwise
|
||||||
|
*/
|
||||||
|
public function getUsers(
|
||||||
|
$departmentUid,
|
||||||
|
$option,
|
||||||
|
array $arrayFilterData = null,
|
||||||
|
$sortField = null,
|
||||||
|
$sortDir = null,
|
||||||
|
$start = null,
|
||||||
|
$limit = null,
|
||||||
|
$flagRecord = true,
|
||||||
|
$throwException = true
|
||||||
|
) {
|
||||||
|
try {
|
||||||
|
$arrayUser = array();
|
||||||
|
|
||||||
|
$numRecTotal = 0;
|
||||||
|
|
||||||
|
//Verify data and Set variables
|
||||||
|
$flagFilter = !is_null($arrayFilterData) && is_array($arrayFilterData) && isset($arrayFilterData['filter']);
|
||||||
|
|
||||||
|
$result = \ProcessMaker\BusinessModel\Validator::validatePagerDataByPagerDefinition(
|
||||||
|
['$start' => $start, '$limit' => $limit],
|
||||||
|
['$start' => '$start', '$limit' => '$limit']
|
||||||
|
);
|
||||||
|
|
||||||
|
if ($result !== true) {
|
||||||
|
if ($throwException) {
|
||||||
|
throw new \Exception($result);
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$arrayDepartmentData = $this->getDepartmentRecordByPk(
|
||||||
|
$departmentUid, ['$departmentUid' => '$departmentUid'], $throwException
|
||||||
|
);
|
||||||
|
|
||||||
|
if ($arrayDepartmentData === false) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Set variables
|
||||||
|
$filterName = 'filter';
|
||||||
|
|
||||||
|
if ($flagFilter) {
|
||||||
|
$arrayAux = [
|
||||||
|
'' => 'filter',
|
||||||
|
'LEFT' => 'lfilter',
|
||||||
|
'RIGHT' => 'rfilter'
|
||||||
|
];
|
||||||
|
|
||||||
|
$filterName = $arrayAux[
|
||||||
|
(isset($arrayFilterData['filterOption']))? $arrayFilterData['filterOption'] : ''
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
//Get data
|
||||||
|
if (!is_null($limit) && (string)($limit) == '0') {
|
||||||
|
return [
|
||||||
|
'total' => $numRecTotal,
|
||||||
|
'start' => (int)((!is_null($start))? $start : 0),
|
||||||
|
'limit' => (int)((!is_null($limit))? $limit : 0),
|
||||||
|
$filterName => ($flagFilter)? $arrayFilterData['filter'] : '',
|
||||||
|
'data' => $arrayUser
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
//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->addSelectColumn(\UsersPeer::USR_STATUS);
|
||||||
|
|
||||||
|
$criteria->add(\UsersPeer::USR_STATUS, 'CLOSED', \Criteria::NOT_EQUAL);
|
||||||
|
|
||||||
|
switch ($option) {
|
||||||
|
case 'ASSIGNED':
|
||||||
|
$criteria->add(\UsersPeer::DEP_UID, $departmentUid, \Criteria::EQUAL);
|
||||||
|
break;
|
||||||
|
case 'AVAILABLE':
|
||||||
|
$criteria->add(\UsersPeer::DEP_UID, '', \Criteria::EQUAL);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($flagFilter && 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)))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Number records total
|
||||||
|
$numRecTotal = \UsersPeer::doCount($criteria);
|
||||||
|
|
||||||
|
//Query
|
||||||
|
$conf = new \Configurations();
|
||||||
|
$sortFieldDefault = \UsersPeer::TABLE_NAME . '.' . $conf->userNameFormatGetFirstFieldByUsersTable();
|
||||||
|
|
||||||
|
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 = $sortFieldDefault;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$sortField = $sortFieldDefault;
|
||||||
|
}
|
||||||
|
|
||||||
|
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()) {
|
||||||
|
$record = $rsCriteria->getRow();
|
||||||
|
|
||||||
|
switch ($option) {
|
||||||
|
case 'ASSIGNED':
|
||||||
|
$record['USR_SUPERVISOR'] = $record['USR_UID'] == $arrayDepartmentData['DEP_MANAGER'];
|
||||||
|
break;
|
||||||
|
case 'AVAILABLE':
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
$arrayUser[] = ($flagRecord)? $record : $this->__getUserCustomRecordFromRecord($record);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Return
|
||||||
|
return [
|
||||||
|
'total' => $numRecTotal,
|
||||||
|
'start' => (int)((!is_null($start))? $start : 0),
|
||||||
|
'limit' => (int)((!is_null($limit))? $limit : 0),
|
||||||
|
$filterName => ($flagFilter)? $arrayFilterData['filter'] : '',
|
||||||
|
'data' => $arrayUser
|
||||||
|
];
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
throw $e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Put Set Manager User
|
* Put Set Manager User
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -64,8 +64,12 @@ class Department extends Api
|
|||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
$oDepartment = new \ProcessMaker\BusinessModel\Department();
|
$oDepartment = new \ProcessMaker\BusinessModel\Department();
|
||||||
$response = $oDepartment->getAssignedUser($dep_uid);
|
|
||||||
return $response;
|
$response = $oDepartment->getUsers(
|
||||||
|
$dep_uid, 'ASSIGNED', null, null, null, null, null, false
|
||||||
|
);
|
||||||
|
|
||||||
|
return $response['data'];
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
|
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
|
||||||
}
|
}
|
||||||
@@ -82,12 +86,16 @@ class Department extends Api
|
|||||||
* @return array
|
* @return array
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public function doGetAvailableUser($dep_uid, $start = 0, $limit = 0, $search = '')
|
public function doGetAvailableUser($dep_uid, $start = null, $limit = null, $search = null)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
$oDepartment = new \ProcessMaker\BusinessModel\Department();
|
$oDepartment = new \ProcessMaker\BusinessModel\Department();
|
||||||
$response = $oDepartment->getAvailableUser($dep_uid, $start, $limit, $search);
|
|
||||||
return $response;
|
$response = $oDepartment->getUsers(
|
||||||
|
$dep_uid, 'AVAILABLE', ['filter' => $search, 'filterOption' => ''], null, null, $start, $limit, false
|
||||||
|
);
|
||||||
|
|
||||||
|
return $response['data'];
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
|
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,8 +20,6 @@ new Ext.KeyMap(document, {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var storeP;
|
|
||||||
var storeA;
|
|
||||||
var cmodelP;
|
var cmodelP;
|
||||||
var smodelA;
|
var smodelA;
|
||||||
var smodelP;
|
var smodelP;
|
||||||
@@ -45,7 +43,16 @@ var sw_func_auth;
|
|||||||
var sw_form_changed;
|
var sw_form_changed;
|
||||||
var sw_user_summary;
|
var sw_user_summary;
|
||||||
|
|
||||||
|
var pagingUser;
|
||||||
|
var pagingAvailableUser;
|
||||||
|
|
||||||
Ext.onReady(function(){
|
Ext.onReady(function(){
|
||||||
|
var loadMaskGridLoading = new Ext.LoadMask(Ext.getBody(), {msg: _("ID_LOADING_GRID")});
|
||||||
|
|
||||||
|
//Variables
|
||||||
|
var pageSizeU = parseInt(CONFIG.pageSize);
|
||||||
|
var pageSizeA = parseInt(CONFIG.pageSize);
|
||||||
|
|
||||||
sw_func_groups = false;
|
sw_func_groups = false;
|
||||||
//sw_func_reassign = false;
|
//sw_func_reassign = false;
|
||||||
sw_func_auth = false;
|
sw_func_auth = false;
|
||||||
@@ -63,7 +70,7 @@ Ext.onReady(function(){
|
|||||||
handler: CancelEditMembersAction
|
handler: CancelEditMembersAction
|
||||||
//hidden: true
|
//hidden: true
|
||||||
});
|
});
|
||||||
|
|
||||||
supervisorButton = new Ext.Action({
|
supervisorButton = new Ext.Action({
|
||||||
text: _('ID_SET_MANAGER'),
|
text: _('ID_SET_MANAGER'),
|
||||||
iconCls: 'button_menu_ext ss_sprite ss_user_edit',
|
iconCls: 'button_menu_ext ss_sprite ss_user_edit',
|
||||||
@@ -83,42 +90,164 @@ Ext.onReady(function(){
|
|||||||
iconCls: 'button_menu_ext ss_sprite ss_arrow_redo',
|
iconCls: 'button_menu_ext ss_sprite ss_arrow_redo',
|
||||||
handler: BackToUsers
|
handler: BackToUsers
|
||||||
});
|
});
|
||||||
|
|
||||||
contextMenu = new Ext.menu.Menu({
|
contextMenu = new Ext.menu.Menu({
|
||||||
items: [supervisorButton]
|
items: [supervisorButton]
|
||||||
});
|
});
|
||||||
|
|
||||||
storeP = new Ext.data.GroupingStore( {
|
//Stores
|
||||||
proxy : new Ext.data.HttpProxy({
|
var storePageSize = new Ext.data.SimpleStore({
|
||||||
url: 'departments_Ajax?action=assignedUsers&dUID=' + DEPARTMENT.DEP_UID
|
fields: ["size"],
|
||||||
}),
|
data: [["20"], ["30"], ["40"], ["50"], ["100"]],
|
||||||
reader : new Ext.data.JsonReader( {
|
autoLoad: true
|
||||||
root: 'users',
|
|
||||||
fields : [
|
|
||||||
{name : 'USR_UID'},
|
|
||||||
{name : 'USR_USERNAME'},
|
|
||||||
{name : 'USR_FIRSTNAME'},
|
|
||||||
{name : 'USR_LASTNAME'},
|
|
||||||
{name : 'USR_SUPERVISOR'},
|
|
||||||
{name : 'USR_STATUS'}
|
|
||||||
]
|
|
||||||
})
|
|
||||||
});
|
});
|
||||||
|
|
||||||
storeA = new Ext.data.GroupingStore( {
|
var storeUser = new Ext.data.Store({
|
||||||
proxy : new Ext.data.HttpProxy({
|
proxy: new Ext.data.HttpProxy({
|
||||||
url: 'departments_Ajax?action=availableUsers&dUID=' + DEPARTMENT.DEP_UID
|
url: "departments_Ajax",
|
||||||
}),
|
method: "POST"
|
||||||
reader : new Ext.data.JsonReader( {
|
}),
|
||||||
root: 'users',
|
|
||||||
fields : [
|
reader: new Ext.data.JsonReader({
|
||||||
{name : 'USR_UID'},
|
root: "resultRoot",
|
||||||
{name : 'USR_USERNAME'},
|
totalProperty: "resultTotal",
|
||||||
{name : 'USR_FIRSTNAME'},
|
fields: [
|
||||||
{name : 'USR_LASTNAME'},
|
{name: "USR_UID"},
|
||||||
{name : 'USR_STATUS'}
|
{name: "USR_USERNAME"},
|
||||||
]
|
{name: "USR_FIRSTNAME"},
|
||||||
})
|
{name: "USR_LASTNAME"},
|
||||||
|
{name: "USR_SUPERVISOR"},
|
||||||
|
{name: "USR_STATUS"}
|
||||||
|
]
|
||||||
|
}),
|
||||||
|
|
||||||
|
remoteSort: true,
|
||||||
|
|
||||||
|
listeners: {
|
||||||
|
beforeload: function (store)
|
||||||
|
{
|
||||||
|
loadMaskGridLoading.show();
|
||||||
|
|
||||||
|
this.baseParams = {
|
||||||
|
"option": "ASSIGNED",
|
||||||
|
"departmentUid": DEPARTMENT.DEP_UID,
|
||||||
|
"pageSize": pageSizeU,
|
||||||
|
"filter": searchTextP.getValue(),
|
||||||
|
"action": "assignedUsers"
|
||||||
|
};
|
||||||
|
},
|
||||||
|
load: function (store, record, opt)
|
||||||
|
{
|
||||||
|
loadMaskGridLoading.hide();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
var storeAvailableUser = new Ext.data.Store({
|
||||||
|
proxy: new Ext.data.HttpProxy({
|
||||||
|
url: "departments_Ajax",
|
||||||
|
method: "POST"
|
||||||
|
}),
|
||||||
|
|
||||||
|
reader: new Ext.data.JsonReader({
|
||||||
|
root: "resultRoot",
|
||||||
|
totalProperty: "resultTotal",
|
||||||
|
fields: [
|
||||||
|
{name: "USR_UID"},
|
||||||
|
{name: "USR_USERNAME"},
|
||||||
|
{name: "USR_FIRSTNAME"},
|
||||||
|
{name: "USR_LASTNAME"},
|
||||||
|
{name: "USR_STATUS"}
|
||||||
|
]
|
||||||
|
}),
|
||||||
|
|
||||||
|
remoteSort: true,
|
||||||
|
|
||||||
|
listeners: {
|
||||||
|
beforeload: function (store)
|
||||||
|
{
|
||||||
|
loadMaskGridLoading.show();
|
||||||
|
|
||||||
|
this.baseParams = {
|
||||||
|
"option": "AVAILABLE",
|
||||||
|
"departmentUid": DEPARTMENT.DEP_UID,
|
||||||
|
"pageSize": pageSizeA,
|
||||||
|
"filter": searchTextA.getValue(),
|
||||||
|
"action": "availableUsers"
|
||||||
|
};
|
||||||
|
},
|
||||||
|
load: function (store, record, opt)
|
||||||
|
{
|
||||||
|
loadMaskGridLoading.hide();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
//Components
|
||||||
|
var cboPageSizeUser = new Ext.form.ComboBox({
|
||||||
|
id: "cboPageSizeUser",
|
||||||
|
|
||||||
|
mode: "local",
|
||||||
|
triggerAction: "all",
|
||||||
|
store: storePageSize,
|
||||||
|
valueField: "size",
|
||||||
|
displayField: "size",
|
||||||
|
width: 50,
|
||||||
|
editable: false,
|
||||||
|
|
||||||
|
listeners: {
|
||||||
|
select: function (combo, record, index)
|
||||||
|
{
|
||||||
|
pageSizeU = parseInt(record.data["size"]);
|
||||||
|
|
||||||
|
pagingUser.pageSize = pageSizeU;
|
||||||
|
pagingUser.moveFirst();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
pagingUser = new Ext.PagingToolbar({
|
||||||
|
id: "pagingUser",
|
||||||
|
|
||||||
|
pageSize: pageSizeU,
|
||||||
|
store: storeUser,
|
||||||
|
displayInfo: true,
|
||||||
|
displayMsg: _("ID_GRID_PAGE_DISPLAYING_ITEMS"),
|
||||||
|
emptyMsg: _("ID_NO_RECORDS_FOUND"),
|
||||||
|
items: ["-", _("ID_PAGE_SIZE") + " ", cboPageSizeUser]
|
||||||
|
});
|
||||||
|
|
||||||
|
var cboPageSizeAvailableUser = new Ext.form.ComboBox({
|
||||||
|
id: "cboPageSizeAvailableUser",
|
||||||
|
|
||||||
|
mode: "local",
|
||||||
|
triggerAction: "all",
|
||||||
|
store: storePageSize,
|
||||||
|
valueField: "size",
|
||||||
|
displayField: "size",
|
||||||
|
width: 50,
|
||||||
|
editable: false,
|
||||||
|
|
||||||
|
listeners: {
|
||||||
|
select: function (combo, record, index)
|
||||||
|
{
|
||||||
|
pageSizeA = parseInt(record.data["size"]);
|
||||||
|
|
||||||
|
pagingAvailableUser.pageSize = pageSizeA;
|
||||||
|
pagingAvailableUser.moveFirst();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
pagingAvailableUser = new Ext.PagingToolbar({
|
||||||
|
id: "pagingAvailableUser",
|
||||||
|
|
||||||
|
pageSize: pageSizeA,
|
||||||
|
store: storeAvailableUser,
|
||||||
|
displayInfo: true,
|
||||||
|
displayMsg: _("ID_GRID_PAGE_DISPLAYING_ITEMS"),
|
||||||
|
emptyMsg: _("ID_NO_RECORDS_FOUND"),
|
||||||
|
items: ["-", _("ID_PAGE_SIZE") + " ", cboPageSizeAvailableUser]
|
||||||
});
|
});
|
||||||
|
|
||||||
cmodelP = new Ext.grid.ColumnModel({
|
cmodelP = new Ext.grid.ColumnModel({
|
||||||
@@ -214,7 +343,7 @@ Ext.onReady(function(){
|
|||||||
title : _('ID_AVAILABLE_USERS'),
|
title : _('ID_AVAILABLE_USERS'),
|
||||||
region : 'center',
|
region : 'center',
|
||||||
ddGroup : 'assignedGridDDGroup',
|
ddGroup : 'assignedGridDDGroup',
|
||||||
store : storeA,
|
store: storeAvailableUser,
|
||||||
cm : cmodelP,
|
cm : cmodelP,
|
||||||
sm : smodelA,
|
sm : smodelA,
|
||||||
enableDragDrop : true,
|
enableDragDrop : true,
|
||||||
@@ -232,7 +361,7 @@ Ext.onReady(function(){
|
|||||||
columnLines : false,
|
columnLines : false,
|
||||||
viewConfig : {forceFit:true},
|
viewConfig : {forceFit:true},
|
||||||
tbar: [cancelEditMembersButton,{xtype: 'tbfill'},'-',searchTextA,clearTextButtonA],
|
tbar: [cancelEditMembersButton,{xtype: 'tbfill'},'-',searchTextA,clearTextButtonA],
|
||||||
//bbar: [{xtype: 'tbfill'}, cancelEditMembersButton],
|
bbar: pagingAvailableUser,
|
||||||
listeners: {rowdblclick: AssignGroupsAction},
|
listeners: {rowdblclick: AssignGroupsAction},
|
||||||
hidden: true
|
hidden: true
|
||||||
});
|
});
|
||||||
@@ -241,7 +370,7 @@ Ext.onReady(function(){
|
|||||||
layout : 'fit',
|
layout : 'fit',
|
||||||
title : _('ID_ASSIGNED_USERS'),
|
title : _('ID_ASSIGNED_USERS'),
|
||||||
ddGroup : 'availableGridDDGroup',
|
ddGroup : 'availableGridDDGroup',
|
||||||
store : storeP,
|
store: storeUser,
|
||||||
cm : cmodelP,
|
cm : cmodelP,
|
||||||
sm : smodelP,
|
sm : smodelP,
|
||||||
enableDragDrop : true,
|
enableDragDrop : true,
|
||||||
@@ -259,21 +388,21 @@ Ext.onReady(function(){
|
|||||||
columnLines : false,
|
columnLines : false,
|
||||||
viewConfig : {forceFit:true},
|
viewConfig : {forceFit:true},
|
||||||
tbar: [editMembersButton,'-',supervisorButton, NoSupervisorButton,{xtype: 'tbfill'},'-',searchTextP,clearTextButtonP],
|
tbar: [editMembersButton,'-',supervisorButton, NoSupervisorButton,{xtype: 'tbfill'},'-',searchTextP,clearTextButtonP],
|
||||||
//bbar: [{xtype: 'tbfill'},editMembersButton],
|
bbar: pagingUser,
|
||||||
listeners: {rowdblclick: function(){
|
listeners: {rowdblclick: function(){
|
||||||
(availableGrid.hidden)? DoNothing() : RemoveGroupsAction();
|
(availableGrid.hidden)? DoNothing() : RemoveGroupsAction();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
assignedGrid.on('rowcontextmenu',
|
assignedGrid.on('rowcontextmenu',
|
||||||
function (grid, rowIndex, evt) {
|
function (grid, rowIndex, evt) {
|
||||||
var sm = grid.getSelectionModel();
|
var sm = grid.getSelectionModel();
|
||||||
sm.selectRow(rowIndex, sm.isSelected(rowIndex));
|
sm.selectRow(rowIndex, sm.isSelected(rowIndex));
|
||||||
},
|
},
|
||||||
this
|
this
|
||||||
);
|
);
|
||||||
|
|
||||||
assignedGrid.on('contextmenu', function(evt){evt.preventDefault();}, this);
|
assignedGrid.on('contextmenu', function(evt){evt.preventDefault();}, this);
|
||||||
assignedGrid.addListener('rowcontextmenu',onMessageContextMenu, this);
|
assignedGrid.addListener('rowcontextmenu',onMessageContextMenu, this);
|
||||||
|
|
||||||
@@ -315,12 +444,15 @@ Ext.onReady(function(){
|
|||||||
tbar: ['<b>'+_('ID_DEPARTMENT') + ' : ' + DEPARTMENT.DEP_TITLE + '</b>',{xtype: 'tbfill'},backButton]
|
tbar: ['<b>'+_('ID_DEPARTMENT') + ' : ' + DEPARTMENT.DEP_TITLE + '</b>',{xtype: 'tbfill'},backButton]
|
||||||
});
|
});
|
||||||
|
|
||||||
|
cboPageSizeUser.setValue(pageSizeU);
|
||||||
|
cboPageSizeAvailableUser.setValue(pageSizeA);
|
||||||
|
|
||||||
//LOAD ALL PANELS
|
//LOAD ALL PANELS
|
||||||
viewport = new Ext.Viewport({
|
viewport = new Ext.Viewport({
|
||||||
layout: 'border',
|
layout: 'border',
|
||||||
items: [northPanel, UsersPanel]
|
items: [northPanel, UsersPanel]
|
||||||
});
|
});
|
||||||
|
|
||||||
RefreshUsers();
|
RefreshUsers();
|
||||||
DDLoadUsers();
|
DDLoadUsers();
|
||||||
|
|
||||||
@@ -477,12 +609,12 @@ RemoveAllGroupsAction = function(){
|
|||||||
|
|
||||||
//Function DoSearch Available
|
//Function DoSearch Available
|
||||||
DoSearchA = function(){
|
DoSearchA = function(){
|
||||||
availableGrid.store.load({params: {textFilter: searchTextA.getValue()}});
|
pagingAvailableUser.moveFirst();
|
||||||
};
|
};
|
||||||
|
|
||||||
//Function DoSearch Assigned
|
//Function DoSearch Assigned
|
||||||
DoSearchP = function(){
|
DoSearchP = function(){
|
||||||
assignedGrid.store.load({params: {textFilter: searchTextP.getValue()}});
|
pagingUser.moveFirst();
|
||||||
};
|
};
|
||||||
|
|
||||||
//Load Grid By Default Available Members
|
//Load Grid By Default Available Members
|
||||||
@@ -516,11 +648,11 @@ CancelEditMembersAction = function(){
|
|||||||
if (rowsSelected.length == 1){
|
if (rowsSelected.length == 1){
|
||||||
supervisorButton.enable();
|
supervisorButton.enable();
|
||||||
NoSupervisorButton.enable();
|
NoSupervisorButton.enable();
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
supervisorButton.disable();
|
supervisorButton.disable();
|
||||||
NoSupervisorButton.disable();
|
NoSupervisorButton.disable();
|
||||||
}
|
}
|
||||||
UsersPanel.doLayout();
|
UsersPanel.doLayout();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user