$curr_cross_gender_total += $curr_total; } else { # Genderwise count required. # Create filter $disease_filter = new DiseaseSetFilter(); $disease_filter->patientAgeRange = array(0, 200); $disease_filter->measureId = getLabMeasureIdFromGlobalName($measure->name, $labConfigId); $disease_filter->rangeType = $range_type; $disease_filter->rangeValues = $range_value; ## Count for males. $disease_filter->patientGender = 'M'; $curr_total1 = StatsLib::getDiseaseFilterCount($disease_filter); $curr_male_total += $curr_total1; ## Count for females. $disease_filter->patientGender = 'F'; $curr_total2 = StatsLib::getDiseaseFilterCount($disease_filter); $curr_female_total += $curr_total2; } # Build assoc list to track genderwise totals $male_total[$range_value_count] += $curr_male_total; $female_total[$range_value_count] += $curr_female_total; $cross_gender_total[$range_value_count] += $curr_male_total + $curr_female_total; } } if ($site_settings->groupByGender == 1) { for ($i = 1; $i <= count($range_values); $i++) { $this_male_total = $male_total[$i]; $this_female_total = $female_total[$i]; $this_cross_gender_total = $this_male_total + $this_female_total; } }
} } } } } # # Disease Report related functions # Called from report_disease.php # public static function getDiseaseTotal($lab_config, $test_type, $date_from, $date_to) { # Returns the total number of tests performed during the given date range $query_string = "SELECT COUNT(*) AS val FROM test t, specimen sp " . "WHERE t.test_type_id={$test_type->testTypeId} " . "AND t.specimen_id=sp.specimen_id " . "AND t.result <> '' " . "AND (sp.date_collected BETWEEN '{$date_from}' AND '{$date_to}')"; $saved_db = DbUtil::switchToLabConfig($lab_config->id); $resultset = query_associative_all($query_string, $row_count); DbUtil::switchRestore($saved_db); return $resultset[0]['val']; } public static function setDiseaseSetList($lab_config, $test_type, $date_from, $date_to, $multipleCount = 0) { # Initializes diseaseSetList for capturing params if ($multipleCount == 0) { StatsLib::$diseaseSetList = array(); } $query_string = "SELECT t.result AS result_value, " . "p.sex AS patient_gender, " . "p.patient_id AS patient_id " . "FROM test t, specimen sp, patient p " . "WHERE t.specimen_id=sp.specimen_id " . "AND t.result <> '' " . "AND t.test_type_id={$test_type->testTypeId} " . "AND (sp.date_collected BETWEEN '{$date_from}' AND '{$date_to}') " . "AND sp.patient_id=p.patient_id"; $saved_db = DbUtil::switchToLabConfig($lab_config->id); $resultset = query_associative_all($query_string, $row_count); $measure_list = $test_type->getMeasureIds(); if (count($resultset) == 0 || $resultset == null) { DbUtil::switchRestore($saved_db); return; } foreach ($resultset as $record) { $patient_id = $record['patient_id']; $patient = Patient::getById($patient_id); $current_set = new DiseaseSet(); $current_set->resultValues = array(); $result_csv_parts = explode(",", $record['result_value']); # Build assoc list for result values ## Format: resultValues[measure_id] = result_value for ($i = 0; $i < count($measure_list); $i++) { $result_part = $result_csv_parts[$i]; if (trim($result_part) == "") { continue; } $curr_measure_id = $measure_list[$i]; $current_set->resultValues[$curr_measure_id] = $result_part; }
function get_cumul_stats($lab_config_id, $test_type_id, $date_from, $date_to) { $lab_config = LabConfig::getById($lab_config_id); $test_type = TestType::getById($test_type_id); $measure_list = $test_type->getMeasures(); $site_settings = DiseaseReport::getByKeys($lab_config->id, 0, 0); $age_group_list = $site_settings->getAgeGroupAsList(); ?> <table class='pretty_print' style='border-collapse: collapse;'> <thead> <tr valign='top'> <th><?php echo LangUtil::$generalTerms['TEST']; ?> </th> <th ><?php echo LangUtil::$generalTerms['RESULTS']; ?> </th> <?php if ($site_settings->groupByGender == 1) { echo "<th >" . LangUtil::$generalTerms['GENDER'] . "</th>"; } if ($site_settings->groupByAge == 1) { echo "<th >" . LangUtil::$pageTerms['RANGE_AGE'] . "</th>"; for ($i = 1; $i < count($age_group_list); $i++) { echo "<th >" . LangUtil::$pageTerms['RANGE_AGE'] . "</th>"; } } if ($site_settings->groupByGender == 1) { echo "<th ></th>"; } ?> <th ><?php echo LangUtil::$pageTerms['TOTAL']; ?> </th> <th ><?php echo LangUtil::$pageTerms['TOTAL_TESTS']; ?> </th> </tr> <tr> <th ></th> <th ></th> <?php if ($site_settings->groupByGender == 1) { echo "<th ></th>"; } if ($site_settings->groupByAge == 1) { foreach ($age_group_list as $age_slot) { echo "<th>{$age_slot['0']}"; if (trim($age_slot[1]) == "+") { echo "+"; } else { echo " - {$age_slot['1']}"; } echo "</th>"; } } if ($site_settings->groupByGender == 1) { echo "<th >" . LangUtil::$pageTerms['TOTAL_MF'] . "</th>"; } echo "<th ></th>"; echo "<th ></th>"; ?> <tr> </thead> <tbody> <?php StatsLib::setDiseaseSetList($lab_config, $test_type, $date_from, $date_to); $measures = $test_type->getMeasures(); foreach ($measures as $measure) { $male_total = array(); $female_total = array(); $cross_gender_total = array(); $curr_male_total = 0; $curr_female_total = 0; $curr_cross_gender_total = 0; $disease_report = DiseaseReport::getByKeys($lab_config->id, $test_type->testTypeId, $measure->measureId); if ($disease_report == null) { # TODO: Check for error control # Alphanumeric values. Hence entry not found. //continue; } $is_range_options = true; if (strpos($measure->range, "/") === false) { $is_range_options = false; } $range_values = array(); if ($is_range_options) { # Alphanumeric options $range_values = explode("/", $measure->range); } else { # Numeric ranges: Fetch ranges configured for this test-type/measure from DB $range_values = $disease_report->getMeasureGroupAsList(); } ?> <tr valign='top'> <td><?php echo $measure->getName(); ?> </td> <td> <?php foreach ($range_values as $range_value) { if ($is_range_options) { echo "{$range_value}<br>"; } else { echo "{$range_value['0']}-{$range_value['1']}<br>"; } if ($site_settings->groupByGender == 1) { echo "<br>"; } } ?> </td> <?php if ($site_settings->groupByGender == 1) { # Group by gender set to true echo "<td>"; for ($i = 1; $i <= count($range_values); $i++) { echo "M<br>F<br>"; } } if ($site_settings->groupByAge == 1) { # Group by age set to true: Fetch age slots from DB $age_slot_list = $site_settings->getAgeGroupAsList(); foreach ($age_slot_list as $age_slot) { echo "<td>"; $range_value_count = 0; foreach ($range_values as $range_value) { $range_value_count++; if (!isset($male_total[$range_value_count])) { $male_total[$range_value_count] = 0; $female_total[$range_value_count] = 0; $cross_gender_total[$range_value_count] = 0; } $curr_male_total = 0; $curr_female_total = 0; $curr_cross_gender_total = 0; $range_type = DiseaseSetFilter::$CONTINUOUS; if ($is_range_options == true) { $range_type = DiseaseSetFilter::$DISCRETE; } if ($site_settings->groupByGender == 0) { # No genderwise count required. # Create filter $disease_filter = new DiseaseSetFilter(); $disease_filter->patientAgeRange = $age_slot; $disease_filter->patientGender = null; $disease_filter->measureId = $measure->measureId; $disease_filter->rangeType = $range_type; $disease_filter->rangeValues = $range_value; $curr_total = StatsLib::getDiseaseFilterCount($disease_filter); $curr_cross_gender_total += $curr_total; echo "{$curr_total}<br>"; } else { # Genderwise count required. # Create filter $disease_filter = new DiseaseSetFilter(); $disease_filter->patientAgeRange = $age_slot; $disease_filter->measureId = $measure->measureId; $disease_filter->rangeType = $range_type; $disease_filter->rangeValues = $range_value; ## Count for males. $disease_filter->patientGender = 'M'; $curr_total1 = StatsLib::getDiseaseFilterCount($disease_filter); $curr_male_total += $curr_total1; ## Count for females. $disease_filter->patientGender = 'F'; $curr_total2 = StatsLib::getDiseaseFilterCount($disease_filter); $curr_female_total += $curr_total2; echo "{$curr_total1}<br>{$curr_total2}<br>"; } # Build assoc list to track genderwise totals $male_total[$range_value_count] += $curr_male_total; $female_total[$range_value_count] += $curr_female_total; $cross_gender_total[$range_value_count] += $curr_cross_gender_total; } echo "</td>"; } } else { # Age slots not configured: Show cumulative count for all age values $range_value_count = 0; foreach ($range_values as $range_value) { $range_value_count++; if (!isset($male_total[$range_value_count])) { $male_total[$range_value_count] = 0; $female_total[$range_value_count] = 0; $cross_gender_total[$range_value_count] = 0; } $curr_male_total = 0; $curr_female_total = 0; $curr_cross_gender_total = 0; $range_type = DiseaseSetFilter::$CONTINUOUS; if ($is_range_options == true) { $range_type = DiseaseSetFilter::$DISCRETE; } if ($site_settings->groupByGender == 0) { # No genderwise count required. # Create filter $disease_filter = new DiseaseSetFilter(); $disease_filter->patientAgeRange = array(0, 200); $disease_filter->patientGender = null; $disease_filter->measureId = $measure->measureId; $disease_filter->rangeType = $range_type; $disease_filter->rangeValues = $range_value; $curr_total = StatsLib::getDiseaseFilterCount($disease_filter); $curr_cross_gender_total += $curr_total; } else { # Genderwise count required. # Create filter $disease_filter = new DiseaseSetFilter(); $disease_filter->patientAgeRange = array(0, 200); $disease_filter->measureId = $measure->measureId; $disease_filter->rangeType = $range_type; $disease_filter->rangeValues = $range_value; ## Count for males. $disease_filter->patientGender = 'M'; $curr_total1 = StatsLib::getDiseaseFilterCount($disease_filter); $curr_male_total += $curr_total1; ## Count for females. $disease_filter->patientGender = 'F'; $curr_total2 = StatsLib::getDiseaseFilterCount($disease_filter); $curr_female_total += $curr_total2; } # Build assoc list to track genderwise totals $male_total[$range_value_count] += $curr_male_total; $female_total[$range_value_count] += $curr_female_total; $cross_gender_total[$range_value_count] += $curr_cross_gender_total; } } if ($site_settings->groupByGender == 1) { echo "<td>"; for ($i = 1; $i <= count($range_values); $i++) { $this_male_total = $male_total[$i]; $this_female_total = $female_total[$i]; echo "{$this_male_total}<br>{$this_female_total}<br>"; $this_cross_gender_total = $this_male_total + $this_female_total; } echo "</td>"; } echo "<td>"; for ($i = 1; $i <= count($range_values); $i++) { if ($site_settings->groupByGender == 1) { echo $male_total[$i] + $female_total[$i]; echo "<br><br>"; } else { echo $cross_gender_total[$i]; echo "<br>"; } } echo "</td>"; # Grand total: # TODO: Check the following function for off-by-one error //$disease_total = StatsLib::getDiseaseTotal($lab_config, $test, $date_from, $date_to); //echo "<td >$disease_total</td>"; echo "<td>"; if ($site_settings->groupByGender == 1) { echo array_sum($male_total) + array_sum($female_total); } else { echo array_sum($cross_gender_total); } echo "</td>"; ?> </tr> <?php } ?> </tbody> </table> <?php }