Departments Manager Ext JS Migration Complete
This commit is contained in:
@@ -670,6 +670,19 @@ class RBAC
|
|||||||
return $this->rolesObj->getAllUsersByRole();
|
return $this->rolesObj->getAllUsersByRole();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* this function gets the number of users by department
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @author: Enrique Ponce de Leon <enrique@colosa.com>
|
||||||
|
*
|
||||||
|
* @return $this->rolesObj->getAllUsersByRole
|
||||||
|
*/
|
||||||
|
function getAllUsersByDepartment(){
|
||||||
|
return $this->rolesObj->getAllUsersByDepartment();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* this function gets roles code
|
* this function gets roles code
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -359,6 +359,23 @@ class Roles extends BaseRoles {
|
|||||||
return $aRoles;
|
return $aRoles;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Added by Enrique at Feb 10th, 2011
|
||||||
|
//Gets number of users by department
|
||||||
|
function getAllUsersByDepartment(){
|
||||||
|
$oCriteria = new Criteria('rbac');
|
||||||
|
$oCriteria->addSelectColumn(UsersPeer::DEP_UID);
|
||||||
|
$oCriteria->addSelectColumn('COUNT(*) AS CNT');
|
||||||
|
$oCriteria->addGroupByColumn(UsersPeer::DEP_UID);
|
||||||
|
$oDataset = UsersPeer::doSelectRS($oCriteria);
|
||||||
|
$oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
|
||||||
|
$aDepts = array();
|
||||||
|
while ($oDataset->next()){
|
||||||
|
$row = $oDataset->getRow();
|
||||||
|
$aDepts[$row['DEP_UID']] = $row['CNT'];
|
||||||
|
}
|
||||||
|
return $aDepts;
|
||||||
|
}
|
||||||
|
|
||||||
function getRoleUsers($ROL_UID, $filter='') {
|
function getRoleUsers($ROL_UID, $filter='') {
|
||||||
try {
|
try {
|
||||||
$criteria = new Criteria();
|
$criteria = new Criteria();
|
||||||
|
|||||||
@@ -22,6 +22,8 @@
|
|||||||
* Coral Gables, FL, 33134, USA, or email info@colosa.com.
|
* Coral Gables, FL, 33134, USA, or email info@colosa.com.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
G::LoadClass('configuration');
|
||||||
|
$c = new Configurations();
|
||||||
|
|
||||||
$access = $RBAC->userCanAccess('PM_USERS');
|
$access = $RBAC->userCanAccess('PM_USERS');
|
||||||
if( $access != 1 ){
|
if( $access != 1 ){
|
||||||
@@ -52,311 +54,17 @@ if (($RBAC_Response=$RBAC->userCanAccess("PM_USERS"))!=1) return $RBAC_Response;
|
|||||||
$G_ID_SUB_MENU_SELECTED = 'DEPARTMENTS';
|
$G_ID_SUB_MENU_SELECTED = 'DEPARTMENTS';
|
||||||
|
|
||||||
$G_PUBLISH = new Publisher;
|
$G_PUBLISH = new Publisher;
|
||||||
$oHeadPublisher =& headPublisher::getSingleton();
|
|
||||||
//$oHeadPublisher->addScriptFile('/jscore/departments/departments.js');
|
|
||||||
|
|
||||||
$G_PUBLISH->AddContent('view', 'departments/departments_Tree' );
|
$oHeadPublisher =& headPublisher::getSingleton();
|
||||||
$G_PUBLISH->AddContent('smarty', 'departments/departments_userList', '', '', array());
|
|
||||||
|
|
||||||
G::RenderPage( "publish-treeview",'blank' );
|
//$oHeadPublisher->usingExtJs('ux/Ext.ux.fileUploadField');
|
||||||
|
$oHeadPublisher->addExtJsScript('departments/departmentList', false); //adding a javascript file .js
|
||||||
|
$oHeadPublisher->addContent('departments/departmentList'); //adding a html file .html.
|
||||||
|
|
||||||
$departments_New = G::encryptlink('departments_New');
|
//$labels = G::getTranslations(Array('ID_DEPARTMENTS','ID_DELETE','ID_EDIT','ID_USERS','ID_ACTIVE','ID_INACTIVE','ID_SELECT_STATUS',
|
||||||
$departments_Edit = G::encryptlink('departments_Edit');
|
// 'ID_CLOSE','ID_SAVE','ID_DEPARTMENT_NAME','ID_STATUS'));
|
||||||
$departments_Delete = G::encryptlink('departments_Delete');
|
//
|
||||||
$departments_List = G::encryptlink('departments_List');
|
//$oHeadPublisher->assign('TRANSLATIONS', $labels);
|
||||||
$departments_AddUser = G::encryptlink('departments_AddUser');
|
$oHeadPublisher->assign('FORMATS',$c->getFormats());
|
||||||
$departments_AddManager = G::encryptlink('departments_AddManager');
|
G::RenderPage('publish', 'extJs');
|
||||||
$subdep_Edit = G::encryptlink('subdep_Edit');
|
|
||||||
$subdep_Delete = G::encryptlink('subdep_Delete');
|
|
||||||
?>
|
?>
|
||||||
<script>
|
|
||||||
|
|
||||||
|
|
||||||
var oAux = document.getElementById("publisherContent[0]");
|
|
||||||
oAux.id = "publisherContent[666]";
|
|
||||||
var currentGroup=false;
|
|
||||||
|
|
||||||
function saveUserGroup(sUser) {
|
|
||||||
|
|
||||||
var oRPC = new leimnud.module.rpc.xmlhttp({
|
|
||||||
url : '../groups/groups_Ajax',
|
|
||||||
async : false,
|
|
||||||
method: 'POST',
|
|
||||||
args : 'action=assignUser&GRP_UID=' + currentGroup + '&USR_UID=' + sUser
|
|
||||||
});
|
|
||||||
oRPC.make();
|
|
||||||
currentPopupWindow.remove();
|
|
||||||
selectGroup(currentGroup);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function saveUsers(){
|
|
||||||
if( checks_selected_ids.length == 0 ){
|
|
||||||
new leimnud.module.app.alert().make({label: G_STRINGS.ID_MSG_GROUPS_ADDCONFIRM});
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
//alert('action=assignAllUsers&DEP_UID=' + currentGroup + '&aUsers=' + checks_selected_ids);return;
|
|
||||||
var oRPC = new leimnud.module.rpc.xmlhttp({
|
|
||||||
url : '../departments/departments_Ajax',
|
|
||||||
async : false,
|
|
||||||
method: 'POST',
|
|
||||||
args : 'action=assignAllUsers&DEP_UID=' + currentGroup + '&aUsers=' + checks_selected_ids
|
|
||||||
});
|
|
||||||
resetChecks();
|
|
||||||
oRPC.make();
|
|
||||||
currentPopupWindow.remove();
|
|
||||||
selectDpto(currentGroup);
|
|
||||||
}
|
|
||||||
|
|
||||||
function resetChecks(){
|
|
||||||
checks_selected_ids.length = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
function selectDpto( uid ){
|
|
||||||
currentGroup = uid;
|
|
||||||
var oRPC = new leimnud.module.rpc.xmlhttp({
|
|
||||||
url : 'departments_Ajax',
|
|
||||||
args : 'action=showUsers&sDptoUID=' + uid
|
|
||||||
});
|
|
||||||
oRPC.callback = function(rpc) {
|
|
||||||
var scs = rpc.xmlhttp.responseText.extractScript();
|
|
||||||
document.getElementById('spanUsersList').innerHTML = rpc.xmlhttp.responseText;
|
|
||||||
scs.evalScript();
|
|
||||||
}.extend(this);
|
|
||||||
|
|
||||||
oRPC.make();
|
|
||||||
}
|
|
||||||
|
|
||||||
function addDepto() {
|
|
||||||
popupWindow('' , '<?=$departments_New?>' , 500 , 200 );
|
|
||||||
}
|
|
||||||
|
|
||||||
function addSubDepto(depUid){
|
|
||||||
popupWindow('' , '<?= $departments_New ?>?DEP_UID=' + encodeURIComponent( depUid ) , 500 , 200 );
|
|
||||||
}
|
|
||||||
|
|
||||||
function deleteDpto( uid ){
|
|
||||||
new leimnud.module.app.confirm().make({
|
|
||||||
label:"<?=G::LoadTranslation('ID_MSG_CONFIRM_DELETE_DEPARTMENT')?>",
|
|
||||||
action:function()
|
|
||||||
{
|
|
||||||
ajax_function('<?=$departments_Delete?>', 'empty', 'DEP_UID='+uid, "POST" );
|
|
||||||
refreshTree();
|
|
||||||
document.getElementById('spanUsersList').innerHTML = '';
|
|
||||||
}.extend(this)
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function addUserDpto( uid ) {
|
|
||||||
oPanel = new leimnud.module.panel();
|
|
||||||
oPanel.options = {
|
|
||||||
size :{w:400,h:512},
|
|
||||||
position:{x:0,y:0,center:true},
|
|
||||||
title : 'Add users to department ' + groupname,
|
|
||||||
theme :"processmaker",
|
|
||||||
statusBar:false,
|
|
||||||
control :{resize:false,roll:false,drag:true},
|
|
||||||
fx :{modal:true,opacity:true,blinkToFront:false,fadeIn:false,drag:true}
|
|
||||||
};
|
|
||||||
oPanel.events = {
|
|
||||||
remove: function() {
|
|
||||||
delete(oPanel);
|
|
||||||
//resetChecks();
|
|
||||||
}.extend(this)
|
|
||||||
};
|
|
||||||
oPanel.make();
|
|
||||||
oPanel.loader.show();
|
|
||||||
currentPopupWindow = oPanel;
|
|
||||||
var oRPC = new leimnud.module.rpc.xmlhttp({
|
|
||||||
url : '<?=$departments_AddUser?>?UID='+uid,
|
|
||||||
args: ''
|
|
||||||
});
|
|
||||||
oRPC.callback = function(rpc) {
|
|
||||||
oPanel.loader.hide();
|
|
||||||
var scs=rpc.xmlhttp.responseText.extractScript();
|
|
||||||
oPanel.addContent(rpc.xmlhttp.responseText);
|
|
||||||
scs.evalScript();
|
|
||||||
var inputs = document.getElementsByTagName("input");
|
|
||||||
for(i=0; i<inputs.length; i++){
|
|
||||||
if( inputs[i].type == "checkbox" ){
|
|
||||||
try{
|
|
||||||
inputs[i].onclick = function(){
|
|
||||||
if(this.checked){
|
|
||||||
checks_selected_ids.push(this.value);
|
|
||||||
} else {
|
|
||||||
checks_selected_ids.deleteByValue(this.value);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}catch(e){alert(e)}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}.extend(this);
|
|
||||||
oRPC.make();
|
|
||||||
}
|
|
||||||
|
|
||||||
function addDepManager(suid, sDepParent){
|
|
||||||
var k = new leimnud.module.rpc.xmlhttp({
|
|
||||||
url : '../departments/departments_Ajax',
|
|
||||||
async : true,
|
|
||||||
method: 'POST',
|
|
||||||
args : 'action=getDepManager&sDptoUID=' + suid
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
k.callback = function(rpc){
|
|
||||||
if(rpc.xmlhttp.responseText>0){
|
|
||||||
msgBox("this department has its manager","alert");return false;
|
|
||||||
}else{
|
|
||||||
popupWindow('' , '<?=$departments_AddManager?>?SUID=' + encodeURIComponent( suid )+'&SDEPPARENT=' + encodeURIComponent( sDepParent )+ '+&nobug' , 500 , 200 );
|
|
||||||
}
|
|
||||||
}.extend(this);
|
|
||||||
k.make();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function savedepto( form ) {
|
|
||||||
var actionform='departments_Save';
|
|
||||||
ajax_post( actionform, form, 'POST' );
|
|
||||||
currentPopupWindow.remove();
|
|
||||||
refreshTree();
|
|
||||||
}
|
|
||||||
|
|
||||||
function savedeptomain( form ) {//alert(form.action);return;
|
|
||||||
var formAction ='departments_Save';
|
|
||||||
ajax_post( formAction, form, 'POST' );
|
|
||||||
selectDpto(getField('DEP_UID').value);
|
|
||||||
refreshTree();
|
|
||||||
}
|
|
||||||
|
|
||||||
function savedeptoManager( form ) {
|
|
||||||
var oRPC = new leimnud.module.rpc.xmlhttp({
|
|
||||||
url : '../departments/departments_Ajax',
|
|
||||||
async : false,
|
|
||||||
method: 'POST',
|
|
||||||
args : 'action=assignAllUsers&DEP_UID=' + getField('DEP_UID').value + '&aUsers=' + getField('DEP_MANAGER').value
|
|
||||||
});
|
|
||||||
//resetChecks();
|
|
||||||
oRPC.make();
|
|
||||||
|
|
||||||
ajax_post( form.action, form, 'POST' );
|
|
||||||
currentPopupWindow.remove();
|
|
||||||
//refreshTree();
|
|
||||||
selectDpto(getField('DEP_UID').value);
|
|
||||||
}
|
|
||||||
|
|
||||||
function savesubdepto( form ) {
|
|
||||||
ajax_post( form.action, form, 'POST' );
|
|
||||||
currentPopupWindow.remove();
|
|
||||||
refreshSubTree();
|
|
||||||
}
|
|
||||||
|
|
||||||
function AddUnassignedUser( uid ){//alert(uid);
|
|
||||||
var oRPC = new leimnud.module.rpc.xmlhttp({
|
|
||||||
url : 'departments_Ajax',
|
|
||||||
args : 'action=showUnAssignedUsers&UID=' + uid
|
|
||||||
});
|
|
||||||
oRPC.callback = function(rpc) {
|
|
||||||
var scs = rpc.xmlhttp.responseText.extractScript();
|
|
||||||
document.getElementById('spanUsersList').innerHTML = rpc.xmlhttp.responseText;
|
|
||||||
scs.evalScript();
|
|
||||||
}.extend(this);
|
|
||||||
|
|
||||||
oRPC.make();
|
|
||||||
}
|
|
||||||
|
|
||||||
function sselectDpto( suid, sDepParent ) {
|
|
||||||
currentGroup = suid;
|
|
||||||
var oRPC = new leimnud.module.rpc.xmlhttp({
|
|
||||||
url : 'departments_Ajax',
|
|
||||||
args : 'action=subshowUsers&sDptoUID=' + suid +'&sDepParent=' + sDepParent
|
|
||||||
});
|
|
||||||
oRPC.callback = function(rpc) {
|
|
||||||
var scs = rpc.xmlhttp.responseText.extractScript();
|
|
||||||
document.getElementById('spanUsersList').innerHTML = rpc.xmlhttp.responseText;
|
|
||||||
scs.evalScript();
|
|
||||||
}.extend(this);
|
|
||||||
|
|
||||||
oRPC.make();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function sdeleteDpto( suid, sDepParent ){
|
|
||||||
new leimnud.module.app.confirm().make({
|
|
||||||
label:"<?=G::LoadTranslation('ID_MSG_CONFIRM_DELETE_DEPARTMENT')?>",
|
|
||||||
action:function()
|
|
||||||
{
|
|
||||||
ajax_function('<?=$subdep_Delete?>', 'asdxxx', 'DEP_UID=' +suid+ '&DEP_PARENT=' +sDepParent, "POST" );
|
|
||||||
refreshTree();
|
|
||||||
document.getElementById('spanUsersList').innerHTML = '';
|
|
||||||
}.extend(this)
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function refreshTree(){
|
|
||||||
tree.refresh( document.getElementById("publisherContent[666]") , '<?=$departments_List?>');
|
|
||||||
}
|
|
||||||
|
|
||||||
function refreshSubTree(){
|
|
||||||
tree.refresh( document.getElementById("publisherContent[666]") , '<?=$departments_List?>');
|
|
||||||
}
|
|
||||||
|
|
||||||
var removeUserFromDepartment = function(sDpto, sUser)
|
|
||||||
{
|
|
||||||
new leimnud.module.app.confirm().make({
|
|
||||||
label:"<?=G::LoadTranslation('ID_MSG_CONFIRM_REMOVE_USER')?>",
|
|
||||||
action:function()
|
|
||||||
{
|
|
||||||
var oRPC = new leimnud.module.rpc.xmlhttp({
|
|
||||||
url : '../departments/departments_Ajax',
|
|
||||||
async : false,
|
|
||||||
method: 'POST',
|
|
||||||
args : 'action=removeUserFromDepartment&DEP_UID=' + sDpto + '&USR_UID=' + sUser
|
|
||||||
});
|
|
||||||
oRPC.make();
|
|
||||||
currentDept = sDpto;
|
|
||||||
selectDpto(currentDept);
|
|
||||||
}.extend(this)
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
var removeUserManager = function(sDpto, sUser)
|
|
||||||
{
|
|
||||||
new leimnud.module.app.confirm().make({
|
|
||||||
label:"<?=G::LoadTranslation('ID_MSG_CONFIRM_REMOVE_USER')?>",
|
|
||||||
action:function()
|
|
||||||
{
|
|
||||||
var oRPC = new leimnud.module.rpc.xmlhttp({
|
|
||||||
url : '../departments/departments_Ajax',
|
|
||||||
async : false,
|
|
||||||
method: 'POST',
|
|
||||||
args : 'action=removeUserManager&DEP_UID=' + sDpto + '&USR_UID=' + sUser
|
|
||||||
});
|
|
||||||
oRPC.make();
|
|
||||||
currentGroup = sDpto;
|
|
||||||
selectDpto(currentGroup);
|
|
||||||
}.extend(this)
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
function DeleteManager(suid, sDepParent){
|
|
||||||
var k = new leimnud.module.rpc.xmlhttp({
|
|
||||||
url : '../departments/departments_Ajax',
|
|
||||||
async : true,
|
|
||||||
method: 'POST',
|
|
||||||
args : 'action=getDepManageruid&sDptoUID=' + suid
|
|
||||||
|
|
||||||
});
|
|
||||||
k.callback = function(rpc){
|
|
||||||
sUser= rpc.xmlhttp.responseText;
|
|
||||||
|
|
||||||
if(rpc.xmlhttp.responseText!=''){
|
|
||||||
removeUserManager(suid, sUser);
|
|
||||||
}else{
|
|
||||||
msgBox("this department doesn't has its manager","alert");return false;
|
|
||||||
}
|
|
||||||
}.extend(this);
|
|
||||||
k.make();
|
|
||||||
}
|
|
||||||
|
|
||||||
</script>
|
|
||||||
|
|||||||
@@ -22,6 +22,47 @@
|
|||||||
* Coral Gables, FL, 33134, USA, or email info@colosa.com.
|
* Coral Gables, FL, 33134, USA, or email info@colosa.com.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
function LookForChildren($parent, $level,$aDepUsers){
|
||||||
|
G::LoadClass('configuration');
|
||||||
|
$conf = new Configurations();
|
||||||
|
$oDept = new Department();
|
||||||
|
$allDepartments = $oDept->getDepartments ( $parent );
|
||||||
|
$level++;
|
||||||
|
$rows = Array();
|
||||||
|
foreach($allDepartments as $department){
|
||||||
|
unset($depto);
|
||||||
|
$depto['DEP_TITLE'] = $department['DEP_TITLE'];
|
||||||
|
$depto['DEP_STATUS'] = $department['DEP_STATUS'];
|
||||||
|
if ($department['DEP_MANAGER_USERNAME']!=''){
|
||||||
|
$depto['DEP_MANAGER_NAME'] = $conf->usersNameFormat($department['DEP_MANAGER_USERNAME'], $department['DEP_MANAGER_FIRSTNAME'], $department['DEP_MANAGER_LASTNAME']);
|
||||||
|
}else{
|
||||||
|
$depto['DEP_MANAGER_NAME'] = '';
|
||||||
|
}
|
||||||
|
$depto['DEP_TOTAL_USERS'] = isset($aDepUsers[$department['DEP_UID']])? $aDepUsers[$department['DEP_UID']] : 0;
|
||||||
|
$depto['DEP_UID'] = $department['DEP_UID'];
|
||||||
|
$depto['DEP_MANAGER'] = $department['DEP_MANAGER'];
|
||||||
|
$depto['DEP_PARENT'] = $department['DEP_PARENT'];
|
||||||
|
if ($department['HAS_CHILDREN'] > 0){
|
||||||
|
$depto['children'] = LookForChildren($department['DEP_UID'], $level, $aDepUsers);
|
||||||
|
$depto['iconCls'] = 'ss_sprite ss_chart_organisation';
|
||||||
|
$depto['expanded'] = true;
|
||||||
|
}else{
|
||||||
|
$depto['leaf'] = true;
|
||||||
|
if ($level==1){
|
||||||
|
$depto['iconCls'] = 'ss_sprite ss_chart_organisation';
|
||||||
|
}else{
|
||||||
|
$depto['iconCls'] = 'ss_sprite ss_plugin';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$rows[] = $depto;
|
||||||
|
}
|
||||||
|
return $rows;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (($RBAC_Response=$RBAC->userCanAccess("PM_USERS"))!=1) return $RBAC_Response;
|
if (($RBAC_Response=$RBAC->userCanAccess("PM_USERS"))!=1) return $RBAC_Response;
|
||||||
G::LoadInclude('ajax');
|
G::LoadInclude('ajax');
|
||||||
$_POST['action'] = get_ajax_value('action');
|
$_POST['action'] = get_ajax_value('action');
|
||||||
@@ -110,5 +151,210 @@ switch ($_POST['action'])
|
|||||||
G::RenderPage('publish', 'raw');
|
G::RenderPage('publish', 'raw');
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
case 'departmentList':
|
||||||
|
global $RBAC;
|
||||||
|
$aDEPTS = $RBAC->getAllUsersByDepartment();
|
||||||
|
$tree_depart = LookForChildren('', 0,$aDEPTS);
|
||||||
|
echo G::json_encode($tree_depart);
|
||||||
|
break;
|
||||||
|
case 'checkDepartmentName':
|
||||||
|
$parent = $_REQUEST['parent'];
|
||||||
|
$dep_name = $_REQUEST['name'];
|
||||||
|
|
||||||
|
$oCriteria = new Criteria('workflow');
|
||||||
|
|
||||||
|
$oCriteria->clearSelectColumns();
|
||||||
|
$oCriteria->addSelectColumn( ContentPeer::CON_CATEGORY );
|
||||||
|
$oCriteria->addSelectColumn( ContentPeer::CON_VALUE );
|
||||||
|
$oCriteria->addSelectColumn(DepartmentPeer::DEP_PARENT);
|
||||||
|
$oCriteria->add(ContentPeer::CON_CATEGORY, 'DEPO_TITLE');
|
||||||
|
$oCriteria->addJoin(ContentPeer::CON_ID, DepartmentPeer::DEP_UID, Criteria::LEFT_JOIN);
|
||||||
|
$oCriteria->add(ContentPeer::CON_VALUE, $dep_name);
|
||||||
|
$oCriteria->add(ContentPeer::CON_LANG, SYS_LANG );
|
||||||
|
$oCriteria->add(DepartmentPeer::DEP_PARENT,$parent);
|
||||||
|
|
||||||
|
$oDataset = DepartmentPeer::doSelectRS($oCriteria);
|
||||||
|
$oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
|
||||||
|
$oDataset->next();
|
||||||
|
$aRow = $oDataset->getRow();
|
||||||
|
|
||||||
|
echo (!$aRow) ? 'true' : 'false';
|
||||||
|
break;
|
||||||
|
case 'checkEditDepartmentName':
|
||||||
|
$parent = $_REQUEST['parent'];
|
||||||
|
$dep_name = $_REQUEST['name'];
|
||||||
|
$dep_uid = $_REQUEST['uid'];
|
||||||
|
|
||||||
|
$oCriteria = new Criteria('workflow');
|
||||||
|
$oCriteria->clearSelectColumns();
|
||||||
|
$oCriteria->addSelectColumn( ContentPeer::CON_CATEGORY );
|
||||||
|
$oCriteria->addSelectColumn( ContentPeer::CON_VALUE );
|
||||||
|
$oCriteria->addSelectColumn(DepartmentPeer::DEP_PARENT);
|
||||||
|
$oCriteria->add(ContentPeer::CON_CATEGORY, 'DEPO_TITLE');
|
||||||
|
$oCriteria->addJoin(ContentPeer::CON_ID, DepartmentPeer::DEP_UID, Criteria::LEFT_JOIN);
|
||||||
|
$oCriteria->add(ContentPeer::CON_VALUE, $dep_name);
|
||||||
|
$oCriteria->add(DepartmentPeer::DEP_UID,$dep_uid,Criteria::NOT_EQUAL);
|
||||||
|
$oCriteria->add(ContentPeer::CON_LANG, SYS_LANG );
|
||||||
|
$oCriteria->add(DepartmentPeer::DEP_PARENT,$parent);
|
||||||
|
|
||||||
|
$oDataset = DepartmentPeer::doSelectRS($oCriteria);
|
||||||
|
$oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
|
||||||
|
$oDataset->next();
|
||||||
|
$aRow = $oDataset->getRow();
|
||||||
|
|
||||||
|
echo (!$aRow) ? 'true' : 'false';
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'saveDepartment':
|
||||||
|
$parent = $_REQUEST['parent'];
|
||||||
|
$dep_name = $_REQUEST['name'];
|
||||||
|
$newDepartment['DEP_PARENT'] = $parent;
|
||||||
|
$newDepartment['DEP_TITLE'] = $dep_name;
|
||||||
|
$oDept = new Department();
|
||||||
|
$oDept->create($newDepartment);
|
||||||
|
echo '{success: true}';
|
||||||
|
break;
|
||||||
|
case 'usersByDepartment':
|
||||||
|
G::LoadClass ( 'configuration' );
|
||||||
|
$sDepUid = $_REQUEST['DEP_UID'];
|
||||||
|
$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_REPORTS_TO);
|
||||||
|
$oCriteria->add(UsersPeer::USR_STATUS, 'CLOSED', Criteria::NOT_EQUAL);
|
||||||
|
$oCriteria->add(UsersPeer::DEP_UID, $sDepUid);
|
||||||
|
|
||||||
|
$oDataset = DepartmentPeer::doSelectRS($oCriteria);
|
||||||
|
$oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
|
||||||
|
|
||||||
|
$rows = Array();
|
||||||
|
|
||||||
|
$conf = new Configurations();
|
||||||
|
|
||||||
|
while ($oDataset->next()){
|
||||||
|
$aRow = $oDataset->getRow();
|
||||||
|
$user['USR_UID'] = $aRow['USR_UID'];
|
||||||
|
$user['USR_VALUE'] = $conf->usersNameFormat($aRow['USR_USERNAME'], $aRow['USR_FIRSTNAME'], $aRow['USR_LASTNAME']);
|
||||||
|
$rows[] = $user;
|
||||||
|
}
|
||||||
|
|
||||||
|
echo '{users: '.G::json_encode($rows).'}';
|
||||||
|
break;
|
||||||
|
case 'updateDepartment':
|
||||||
|
try{
|
||||||
|
$dep_name = $_REQUEST['name'];
|
||||||
|
echo $dep_name;
|
||||||
|
$dep_uid = $_REQUEST['uid'];
|
||||||
|
$dep_manager = $_REQUEST['manager'];
|
||||||
|
$dep_status = $_REQUEST['status'];
|
||||||
|
$editDepartment['DEP_UID'] = $dep_uid;
|
||||||
|
$editDepartment['DEPO_TITLE'] = $dep_name;
|
||||||
|
$editDepartment['DEP_STATUS'] = $dep_status;
|
||||||
|
$editDepartment['DEP_MANAGER'] = $dep_manager;
|
||||||
|
$oDept = new Department();
|
||||||
|
$oDept->update($editDepartment);
|
||||||
|
$oDept->updateDepartmentManager($dep_uid);
|
||||||
|
echo '{success: true}';
|
||||||
|
}catch(exception $e){
|
||||||
|
echo '{success: false}';
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'canDeleteDepartment':
|
||||||
|
global $RBAC;
|
||||||
|
$aDEPTS = $RBAC->getAllUsersByDepartment();
|
||||||
|
if (isset($aDEPTS[$_POST['dep_uid']])){
|
||||||
|
echo '{success: false, users: '.$aDEPTS[$_POST['dep_uid']].'}';
|
||||||
|
}else{
|
||||||
|
echo '{success: true}';
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'deleteDepartment':
|
||||||
|
$DEP_UID = $_POST['DEP_UID'];
|
||||||
|
$oDept = new Department();
|
||||||
|
$oDept->remove($DEP_UID);
|
||||||
|
echo '{success: true}';
|
||||||
|
break;
|
||||||
|
case 'assignedUsers':
|
||||||
|
$filter = isset($_POST['textFilter']) ? $_POST['textFilter'] : '';
|
||||||
|
$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);
|
||||||
|
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();
|
||||||
|
}
|
||||||
|
echo '{users:'.G::json_encode($aUsers).'}';
|
||||||
|
break;
|
||||||
|
case 'availableUsers':
|
||||||
|
$filter = isset($_POST['textFilter']) ? $_POST['textFilter'] : '';
|
||||||
|
$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->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)))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
$oDataset = UsersPeer::doSelectRS($oCriteria);
|
||||||
|
$oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
|
||||||
|
$aUsers = array();
|
||||||
|
while ($oDataset->next()){
|
||||||
|
$aUsers[] = $oDataset->getRow();
|
||||||
|
}
|
||||||
|
echo '{users:'.G::json_encode($aUsers).'}';
|
||||||
|
break;
|
||||||
|
case 'assignDepartmentToUserMultiple':
|
||||||
|
$DEP_UID = $_REQUEST['DEP_UID'];
|
||||||
|
$uSERS = $_REQUEST['USR_UID'];
|
||||||
|
$aUsers = explode(',',$uSERS);
|
||||||
|
$dep = new Department();
|
||||||
|
$dep->Load($DEP_UID);
|
||||||
|
$dep_manager = $dep->getDepManager();
|
||||||
|
$manager = ($dep_manager=='')? true : false;
|
||||||
|
foreach ($aUsers as $USR_UID){
|
||||||
|
$dep->addUserToDepartment($DEP_UID, $USR_UID, $manager, false);
|
||||||
|
$manager = false;
|
||||||
|
}
|
||||||
|
$dep->updateDepartmentManager($DEP_UID);
|
||||||
|
break;
|
||||||
|
case 'deleteDepartmentToUserMultiple':
|
||||||
|
$DEP_UID = $_REQUEST['DEP_UID'];
|
||||||
|
$uSERS = $_REQUEST['USR_UID'];
|
||||||
|
$aUsers = explode(',',$uSERS);
|
||||||
|
$dep = new Department();
|
||||||
|
$dep->Load($DEP_UID);
|
||||||
|
$manager = $dep->getDepManager();
|
||||||
|
foreach ($aUsers as $USR_UID){
|
||||||
|
$dep->removeUserFromDepartment($DEP_UID, $USR_UID);
|
||||||
|
if ($USR_UID==$manager){
|
||||||
|
$editDepto['DEP_UID'] = $DEP_UID;
|
||||||
|
$editDepto['DEP_MANAGER'] = '';
|
||||||
|
$dep->update($editDepto);
|
||||||
|
$dep->updateDepartmentManager($DEP_UID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
3
workflow/engine/templates/departments/departmentList.html
Executable file
3
workflow/engine/templates/departments/departmentList.html
Executable file
@@ -0,0 +1,3 @@
|
|||||||
|
<div style="padding: 15px">
|
||||||
|
<div id="list-panel"></div>
|
||||||
|
</div>
|
||||||
435
workflow/engine/templates/departments/departmentList.js
Executable file
435
workflow/engine/templates/departments/departmentList.js
Executable file
@@ -0,0 +1,435 @@
|
|||||||
|
/*
|
||||||
|
* @author: Qennix
|
||||||
|
* Jan 31th, 2011
|
||||||
|
*/
|
||||||
|
|
||||||
|
//Keyboard Events
|
||||||
|
new Ext.KeyMap(document, {
|
||||||
|
key: Ext.EventObject.F5,
|
||||||
|
fn: function(keycode, e) {
|
||||||
|
if (! e.ctrlKey) {
|
||||||
|
if (Ext.isIE) {
|
||||||
|
// IE6 doesn't allow cancellation of the F5 key, so trick it into
|
||||||
|
// thinking some other key was pressed (backspace in this case)
|
||||||
|
e.browserEvent.keyCode = 8;
|
||||||
|
}
|
||||||
|
e.stopEvent();
|
||||||
|
document.location = document.location;
|
||||||
|
}else{
|
||||||
|
Ext.Msg.alert('Refresh', 'You clicked: CTRL-F5');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//,
|
||||||
|
//{
|
||||||
|
// key: Ext.EventObject.DELETE,
|
||||||
|
// fn: function(k,e){
|
||||||
|
// var dep_node = Ext.getCmp('treePanel').getSelectionModel().getSelectedNode();
|
||||||
|
// //if (typeof dep_node != 'undefined')
|
||||||
|
// //if(dep_node.attributes.leaf){
|
||||||
|
// DeleteDepartmentAction();
|
||||||
|
// //}
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
);
|
||||||
|
|
||||||
|
var treePanel;
|
||||||
|
var rootNode;
|
||||||
|
|
||||||
|
Ext.onReady(function() {
|
||||||
|
Ext.QuickTips.init();
|
||||||
|
|
||||||
|
newButton = new Ext.Action({
|
||||||
|
text: _('ID_NEW_DEPARTMENT'),
|
||||||
|
iconCls: ' button_menu_ext ss_sprite ss_add',
|
||||||
|
handler: NewRootDepartment
|
||||||
|
});
|
||||||
|
|
||||||
|
newSubButton = new Ext.Action({
|
||||||
|
text: _('ID_NEW_SUB_DEPARTMENT'),
|
||||||
|
iconCls: ' button_menu_ext ss_sprite ss_add',
|
||||||
|
handler: NewSubDepartment,
|
||||||
|
disabled: true
|
||||||
|
});
|
||||||
|
|
||||||
|
editButton = new Ext.Action({
|
||||||
|
text: _('ID_EDIT'),
|
||||||
|
iconCls: 'button_menu_ext ss_sprite ss_pencil',
|
||||||
|
handler: EditDepartmentAction,
|
||||||
|
disabled: true
|
||||||
|
});
|
||||||
|
|
||||||
|
deleteButton = new Ext.Action({
|
||||||
|
text: _('ID_DELETE'),
|
||||||
|
iconCls: 'button_menu_ext ss_sprite ss_delete',
|
||||||
|
handler: DeleteDepartmentAction,
|
||||||
|
disabled: true
|
||||||
|
});
|
||||||
|
|
||||||
|
usersButton = new Ext.Action({
|
||||||
|
text: _('ID_USERS'),
|
||||||
|
iconCls: 'button_menu_ext ss_sprite ss_user_add',
|
||||||
|
handler: UsersButtonAction,
|
||||||
|
disabled: true
|
||||||
|
});
|
||||||
|
|
||||||
|
contextMenu = new Ext.menu.Menu({
|
||||||
|
items: [newSubButton,'-',editButton, deleteButton,'-',usersButton]
|
||||||
|
});
|
||||||
|
|
||||||
|
smodel = new Ext.tree.DefaultSelectionModel({
|
||||||
|
listeners:{
|
||||||
|
selectionchange: function(sm, node){
|
||||||
|
editButton.enable();
|
||||||
|
newSubButton.enable();
|
||||||
|
usersButton.enable();
|
||||||
|
if (!node){
|
||||||
|
deleteButton.disable();
|
||||||
|
}else{
|
||||||
|
if (node.attributes.leaf){
|
||||||
|
deleteButton.enable();
|
||||||
|
}else{
|
||||||
|
deleteButton.disable();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//var tree = Ext.getCmp('treePanel');
|
||||||
|
//alert(treePanel.getRootNode());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
comboStatusStore = new Ext.data.SimpleStore({
|
||||||
|
fields: ['id','value'],
|
||||||
|
data: [['ACTIVE',_('ID_ACTIVE')],['INACTIVE',_('ID_INACTIVE')]]
|
||||||
|
});
|
||||||
|
|
||||||
|
comboDepManager = new Ext.data.GroupingStore( {
|
||||||
|
proxy : new Ext.data.HttpProxy({
|
||||||
|
url: 'departments_Ajax?action=usersByDepartment'
|
||||||
|
}),
|
||||||
|
reader : new Ext.data.JsonReader( {
|
||||||
|
root: 'users',
|
||||||
|
fields : [
|
||||||
|
{name : 'USR_UID'},
|
||||||
|
{name : 'USR_VALUE'}
|
||||||
|
]
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
newForm = new Ext.FormPanel({
|
||||||
|
url: 'departments_Ajax?request=saveNewDepartment',
|
||||||
|
frame: true,
|
||||||
|
items:[
|
||||||
|
{xtype: 'textfield', name: 'parent', hidden: true},
|
||||||
|
{xtype: 'textfield', fieldLabel: _('ID_DEPARTMENT_NAME'), name: 'dep_name', width: 230, allowBlank: false}
|
||||||
|
],
|
||||||
|
buttons: [
|
||||||
|
{text: _('ID_SAVE'), handler: SaveNewDepartment},
|
||||||
|
{text: _('ID_CANCEL'), handler: CloseWindow}
|
||||||
|
|
||||||
|
],
|
||||||
|
labelWidth: 120
|
||||||
|
});
|
||||||
|
|
||||||
|
editForm = new Ext.FormPanel({
|
||||||
|
url: 'departments_Ajax?request=saveEditDepartment',
|
||||||
|
frame: true,
|
||||||
|
items:[
|
||||||
|
{xtype: 'textfield', name: 'dep_uid', hidden: true},
|
||||||
|
{xtype: 'textfield', name: 'dep_parent', hidden: true},
|
||||||
|
{xtype: 'textfield', fieldLabel: _('ID_DEPARTMENT_NAME'), name: 'dep_name', width: 230, allowBlank: false},
|
||||||
|
{
|
||||||
|
xtype: 'combo',
|
||||||
|
fieldLabel: _('ID_STATUS'),
|
||||||
|
hiddenName: 'status',
|
||||||
|
typeAhead: true,
|
||||||
|
mode: 'local',
|
||||||
|
store: comboStatusStore,
|
||||||
|
displayField: 'value',
|
||||||
|
valueField:'id',
|
||||||
|
allowBlank: false,
|
||||||
|
triggerAction: 'all',
|
||||||
|
emptyText: _('ID_SELECT_STATUS'),
|
||||||
|
selectOnFocus:true
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{
|
||||||
|
xtype: 'combo',
|
||||||
|
fieldLabel: 'Manager',
|
||||||
|
hiddenName: 'manager',
|
||||||
|
typeAhead: true,
|
||||||
|
mode: 'local',
|
||||||
|
store: comboDepManager,
|
||||||
|
displayField: 'USR_VALUE',
|
||||||
|
valueField:'USR_UID',
|
||||||
|
allowBlank: true,
|
||||||
|
triggerAction: 'all',
|
||||||
|
emptyText: '',
|
||||||
|
selectOnFocus:true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
buttons: [
|
||||||
|
{text: _('ID_SAVE'), handler: SaveEditDepartment},
|
||||||
|
{text: _('ID_CANCEL'), handler: CloseWindow}
|
||||||
|
],
|
||||||
|
labelWidth: 120
|
||||||
|
});
|
||||||
|
|
||||||
|
rootNode = new Ext.tree.AsyncTreeNode({
|
||||||
|
text:'Departments'
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
treePanel = new Ext.ux.tree.TreeGrid({
|
||||||
|
title: _('ID_DEPARTMENTS'),
|
||||||
|
autoScroll: true,
|
||||||
|
width: 720,
|
||||||
|
height: 300,
|
||||||
|
id: 'treePanel',
|
||||||
|
columns:[{
|
||||||
|
header: _('ID_DEPARTMENT_NAME'),
|
||||||
|
dataIndex: 'DEP_TITLE',
|
||||||
|
width: 320
|
||||||
|
},{
|
||||||
|
header: _('ID_STATUS'),
|
||||||
|
width: 100,
|
||||||
|
dataIndex: 'DEP_STATUS',
|
||||||
|
align: 'center',
|
||||||
|
tpl: new Ext.XTemplate('{DEP_STATUS:this.formatStatus}', {
|
||||||
|
formatStatus: function(v) {
|
||||||
|
switch(v){
|
||||||
|
case 'ACTIVE': return '<font color="green">' + _('ID_ACTIVE') + '</font>'; break;
|
||||||
|
case 'INACTIVE': return '<font color="red">' + _('ID_INACTIVE') + '</font>'; break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},{
|
||||||
|
header: _('ID_MANAGER'),
|
||||||
|
width: 220,
|
||||||
|
dataIndex: 'DEP_MANAGER_NAME'
|
||||||
|
},{
|
||||||
|
header: _('ID_USERS'),
|
||||||
|
width: 80,
|
||||||
|
dataIndex: 'DEP_TOTAL_USERS',
|
||||||
|
align: 'center',
|
||||||
|
sortType: 'asFloat'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
selModel: smodel,
|
||||||
|
tbar: [newButton,'-',newSubButton,'-',editButton, deleteButton,'-',usersButton],
|
||||||
|
dataUrl:'departments_Ajax?action=departmentList',
|
||||||
|
root: rootNode
|
||||||
|
});
|
||||||
|
|
||||||
|
treePanel.on('contextmenu', treeContextHandler);
|
||||||
|
|
||||||
|
viewport = new Ext.Viewport({
|
||||||
|
layout: 'fit',
|
||||||
|
autoScroll: false,
|
||||||
|
items: [treePanel]
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
//Funtion Handles Context Menu Opening
|
||||||
|
treeContextHandler = function(node, evt){
|
||||||
|
node.select();
|
||||||
|
var coords = evt.getXY();
|
||||||
|
contextMenu.showAt([coords[0], coords[1]]);
|
||||||
|
};
|
||||||
|
|
||||||
|
//Do Nothing Function
|
||||||
|
DoNothing = function(){};
|
||||||
|
|
||||||
|
//Call New Department at Root
|
||||||
|
NewRootDepartment = function(){
|
||||||
|
newForm.getForm().findField('parent').setValue('');
|
||||||
|
w = new Ext.Window({
|
||||||
|
title: _('ID_NEW_DEPARTMENT'),
|
||||||
|
autoHeight: true,
|
||||||
|
modal: true,
|
||||||
|
closable: false,
|
||||||
|
width: 420,
|
||||||
|
items: [newForm]
|
||||||
|
});
|
||||||
|
w.show();
|
||||||
|
};
|
||||||
|
|
||||||
|
//Call New Sub Department at Parent
|
||||||
|
NewSubDepartment = function(){
|
||||||
|
var dep_node = Ext.getCmp('treePanel').getSelectionModel().getSelectedNode();
|
||||||
|
newForm.getForm().findField('parent').setValue(dep_node.attributes.DEP_UID);
|
||||||
|
w = new Ext.Window({
|
||||||
|
title: _('ID_NEW_SUB_DEPARTMENT'),
|
||||||
|
autoHeight: true,
|
||||||
|
modal: true,
|
||||||
|
closable: false,
|
||||||
|
width: 420,
|
||||||
|
items: [newForm]
|
||||||
|
});
|
||||||
|
w.show();
|
||||||
|
};
|
||||||
|
|
||||||
|
//Close PopUp Window
|
||||||
|
CloseWindow = function(){
|
||||||
|
w.hide();
|
||||||
|
};
|
||||||
|
|
||||||
|
SaveNewDepartment = function(){
|
||||||
|
var dep_node = Ext.getCmp('treePanel').getSelectionModel().getSelectedNode();
|
||||||
|
if (dep_node) dep_node.unselect();
|
||||||
|
var dep_name = newForm.getForm().findField('dep_name').getValue();
|
||||||
|
var dep_parent = newForm.getForm().findField('parent').getValue();
|
||||||
|
Ext.Ajax.request({
|
||||||
|
url: 'departments_Ajax',
|
||||||
|
params: {action: 'checkDepartmentName', name: dep_name, parent: dep_parent},
|
||||||
|
success: function(resp, opt){
|
||||||
|
var res_ok = eval(resp.responseText);
|
||||||
|
if (res_ok){
|
||||||
|
Ext.Ajax.request({
|
||||||
|
url: 'departments_Ajax',
|
||||||
|
params: {action: 'saveDepartment', name: dep_name, parent: dep_parent},
|
||||||
|
success: function(r,o){
|
||||||
|
var xtree = Ext.getCmp('treePanel');
|
||||||
|
treePanel.getLoader().load(rootNode);
|
||||||
|
newSubButton.disable();
|
||||||
|
editButton.disable();
|
||||||
|
deleteButton.disable();
|
||||||
|
usersButton.disable();
|
||||||
|
newForm.getForm().findField('dep_name').reset();
|
||||||
|
w.hide();
|
||||||
|
PMExt.notify(_('ID_DEPARTMENTS'), _('ID_DEPARTMENT_SUCCESS_NEW'));
|
||||||
|
},
|
||||||
|
failure: function(r,o){
|
||||||
|
DoNothing();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
PMExt.error(_('ID_DEPARTMENTS'), _('ID_DEPARTMENT_EXISTS'));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
failure: function(resp, opt){
|
||||||
|
DoNothing();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
SaveEditDepartment = function(){
|
||||||
|
var dep_name = editForm.getForm().findField('dep_name').getValue();
|
||||||
|
var dep_parent = editForm.getForm().findField('dep_parent').getValue();
|
||||||
|
var dep_uid = editForm.getForm().findField('dep_uid').getValue();
|
||||||
|
var dep_status = editForm.getForm().findField('status').getValue();
|
||||||
|
var dep_manager = editForm.getForm().findField('manager').getValue();
|
||||||
|
var dep_node = Ext.getCmp('treePanel').getSelectionModel().getSelectedNode();
|
||||||
|
if (dep_node) dep_node.unselect();
|
||||||
|
Ext.Ajax.request({
|
||||||
|
url: 'departments_Ajax',
|
||||||
|
params: {action: 'checkEditDepartmentName', name: dep_name, parent: dep_parent, uid: dep_uid},
|
||||||
|
success: function(resp, opt){
|
||||||
|
var res_ok = eval(resp.responseText);
|
||||||
|
if (res_ok){
|
||||||
|
Ext.Ajax.request({
|
||||||
|
url: 'departments_Ajax',
|
||||||
|
params: {action: 'updateDepartment', uid: dep_uid, name: dep_name, status: dep_status, manager: dep_manager},
|
||||||
|
success: function(r,o){
|
||||||
|
var xtree = Ext.getCmp('treePanel');
|
||||||
|
xtree.getLoader().load(xtree.root);
|
||||||
|
newSubButton.disable();
|
||||||
|
editButton.disable();
|
||||||
|
deleteButton.disable();
|
||||||
|
usersButton.disable();
|
||||||
|
newForm.getForm().findField('dep_name').reset();
|
||||||
|
w.hide();
|
||||||
|
PMExt.notify(_('ID_DEPARTMENTS'), _('ID_DEPARTMENT_SUCCESS_UPDATE'));
|
||||||
|
},
|
||||||
|
failure: function(r,o){
|
||||||
|
DoNothing();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
PMExt.error(_('ID_DEPARTMENTS'), _('ID_DEPARTMENT_EXISTS'));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
failure: function(resp, opt){
|
||||||
|
DoNothing();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//Edit Department Action
|
||||||
|
EditDepartmentAction = function(){
|
||||||
|
var dep_node = Ext.getCmp('treePanel').getSelectionModel().getSelectedNode();
|
||||||
|
editForm.getForm().findField('dep_uid').setValue(dep_node.attributes.DEP_UID);
|
||||||
|
editForm.getForm().findField('dep_parent').setValue(dep_node.attributes.DEP_PARENT);
|
||||||
|
editForm.getForm().findField('dep_name').setValue(dep_node.attributes.DEP_TITLE);
|
||||||
|
editForm.getForm().findField('status').setValue(dep_node.attributes.DEP_STATUS);
|
||||||
|
editForm.getForm().findField('manager').getStore().addListener('load',function(s,r,o){
|
||||||
|
editForm.getForm().findField('manager').setValue(dep_node.attributes.DEP_MANAGER);
|
||||||
|
});
|
||||||
|
editForm.getForm().findField('manager').store.load({params: {DEP_UID: dep_node.attributes.DEP_UID }});
|
||||||
|
w = new Ext.Window({
|
||||||
|
title: _('ID_EDIT_DEPARTMENT'),
|
||||||
|
autoHeight: true,
|
||||||
|
modal: true,
|
||||||
|
closable: false,
|
||||||
|
width: 420,
|
||||||
|
items: [editForm]
|
||||||
|
});
|
||||||
|
w.show();
|
||||||
|
};
|
||||||
|
|
||||||
|
//Delete Department Action
|
||||||
|
DeleteDepartmentAction = function(){
|
||||||
|
var dep_node = Ext.getCmp('treePanel').getSelectionModel().getSelectedNode();
|
||||||
|
var DEP_UID = dep_node.attributes.DEP_UID;
|
||||||
|
if (dep_node) dep_node.unselect();
|
||||||
|
viewport.getEl().mask(_('ID_PROCESSING'));
|
||||||
|
Ext.Ajax.request({
|
||||||
|
url: 'departments_Ajax',
|
||||||
|
params: {action: 'canDeleteDepartment', dep_uid: DEP_UID },
|
||||||
|
success: function(r,o){
|
||||||
|
viewport.getEl().unmask();
|
||||||
|
var response = Ext.util.JSON.decode(r.responseText);
|
||||||
|
if (response.success){
|
||||||
|
|
||||||
|
Ext.Msg.confirm(_('ID_DEPARTMENTS'), _('ID_CONFIRM_DELETE_DEPARTMENT'),
|
||||||
|
function(btn, text){
|
||||||
|
if (btn=='yes'){
|
||||||
|
viewport.getEl().mask(_('ID_PROCESSING'));
|
||||||
|
Ext.Ajax.request({
|
||||||
|
url: 'departments_Ajax',
|
||||||
|
params: {action: 'deleteDepartment', DEP_UID: DEP_UID},
|
||||||
|
success: function(r,o){
|
||||||
|
viewport.getEl().unmask();
|
||||||
|
treePanel.getRootNode().reload();
|
||||||
|
newSubButton.disable();
|
||||||
|
editButton.disable();
|
||||||
|
deleteButton.disable();
|
||||||
|
usersButton.disable();
|
||||||
|
PMExt.notify(_('ID_DEPARTMENTS'), _('ID_DEPARTMENT_SUCCESS_DELETE'));
|
||||||
|
},
|
||||||
|
failure: function(r,o){
|
||||||
|
viewport.getEl().unmask();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}else{
|
||||||
|
PMExt.error(_('ID_DEPARTMENTS'),_('ID_MSG_CANNOT_DELETE_DEPARTMENT'));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
failure: function(r,o){
|
||||||
|
viewport.getEl().unmask();
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
//User Assined Action
|
||||||
|
UsersButtonAction = function(){
|
||||||
|
var dep_node = Ext.getCmp('treePanel').getSelectionModel().getSelectedNode();
|
||||||
|
var DEP_UID = dep_node.attributes.DEP_UID;
|
||||||
|
location.href= 'departmentUsers?dUID=' + DEP_UID;
|
||||||
|
};
|
||||||
4
workflow/engine/templates/departments/departmentUsers.html
Executable file
4
workflow/engine/templates/departments/departmentUsers.html
Executable file
@@ -0,0 +1,4 @@
|
|||||||
|
<div style="padding: 15px">
|
||||||
|
<div id="list-panel"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
478
workflow/engine/templates/departments/departmentUsers.js
Executable file
478
workflow/engine/templates/departments/departmentUsers.js
Executable file
@@ -0,0 +1,478 @@
|
|||||||
|
/*
|
||||||
|
* @author: Qennix
|
||||||
|
* Feb 10th, 2011
|
||||||
|
*/
|
||||||
|
|
||||||
|
//Keyboard Events
|
||||||
|
new Ext.KeyMap(document, {
|
||||||
|
key: Ext.EventObject.F5,
|
||||||
|
fn: function(keycode, e) {
|
||||||
|
if (! e.ctrlKey) {
|
||||||
|
if (Ext.isIE) {
|
||||||
|
// IE6 doesn't allow cancellation of the F5 key, so trick it into
|
||||||
|
// thinking some other key was pressed (backspace in this case)
|
||||||
|
e.browserEvent.keyCode = 8;
|
||||||
|
}
|
||||||
|
e.stopEvent();
|
||||||
|
document.location = document.location;
|
||||||
|
}else{
|
||||||
|
Ext.Msg.alert('Refresh', 'You clicked: CTRL-F5');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
var storeP;
|
||||||
|
var storeA;
|
||||||
|
var cmodelP;
|
||||||
|
var smodelA;
|
||||||
|
var smodelP;
|
||||||
|
var availableGrid;
|
||||||
|
var assignedGrid;
|
||||||
|
var GroupsPanel;
|
||||||
|
var AuthenticationPanel;
|
||||||
|
var northPanel;
|
||||||
|
var tabsPanel;
|
||||||
|
var viewport;
|
||||||
|
var assignButton;
|
||||||
|
var assignAllButton;
|
||||||
|
var removeButton;
|
||||||
|
var removeAllButton;
|
||||||
|
var backButton;
|
||||||
|
var discardChangesButton;
|
||||||
|
var saveChangesButton;
|
||||||
|
var sw_func_groups;
|
||||||
|
//var sw_func_reassign;
|
||||||
|
var sw_func_auth;
|
||||||
|
var sw_form_changed;
|
||||||
|
var sw_user_summary;
|
||||||
|
|
||||||
|
Ext.onReady(function(){
|
||||||
|
sw_func_groups = false;
|
||||||
|
//sw_func_reassign = false;
|
||||||
|
sw_func_auth = false;
|
||||||
|
sw_user_summary = false;
|
||||||
|
|
||||||
|
editMembersButton = new Ext.Action({
|
||||||
|
text: _('ID_EDIT_USERS'),
|
||||||
|
iconCls: 'button_menu_ext ss_sprite ss_user_add',
|
||||||
|
handler: EditMembersAction
|
||||||
|
});
|
||||||
|
|
||||||
|
cancelEditMembersButton = new Ext.Action({
|
||||||
|
text: _('ID_FINISH_EDITION'),
|
||||||
|
iconCls: 'button_menu_ext ss_sprite ss_cancel',
|
||||||
|
handler: CancelEditMembersAction,
|
||||||
|
hidden: true
|
||||||
|
});
|
||||||
|
|
||||||
|
backButton = new Ext.Action({
|
||||||
|
text : _('ID_BACK'),
|
||||||
|
iconCls: 'button_menu_ext ss_sprite ss_arrow_redo',
|
||||||
|
handler: BackToUsers
|
||||||
|
});
|
||||||
|
|
||||||
|
// saveChangesButton = new Ext.Action({
|
||||||
|
// text: _('ID_SAVE_CHANGES'),
|
||||||
|
// //iconCls: 'button_menu_ext ss_sprite ss_arrow_redo',
|
||||||
|
// handler: SaveChangesAuthForm,
|
||||||
|
// disabled: true
|
||||||
|
// });
|
||||||
|
|
||||||
|
// discardChangesButton = new Ext.Action({
|
||||||
|
// text: _('ID_DISCARD_CHANGES'),
|
||||||
|
// //iconCls: 'button_menu_ext ss_sprite ss_arrow_redo',
|
||||||
|
// handler: LoadAuthForm,
|
||||||
|
// disabled: true
|
||||||
|
// });
|
||||||
|
|
||||||
|
storeP = new Ext.data.GroupingStore( {
|
||||||
|
proxy : new Ext.data.HttpProxy({
|
||||||
|
url: 'departments_Ajax?action=assignedUsers&dUID=' + DEPARTMENT.DEP_UID
|
||||||
|
}),
|
||||||
|
reader : new Ext.data.JsonReader( {
|
||||||
|
root: 'users',
|
||||||
|
fields : [
|
||||||
|
{name : 'USR_UID'},
|
||||||
|
{name : 'USR_USERNAME'},
|
||||||
|
{name : 'USR_FIRSTNAME'},
|
||||||
|
{name : 'USR_LASTNAME'}
|
||||||
|
]
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
storeA = new Ext.data.GroupingStore( {
|
||||||
|
proxy : new Ext.data.HttpProxy({
|
||||||
|
url: 'departments_Ajax?action=availableUsers&dUID=' + DEPARTMENT.DEP_UID
|
||||||
|
}),
|
||||||
|
reader : new Ext.data.JsonReader( {
|
||||||
|
root: 'users',
|
||||||
|
fields : [
|
||||||
|
{name : 'USR_UID'},
|
||||||
|
{name : 'USR_USERNAME'},
|
||||||
|
{name : 'USR_FIRSTNAME'},
|
||||||
|
{name : 'USR_LASTNAME'}
|
||||||
|
]
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
cmodelP = new Ext.grid.ColumnModel({
|
||||||
|
defaults: {
|
||||||
|
width: 50,
|
||||||
|
sortable: true
|
||||||
|
},
|
||||||
|
columns: [
|
||||||
|
{id:'USR_UID', dataIndex: 'USR_UID', hidden:true, hideable:false},
|
||||||
|
{header: _('ID_FULL_NAME'), dataIndex: 'USR_USERNAME', width: 60, align:'left', renderer: show_user}
|
||||||
|
]
|
||||||
|
});
|
||||||
|
|
||||||
|
smodelA = new Ext.grid.RowSelectionModel({
|
||||||
|
selectSingle: false,
|
||||||
|
listeners:{
|
||||||
|
selectionchange: function(sm){
|
||||||
|
switch(sm.getCount()){
|
||||||
|
case 0: Ext.getCmp('assignButton').disable(); break;
|
||||||
|
default: Ext.getCmp('assignButton').enable(); break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
smodelP = new Ext.grid.RowSelectionModel({
|
||||||
|
selectSingle: false,
|
||||||
|
listeners:{
|
||||||
|
selectionchange: function(sm){
|
||||||
|
switch(sm.getCount()){
|
||||||
|
case 0: Ext.getCmp('removeButton').disable(); break;
|
||||||
|
default: Ext.getCmp('removeButton').enable(); break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
searchTextA = new Ext.form.TextField ({
|
||||||
|
id: 'searchTextA',
|
||||||
|
ctCls:'pm_search_text_field',
|
||||||
|
allowBlank: true,
|
||||||
|
width: 110,
|
||||||
|
emptyText: _('ID_ENTER_SEARCH_TERM'),
|
||||||
|
listeners: {
|
||||||
|
specialkey: function(f,e){
|
||||||
|
if (e.getKey() == e.ENTER) {
|
||||||
|
DoSearchA();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
clearTextButtonA = new Ext.Action({
|
||||||
|
text: 'X',
|
||||||
|
ctCls:'pm_search_x_button',
|
||||||
|
handler: GridByDefaultA
|
||||||
|
});
|
||||||
|
|
||||||
|
searchTextP = new Ext.form.TextField ({
|
||||||
|
id: 'searchTextP',
|
||||||
|
ctCls:'pm_search_text_field',
|
||||||
|
allowBlank: true,
|
||||||
|
width: 110,
|
||||||
|
emptyText: _('ID_ENTER_SEARCH_TERM'),
|
||||||
|
listeners: {
|
||||||
|
specialkey: function(f,e){
|
||||||
|
if (e.getKey() == e.ENTER) {
|
||||||
|
DoSearchP();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
clearTextButtonP = new Ext.Action({
|
||||||
|
text: 'X',
|
||||||
|
ctCls:'pm_search_x_button',
|
||||||
|
handler: GridByDefaultP
|
||||||
|
});
|
||||||
|
|
||||||
|
availableGrid = new Ext.grid.GridPanel({
|
||||||
|
layout : 'fit',
|
||||||
|
region : 'center',
|
||||||
|
ddGroup : 'assignedGridDDGroup',
|
||||||
|
store : storeA,
|
||||||
|
cm : cmodelP,
|
||||||
|
sm : smodelA,
|
||||||
|
enableDragDrop : true,
|
||||||
|
stripeRows : true,
|
||||||
|
autoExpandColumn: 'CON_VALUE',
|
||||||
|
iconCls : 'icon-grid',
|
||||||
|
id : 'availableGrid',
|
||||||
|
height : 100,
|
||||||
|
autoWidth : true,
|
||||||
|
stateful : true,
|
||||||
|
stateId : 'grid',
|
||||||
|
enableColumnResize : true,
|
||||||
|
enableHdMenu : true,
|
||||||
|
frame : false,
|
||||||
|
columnLines : false,
|
||||||
|
viewConfig : {forceFit:true},
|
||||||
|
tbar: [_('ID_AVAILABLE_USERS'),{xtype: 'tbfill'},'-',searchTextA,clearTextButtonA],
|
||||||
|
//bbar: [{xtype: 'tbfill'}, cancelEditMembersButton],
|
||||||
|
listeners: {rowdblclick: AssignGroupsAction},
|
||||||
|
hidden: true
|
||||||
|
});
|
||||||
|
|
||||||
|
assignedGrid = new Ext.grid.GridPanel({
|
||||||
|
layout : 'fit',
|
||||||
|
ddGroup : 'availableGridDDGroup',
|
||||||
|
store : storeP,
|
||||||
|
cm : cmodelP,
|
||||||
|
sm : smodelP,
|
||||||
|
enableDragDrop : true,
|
||||||
|
stripeRows : true,
|
||||||
|
autoExpandColumn: 'CON_VALUE',
|
||||||
|
iconCls : 'icon-grid',
|
||||||
|
id : 'assignedGrid',
|
||||||
|
height : 100,
|
||||||
|
autoWidth : true,
|
||||||
|
stateful : true,
|
||||||
|
stateId : 'grid',
|
||||||
|
enableColumnResize : true,
|
||||||
|
enableHdMenu : true,
|
||||||
|
frame : false,
|
||||||
|
columnLines : false,
|
||||||
|
viewConfig : {forceFit:true},
|
||||||
|
tbar: [_('ID_ASSIGNED_USERS'),{xtype: 'tbfill'},'-',searchTextP,clearTextButtonP],
|
||||||
|
//bbar: [{xtype: 'tbfill'},editMembersButton],
|
||||||
|
listeners: {rowdblclick: function(){
|
||||||
|
(availableGrid.hidden)? DoNothing() : RemoveGroupsAction();
|
||||||
|
}}
|
||||||
|
});
|
||||||
|
|
||||||
|
buttonsPanel = new Ext.Panel({
|
||||||
|
width : 40,
|
||||||
|
layout : {
|
||||||
|
type:'vbox',
|
||||||
|
padding:'0',
|
||||||
|
pack:'center',
|
||||||
|
align:'center'
|
||||||
|
},
|
||||||
|
defaults:{margins:'0 0 35 0'},
|
||||||
|
items:[
|
||||||
|
{xtype:'button',text: '>', handler: AssignGroupsAction, id: 'assignButton', disabled: true},
|
||||||
|
{xtype:'button',text: '<', handler: RemoveGroupsAction, id: 'removeButton', disabled: true},
|
||||||
|
{xtype:'button',text: '>>', handler: AssignAllGroupsAction, id: 'assignButtonAll', disabled: false},
|
||||||
|
{xtype:'button',text: '<<', handler: RemoveAllGroupsAction, id: 'removeButtonAll', disabled: false}
|
||||||
|
],
|
||||||
|
hidden: true
|
||||||
|
});
|
||||||
|
|
||||||
|
//GROUPS DRAG AND DROP PANEL
|
||||||
|
UsersPanel = new Ext.Panel({
|
||||||
|
region: 'center',
|
||||||
|
//title : _('ID_USERS'),
|
||||||
|
autoWidth : true,
|
||||||
|
layout : 'hbox',
|
||||||
|
defaults : { flex : 1 }, //auto stretch
|
||||||
|
layoutConfig : { align : 'stretch' },
|
||||||
|
items : [availableGrid,buttonsPanel,assignedGrid],
|
||||||
|
viewConfig : {forceFit:true},
|
||||||
|
bbar: [{xtype: 'tbfill'},editMembersButton, cancelEditMembersButton]
|
||||||
|
});
|
||||||
|
|
||||||
|
//NORTH PANEL WITH TITLE AND ROLE DETAILS
|
||||||
|
northPanel = new Ext.Panel({
|
||||||
|
region: 'north',
|
||||||
|
xtype: 'panel',
|
||||||
|
tbar: ['<b>'+_('ID_DEPARTMENT') + ' : ' + DEPARTMENT.DEP_TITLE + '</b>',{xtype: 'tbfill'},backButton]
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//LOAD ALL PANELS
|
||||||
|
viewport = new Ext.Viewport({
|
||||||
|
layout: 'border',
|
||||||
|
items: [northPanel, UsersPanel]
|
||||||
|
});
|
||||||
|
|
||||||
|
RefreshUsers();
|
||||||
|
DDLoadUsers();
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
//Do Nothing Function
|
||||||
|
DoNothing = function(){};
|
||||||
|
|
||||||
|
//Return to Roles Main Page
|
||||||
|
BackToUsers = function(){
|
||||||
|
location.href = 'departments';
|
||||||
|
};
|
||||||
|
|
||||||
|
//Loads Drag N Drop Functionality for Permissions
|
||||||
|
DDLoadUsers = function(){
|
||||||
|
//GROUPS DRAG N DROP AVAILABLE
|
||||||
|
var availableGridDropTargetEl = availableGrid.getView().scroller.dom;
|
||||||
|
var availableGridDropTarget = new Ext.dd.DropTarget(availableGridDropTargetEl, {
|
||||||
|
ddGroup : 'availableGridDDGroup',
|
||||||
|
notifyDrop : function(ddSource, e, data){
|
||||||
|
var records = ddSource.dragData.selections;
|
||||||
|
var arrAux = new Array();
|
||||||
|
for (var r=0; r < records.length; r++){
|
||||||
|
arrAux[r] = records[r].data['USR_UID'];
|
||||||
|
}
|
||||||
|
DeleteDepartmentUser(arrAux,RefreshUsers,FailureProcess);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
//GROUPS DRAG N DROP ASSIGNED
|
||||||
|
var assignedGridDropTargetEl = assignedGrid.getView().scroller.dom;
|
||||||
|
var assignedGridDropTarget = new Ext.dd.DropTarget(assignedGridDropTargetEl, {
|
||||||
|
ddGroup : 'assignedGridDDGroup',
|
||||||
|
notifyDrop : function(ddSource, e, data){
|
||||||
|
var records = ddSource.dragData.selections;
|
||||||
|
var arrAux = new Array();
|
||||||
|
for (var r=0; r < records.length; r++){
|
||||||
|
arrAux[r] = records[r].data['USR_UID'];
|
||||||
|
}
|
||||||
|
SaveDepartmentUser(arrAux,RefreshUsers,FailureProcess);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
sw_func_groups = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
//REFRESH GROUPS GRIDS
|
||||||
|
RefreshUsers = function(){
|
||||||
|
DoSearchA();
|
||||||
|
DoSearchP();
|
||||||
|
};
|
||||||
|
|
||||||
|
//FAILURE AJAX FUNCTION
|
||||||
|
FailureProcess = function(){
|
||||||
|
Ext.Msg.alert(_('ID_DEPARTMENTS'), _('ID_MSG_AJAX_FAILURE'));
|
||||||
|
};
|
||||||
|
|
||||||
|
//ASSIGN USERS TO A DEPARTMENT
|
||||||
|
SaveDepartmentUser = function(arr_usr, function_success, function_failure){
|
||||||
|
var sw_response;
|
||||||
|
viewport.getEl().mask(_('ID_PROCESSING'));
|
||||||
|
Ext.Ajax.request({
|
||||||
|
url: 'departments_Ajax',
|
||||||
|
params: {action: 'assignDepartmentToUserMultiple', DEP_UID: DEPARTMENT.DEP_UID, USR_UID: arr_usr.join(',')},
|
||||||
|
success: function(){
|
||||||
|
function_success();
|
||||||
|
viewport.getEl().unmask();
|
||||||
|
},
|
||||||
|
failure: function(){
|
||||||
|
function_failure();
|
||||||
|
viewport.getEl().unmask();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
//REMOVE USERS FROM A DEPARTMENT
|
||||||
|
DeleteDepartmentUser = function(arr_usr, function_success, function_failure){
|
||||||
|
var sw_response;
|
||||||
|
viewport.getEl().mask(_('ID_PROCESSING'));
|
||||||
|
Ext.Ajax.request({
|
||||||
|
url: 'departments_Ajax',
|
||||||
|
params: {action: 'deleteDepartmentToUserMultiple', DEP_UID: DEPARTMENT.DEP_UID, USR_UID: arr_usr.join(',')},
|
||||||
|
success: function(){
|
||||||
|
function_success();
|
||||||
|
viewport.getEl().unmask();
|
||||||
|
},
|
||||||
|
failure: function(){
|
||||||
|
function_failure();
|
||||||
|
viewport.getEl().unmask();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
//AssignButton Functionality
|
||||||
|
AssignGroupsAction = function(){
|
||||||
|
rowsSelected = availableGrid.getSelectionModel().getSelections();
|
||||||
|
var arrAux = new Array();
|
||||||
|
for(var a=0; a < rowsSelected.length; a++){
|
||||||
|
arrAux[a] = rowsSelected[a].get('USR_UID');
|
||||||
|
}
|
||||||
|
SaveDepartmentUser(arrAux,RefreshUsers,FailureProcess);
|
||||||
|
};
|
||||||
|
|
||||||
|
//RemoveButton Functionality
|
||||||
|
RemoveGroupsAction = function(){
|
||||||
|
rowsSelected = assignedGrid.getSelectionModel().getSelections();
|
||||||
|
var arrAux = new Array();
|
||||||
|
for(var a=0; a < rowsSelected.length; a++){
|
||||||
|
arrAux[a] = rowsSelected[a].get('USR_UID');
|
||||||
|
}
|
||||||
|
DeleteDepartmentUser(arrAux,RefreshUsers,FailureProcess);
|
||||||
|
};
|
||||||
|
|
||||||
|
//AssignALLButton Functionality
|
||||||
|
AssignAllGroupsAction = function(){
|
||||||
|
var allRows = availableGrid.getStore();
|
||||||
|
var arrAux = new Array();
|
||||||
|
if (allRows.getCount()>0){
|
||||||
|
for (var r=0; r < allRows.getCount(); r++){
|
||||||
|
row = allRows.getAt(r);
|
||||||
|
arrAux[r] = row.data['USR_UID'];
|
||||||
|
}
|
||||||
|
SaveDepartmentUser(arrAux,RefreshUsers,FailureProcess);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
//RevomeALLButton Functionality
|
||||||
|
RemoveAllGroupsAction = function(){
|
||||||
|
var allRows = assignedGrid.getStore();
|
||||||
|
var arrAux = new Array();
|
||||||
|
if (allRows.getCount()>0){
|
||||||
|
for (var r=0; r < allRows.getCount(); r++){
|
||||||
|
row = allRows.getAt(r);
|
||||||
|
arrAux[r] = row.data['USR_UID'];
|
||||||
|
}
|
||||||
|
DeleteDepartmentUser(arrAux,RefreshUsers,FailureProcess);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
//Function DoSearch Available
|
||||||
|
DoSearchA = function(){
|
||||||
|
availableGrid.store.load({params: {textFilter: searchTextA.getValue()}});
|
||||||
|
};
|
||||||
|
|
||||||
|
//Function DoSearch Assigned
|
||||||
|
DoSearchP = function(){
|
||||||
|
assignedGrid.store.load({params: {textFilter: searchTextP.getValue()}});
|
||||||
|
};
|
||||||
|
|
||||||
|
//Load Grid By Default Available Members
|
||||||
|
GridByDefaultA = function(){
|
||||||
|
searchTextA.reset();
|
||||||
|
availableGrid.store.load();
|
||||||
|
};
|
||||||
|
|
||||||
|
//Load Grid By Default Assigned Members
|
||||||
|
GridByDefaultP = function(){
|
||||||
|
searchTextP.reset();
|
||||||
|
assignedGrid.store.load();
|
||||||
|
};
|
||||||
|
|
||||||
|
//edit members action
|
||||||
|
EditMembersAction = function(){
|
||||||
|
availableGrid.show();
|
||||||
|
buttonsPanel.show();
|
||||||
|
editMembersButton.hide();
|
||||||
|
cancelEditMembersButton.show();
|
||||||
|
UsersPanel.doLayout();
|
||||||
|
};
|
||||||
|
|
||||||
|
//CancelEditMenbers Function
|
||||||
|
CancelEditMembersAction = function(){
|
||||||
|
availableGrid.hide();
|
||||||
|
buttonsPanel.hide();
|
||||||
|
editMembersButton.show();
|
||||||
|
cancelEditMembersButton.hide();
|
||||||
|
UsersPanel.doLayout();
|
||||||
|
};
|
||||||
|
|
||||||
|
//Render Full User Name
|
||||||
|
show_user = function(v,i,s){
|
||||||
|
return _FNF(v,s.data.USR_FIRSTNAME, s.data.USR_LASTNAME);
|
||||||
|
};
|
||||||
@@ -49,6 +49,9 @@
|
|||||||
|
|
||||||
$htmlDpto = lookforchildren( '' , 0);
|
$htmlDpto = lookforchildren( '' , 0);
|
||||||
|
|
||||||
|
print_r($htmlDpto);
|
||||||
|
die;
|
||||||
|
|
||||||
$content = $template->getOutputContent();
|
$content = $template->getOutputContent();
|
||||||
print $content;
|
print $content;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user