/**
 * $Id$
 *
 * @package    Mediboard
 * @subpackage SalleOp
 * @author     SARL OpenXtrem <*****@*****.**>
 * @license    GNU General Public License, see http://www.gnu.org/licenses/gpl.html
 * @version    $Revision$
 */
CCanDo::checkRead();
$operation_id = CValue::get("operation_id");
$interv = new COperation();
$interv->load($operation_id);
$interv->loadRefSejour()->loadRefPatient()->loadRefLatestConstantes();
$interv->loadRefPlageOp();
$interv->_ref_sejour->_ref_patient->loadRefDossierMedical();
$consult_anesth = $interv->loadRefsConsultAnesth();
$group = CGroups::loadCurrent();
$pack = $interv->loadRefGraphPack();
list($graphs, $yaxes_count, $time_min, $time_max, $time_debut_op_iso, $time_fin_op_iso) = CObservationResultSet::buildGraphs($interv, $pack->_id);
$time_debut_op = CMbDate::toUTCTimestamp($time_debut_op_iso);
$time_fin_op = CMbDate::toUTCTimestamp($time_fin_op_iso);
$evenements = CObservationResultSet::buildEventsGrid($interv, $time_debut_op_iso, $time_fin_op_iso, $time_min, $time_max);
$now = 100 * (CMbDate::toUTCTimestamp(CMbDT::dateTime()) - $time_min) / ($time_max - $time_min);
$graph_packs = CSupervisionGraphPack::getAllFor($group);
$concentrators = null;
if (CModule::getActive("patientMonitoring")) {
    $concentrator = new CMonitoringConcentrator();
    $concentrators = $concentrator->loadList();
}
$patient->loadRefPhotoIdentite();
$dossier_medical_patient = $patient->loadRefDossierMedical();
$patient->loadRefLatestConstantes(null, array("poids", "taille"));
if ($dossier_medical_patient->_id) {
    $dossier_medical_patient->loadRefsAllergies();
    $dossier_medical_patient->loadRefsAntecedents();
    $dossier_medical_patient->countAntecedents(false);
    $dossier_medical_patient->countAllergies();
}
/* Suppression des antecedents du dossier medical du patients présent dans le dossier medical du sejour */
if ($dossier_medical_patient->_id && $dossier_medical_sejour->_id) {
    CDossierMedical::cleanAntecedentsSignificatifs($dossier_medical_sejour, $dossier_medical_patient);
}
$operation = new COperation();
if ($operation->load($operation_id)) {
    $operation->loadRefPlageOp();
    $operation->_ref_anesth->loadRefFunction();
}
$is_praticien = CAppUI::$user->isPraticien();
if (CModule::getActive("dPprescription")) {
    CPrescription::$_load_lite = false;
}
$sejour->countAlertsNotHandled("medium", "observation");
$smarty = new CSmartyDP();
$smarty->assign("sejour", $sejour);
$smarty->assign("patient", $patient);
$smarty->assign("date", $date);
$smarty->assign("default_tab", $default_tab);
$smarty->assign("popup", $popup);
$smarty->assign("modal", $modal);
$smarty->assign("operation_id", $operation_id);
 * $Id$
 *
 * @package    Mediboard
 * @subpackage SalleOp
 * @author     SARL OpenXtrem <*****@*****.**>
 * @license    GNU General Public License, see http://www.gnu.org/licenses/gpl.html
 * @version    $Revision$
 */
$date = CValue::getOrSession("date", CMbDT::date());
$in_salle = CValue::get("in_salle", 1);
$modif_operation = CCAnDo::edit() || $date >= CMbDT::date();
// Chargement de l'operation selectionnee
$operation_id = CValue::getOrSession("operation_id");
$selOp = new COperation();
$selOp->load($operation_id);
$plageOp = $selOp->loadRefPlageOp();
$listPers = $selOp->loadPersonnelDisponible();
// Creation du tableau d'affectation de personnel
$tabPersonnel = array();
$plageOp->loadAffectationsPersonnel();
$affectations_personnel = $plageOp->_ref_affectations_personnel;
$affectations_plage = array_merge($affectations_personnel["iade"], $affectations_personnel["op"], $affectations_personnel["op_panseuse"], $affectations_personnel["sagefemme"], $affectations_personnel["manipulateur"]);
// Tableau de stockage des affectations
$tabPersonnel["plage"] = array();
$tabPersonnel["operation"] = array();
foreach ($affectations_plage as $key => $affectation_personnel) {
    $affectation = new CAffectationPersonnel();
    $affectation->setObject($selOp);
    $affectation->personnel_id = $affectation_personnel->personnel_id;
    $affectation->parent_affectation_id = $affectation_personnel->_id;
    $affectation->loadMatchingObject();
 /**
  * @see parent::fillLimitedTemplate()
  */
 function fillLimitedTemplate(&$template)
 {
     $chir = $this->_ref_plageconsult->_ref_chir;
     // Ajout du praticien pour les destinataires possibles (dans l'envoi d'un email)
     $template->destinataires[] = array("nom" => "Dr " . $chir->_user_last_name . " " . $chir->_user_first_name, "email" => $chir->_user_email, "tag" => "Praticien");
     $this->updateFormFields();
     $this->loadRefsFwd();
     $this->notify("BeforeFillLimitedTemplate", $template);
     $template->addDateProperty("Consultation - date", $this->_ref_plageconsult->date);
     $template->addLongDateProperty("Consultation - date longue", $this->_ref_plageconsult->date);
     $template->addTimeProperty("Consultation - heure", $this->heure);
     $locExamFields = array("motif" => "motif", "rques" => "remarques", "examen" => "examen", "traitement" => "traitement", "histoire_maladie" => "histoire maladie", "conclusion" => "conclusion");
     foreach ($this->_exam_fields as $field) {
         $loc_field = $locExamFields[$field];
         $template->addProperty("Consultation - {$loc_field}", $this->{$field});
     }
     if (!in_array("traitement", $this->_exam_fields)) {
         $template->addProperty("Consultation - traitement", $this->traitement);
     }
     $medecin = new CMedecin();
     $medecin->load($this->adresse_par_prat_id);
     $nom = "{$medecin->nom} {$medecin->prenom}";
     $template->addProperty("Consultation - adressé par", $nom);
     $template->addProperty("Consultation - adressé par - adresse", "{$medecin->adresse}\n{$medecin->cp} {$medecin->ville}");
     $template->addProperty("Consultation - Accident du travail", $this->getFormattedValue("date_at"));
     $libelle_at = $this->date_at ? "Accident du travail du " . $this->getFormattedValue("date_at") : "";
     $template->addProperty("Consultation - Libellé accident du travail", $libelle_at);
     $this->loadRefsFiles();
     $list = CMbArray::pluck($this->_ref_files, "file_name");
     $template->addListProperty("Consultation - Liste des fichiers", $list);
     $template->addProperty("Consultation - Fin arrêt de travail", CMbDT::dateToLocale(CMbDT::date($this->fin_at)));
     $template->addProperty("Consultation - Prise en charge arrêt de travail", $this->getFormattedValue("pec_at"));
     $template->addProperty("Consultation - Reprise de travail", CMbDT::dateToLocale(CMbDT::date($this->reprise_at)));
     $template->addProperty("Consultation - Accident de travail sans arrêt de travail", $this->getFormattedValue("at_sans_arret"));
     $template->addProperty("Consultation - Arrêt maladie", $this->getFormattedValue("arret_maladie"));
     $this->loadRefsExamsComp();
     $exam = new CExamComp();
     foreach ($exam->_specs["realisation"]->_locales as $key => $locale) {
         $exams = isset($this->_types_examen[$key]) ? $this->_types_examen[$key] : array();
         $template->addListProperty("Consultation - Examens complémentaires - {$locale}", $exams);
     }
     if (CModule::getActive("forms")) {
         CExObject::addFormsToTemplate($template, $this, "Consultation");
     }
     // Séjour et/ou intervention créés depuis la consultation
     $sejour_relie = reset($this->loadBackRefs("sejours_lies"));
     $interv_reliee = reset($this->loadBackRefs("intervs_liees"));
     if ($interv_reliee) {
         $sejour_relie = $interv_reliee->loadRefSejour();
     } else {
         if (!$sejour_relie) {
             $sejour_relie = new CSejour();
         }
         if (!$interv_reliee) {
             $interv_reliee = new COperation();
         }
     }
     $interv_reliee->loadRefChir();
     $interv_reliee->loadRefPlageOp();
     $interv_reliee->loadRefSalle();
     $sejour_relie->loadRefPraticien();
     // Intervention reliée
     $template->addProperty("Consultation - Opération reliée - Chirurgien", $interv_reliee->_ref_chir->_view);
     $template->addProperty("Consultation - Opération reliée - Libellé", $interv_reliee->libelle);
     $template->addProperty("Consultation - Opération reliée - Salle", $interv_reliee->_ref_salle->nom);
     $template->addDateProperty("Consultation - Opération reliée - Date", $interv_reliee->_datetime_best);
     // Séjour relié
     $template->addDateProperty("Consultation - Séjour relié - Date entrée", $sejour_relie->entree);
     $template->addLongDateProperty("Consultation - Séjour relié - Date entrée (longue)", $sejour_relie->entree);
     $template->addTimeProperty("Consultation - Séjour relié - Heure entrée", $sejour_relie->entree);
     $template->addDateProperty("Consultation - Séjour relié - Date sortie", $sejour_relie->sortie);
     $template->addLongDateProperty("Consultation - Séjour relié - Date sortie (longue)", $sejour_relie->sortie);
     $template->addTimeProperty("Consultation - Séjour relié - Heure sortie", $sejour_relie->sortie);
     $template->addDateProperty("Consultation - Séjour relié - Date entrée réelle", $sejour_relie->entree_reelle);
     $template->addTimeProperty("Consultation - Séjour relié - Heure entrée réelle", $sejour_relie->entree_reelle);
     $template->addDateProperty("Consultation - Séjour relié - Date sortie réelle", $sejour_relie->sortie_reelle);
     $template->addTimeProperty("Consultation - Séjour relié - Heure sortie réelle", $sejour_relie->sortie_reelle);
     $template->addProperty("Consultation - Séjour relié - Praticien", "Dr " . $sejour_relie->_ref_praticien->_view);
     $template->addProperty("Consultation - Séjour relié - Libelle", $sejour_relie->getFormattedValue("libelle"));
     $this->notify("AfterFillLimitedTemplate", $template);
 }
// Don't load them if we have a daily check list to fill...
$operation_check_lists = $operation_check_item_categories = array();
$check_lists_no_has = $check_items_no_has_categories = $listValidateurs_no_has = array();
$listAnesthType = array();
if ($selOp->_id) {
    $selOp->canDo();
    $selOp->loadRefs();
    $selOp->loadRefsFiles();
    $selOp->loadRefsDocs();
    $consult_anesth = $selOp->loadRefsConsultAnesth();
    $consult_anesth->countDocItems();
    $consultation = $consult_anesth->loadRefConsultation();
    $consultation->countDocItems();
    $consultation->canRead();
    $consultation->canEdit();
    $selOp->loadRefPlageOp(true);
    $selOp->loadRefChir()->loadRefFunction();
    $selOp->loadRefPatient();
    $selOp->loadRefCommande();
    $date = CMbDT::date($selOp->_datetime);
    // Récupération de l'utilisateur courant
    $currUser = CMediusers::get();
    $currUser->isAnesth();
    $currUser->isPraticien();
    $selOp->countExchanges();
    $selOp->loadBrancardage();
    $selOp->isCoded();
    $selOp->_ref_consult_anesth->loadRefsTechniques();
    $sejour = $selOp->_ref_sejour;
    $sejour->loadRefDossierMedical();
    $sejour->_ref_dossier_medical->loadRefsBack();
 /**
  * Prepare the data to send from the given operation
  *
  * @param COperation   $operation        The operation
  * @param string       $encoding         The encoding
  * @param string       $modality         The target modality
  * @param string       $calling_ae_title The AE title who requested the worklist
  * @param CDicomConfig $dicom_config     The Exchange Dicom
  *
  * @return array
  */
 protected static function getDataFromOperation($operation, $encoding, $modality, $calling_ae_title, $dicom_config)
 {
     $patient = $operation->loadRefPatient();
     $operation->updateFormFields();
     $operation->loadRefPlageOp();
     $sejour = $operation->loadRefSejour();
     $chir = $operation->loadRefChir();
     $patient->loadIPP();
     $sejour->loadNDA();
     $libelle = "";
     if ($operation->libelle) {
         $libelle = substr($operation->libelle, 0, 64);
     } else {
         $libelle = "Pas de libellé";
     }
     $date = "";
     if ($operation->date) {
         $date = str_replace("-", "", $operation->date);
     } else {
         $date = str_replace("-", "", $operation->_ref_plageop->date);
     }
     $time = "";
     if ($operation->time_operation) {
         $time = str_replace(":", "", $operation->time_operation);
         $time .= ".000000";
     } else {
         $time = str_replace(':', '', CMbDT::time()) . '.000000';
     }
     $sejour_id = $sejour->_id;
     if ($sejour->_NDA) {
         $sejour_id = $sejour->_NDA;
     }
     $patient_id = $patient->_id;
     if ($patient->_IPP) {
         $patient_id = $patient->_IPP;
     }
     $age = intval(substr(trim($patient->_age), 0, 2));
     $chir_name = "{$chir->_user_last_name} {$chir->_user_first_name}";
     $data = array(0x8 => array(0x50 => self::encodeValue($sejour_id, $encoding)), 0x10 => array(0x10 => self::encodeValue("{$patient->nom}^{$patient->prenom}", $encoding), 0x20 => self::encodeValue("{$patient_id}", $encoding), 0x30 => self::encodeValue(str_replace("-", "", $patient->naissance), $encoding), 0x40 => self::encodeValue(strtoupper($patient->sexe), $encoding)), 0x20 => array(0xd => self::encodeValue($sejour_id, $encoding)), 0x38 => array(0x10 => self::encodeValue($sejour->_NDA, $encoding)), 0x40 => array(0x100 => array(array(array("group_number" => 0x8, "element_number" => 0x60, "value" => self::encodeValue($modality, $encoding)), array("group_number" => 0x40, "element_number" => 0x1, "value" => self::encodeValue($calling_ae_title, $encoding)), array("group_number" => 0x40, "element_number" => 0x2, "value" => self::encodeValue($date, $encoding)), array("group_number" => 0x40, "element_number" => 0x3, "value" => self::encodeValue($time, $encoding)), array("group_number" => 0x40, "element_number" => 0x6, "value" => self::encodeValue($chir_name, $encoding)), array("group_number" => 0x40, "element_number" => 0x7, "value" => self::encodeValue($libelle, $encoding)), array("group_number" => 0x40, "element_number" => 0x9, "value" => self::encodeValue($sejour_id, $encoding)))), 0x1001 => self::encodeValue($sejour_id, $encoding)));
     /* We had the field 0x0032,0x1032 if it's configured */
     if ($dicom_config->send_0032_1032) {
         if (!array_key_exists(0x32, $data)) {
             $data[0x32] = array();
         }
         $data[0x32][0x1032] = self::encodeValue($chir_name, $encoding);
         /* Add the field into the sequence of item 0x0040,0x0100 */
         /*$data[0x0040][0x0100][0][] = array(
             "group_number" => 0x0032,
             "element_number" => 0x1032, "value" => self::encodeValue($chir_name, $encoding)
           );*/
     }
     return $data;
 }