}
$date_min = $date . " 00:00:00";
$date_max = CMbDT::date("+1 day", $date) . " 00:00:00";
$min_fin_op = min($date_max, CMbDT::addDateTime($operation->temp_operation, $debut_op));
$date_before = CMbDT::date("-1 day", $date);
$date_after = CMbDT::date("+1 day", $date);
$date_temp = $date_min;
$hours = array();
while ($date_temp < $date_max) {
    $hours[] = $date_temp;
    $date_temp = CMbDT::dateTime("+1 hour", $date_temp);
}
$operation->_debut_offset = CMbDate::position($debut_op, $date_min, "1hour");
$operation->_fin_offset = CMbDate::position($min_fin_op, $date_min, "1hour");
$operation->_width = $operation->_fin_offset - $operation->_debut_offset;
$ressource = new CRessourceMaterielle();
$ressource->type_ressource_id = $type_ressource_id;
// Les usages sur la période définie
$usages = $ressource->loadRefsUsages($date_min, $date_max);
CStoredObject::massLoadFwdRef($usages, "ressource_materielle_id");
$usages_by_ressource = array();
$besoins = CStoredObject::massLoadFwdRef($usages, "besoin_ressource_id");
CStoredObject::massLoadFwdRef($besoins, "operation_id");
$display_alert = array();
foreach ($usages as $_usage) {
    if (!isset($usages_by_ressource[$_usage->ressource_materielle_id])) {
        $usages_by_ressource[$_usage->ressource_materielle_id] = array();
    }
    $_ressource = $_usage->loadRefRessource();
    $_operation = $_usage->loadRefBesoin()->loadRefOperation();
    $_operation->loadRefPlageOp();
<?php

/**
 * dPbloc
 *  
 * @category Bloc
 * @package  Mediboard
 * @author   SARL OpenXtrem <*****@*****.**>
 * @license  GNU General Public License, see http://www.gnu.org/licenses/gpl.html 
 * @version  SVN: $Id:$ 
 * @link     http://www.mediboard.org
 */
CCanDo::checkEdit();
$ressource_id = CValue::getOrSession("ressource_id");
$ressource_materielle = new CRessourceMaterielle();
$where = array();
$where["ressource_materielle.group_id"] = "= '" . CGroups::loadCurrent()->_id . "'";
$ljoin = array();
$ljoin["type_ressource"] = "ressource_materielle.type_ressource_id = type_ressource.type_ressource_id";
/** @var CRessourceMaterielle[] $ressources_materielles */
$ressources_materielles = $ressource_materielle->loadList($where, "type_ressource.libelle", null, null, $ljoin);
CMbObject::massLoadFwdRef($ressources_materielles, "type_ressource_id");
foreach ($ressources_materielles as $_ressource) {
    $_ressource->loadRefTypeRessource();
}
$smarty = new CSmartyDP();
$smarty->assign("ressource_id", $ressource_id);
$smarty->assign("ressources_materielles", $ressources_materielles);
$smarty->display("inc_list_ressources.tpl");
Example #3
0
<?php

/**
 * dPbloc
 *  
 * @category Bloc
 * @package  Mediboard
 * @author   SARL OpenXtrem <*****@*****.**>
 * @license  GNU General Public License, see http://www.gnu.org/licenses/gpl.html 
 * @version  SVN: $Id:$ 
 * @link     http://www.mediboard.org
 */
CCanDo::checkEdit();
$ressource_id = CValue::getOrSession("ressource_id");
$type_ressource_id = CValue::get("type_ressource_id");
$ressource_materielle = new CRessourceMaterielle();
$ressource_materielle->load($ressource_id);
if (!$ressource_materielle->_id) {
    $ressource_materielle->group_id = CGroups::loadCurrent()->_id;
    $ressource_materielle->type_ressource_id = $type_ressource_id;
}
$ressource_materielle->loadRefTypeRessource();
$smarty = new CSmartyDP();
$smarty->assign("ressource_materielle", $ressource_materielle);
$smarty->display("inc_edit_ressource.tpl");
 /**
  * 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;
 }