* @license GNU General Public License, see http://www.gnu.org/licenses/gpl.html
 */
CCanDo::checkRead();
$user_connected = CMediusers::get();
$user_id = CValue::get("user_id");
if (!$user_id) {
    $user_id = $user_connected->_id;
}
$account_id = CValue::getOrSession("account_id");
//user
$user = new CMediusers();
$user->load($user_id);
//CSourcePOP account
$account = new CSourcePOP();
//getting the list of user with the good rights
$listUsers = $user->loadListWithPerms(PERM_EDIT);
$where = array();
$where["source_pop.is_private"] = "= '0'";
$where["source_pop.object_class"] = "= 'CMediusers'";
$where["users_mediboard.function_id"] = "= '{$user->function_id}'";
$where["users_mediboard.user_id"] = CSQLDataSource::prepareIn(array_keys($listUsers));
$ljoin = array();
$ljoin["users_mediboard"] = "source_pop.object_id = users_mediboard.user_id AND source_pop.object_class = 'CMediusers'";
//all accounts linked to a mediuser
//all accounts from an unique mediuser are grouped, in order to have the mediusers list
/** @var CSourcePOP[] $accounts_available */
$accounts_available = $account->loadList($where, null, null, null, $ljoin);
//getting user list
$users = array();
foreach ($accounts_available as $_account) {
    $userPop = $_account->loadRefMetaObject();
 /**
  * Charge les praticiens à la compta desquels l'utilisateur courant a accès
  *
  * @param ref $prat_id Si définit, retourne un tableau avec seulement ce praticien
  *
  * @todo Définir verbalement la stratégie
  * @return CMediusers[]
  */
 static function loadPraticiensCompta($prat_id = null)
 {
     // Cas du praticien unique
     if ($prat_id) {
         $prat = new CMediusers();
         $prat->load($prat_id);
         $prat->loadRefFunction();
         return array($prat->_id => $prat);
     }
     // Cas standard
     $user = CMediusers::get();
     $is_admin = in_array(CUser::$types[$user->_user_type], array("Administrator"));
     $is_secretaire = in_array(CUser::$types[$user->_user_type], array("Secrétaire"));
     $is_directeur = in_array(CUser::$types[$user->_user_type], array("Directeur"));
     $function = $user->loadRefFunction();
     $praticiens = array();
     // Liste des praticiens du cabinet
     if ($is_admin || $is_secretaire || $is_directeur || $function->compta_partagee) {
         $function_id = null;
         if (!CAppUI::conf("cabinet Comptabilite show_compta_tiers") && $user->_user_username != "admin") {
             $function_id = $user->function_id;
         }
         if ($is_admin) {
             $praticiens = CConsultation::loadPraticiens(PERM_EDIT, $function_id);
         } else {
             $praticiens = CConsultation::loadPraticiens(PERM_EDIT, $user->function_id);
             // On ajoute les praticiens qui ont délégués leurs compta
             $where = array();
             $where[] = "users_mediboard.compta_deleguee = '1' ||  users_mediboard.user_id " . CSQLDataSource::prepareIn(array_keys($praticiens));
             // Filters on users values
             $where["users_mediboard.actif"] = "= '1'";
             $where["functions_mediboard.group_id"] = "= '" . CGroups::loadCurrent()->_id . "'";
             $ljoin["users"] = "users.user_id = users_mediboard.user_id";
             $ljoin["functions_mediboard"] = "functions_mediboard.function_id = users_mediboard.function_id";
             $order = "users.user_last_name, users.user_first_name";
             $mediuser = new CMediusers();
             /** @var CMediusers[] $mediusers */
             $mediusers = $mediuser->loadListWithPerms(PERM_EDIT, $where, $order, null, null, $ljoin);
             // Associate already loaded function
             foreach ($mediusers as $_mediuser) {
                 $_mediuser->loadRefFunction();
             }
             $praticiens = $mediusers;
         }
     } elseif ($user->isPraticien() && !$user->compta_deleguee) {
         return array($user->_id => $user);
     }
     return $praticiens;
 }