diff --git a/workflow/engine/classes/model/Department.php b/workflow/engine/classes/model/Department.php index d35138dbe..f0bea9d9c 100755 --- a/workflow/engine/classes/model/Department.php +++ b/workflow/engine/classes/model/Department.php @@ -347,6 +347,10 @@ class Department extends BaseDepartment $selectCriteria = new Criteria( 'workflow' ); $selectCriteria->add( UsersPeer::DEP_UID, $depId ); $selectCriteria->add( UsersPeer::USR_UID, $managerId, Criteria::NOT_EQUAL ); + + if(empty($depParent)) { + $depParent = $depId; + } // Create a Criteria object includes the value you want to set $updateCriteria = new Criteria( 'workflow' ); @@ -389,7 +393,41 @@ class Department extends BaseDepartment } $oDataset->next(); } - + + $this->updateUserReportsTo($depId); + } + + public function updateUserReportsTo($depId) + { + $departments = $this->getChildDepartments($depId); + $departments = explode("_",$departments); + $departments = array_filter(array_unique($departments)); + foreach($departments as $depUid) { + $mgrParentId = $this->getDepartmentParentManager($depUid); + $conn = Propel::getConnection( UsersPeer::DATABASE_NAME ); + $selectCriteria = new Criteria( 'workflow' ); + $selectCriteria->add( UsersPeer::DEP_UID, $depUid ); + $updateCriteria = new Criteria( 'workflow' ); + $updateCriteria->add( UsersPeer::USR_REPORTS_TO, $mgrParentId ); + BasePeer::doUpdate( $selectCriteria, $updateCriteria, $conn ); + } + } + + public function getChildDepartments($depId) + { + $depIds = ""; + $depIds .= $depId."_"; + $childrenCriteria = new Criteria( 'workflow' ); + $childrenCriteria->add( DepartmentPeer::DEP_PARENT, $depId ); + $oDataset = DepartmentPeer::doSelectRS( $childrenCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $depId = $aRow['DEP_UID']; + $depIds .= $this->getChildDepartments($depId); + $oDataset->next(); + } + return $depIds; } //add an user to a department and sync all about manager info @@ -700,5 +738,19 @@ class Department extends BaseDepartment } return $departments; } + + public function getDepartmentParentManager($depId) + { + $managerUid = ""; + $depInfo = $this->Load($depId); + if(empty($depInfo['DEP_MANAGER'])) { + if(!empty($depInfo['DEP_PARENT'])) { + $managerUid = $this->getDepartmentParentManager($depInfo['DEP_PARENT']); + } + } else { + $managerUid = $depInfo['DEP_MANAGER']; + } + return $managerUid; + } }