Display direct/indirect users under a manager in totara

|
| By Webner

Display direct/indirect users under a manager in Totara

Direct Users: The users under a manager.
In the following example, Manager1 is direct manager of Manager2.
Indirect Users: The users who are not directly under the manager instead they are under some other manager but that manager is under the main manager.
In the following example, Manager3 is the manager of TestUser1, Manager2 is the manager of Manager3 and Manager1 is the manager of Manager2 therefore, Manager1 is indirectly the manager of TestUser1.

Hierarchy:
Manager1
——-Manager2 ( User of Manager1)
———————-Manager3 ( User of Manage2)
————————————TestUser1 ( User of Manager1)
————————————TestUser2 ( User of Manager2)
————————————TestUser3 ( User of Manager3)
————————————TestUser4 ( User of Manager2)

To view the list of all the direct/indirect users under a Manager, we need to run the following query:

SELECT base.id AS userid 
FROM   {user} base 
WHERE  (( EXISTS (SELECT 1 
                  FROM   {user} u1 
                         INNER JOIN {job_assignment} u1ja 
                                 ON u1ja.userid = u1.id 
                         INNER JOIN {job_assignment} d1ja 
                                 ON d1ja.managerjaid = u1ja.id 
                  WHERE  u1.id = :viewer1 
                         AND d1ja.userid = base.id 
                         AND d1ja.userid != u1.id) 
           OR EXISTS (SELECT 1 
                      FROM   {user} u2 
                             INNER JOIN {job_assignment} u2ja 
                                     ON u2ja.userid = u2.id 
                             INNER JOIN {job_assignment} i2ja 
                                     ON i2ja.managerjapath LIKE 
                                        Concat(u2ja.managerjapath, 
                                        '/%') 
                      WHERE  u2.id = :viewer2 
                             AND i2ja.userid = base.id 
                             AND i2ja.userid != u2.id 
                             AND i2ja.managerjaid != u2ja.id) )) 
       AND base.deleted = 0 
    	 
   	 $params['viewer1'] = <userid of manager1>;
   	 $params['viewer2'] = < userid of manager1>;	   	    
    
   	 $users = $DB->get_records_sql($sql, $params);

By executing this query, all the direct/indirect users under manager1 will be shown:

Result:

Manager2  
Manager3  
             TestUser1
             TestUser2
                          TestUser3
                          TestUser4 

Leave a Reply

Your email address will not be published. Required fields are marked *