Exemple #1
0
        $chir->load($plageConsult->chir_id);
    }
    // grossesse
    if (!$consult->grossesse_id && $grossesse_id) {
        $consult->grossesse_id = $grossesse_id;
    }
    if (CModule::getActive("maternite")) {
        $grossesse = $consult->loadRefGrossesse();
        if (!$consult->patient_id) {
            $consult->patient_id = $grossesse->parturiente_id;
        }
    }
    if ($line_element_id) {
        // RDV issu d'une ligne d'élément
        $consult->sejour_id = $sejour_id;
        $line = new CPrescriptionLineElement();
        $line->load($line_element_id);
        $func_categ = reset($line->_ref_element_prescription->_ref_category_prescription->loadBackRefs("functions_category", null, "1"));
        $plageconsult = new CPlageconsult();
        $where = $ljoin = array();
        $where["pour_tiers"] = "= '1'";
        $where["date"] = "BETWEEN '" . CMbDT::date() . "' AND '" . CMbDT::date("+3 month") . "'";
        if ($func_categ) {
            $_function_id = $func_categ->function_id;
            $where["users_mediboard.function_id"] = "= '{$_function_id}'";
            $ljoin["users_mediboard"] = "users_mediboard.user_id = plageconsult.chir_id";
        }
        $nb_plages = $plageconsult->countList($where, null, $ljoin);
    }
} else {
    // Consultation existante
 * @package    Mediboard
 * @subpackage SSR
 * @author     SARL OpenXtrem <*****@*****.**>
 * @license    GNU General Public License, see http://www.gnu.org/licenses/gpl.html
 * @version    $Revision:$
 */
CCanDo::checkRead();
$prescription_id = CValue::get("prescription_id");
$category_id = CValue::get("category_id");
$full_line_id = CValue::get("full_line_id");
$order = "debut ASC";
$ljoin["element_prescription"] = "prescription_line_element.element_prescription_id = element_prescription.element_prescription_id";
$where["prescription_id"] = " = '{$prescription_id}'";
$where["element_prescription.category_prescription_id"] = " = '{$category_id}'";
$lines = array();
$line = new CPrescriptionLineElement();
$_lines[$category_id] = $line->loadList($where, $order, null, null, $ljoin);
foreach ($_lines[$category_id] as $_line) {
    /* @var CPrescriptionLineElement $_line*/
    $_line->getRecentModification();
    $lines[$category_id][$_line->element_prescription_id][] = $_line;
}
$current_user = CMediusers::get();
$can_edit_prescription = $current_user->isPraticien() || $current_user->isAdmin();
// Création du template
$smarty = new CSmartyDP();
$smarty->assign("full_line_id", $full_line_id);
$smarty->assign("lines", $lines);
$smarty->assign("category_id", $category_id);
$smarty->assign("nodebug", true);
$smarty->assign("can_edit_prescription", $can_edit_prescription);
 *
 * @package    Mediboard
 * @subpackage SSR
 * @author     SARL OpenXtrem <*****@*****.**>
 * @license    GNU General Public License, see http://www.gnu.org/licenses/gpl.html
 * @version    $Revision: 26916 $
 */
CCanDo::checkRead();
$date = CValue::getOrSession("date", CMbDT::date());
$therapeute_id = CValue::get("therapeute_id");
$equipement_id = CValue::get("equipement_id");
$prescription_line_element_id = CValue::get("prescription_line_element_id");
$monday = CMbDT::date("last monday", CMbDT::date("+1 day", $date));
$sunday = CMbDT::date("next sunday", CMbDT::date("-1 DAY", $date));
// Chargement de la ligne
$line_element = new CPrescriptionLineElement();
$line_element->load($prescription_line_element_id);
$element_prescription_id = $line_element->element_prescription_id;
// Chargement des seances en fonction des parametres selectionnés
$seance = new CEvenementSSR();
$ljoin = array();
$ljoin[] = "evenement_ssr AS evt_seance ON (evt_seance.seance_collective_id = evenement_ssr.evenement_ssr_id)";
$ljoin["prescription_line_element"] = "evt_seance.prescription_line_element_id = prescription_line_element.prescription_line_element_id";
$where = array();
$where["evenement_ssr.sejour_id"] = " IS NULL";
$where["evenement_ssr.debut"] = "BETWEEN '{$monday} 00:00:00' AND '{$sunday} 23:59:59'";
$where["evenement_ssr.therapeute_id"] = " = '{$therapeute_id}'";
if ($equipement_id) {
    $where["evenement_ssr.equipement_id"] = " = '{$equipement_id}'";
} else {
    $where["evenement_ssr.equipement_id"] = " IS NULL";
     $counts["plannable"] = null;
     $sejours = array();
 } else {
     // Séjours élligibles
     $where = array();
     $where["sejour.type"] = "= 'ssr'";
     $where["sejour.entree"] = "<= '{$planning->date_max}'";
     $where["sejour.sortie"] = ">= '{$planning->date_min}'";
     $where["sejour.annule"] = "= '0'";
     $sejour_ids = $sejour->loadIds($where);
     // Identifiants de catégorie de prescriptions disponibles
     $function = $mediuser->loadRefFunction();
     $executants = $function->loadBackRefs("executants_prescription");
     $category_ids = CMbArray::pluck($executants, "category_prescription_id");
     // Recherche des lignes de prescriptions executables
     $line = new CPrescriptionLineElement();
     $join = array();
     $where = array();
     $join["element_prescription"] = "element_prescription.element_prescription_id = prescription_line_element.element_prescription_id";
     $where["element_prescription.category_prescription_id"] = $ds->prepareIn($category_ids);
     $join["prescription"] = "prescription.prescription_id = prescription_line_element.prescription_id";
     $where["prescription.type"] = "= 'sejour'";
     $where["prescription.object_class"] = "= 'CSejour'";
     $where["prescription.object_id"] = $ds->prepareIn($sejour_ids);
     $line_ids = $line->loadIds($where, null, null, null, $join);
     // Prescriptions exécutables
     $query = new CRequest();
     $query->addSelect("DISTINCT prescription_id");
     $query->addTable("prescription_line_element");
     $query->addWhereClause("prescription_line_element_id", $ds->prepareIn($line_ids));
     $prescription_ids = $ds->loadColumn($query->makeSelect());
 /**
  * @see parent::store()
  * @todo Refactoring complet de la fonction store de la consultation
  *
  *   ANALYSE DU CODE
  *  1. Gestion du désistement
  *  2. Premier if : creation d'une consultation à laquelle on doit attacher
  *     un séjour (conf active): comportement DEPART / ARRIVEE
  *  3. Mise en cache du forfait FSE et facturable : uniquement dans le cas d'un séjour
  *  4. On load le séjour de la consultation
  *  5. On initialise le _adjust_sejour à false
  *  6. Dans le cas ou on a un séjour
  *   6.1. S'il est de type consultation, on ajuste le séjour en fonction du comportement DEPART / ARRIVEE
  *   6.2. Si la plage de consultation a été modifiée, adjust_sejour passe à true et on ajuste le séjour
  *        en fonction du comportement DEPART / ARRIVEE (en passant par l'adjustSejour() )
  *   6.3. Si on a un id (à virer) et que le chrono est modifié en PATIENT_ARRIVE,
  *        si on gère les admissions auto (conf) on met une entrée réelle au séjour
  *  7. Si le patient est modifié, qu'on est pas en train de merger et qu'on a un séjour,
  *     on empeche le store
  *  8. On appelle le parent::store()
  *  9. On passe le forfait SE et facturable au séjour
  * 10. On propage la modification du patient de la consultation au séjour
  * 11. Si on a ajusté le séjour et qu'on est dans un séjour de type conclut et que le séjour
  *     n'a plus de consultations, on essaie de le supprimer, sinon on l'annule
  * 12. Gestion du tarif et précodage des actes (bindTarif)
  * 13. Bind FSE
  * ACTIONS
  * - Faire une fonction comportement_DEPART_ARRIVEE()
  * - Merger le 2, le 6.1 et le 6.2 (et le passer en 2 si possible)
  * - Faire une fonction pour le 6.3, le 7, le 10, le 11
  * - Améliorer les fonctions 12 et 13 en incluant le test du behaviour fields
  *
  * COMPORTEMENT DEPART ARRIVEE
  * modif de la date d'une consultation ayant un séjour sur le modèle DEPART / ARRIVEE:
  * 1. Pour le DEPART :
  * -> on décroche la consultation de son ancien séjour
  * -> on ne touche pas à l'ancien séjour si :
  * - il est de type autre que consultation
  * - il a une entrée réelle
  * - il a d'autres consultations
  * -> sinon on l'annule
  *
  *   2. Pour l'ARRIVEE
  * -> si on a un séjour qui englobe : on la colle dedans
  * -> sinon on crée un séjour de consultation
  *
  *   TESTS A EFFECTUER
  *  0. Création d'un pause
  *  0.1. Déplacement d'une pause
  *  1. Création d'une consultation simple C1 (Séjour S1)
  *  2. Création d'une deuxième consultation le même jour / même patient C2 (Séjour S1)
  *  3. Création d'une troisième consultation le même jour / même patient C3 (Séjour S1)
  *  4. Déplacement de la consultation C1 un autre jour (Séjour S2)
  *  5. Changement du nom du patient C2 (pas de modification car une autre consultation)
  *  6. Déplacement de C3 au même jour (Toujours séjour S1)
  *  7. Annulation de C1 (Suppression ou annulation de S1)
  *  8. Déplacement de C2 et C3 à un autre jour (séjour S3 créé, séjour S1 supprimé ou annulé)
  *  9. Arrivée du patient pour C2 (S3 a une entrée réelle)
  * 10. Déplacement de C3 dans un autre jour (S4)
  * 11. Déplacement de C2 dans un autre jour (S5 et S3 reste tel quel)
  */
 function store()
 {
     $this->completeField('sejour_id', 'heure', 'plageconsult_id', 'si_desistement', 'annule');
     if ($this->si_desistement === null) {
         $this->si_desistement = 0;
     }
     $this->annule = $this->annule === null || $this->annule === '' ? 0 : $this->annule;
     $uf_soins_id = $this->_uf_soins_id;
     // Consultation dans un séjour
     $sejour = new CSejour();
     if (!$this->_id && !$this->sejour_id && CAppUI::conf("dPcabinet CConsultation attach_consult_sejour") && $this->patient_id || $this->_force_create_sejour) {
         // Recherche séjour englobant
         $facturable = $this->_facturable;
         if ($facturable === null) {
             $facturable = 1;
         }
         $this->loadRefPlageConsult();
         $function = new CFunctions();
         if ($this->_function_secondary_id) {
             $function->load($this->_function_secondary_id);
         } else {
             $user = new CMediusers();
             $user->load($this->_ref_chir->_id);
             $function->load($user->function_id);
         }
         $datetime = $this->_datetime;
         $minutes_before_consult_sejour = CAppUI::conf("dPcabinet CConsultation minutes_before_consult_sejour");
         $where = array();
         $where['annule'] = " = '0'";
         $where['type'] = " != 'seances'";
         $where['patient_id'] = " = '{$this->patient_id}'";
         if (!CAppUI::conf("dPcabinet CConsultation search_sejour_all_groups")) {
             $where['group_id'] = " = '{$function->group_id}'";
         }
         $where['facturable'] = " = '{$facturable}'";
         $datetime_before = CMbDT::dateTime("+{$minutes_before_consult_sejour} minute", "{$this->_date} {$this->heure}");
         $where[] = "`sejour`.`entree` <= '{$datetime_before}' AND `sejour`.`sortie` >= '{$datetime}'";
         if (!$this->_force_create_sejour) {
             $sejour->loadObject($where);
         } else {
             $sejour->_id = "";
         }
         // Si pas de séjour et config alors le créer en type consultation
         if (!$sejour->_id && CAppUI::conf("dPcabinet CConsultation create_consult_sejour")) {
             $sejour->patient_id = $this->patient_id;
             $sejour->praticien_id = $this->_ref_chir->_id;
             $sejour->group_id = $function->group_id;
             $sejour->type = "consult";
             $sejour->facturable = $facturable;
             $sejour->uf_soins_id = $uf_soins_id;
             $datetime = $this->_date && $this->heure ? "{$this->_date} {$this->heure}" : null;
             if ($this->chrono == self::PLANIFIE) {
                 $sejour->entree_prevue = $datetime;
             } else {
                 $sejour->entree_reelle = $datetime;
             }
             $sejour->sortie_prevue = "{$this->_date} 23:59:59";
             if ($msg = $sejour->store()) {
                 return $msg;
             }
         }
         $this->sejour_id = $sejour->_id;
     }
     // must be BEFORE loadRefSejour()
     $facturable = $this->_facturable;
     $forfait_se = $this->_forfait_se;
     $forfait_sd = $this->_forfait_sd;
     $this->_adjust_sejour = false;
     $this->loadRefSejour();
     if ($this->sejour_id) {
         $this->loadRefPlageConsult();
         // Si le séjour est de type consult
         if ($this->_ref_sejour->type == 'consult') {
             $this->_ref_sejour->loadRefsConsultations();
             $this->_ref_sejour->_hour_entree_prevue = null;
             $this->_ref_sejour->_min_entree_prevue = null;
             $this->_ref_sejour->_hour_sortie_prevue = null;
             $this->_ref_sejour->_min_sortie_prevue = null;
             $date_consult = CMbDT::date($this->_datetime);
             // On déplace l'entrée et la sortie du séjour
             $entree = $this->_datetime;
             $sortie = $date_consult . " 23:59:59";
             // Si on a une entrée réelle et que la date de la consultation est avant l'entrée réelle, on sort du store
             if ($this->_ref_sejour->entree_reelle && $date_consult < CMbDT::date($this->_ref_sejour->entree_reelle)) {
                 return CAppUI::tr("CConsultation-denyDayChange");
             }
             // Si on a une sortie réelle et que la date de la consultation est après la sortie réelle, on sort du store
             if ($this->_ref_sejour->sortie_reelle && $date_consult > CMbDT::date($this->_ref_sejour->sortie_reelle)) {
                 return CAppUI::tr("CConsultation-denyDayChange-exit");
             }
             // S'il n'y a qu'une seule consultation dans le séjour, et que le praticien de la consultation est modifié
             // (changement de plage), alors on modifie également le praticien du séjour
             if ($this->_id && $this->fieldModified("plageconsult_id") && count($this->_ref_sejour->_ref_consultations) == 1 && !$this->_ref_sejour->entree_reelle) {
                 $this->_ref_sejour->praticien_id = $this->_ref_plageconsult->chir_id;
             }
             // S'il y a d'autres consultations dans le séjour, on étire l'entrée et la sortie
             // en parcourant la liste des consultations
             foreach ($this->_ref_sejour->_ref_consultations as $_consultation) {
                 if ($_consultation->_id != $this->_id) {
                     $_consultation->loadRefPlageConsult();
                     if ($_consultation->_datetime < $entree) {
                         $entree = $_consultation->_datetime;
                     }
                     if ($_consultation->_datetime > $sortie) {
                         $sortie = CMbDT::date($_consultation->_datetime) . " 23:59:59";
                     }
                 }
             }
             $this->_ref_sejour->entree_prevue = $entree;
             $this->_ref_sejour->sortie_prevue = $sortie;
             $this->_ref_sejour->updateFormFields();
             $this->_ref_sejour->_check_bounds = 0;
             $this->_ref_sejour->store();
         }
         // Changement de journée pour la consult
         if ($this->fieldModified("plageconsult_id")) {
             $this->_adjust_sejour = true;
             // Pas le permettre si admission est déjà faite
             $max_hours = CAppUI::conf("dPcabinet CConsultation hours_after_changing_prat");
             if ($this->_ref_sejour->entree_reelle && CMbDT::dateTime("+ {$max_hours} HOUR", $this->_ref_sejour->entree_reelle) < CMbDT::dateTime()) {
                 return CAppUI::tr("CConsultation-denyPratChange", $max_hours);
             }
             $this->loadRefPlageConsult();
             $dateTimePlage = $this->_datetime;
             $where = array();
             $where['patient_id'] = " = '{$this->patient_id}'";
             $where[] = "`sejour`.`entree` <= '{$dateTimePlage}' AND `sejour`.`sortie` >= '{$dateTimePlage}'";
             $sejour = new CSejour();
             $sejour->loadObject($where);
             $this->adjustSejour($sejour, $dateTimePlage);
         }
         if ($this->_id && $this->fieldModified("chrono", self::PATIENT_ARRIVE)) {
             $this->completeField("plageconsult_id");
             $this->loadRefPlageConsult();
             $this->_ref_chir->loadRefFunction();
             $function = $this->_ref_chir->_ref_function;
             if ($function->admission_auto) {
                 $sejour = new CSejour();
                 $sejour->load($this->sejour_id);
                 $sejour->entree_reelle = $this->arrivee;
                 if ($msg = $sejour->store()) {
                     return $msg;
                 }
             }
         }
     }
     $patient_modified = $this->fieldModified("patient_id");
     // Si le patient est modifié et qu'il y a plus d'une consult dans le sejour, on empeche le store
     if (!$this->_forwardRefMerging && $this->sejour_id && $patient_modified && !$this->_skip_count && !$this->_sync_consults_from_sejour) {
         $this->loadRefSejour();
         $consultations = $this->_ref_sejour->countBackRefs("consultations");
         if ($consultations > 1) {
             return "Vous ne pouvez changer le patient d'une consultation si celle ci est contenue dans un séjour. Dissociez la consultation ou modifier le patient du séjour.";
         }
     }
     // Synchronisation AT
     $this->getType();
     if ($this->_type === "urg" && $this->fieldModified("date_at")) {
         $rpu = $this->_ref_sejour->_ref_rpu;
         if (!$rpu->_date_at) {
             $rpu->_date_at = true;
             $rpu->date_at = $this->date_at;
             if ($msg = $rpu->store()) {
                 return $msg;
             }
         }
     }
     // Update de reprise at
     // Par défaut, j+1 par rapport à fin at
     if ($this->fieldModified("fin_at") && $this->fin_at) {
         $this->reprise_at = CMbDT::dateTime("+1 DAY", $this->fin_at);
     }
     //Lors de la validation de la consultation
     // Enregistrement de la facture
     if ($this->fieldModified("valide", "1")) {
         //Si le DH est modifié, ceui ci se répercute sur le premier acte coté
         if ($this->fieldModified("secteur2") && (count($this->_tokens_ngap) || count($this->_tokens_ccam)) && count($this->loadRefsActes())) {
             $acte = reset($this->_ref_actes);
             $acte->montant_depassement += $this->secteur2 - $this->_old->secteur2;
             if ($msg = $acte->store()) {
                 return $msg;
             }
         }
         $facture = $this->sejour_id ? new CFactureEtablissement() : new CFactureCabinet();
         $facture->group_id = CGroups::loadCurrent()->_id;
         $facture->_consult_id = $this->_id;
         $facture->du_patient = $this->du_patient;
         $facture->du_tiers = $this->du_tiers;
         $facture->du_tva = $this->du_tva;
         $facture->taux_tva = $this->taux_tva;
         if (!count($this->loadRefsFraisDivers(1)) && count($this->loadRefsFraisDivers(2)) && $this->du_tva) {
             $facture->du_patient = $this->du_patient - $this->du_tva - $this->secteur3;
             $facture->du_tva = 0;
             $facture->taux_tva = $this->taux_tva;
         }
         if ($msg = $facture->store()) {
             echo $msg;
         }
     }
     //Lors de dévalidation de la consultation
     if ($this->fieldModified("valide", "0")) {
         $this->loadRefFacture();
         foreach ($this->_ref_factures as $_facture) {
             $_facture->_consult_id = $this->_id;
             $_facture->cancelConsult();
         }
     }
     if ($this->fieldModified("annule", "1")) {
         $this->loadRefConsultAnesth();
         foreach ($this->_refs_dossiers_anesth as $_dossier_anesth) {
             if ($_dossier_anesth->operation_id) {
                 $_dossier_anesth->operation_id = '';
                 if ($msg = $_dossier_anesth->store()) {
                     return $msg;
                 }
             }
         }
     }
     if ($this->fieldModified("annule", "0") || $this->annule == 0 && $this->motif_annulation) {
         $this->motif_annulation = "";
     }
     // Standard store
     if ($msg = parent::store()) {
         return $msg;
     }
     if (CAppUI::pref("create_dossier_anesth")) {
         $this->createConsultAnesth();
     }
     $this->completeField("_line_element_id");
     // Création d'une tâche si la prise de rdv est issue du plan de soin
     if ($this->_line_element_id) {
         $task = new CSejourTask();
         $task->consult_id = $this->_id;
         $task->sejour_id = $this->sejour_id;
         $task->prescription_line_element_id = $this->_line_element_id;
         $task->description = "Consultation prévue le " . $this->_ref_plageconsult->getFormattedValue("date");
         $line_element = new CPrescriptionLineElement();
         $line_element->load($this->_line_element_id);
         $this->motif = ($this->motif ? "{$this->motif}\n" : "") . $line_element->_view;
         $this->rques = ($this->rques ? "{$this->rques}\n" : "") . "Prescription d'hospitalisation, prescrit par le Dr " . $line_element->_ref_praticien->_view;
         // Planification manuelle à l'heure de la consultation
         $administration = new CAdministration();
         $administration->administrateur_id = CAppUI::$user->_id;
         $administration->dateTime = $this->_datetime;
         $administration->quantite = $administration->planification = 1;
         $administration->unite_prise = "aucune_prise";
         $administration->setObject($line_element);
         $this->element_prescription_id = $line_element->element_prescription_id;
         if ($msg = $administration->store()) {
             return $msg;
         }
         if ($msg = $task->store()) {
             return $msg;
         }
         if ($msg = parent::store()) {
             return $msg;
         }
     }
     // On note le résultat de la tâche si la consultation est terminée
     if ($this->chrono == CConsultation::TERMINE) {
         /** @var $task CSejourTask */
         $task = $this->loadRefTask();
         if ($task->_id) {
             $task->resultat = "Consultation terminée";
             $task->realise = 1;
             if ($msg = $task->store()) {
                 return $msg;
             }
         }
     }
     // Forfait SE et facturable. A laisser apres le store()
     if ($this->sejour_id && CAppUI::conf("dPcabinet CConsultation attach_consult_sejour")) {
         if ($forfait_se !== null || $facturable !== null || $forfait_sd !== null) {
             $this->_ref_sejour->forfait_se = $forfait_se;
             $this->_ref_sejour->forfait_sd = $forfait_sd;
             $this->_ref_sejour->facturable = $facturable;
             $this->_ref_sejour->uf_soins_id = $uf_soins_id;
             if ($msg = $this->_ref_sejour->store()) {
                 return $msg;
             }
             $this->_forfait_se = null;
             $this->_forfait_sd = null;
             $this->_facturable = null;
             $this->_uf_soins_id = null;
         }
     }
     if ($this->_adjust_sejour && $this->_ref_sejour->type === "consult" && $sejour->_id) {
         $consultations = $this->_ref_sejour->countBackRefs("consultations");
         if ($consultations < 1) {
             if ($msg = $this->_ref_sejour->delete()) {
                 $this->_ref_sejour->annule = 1;
                 if ($msg = $this->_ref_sejour->store()) {
                     return $msg;
                 }
             }
         }
     }
     // Gestion du tarif et precodage des actes
     if ($this->_bind_tarif && $this->_id) {
         if ($msg = $this->bindTarif()) {
             return $msg;
         }
     }
     // Bind FSE
     if ($this->_bind_fse && $this->_id) {
         if (CModule::getActive("fse")) {
             $fse = CFseFactory::createFSE();
             if ($fse) {
                 $fse->bindFSE($this);
             }
         }
     }
     return null;
 }
    $patient->loadRefsCorrespondants();
    if ($sejour->adresse_par_prat_id && $sejour->adresse_par_prat_id != $patient->_ref_medecin_traitant->_id) {
        $medecin_adresse_par = new CMedecin();
        $medecin_adresse_par->load($sejour->adresse_par_prat_id);
    }
    // Fiche autonomie
    $fiche_autonomie->sejour_id = $sejour->_id;
    $fiche_autonomie->loadMatchingObject();
    // Bilan SSR
    $bilan->sejour_id = $sejour->_id;
    $bilan->loadMatchingObject();
    // Prescription SSR
    $prescription = $sejour->loadRefPrescriptionSejour();
    // Chargement des lignes de la prescription
    if ($prescription && $prescription->_id) {
        $line = new CPrescriptionLineElement();
        $line->prescription_id = $prescription->_id;
        /** @var CPrescriptionLineElement $_lines */
        $_lines = $line->loadMatchingList("debut ASC");
        foreach ($_lines as $_line) {
            $line->getRecentModification();
            $lines[$_line->_ref_element_prescription->category_prescription_id][$_line->element_prescription_id][] = $_line;
        }
    }
    if ($patient->_ref_medecin_traitant->_id) {
        $correspondantsMedicaux["traitant"] = $patient->_ref_medecin_traitant;
    }
    foreach ($patient->_ref_medecins_correspondants as $correspondant) {
        $correspondantsMedicaux["correspondants"][] = $correspondant->_ref_medecin;
    }
} else {
 * @version    $Revision:$
 */
CCanDo::checkRead();
$sejour_id = CValue::getOrSession("sejour_id");
$sejour = new CSejour();
$sejour->load($sejour_id);
$lines = array();
// Bilan SSR
$bilan = new CBilanSSR();
$bilan->sejour_id = $sejour->_id;
$bilan->loadMatchingObject();
// Prescription SSR
$prescription = $sejour->loadRefPrescriptionSejour();
// Chargement des lignes de la prescription
if ($prescription->_id) {
    $line = new CPrescriptionLineElement();
    $line->prescription_id = $prescription->_id;
    $_lines = $line->loadMatchingList("debut ASC");
    foreach ($_lines as $_line) {
        $lines[$_line->_ref_element_prescription->category_prescription_id][$_line->element_prescription_id][] = $_line;
    }
}
// Chargement des categories de prescription
$categories = array();
$category = new CCategoryPrescription();
$where[] = "chapitre = 'kine'";
$group_id = CGroups::loadCurrent()->_id;
$where[] = "group_id = '{$group_id}' OR group_id IS NULL";
$order = "nom";
$categories = $category->loadList($where, $order);
// Dossier médical visibile ?
        $count_composition_dossier[$_key_date][$_key_periode] = $planif_manuelle ? 3 : 2;
        $first_date = reset(array_keys($_period_dates));
        $first_time = reset(reset($_period_dates));
        $last_date = end(array_keys($_period_dates));
        $last_time = end(end($_period_dates));
        $composition_dossier[] = "{$_key_date}-{$_key_periode}";
        $bornes_composition_dossier["{$_key_date}-{$_key_periode}"]["min"] = "{$first_date} {$first_time}:00:00";
        $bornes_composition_dossier["{$_key_date}-{$_key_periode}"]["max"] = "{$last_date} {$last_time}:00:00";
        foreach ($_period_dates as $_key_real_date => $_period_hours) {
            $count_composition_dossier[$_key_date][$_key_periode] += count($_period_hours);
            $_dates[$_key_real_date] = $_key_real_date;
        }
    }
}
// Chargement des lignes de prescription
$line = new CPrescriptionLineElement();
$ljoin = array();
$ljoin["prescription"] = "prescription.prescription_id = prescription_line_element.prescription_id AND prescription.type = 'sejour'";
$ljoin["sejour"] = "sejour.sejour_id = prescription.object_id";
$ljoin["affectation"] = "sejour.sejour_id = affectation.sejour_id";
$where = array();
$where["element_prescription_id"] = CSQLDataSource::prepareIn($categories_id);
if ($real_time) {
    $time = CMbDT::time();
    $where[] = "'{$date} {$time}' <= affectation.sortie && '{$date} {$time}' >= affectation.entree";
} else {
    $where[] = "'{$date}' <= affectation.sortie && '{$date_max}' >= affectation.entree";
}
$where["affectation.service_id"] = " = '{$service_id}'";
$where["inscription"] = " = '0'";
$where["active"] = " = '1'";
 }
 $sejour->_count_tasks_not_created = 0;
 $sejour->_ref_tasks_not_created = array();
 if ($prescription->_id) {
     // Chargement des lignes non associées à des taches
     $where = array();
     $ljoin = array();
     $ljoin["element_prescription"] = "prescription_line_element.element_prescription_id = element_prescription.element_prescription_id";
     $ljoin["sejour_task"] = "sejour_task.prescription_line_element_id = prescription_line_element.prescription_line_element_id";
     $where["prescription_id"] = " = '{$prescription->_id}'";
     $where["element_prescription.rdv"] = " = '1'";
     $where["prescription_line_element.date_arret"] = " IS NULL";
     $where["active"] = " = '1'";
     $where[] = "sejour_task.sejour_task_id IS NULL";
     $where["child_id"] = " IS NULL";
     $line_element = new CPrescriptionLineElement();
     $sejour->_count_tasks_not_created = $line_element->countList($where, null, $ljoin);
     if ($print) {
         $sejour->_ref_tasks_not_created = $line_element->loadList($where, null, null, null, $ljoin);
     }
     if ($only_non_checked) {
         $prescription->countNoValideLines($user_id);
         if ($prescription->_counts_no_valide == 0) {
             unset($sejours[$sejour->_id]);
             continue;
         }
     }
     if (@CAppUI::conf("object_handlers CPrescriptionAlerteHandler")) {
         $prescription->_count_alertes = $prescription->countAlertsNotHandled("medium");
         $prescription->_count_urgences = $prescription->countAlertsNotHandled("high");
     } else {
<?php

/* $Id: $ */
/**
 * @package Mediboard
 * @subpackage soins
 * @version $Revision:  $
 * @author SARL OpenXtrem
 * @license GNU General Public License, see http://www.gnu.org/licenses/gpl.html 
 */
$prescription_line_element_id = CValue::get("prescription_line_element_id");
$line = new CPrescriptionLineElement();
$line->load($prescription_line_element_id);
$line->loadRefTask();
$smarty = new CSmartyDP();
$smarty->assign("line", $line);
$smarty->assign("prescription", $line->_ref_prescription);
$smarty->display('inc_vw_task_icon.tpl');
/* $Id: $ */
/**
 * @package Mediboard
 * @subpackage soins
 * @version $Revision: $
 * @author SARL OpenXtrem
 * @license GNU General Public License, see http://www.gnu.org/licenses/gpl.html 
 */
$sejour_id = CValue::getOrSession("sejour_id");
$sejour = new CSejour();
$sejour->load($sejour_id);
$sejour->loadRefPrescriptionSejour();
$prescription = $sejour->_ref_prescription_sejour;
$where = array();
$ljoin = array();
$ljoin["element_prescription"] = "prescription_line_element.element_prescription_id = element_prescription.element_prescription_id";
$ljoin["sejour_task"] = "sejour_task.prescription_line_element_id = prescription_line_element.prescription_line_element_id";
$where["prescription_id"] = " = '{$prescription->_id}'";
$where["element_prescription.rdv"] = " = '1'";
$where["sejour_task.sejour_task_id"] = "IS NULL";
$where["active"] = " = '1'";
$where["child_id"] = " IS NULL";
$where["date_arret"] = "IS NULL";
$where["time_arret"] = "IS NULL";
$line_element = new CPrescriptionLineElement();
$lines = $line_element->loadList($where, null, null, null, $ljoin);
// Smarty template
$smarty = new CSmartyDP();
$smarty->assign("lines", $lines);
$smarty->display("inc_vw_lines_without_task.tpl");