$prats = $user->loadPraticiens(PERM_READ);
    $where["plageconsult.chir_id"] = CSQLDataSource::prepareIn(array_keys($prats));
} else {
    $where["plageconsult.chir_id"] = "= '{$user->_id}'";
}
/* @var CConsultation[] $consultations*/
$consultation = new CConsultation();
$consultations = $consultation->loadList($where, null, null, null, $ljoin);
$totals["consultations"] = count($consultations);
/** @var CPlageConsult[] $plages */
$plages = CStoredObject::massLoadFwdRef($consultations, "plageconsult_id");
CStoredObject::massLoadFwdRef($consultations, "sejour_id");
CStoredObject::massLoadFwdRef($consultations, "patient_id");
// Pré-chargement des users
$where = array("user_id" => CSQLDataSource::prepareIn(CMbArray::pluck($plages, "chir_id")));
$user->loadList($where);
/** @var CMediusers[] $chirs */
$chirs = CStoredObject::massLoadFwdRef($plages, "chir_id");
CStoredObject::massLoadFwdRef($chirs, "function_id");
CStoredObject::massLoadBackRefs($consultations, "actes_ccam");
foreach ($consultations as $key => $_consult) {
    // Chargemement des codes CCAM
    $_consult->loadExtCodesCCAM();
    $codes_ccam = $_consult->_ext_codes_ccam;
    // Nombre d'acte cotés par le praticien et réinitialisation du count pour le cache
    $nb_actes_ccam = count($_consult->loadRefsActesCCAM());
    // Aucun acte prévu ou coté
    if (!count($codes_ccam) && !$_consult->_count_actes) {
        $_consult->loadRefSejour();
        $_consult->loadRefPraticien()->loadRefFunction();
        $_consult->loadRefPatient();
 * @author     SARL OpenXtrem <*****@*****.**>
 * @license    GNU General Public License, see http://www.gnu.org/licenses/gpl.html
 * @version    $Revision$
 */
CCanDo::checkEdit();
$sejour_id = CValue::get("sejour_id");
$operation_id = CValue::get("operation_id");
$operateur_ids = CValue::get("operateur_ids");
if (!is_array($operateur_ids)) {
    $operateur_ids = explode("-", $operateur_ids);
    CMbArray::removeValue("", $operateur_ids);
}
if (count($operateur_ids)) {
    $operateur = new CMediusers();
    $where = array("user_id" => "IN(" . implode(",", $operateur_ids) . ")");
    $operateurs = $operateur->loadList($where);
} else {
    $operateurs = array();
}
$poses = array();
if ($operation_id) {
    $interv = new COperation();
    $interv->load($operation_id);
    $poses = $interv->loadRefsPosesDispVasc(true);
} elseif ($sejour_id) {
    $sejour = new CSejour();
    $sejour->load($sejour_id);
    $poses = $sejour->loadRefsPosesDispVasc(true);
}
// Création du template
$smarty = new CSmartyDP();
示例#3
0
/**
 * $Id: httpreq_temps_prepa.php 24959 2014-09-25 10:13:26Z rhum1 $
 *
 * @package    Mediboard
 * @subpackage dPstats
 * @author     SARL OpenXtrem <*****@*****.**>
 * @license    GNU General Public License, see http://www.gnu.org/licenses/gpl.html
 * @version    $Revision: 24959 $
 */
date_default_timezone_set("UTC");
CCanDo::checkEdit();
$intervalle = CValue::get("intervalle", "none");
// Liste des Praticiens
$user = new CMediusers();
/** @var CMediusers[] $listPrats */
$listPrats = $user->loadList();
// Initialisation des variables
$preparation = array();
$result = array();
// Vide la table contenant les données
$ds = CSQLDataSource::get("std");
$ds->exec("TRUNCATE `temps_prepa`");
$ds->error();
foreach ($listPrats as $_prat) {
    //Récupération des opérations par chirurgien
    $sql = "SELECT operations.plageop_id,TIME_TO_SEC(entree_salle) AS sec_entree, " . "\nTIME_TO_SEC(sortie_salle) AS sec_sortie" . "\nFROM operations" . "\nINNER JOIN plagesop" . "\nON operations.plageop_id = plagesop.plageop_id" . "\nWHERE operations.chir_id = '{$_prat->user_id}'" . "\nAND annulee = '0'" . "\nAND entree_salle IS NOT NULL" . "\nAND sortie_salle IS NOT NULL";
    switch ($intervalle) {
        case "month":
            $sql .= "\nAND plagesop.date BETWEEN '" . CMbDT::date("-1 month") . "' AND '" . CMbDT::date() . "'";
            break;
        case "6month":
示例#4
0
// les plannings sinon laisser son prat_id pour afficher son planning perso
if ($praticien->isFromType(array("Anesthésiste")) && !$filter->_planning_perso) {
    $filter->_prat_id = null;
}
// Filtre sur les praticiens ou les spécialités
$function = new CFunctions();
$functions = array();
$praticiens = array();
// Aucun filtre de séléctionné : tous les éléments auxquels on a le droit
if (!$filter->_specialite && !$filter->_prat_id) {
    if (!$user->isFromType(array("Anesthésiste")) && !$praticien->isFromType(array("Anesthésiste"))) {
        $functions = $function->loadListWithPerms(PERM_READ);
        $praticiens = $user->loadPraticiens();
    } else {
        $functions = $function->loadList();
        $praticiens = $praticien->loadList();
    }
} elseif ($filter->_specialite) {
    // Filtre sur la specialité : la spec et ses chirs primaires et secondaires
    $function->load($filter->_specialite);
    $function->loadBackRefs("users");
    $function->loadBackRefs("secondary_functions");
    $functions[$function->_id] = $function;
    $praticiens = $function->_back["users"];
    /** @var CSecondaryFunction $sec_func */
    foreach ($function->_back["secondary_functions"] as $sec_func) {
        if (!isset($praticiens[$sec_func->user_id])) {
            $sec_func->loadRefUser();
            $praticiens[$sec_func->user_id] = $sec_func->_ref_user;
        }
    }
CCanDo::checkRead();
CApp::setTimeLimit(240);
CApp::setMemoryLimit("1024M");
$plannings = array();
// Chargement de la liste des kines
$date = CValue::get("date", CMbDT::date());
$sunday = CMbDT::date("next sunday", CMbDT::date("- 1 DAY", $date));
$monday = CMbDT::date("-6 days", $sunday);
$where = array();
$where["debut"] = "BETWEEN '{$monday} 00:00:00' and '{$sunday} 23:59:59'";
$mediuser = new CMediusers();
$ljoin = array();
$ljoin["evenement_ssr"] = "evenement_ssr.therapeute_id = users_mediboard.user_id";
$where["evenement_ssr.evenement_ssr_id"] = "IS NOT NULL";
$group = "users_mediboard.user_id";
$kines = $mediuser->loadList($where, null, null, $group, $ljoin);
CPrescriptionLine::$_load_for_delete = true;
// Parcours des kines et chargement du planning
foreach ($kines as $_kine) {
    $args_planning = array();
    $args_planning["kine_id"] = $_kine->_id;
    $args_planning["surveillance"] = 0;
    $args_planning["large"] = 1;
    $args_planning["print"] = 1;
    $args_planning["height"] = 600;
    $args_planning["date"] = $date;
    // Chargement du planning de technicien
    $plannings[$_kine->_id]["technicien"] = CApp::fetch("ssr", "ajax_planning_technicien", $args_planning);
    // Chargement du planning de surveillance
    $args_planning["surveillance"] = 1;
    $plannings[$_kine->_id]["surveillance"] = CApp::fetch("ssr", "ajax_planning_technicien", $args_planning);
    $where = array();
    $where["affectation_uf.uf_id"] = "= '" . $affectation->_ref_uf_medicale->_id . "'";
    $where[] = "object_class = 'CMediusers' OR object_class = 'CFunctions'";
    $aff_ufs = new CAffectationUniteFonctionnelle();
    $affs = $aff_ufs->loadList($where);
    foreach ($affs as $_aff) {
        if ($_aff->object_class == "CMediusers") {
            $users[$_aff->object_id] = $_aff->object_id;
        } else {
            $function_med[$_aff->object_id] = $_aff->object_id;
        }
    }
    $where = array();
    $where["actif"] = "= '1'";
    $where[] = "user_id " . CSQLDataSource::prepareIn(array_keys($users)) . "OR function_id " . CSQLDataSource::prepareIn(array_keys($function_med));
    $praticiens = $user->loadList($where);
} else {
    $praticiens = $user->loadPraticiens(PERM_EDIT, $function->_id);
}
foreach ($praticiens as $prat) {
    $prat->loadRefFunction();
    foreach ($auf->loadListFor($prat) as $_auf) {
        $uf = $_auf->loadRefUniteFonctionnelle();
        $ufs_medicale[$uf->_id] = $uf;
    }
}
$ufs_medicale = array_reverse($ufs_medicale);
$ufs_soins = array_reverse($ufs_soins);
$ufs_hebergement = array_reverse($ufs_hebergement);
// Création du template
$smarty = new CSmartyDP();
 /**
  * Chargement de la liste des utilisateurs à partir de leur type
  *
  * @param array  $user_types  Tableau des types d'utilisateur
  * @param int    $permType    Niveau de permission
  * @param int    $function_id Filtre sur une fonction spécifique
  * @param string $name        Filtre sur un nom d'utilisateur
  * @param bool   $actif       Filtre sur les utilisateurs actifs
  * @param bool   $secondary   Inclut les fonctions secondaires dans le filtre sur les fonctions
  * @param bool   $reverse     Utilise les types en inclusion ou en exclusion
  *
  * @return CMediusers[]
  */
 function loadListFromType($user_types = null, $permType = PERM_READ, $function_id = null, $name = null, $actif = true, $secondary = false, $reverse = false)
 {
     $where = array();
     $ljoin = array();
     if ($actif) {
         $where["users_mediboard.actif"] = "= '1'";
     }
     // Filters on users values
     $ljoin["users"] = "`users`.`user_id` = `users_mediboard`.`user_id`";
     if ($name) {
         $where["users.user_last_name"] = "LIKE '{$name}%'";
     }
     $ljoin["functions_mediboard"] = "functions_mediboard.function_id = users_mediboard.function_id";
     $ljoin["secondary_function"] = "secondary_function.user_id = users_mediboard.user_id";
     $ljoin[] = "functions_mediboard AS sec_fnc_mb ON sec_fnc_mb.function_id = secondary_function.function_id";
     if ($function_id) {
         if ($secondary) {
             $where[] = "'{$function_id}' IN (users_mediboard.function_id, secondary_function.function_id)";
         } else {
             $where["users_mediboard.function_id"] = "= '{$function_id}'";
         }
     }
     // Filter on current group or users in secondaries functions
     $group = CGroups::loadCurrent();
     $where[] = "functions_mediboard.group_id = '{$group->_id}' OR sec_fnc_mb.group_id = '{$group->_id}'";
     // Filter on user type
     if (is_array($user_types)) {
         $utypes_flip = array_flip(CUser::$types);
         foreach ($user_types as &$_type) {
             $_type = $utypes_flip[$_type];
         }
         $where["users.user_type"] = $reverse ? CSQLDataSource::prepareNotIn($user_types) : CSQLDataSource::prepareIn($user_types);
     }
     $order = "`users`.`user_last_name`, `users`.`user_first_name`";
     $group_by = array("user_id");
     // Get all users
     $mediuser = new CMediusers();
     /** @var CMediusers[] $mediusers */
     $mediusers = $mediuser->loadList($where, $order, null, $group_by, $ljoin);
     // Mass fonction standard preloading
     self::massLoadFwdRef($mediusers, "function_id");
     self::massCountBackRefs($mediusers, "secondary_functions");
     // Filter a posteriori to unable mass preloading of function
     self::filterByPerm($mediusers, $permType);
     // Associate cached function
     foreach ($mediusers as $_mediuser) {
         $_mediuser->loadRefFunction();
     }
     return $mediusers;
 }
$mediuser = new CMediusers();
$ljoin = array();
$ljoin["users"] = "users.user_id = users_mediboard.user_id";
$ljoin["functions_mediboard"] = "functions_mediboard.function_id = users_mediboard.function_id";
$where = array();
$where["users_mediboard.actif"] = "= '1'";
$where["functions_mediboard.group_id"] = "= '" . CGroups::loadCurrent()->_id . "'";
if ($interv) {
    $last_space = strrpos($interv, " ");
    $last_name = substr($interv, 0, $last_space);
    $where[] = "users.user_last_name = '{$last_name}'\n  OR users.user_last_name = '{$last_name}'";
}
$limit = "{$current}, {$step}";
$order = "users.user_last_name ASC, users.user_first_name ASC";
$total = $mediuser->countList($where, null, $ljoin);
/** @var CMediusers[] $mediusers */
$mediusers = $mediuser->loadList($where, $order, $limit, null, $ljoin);
foreach ($mediusers as $_mediuser) {
    $_mediuser->loadRefFunction();
}
// Création du template
$smarty = new CSmartyDP();
$smarty->assign("mediuser", $mediuser);
$smarty->assign("intervenants", $intervenants);
$smarty->assign("interv", $interv);
$smarty->assign("mediusers", $mediusers);
$smarty->assign("current", $current);
$smarty->assign("step", $step);
$smarty->assign("total", $total);
$smarty->assign("exclude_without_code", $exclude_without_code);
$smarty->display("edit_codes_intervenants.tpl");
/**
 * Récupération du graphique du nombre d'interventions par praticien
 *
 * @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    $func_id       Identifiant du cabinet
 * @param int    $discipline_id Identifiant de la discipline
 * @param string $codeCCAM      Code CCAM
 * @param string $type_hospi    Type d'hospitalisation
 * @param bool   $hors_plage    Prise en compte des hors plage
 *
 * @return array
 */
function graphPraticienDiscipline($debut = null, $fin = null, $prat_id = 0, $salle_id = 0, $bloc_id = 0, $func_id = 0, $discipline_id = 0, $codeCCAM = "", $type_hospi = "", $hors_plage = true)
{
    if (!$debut) {
        $debut = CMbDT::date("-1 YEAR");
    }
    if (!$fin) {
        $fin = CMbDT::date();
    }
    $discipline = new CDiscipline();
    $discipline->load($discipline_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);
    }
    $user = new CMediusers();
    $ljoin = array("users" => "users.user_id = users_mediboard.user_id", "functions_mediboard" => "functions_mediboard.function_id = users_mediboard.function_id");
    $where = array("functions_mediboard.group_id" => "= '" . CGroups::loadCurrent()->_id . "'");
    if ($discipline_id) {
        $where["users_mediboard.discipline_id"] = " = '{$discipline_id}'";
    }
    if ($prat_id) {
        $where["users_mediboard.user_id"] = " = '{$prat_id}'";
    }
    $user_types = array("Chirurgien", "Anesthésiste", "Médecin");
    $utypes_flip = array_flip(CUser::$types);
    if (is_array($user_types)) {
        foreach ($user_types as $key => $value) {
            $user_types[$key] = $utypes_flip[$value];
        }
        $where["users.user_type"] = CSQLDataSource::prepareIn($user_types);
    }
    $order = "`users`.`user_last_name`, `users`.`user_first_name`";
    $users = $user->loadList($where, $order, null, null, $ljoin);
    // Gestion du hors plage
    $where_hors_plage = !$hors_plage ? "AND operations.plageop_id IS NOT NULL" : "";
    $total = 0;
    $series = array();
    foreach ($users as $user) {
        $serie = array('data' => array(), 'label' => utf8_encode($user->_view));
        $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      users_mediboard.user_id\r\n      FROM operations\r\n      INNER JOIN sallesbloc ON operations.salle_id = sallesbloc.salle_id\r\n      LEFT JOIN sejour ON operations.sejour_id = sejour.sejour_id\r\n      LEFT JOIN users_mediboard ON operations.chir_id = users_mediboard.user_id\r\n      LEFT JOIN users ON users_mediboard.user_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 sejour.group_id = '" . CGroups::loadCurrent()->_id . "'\r\n      AND users_mediboard.user_id = '{$user->_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}%'";
        }
        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 = $user->_spec->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;
                }
            }
            if ($f) {
                $serie["data"][] = array(count($serie["data"]), 0);
            }
        }
        $series[] = $serie;
    }
    $series[] = $serie_total;
    $title = "Nombre d'interventions par praticien";
    $subtitle = "{$total} opérations";
    if ($discipline_id) {
        $subtitle .= " - {$discipline->_view}";
    }
    if ($codeCCAM) {
        $subtitle .= " - CCAM : {$codeCCAM}";
    }
    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é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);
    }
}
示例#11
0
 /**
  * Load users
  *
  * @param string $type Type
  *
  * @return CMediusers[]
  */
 function loadRefsUsers($type = null)
 {
     $user = new CMediusers();
     if (!$type) {
         $where = array("function_id" => "= '{$this->function_id}'", "actif" => "= '1'");
         $ljoin = array("users" => "`users`.`user_id` = `users_mediboard`.`user_id`");
         $order = "`users`.`user_last_name`, `users`.`user_first_name`";
         return $this->_ref_users = $user->loadList($where, $order, null, null, $ljoin);
     }
     return $this->_ref_users = $user->loadListFromType($type, PERM_READ, $this->function_id);
 }
示例#12
0
$date = CValue::getOrSession("date", CMbDT::date());
$group_id = CGroups::loadCurrent()->_id;
$user = CMediusers::get();
$prat_id = CValue::getOrSession("praticien_id");
$function_id = CValue::get("function_id");
if (!$prat_id && !$function_id) {
    $prat_id = $user->_id;
}
$prat = new CMediusers();
$where = array();
if ($function_id) {
    $where["function_id"] = " = '{$function_id}'";
} else {
    $where["user_id"] = " = '{$prat_id}'";
}
$prats = $prat->loadList($where);
$function = new CFunctions();
$function->load($function_id);
$ds = $function->getDS();
$calendar = new CPlanningMonth($date);
$calendar->title = htmlentities(CMbDT::format($date, "%B %Y"));
foreach ($prats as $_prat) {
    // plages de congés (si mode prat)
    if (!$function_id && CModule::getActive("dPpersonnel")) {
        $plage_cong = new CPlageConge();
        $plages_cong = $plage_cong->loadListForRange($_prat->_id, $calendar->date_min, $calendar->date_max);
        foreach ($plages_cong as $_conge) {
            $first_day = $_conge->date_debut;
            $last_day = $_conge->date_fin;
            $replaced_by = new CMediusers();
            $replaced_by->load($_conge->replacer_id);
示例#13
0
 if (!$sejour->_id) {
     CAppUI::stepAjax("Le sejour n'a pas été retrouvé dans Mediboard par le NDA : '{$NDA}'", UI_MSG_WARNING);
     $results["count_nda_nt"]++;
     continue;
 }
 // Traitement du praticien responsable de l'intervention
 $mediuser = new CMediusers();
 $where = array("users_mediboard.adeli" => "= '{$ADELI}'", "functions_mediboard.group_id" => "= '{$group_id}'");
 $ljoin = array("functions_mediboard" => "functions_mediboard.function_id = users_mediboard.function_id");
 $count = $mediuser->countList($where, null, $ljoin);
 if ($count == 0) {
     CAppUI::stepAjax("L'utilisateur '{$ADELI}' n'a pas été retrouvé dans Mediboard", UI_MSG_WARNING);
     $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);
$user = new CMediusers();
$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);
// Gestion du hors plage
$where_hors_plage = !$hors_plage ? "AND operations.plageop_id IS NOT NULL" : "";
// Nombre totaux d'interventions
$tableau = array();
$query = "SELECT COUNT(*) AS nbInterv, users.user_id\n  FROM operations\n  LEFT JOIN sejour ON operations.sejour_id = sejour.sejour_id\n  LEFT JOIN users_mediboard ON operations.chir_id = users_mediboard.user_id\n  LEFT JOIN users ON operations.chir_id = users.user_id\n  WHERE operations.annulee = '0'\n  AND operations.date BETWEEN '{$debut}' AND '{$fin}'\n  {$where_hors_plage}\n  AND sejour.group_id = '" . CGroups::loadCurrent()->_id . "'\n  AND operations.salle_id " . CSQLDataSource::prepareIn(array_keys($salles)) . "\n  AND users.user_id " . CSQLDataSource::prepareIn(array_keys($listPrats));
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 users.user_id ORDER BY users.user_last_name, users.user_first_name";
示例#15
0
$dossiers_medicaux_shared = CAppUI::conf("dPetablissement dossiers_medicaux_shared");
if (!$stats) {
    $index = isset($where["object_id"]) ? "object_id" : null;
    /** @var CUserLog[] $list */
    $list = $log->loadList($where, "date DESC", "{$start}, 100", null, null, $index);
    // Sort by id with PHP cuz dumbass MySQL won't limit rowscan before sorting
    // even though `date` is explicit as first intention sorter AND obvious index in most cases
    // Tends to be a known limitation
    array_multisort(CMbArray::pluck($list, "_id"), SORT_DESC, $list);
    $list_count = $log->countList($where, null, null, $index);
    $group_id = CGroups::loadCurrent()->_id;
    $users = CStoredObject::massLoadFwdRef($list, "user_id");
    CStoredObject::massLoadFwdRef($list, "object_id");
    // Mass loading des mediusers et des fonctions
    $mediuser = new CMediusers();
    $mediusers = $mediuser->loadList(array("user_id" => CSQLDataSource::prepareIn(array_keys($users))));
    CStoredObject::massLoadFwdRef($mediusers, "function_id");
    foreach ($list as $_log) {
        $_log->loadRefUser();
        $function = isset($mediusers[$_log->user_id]) ? $mediusers[$_log->user_id]->loadRefFunction() : $_log->_ref_user->loadRefMediuser()->loadRefFunction();
        if (!$is_admin && !$dossiers_medicaux_shared && $function->group_id != $group_id) {
            unset($list[$_log->_id]);
            continue;
        }
        $target = $_log->loadTargetObject();
        $_log->getOldValues();
    }
}
if ($csv) {
    ob_clean();
    $date = CMbDT::dateTime();
示例#16
0
}
if ($order_col == "user_last_name") {
    $order = "users.user_last_name {$order_way}, users.user_first_name ASC";
}
if ($order_col == "user_first_name") {
    $order = "users.user_first_name {$order_way}, users.user_last_name ASC";
}
if ($order_col == "user_type") {
    $order = "users.user_type {$order_way}, users.user_last_name ASC, users.user_first_name ASC";
}
if ($filter) {
    $mediusers = $mediuser->seek($filter, $where, "{$page}, {$step}", true, $ljoin, $order);
    $total_mediuser = $mediuser->_totalSeek;
} else {
    $total_mediuser = $mediuser->countList($where, null, $ljoin);
    $mediusers = $mediuser->loadList($where, $order, "{$page}, {$step}", "users_mediboard.user_id", $ljoin);
}
/** @var CMediusers[] $mediusers */
foreach ($mediusers as $_mediuser) {
    $_mediuser->loadRefFunction();
    $_mediuser->loadRefProfile();
    $_mediuser->loadRefUser();
    $_mediuser->_ref_user->isLDAPLinked();
    $_mediuser->getLastLogin();
}
$smarty = new CSmartyDP();
$smarty->assign("mediusers", $mediusers);
$smarty->assign("user_id", $user_id);
$smarty->assign("total_mediuser", $total_mediuser);
$smarty->assign("order_col", $order_col);
$smarty->assign("order_way", $order_way);