/** * 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; } }
$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; }
$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; }