} $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");
<?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; }