/** * Get the patient merge by date * * @param Date $before before date * @param Date $now now date * * @return array */ static function getPatientMergeByDate($before, $now) { $where = array("date >= '{$before} 00:00:00'", "date <= '{$now} 23:59:59'", "type = 'merge'", "object_class = 'CPatient'"); $ds = CSQLDataSource::get("std"); $ds->exec("SET SESSION group_concat_max_len = 100000;"); $request = new CRequest(); $request->addSelect("DATE(date) AS 'date', COUNT(*) AS 'total', GROUP_CONCAT( object_id SEPARATOR '-') as ids"); $request->addTable("user_log"); $request->addWhere($where); $request->addGroup("DATE(date)"); return $ds->loadList($request->makeSelect()); }
/** * @return string[] */ function getItemNames() { $item = new CExListItem(); $where = array($this->getBackRefField() => "= '{$this->_id}'"); $request = new CRequest(); $request->addWhere($where); $request->addTable($item->_spec->table); $request->addOrder("LPAD(code, 20, '0'), name"); $request->addSelect(array($item->_spec->key, "name")); $ds = $item->_spec->ds; return $ds->loadHashList($request->makeSelect()); }
/** * Ajout des codes pour les Groups * * @return bool */ protected function addCodeToGroups() { $ds = CSQLDataSource::get("std"); $request = new CRequest(); $request->addSelect(array("group_id", "code", "text")); $request->addTable("groups_mediboard"); $query = $request->makeSelect(); $groups = $ds->loadList($query); foreach ($groups as $_group) { $group_id = $_group["group_id"]; $code = CMbString::makeInitials($_group["text"]); $query = $ds->prepare("UPDATE `groups_mediboard` SET `code`=?1 WHERE `group_id`= ?2", $code, $group_id); $ds->exec($query); } return true; }
function check() { $msg = parent::check(); if (!$msg) { $where = array(); $where["date"] = $this->_spec->ds->prepare("= %", $this->date); $where["affectation_id"] = $this->_spec->ds->prepare("= %", $this->affectation_id); $where["typerepas_id"] = $this->_spec->ds->prepare("= %", $this->typerepas_id); if ($this->repas_id) { $where["repas_id"] = $this->_spec->ds->prepare("!= %", $this->repas_id); } $select = "count(`" . $this->_spec->key . "`) AS `total`"; $sql = new CRequest(); $sql->addTable($this->_spec->table); $sql->addSelect($select); $sql->addWhere($where); $nbRepas = $this->_spec->ds->loadResult($sql->makeSelect()); if ($nbRepas) { $msg .= "Un repas a déjà été créé, vous ne pouvez pas en créer un nouveau."; } } return $msg; }
/** * Nettoie les operation_id * * @return bool */ protected function cleanOperationIdError() { $ds = $this->ds; $where = array(); $where["consultation_anesth.operation_id"] = "!= 0"; $where[] = "consultation_anesth.operation_id IS NOT NULL"; $where[] = "(SELECT COUNT(operations.operation_id) FROM operations WHERE operation_id=consultation_anesth.operation_id)=0"; $query = new CRequest(); $query->addSelect("consultation_anesth_id"); $query->addTable("consultation_anesth"); $query->addWhere($where); $aKeyxAnesth = $ds->loadColumn($query->makeSelect()); if ($aKeyxAnesth === false) { return false; } if (count($aKeyxAnesth)) { $query = "UPDATE consultation_anesth SET operation_id = NULL WHERE (consultation_anesth_id " . CSQLDataSource::prepareIn($aKeyxAnesth) . ")"; if (!$ds->exec($query)) { return false; } return true; } return true; }
$results = $ds->loadList($request->makeSelect()); // Eventuelle deuxième requête (pour les lines mixes) if (!$commentaire && $one_field_presc) { $request_b = new CRequest(); if ($one_field_presc) { $other_fields = ", prescription_line_mix_item.prescription_line_mix_item_id"; } if ($one_field_atcd) { $other_fields .= ", antecedent.antecedent_id"; } if ($one_field_traitement) { $other_fields .= ", traitement.traitement_id"; } if ($consult_filled) { $request_b->addSelect("consultation.consultation_id, patients.patient_id" . $other_fields); $request_b->addTable("consultation"); $request_b->addOrder("patients.nom ASC, plageconsult.date ASC"); } elseif ($sejour_filled) { $request_b->addSelect("sejour.sejour_id, patients.patient_id" . $other_fields); $request_b->addTable("sejour"); $request_b->addOrder("patients.nom ASC, sejour.entree_prevue ASC"); } elseif ($interv_filled) { $request_b->addSelect("operations.operation_id, patients.patient_id" . $other_fields); $request_b->addTable("operations"); $request_b->addOrder("patients.nom ASC, operations.date ASC"); } else { $request_b->addSelect("patients.patient_id"); $request_b->addTable("patients"); $request_b->addOrder("patients.nom ASC"); } $request_b->addLJoin($ljoin);
/** * Computes the weighted average price (PMP) * * @param string $since [optional] * @param string $date_max [optional] * @param bool $ttc Include taxes * * @return float */ function getWAP($since = "-1 MONTH", $date_max = null, $ttc = false) { $qty = $this->getSupply($since, $date_max); if (!$qty) { return null; } $where = array("product.product_id" => "= '{$this->_id}'", "product_order_item_reception.date > '" . CMbDT::date($since) . "'"); if ($date_max) { $where[] = "product_order_item_reception.date <= '" . CMbDT::date($date_max) . "'"; } $ljoin = array("product_order_item" => "product_order_item.order_item_id = product_order_item_reception.order_item_id", "product_reference" => "product_reference.reference_id = product_order_item.reference_id", "product" => "product.product_id = product_reference.product_id"); $sql = new CRequest(); $sql->addTable("product_order_item_reception"); $select = "SUM(product_order_item_reception.quantity * product_order_item.unit_price)"; if ($ttc) { $ttc_select = "product_order_item.unit_price + (product_order_item.unit_price * (product_order_item.tva / 100))"; $select = "SUM(product_order_item_reception.quantity * ({$ttc_select}))"; } $sql->addSelect($select); $sql->addLJoin($ljoin); $sql->addWhere($where); $total = $this->_spec->ds->loadResult($sql->makeSelect()); return $total / $qty; }
/** * Get the configuration values of an object, without inheritance * * @param string $object_class Object class * @param integer $object_id Object ID * @param array $config_keys The keys of the values to get * * @return array The configuration values */ protected static function getSelfConfig($object_class = null, $object_id = null, $config_keys = null) { static $cache_data = null; static $cache = array(); $key = "{$object_class}/{$object_id}/" . ($config_keys ? implode("-", $config_keys) : ""); if (isset($cache[$key])) { return $cache[$key]; } if ($cache_data === null) { $spec = self::_getSpec(); $request = new CRequest(); $request->addTable($spec->table); $request->addSelect(array("feature", "value", "object_class", "object_id")); $cache_data = $spec->ds->loadList($request->makeSelect()); } if ($object_class && $object_id) { $data = array_filter($cache_data, function ($v) use($object_class, $object_id) { return $v["object_class"] === $object_class && $v["object_id"] === $object_id; }); } else { $data = array_filter($cache_data, function ($v) { return $v["object_class"] === null && $v["object_id"] === null; }); } if ($config_keys) { $data = array_filter($data, function ($v) use($config_keys) { return in_array($v["feature"], $config_keys); }); } $final_data = array(); foreach ($data as $_data) { $final_data[$_data["feature"]] = $_data["value"]; } return $cache[$key] = $final_data; }
$stats = new CMediusersStats($date, $period, "DATE(debut)", 18); $consult = new CConsultation(); $ds = $consult->_spec->ds; $group = CGroups::loadCurrent(); $query = new CRequest(); $query->addColumn("COUNT(*) total"); $query->addColumn("therapeute_id", "user_id"); $query->addColumn($stats->sql_date, "refdate"); $query->addWhere("{$stats->sql_date} BETWEEN '{$stats->min_date}' AND '{$stats->max_date}'"); $query->addWhereClause("functions_mediboard.group_id", "= '{$group->_id}'"); $query->addGroup("therapeute_id, refdate"); $query->addOrder("refdate DESC"); $totals = array(); switch ($type) { case "CEvenementSSR": $query->addTable("`evenement_ssr`"); $query->addLJoinClause("sejour", "sejour.sejour_id = evenement_ssr.sejour_id"); $query->addLJoinClause("users_mediboard", "users_mediboard.user_id = evenement_ssr.therapeute_id"); $query->addLJoinClause("functions_mediboard", "functions_mediboard.function_id = users_mediboard.function_id"); // Réalisés $query1 = clone $query; $query1->addWhereClause("evenement_ssr.realise", "= '1'"); foreach ($ds->loadList($query1->makeSelect()) as $_row) { $stats->addTotal($_row["user_id"], $_row["refdate"], $_row["total"], "realises"); } // Annulés $query1 = clone $query; $query1->addWhereClause("evenement_ssr.annule", "= '1'"); foreach ($ds->loadList($query1->makeSelect()) as $_row) { $stats->addTotal($_row["user_id"], $_row["refdate"], $_row["total"], "annules"); }
$owner = CView::post("owner", "str"); CView::checkin(); $modeles_ids = explode("-", $modeles_ids); CMbArray::removeValue(array(), $modeles_ids); if (!count($modeles_ids)) { CAppUI::stepMessage("Aucun modèle à exporter"); CApp::rip(); } $doc = new CMbXMLDocument(null); $root = $doc->createElement("modeles"); $doc->appendChild($root); $where = array("compte_rendu_id" => CSQLDataSource::prepareIn($modeles_ids)); // Récupération des header_id, footer_id, preface_id et ending_id $ds = CSQLDataSource::get("std"); $request = new CRequest(); $request->addTable("compte_rendu"); $request->addWhere($where); $components_ids = array(); foreach (array("header_id", "footer_id", "preface_id", "ending_id") as $_component) { $request->select = array(); $request->addSelect($_component); $components_ids = array_merge($components_ids, $ds->loadColumn($request->makeSelect())); } $modeles_ids = array_unique(array_merge($components_ids, $modeles_ids)); CMbArray::removeValue("", $modeles_ids); foreach ($modeles_ids as $_modele_id) { $modele = CApp::fetch("dPcompteRendu", "ajax_export_modele", array("modele_id" => $_modele_id)); $doc_modele = new CMbXMLDocument(null); @$doc_modele->loadXML($modele); // Importation du noeud CPrescription $modele_importe = $doc->importNode($doc_modele->firstChild, true);
/** * @see parent::check() */ function check() { $msg = null; $ds = $this->_spec->ds; if (!$this->perm_object_id) { $where = array(); $where["user_id"] = $ds->prepare("= %", $this->user_id); $where["object_class"] = $ds->prepare("= %", $this->object_class); if ($this->object_id) { $where["object_id"] = $ds->prepare("= %", $this->object_id); } else { $where["object_id"] = "IS NULL"; } $query = new CRequest(); $query->addSelect("count(perm_object_id)"); $query->addTable("perm_object"); $query->addWhere($where); $nb_result = $ds->loadResult($query->makeSelect()); if ($nb_result) { $msg .= "Une permission sur cet objet existe déjà.<br />"; } } return $msg . parent::check(); }
$where["sejour.type"] = " = '{$type}'"; } } else { $where["sejour.type"] = "!= 'urg' AND `sejour`.`type` != 'seances'"; } // filtre sur le praticien if ($prat_id) { $where["sejour.praticien_id"] = "= '{$prat_id}'"; } $where["sejour.entree"] = " BETWEEN '{$month_min}' AND '{$nextmonth}'"; $where["sejour.group_id"] = " = '{$group->_id}'"; $where["sejour.annule"] = " = '0'"; // Liste des admissions par jour $request = new CRequest(); $request->addSelect(array("DATE_FORMAT(sejour.entree, '%Y-%m-%d') AS 'date'", "COUNT(sejour.sejour_id) AS 'num'")); $request->addTable("sejour"); $request->addWhere($where); $request->addLJoin($leftjoin); $request->addGroup("date"); $request->addOrder("date"); foreach ($ds->loadHashList($request->makeSelect()) as $day => $num1) { $days[$day]["admissions"] = $num1; } // Liste des admissions non préparées $where["sejour.entree_preparee"] = " = '0'"; $request->addWhere($where); foreach ($ds->loadHashList($request->makeSelect()) as $day => $num3) { $days[$day]["admissions_non_preparee"] = $num3; } // Liste des admissions non effectuées par jour unset($where['sejour.entree']);
$where_column = CValue::get("where_column"); $where_value = CValue::get("where_value"); $ds = CSQLDataSource::get($dsn); $columns = CImportTools::getColumnsInfo($ds, $table); $orderby = ""; if ($order_column) { $order_column = preg_replace('/[^-_\\w]/', "", $order_column); if (in_array($order_column, array_keys($columns))) { if (!in_array($order_way, array("ASC", "DESC"))) { $order_way = "ASC"; } $orderby = "{$order_column} {$order_way}"; } } $request = new CRequest(); $request->addTable($table); $request->addSelect("*"); $request->setLimit("{$start},{$count}"); if ($orderby) { $request->addOrder($orderby); } if ($where_column) { $where = array($where_column => $ds->prepare("=?", $where_value)); $request->addWhere($where); } $rows = $ds->loadList($request->makeSelect()); $request->setLimit(null); $request->order = null; $total = $ds->loadResult($request->makeSelectCount()); $counts = array(10, 50, 100, 200, 500, 1000, 5000); $smarty = new CSmartyDP();
/** * Vérifie l'unicité d'une aide à la saisie * * @return string */ function check() { $msg = ""; $ds = $this->_spec->ds; $where = array(); if ($this->user_id) { $where["user_id"] = $ds->prepare("= %", $this->user_id); } else { if ($this->function_id) { $where["function_id"] = $ds->prepare("= %", $this->function_id); } else { $where["group_id"] = $ds->prepare("= %", $this->group_id); } } $where["class"] = $ds->prepare("= %", $this->class); $where["field"] = $ds->prepare("= %", $this->field); $where["depend_value_1"] = $ds->prepare("= %", $this->depend_value_1); $where["depend_value_2"] = $ds->prepare("= %", $this->depend_value_2); $where["text"] = $ds->prepare("= %", $this->text); $where["aide_id"] = $ds->prepare("!= %", $this->aide_id); $sql = new CRequest(); $sql->addSelect("count(aide_id)"); $sql->addTable("aide_saisie"); $sql->addWhere($where); $nb_result = $ds->loadResult($sql->makeSelect()); if ($nb_result) { $msg .= "Cette aide existe déjà<br />"; } return $msg . parent::check(); }
/** * $Id$ * * @package Mediboard * @subpackage Stock * @author SARL OpenXtrem <*****@*****.**> * @license GNU General Public License, see http://www.gnu.org/licenses/gpl.html * @version $Revision$ */ CCanDo::checkEdit(); $ratio = (double) CValue::get("ratio", 2); CApp::setMemoryLimit('512M'); CApp::setTimeLimit(120); $sql = new CRequest(); $sql->addTable("product_order_item"); $sql->addSelect("\r\n product_order_item.order_item_id,\r\n product_order_item.reference_id, \r\n product_reference.price AS RP, \r\n product_order_item.unit_price AS OP, \r\n product_order_item.quantity AS OQ, \r\n product_order.order_id, \r\n product_order.order_number, \r\n product_order.date_ordered"); $sql->addLJoin(array("product_reference" => "product_reference.reference_id = product_order_item.reference_id", "product_order" => "product_order.order_id = product_order_item.order_id")); $sql->addWhere("\r\n product_order.cancelled = '0' \r\n AND (product_reference.cancelled = '0' OR product_reference.cancelled IS NULL)\r\n AND product_reference.price != product_order_item.unit_price\r\n AND (\r\n product_order_item.unit_price > product_reference.price*{$ratio} OR \r\n product_reference.price > product_order_item.unit_price*{$ratio}\r\n )"); $sql->addOrder("product_reference.code"); $changes = $this->_spec->ds->loadList($sql->makeSelect()); $changes_struct = array(); $references = array(); $references_cahpp = array(); foreach ($changes as $_change) { if (!isset($references[$_change["reference_id"]])) { $_reference = new CProductReference(); $_reference->load($_change["reference_id"]); $references[$_reference->_id] = $_reference; $article = new CCAHPPArticle(); $where = array("reference_fournisseur" => $article->_spec->ds->prepare("=%", $_reference->supplier_code));
function getDbIds($min_id = null) { $ds = CSQLDataSource::get("std"); $request = new CRequest(); $request->addColumn("DISTINCT id400"); $request->addTable("id_sante400"); $tag = $this->getImportTag(); $where = array("object_class" => "= '{$this->_class}'", "tag" => "= '{$tag}'"); if ($min_id) { $where["id400"] = $ds->prepare("> ?", $min_id); } $request->addWhere($where); return $ds->loadColumn($request->makeSelect()); }
/** * @see parent::getUsersStatsDetails(); */ function getUsersStatsDetails($user_ids) { $ds = $this->_spec->ds; $query = new CRequest(); $query->addColumn("COUNT(`file_id`)", "docs_count"); $query->addColumn("SUM(`doc_size`)", "docs_weight"); $query->addColumn("object_class"); $query->addColumn("file_category_id", "category_id"); $query->addTable("files_mediboard"); $query->addGroup("object_class, category_id"); if (is_array($user_ids)) { $in_owner = $ds->prepareIn($user_ids); $query->addWhereClause("author_id", $in_owner); } return $ds->loadList($query->makeSelect()); }
case 'month': $mysql_date_format = '%Y-%m'; $php_date_format = '\\2'; break; case 'year': $mysql_date_format = '%Y'; $php_date_format = '\\1'; break; default: CAppUI::stepAjax('common-error-Invalid parameter', UI_MSG_ERROR); } $order_by[] = "DATE_FORMAT(`{$patient->_spec->table}`.`naissance`, '{$mysql_date_format}')"; $order_by[] = "`{$patient->_spec->table}`.`nom`, `{$patient->_spec->table}`.`prenom`"; $request = new CRequest(); $request->addSelect('`cs`.*'); $request->addTable("{$consult->_spec->table} AS `cs`"); $request->addLJoin($ljoin); $request->addWhere($where); $request->addOrder($order_by); $consultations = $consult->loadQueryList($request->makeSelect()); CStoredObject::massLoadFwdRef($consultations, 'plageconsult_id'); $patients = CStoredObject::massLoadFwdRef($consultations, 'patient_id'); if ($_print_ipp) { CPatient::massLoadIPP($patients); } $sorted_consults = array(); /** @var CConsultation $_consult */ foreach ($consultations as $_consult) { // Implicit loadRefPlageConsult() $_consult->loadRefPraticien(); $_consult->loadRefPatient();
$where["element_prescription.category_prescription_id"] = $ds->prepareIn($category_ids); $join["prescription"] = "prescription.prescription_id = prescription_line_element.prescription_id"; $where["prescription.type"] = "= 'sejour'"; $where["prescription.object_class"] = "= 'CSejour'"; $where["prescription.object_id"] = $ds->prepareIn($sejour_ids); $line_ids = $line->loadIds($where, null, null, null, $join); // Prescriptions exécutables $query = new CRequest(); $query->addSelect("DISTINCT prescription_id"); $query->addTable("prescription_line_element"); $query->addWhereClause("prescription_line_element_id", $ds->prepareIn($line_ids)); $prescription_ids = $ds->loadColumn($query->makeSelect()); // Séjours planifiables $query = new CRequest(); $query->addSelect("DISTINCT object_id"); $query->addTable("prescription"); $query->addWhereClause("prescription_id", $ds->prepareIn($prescription_ids)); $sejour_ids = $ds->loadColumn($query->makeSelect()); $where = array(); $where["sejour_id"] = $ds->prepareIn($sejour_ids); $join = array(); $join["patients"] = "patients.patient_id = sejour.patient_id"; $order = "nom, prenom"; if ($mode == "count") { $counts["plannable"] = $sejour->countList($where, null, $join); } else { $sejours = $sejour->loadList($where, $order, null, null, $join); } } } // Mode count
// Don't group by key... of course CMbArray::removeValue($spec->key, $fields); // Don't group by date if ($merge_dates) { CMbArray::removeValue("date_debut", $fields); } $select = $fields; $select["TOTAL"] = "COUNT(*)"; $select["IDS"] = "GROUP_CONCAT(CAST({$spec->key} AS CHAR))"; $orderby = "TOTAL DESC"; $count_min = max(1, $count_min); $having = array("TOTAL" => $spec->ds->prepare("> ?", $count_min)); $where = array("patient_id" => "IS NOT NULL"); $request = new CRequest(); $request->addSelect($select); $request->addTable($spec->table); $request->addGroup($fields); $request->addWhere($where); $request->addOrder($orderby); $request->addHaving($having); $list = $spec->ds->loadList($request->makeSelect()); $count_total = 0; foreach ($list as $_corresp) { $ids = explode(",", $_corresp["IDS"]); if (empty($ids)) { continue; } array_unique($ids); sort($ids); array_pop($ids); // Only keep last
<?php /** * $Id$ * * @package Mediboard * @subpackage SSR * @author SARL OpenXtrem <*****@*****.**> * @license GNU General Public License, see http://www.gnu.org/licenses/gpl.html * @version $Revision$ */ CCanDo::checkEdit(); // Liste des RHSs $rhs = new CRHS(); $req = new CRequest(); $req->addTable("rhs"); $req->addLJoinClause("sejour", "sejour.sejour_id = rhs.sejour_id"); $req->addColumn("date_monday", "mondate"); $req->addColumn("COUNT(*)", "count"); $req->addWhereClause("rhs.facture", " = '0'"); $req->addWhereClause("sejour.annule", " = '0'"); $req->addGroup("date_monday"); $ds = $rhs->_spec->ds; $rhs_counts = $ds->loadList($req->makeSelect()); foreach ($rhs_counts as &$_rhs_count) { $_rhs_count["sundate"] = CMbDT::date("+6 DAYS", $_rhs_count["mondate"]); } // Création du template $smarty = new CSmartyDP(); $smarty->assign("rhs_counts", $rhs_counts); $smarty->display("vw_facturation_rhs.tpl");
<?php /* $Id$ */ /** * @package Mediboard * @subpackage sante400 * @version $Revision$ * @author SARL OpenXtrem * @license GNU General Public License, see http://www.gnu.org/licenses/gpl.html */ CCanDo::checkEdit(); CView::enforceSlave(); // Statistiques sur les id400 $req = new CRequest(); $req->addTable("id_sante400"); $req->addColumn("COUNT(DISTINCT object_id)", "nbObjects"); $req->addColumn("COUNT(id_sante400_id)", "nbID400s"); $ds = CSQLDataSource::get("std"); $statTotal = $ds->loadList($req->makeSelect()); $statTotal = $statTotal[0]; $req->addSelect("object_class"); $req->addGroup("object_class"); $stats = $ds->loadList($req->makeSelect()); // Computes average ID400 count per object foreach ($stats as &$stat) { $stat["average"] = $stat["nbID400s"] / $stat["nbObjects"]; } $statTotal["average"] = @($statTotal["nbID400s"] / $statTotal["nbObjects"]); // Création du template $smarty = new CSmartyDP(); $smarty->assign("stats", $stats);
/** * Transform the mb locales with the overwrite system * * @param array $locales locales from mediboard * @param string|null $language language chosen, if not defined, use the preference. * * @return array $locales locales transformed */ function transformLocales($locales, $language = null) { $ds = $this->_spec->ds; $where = array("language" => $ds->prepare("=%", $language ? $language : CAppUI::pref("LOCALE"))); $query = new CRequest(); $query->addSelect("source, translation"); $query->addTable("translation"); $query->addWhere($where); $overwrites = $ds->loadList($query->makeSelect()); foreach ($overwrites as $_overwrite) { $locales[$_overwrite["source"]] = $_overwrite["translation"]; } return $locales; }
/** * Get observation results for this object * * @param CMbObject $object Reference object * @param bool $utf8 Encode data int UTF-8 * * @return array|CObservationResultSet[] */ static function getResultsFor(CMbObject $object, $utf8 = true) { $request = new CRequest(); $request->addTable("observation_result"); $request->addSelect("*"); $request->addLJoin(array("observation_result_set" => "observation_result_set.observation_result_set_id = observation_result.observation_result_set_id", "user_log" => "observation_result_set.observation_result_set_id = user_log.object_id AND\r\n user_log.object_class = 'CObservationResultSet' AND user_log.type = 'create'", "users" => "users.user_id = user_log.user_id")); $request->addWhere(array("observation_result_set.context_class" => "= '{$object->_class}'", "observation_result_set.context_id" => "= '{$object->_id}'")); $request->addOrder("observation_result_set.datetime"); $request->addOrder("observation_result.observation_result_id"); $results = $object->_spec->ds->loadList($request->makeSelect()); $times = array(); $data = array(); foreach ($results as $_result) { $_time = CMbDate::toUTCTimestamp($_result["datetime"]); $times[$_time] = $_result["datetime"]; $unit_id = $_result["unit_id"] ? $_result["unit_id"] : "none"; $label = null; if ($_result["label_id"]) { $label_obj = new CSupervisionGraphAxisValueLabel(); $label_obj->load($_result["label_id"]); $label = $label_obj->title; } $float_value = $_result["value"]; $float_value = CMbFieldSpec::checkNumeric($float_value, false); $_user_name = $_result["user_first_name"] . " " . $_result["user_last_name"]; $data[$_result["value_type_id"]][$unit_id][] = array(0 => $_time, 1 => $float_value, "ts" => $_time, "value" => $_result["value"], "datetime" => $_result["datetime"], "file_id" => $_result["file_id"], "set_id" => $_result["observation_result_set_id"], "result_id" => $_result["observation_result_id"], "label_id" => $_result["label_id"], "label" => $utf8 ? utf8_encode($label) : $label, "user_id" => $_result["user_id"], "user" => $utf8 ? utf8_encode($_user_name) : $_user_name); } return array($data, $times); }
/** * Get the latest constantes values * * @param int|CPatient $patient The patient to load the constantes for * @param string $datetime The reference datetime * @param array $selection A selection of constantes to load * @param CMbObject $context The context * @param boolean $use_cache Force the function to return the latest_values is already set * * @return array The constantes values and dates */ static function getLatestFor($patient, $datetime = null, $selection = array(), $context = null, $use_cache = true) { $patient_id = $patient instanceof CPatient ? $patient->_id : $patient; if (isset(self::$_latest_values[$patient_id][$datetime]) && $use_cache === true) { return self::$_latest_values[$patient_id][$datetime]; } if (empty($selection)) { $list_constantes = CConstantesMedicales::$list_constantes; } else { $list_constantes = array_intersect_key(CConstantesMedicales::$list_constantes, array_flip($selection)); } // Constante que l'on va construire $constante = new CConstantesMedicales(); if (!$patient_id) { return array($constante, array()); } $constante->patient_id = $patient_id; $constante->datetime = CMbDT::dateTime(); $constante->loadRefPatient(); $where = array("patient_id" => "= '{$patient_id}'"); if ($context) { $where["context_class"] = " = '{$context->_class}'"; $where["context_id"] = " = '{$context->_id}'"; } if ($datetime) { $where["datetime"] = "<= '{$datetime}'"; } if (count($selection)) { $ors = array(); foreach ($selection as $_item) { $ors[] = "{$_item} IS NOT NULL"; } $where[] = implode(" OR ", $ors); } $count = $constante->countList($where); // Load all constants instead of checking every type to reduce number of SQL queries /** @var self[] $all_list */ $all_list = array(); if ($count <= 30) { $all_list = $constante->loadList($where, "datetime DESC"); } $list_datetimes = array(); foreach ($list_constantes as $type => $params) { $list_datetimes[$type] = null; if ($type[0] == "_") { continue; } // Load them, if any ... if ($count > 0) { // Load them all and dispatch if ($count <= 30) { foreach ($all_list as $_const) { $_value = $_const->{$type}; if ($_value != null) { $constante->{$type} = $_value; $list_datetimes[$type] = $_const->datetime; break; } } } else { $_where = $where; $_where[$type] = "IS NOT NULL"; $_list = $constante->loadList($_where, "datetime DESC", 1); if (count($_list)) { $_const = reset($_list); $constante->{$type} = $_const->{$type}; $list_datetimes[$type] = $_const->datetime; } } } } // Cumul de la diurese if ($datetime) { foreach ($list_constantes as $_name => $_params) { if (isset($_params["cumul_reset_config"]) || isset($_params["formula"])) { $day_defore = CMbDT::dateTime("-24 hours", $datetime); if (isset($_params["cumul_reset_config"]) && !isset($_params['formula'])) { $cumul_field = '_' . $_name . '_cumul'; $reset_hour = str_pad(self::getHostConfig($_params["cumul_reset_config"], $context), 2, '0', STR_PAD_LEFT); $cumul_begin = ''; $cumul_end = ''; if ($datetime >= CMbDT::format($datetime, "%Y-%m-%d {$reset_hour}:00:00")) { $cumul_begin = CMbDT::format($datetime, "%Y-%m-%d {$reset_hour}:00:00"); $cumul_end = CMbDT::format(CMbDT::date('+1 DAY', $datetime), "%Y-%m-%d {$reset_hour}:00:00"); } else { $cumul_begin = CMbDT::format(CMbDT::date('-1 DAY', $datetime), "%Y-%m-%d {$reset_hour}:00:00"); $cumul_end = CMbDT::format($datetime, "%Y-%m-%d {$reset_hour}:00:00"); } $query = new CRequest(); $query->addSelect("SUM(`{$_name}`)"); $query->addTable('constantes_medicales'); $query->addWhere(array("`datetime` >= '{$cumul_begin}'", "`datetime` <= '{$cumul_end}'", "`{$_name}` IS NOT NULL", "`patient_id` = {$patient_id}")); $ds = CSQLDataSource::get('std'); $constante->{$cumul_field} = $ds->loadResult($query->makeSelect()); } else { // cumul de plusieurs champs (avec formule) $formula = $_params["formula"]; foreach ($formula as $_field => $_sign) { $_where = $where; $_where[$_field] = "IS NOT NULL"; $_where[] = "datetime >= '{$day_defore}'"; $_list = $constante->loadList($_where); foreach ($_list as $_const) { if ($_sign === "+") { $constante->{$_name} += $_const->{$_field}; } else { $constante->{$_name} -= $_const->{$_field}; } } } } } } } $constante->updateFormFields(); // Don't cache partial loadings if (empty($selection)) { self::$_latest_values[$patient_id][$datetime] = array($constante, $list_datetimes); } return array($constante, $list_datetimes); }
/** * MassCount des allergies * * @param array $dossiers Dossier médicaux * * @return array */ static function massCountAllergies($dossiers = array()) { $antecedent = new CAntecedent(); $where["type"] = "= 'alle'"; $where["annule"] = " ='0'"; $where["dossier_medical_id"] = CSQLDataSource::prepareIn($dossiers); $where["rques"] = 'NOT IN ("' . str_replace('|', '","', CAppUI::conf("soins Other ignore_allergies", CGroups::loadCurrent()->_guid)) . '")'; $request = new CRequest(); $request->addColumn("dossier_medical_id"); $request->addColumn("count(*)", "c"); $request->addWhere($where); $request->addGroup("dossier_medical_id"); $request->addTable("antecedent"); return $antecedent->getDS()->loadHashList($request->makeSelect()); }
/** * Get random value * * @param string $field Field name * @param bool $is_not_null Search field not null * * @return mixed */ function getRandomValue($field, $is_not_null = false) { $ds = $this->getDS(); $query = new CRequest(); $query->addSelect($field); $query->addTable($this->_spec->table); if ($is_not_null) { $query->addWhereClause($field, "IS NOT NULL"); } $query->addOrder("RAND()"); $query->setLimit(1); return $ds->loadResult($query->makeSelect()); }
* $Id$ * * @package Mediboard * @subpackage SSR * @author SARL OpenXtrem <*****@*****.**> * @license GNU General Public License, see http://www.gnu.org/licenses/gpl.html * @version $Revision$ */ CCanDo::checkEdit(); $date = CValue::getOrSession("date", CMbDT::date()); $date_min = CMbDT::date("last monday", CMbDT::date("+1 day", $date)); $date_max = CMbDT::date("+7 DAY", $date_min); // Comptage des événements hors-séjours $group = "sejour.sejour_id"; $query = new CRequest(); $query->addTable("evenement_ssr"); $query->addColumn("COUNT(evenement_ssr_id)", "evenements_count"); $query->addWhereClause("debut", "BETWEEN '{$date_min}' AND '{$date_max}'"); $query->addWhereClause("type", "= 'ssr'"); $query->addLJoinClause("sejour", "sejour.sejour_id = evenement_ssr.sejour_id"); $query->addColumn("sejour.sejour_id"); $query->addWhereClause(null, "debut NOT BETWEEN DATE(entree) AND DATE(ADDDATE(sortie, 1))"); $query->addWhereClause("sejour.annule", "!= '1'"); $query->addGroup("sejour.sejour_id"); $sejour = new CSejour(); $ds = $sejour->_spec->ds; $evenements_counts = array(); foreach ($ds->loadList($query->makeSelect()) as $row) { $evenements_counts[$row["sejour_id"]] = $row["evenements_count"]; } // Chargement des séjours concernés
/** * Get all the fields' names * * @param bool $name_as_key Put the names in the keys * @param bool $all_groups Load all groups * * @return string[] List of field names */ function getFieldNames($name_as_key = true, $all_groups = true) { $ds = $this->_spec->ds; $req = new CRequest(); $req->addTable($this->_spec->table); $req->addSelect("ex_class_field.name, ex_class_field_translation.std AS locale"); $ljoin = array("ex_class_field_translation" => "ex_class_field_translation.ex_class_field_id = ex_class_field.ex_class_field_id"); $req->addLJoin($ljoin); $this->completeField("ex_group_id"); $where = array(); if ($all_groups) { $ex_group = $this->loadRefExGroup(); $where_ids = array("ex_class_id" => $ds->prepare("= %", $ex_group->ex_class_id)); $ids = $ex_group->loadIds($where_ids); $where["ex_group_id"] = $ds->prepareIn($ids); } else { $where["ex_group_id"] = $ds->prepare("= %", $this->ex_group_id); } $req->addWhere($where); $results = $ds->loadList($req->makeSelect()); if ($name_as_key) { return array_combine(CMbArray::pluck($results, "name"), CMbArray::pluck($results, "locale")); } return array_combine(CMbArray::pluck($results, "locale"), CMbArray::pluck($results, "name")); }
$total += $count; $series[$key]['data'][$i] = array($i, intval($count)); } } break; // Nombre de transferts // Nombre de transferts case "transfers_count": $data[$axe] = array("options" => array("title" => utf8_encode("Nombre de transferts")), "series" => array()); $series =& $data[$axe]['series']; $sejour = new CSejour(); $end = end($dates); $start = reset($dates); $query = new CRequest(); $query->addSelect("sejour.etablissement_sortie_id"); $query->addTable("sejour"); $query->addGroup("sejour.etablissement_sortie_id"); $query->addWhere(array("sejour.entree" => "BETWEEN '{$start}' AND '{$end}'", "sejour.etablissement_sortie_id" => "IS NOT NULL")); $etab_externe_ids = $sejour->_spec->ds->loadColumn($query->makeSelect()); $etab_externe = new CEtabExterne(); $etabs = $etab_externe->loadList(array($etab_externe->_spec->key => $etab_externe->_spec->ds->prepareIn($etab_externe_ids))); $etabs["none"] = $etab_externe; $etabs["none"]->_view = "Non renseigné"; $where["sejour.mode_sortie"] = "= 'transfert'"; $key = 0; foreach ($etabs as $_id => $_etab) { $series[$key] = array('data' => array(), 'label' => utf8_encode($_etab->_view)); $sub_total = 0; foreach ($dates as $i => $_date) { $_date_next = CMbDT::date("+1 {$period}", $_date); $where['sejour.entree'] = "BETWEEN '{$_date}' AND '{$_date_next}'";