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