/**
  * Récupération de la plage de l'intervention
  *
  * @param DOMNode    $node      Node
  * @param COperation $operation Intervention
  *
  * @return void
  */
 function mappingPlage(DOMNode $node, COperation $operation)
 {
     $debut = $this->getDebutInterv($node);
     // Traitement de la date/heure début, et durée de l'opération
     $date_op = CMbDT::date($debut);
     $time_op = CMbDT::time($debut);
     // Recherche d'une éventuelle plageOp avec la salle
     $plageOp = new CPlageOp();
     $plageOp->chir_id = $operation->chir_id;
     $plageOp->salle_id = $operation->salle_id;
     $plageOp->date = $date_op;
     $plageOps = $plageOp->loadMatchingList();
     // Si on a pas de plage on recherche éventuellement une plage dans une autre salle
     if (count($plageOps) == 0) {
         $plageOp->salle_id = null;
         $plageOps = $plageOp->loadMatchingList();
         // Si on retrouve des plages alors on ne prend pas en compte la salle du flux
         if (count($plageOps) > 0) {
             $operation->salle_id = null;
         }
     }
     foreach ($plageOps as $_plage) {
         // Si notre intervention est dans la plage Mediboard
         if (CMbRange::in($time_op, $_plage->debut, $_plage->fin)) {
             $plageOp = $_plage;
             break;
         }
     }
     if ($plageOp->_id) {
         $operation->plageop_id = $plageOp->_id;
     } else {
         // Dans le cas où l'on avait une plage sur l'interv on la supprime
         $operation->plageop_id = "";
         $operation->date = $date_op;
     }
 }
Пример #2
0
     $smarty->assign("intervention", $intervention);
     $smarty->assign("sejour_intervention", $sejour_intervention);
     $smarty->assign("msg_error", $msg_error);
     $smarty->display("dhe_externe.tpl");
     return;
 }
 // Gestion de l'intervention
 if ($sejour_intervention && $intervention->_datetime && $intervention->temp_operation && $intervention->cote) {
     $intervention->chir_id = $praticien_id;
     // Est-ce que la date permet de planifier
     $bloc = $intervention->updateSalle()->loadRefBloc();
     if (CMbDT::daysRelative(CMbDT::date(), CMbDT::date($intervention->_datetime)) > $bloc->days_locked) {
         $plage_op = new CPlageOp();
         $plage_op->date = CMbDT::date($intervention->_datetime);
         $plage_op->chir_id = $praticien_id;
         $listPlages = $plage_op->loadMatchingList();
         if (count($listPlages)) {
             $intervention->plageop_id = reset($listPlages)->_id;
         }
     }
     if (!$intervention->plageop_id && CMbDT::daysRelative(CMbDT::date(), CMbDT::date($intervention->_datetime)) > 2) {
         $msg_error = "aucune vacation de disponible à cette date";
     } else {
         $intervention->libelle = $sejour->libelle;
         $intervention->sejour_id = $sejour->_id;
         if (!($msg_error = $intervention->store())) {
             $intervention_ok = true;
         }
     }
 } elseif ($sejour_intervention) {
     $msg_error = "champ(s) obligatoire(s) manquant(s) :";
 /**
  * @see parent::mine
  */
 function mine($salle_id, $date)
 {
     parent::mine($salle_id, $date);
     // plages
     $plage_op = new CPlageOp();
     $plage_op->date = $date;
     $plage_op->salle_id = $salle_id;
     /** @var CPlageOp[] $plages */
     $plages = $plage_op->loadMatchingList();
     $plages_to_use = array();
     $range_plage = array();
     foreach ($plages as $kp => $_plage) {
         if ($_plage->debut >= $_plage->fin) {
             continue;
         }
         $plages_to_use[$kp] = $_plage;
         CMbRange::union($range_plage, array("lower" => $_plage->debut, "upper" => $_plage->fin));
     }
     $this->nb_plages_planned = count($plages);
     $this->nb_plages_planned_valid = count($plages_to_use);
     $this->cumulative_plages_planned = 0;
     foreach ($range_plage as $_range) {
         $this->cumulative_plages_planned += CMbDT::minutesRelative($_range["lower"], $_range["upper"]);
     }
     // interventions
     $interv = new COperation();
     $interv->salle_id = $salle_id;
     $interv->date = $date;
     /** @var COperation[] $intervs */
     $intervs = $interv->loadMatchingList();
     $interv_to_use = array();
     $range_inter = array();
     foreach ($intervs as $ki => $_interv) {
         // cleanup invalid
         if (!$_interv->entree_salle || !$_interv->sortie_salle || $_interv->entree_salle >= $_interv->sortie_salle) {
             continue;
         }
         $interv_to_use[$ki] = $_interv;
         CMbRange::union($range_inter, array("lower" => $_interv->entree_salle, "upper" => $_interv->sortie_salle));
     }
     $this->nb_real_interventions = count($intervs);
     $this->nb_real_intervention_valid = count($interv_to_use);
     $this->cumulative_real_interventions = 0;
     foreach ($range_inter as $_range) {
         $this->cumulative_real_interventions += CMbDT::minutesRelative($_range["lower"], $_range["upper"]);
     }
     // opening patient
     $interv_to_use = array();
     $range_inter_opened = array();
     foreach ($intervs as $ki => $_interv) {
         // cleanup invalid
         if (!$_interv->debut_op || !$_interv->fin_op || $_interv->debut_op >= $_interv->fin_op) {
             continue;
         }
         $interv_to_use[$ki] = $_interv;
         CMbRange::union($range_inter_opened, array("lower" => $_interv->debut_op, "upper" => $_interv->fin_op));
     }
     $this->nb_interventions_opened_patient = count($intervs);
     $this->nb_intervention_opened_patient_valid = count($interv_to_use);
     $this->cumulative_opened_patient = 0;
     foreach ($range_inter_opened as $_range) {
         $this->cumulative_opened_patient += CMbDT::minutesRelative($_range["lower"], $_range["upper"]);
     }
     // range operation
     $this->cumulative_plages_minus_interventions = 0;
     $plages_minus_interv = CMbRange::multiCrop($range_plage, $range_inter);
     foreach ($plages_minus_interv as $_plage) {
         $this->cumulative_plages_minus_interventions = CMbDT::minutesRelative($_plage["lower"], $_plage["upper"]);
     }
     $this->cumulative_interventions_minus_plages = 0;
     $interv_minus_plage = CMbRange::multiCrop($range_inter, $range_plage);
     foreach ($interv_minus_plage as $_plage) {
         $this->cumulative_interventions_minus_plages = CMbDT::minutesRelative($_plage["lower"], $_plage["upper"]);
     }
     return $this;
 }
Пример #4
0
 $time_op = CMbDT::time($date_debut);
 $temps_op = CMbDT::subTime(CMbDT::time($date_debut), CMbDT::time($date_fin));
 // Recherche de la salle
 $salle = new CSalle();
 $where = array("nom" => "= '{$nom_salle}'", "bloc_id" => CSQLDataSource::prepareIn(array_keys($blocs)));
 if (!$salle->loadObject($where)) {
     CAppUI::stepAjax("La salle '{$nom_salle}' n'a pas été retrouvée dans Mediboard", UI_MSG_WARNING);
     $results["count_erreur"]++;
     continue;
 }
 // Recherche d'une éventuelle PlageOp
 $plageOp = new CPlageOp();
 $plageOp->chir_id = $mediuser->_id;
 $plageOp->salle_id = $salle->_id;
 $plageOp->date = $date_op;
 foreach ($plageOp->loadMatchingList() as $_plage) {
     // Si notre intervention est dans la plage Mediboard
     if ($_plage->debut <= $time_op && $temps_op <= $_plage->fin) {
         $plageOp = $_plage;
         break;
     }
 }
 // Recherche d'une intervension existante sinon création
 $operation = new COperation();
 $operation->sejour_id = $sejour->_id;
 $operation->chir_id = $mediuser->_id;
 $operation->plageop_id = $plageOp->_id;
 $operation->salle_id = $salle->_id;
 if (!$operation->plageop_id) {
     $operation->date = $date_op;
 }