// Transmissions
$whereTrans = $where;
$whereTrans["libelle_atc"] = "IS NOT NULL";
$whereTrans["date"] = "BETWEEN '{$datetime_delta}' AND '{$datetime_avg}'";
$transmission = new CTransmissionMedicale();
$transmissions = $transmission->loadList($whereTrans, "date");
$whereTrans = $where;
$whereTrans["date"] = "BETWEEN '{$datetime_delta}' AND '{$datetime_avg}'";
$whereTrans["object_id"] = "IS NOT NULL";
$transmission = new CTransmissionMedicale();
$transmissions = array_merge($transmissions, $transmission->loadList($whereTrans, "date"));
$whereTrans = $where;
$whereTrans["date"] = "BETWEEN '{$datetime_delta}' AND '{$datetime_avg}'";
$whereTrans[] = "object_id IS NULL and libelle_atc IS NULL";
$transmission = new CTransmissionMedicale();
$transmissions = array_merge($transmissions, $transmission->loadList($whereTrans, "date"));
CStoredObject::massLoadFwdRef($transmissions, "user_id");
array_multisort(CMbArray::pluck($transmissions, "date"), SORT_ASC, $transmissions);
// Observations
$observation = new CObservationMedicale();
$whereObs = $where;
$whereObs["date"] = "BETWEEN '{$datetime_delta}' AND '{$datetime_avg}'";
$observations = $observation->loadList($whereObs, "date");
CStoredObject::massLoadFwdRef($observations, "user_id");
// Consultations
$consultation = new CConsultation();
$whereConsult = $where;
$whereConsult["plageconsult.date"] = "BETWEEN '{$datetime_delta}' AND '{$datetime_avg}'";
$ljoin = array("plageconsult" => "plageconsult.plageconsult_id = consultation.plageconsult_id");
$consultations = $consultation->loadList($whereConsult, "plageconsult.date", null, null, $ljoin);
CStoredObject::massLoadFwdRef($consultations, "plageconsult_id");
    $where["user_id"] = " = '{$user_id}'";
}
if ($degre) {
    if ($degre == "urg_normal") {
        $where["degre"] = "IN('low', 'high')";
    }
    if ($degre == "urg") {
        $where["degre"] = "= 'high'";
    }
}
// Chargement des transmissions
if ($load_transmissions == "1") {
    $ljoin["sejour"] = "transmission_medicale.sejour_id = sejour.sejour_id";
    $ljoin["affectation"] = "sejour.sejour_id = affectation.sejour_id";
    $transmission = new CTransmissionMedicale();
    $transmissions = $transmission->loadList($where, null, null, "transmission_medicale_id", $ljoin);
}
// Chargement des observations
if ($load_observations == "1") {
    $ljoin["sejour"] = "observation_medicale.sejour_id = sejour.sejour_id";
    $ljoin["affectation"] = "sejour.sejour_id = affectation.sejour_id";
    $observation = new CObservationMedicale();
    $observations = $observation->loadList($where, null, null, "observation_medicale_id", $ljoin);
}
$cibles = array();
$trans_and_obs = array();
foreach ($transmissions as $_transmission) {
    $_transmission->loadRefsFwd();
    $_transmission->_ref_sejour->loadRefPatient();
    $_transmission->_ref_sejour->loadRefsAffectations();
    $_transmission->_ref_sejour->_ref_last_affectation->loadRefLit();
$where["date"] = " >= '" . CMbDT::dateTime("- 7 DAYS") . "'";
/* @var CObservationMedicale[] $observations */
$observations = $observation->loadList($where);
// Chargement des transmissions d'importance haute ou des macrocibles de moins de 7 jours
$transmission = new CTransmissionMedicale();
$where = array();
$where["date"] = " >= '" . CMbDT::dateTime("- 7 DAYS") . "'";
$where["sejour_id"] = " = '{$sejour_id}'";
$where[] = "degre = 'high' OR category_prescription.cible_importante = '1'";
if (CAppUI::conf("soins synthese transmission_date_limit", CGroups::loadCurrent()->_guid)) {
    $where[] = "date_max >= '" . CMbDT::dateTime() . "' OR date_max IS NULL";
}
$ljoin = array();
$ljoin["category_prescription"] = "transmission_medicale.object_id = category_prescription.category_prescription_id\r\n                                  AND transmission_medicale.object_class = 'CCategoryPrescription'";
/* @var CTransmissionMedicale[] $transmissions */
$transmissions = $transmission->loadList($where, null, null, null, $ljoin);
$suivi = array();
CStoredObject::massLoadFwdRef($observations, "sejour_id");
$users = CStoredObject::massLoadFwdRef($observations, "user_id");
CStoredObject::massLoadFwdRef($users, "function_id");
foreach ($observations as $_observation) {
    $_observation->loadRefSejour();
    $_observation->loadRefUser()->loadRefFunction();
    $suivi[$_observation->date . $_observation->_id] = $_observation;
}
CStoredObject::massLoadFwdRef($transmissions, "sejour_id");
$users = CStoredObject::massLoadFwdRef($transmissions, "user_id");
CStoredObject::massLoadFwdRef($users, "function_id");
foreach ($transmissions as $_transmission) {
    $_transmission->loadRefSejour();
    $_transmission->loadRefUser()->loadRefFunction();
     CMbObject::massLoadFwdRef($_lits, "chambre_id");
 }
 $sorter_affectation = CMbArray::pluck($sejours, "_ref_last_affectation", "_view");
 $sorter_patient = CMbArray::pluck($sejours, "_ref_patient", "nom");
 array_multisort($sorter_affectation, SORT_ASC, $sorter_patient, SORT_ASC, $sejours);
 $sejours_ids = array();
 if (count($sejours)) {
     $sejours = array_combine(CMbArray::pluck($sejours, "_id"), $sejours);
     $sejours_ids = array_keys($sejours);
 }
 if ($do_trans) {
     $trans = new CTransmissionMedicale();
     $whereTrans = array();
     $whereTrans[] = "(degre = 'high' AND (date_max IS NULL OR date_max >= '{$dateTime_min}')) OR (date >= '{$dateTime_min}' AND date <= '{$dateTime_max}')";
     $whereTrans["sejour_id"] = CSQLDataSource::prepareIn($sejours_ids);
     $transmissions = $trans->loadList($whereTrans, "FIND_IN_SET(sejour_id, '" . implode(',', $sejours_ids) . "')");
     CMbObject::massLoadFwdRef($transmissions, "user_id");
     foreach ($transmissions as $_trans) {
         $_trans->loadRefUser();
         $_trans->loadTargetObject();
         if ($_trans->_ref_object) {
             $_trans->_ref_object->loadRefsFwd();
         }
         $_trans->_ref_sejour = $sejours[$_trans->sejour_id];
         $trans_and_obs[$_trans->_ref_sejour->patient_id][$_trans->date][] = $_trans;
     }
     $obs = new CObservationMedicale();
     $whereObs = array();
     $whereObs[] = "(degre = 'high') OR (date >= '{$dateTime_min}' AND date <= '{$dateTime_max}')";
     $whereObs["sejour_id"] = CSQLDataSource::prepareIn(array_keys($sejours));
     $observations = $obs->loadList($whereObs, "FIND_IN_SET(observation_medicale.sejour_id, '" . implode(',', $sejours_ids) . "')");
Exemple #5
0
 /**
  * Charge tout le suivi médical, composé d'observations, transmissions, consultations et prescriptions
  *
  * @param date $datetime_min Date de référence à partir de laquelle filtrer
  *
  * @return array
  */
 function loadSuiviMedical($datetime_min = null, $cible_trans = null, &$cibles = array(), &$last_trans_cible = array(), $user_id = null, &$users = array(), $print = 0)
 {
     if ($datetime_min) {
         $trans = new CTransmissionMedicale();
         $whereTrans = array();
         $whereTrans[] = "(degre = 'high' AND (date_max IS NULL OR date_max >= '{$datetime_min}')) OR (date >= '{$datetime_min}')";
         $whereTrans["sejour_id"] = " = '{$this->_id}'";
         $this->_back["transmissions"] = $trans->loadList($whereTrans, "date DESC, transmission_medicale_id DESC");
         $obs = new CObservationMedicale();
         $whereObs = array();
         $whereObs[] = "(degre = 'high') OR (date >= '{$datetime_min}')";
         $whereObs["sejour_id"] = " = '{$this->_id}'";
         $this->_back["observations"] = $obs->loadList($whereObs);
     } else {
         $this->loadBackRefs("observations");
         $this->loadBackRefs("transmissions", "date DESC, transmission_medicale_id DESC");
     }
     $consultations = $this->loadRefsConsultations();
     $this->_ref_suivi_medical = array();
     if (isset($this->_back["observations"])) {
         CObservationMedicale::massLoadRefAlerte($this->_back["observations"]);
         foreach ($this->_back["observations"] as $curr_obs) {
             /** @var CObservationMedicale $curr_obs */
             $curr_obs->loadRefsFwd();
             $users[$curr_obs->user_id] = $curr_obs->_ref_user;
             if ($user_id && $curr_obs->user_id != $user_id) {
                 continue;
             }
             $curr_obs->_ref_user->loadRefFunction();
             $curr_obs->canEdit();
             $this->_ref_suivi_medical[$curr_obs->date . $curr_obs->_id . "obs"] = $curr_obs;
         }
     }
     if (isset($this->_back["transmissions"])) {
         $trans_compact = CAppUI::conf("soins Transmissions trans_compact", CGroups::loadCurrent()) && !$print;
         $list_trans = array();
         /** @var CTransmissionMedicale $curr_trans **/
         foreach ($this->_back["transmissions"] as $curr_trans) {
             $curr_trans->loadRefsFwd();
             $users[$curr_trans->user_id] = $curr_trans->_ref_user;
             if ($user_id && $curr_trans->user_id != $user_id) {
                 continue;
             }
             $curr_trans->calculCibles($cibles);
             if ($cible_trans && $curr_trans->_cible != $cible_trans) {
                 continue;
             }
             $list_trans[] = $curr_trans;
             $curr_trans->canEdit();
             $curr_trans->loadRefUser();
             if ($curr_trans->libelle_ATC) {
                 if (!isset($last_trans_cible[$curr_trans->libelle_ATC])) {
                     $last_trans_cible[$curr_trans->libelle_ATC] = $curr_trans;
                 }
             } else {
                 if (!isset($last_trans_cible["{$curr_trans->object_class} {$curr_trans->object_id}"])) {
                     $last_trans_cible["{$curr_trans->object_class} {$curr_trans->object_id}"] = $curr_trans;
                 }
             }
         }
         foreach ($list_trans as $_trans) {
             $sort_key_pattern = "{$_trans->_class} {$_trans->user_id} {$_trans->object_id} {$_trans->object_class} {$_trans->libelle_ATC}";
             $sort_key = "{$_trans->date} {$sort_key_pattern}";
             $date_before = CMbDT::dateTime("-1 SECOND", $_trans->date);
             $sort_key_before = "{$date_before} {$sort_key_pattern}";
             $date_after = CMbDT::dateTime("+1 SECOND", $_trans->date);
             $sort_key_after = "{$date_after} {$sort_key_pattern}";
             if ($_trans->libelle_ATC && $last_trans_cible[$_trans->libelle_ATC] != $_trans && ($last_trans_cible[$_trans->libelle_ATC]->locked || $trans_compact && !array_key_exists($sort_key, $_trans) && !array_key_exists($sort_key_before, $this->_ref_suivi_medical) && !array_key_exists($sort_key_after, $this->_ref_suivi_medical)) || $_trans->object_id && ($last_trans_cible["{$_trans->object_class} {$_trans->object_id}"]->locked || $trans_compact && !array_key_exists($sort_key, $this->_ref_suivi_medical) && !array_key_exists($sort_key_before, $this->_ref_suivi_medical) && !array_key_exists($sort_key_after, $this->_ref_suivi_medical)) && $last_trans_cible["{$_trans->object_class} {$_trans->object_id}"] != $_trans) {
                 continue;
             }
             // Aggrégation à -1 sec
             if (array_key_exists($sort_key_before, $this->_ref_suivi_medical)) {
                 $sort_key = $sort_key_before;
             } else {
                 if (array_key_exists($sort_key_after, $this->_ref_suivi_medical)) {
                     $sort_key = $sort_key_after;
                 }
             }
             if (!isset($this->_ref_suivi_medical[$sort_key])) {
                 $this->_ref_suivi_medical[$sort_key] = array("data" => array(), "action" => array(), "result" => array());
             }
             if (!isset($this->_ref_suivi_medical[$sort_key][0])) {
                 $this->_ref_suivi_medical[$sort_key][0] = $_trans;
             }
             $this->_ref_suivi_medical[$sort_key][$_trans->type][] = $_trans;
         }
     }
     CStoredObject::massLoadBackRefs($consultations, "consult_anesth");
     foreach ($consultations as $_consultation) {
         $_consultation->canEdit();
         $_consultation->loadRefConsultAnesth();
         $unset = false;
         foreach ($_consultation->_refs_dossiers_anesth as $_dossier_anesth) {
             $_dossier_anesth->loadRefOperation();
             $_dossier_anesth->loadRefsTechniques();
             // Retrait des dossiers d'anesthésie non liés à une intervention du séjour
             if (!$_dossier_anesth->operation_id) {
                 $unset = true;
                 continue;
             }
         }
         if ($unset) {
             continue;
         }
         $_consultation->loadRefPlageConsult();
         $_consultation->loadRefPraticien()->loadRefFunction();
         $this->_ref_suivi_medical[$_consultation->_guid . $_consultation->_datetime] = $_consultation;
     }
     if (CModule::getActive("dPprescription") && $this->type == "urg" && CAppUI::conf("dPprescription CPrescription prescription_suivi_soins", CGroups::loadCurrent())) {
         $this->loadRefPrescriptionSejour();
         $prescription = $this->_ref_prescription_sejour;
         // Chargement des lignes de prescriptions d'elements
         $prescription->loadRefsLinesElement();
         $prescription->loadRefsLinesAllComments();
         foreach ($prescription->_ref_prescription_lines_all_comments as $_comment) {
             $_comment->canEdit();
             $_comment->countBackRefs("transmissions");
             $this->_ref_suivi_medical["{$_comment->debut} {$_comment->time_debut} {$_comment->_guid}"] = $_comment;
         }
         // Ajout des lignes de prescription dans la liste du suivi de soins
         foreach ($prescription->_ref_prescription_lines_element as $_line_element) {
             $_line_element->canEdit();
             $_line_element->countBackRefs("transmissions");
             $this->_ref_suivi_medical["{$_line_element->debut} {$_line_element->time_debut} {$_line_element->_guid}"] = $_line_element;
         }
     }
     krsort($this->_ref_suivi_medical);
     return $this->_ref_suivi_medical;
 }