From 804cd8fcad66ffde3f41dd64e02d9d2dd16ec6e4 Mon Sep 17 00:00:00 2001 From: "marcelo.cuiza" Date: Fri, 2 Oct 2015 12:53:30 -0400 Subject: [PATCH] PM-3705: 18640: Subdepartments sin supervisors no hacen report to al inmediato supervisor del department. . se corrigio el problema Se corrigio las observaciones . --- workflow/engine/classes/model/Department.php | 54 +++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) 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; + } }