/**
  * @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;
 }
Example #2
0
 /**
  * Fragment un remplacement par des congés du remplacant
  *
  * @return array Fragments d'intervales de dates
  */
 function makeFragments()
 {
     $fragments = array();
     $croppers = array();
     foreach ($this->_ref_replacer_conges as $_conge) {
         $croppers[] = array("lower" => CMbDT::date("-1 DAY", $_conge->date_debut), "upper" => CMbDT::date("+1 DAY", $_conge->date_fin));
     }
     if (count($this->_ref_replacer_conges) > 0) {
         $fragments = CMbRange::multiCrop(array(array("lower" => $this->deb, "upper" => $this->fin)), $croppers);
         foreach ($fragments as $key => $_fragment) {
             if (!CMbRange::collides($this->_min_deb, $this->_max_fin, $_fragment[0], $_fragment[1])) {
                 unset($fragments[$key]);
             }
         }
     }
     return $this->_ref_replacement_fragments = $fragments;
 }