static function loadFromAdeli($adeli)
 {
     $cache = new Cache(__METHOD__, func_get_args(), Cache::INNER);
     if ($cache->exists()) {
         return $cache->get();
     }
     $mediuser = new CMediusers();
     $where = array();
     $where["users_mediboard.adeli"] = " = '{$adeli}'";
     $mediuser->loadObject($where);
     return $cache->put($mediuser, false);
 }
// praticien(s) && secretaires
$profile_prat = CValue::post("profile_prat");
$profile_sec = CValue::post("profile_sec");
foreach ($_POST["user"] as $type => $_user_list) {
    foreach ($_user_list as $_user) {
        if (!$_user['lastname'] || !$_user['firstname']) {
            continue;
        }
        $mediuser = new CMediusers();
        $mediuser->_user_last_name = trim($_user['lastname']);
        $mediuser->_user_first_name = trim($_user['firstname']);
        $mediuser->makeUsernamePassword($mediuser->_user_first_name, $mediuser->_user_last_name);
        $where = array();
        $ljoin["users"] = "users_mediboard.user_id = users.user_id";
        $where['users.user_username'] = "******" . $mediuser->_user_username . "'";
        $mediuser->loadObject($where, null, null, $ljoin);
        if ($mediuser->_id) {
            CAppUI::stepAjax("Cabinet_mediuser_prenom%s_nom%s_username%s_already_exist", UI_MSG_WARNING, $mediuser->_user_first_name, $mediuser->_user_last_name, $mediuser->_user_username);
            continue;
        }
        $mediuser->function_id = $cabinet->_id;
        //praticien
        if ($type == "prat") {
            $mediuser->_profile_id = $profile_prat;
            $mediuser->_user_type = 13;
        }
        //secretaire
        if ($type == "sec") {
            $mediuser->_profile_id = $profile_sec;
            $mediuser->_user_type = 10;
        }
$where = array();
$where["user_id"] = "IS NULL";
/** @var CHprim21Medecin[] $listHprimMedecins */
$listHprimMedecins = $hprimMedecin->loadList($where);
$total = count($listHprimMedecins);
// Liaison à un médecin existant
$nouv = 0;
foreach ($listHprimMedecins as $_medecin) {
    $_medecin->loadRefExchange();
    $echg_hprim = $_medecin->_ref_echange_hprim21;
    $medecin = new CMediusers();
    $ljoin = array();
    $ljoin["users"] = "users.user_id = users_mediboard.user_id";
    $where = array();
    $where["users_mediboard.adeli"] = " = '{$_medecin->external_id}'";
    $medecin->loadObject($where, null, null, $ljoin);
    if ($medecin->_id) {
        $_medecin->user_id = $medecin->_id;
        $_medecin->store();
        $nouv++;
    }
    $echg_hprim->object_class = "CMediusers";
    $echg_hprim->object_id = $medecin->_id;
    $echg_hprim->store();
}
CAppUI::stepAjax("Médecins utilisés : '{$total}'");
CAppUI::stepAjax("Médecins rapprochés : '{$nouv}'");
if ($total > 0) {
    CAppUI::stepAjax($nouv * 100 / $total . ", %% de rapprochement de médecins");
}
// Gestion des patients
 /**
  * Récupération des participants de l'intervention
  *
  * @param DOMNode $node   Node
  * @param CSejour $sejour Séjour
  *
  * @return string
  */
 function getParticipant(DOMNode $node, CSejour $sejour = null)
 {
     $xpath = new CHPrimXPath($node->ownerDocument);
     $adeli = $xpath->queryTextNode("hprim:participants/hprim:participant/hprim:medecin/hprim:numeroAdeli", $node);
     // Recherche du mediuser
     $mediuser = new CMediusers();
     if (!$adeli) {
         return $mediuser;
     }
     $where = array("users_mediboard.adeli" => $mediuser->_spec->ds->prepare("=%", $adeli), "functions_mediboard.group_id" => "= '{$sejour->group_id}'");
     $ljoin = array("functions_mediboard" => "functions_mediboard.function_id = users_mediboard.function_id");
     $mediuser->loadObject($where, null, null, $ljoin);
     return $mediuser;
 }
 /**
  * Récupération du médecin
  *
  * @param DOMNode $node Node
  *
  * @return int
  */
 function getMedecin(DOMNode $node)
 {
     $xpath = new CHPrimXPath($node->ownerDocument);
     $code = $xpath->queryTextNode("hprim:identification/hprim:code", $node);
     $mediuser = new CMediusers();
     $tag = $this->_ref_echange_hprim->_ref_sender->_tag_mediuser;
     $idex = CIdSante400::getMatch("CMediusers", $tag, $code);
     if ($idex->_id) {
         return $idex->object_id;
     }
     $rpps = $xpath->queryTextNode("hprim:noRPPS", $node);
     if ($rpps) {
         $mediuser = new CMediusers();
         $where = array();
         $where["users_mediboard.rpps"] = " = '{$rpps}'";
         $mediuser->loadObject($where);
         return $mediuser->_id;
     }
     $adeli = $xpath->queryTextNode("hprim:numeroAdeli", $node);
     if ($adeli) {
         $mediuser = CMediusers::loadFromAdeli($adeli);
         return $mediuser->_id;
     }
     // Récupération du typePersonne
     // Obligatoire pour MB
     $personne = $xpath->queryUniqueNode("hprim:personne", $node, false);
     $mediuser = self::getPersonne($personne, $mediuser);
     $mediuser->_id = $this->createPraticien($mediuser);
     $idex->object_id = $mediuser->_id;
     $idex->last_update = CMbDT::dateTime();
     $idex->store();
     return $mediuser->_id;
 }
 /**
  * Return or create the doctor of the message
  *
  * @param DOMNode $node Node
  *
  * @return CMediusers|int|null
  */
 function getDoctor($node)
 {
     $xpath = new CHPrimSanteMessageXPath($node ? $node->ownerDocument : $this);
     $nodeDoctor = $xpath->query("P.13", $node);
     $code = null;
     $nom = null;
     $prenom = null;
     $type_code = null;
     foreach ($nodeDoctor as $_node_doctor) {
         $code = $xpath->queryTextNode("CNA.1", $_node_doctor);
         $nom = $xpath->queryTextNode("CNA.2/PN.1", $_node_doctor);
         $prenom = $xpath->queryTextNode("CNA.2/PN.2", $_node_doctor);
         $type_code = $xpath->queryTextNode("CNA.3", $_node_doctor);
         if ($code && $nom) {
             break;
         }
     }
     $mediuser = new CMediusers();
     $mediuser->_user_last_name = $nom;
     switch ($type_code) {
         case "R":
             $mediuser->rpps = $code;
             break;
         case "A":
             $mediuser->adeli = $code;
             break;
         default:
             if (strlen($code) == 9 && luhn($code)) {
                 $mediuser->adeli = $code;
             }
             if (strlen($code) == 11 && luhn($code)) {
                 $mediuser->rpps = $code;
             }
     }
     // Cas où l'on a aucune information sur le médecin
     if (!$mediuser->rpps && !$mediuser->adeli && !$mediuser->_id && !$mediuser->_user_last_name) {
         return null;
     }
     $sender = $this->_ref_sender;
     $ds = $mediuser->getDS();
     $ljoin = array();
     $ljoin["functions_mediboard"] = "functions_mediboard.function_id = users_mediboard.function_id";
     $where = array();
     $where["functions_mediboard.group_id"] = " = '{$sender->group_id}'";
     if ($mediuser->rpps || $mediuser->adeli) {
         if ($mediuser->rpps) {
             $where[] = $ds->prepare("rpps = %", $mediuser->rpps);
         }
         if ($mediuser->adeli) {
             $where[] = $ds->prepare("adeli = %", $mediuser->adeli);
         }
         // Dans le cas où le praticien recherché par son ADELI ou RPPS est multiple
         if ($mediuser->countList($where, null, $ljoin) > 1) {
             $ljoin["users"] = "users_mediboard.user_id = users.user_id";
             $where[] = $ds->prepare("users.user_last_name = %", $nom);
         }
         $mediuser->loadObject($where, null, null, $ljoin);
         if ($mediuser->_id) {
             return $mediuser;
         }
     }
     $user = new CUser();
     $ljoin = array();
     $ljoin["users_mediboard"] = "users.user_id = users_mediboard.user_id";
     $ljoin["functions_mediboard"] = "functions_mediboard.function_id = users_mediboard.function_id";
     $where = array();
     $where["functions_mediboard.group_id"] = " = '{$sender->group_id}'";
     $where[] = $ds->prepare("users.user_first_name = %", $prenom);
     $where[] = $ds->prepare("users.user_last_name = %", $nom);
     $order = "users.user_id ASC";
     if ($user->loadObject($where, $order, null, $ljoin)) {
         return $user->loadRefMediuser();
     }
     $mediuser->_user_first_name = $prenom;
     $mediuser->_user_last_name = $nom;
     return $this->createDoctor($mediuser);
 }
 $function = new CFunctions();
 $function->group_id = CGroups::loadCurrent()->_id;
 $function->text = $results[$i]["function_name"];
 $function->loadMatchingObject();
 // Praticien
 $prat = new CMediusers();
 $lastname = $results[$i]["praticien_lastname"];
 $firstname = $results[$i]["praticien_firstname"];
 if ($lastname) {
     $ljoin = array();
     $ljoin["users"] = "users.user_id = users_mediboard.user_id";
     $where = array();
     $where["users.user_last_name"] = "= '{$lastname}'";
     $where["users.user_first_name"] = "= '{$firstname}'";
     //$where["users_mediboard.function_id"] = "= '$function->_id'";
     $prat->loadObject($where, null, null, $ljoin);
 }
 if (!$function->_id && !$prat->_id) {
     $results[$i]["errors"][] = "Fonction et utilisateur non trouvé";
     $unfound["praticien_lastname"][$lastname] = true;
 }
 // Protocole
 $protocole = new CProtocole();
 $protocole->_time_op = null;
 $protocole->for_sejour = $results[$i]["for_sejour"];
 if (isset($results[$i]["motif"]) && $results[$i]["motif"] != "") {
     $protocole->libelle = $results[$i]["motif"];
 }
 if (isset($results[$i]["libelle_sejour"]) && $results[$i]["libelle_sejour"] != "") {
     $protocole->libelle_sejour = $results[$i]["libelle_sejour"];
 }