/** * @see parent::getPerm() */ function getPerm($permType) { if (!$this->_id) { return parent::getPerm($permType); } if (!$this->_ref_salle) { $this->loadRefSalle(); } if ($this->chir_id && !$this->_ref_chir) { $this->loadRefChir(); } if ($this->spec_id && !$this->_ref_spec) { $this->loadRefSpec(); } $pratPerm = false; // Test de Permission if ($this->chir_id) { $pratPerm = $this->_ref_chir->getPerm($permType); } elseif ($this->spec_id) { $pratPerm = $this->_ref_spec->getPerm($permType); } return $this->_ref_salle->getPerm($permType) && $pratPerm; }
/** * Récupération des statistiques du nombre d'interventions par mois * selon plusieurs filtres * * @param string $debut Date de début * @param string $fin Date de fin * @param int $prat_id Identifiant du praticien * @param int $salle_id Identifiant de la sall * @param int $bloc_id Identifiant du bloc * @param int $discipline_id Identifiant de la discipline * @param string $codes_ccam Code CCAM * @param string $type_hospi Type d'hospitalisation * @param bool $hors_plage Prise en compte des hors plage * * @return array */ function graphActivite($debut = null, $fin = null, $prat_id = 0, $salle_id = 0, $bloc_id = 0, $func_id = 0, $discipline_id = 0, $codes_ccam = "", $type_hospi = "", $hors_plage = true) { if (!$debut) { $debut = CMbDT::date("-1 YEAR"); } if (!$fin) { $fin = CMbDT::date(); } $prat = new CMediusers(); $prat->load($prat_id); $discipline = new CDiscipline(); $discipline->load($discipline_id); $salle = new CSalle(); $salle->load($salle_id); $ticks = array(); $serie_total = array('label' => 'Total', 'data' => array(), 'markers' => array('show' => true), 'bars' => array('show' => false)); for ($i = $debut; $i <= $fin; $i = CMbDT::date("+1 MONTH", $i)) { $ticks[] = array(count($ticks), CMbDT::transform("+0 DAY", $i, "%m/%Y")); $serie_total['data'][] = array(count($serie_total['data']), 0); } $salles = CSalle::getSallesStats($salle_id, $bloc_id); $ds = $salle->_spec->ds; // Gestion du hors plage $where_hors_plage = !$hors_plage ? "AND operations.plageop_id IS NOT NULL" : ""; $total = 0; $series = array(); foreach ($salles as $salle) { $serie = array('label' => utf8_encode($bloc_id ? $salle->nom : $salle->_view), 'data' => array()); $query = "SELECT COUNT(operations.operation_id) AS total,\r\n DATE_FORMAT(operations.date, '%m/%Y') AS mois,\r\n DATE_FORMAT(operations.date, '%Y%m') AS orderitem,\r\n sallesbloc.nom AS nom\r\n FROM operations\r\n LEFT JOIN sejour ON operations.sejour_id = sejour.sejour_id\r\n LEFT JOIN sallesbloc ON operations.salle_id = sallesbloc.salle_id\r\n LEFT JOIN plagesop ON operations.plageop_id = plagesop.plageop_id\r\n LEFT JOIN users_mediboard ON operations.chir_id = users_mediboard.user_id\r\n WHERE operations.annulee = '0'\r\n AND operations.date BETWEEN '{$debut}' AND '{$fin}'\r\n {$where_hors_plage}\r\n AND sejour.group_id = '" . CGroups::loadCurrent()->_id . "'"; if ($type_hospi) { $query .= "\nAND sejour.type = '{$type_hospi}'"; } if ($prat_id && !$prat->isFromType(array("Anesthésiste"))) { $query .= "\nAND operations.chir_id = '{$prat_id}'"; } if ($prat_id && $prat->isFromType(array("Anesthésiste"))) { $query .= "\nAND (operations.anesth_id = '{$prat_id}' OR\r\n (plagesop.anesth_id = '{$prat_id}' AND (operations.anesth_id = '0' OR operations.anesth_id IS NULL)))"; } if ($discipline_id) { $query .= "\nAND users_mediboard.discipline_id = '{$discipline_id}'"; } if ($codes_ccam) { $query .= "\nAND operations.codes_ccam LIKE '%{$codes_ccam}%'"; } $query .= "\nAND sallesbloc.salle_id = '{$salle->_id}'"; $query .= "\nGROUP BY mois ORDER BY orderitem"; $result = $ds->loadlist($query); foreach ($ticks as $i => $tick) { $f = true; foreach ($result as $r) { if ($tick[1] == $r["mois"]) { $serie["data"][] = array($i, $r["total"]); $serie_total["data"][$i][1] += $r["total"]; $total += $r["total"]; $f = false; break; } } if ($f) { $serie["data"][] = array(count($serie["data"]), 0); } } $series[] = $serie; } $series[] = $serie_total; // Set up the title for the graph if ($prat_id && $prat->isFromType(array("Anesthésiste"))) { $title = "Nombre d'anesthésie par salle"; $subtitle = "{$total} anesthésies"; } else { $title = "Nombre d'interventions par salle"; $subtitle = "{$total} interventions"; } if ($prat_id) { $subtitle .= " - Dr {$prat->_view}"; } if ($discipline_id) { $subtitle .= " - {$discipline->_view}"; } if ($codes_ccam) { $subtitle .= " - CCAM : {$codes_ccam}"; } if ($type_hospi) { $subtitle .= " - " . CAppUI::tr("CSejour.type.{$type_hospi}"); } $options = array('title' => utf8_encode($title), 'subtitle' => utf8_encode($subtitle), 'xaxis' => array('labelsAngle' => 45, 'ticks' => $ticks), 'yaxis' => array('autoscaleMargin' => 1), 'bars' => array('show' => true, 'stacked' => true, 'barWidth' => 0.8), 'HtmlText' => false, 'legend' => array('show' => true, 'position' => 'nw'), 'grid' => array('verticalLines' => false), 'spreadsheet' => array('show' => true, 'csvFileSeparator' => ';', 'decimalSeparator' => ',', 'tabGraphLabel' => utf8_encode('Graphique'), 'tabDataLabel' => utf8_encode('Données'), 'toolbarDownload' => utf8_encode('Fichier CSV'), 'toolbarSelectAll' => utf8_encode('Sélectionner tout le tableau'))); return array('series' => $series, 'options' => $options); }
/** * Récuparation du graphique du nombre d'interventions annulées le jour même * * @param string $date_min Date de début * @param string $date_max Date de fin * @param int $prat_id Identifiant du praticien * @param int $salle_id Identifiant de la salle * @param int $bloc_id Identifiant du bloc * @param string $code_ccam Code CCAM * @param string $type_sejour Type de séjour * @param bool $hors_plage Prise en charge des hors plage * * @return array */ function graphOpAnnulees($date_min = null, $date_max = null, $prat_id = null, $salle_id = null, $bloc_id = null, $code_ccam = null, $type_sejour = null, $hors_plage = false) { $miner = new COperationWorkflow(); $miner->warnUsage(); if (!$date_min) { $date_min = CMbDT::date("-1 YEAR"); } if (!$date_max) { $date_max = CMbDT::date(); } $date_min = CMbDT::format($date_min, "%Y-%m-01"); $date_max = CMbDT::transform("+1 MONTH", $date_max, "%Y-%m-01"); $prat = new CMediusers(); $prat->load($prat_id); $serie_total = array('label' => 'Total', 'data' => array(), 'markers' => array('show' => true), 'bars' => array('show' => false)); $salles = CSalle::getSallesStats($salle_id, $bloc_id); $query = new CRequest(); $query->addColumn("salle_id"); $query->addColumn("DATE_FORMAT(date_operation, '%Y-%m')", "mois"); $query->addColumn("COUNT(DISTINCT(operations.operation_id))", "total"); $query->addTable("operations"); $query->addLJoinClause("operation_workflow", "operation_workflow.operation_id = operations.operation_id"); $query->addWhere("DATE(date_cancellation) = DATE(date_operation)"); $query->addWhereClause("date_operation", "BETWEEN '{$date_min}' AND '{$date_max}'"); $query->addWhereClause("salle_id", CSQLDataSource::prepareIn(array_keys($salles))); $query->addGroup("mois, salle_id"); $query->addOrder("mois, salle_id"); // Filtre sur hors plage if (!$hors_plage) { $query->addWhereClause("plageop_id", "IS NOT NULL"); } // Filtre sur le praticien if ($prat_id) { $query->addWhereClause("operations.chir_id", "= '{$prat_id}'"); } // Filtre sur les codes CCAM if ($code_ccam) { $query->addWhereClause("operations.codes_ccam", "LIKE '%{$code_ccam}%'"); } // Filtre sur le type d'hospitalisation if ($type_sejour) { $query->addLJoinClause("sejour", "sejour.sejour_id = operations.sejour_id"); $query->addWhereClause("sejour.type", "= '{$type_sejour}'"); } // Query result $ds = CSQLDataSource::get("std"); $tree = $ds->loadTree($query->makeSelect()); // Build horizontal ticks $months = array(); $ticks = array(); for ($_date = $date_min; $_date < $date_max; $_date = CMbDT::date("+1 MONTH", $_date)) { $count_ticks = count($ticks); $ticks[] = array($count_ticks, CMbDT::format($_date, "%m/%Y")); $months[CMbDT::format($_date, "%Y-%m")] = $count_ticks; $serie_total['data'][] = array(count($serie_total['data']), 0); } // Build series $series = array(); $total = 0; foreach ($salles as $_salle) { $_serie = array("label" => utf8_encode($bloc_id ? $_salle->nom : $_salle->_view)); $data = array(); foreach ($months as $_month => $_tick) { $value = isset($tree[$_salle->_id][$_month]) ? $tree[$_salle->_id][$_month] : 0; $data[] = array($_tick, $value); $serie_total["data"][$_tick][1] += $value; $total += $value; } $_serie["data"] = $data; $series[] = $_serie; } $series[] = $serie_total; // Set up the title for the graph $title = "Interventions annulées le jour même"; $subtitle = "{$total} interventions"; if ($prat_id) { $subtitle .= " - Dr {$prat->_view}"; } if ($salle_id) { $salle = reset($salles); $subtitle .= " - {$salle->_view}"; } if ($code_ccam) { $subtitle .= " - CCAM : {$code_ccam}"; } if ($type_sejour) { $subtitle .= " - " . CAppUI::tr("CSejour.type.{$type_sejour}"); } $options = array('title' => utf8_encode($title), 'subtitle' => utf8_encode($subtitle), 'xaxis' => array('labelsAngle' => 45, 'ticks' => $ticks), 'yaxis' => array('autoscaleMargin' => 1), 'bars' => array('show' => true, 'stacked' => true, 'barWidth' => 0.8), 'HtmlText' => false, 'legend' => array('show' => true, 'position' => 'nw'), 'grid' => array('verticalLines' => false), 'spreadsheet' => array('show' => true, 'csvFileSeparator' => ';', 'decimalSeparator' => ',', 'tabGraphLabel' => utf8_encode('Graphique'), 'tabDataLabel' => utf8_encode('Données'), 'toolbarDownload' => utf8_encode('Fichier CSV'), 'toolbarSelectAll' => utf8_encode('Sélectionner tout le tableau'))); return array('series' => $series, 'options' => $options); }
* @package Mediboard * @subpackage PlanningOp * @author SARL OpenXtrem <*****@*****.**> * @license GNU General Public License, see http://www.gnu.org/licenses/gpl.html * @version $Revision$ */ global $can, $m, $tab; CCanDo::checkRead(); $hors_plage = new CIntervHorsPlage(); if (!$hors_plage->canRead()) { $can->redirect(); } // Toutes les salles des blocs $listBlocs = CGroups::loadCurrent()->loadBlocs(PERM_READ); // Les salles autorisées $salle = new CSalle(); $listSalles = $salle->loadListWithPerms(PERM_READ); // Liste des Etablissements selon Permissions $etablissements = CMediusers::loadEtablissements(PERM_READ); // Chargement des prestations $prestations = CPrestation::loadCurrentList(); $operation_id = CValue::getOrSession("operation_id"); $chir_id = CAppUI::conf("dPplanningOp COperation use_session_praticien") ? CValue::getOrSession("chir_id") : CValue::get("chir_id"); $sejour_id = CValue::get("sejour_id"); $hour_urgence = CValue::get("hour_urgence"); $min_urgence = CValue::get("min_urgence"); $date_urgence = CValue::get("date_urgence"); $salle_id = CValue::get("salle_id"); $patient_id = CValue::get("pat_id"); $grossesse_id = CValue::get("grossesse_id"); $consult_related_id = CValue::get("consult_related_id");
* @author SARL OpenXtrem <*****@*****.**> * @license GNU General Public License, see http://www.gnu.org/licenses/gpl.html * @version $Revision$ */ // Récupération des paramètres $date = CValue::getOrSession("date", CMbDT::date()); $salle_id = CValue::getOrSession("salle_id"); $bloc_id = CValue::getOrSession("bloc_id"); $type = CValue::getOrSession("type", "ouverture_salle"); // Récupération de l'utilisateur courant $user = CUser::get(); $currUser = new CMediusers(); $currUser->load($user->_id); $currUser->isAnesth(); $currUser->isPraticien(); $salle = new CSalle(); $salle->load($salle_id); $bloc = new CBlocOperatoire(); $bloc->load($bloc_id); // Vérification de la check list journalière $daily_check_lists = array(); $daily_check_list_types = array(); $require_check_list = CAppUI::conf("dPsalleOp CDailyCheckList active", CGroups::loadCurrent()) && $date >= CMbDT::date() && !$currUser->_is_praticien; if ($require_check_list) { if ($bloc->_id) { list($check_list_not_validated, $daily_check_list_types, $daily_check_lists) = CDailyCheckList::getCheckLists($bloc, $date, $type); } else { list($check_list_not_validated, $daily_check_list_types, $daily_check_lists) = CDailyCheckList::getCheckLists($salle, $date, $type); } if ($check_list_not_validated == 0) { $require_check_list = false;
$where['object_class'] = "= 'COperation'"; $where["group_id"] = " = '" . CGroups::loadCurrent()->_id . "'"; $nb_modeles_etiquettes_operation = $modele_etiquette->countList($where); $where['object_class'] = "= 'CSejour'"; $nb_modeles_etiquettes_sejour = $modele_etiquette->countList($where); $nb_printers = 0; if (CModule::getActive("printing")) { // Chargement des imprimantes pour l'impression d'étiquettes $user_printers = CMediusers::get(); $function = $user_printers->loadRefFunction(); $nb_printers = $function->countBackRefs("printers"); } $compte_rendu = new CCompteRendu(); $salles = array(); if (!empty($list_urgences)) { $salle = new CSalle(); $salles = $salle->loadGroupList(); } // Création du template $smarty = new CSmartyDP(); $smarty->assign("praticien", $praticien); $smarty->assign("boardItem", $boardItem); $smarty->assign("date", $date); $smarty->assign("canceled", $canceled); $smarty->assign("listUrgences", $list_urgences); $smarty->assign("listDay", $list_plages); $smarty->assign("nb_canceled", $nb_canceled); $smarty->assign("board", $board); $smarty->assign("nb_printers", $nb_printers); $smarty->assign("can_create_docs", $compte_rendu->canClass()->edit); $smarty->assign("nb_modeles_etiquettes_sejour", $nb_modeles_etiquettes_sejour);
/** * Récupération des statistiques du nombre d'interventions par jour * selon plusieurs filtres * * @param string $date Date de début * @param int $prat_id Identifiant du praticien * @param int $salle_id Identifiant de la sall * @param int $bloc_id Identifiant du bloc * @param int $discipline_id Identifiant de la discipline * @param string $codes_ccam Code CCAM * @param string $type_hospi Type d'hospitalisation * @param bool $hors_plage Prise en compte des hors plage * * @return array */ function graphActiviteZoom($date, $prat_id = 0, $salle_id = 0, $bloc_id = 0, $func_id = 0, $discipline_id = 0, $codes_ccam = '', $type_hospi = "", $hors_plage = true) { if (!$date) { $date = CMbDT::transform("+0 DAY", CMbDT::date(), "%m/%Y"); } $prat = new CMediusers(); $prat->load($prat_id); $salle = new CSalle(); $salle->load($salle_id); $discipline = new CDiscipline(); $discipline->load($discipline_id); // Gestion de la date $debut = substr($date, 3, 7) . "-" . substr($date, 0, 2) . "-01"; $fin = CMbDT::date("+1 MONTH", $debut); $fin = CMbDT::date("-1 DAY", $fin); $step = "+1 DAY"; // Tableaux des jours $ticks = array(); $ticks2 = array(); $serie_total = array('label' => 'Total', 'data' => array(), 'markers' => array('show' => true), 'bars' => array('show' => false)); for ($i = $debut; $i <= $fin; $i = CMbDT::date($step, $i)) { $ticks[] = array(count($ticks), CMbDT::format($i, "%a %d")); $ticks2[] = array(count($ticks), CMbDT::format($i, "%d")); $serie_total['data'][] = array(count($serie_total['data']), 0); } $salles = CSalle::getSallesStats($salle_id, $bloc_id); $series = array(); $total = 0; foreach ($salles as $salle) { $serie = array('data' => array(), 'label' => utf8_encode($salle->nom)); $query = "SELECT COUNT(operations.operation_id) AS total,\r\n DATE_FORMAT(operations.date, '%d') AS jour,\r\n sallesbloc.nom AS nom\r\n FROM operations\r\n INNER JOIN sejour ON operations.sejour_id = sejour.sejour_id\r\n INNER JOIN sallesbloc ON operations.salle_id = sallesbloc.salle_id\r\n INNER JOIN plagesop ON operations.plageop_id = plagesop.plageop_id\r\n INNER JOIN users_mediboard ON operations.chir_id = users_mediboard.user_id\r\n WHERE operations.date BETWEEN '{$debut}' AND '{$fin}'\r\n AND operations.plageop_id IS NOT NULL\r\n AND operations.annulee = '0'\r\n AND sallesbloc.salle_id = '{$salle->_id}'"; if ($prat_id && !$prat->isFromType(array("Anesthésiste"))) { $query .= "\nAND operations.chir_id = '{$prat_id}'"; } if ($prat_id && $prat->isFromType(array("Anesthésiste"))) { $query .= "\nAND (operations.anesth_id = '{$prat_id}' OR \r\n (plagesop.anesth_id = '{$prat_id}' AND (operations.anesth_id = '0' OR operations.anesth_id IS NULL)))"; } if ($discipline_id) { $query .= "\nAND users_mediboard.discipline_id = '{$discipline_id}'"; } if ($codes_ccam) { $query .= "\nAND operations.codes_ccam LIKE '%{$codes_ccam}%'"; } if ($type_hospi) { $query .= "\nAND sejour.type = '{$type_hospi}'"; } $query .= "\nGROUP BY jour ORDER BY jour"; $result = $salle->_spec->ds->loadlist($query); $result_hors_plage = array(); if ($hors_plage) { $query_hors_plage = "SELECT COUNT(operations.operation_id) AS total,\r\n DATE_FORMAT(operations.date, '%d') AS jour,\r\n sallesbloc.nom AS nom\r\n FROM operations\r\n INNER JOIN sejour ON operations.sejour_id = sejour.sejour_id\r\n INNER JOIN sallesbloc ON operations.salle_id = sallesbloc.salle_id\r\n INNER JOIN users_mediboard ON operations.chir_id = users_mediboard.user_id\r\n WHERE operations.date BETWEEN '{$debut}' AND '{$fin}'\r\n AND operations.plageop_id IS NULL\r\n AND operations.annulee = '0'\r\n AND sallesbloc.salle_id = '{$salle->_id}'"; if ($prat_id && !$prat->isFromType(array("Anesthésiste"))) { $query_hors_plage .= "\nAND operations.chir_id = '{$prat_id}'"; } if ($prat_id && $prat->isFromType(array("Anesthésiste"))) { $query_hors_plage .= "\nAND operations.anesth_id = '{$prat_id}'"; } if ($discipline_id) { $query_hors_plage .= "\nAND users_mediboard.discipline_id = '{$discipline_id}'"; } if ($codes_ccam) { $query_hors_plage .= "\nAND operations.codes_ccam LIKE '%{$codes_ccam}%'"; } if ($type_hospi) { $query_hors_plage .= "\nAND sejour.type = '{$type_hospi}'"; } $query_hors_plage .= "\nGROUP BY jour ORDER BY jour"; $result_hors_plage = $salle->_spec->ds->loadlist($query_hors_plage); } foreach ($ticks2 as $i => $tick) { $f = true; foreach ($result as $r) { if ($tick[1] == $r["jour"]) { if ($hors_plage) { foreach ($result_hors_plage as &$_r_h) { if ($tick[1] == $_r_h["jour"]) { $r["total"] += $_r_h["total"]; unset($_r_h); break; } } } $serie["data"][] = array($i, $r["total"]); $serie_total["data"][$i][1] += $r["total"]; $total += $r["total"]; $f = false; } } if ($f) { $serie["data"][] = array(count($serie["data"]), 0); } } $series[] = $serie; } $series[] = $serie_total; // Set up the title for the graph if ($prat_id && $prat->isFromType(array("Anesthésiste"))) { $title = "Nombre d'anesthésie par salle - " . CMbDT::format($debut, "%m/%Y"); $subtitle = "{$total} anesthésies"; } else { $title = "Nombre d'interventions par salle - " . CMbDT::format($debut, "%m/%Y"); $subtitle = "{$total} interventions"; } if ($prat_id) { $subtitle .= " - Dr {$prat->_view}"; } if ($discipline_id) { $subtitle .= " - {$discipline->_view}"; } if ($codes_ccam) { $subtitle .= " - CCAM : {$codes_ccam}"; } if ($type_hospi) { $subtitle .= " - " . CAppUI::tr("CSejour.type.{$type_hospi}"); } $options = CFlotrGraph::merge("bars", array('title' => utf8_encode($title), 'subtitle' => utf8_encode($subtitle), 'xaxis' => array('ticks' => $ticks), 'bars' => array('stacked' => true, 'barWidth' => 0.8))); return array('series' => $series, 'options' => $options); }
$nbAlertesInterv = 0; $debut = $fin = $date_planning; $bloc = new CBlocOperatoire(); $where = array(); if ($bloc_id) { $where["bloc_operatoire_id"] = " = '{$bloc_id}'"; } $where["group_id"] = " = '{$group->_id}' "; /** @var CBlocOperatoire[] $blocs */ $blocs = $bloc->loadList($where); CStoredObject::filterByPerm($blocs, PERM_READ); if (count($blocs) == 1) { $current_bloc = reset($blocs); } // optimisation du chargement des salles (one shot) + alertes $salle = new CSalle(); $ds = $salle->getDS(); $where = array(); $where["bloc_id"] = $ds->prepareIn(array_keys($blocs)); $ljoin["bloc_operatoire"] = "bloc_operatoire.bloc_operatoire_id = sallesbloc.bloc_id"; $order = "bloc_operatoire.nom, sallesbloc.nom"; $salles = $salle->loadList($where, $order, null, null, $ljoin); $salles_ids = array_keys($salles); $nbAlertesInterv = CBlocOperatoire::countAlertesIntervsForSalles(array_keys($salles)); foreach ($blocs as $_bloc) { $_bloc->canDo(); } // Récupération des opérations $operation = new COperation(); $where = array(); $ljoin = array();
* Liste des accouchements à placer en salle de naissance * * @category Maternite * @package Mediboard * @author SARL OpenXtrem <*****@*****.**> * @license GNU General Public License, see http://www.gnu.org/licenses/gpl.html * @version $Revision:$ * @link http://www.mediboard.org */ CCanDo::checkRead(); $ds = CSQLDataSource::get("std"); $date = CValue::getOrSession("date", CMbDT::date()); // Toutes les salles des blocs $listBlocs = CGroups::loadCurrent()->loadBlocs(PERM_READ, true, "nom", array("type" => "= 'obst'")); // Les salles autorisées $salle = new CSalle(); $ljoin = array("bloc_operatoire" => "sallesbloc.bloc_id = bloc_operatoire.bloc_operatoire_id"); $where = array("bloc_operatoire.type" => "= 'obst'"); /** @var CSalle[] $listSalles */ $listSalles = $salle->loadListWithPerms(PERM_READ, $where, null, null, null, $ljoin); // Chargement des Chirurgiens $chir = new CMediusers(); $listChirs = $chir->loadPraticiens(PERM_READ); // Listes des interventions hors plage $operation = new COperation(); $ljoin = array(); $ljoin["sejour"] = "operations.sejour_id = sejour.sejour_id"; $ljoin["grossesse"] = "sejour.grossesse_id = grossesse.grossesse_id"; $where = array(); // Interv ou travail qui commence le jour choisi et n'a pas terminé d'accoucher $where[] = "operations.date = '{$date}' OR (\n grossesse.datetime_debut_travail IS NOT NULL AND\n DATE(grossesse.datetime_debut_travail) < '{$date}' AND\n grossesse.datetime_accouchement IS NULL\n)";
/** * Récupération du graphique de l'occupation de salle de bloc * * @param string $debut Date de début * @param string $fin Date de fin * @param int $prat_id Identifiant du praticien * @param int $salle_id Identifiant de la salle * @param int $bloc_id Identifiant du bloc * @param int $discipline_id Identifiant de la discipline * @param string $codeCCAM Code CCAM * @param string $type_hospi Type d'hospitalisation * @param bool $hors_plage Pris en compte du hors plage * @param string $type_duree Type de durée (jours / mois) * * @return array */ function graphOccupationSalle($debut = null, $fin = null, $prat_id = 0, $salle_id = 0, $bloc_id = 0, $func_id = 0, $discipline_id = null, $codeCCAM = "", $type_hospi = "", $hors_plage = true, $type_duree = "MONTH") { $ds = CSQLDataSource::get("std"); if ($type_duree == "MONTH") { $type_duree_fr = "mois"; $date_format = "%m/%Y"; $order_key = "%Y%m"; } else { $type_duree_fr = "jour"; $date_format = "%d/%m/%Y"; $order_key = "%Y%m%d"; } if (!$debut) { $debut = CMbDT::date("-1 YEAR"); } if (!$fin) { $fin = CMbDT::date(); } $prat = new CMediusers(); $prat->load($prat_id); $salle = new CSalle(); $salle->load($salle_id); $bloc = new CBlocOperatoire(); $bloc->load($bloc_id); $discipline = new CDiscipline(); $discipline->load($discipline_id); $ticks = array(); for ($i = $debut; $i <= $fin; $i = CMbDT::date("+1 {$type_duree}", $i)) { $ticks[] = array(count($ticks), CMbDT::transform("+0 DAY", $i, $date_format)); } $salles = CSalle::getSallesStats($salle_id, $bloc_id); $user = new CMediusers(); // Chargement des praticiens $where = array(); $where["users_mediboard.actif"] = "= '1'"; if ($discipline->_id) { $where["users_mediboard.discipline_id"] = "= '{$discipline->_id}'"; } // Filter on user type $utypes_flip = array_flip(CUser::$types); $user_types = array("Chirurgien", "Anesthésiste", "Médecin", "Dentiste"); foreach ($user_types as &$_type) { $_type = $utypes_flip[$_type]; } $where["users.user_type"] = CSQLDataSource::prepareIn($user_types); $ljoin = array("users" => "users.user_id = users_mediboard.user_id"); $order = "users_mediboard.function_id, users_mediboard.discipline_id, users.user_last_name, users.user_first_name"; $listPrats = $user->loadList($where, $order, null, null, $ljoin); $seriesMoy = array(); $seriesTot = array(); $totalMoy = 0; $totalTot = 0; // Gestion du hors plage $where_hors_plage = !$hors_plage ? "AND operations.plageop_id IS NOT NULL" : ""; // First serie : Interv $serieMoy = $serieTot = array('data' => array(), 'label' => utf8_encode("Intervention")); $query = "SELECT COUNT(*) AS nbInterv,\r\n SUM(TIME_TO_SEC(operations.fin_op)-TIME_TO_SEC(operations.debut_op)) AS duree_total,\r\n DATE_FORMAT(operations.date, '{$date_format}') AS {$type_duree_fr},\r\n DATE_FORMAT(operations.date, '{$order_key}') AS orderitem\r\n FROM operations\r\n LEFT JOIN sejour ON operations.sejour_id = sejour.sejour_id\r\n LEFT JOIN plagesop ON operations.plageop_id = plagesop.plageop_id\r\n LEFT JOIN users_mediboard ON operations.chir_id = users_mediboard.user_id\r\n LEFT JOIN users ON operations.chir_id = users.user_id\r\n WHERE operations.annulee = '0'\r\n AND operations.date BETWEEN '{$debut}' AND '{$fin}'\r\n {$where_hors_plage}\r\n AND operations.debut_op IS NOT NULL\r\n AND operations.fin_op IS NOT NULL\r\n AND operations.debut_op < operations.fin_op\r\n AND sejour.group_id = '" . CGroups::loadCurrent()->_id . "'\r\n AND operations.salle_id " . CSQLDataSource::prepareIn(array_keys($salles)) . "\r\n AND users.user_id " . CSQLDataSource::prepareIn(array_keys($listPrats), $prat_id); if ($type_hospi) { $query .= "\nAND sejour.type = '{$type_hospi}'"; } if ($discipline_id) { $query .= "\nAND users_mediboard.discipline_id = '{$discipline_id}'"; } if ($codeCCAM) { $query .= "\nAND operations.codes_ccam LIKE '%{$codeCCAM}%'"; } $query .= "\nGROUP BY {$type_duree_fr} ORDER BY orderitem"; $result = $ds->loadList($query); foreach ($ticks as $i => $tick) { $f = true; foreach ($result as $j => $r) { if ($tick[1] == $r["{$type_duree_fr}"]) { $nb_interv = $r["nbInterv"]; $serieMoy['data'][] = array($i, $r["duree_total"] / (60 * $nb_interv)); $totalMoy += $r["duree_total"] / (60 * $nb_interv); $serieTot['data'][] = array($i, $r["duree_total"] / (60 * 60)); $totalTot += $r["duree_total"] / (60 * 60); $f = false; } } if ($f) { $serieMoy["data"][] = array(count($serieMoy["data"]), 0); $serieTot["data"][] = array(count($serieTot["data"]), 0); } } $seriesMoy[] = $serieMoy; $seriesTot[] = $serieTot; // Second serie : Occupation $serieMoy = $serieTot = array('data' => array(), 'label' => utf8_encode("Occupation de salle")); $query = "SELECT COUNT(*) AS nbInterv,\r\n SUM(TIME_TO_SEC(operations.sortie_salle)-TIME_TO_SEC(operations.entree_salle)) AS duree_total,\r\n DATE_FORMAT(operations.date, '{$date_format}') AS {$type_duree_fr},\r\n DATE_FORMAT(operations.date, '{$order_key}') AS orderitem\r\n FROM operations\r\n LEFT JOIN sejour ON operations.sejour_id = sejour.sejour_id\r\n LEFT JOIN plagesop ON operations.plageop_id = plagesop.plageop_id\r\n LEFT JOIN users_mediboard ON operations.chir_id = users_mediboard.user_id\r\n LEFT JOIN users ON operations.chir_id = users.user_id\r\n WHERE operations.annulee = '0'\r\n AND operations.date BETWEEN '{$debut}' AND '{$fin}'\r\n {$where_hors_plage}\r\n AND operations.entree_salle IS NOT NULL\r\n AND operations.sortie_salle IS NOT NULL\r\n AND operations.entree_salle < operations.sortie_salle\r\n AND sejour.group_id = '" . CGroups::loadCurrent()->_id . "'\r\n AND operations.salle_id " . CSQLDataSource::prepareIn(array_keys($salles)) . "\r\n AND users.user_id " . CSQLDataSource::prepareIn(array_keys($listPrats), $prat_id); if ($type_hospi) { $query .= "\nAND sejour.type = '{$type_hospi}'"; } if ($discipline_id) { $query .= "\nAND users_mediboard.discipline_id = '{$discipline_id}'"; } if ($codeCCAM) { $query .= "\nAND operations.codes_ccam LIKE '%{$codeCCAM}%'"; } $query .= "\nGROUP BY {$type_duree_fr} ORDER BY orderitem"; $result = $ds->loadList($query); foreach ($ticks as $i => $tick) { $f = true; foreach ($result as $j => $r) { if ($tick[1] == $r["{$type_duree_fr}"]) { $nb_interv = $r["nbInterv"]; $serieMoy['data'][] = array($i, $r["duree_total"] / (60 * $nb_interv)); $totalMoy += $r["duree_total"] / (60 * $nb_interv); $serieTot['data'][] = array($i, $r["duree_total"] / (60 * 60)); $totalTot += $r["duree_total"] / (60 * 60); $f = false; } } if ($f) { $serieMoy["data"][] = array(count($serieMoy["data"]), 0); $serieTot["data"][] = array(count($serieTot["data"]), 0); } } $seriesMoy[] = $serieMoy; $seriesTot[] = $serieTot; // Third serie : SSPI $serieMoy = $serieTot = array('data' => array(), 'label' => utf8_encode("Salle de reveil")); $query = "SELECT COUNT(*) AS nbInterv,\r\n SUM(TIME_TO_SEC(operations.sortie_reveil_possible)-TIME_TO_SEC(operations.entree_reveil)) AS duree_total,\r\n DATE_FORMAT(operations.date, '{$date_format}') AS {$type_duree_fr},\r\n DATE_FORMAT(operations.date, '{$order_key}') AS orderitem\r\n FROM operations\r\n LEFT JOIN sejour ON operations.sejour_id = sejour.sejour_id\r\n LEFT JOIN plagesop ON operations.plageop_id = plagesop.plageop_id\r\n LEFT JOIN users_mediboard ON operations.chir_id = users_mediboard.user_id\r\n LEFT JOIN users ON operations.chir_id = users.user_id\r\n WHERE operations.annulee = '0'\r\n AND operations.date BETWEEN '{$debut}' AND '{$fin}'\r\n {$where_hors_plage}\r\n AND operations.entree_reveil IS NOT NULL\r\n AND operations.sortie_reveil_possible IS NOT NULL\r\n AND operations.entree_reveil < operations.sortie_reveil_possible\r\n AND sejour.group_id = '" . CGroups::loadCurrent()->_id . "'\r\n AND operations.salle_id " . CSQLDataSource::prepareIn(array_keys($salles)) . "\r\n AND users.user_id " . CSQLDataSource::prepareIn(array_keys($listPrats), $prat_id); if ($type_hospi) { $query .= "\nAND sejour.type = '{$type_hospi}'"; } if ($discipline_id) { $query .= "\nAND users_mediboard.discipline_id = '{$discipline_id}'"; } if ($codeCCAM) { $query .= "\nAND operations.codes_ccam LIKE '%{$codeCCAM}%'"; } $query .= "\nGROUP BY {$type_duree_fr} ORDER BY orderitem"; $result = $ds->loadList($query); foreach ($ticks as $i => $tick) { $f = true; foreach ($result as $j => $r) { if ($tick[1] == $r[$type_duree_fr]) { $nb_interv = $r["nbInterv"]; $serieMoy['data'][] = array($i, $r["duree_total"] / (60 * $nb_interv)); $totalMoy += $r["duree_total"] / (60 * $nb_interv); $serieTot['data'][] = array($i, $r["duree_total"] / (60 * 60)); $totalTot += $r["duree_total"] / (60 * 60); $f = false; } } if ($f) { $serieMoy["data"][] = array(count($serieMoy["data"]), 0); $serieTot["data"][] = array(count($serieTot["data"]), 0); } } $seriesMoy[] = $serieMoy; $seriesTot[] = $serieTot; // Set up the title for the graph $subtitle = ""; if ($prat_id) { $subtitle .= " - Dr {$prat->_view}"; } if ($discipline_id) { $subtitle .= " - {$discipline->_view}"; } if ($salle_id) { $subtitle .= " - {$salle->nom}"; } if ($bloc_id) { $subtitle .= " - {$bloc->nom}"; } if ($codeCCAM) { $subtitle .= " - CCAM : {$codeCCAM}"; } if ($type_hospi) { $subtitle .= " - " . CAppUI::tr("CSejour.type.{$type_hospi}"); } $optionsMoy = CFlotrGraph::merge("lines", array('title' => utf8_encode("Durées moyennes d'occupation du bloc (en minutes)"), 'subtitle' => utf8_encode("par intervention {$subtitle}"), 'xaxis' => array('ticks' => $ticks), 'grid' => array('verticalLines' => true))); if ($totalMoy == 0) { $optionsMoy['yaxis']['max'] = 1; } $optionsTot = CFlotrGraph::merge("lines", array('title' => utf8_encode("Durées totales d'occupation du bloc (en heures)"), 'subtitle' => utf8_encode("total estimé {$subtitle}"), 'xaxis' => array('ticks' => $ticks), 'grid' => array('verticalLines' => true))); if ($totalTot == 0) { $optionsTot['yaxis']['max'] = 1; } if ($type_duree == "MONTH") { return array("moyenne" => array('series' => $seriesMoy, 'options' => $optionsMoy), "total" => array('series' => $seriesTot, 'options' => $optionsTot)); } else { return array('series' => $seriesTot, 'options' => $optionsTot); } }
/** * Récupération du graphique d'occupation des ressources au bloc opératoire * (personnel, vacations attribuées, ouverture de salle) * * @param string $debut Date de début * @param string $fin Date de fin * @param int $prat_id Identifiant du praticien * @param int $salle_id Identifiant de la salle * @param int $bloc_id Identifiant du bloc * @param null $discipline_id Identifiant de la discipline * @param string $codeCCAM Code CCAM * @param string $type_hospi Type d'hospitalisation * @param bool $hors_plage Pris en compte des hors plage * @param string $type_duree Type de durée analysée (jours / mois) * * @return array */ function graphTempsSalle($debut = null, $fin = null, $prat_id = 0, $salle_id = 0, $bloc_id = 0, $func_id = 0, $discipline_id = null, $codeCCAM = "", $type_hospi = "", $hors_plage = true, $type_duree = "MONTH") { $ds = CSQLDataSource::get("std"); if ($type_duree == "MONTH") { $type_duree_fr = "mois"; $date_format = "%m/%Y"; $order_key = "%Y%m"; } else { $type_duree_fr = "jour"; $date_format = "%d/%m/%Y"; $order_key = "%Y%m%d"; } if (!$debut) { $debut = CMbDT::date("-1 YEAR"); } if (!$fin) { $fin = CMbDT::date(); } $prat = new CMediusers(); $prat->load($prat_id); $salle = new CSalle(); $salle->load($salle_id); $bloc = new CBlocOperatoire(); $bloc->load($bloc_id); $discipline = new CDiscipline(); $discipline->load($discipline_id); $ticks = array(); for ($i = $debut; $i <= $fin; $i = CMbDT::date("+1 {$type_duree}", $i)) { $ticks[] = array(count($ticks), CMbDT::transform("+0 DAY", $i, $date_format)); } $salles = CSalle::getSallesStats($salle_id, $bloc_id); $seriesTot = array(); $totalTot = 0; // First serie : occupation du personnel $serieTot = array('data' => array(), 'label' => utf8_encode("Occupation du personnel")); $query = "SELECT SUM(TIME_TO_SEC(affectation_personnel.fin) - TIME_TO_SEC(affectation_personnel.debut)) as total,\n DATE_FORMAT(plagesop.date, '{$date_format}') AS {$type_duree_fr},\n DATE_FORMAT(plagesop.date, '{$order_key}') AS orderitem\n FROM plagesop\n LEFT JOIN operations ON plagesop.plageop_id = operations.plageop_id\n LEFT JOIN users_mediboard ON plagesop.chir_id = users_mediboard.user_id\n LEFT JOIN affectation_personnel ON operations.operation_id = affectation_personnel.object_id "; if ($type_hospi) { $query .= "LEFT JOIN sejour ON sejour.sejour_id = operations.sejour_id "; } $query .= "WHERE affectation_personnel.debut < affectation_personnel.fin\n AND affectation_personnel.debut IS NOT NULL\n AND affectation_personnel.fin IS NOT NULL\n AND affectation_personnel.object_class = 'COperation'\n AND plagesop.salle_id " . CSQLDataSource::prepareIn(array_keys($salles)); if ($codeCCAM) { $query .= "\nAND operations.codes_ccam LIKE '%{$codeCCAM}%'"; } if ($type_hospi) { $query .= "\nAND sejour.type = '{$type_hospi}'"; } if ($prat_id) { $query .= "\nAND plagesop.chir_id = '{$prat_id}'"; } if ($discipline_id) { $query .= "\nAND users_mediboard.discipline_id = '{$discipline_id}'"; } $query .= "\nAND plagesop.date BETWEEN '{$debut}' AND '{$fin}'\n GROUP BY operations.plageop_id HAVING total > 0 ORDER BY orderitem"; $result = $ds->loadlist($query); $result_hors_plage = array(); if ($hors_plage) { $query_hors_plage = "SELECT SUM(TIME_TO_SEC(affectation_personnel.fin) - TIME_TO_SEC(affectation_personnel.debut)) as total,\n DATE_FORMAT(operations.date, '{$date_format}') AS {$type_duree_fr},\n DATE_FORMAT(operations.date, '{$order_key}') AS orderitem\n FROM operations\n LEFT JOIN users_mediboard ON operations.chir_id = users_mediboard.user_id\n LEFT JOIN affectation_personnel ON operations.operation_id = affectation_personnel.object_id "; if ($type_hospi) { $query_hors_plage .= "LEFT JOIN sejour ON sejour.sejour_id = operations.sejour_id "; } $query_hors_plage .= "WHERE affectation_personnel.debut < affectation_personnel.fin\n AND operations.date IS NOT NULL\n AND operations.plageop_id IS NULL\n AND affectation_personnel.debut IS NOT NULL\n AND affectation_personnel.fin IS NOT NULL\n AND affectation_personnel.object_class = 'COperation'\n AND operations.salle_id " . CSQLDataSource::prepareIn(array_keys($salles)); if ($type_hospi) { $query_hors_plage .= "\nAND sejour.type = '{$type_hospi}'"; } if ($prat_id) { $query_hors_plage .= "\nAND operations.chir_id = '{$prat_id}'"; } if ($discipline_id) { $query_hors_plage .= "\nAND users_mediboard.discipline_id = '{$discipline_id}'"; } if ($codeCCAM) { $query_hors_plage .= "\nAND operations.codes_ccam LIKE '%{$codeCCAM}%'"; } $query_hors_plage .= "\nAND operations.date BETWEEN '{$debut}' AND '{$fin}'\n GROUP BY {$type_duree_fr} HAVING total > 0 ORDER BY orderitem"; $result_hors_plage = $ds->loadlist($query_hors_plage); } $calcul_temp = array(); foreach ($result as $r) { if (!isset($calcul_temp[$r[$type_duree_fr]])) { $calcul_temp[$r[$type_duree_fr]] = 0; } $calcul_temp[$r[$type_duree_fr]] += $r['total']; } foreach ($ticks as $i => $tick) { $f = true; foreach ($calcul_temp as $key => $r) { if ($tick[1] == $key) { if ($hors_plage) { foreach ($result_hors_plage as &$_r_h) { if ($tick[1] == $_r_h[$type_duree_fr]) { $r += $_r_h["total"]; unset($_r_h); break; } } } $serieTot['data'][] = array($i, $r / (60 * 60)); $totalTot += $r / (60 * 60); $f = false; } } if ($f) { $serieTot["data"][] = array(count($serieTot["data"]), 0); } } $seriesTot[] = $serieTot; // Second serie : Ouverture de salle $serieTot = array('data' => array(), 'label' => utf8_encode("Ouverture de salle")); $query = "SELECT MAX(TIME_TO_SEC(operations.sortie_salle)) - MIN(TIME_TO_SEC(operations.entree_salle)) as total,\n DATE_FORMAT(plagesop.date, '{$date_format}') AS {$type_duree_fr},\n DATE_FORMAT(plagesop.date, '{$order_key}') AS orderitem\n FROM plagesop\n LEFT JOIN operations ON plagesop.plageop_id = operations.plageop_id\n LEFT JOIN users_mediboard ON plagesop.chir_id = users_mediboard.user_id "; if ($type_hospi) { $query .= "LEFT JOIN sejour ON sejour.sejour_id = operations.sejour_id "; } $query .= "WHERE operations.entree_salle < operations.sortie_salle\n AND plagesop.salle_id " . CSQLDataSource::prepareIn(array_keys($salles)); if ($codeCCAM) { $query .= "\nAND operations.codes_ccam LIKE '%{$codeCCAM}%'"; } if ($type_hospi) { $query .= "\nAND sejour.type = '{$type_hospi}'"; } if ($prat_id) { $query .= "\nAND plagesop.chir_id = '{$prat_id}'"; } if ($discipline_id) { $query .= "\nAND users_mediboard.discipline_id = '{$discipline_id}'"; } $query .= "\nAND plagesop.date BETWEEN '{$debut}' AND '{$fin}'\n GROUP BY operations.plageop_id ORDER BY orderitem"; $result = $ds->loadlist($query); $calcul_temp = array(); foreach ($result as $r) { if (!isset($calcul_temp[$r[$type_duree_fr]])) { $calcul_temp[$r[$type_duree_fr]] = 0; } $calcul_temp[$r[$type_duree_fr]] += $r['total']; } foreach ($ticks as $i => $tick) { $f = true; foreach ($calcul_temp as $key => $r) { if ($tick[1] == $key) { $serieTot['data'][] = array($i, $r / (60 * 60)); $totalTot += $r / (60 * 60); $f = false; } } if ($f) { $serieTot["data"][] = array(count($serieTot["data"]), 0); } } $seriesTot[] = $serieTot; // Third serie : reservé $serieTot = array('data' => array(), 'label' => utf8_encode("Vacations attribuées")); $query = "SELECT SUM(TIME_TO_SEC(plagesop.fin) - TIME_TO_SEC(plagesop.debut)) AS total,\n DATE_FORMAT(plagesop.date, '{$date_format}') AS {$type_duree_fr},\n DATE_FORMAT(plagesop.date, '{$order_key}') AS orderitem\n FROM plagesop\n LEFT JOIN users_mediboard ON plagesop.chir_id = users_mediboard.user_id "; if ($type_hospi || $codeCCAM) { $query .= "LEFT JOIN operations ON operations.plageop_id = plagesop.plageop_id\n LEFT JOIN sejour ON sejour.sejour_id = operations.sejour_id "; } $query .= "WHERE plagesop.salle_id " . CSQLDataSource::prepareIn(array_keys($salles)); if ($codeCCAM) { $query .= "\nAND operations.codes_ccam LIKE '%{$codeCCAM}%'"; } if ($type_hospi) { $query .= "\nAND sejour.type = '{$type_hospi}'"; } if ($prat_id) { $query .= "\nAND plagesop.chir_id = '{$prat_id}'"; } if ($discipline_id) { $query .= "\nAND users_mediboard.discipline_id = '{$discipline_id}'"; } $query .= "\nAND plagesop.date BETWEEN '{$debut}' AND '{$fin}'\n GROUP BY {$type_duree_fr} ORDER BY orderitem"; $result = $ds->loadList($query); foreach ($ticks as $i => $tick) { $f = true; foreach ($result as $r) { if ($tick[1] == $r[$type_duree_fr]) { $serieTot['data'][] = array($i, $r["total"] / (60 * 60)); $totalTot += $r["total"] / (60 * 60); $f = false; } } if ($f) { $serieTot["data"][] = array(count($serieTot["data"]), 0); } } $seriesTot[] = $serieTot; // Set up the title for the graph $subtitle = ""; if ($prat_id) { $subtitle .= " - Dr {$prat->_view}"; } if ($discipline_id) { $subtitle .= " - {$discipline->_view}"; } if ($salle_id) { $subtitle .= " - {$salle->nom}"; } if ($bloc_id) { $subtitle .= " - {$bloc->nom}"; } if ($codeCCAM) { $subtitle .= " - CCAM : {$codeCCAM}"; } if ($type_hospi) { $subtitle .= " - " . CAppUI::tr("CSejour.type.{$type_hospi}"); } $optionsTot = CFlotrGraph::merge("lines", array('title' => utf8_encode("Utilisation des ressources"), 'subtitle' => utf8_encode("total estimé {$subtitle}"), 'xaxis' => array('ticks' => $ticks), 'grid' => array('verticalLines' => true))); if ($totalTot == 0) { $optionsTot['yaxis']['max'] = 1; } return array('series' => $seriesTot, 'options' => $optionsTot); }
$results["count_erreur"]++; continue; } elseif ($count > 1) { $mediusers = $mediuser->loadList($where, null, null, null, $ljoin); $list_view = implode(", ", CMbArray::pluck($mediusers, "_view")); CAppUI::stepAjax("Plusieurs utilisateurs correspondent à cette recherche (ADELI = {$ADELI}): %s", UI_MSG_WARNING, $list_view); $results["count_erreur"]++; continue; } $mediuser->loadObject($where, null, null, $ljoin); // Traitement de la date/heure début, et durée de l'opération $date_op = CMbDT::date($date_debut); $time_op = CMbDT::time($date_debut); $temps_op = CMbDT::subTime(CMbDT::time($date_debut), CMbDT::time($date_fin)); // Recherche de la salle $salle = new CSalle(); $where = array("nom" => "= '{$nom_salle}'", "bloc_id" => CSQLDataSource::prepareIn(array_keys($blocs))); if (!$salle->loadObject($where)) { CAppUI::stepAjax("La salle '{$nom_salle}' n'a pas été retrouvée dans Mediboard", UI_MSG_WARNING); $results["count_erreur"]++; continue; } // Recherche d'une éventuelle PlageOp $plageOp = new CPlageOp(); $plageOp->chir_id = $mediuser->_id; $plageOp->salle_id = $salle->_id; $plageOp->date = $date_op; foreach ($plageOp->loadMatchingList() as $_plage) { // Si notre intervention est dans la plage Mediboard if ($_plage->debut <= $time_op && $temps_op <= $_plage->fin) { $plageOp = $_plage;
/** * Récuparation du graphique du nombre d'interventions annulées le jour même * * @param string $date_min Date de début * @param string $date_max Date de fin * @param int $prat_id Filtre du praticien * @param int $salle_id Filtre de la salle * @param int $bloc_id Filtre du bloc * @param int $func_id Filtre sur un cabinet * @param int $discipline_id Filtre sur une discipline * @param string $code_ccam Code CCAM * @param string $type_sejour Type de séjour * @param bool $hors_plage Prise en charge des hors plage * * @return array */ function graphWorkflowOperation($date_min = null, $date_max = null, $prat_id = null, $salle_id = null, $bloc_id = null, $func_id = null, $discipline_id = null, $code_ccam = null, $type_sejour = null, $hors_plage = false) { $miner = new COperationWorkflow(); $miner->warnUsage(); if (!$date_min) { $date_min = CMbDT::date("-1 YEAR"); } if (!$date_max) { $date_max = CMbDT::date(); } $date_min = CMbDT::format($date_min, "%Y-%m-01"); $date_max = CMbDT::transform("+1 MONTH", $date_max, "%Y-%m-01"); // Series declarations $labels = array("op_count" => utf8_encode("Nombre d'interventions"), "creation" => utf8_encode("Planification intervention"), "consult_chir" => utf8_encode("Consultation chirurgicale"), "consult_anesth" => utf8_encode("Consultation anesthésiste"), "visite_anesth" => utf8_encode("Visite anesthésiste"), "creation_consult_chir" => utf8_encode("RDV de consultation chirurgicale"), "creation_consult_anesth" => utf8_encode("RDV de consultation anesthésiste")); $salles = CSalle::getSallesStats($salle_id, $bloc_id); $query = new CRequest(); $query->addColumn("DATE_FORMAT(date_operation, '%Y-%m')", "mois"); $query->addColumn("COUNT(operations.operation_id)", "op_count"); // Prévention des données négatives aberrantes $tolerance_in_days = 0; $columns = array("creation", "consult_chir", "consult_anesth", "visite_anesth", "creation_consult_chir", "creation_consult_anesth"); foreach ($columns as $_column) { $field = "date_{$_column}"; $diff = "DATEDIFF(ow.date_operation, ow.{$field})"; $query->addColumn("AVG (IF({$diff} > {$tolerance_in_days}, {$diff}, NULL))", $_column); $query->addColumn("COUNT(IF({$diff} > {$tolerance_in_days}, {$diff}, NULL))", "count_{$_column}"); } $query->addTable("operations"); $query->addLJoin("operation_workflow AS ow ON ow.operation_id = operations.operation_id"); $query->addWhereClause("date_operation", "BETWEEN '{$date_min}' AND '{$date_max}'"); $query->addWhereClause("salle_id", CSQLDataSource::prepareIn(array_keys($salles))); $query->addGroup("mois"); $query->addOrder("mois"); $subtitle = ""; // Filtre sur hors plage if (!$hors_plage) { $query->addWhereClause("plageop_id", "IS NOT NULL"); $subtitle .= " - sans hors plage"; } // Filtre sur le salle (pas besoin de clause supplémentaire) if ($salle_id) { $salle = reset($salles); $subtitle .= " - {$salle->_view}"; } // Filtre sur le praticien if ($prat_id) { $query->addWhereClause("operations.chir_id", "= '{$prat_id}'"); $prat = new CMediusers(); $prat->load($prat_id); $subtitle .= " - Dr {$prat->_view}"; } // Filtre sur le cabinet if ($func_id) { $query->addLJoinClause("users_mediboard", "operations.chir_id = users_mediboard.user_id"); $query->addWhereClause("users_mediboard.function_id", "= '{$func_id}'"); $func = new CFunctions(); $func->load($func_id); $subtitle .= " - {$func->_view}"; } // Filtre sur la discipline if ($discipline_id) { $discipline = new CDiscipline(); $discipline->load($discipline_id); $query->addLJoinClause("users_mediboard", "operations.chir_id = users_mediboard.user_id"); $query->addWhereClause("users_mediboard.discipline_id", "= '{$discipline_id}'"); $subtitle .= " - {$discipline->_view}"; } // Filtre sur les codes CCAM if ($code_ccam) { $query->addWhereClause("operations.codes_ccam", "LIKE '%{$code_ccam}%'"); $subtitle .= " - CCAM: {$code_ccam}"; } // Filtre sur le type d'hospitalisation if ($type_sejour) { $query->addLJoinClause("sejour", "sejour.sejour_id = operations.sejour_id"); $query->addWhereClause("sejour.type", "= '{$type_sejour}'"); $subtitle .= " - " . CAppUI::tr("CSejour.type.{$type_sejour}"); } // Query result $ds = CSQLDataSource::get("std"); $all_values = $ds->loadHashAssoc($query->makeSelect()); // Build horizontal ticks $months = array(); $ticks = array(); for ($_date = $date_min; $_date < $date_max; $_date = CMbDT::date("+1 MONTH", $_date)) { $count_ticks = count($ticks); $ticks[] = array($count_ticks, CMbDT::format($_date, "%m/%Y")); $months[CMbDT::format($_date, "%Y-%m")] = $count_ticks; } // Series building $series = array(); foreach ($labels as $_label_name => $_label_title) { $series[$_label_name] = array("label" => $_label_title, "data" => array(), "yaxis" => 2); } $series["op_count"]["markers"]["show"] = true; $series["op_count"]["yaxis"] = 1; $series["op_count"]["lines"]["show"] = false; $series["op_count"]["points"]["show"] = false; $series["op_count"]["bars"]["show"] = true; $series["op_count"]["bars"]["fillColor"] = "#ccc"; $series["op_count"]["color"] = "#888"; $total = 0; $counts = array(); foreach ($months as $_month => $_tick) { $values = isset($all_values[$_month]) ? $all_values[$_month] : array_fill_keys(array_keys($labels), null); unset($values["mois"]); $_counts = array(); foreach ($values as $_name => $_value) { $parts = explode("_", $_name, 2); if ($parts[0] == "count") { $_counts[$labels[$parts[1]]] = $_value; continue; } $series[$_name]["data"][] = array($_tick, $_value); } $total += $values["op_count"]; $counts[] = $_counts; } // Set up the title for the graph $title = "Anticipation de la programmation des interventions"; $subtitle = "{$total} interventions" . $subtitle; $options = array('title' => utf8_encode($title), 'subtitle' => utf8_encode($subtitle), 'xaxis' => array('labelsAngle' => 45, 'ticks' => $ticks), 'yaxis' => array('autoscaleMargin' => 1, "title" => utf8_encode("Quantité d'interventions"), "titleAngle" => 90), 'y2axis' => array('autoscaleMargin' => 1, "title" => utf8_encode("Anticipation moyenne en jours vs la date d'intervention"), "titleAngle" => 90), "points" => array("show" => true, "radius" => 2, "lineWidth" => 1), "lines" => array("show" => true, "lineWidth" => 1), 'bars' => array('show' => false, 'stacked' => false, 'barWidth' => 0.8), 'HtmlText' => false, 'legend' => array('show' => true, 'position' => 'nw'), 'grid' => array('verticalLines' => false), 'mouse' => array("track" => true, "position" => "ne", "relative" => true, "sensibility" => 2, "trackDecimals" => 3, "trackFormatter" => utf8_encode("(\r\n function(obj) {\r\n var label = obj.series.label;\r\n var total = obj.nearest.allSeries[0].data[obj.index][1];\r\n var date = graph.options.xaxis.ticks[obj.index][1];\r\n\r\n // Barre des nombres d'interventions\r\n if (obj.series.bars.show) {\r\n var format = '%s <br />%s en %s';\r\n return printf(format, label, total, date);\r\n }\r\n\r\n // Courbes d'anticipation\r\n var count = graph.options.counts[obj.index][label];\r\n var value = obj.series.data[obj.index][1];\r\n var percent = Math.round(100*count/total) + '%';\r\n var format = '%s <br />%d jours en %s<br />%s des interventions concernées (%s/%s)';\r\n return printf(format, label, value, date, percent, count, total);\r\n }\r\n )")), 'counts' => $counts, 'spreadsheet' => array('show' => true, 'csvFileSeparator' => ';', 'decimalSeparator' => ',', 'tabGraphLabel' => utf8_encode('Graphique'), 'tabDataLabel' => utf8_encode('Données'), 'toolbarDownload' => utf8_encode('Fichier CSV'), 'toolbarSelectAll' => utf8_encode('Sélectionner tout le tableau'))); return array('series' => array_values($series), 'options' => $options); }
// Récuperation de la salle à afficher par défaut $default_salle_id = ""; $default_salles_id = json_decode($default_salles_id); if (isset($default_salles_id->{"g{$group_id}"})) { $default_salle_id = reset(explode("|", $default_salles_id->{"g{$group_id}"})); } if (!$salle_id) { $salle_id = $default_salle_id; } // Chargement des praticiens $mediuser = new CMediusers(); $listAnesths = $mediuser->loadAnesthesistes(PERM_READ); // Selection des salles $listBlocs = CGroups::loadCurrent()->loadBlocs(PERM_READ); // Selection des plages opératoires de la journée $salle = new CSalle(); if ($salle->load($salle_id)) { $salle->loadRefsForDay($date, true); } if ($hide_finished == 1 && $salle->_ref_plages) { foreach ($salle->_ref_plages as $_plage) { foreach ($_plage->_ref_operations as $_key => $_op) { if ($_op->sortie_salle) { unset($_plage->_ref_operations[$_key]); } } foreach ($_plage->_unordered_operations as $_key => $_op) { if ($_op->sortie_salle) { unset($_plage->_unordered_operations[$_key]); } }
$bloc = new CBlocOperatoire(); $bloc->nom = $results[$i]["bloc"]; $bloc->group_id = CGroups::loadCurrent()->_id; $bloc->loadMatchingObject(); if (!$bloc->_id) { $msg = $bloc->store(); if ($msg) { CAppUI::setMsg($msg, UI_MSG_ERROR); $results[$i]["error"] = $msg; $i++; continue; } CAppUI::setMsg("Bloc créé", UI_MSG_OK); } // Salle $salle = new CSalle(); $salle->nom = $results[$i]["nom"]; $salle->bloc_id = $bloc->_id; $salle->loadMatchingObject(); if ($salle->_id) { $msg = "Salle existante"; CAppUI::setMsg($msg, UI_MSG_ERROR); $results[$i]["error"] = $msg; $i++; continue; } $salle->stats = 1; $salle->dh = 0; $msg = $salle->store(); if ($msg) { CAppUI::setMsg($msg, UI_MSG_ERROR);
/** * Mine or remine the first availables salles * * @param int $limit * @param string $phase * * @return array Success/failure counts report */ function mineSome($limit = 100, $phase = "mine") { $date = CMbDT::date(); $report = array("success" => 0, "failure" => 0); $salle = new CSalle(); $ds = $salle->getDS(); $min_date = self::getMinDate(); $phases = array("mine" => array("mined", "remined", "postmined"), "remine" => array("remined", "postmined"), "postmine" => array("postmined")); $ref_dates = array("mine" => CMbDT::date(self::$mine_delay), "remine" => CMbDT::date(self::$remine_delay), "postmine" => CMbDT::date(self::$postmine_delay)); $sql = "SELECT sallesbloc.salle_id, MAX(date) as date FROM sallesbloc\n LEFT JOIN salle_daily_occupation ON salle_daily_occupation.salle_id = sallesbloc.salle_id\n WHERE (salle_daily_occupation.status " . $ds->prepareIn($phases[$phase]) . " OR salle_daily_occupation.status IS NULL)\n GROUP BY salle_id\n "; if (!($result = $ds->loadList($sql))) { return; } // cleanup foreach ($result as &$_result) { if (!$_result["date"]) { $_result["date"] = $min_date; } } // iteration $i = $limit; while ($i--) { // sort array_multisort(CMbArray::pluck($result, "date"), SORT_ASC, $result); // first $result[0]["date"] = CMbDT::date("+1 DAY", $result[0]["date"]); if ($result[0]["date"] > $ref_dates[$phase]) { break; } $this->mine($result[0]["salle_id"], $result[0]["date"]); if ($msg = $this->store()) { $report["failure"]++; } else { $report["success"]++; } } return $report; }
/** * Récupération du graphique du nombre de patient par jour et par salle * au bloc opératoire * * @param string $debut Date de début * @param string $fin Date de fin * @param int $prat_id Identifiant du praticien * @param int $salle_id Identifiant de la salle * @param int $bloc_id Identifiant du bloc * @param int $discipline_id Identifiant de la discipline * @param string $codeCCAM Code CCAM * @param bool $hors_plage Prise en compte des hors plage * * @return array */ function graphPatJourSalle($debut = null, $fin = null, $prat_id = 0, $salle_id = 0, $bloc_id = 0, $func_id = 0, $discipline_id = null, $codeCCAM = '', $hors_plage = true) { if (!$debut) { $debut = CMbDT::date("-1 YEAR"); } if (!$fin) { $fin = CMbDT::date(); } $prat = new CMediusers(); $prat->load($prat_id); $salle = new CSalle(); $salle->load($salle_id); $discipline = new CDiscipline(); $discipline->load($discipline_id); $ticks = array(); for ($i = $debut; $i <= $fin; $i = CMbDT::date("+1 MONTH", $i)) { $ticks[] = array(count($ticks), CMbDT::transform("+0 DAY", $i, "%m/%Y")); } // Gestion du hors plage $where_hors_plage = !$hors_plage ? "AND operations.plageop_id IS NOT NULL" : ""; //$salles = CSalle::getSallesStats($salle_id, $bloc_id); $series = array(); $serie = array('data' => array()); $query = "SELECT COUNT(operations.operation_id) AS total,\r\n COUNT(DISTINCT(operations.date)) AS nb_days,\r\n COUNT(DISTINCT(sallesbloc.salle_id)) AS nb_salles,\r\n DATE_FORMAT(operations.date, '%m/%Y') AS mois,\r\n DATE_FORMAT(operations.date, '%Y-%m-01') AS orderitem\r\n FROM operations\r\n LEFT JOIN sejour ON operations.sejour_id = sejour.sejour_id\r\n LEFT JOIN sallesbloc ON operations.salle_id = sallesbloc.salle_id\r\n LEFT JOIN plagesop ON operations.plageop_id = plagesop.plageop_id\r\n LEFT JOIN users_mediboard ON operations.chir_id = users_mediboard.user_id\r\n WHERE operations.annulee = '0'\r\n AND operations.date BETWEEN '{$debut}' AND '{$fin}'\r\n {$where_hors_plage}\r\n AND sejour.group_id = '" . CGroups::loadCurrent()->_id . "'\r\n AND sallesbloc.stats = '1'"; if ($prat_id) { $query .= "\nAND operations.chir_id = '{$prat_id}'"; } if ($discipline_id) { $query .= "\nAND users_mediboard.discipline_id = '{$discipline_id}'"; } if ($codeCCAM) { $query .= "\nAND operations.codes_ccam LIKE '%{$codeCCAM}%'"; } if ($salle_id) { $query .= "\nAND sallesbloc.salle_id = '{$salle_id}'"; } elseif ($bloc_id) { $query .= "\nAND sallesbloc.bloc_id = '{$bloc_id}'"; } $query .= "\nGROUP BY mois ORDER BY orderitem"; $result = $prat->_spec->ds->loadlist($query); foreach ($ticks as $i => $tick) { $f = true; foreach ($result as $r) { if ($tick[1] == $r["mois"]) { $res = $r["total"] / ($r["nb_days"] * $r["nb_salles"]); //$nbjours = CMbDT::workDaysInMonth($r["orderitem"]); //$serie['data'][] = array($i, $r["total"]/($nbjours*count($salles))); $serie['data'][] = array($i, $res); //$serie['data'][] = array($i, $r["total"]/($r["nb_days"]*count($salles))); $f = false; } } if ($f) { $serie["data"][] = array(count($serie["data"]), 0); } } $series[] = $serie; // Set up the title for the graph $title = "Patients / jour / salle active dans le mois"; $subtitle = "Uniquement les jours d'activité"; if ($prat_id) { $subtitle .= " - Dr {$prat->_view}"; } if ($discipline_id) { $subtitle .= " - {$discipline->_view}"; } if ($salle_id) { $subtitle .= " - {$salle->nom}"; } if ($codeCCAM) { $subtitle .= " - CCAM : {$codeCCAM}"; } $options = array('title' => utf8_encode($title), 'subtitle' => utf8_encode($subtitle), 'xaxis' => array('labelsAngle' => 45, 'ticks' => $ticks), 'yaxis' => array('autoscaleMargin' => 1, 'min' => 0), 'lines' => array('show' => true, 'filled' => true, 'fillColor' => '#999'), 'markers' => array('show' => true), 'points' => array('show' => true), 'HtmlText' => false, 'legend' => array('show' => true, 'position' => 'nw'), 'mouse' => array('track' => true, 'relative' => true, 'position' => 'ne'), 'spreadsheet' => array('show' => true, 'csvFileSeparator' => ';', 'decimalSeparator' => ',', 'tabGraphLabel' => utf8_encode('Graphique'), 'tabDataLabel' => utf8_encode('Données'), 'toolbarDownload' => utf8_encode('Fichier CSV'), 'toolbarSelectAll' => utf8_encode('Sélectionner tout le tableau'))); return array('series' => $series, 'options' => $options); }
} //gathering $operation_1 = new COperation(); $operation_1->salle_id = $salle_1; $operation_1->date = $date; /** @var COperation[] $operations_1 */ $operations_1 = $operation_1->loadMatchingList(); $operation_2 = new COperation(); $operation_2->salle_id = $salle_2; $operation_2->date = $date; /** @var COperation[] $operations_2 */ $operations_2 = $operation_2->loadMatchingList(); // switching foreach ($operations_1 as $_op_1) { $_op_1->salle_id = $salle_2; if ($msg = $_op_1->store()) { CAppUI::stepAjax($msg, UI_MSG_ERROR); } } foreach ($operations_2 as $_op_2) { $_op_2->salle_id = $salle_1; if ($msg = $_op_2->store()) { CAppUI::stepAjax($msg, UI_MSG_ERROR); } } //succeed $salle_n1 = new CSalle(); $salle_n1->load($salle_1); $salle_n2 = new CSalle(); $salle_n2->load($salle_2); CAppUI::stepAjax("dPplanningOp-msg-succeed_switchin_salle1%s_salle2%s", UI_MSG_OK, $salle_n1->nom, $salle_n2->nom);
* @package Mediboard * @subpackage bloodSalvage * @author SARL OpenXtrem <*****@*****.**> * @license GNU General Public License, see http://www.gnu.org/licenses/gpl.html * @version $Revision:$ */ CCanDo::checkRead(); $date = CValue::getOrSession("date", CMbDT::date()); $operation_id = CValue::getOrSession("operation_id"); $salle_id = CValue::getOrSession("salle"); // Chargement des praticiens $listAnesths = new CMediusers(); $listAnesths = $listAnesths->loadAnesthesistes(PERM_READ); // Liste des blocs $listBlocs = new CBlocOperatoire(); $listBlocs = $listBlocs->loadGroupList(); // Selection des plages opératoires de la journée $salle = new CSalle(); if ($salle->load($salle_id)) { $salle->loadRefsForDay($date); } // Création du template $smarty = new CSmartyDP(); $smarty->assign("vueReduite", false); $smarty->assign("salle", $salle); $smarty->assign("praticien_id", null); $smarty->assign("listBlocs", $listBlocs); $smarty->assign("listAnesths", $listAnesths); $smarty->assign("date", $date); $smarty->assign("operation_id", $operation_id); $smarty->display("inc_liste_plages.tpl");
} $listBlocs = array(); if (CAppUI::conf("dPsalleOp COperation modif_salle")) { $listBlocs = $group->loadBlocs(PERM_READ, null, "nom"); // Chargement de la liste des salles de chaque bloc foreach ($listBlocs as $_bloc) { $_bloc->loadRefsSalles(); } } // Chargement des Anesthésistes $anesth = new CMediusers(); $listAnesths = $anesth->loadAnesthesistes(PERM_READ); // Chargement des Chirurgiens $chir = new CMediusers(); $listChirs = $chir->loadPraticiens(PERM_READ); $salle = new CSalle(); $where = array("bloc_id" => "='{$bloc->_id}'"); $bloc->_ref_salles = $salle->loadListWithPerms(PERM_READ, $where, "nom"); $total_salles = count($bloc->_ref_salles); $page_size = CAppUI::conf("dPbloc mode_presentation salles_count", $group); $page_count = null; $current_page = null; if ($page) { $page_count = ceil($total_salles / $page_size); $current_page = ($page - 1) % $page_count; $slice = $current_page * $page_size; $bloc->_ref_salles = array_slice($bloc->_ref_salles, $slice, $page_size, true); } $systeme_materiel_expert = CAppUI::conf("dPbloc CPlageOp systeme_materiel") == "expert"; foreach ($bloc->_ref_salles as &$salle) { /** @var CSalle $salle */
* @package Mediboard * @author SARL OpenXtrem <*****@*****.**> * @license GNU General Public License, see http://www.gnu.org/licenses/gpl.html * @version SVN: $Id: vw_idx_blocs.php 19148 2013-05-15 12:41:42Z rhum1 $ * @link http://www.mediboard.org */ CCanDo::checkAdmin(); $bloc_id = CValue::getOrSession("bloc_id"); $salle_id = CValue::getOrSession("salle_id"); $poste_sspi_id = CValue::getOrSession("poste_sspi_id"); // Récupération des blocs de l'etablissement $blocs_list = CGroups::loadCurrent()->loadBlocs(PERM_EDIT); // Récupération des postes de l'établissement $postes_list = CGroups::loadCurrent()->loadPostes(PERM_EDIT); // Récupération du bloc à à ajouter / modifier $bloc = new CBlocOperatoire(); $bloc->load($bloc_id); // Récupération de la salle à ajouter / modifier $salle = new CSalle(); $salle->load($salle_id); // Récupération du poste à ajouter / modifier $poste = new CPosteSSPI(); $poste->load($poste_sspi_id); // Création du template $smarty = new CSmartyDP(); $smarty->assign("blocs_list", $blocs_list); $smarty->assign("postes_list", $postes_list); $smarty->assign("bloc", $bloc); $smarty->assign("salle", $salle); $smarty->assign("poste", $poste); $smarty->display("vw_idx_blocs.tpl");
/** * Récupération de la salle * * @param DOMNode $node Node * @param CSejour $sejour Séjour * * @return string */ function getSalle(DOMNode $node, CSejour $sejour) { $xpath = new CHPrimXPath($node->ownerDocument); $name = $xpath->queryTextNode("hprim:uniteFonctionnelle/hprim:code", $node); // Recherche de la salle $salle = new CSalle(); $where = array("sallesbloc.nom" => $salle->_spec->ds->prepare("=%", $name), "bloc_operatoire.group_id" => "= '{$sejour->group_id}'"); $ljoin = array("bloc_operatoire" => "bloc_operatoire.bloc_operatoire_id = sallesbloc.bloc_id"); $salle->loadObject($where, null, null, $ljoin); return $salle; }
* 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::read(); $listBlocs = CGroups::loadCurrent()->loadBlocs(); $listSalles = array(); foreach ($listBlocs as $_bloc) { $listSalles = $listSalles + $_bloc->loadRefsSalles(); } $salle = new CSalle(); $salle->load(CValue::get("salle_id"), reset($listSalles)->_id); $salle->loadRefBloc(); $date = CValue::get("date", CMbDT::date()); // Liste des jours $listDays = array(); for ($i = 0; $i < 19 * 7; $i += 7) { $dateArr = CMbDT::date("+{$i} day", $date); $listDays[$dateArr] = $dateArr; } // Création du tableau de visualisation $affichages = array(); foreach ($listDays as $keyDate => $valDate) { foreach (CPlageOp::$hours as $keyHours => $valHours) { foreach (CPlageOp::$minutes as $keyMins => $valMins) { // Initialisation du tableau
$bloc_id = CValue::getOrSession("bloc_id"); $type = CValue::get("type", "prevue"); CView::enforceSlave(); if ($mode == "html") { $miner = new COperationWorkflow(); $miner->warnUsage(); } $blocs = CGroups::loadCurrent()->loadBlocs(); $bloc = new CBlocOperatoire(); $bloc->load($bloc_id); $where = array(); $where["stats"] = "= '1'"; if ($bloc->_id) { $where["bloc_id"] = "= '{$bloc->_id}'"; } $salle = new CSalle(); $salles = $salle->loadGroupList($where); // Récupération des plages $where = array("date" => "BETWEEN '{$deblist} 00:00:00' AND '{$finlist} 23:59:59'", "salle_id" => CSQLDataSource::prepareIn(array_keys($salles))); /** @var CPlageOp[] $plages */ $plages = array(); /** @var COperation[] $operations */ $operations = array(); /** @var int $nb_interv */ $nb_interv = 1; if ($type == "prevue") { $plage = new CPlageOp(); $order = "date, salle_id, debut, chir_id"; $plages = $plage->loadList($where, $order); CStoredObject::massLoadFwdRef($plages, "chir_id"); CStoredObject::massLoadFwdRef($plages, "spec_id");
* $Id: ajax_vw_materiel.php 27325 2015-02-26 09:30:02Z aurelie17 $ * * @package Mediboard * @subpackage dPbloc * @author SARL OpenXtrem <*****@*****.**> * @license GNU General Public License, see http://www.gnu.org/licenses/gpl.html * @version $Revision: 27325 $ */ CCanDo::checkEdit(); $bloc_id = CValue::getOrSession("bloc_id"); $date_min = CValue::getOrSession("_date_min", CMbDT::date("-7 day")); $date_max = CValue::getOrSession("_date_max", CMbDT::date()); $praticien_id = CValue::getOrSession("praticien_id"); $function_id = CValue::getOrSession("function_id"); // Récupération des salles $salle = new CSalle(); $where["bloc_id"] = "= '{$bloc_id}'"; $salles = $salle->loadListWithPerms(PERM_READ, $where); // Récupération des opérations $ljoin = array(); $ljoin["plagesop"] = "operations.plageop_id = plagesop.plageop_id"; $where = array(); $in_salles = CSQLDataSource::prepareIn(array_keys($salles)); $where[] = "plagesop.salle_id {$in_salles} OR operations.salle_id {$in_salles}"; $where["materiel"] = "!= ''"; $where[] = " operations.date BETWEEN '{$date_min}' AND '{$date_max}'"; if ($praticien_id) { $where["operations.chir_id"] = " = '{$praticien_id}'"; } elseif ($function_id) { $mediuser = new CMediusers(); $users = $mediuser->loadProfessionnelDeSante(PERM_READ, $function_id);
* @version $Revision$ */ CCanDo::checkRead(); $type_modif = CValue::getOrSession("type_modif", "annule"); $date_max = CValue::getOrSession("_date_max", CMbDT::date()); $date_min = CValue::get("_date_min", $date_max); $prat_id = CValue::get("prat_id"); $salle_id = CValue::get("salle_id"); $bloc_id = CValue::get("bloc_id"); $code_ccam = CValue::get("code_ccam"); CView::enforceSlave(); $prat = new CMediusers(); $prat->load($prat_id); $date_min = CMbDT::date("first day of -0 months", $date_min); $date_max = CMbDT::date("last day of +0 months", $date_max); $salles = CSalle::getSallesStats($salle_id, $bloc_id); $miner = new COperationWorkflow(); $miner->warnUsage(); $operation = new COperation(); $ljoin["operation_workflow"] = "operation_workflow.operation_id = operations.operation_id"; $where["date_operation"] = "BETWEEN '{$date_min}' AND '{$date_max}'"; $where["salle_id"] = CSQLDataSource::prepareIn(array_keys($salles)); $where[] = $type_modif == "annule" ? "DATE(date_operation) = DATE(date_cancellation)" : "DATE(date_operation) = DATE(date_creation)"; // Filtre sur le praticien if ($prat_id) { $where["operations.chir_id"] = "= '{$prat_id}'"; } // Filtre sur les codes CCAM if ($code_ccam) { $where["operations.codes_ccam"] = "LIKE '%{$code_ccam}%'"; }
* * @package Mediboard * @subpackage dPstats * @author SARL OpenXtrem <*****@*****.**> * @license GNU General Public License, see http://www.gnu.org/licenses/gpl.html * @version $Revision$ */ CAppUI::requireLibraryFile("jpgraph/src/mbjpgraph"); CAppUI::requireLibraryFile("jpgraph/src/jpgraph_bar"); $debut = CValue::get("debut", CMbDT::date("-1 YEAR")); $fin = CValue::get("fin", CMbDT::date()); $prat_id = CValue::get("prat_id", 0); $service_id = CValue::get("service_id", 0); $pratSel = new CMediusers(); $pratSel->load($prat_id); $service = new CSalle(); $service->load($service_id); $datax = array(); for ($i = $debut; $i <= $fin; $i = CMbDT::date("+1 MONTH", $i)) { $datax[] = CMbDT::transform("+0 DAY", $i, "%m/%Y"); } $sql = "SELECT * FROM service WHERE"; if ($service_id) { $sql .= "\nAND id = '{$service_id}'"; } $ds = CSQLDataSource::get("std"); $services = $ds->loadlist($sql); $opbysalle = array(); foreach ($services as $service) { $id = $service["service_id"]; $opbysalle[$id]["nom"] = $salle["nom"];
* $Id$ * * @package Mediboard * @subpackage SalleOp * @author SARL OpenXtrem <*****@*****.**> * @license GNU General Public License, see http://www.gnu.org/licenses/gpl.html * @version $Revision$ */ CCanDo::checkRead(); // Ne pas supprimer, utilisé pour mettre le praticien en session $praticien_id = CValue::getOrSession("praticien_id"); $hide_finished = CValue::getOrSession("hide_finished", 0); $salle_id = CValue::getOrSession("salle"); $operation_id = CValue::getOrSession("operation_id"); $date = CValue::getOrSession("date", CMbDT::date()); // Récupération de l'utilisateur courant $currUser = CMediusers::get(); $currUser->isAnesth(); $currUser->isPraticien(); // Sauvegarde en session du bloc (pour preselectionner dans la salle de reveil) $salle = new CSalle(); $salle->load($salle_id); CValue::setSession("bloc_id", $salle->bloc_id); // Création du template $smarty = new CSmartyDP(); $smarty->assign("operation_id", $operation_id); $smarty->assign("salle", $salle_id); $smarty->assign("currUser", $currUser); $smarty->assign("date", $date); $smarty->assign("hide_finished", $hide_finished); $smarty->display("vw_operations.tpl");