} else {
    foreach ($operation->_ref_actes_ccam as $acte) {
        $acte->guessAssociation();
    }
}
$operation->loadRefSortieLocker()->loadRefFunction();
$sejour = $operation->_ref_sejour;
$sejour->loadRefsFwd();
$sejour->loadRefPrescriptionSejour();
/** @var CAdministration[] $administrations */
$administrations = array();
$prescription_id = null;
if (CModule::getActive("dPprescription")) {
    $prescription_id = $sejour->_ref_prescription_sejour->_id;
    if ($prescription_id) {
        $administrations = CAdministration::getPerop($prescription_id, false);
    }
}
// Chargement des constantes saisies durant l'intervention
$whereConst = array();
$whereConst["datetime"] = "BETWEEN '{$operation->_datetime_reel}' AND '{$operation->_datetime_reel_fin}'";
$sejour->loadListConstantesMedicales($whereConst);
// Tri des gestes et administrations perop par ordre chronologique
$perops = array();
foreach ($administrations as $_administration) {
    $_administration->loadRefsFwd();
    $perops[$_administration->dateTime][$_administration->_guid] = $_administration;
}
foreach ($operation->_ref_anesth_perops as $_perop) {
    $perops[$_perop->datetime][$_perop->_guid] = $_perop;
}
 *	@package Mediboard
 *	@subpackage pharmacie
 *	@version $Revision: 19731 $
 *  @author SARL OpenXtrem
 *  @license GNU General Public License, see http://www.gnu.org/licenses/gpl.html 
 */
CCanDo::checkRead();
$service_id = CValue::getOrSession('service_id');
$all_stocks = CValue::getOrSession('all_stocks') == 'true';
$date_min = CValue::getOrSession('_date_min');
$date_max = CValue::getOrSession('_date_max');
CValue::setSession('_date_min', $date_min);
CValue::setSession('_date_max', $date_max);
$destockages = array();
// Chargement de toutes les administrations dans la periode donnee
$administration = new CAdministration();
$where = array();
$where["dateTime"] = "BETWEEN '{$date_min}' AND '{$date_max}'";
$where["object_class"] = " = 'CPrescriptionLineMedicament'";
$administrations = $administration->loadList($where);
// Calcul des quantités administrées
foreach ($administrations as $_administration) {
    $_administration->loadTargetObject();
    $line =& $_administration->_ref_object;
    $code_cip = $line->code_cip;
    if (!isset($destockages[$code_cip]["quantite"])) {
        $destockages[$code_cip]["quantite"] = 0;
    }
    $destockages[$code_cip]["quantite"] += $_administration->quantite;
    // Tableaux de cache de medicaments
    if (!isset($medicaments[$code_cip])) {
        foreach ($prescription->_ref_prescription_lines as $_line_med) {
            $_line_med->loadRefParentLine();
        }
    }
    if (count($prescription->_ref_prescription_lines_element)) {
        foreach ($prescription->_ref_prescription_lines_element as $_line_elt) {
            $_line_elt->loadRefParentLine();
        }
    }
}
$signe_decalage = $nb_decalage < 0 ? "-" : "+";
$prolongation_time = CAppUI::conf("dPprescription general prolongation_time", $group->_guid);
$sortie_sejour = $sejour->sortie_reelle || !$prolongation_time ? $sejour->sortie : CMbDT::dateTime("+ {$prolongation_time} HOURS", $sejour->sortie);
$count_perop_adm = 0;
if (CAppUI::conf("dPprescription general show_perop_suivi_soins", $group->_guid) && $prescription->_id && !$chapitre) {
    $count_perop_adm = CAdministration::countPerop($prescription->_id);
}
if (!$chapitre && CAppUI::pref("regroupement_med_plan_soins") && CAppUI::conf("soins suivi group_hors_amm_med", $group) && isset($prescription->_ref_lines_elt_for_plan["med_elt"])) {
    foreach ($prescription->_ref_lines_elt_for_plan["med_elt"] as $_line_elt) {
        $prescription->_nb_lines_plan_soins["all_med"]++;
    }
    unset($prescription->_ref_lines_elt_for_plan["med_elt"]);
}
/**
 * Tri par classe ATC
 *
 * @param string $atc1 ATC 1
 * @param string $atc2 ATC 2
 *
 * @return int
 */
 /**
  * @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;
 }
$service_id = CValue::getOrSession("service_id", "none");
$nb_decalage = CValue::get("nb_decalage");
$mode_dossier = CValue::get("mode_dossier", "administration");
$premedication = CValue::get("premedication");
$real_time = CValue::getOrSession("real_time", 0);
$hide_old_lines = CValue::get("hide_old_lines", CAppUI::conf("soins suivi hide_old_line", $group->_guid));
$composition_dossier = array();
$bornes_composition_dossier = array();
$count_composition_dossier = array();
$configs = CConfigService::getAllFor($service_id);
if (!$nb_decalage) {
    $nb_decalage = $configs["Nombre postes avant"];
}
$planif_manuelle = CAppUI::conf("dPprescription CPrescription planif_manuelle", $group->_guid);
$_dates = array();
$tabHours = CAdministration::getTimingPlanSoins($date, $configs);
foreach ($tabHours as $_key_date => $_period_date) {
    foreach ($_period_date as $_key_periode => $_period_dates) {
        $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;
        }
    }
Example #6
0
            $list_lines[$type_line][$line_mix->_id] = $line_mix;
            $list_lines["perf_line"][$line->_id] = $line;
            $time = CMbDT::transform($_planif->dateTime, null, "%H") . ":00:00";
            $_date = CMbDT::date($_planif->dateTime);
            if (!isset($pancarte[$_prescription_id]["{$_date} {$time}"][$type_line][$line_mix->_id][$_planif->object_id]["prevue"])) {
                $pancarte[$_prescription_id]["{$_date} {$time}"][$type_line][$line_mix->_id][$_planif->object_id]["prevue"] = 0;
            }
            $pancarte[$_prescription_id]["{$_date} {$time}"][$type_line][$line_mix->_id][$_planif->object_id]["prevue"] += $line->_quantite_administration;
            if ($line_mix->_recent_modification) {
                $new[$_prescription_id]["{$_date} {$time}"] = 1;
                $pancarte[$_prescription_id]["{$_date} {$time}"][$type_line][$line_mix->_id][$_planif->object_id]["new"] = 1;
            }
    }
}
// Chargement des administrations
$administration = new CAdministration();
$ljoin = array();
if ($with_med) {
    $ljoin["prescription_line_medicament"] = "(prescription_line_medicament.prescription_line_medicament_id = administration.object_id)\r\n                                             AND (administration.object_class = 'CPrescriptionLineMedicament')";
    $ljoin["prescription_line_mix_item"] = "(prescription_line_mix_item.prescription_line_mix_item_id = administration.object_id)\r\n                                             AND (administration.object_class = 'CPrescriptionLineMixItem')";
    $ljoin["prescription_line_mix"] = "prescription_line_mix_item.prescription_line_mix_id = prescription_line_mix.prescription_line_mix_id";
}
if (count($categories_id_pancarte)) {
    $ljoin["prescription_line_element"] = "(prescription_line_element.prescription_line_element_id = administration.object_id)\r\n                                             AND (administration.object_class = 'CPrescriptionLineElement')";
}
$ljoin["prescription"] = ($with_med ? "(prescription_line_medicament.prescription_id = prescription.prescription_id) OR\r\n                          (prescription_line_mix.prescription_id = prescription.prescription_id)" : "") . (count($categories_id_pancarte) ? ($with_med ? "OR " : "") . "(prescription_line_element.prescription_id = prescription.prescription_id)" : "");
$administrations = array();
if ($with_med || count($categories_id_pancarte)) {
    $where = array();
    $where["prescription.prescription_id"] = CSQLDataSource::prepareIn(CMbArray::pluck($prescriptions, "prescription_id"));
    if (count($categories_id_pancarte)) {
 */
$operation_id = CValue::getOrSession("operation_id");
// Chargement de l'intervention
$operation = new COperation();
$operation->load($operation_id);
// Chargement des gestes operatoires
$operation->loadRefsAnesthPerops();
$operation->loadRefsFwd();
// Chargement des administrations per-op
$operation->loadRefSejour();
$sejour =& $operation->_ref_sejour;
$sejour->loadRefPrescriptionSejour();
$sejour->loadRefPatient();
$administrations = array();
if (CModule::getActive("dPprescription")) {
    $administrations = CAdministration::getPerop($sejour->_ref_prescription_sejour->_id);
}
// Chargement des constantes saisies durant l'intervention
$whereConst = array();
$whereConst["datetime"] = "BETWEEN '{$operation->_datetime_reel}' AND '{$operation->_datetime_reel_fin}'";
$sejour->loadListConstantesMedicales($whereConst);
// Tri des gestes et administrations perop par ordre chronologique
$perops = array();
foreach ($administrations as $_administration) {
    $_administration->loadRefsFwd();
    $perops[$_administration->dateTime][$_administration->_guid] = $_administration;
}
foreach ($operation->_ref_anesth_perops as $_perop) {
    $perops[$_perop->datetime][$_perop->_guid] = $_perop;
}
$constantes = array("pouls", "ta_gauche", "frequence_respiratoire", "score_sedation", "spo2", "diurese");
Example #8
0
        }
        break;
    case "poste":
    default:
        $postes = array("Poste 1" => CAppUI::conf("soins plan_soins hour_matin", $group->_guid), "Poste 2" => CAppUI::conf("soins plan_soins hour_midi", $group->_guid), "Poste 3" => CAppUI::conf("soins plan_soins hour_soir", $group->_guid), "Poste 4" => CAppUI::conf("soins plan_soins hour_nuit", $group->_guid));
        $postes_to_hour = array("matin" => str_pad($postes["Poste 1"], 2, "0", STR_PAD_LEFT), "midi" => str_pad($postes["Poste 2"], 2, "0", STR_PAD_LEFT), "soir" => str_pad($postes["Poste 3"], 2, "0", STR_PAD_LEFT), "nuit" => str_pad($postes["Poste 4"], 2, "0", STR_PAD_LEFT));
        $moments = array("poste-1" => "matin", "poste-2" => "midi", "poste-3" => "soir", "poste-4" => "nuit");
        foreach ($dates as $_date) {
            $dates_plan_soin[$_date] = $moments;
            $colspan += 4;
        }
        break;
}
$dates_postes = array();
foreach ($dates as $_date) {
    $dates_postes[$_date] = CAdministration::getTimingPlanSoins($_date, $postes, $periods, 15, 15);
}
$postes_by_date = array();
foreach ($dates_postes as $_dates_postes) {
    foreach ($_dates_postes as $day => $__dates_postes) {
        foreach ($__dates_postes as $poste => $_dates) {
            foreach ($_dates as $_day => $hours) {
                foreach ($hours as $_hour) {
                    @($postes_by_date[$_day][$_hour] = array("day" => $day, "moment" => $moments[$poste]));
                }
            }
        }
    }
}
$initiales = array();
/** @var $_sejour CSejour */