/** * Charge complètement un service pour l'affichage des affectations * * @param CService $service le service concerné * @param string $date le filtre de date sur les affectations * @param string $mode forcer le chargement des affectations effectuées * @param int $praticien charge les séjours pour un praticien en particulier * @param string $type charge les séjours pour un type d'hospitalisation * @param int $prestation_id charge la prestation éventuellement associée à chaque séjour * * * @return void */ function loadServiceComplet(&$service, $date, $mode, $praticien_id = "", $type = "", $prestation_id = "", $with_dossier_medical = true) { $service->_nb_lits_dispo = 0; $dossiers = array(); $systeme_presta = CAppUI::conf("dPhospi prestations systeme_prestations", CGroups::loadCurrent()); $lits = $service->loadRefsLits(); foreach ($lits as $_lit) { $_lit->_ref_affectations = array(); $_lit->checkDispo($date); } $affectations = $service->loadRefsAffectations($date, $mode, false, true); $sejours = CMbObject::massLoadFwdRef($affectations, "sejour_id"); CMbObject::massLoadFwdRef($sejours, "patient_id"); CMbObject::massLoadFwdRef($sejours, "prestation_id"); CMbObject::massLoadFwdRef($sejours, "praticien_id"); if (CModule::getActive("dPImeds")) { CSejour::massLoadNDA($sejours); } foreach ($affectations as $_affectation) { $sejour = $_affectation->loadRefSejour(); if ($praticien_id) { if ($sejour->praticien_id != $praticien_id) { unset($affectations[$_affectation->_id]); continue; } } if ($type) { if ($sejour->type != $type) { unset($affectations[$_affectation->_id]); continue; } } $lits[$_affectation->lit_id]->_ref_affectations[$_affectation->_id] = $_affectation; $_affectation->loadRefsAffectations(true); $_affectation->checkDaysRelative($date); $aff_prev = $_affectation->_ref_prev; if ($aff_prev->_id) { if ($aff_prev->lit_id) { $aff_prev->loadRefLit(); } else { $aff_prev->loadRefService(); } } $aff_next = $_affectation->_ref_next; if ($aff_next->_id) { if ($aff_next->lit_id) { $aff_prev->loadRefLit(); } else { $aff_prev->loadRefService(); } } $sejour->loadRefPrestation(); $sejour->loadRefsOperations(); $sejour->loadNDA(); $sejour->loadRefPraticien(); $sejour->loadRefPatient(); if ($with_dossier_medical) { $sejour->_ref_patient->loadRefDossierMedical(false); $dossiers[] = $sejour->_ref_patient->_ref_dossier_medical; } // Chargement des droits CMU $sejour->getDroitsCMU(); foreach ($sejour->_ref_operations as $_operation) { $_operation->loadExtCodesCCAM(); } $_affectation->_ref_lit = $lits[$_affectation->lit_id]; $_affectation->loadRefLit(); $_affectation->_ref_lit->_ref_chambre->_nb_affectations++; if ($systeme_presta == "expert" && $prestation_id) { $sejour->loadLiaisonsForDay($prestation_id, $date); } } foreach ($lits as $_lit) { array_multisort(CMbArray::pluck($_lit->_ref_affectations, "_ref_sejour", "entree"), SORT_ASC, $_lit->_ref_affectations); } if ($with_dossier_medical) { CDossierMedical::massCountAntecedentsByType($dossiers, "deficience"); } if (!$service->externe) { foreach ($service->_ref_chambres as $_chambre) { $_chambre->checkChambre(); $service->_nb_lits_dispo += $_chambre->_nb_lits_dispo; } } }