/** * Find the host from a context object * * @param CMbObject|string $context The context (séjour, rpu, service, etablissement) * * @return CGroups|CService|CFunctions|string */ static function guessHost($context) { if ($context === "global") { return "global"; } // Etablissement, service ou cabinet (deja un HOST) if ($context instanceof CGroups || $context instanceof CService || $context instanceof CFunctions || $context instanceof CBlocOperatoire) { return $context; } // Séjour d'urgence if ($context instanceof CSejour && $context->type == "urg") { $rpu = $context->loadRefRPU(); if ($rpu && $rpu->_id) { $context = $rpu; } } // Sejour if ($context instanceof CSejour) { $affectation = $context->loadRefCurrAffectation(); if (!$affectation->_id) { $affectation = $context->loadRefFirstAffectation(); } return $affectation->loadRefService(); } // Urgences if ($context instanceof CRPU) { /** @var CService $service */ $service = null; if ($context->box_id) { return $context->loadRefBox()->loadRefService(); } $sejour = $context->loadRefSejour(); $affectation = $sejour->loadRefCurrAffectation(); if (!$affectation->_id) { $affectation = $sejour->loadRefFirstAffectation(); } $service = $affectation->loadRefService(); if ($service && $service->_id) { return $service; } // Recherche du premier service d'urgences actif $group_id = CGroups::loadCurrent()->_id; $where = array("group_id" => "= '{$group_id}'", "urgence" => "= '1'", "cancelled" => "= '0'"); $service = new CService(); $service->loadObject($where, "nom"); return $service; } // Utiliser le contexte de la consultation dans la cas des dossiers d'anesth if ($context instanceof CConsultAnesth) { $context = $context->loadRefConsultation(); } // Utiliser le contexte du cabinet dans le cas des consultations if ($context instanceof CConsultation) { return $context->loadRefPlageConsult()->loadRefChir()->loadRefFunction(); } return CGroups::loadCurrent(); }