コード例 #1
0
    $usages_by_ressource[$_usage->ressource_materielle_id][] = $_usage;
}
// Les indispos sur cette même période
$indispos = $ressource->loadRefsIndispos($date_min, $date_max);
$indispos_by_ressource = array();
foreach ($indispos as $_indispo) {
    $_indispo->_debut_offset = CMbDate::position(max($date_min, $_indispo->deb), $date_min, "1hour");
    $_indispo->_fin_offset = CMbDate::position(min($date_max, $_indispo->fin), $date_min, "1hour");
    $_indispo->_width = $_indispo->_fin_offset - $_indispo->_debut_offset;
    if ($_indispo->_width <= 0) {
        continue;
    }
    $indispos_by_ressource[$_indispo->ressource_materielle_id][] = $_indispo;
}
// Les besoins sur cete même période
$besoins = $ressource->loadRefsBesoins($date_min, $date_max);
unset($besoins[$besoin_ressource_id]);
foreach ($besoins as $key => $_besoin) {
    $_operation = $_besoin->loadRefOperation();
    $_operation->loadRefPlageOp();
    $_debut_op = $_operation->_datetime;
    $_fin_op = CMbDT::addDateTime($_operation->temp_operation, $_debut_op);
    $_besoin->_debut_offset = CMbDate::position($_debut_op, $date_min, "1hour");
    $_besoin->_fin_offset = CMbDate::position(min($date_max, $_fin_op), $date_min, "1hour");
    $_besoin->_width = $_besoin->_fin_offset - $_besoin->_debut_offset;
    if ($_besoin->_width <= 0) {
        unset($besoins[$key]);
    }
    foreach ($ressources as $_ressource) {
        if ($min_fin_op <= $_debut_op && CMbDT::addDateTime($_ressource->retablissement, $min_fin_op) > $_debut_op) {
            $display_alert[$_ressource->_id] = 1;
コード例 #2
0
 /**
  * Check if the ressource is available or not, and set the color
  *
  * @return boolean
  */
 function isAvailable()
 {
     $this->loadRefOperation();
     $deb_op = $this->_ref_operation->_datetime_best;
     $fin_op = CMbDT::addDateTime($this->_ref_operation->temp_operation, $deb_op);
     $type_ressource = $this->loadRefTypeRessource();
     $nb_ressources = $type_ressource->countBackRefs("ressources_materielles");
     $_usage = $this->loadRefUsage();
     $this->_color = '0a0';
     // S'il y a un usage, alors on peut vérifier si conflit avec :
     // - un autre usage
     // - une indispo
     // - un besoin
     // Dans ce cas, on passe en rouge
     if ($_usage->_id) {
         $ressource = $_usage->loadRefRessource();
         $_usages = $ressource->loadRefsUsages($deb_op, $fin_op);
         unset($_usages[$_usage->_id]);
         $_indispos = $ressource->loadRefsIndispos($deb_op, $fin_op);
         $_besoins = $ressource->loadRefsBesoins($deb_op, $fin_op);
         unset($_besoins[$this->_id]);
         if (count($_usages) + count($_indispos) + count($_besoins) >= $nb_ressources) {
             $this->_color = 'a00';
             return 0;
         }
         return 1;
     }
     // Sinon, on parcourt les ressources associées au type de ressource du besoin.
     $ressources = $type_ressource->loadRefsRessources();
     $_usages = 0;
     $_indispos = 0;
     $_besoins = 0;
     foreach ($ressources as $_ressource) {
         $_usages += count($_ressource->loadRefsUsages($deb_op, $fin_op));
         $_indispos += count($_ressource->loadRefsIndispos($deb_op, $fin_op));
     }
     // Pour compter les besoins, on ne le fait qu'une fois.
     // Car un besoin cible un type de ressource.
     // On décrémente d'une unité, car le besoin de la boucle est compté
     $_ressource = new CRessourceMaterielle();
     $_ressource->type_ressource_id = $type_ressource->_id;
     $_besoins = count($_ressource->loadRefsBesoins($deb_op, $fin_op)) - 1;
     if ($_usages + $_indispos + $_besoins >= $nb_ressources) {
         $this->_color = 'a00';
         return 0;
     }
     return 1;
 }