$number_day = $number_day ?: 8; if ($number_day > 31) { $number_day = 31; } elseif ($number_day < 0) { $number_day = 0; } $now = CValue::getOrSession("_date_end", CMbDT::date()); $before = CMbDT::date("-{$number_day} DAYS", $now); CValue::setSession("_number_day", $number_day); CValue::setSession("_date_end", $now); CValue::setSession("_merge_patient", $merge_patient); $patient = new CPatient(); $count_patient = $patient->countList(); $count_status = $patient->countMultipleList(array("status" => "IS NOT NULL"), null, "status", null, array("status")); $patient_link = new CPatientLink(); $count_status[] = array("total" => $patient_link->countList(), "status" => "DPOT"); //répartition total $series = CPatientStateTools::createGraphPie($count_status); foreach ($series["datum"] as $_k => $_serie) { $series["datum"][$_k]["percent"] = $series["count"] > 0 ? round($_serie["data"] / $series["count"] * 100) : 0; } //Répartition par journée $values = array(); $ids = array(); if ($merge_patient) { $results = CPatientStateTools::getPatientMergeByDate($before, $now); for ($i = $number_day; $i >= 0; $i--) { $values["merged"][CMbDT::date("-{$i} DAYS", $now)] = 0; } foreach ($results as $_result) { $values["merged"][$_result["date"]] = array('count' => $_result["total"], 'ids' => $_result['ids']);
/** * Get all number patient by a state and the filter * * @param String $date_min Date minimum * @param String $date_max Date maximum * * @return array */ static function getAllNumberPatient($date_min = null, $date_max = null) { $patients_count = array(); $leftjoin = null; $where = array(); if ($date_min) { $where["entree"] = ">= '{$date_min}'"; $leftjoin["sejour"] = "patients.patient_id = sejour.patient_id"; } if ($date_max) { $where["entree"] = "<= '{$date_max}'"; $leftjoin["sejour"] = "patients.patient_id = sejour.patient_id"; } $ds = CSQLDataSource::get("std"); $request = new CRequest(); $request->addSelect("`status`, COUNT(DISTINCT(`patients`.`patient_id`)) as `total`"); $request->addTable("patients"); $request->addLJoin($leftjoin); $request->addWhere($where); $request->addGroup("`status`"); $result = $ds->loadList($request->makeSelect()); $state_count = array(); foreach ($result as $_result) { $state_count[$_result["status"]] = $_result["total"]; } foreach (self::$list_state as $_state) { $patients_count[CMbString::lower($_state)] = CMbArray::get($state_count, $_state, 0); if ($_state == "CACH") { $where = array("vip" => "= '1'", "status" => "!= 'VALI'"); $patient = new CPatient(); $patients_count[CMbString::lower($_state)] = $patient->countList($where, null, $leftjoin); } if ($_state == "DPOT") { $patient_link = new CPatientLink(); $patients_count[CMbString::lower($_state)] = $patient_link->countList($where, null, array("sejour" => "patient_link.patient_id1 = sejour.patient_id")); } } return $patients_count; }