diff --git a/admin/outcomes.php b/admin/outcomes.php index b857662b..800619c8 100644 --- a/admin/outcomes.php +++ b/admin/outcomes.php @@ -1,306 +1,306 @@ - - * @copyright Deakin University 2007,2008 - * @package queXS - * @subpackage admin - * @link http://www.deakin.edu.au/dcarf/ queXS was writen for DCARF - Deakin Computer Assisted Research Facility - * @license http://opensource.org/licenses/gpl-2.0.php The GNU General Public License (GPL) Version 2 - * - */ - -/** - * Configuration file - */ -include_once(dirname(__FILE__).'/../config.inc.php'); - -/** - * Database file - */ -include ("../db.inc.php"); - -/** - * XHTML functions - */ -include ("../functions/functions.xhtml.php"); - -/** - * AAPOR calculation functions - */ -include ("../functions/functions.aapor.php"); - -/** - * Display functions - */ -include ("../functions/functions.display.php"); - -/** - * Performance functions - */ -include ("../functions/functions.performance.php"); - -/** - * Operator functions - */ -include ("../functions/functions.operator.php"); - -/** - * Input functions - */ -include("../functions/functions.input.php"); - -$admin_operator_id = get_operator_id(); - -$questionnaire_id = false; -if (isset($_GET['questionnaire_id'])) $questionnaire_id = bigintval($_GET['questionnaire_id']); - - -xhtml_head(T_("Questionnaire Outcomes"),true,array("../css/table.css"),array("../js/window.js")); - - -print "

" . T_("Select a questionnaire from the list below") . "

"; - -display_questionnaire_chooser($questionnaire_id); - -if ($questionnaire_id != false) -{ - print "

" . T_("Outcomes") . "

"; - - print "

" . T_("Sample status") . "

"; - - $sql = "SELECT CASE WHEN (c.sample_id is not null) = 1 THEN '" . TQ_("Drawn from sample") . "' ELSE '" . TQ_("Remain in sample") . "' END as drawn, - count(*) as count - FROM sample as s - JOIN questionnaire_sample as qs ON (qs.questionnaire_id = '$questionnaire_id' and qs.sample_import_id = s.import_id) - LEFT JOIN `case` as c ON (c.questionnaire_id = qs.questionnaire_id and c.sample_id = s.sample_id) - GROUP BY (c.sample_id is not null)"; - - xhtml_table($db->GetAll($sql),array("drawn","count"),array(T_("Status"),T_("Number"))); - - print "

" . T_("Case availability (cases with temporary or appointment outcomes)") ."

"; - - $sql = "SELECT count(c.case_id) as available, si.description - FROM `case` as c - LEFT JOIN `call` as a on (a.call_id = c.last_call_id) - JOIN (sample as s, sample_import as si) on (s.sample_id = c.sample_id and si.sample_import_id = s.import_id) - JOIN (questionnaire_sample as qs, questionnaire as q, outcome as ou) on (q.questionnaire_id = $questionnaire_id and c.questionnaire_id = q.questionnaire_id and qs.sample_import_id = s.import_id and qs.questionnaire_id = q.questionnaire_id and ou.outcome_id = c.current_outcome_id) - LEFT JOIN shift as sh on (sh.questionnaire_id = q.questionnaire_id and (CONVERT_TZ(NOW(),'System','UTC') >= sh.start) AND (CONVERT_TZ(NOW(),'System','UTC') <= sh.end)) - LEFT JOIN appointment as ap on (ap.case_id = c.case_id AND ap.completed_call_id is NULL AND (ap.start > CONVERT_TZ(NOW(),'System','UTC'))) - LEFT JOIN appointment as apn on (apn.case_id = c.case_id AND apn.completed_call_id is NULL AND (CONVERT_TZ(NOW(),'System','UTC') >= apn.start) AND (CONVERT_TZ(NOW(),'System','UTC') <= apn.end)) - LEFT JOIN call_restrict as cr on (cr.day_of_week = DAYOFWEEK(CONVERT_TZ(NOW(), 'System' , s.Time_zone_name)) and TIME(CONVERT_TZ(NOW(), 'System' , s.Time_zone_name)) >= cr.start and TIME(CONVERT_TZ(NOW(), 'System' , s.Time_zone_name)) <= cr.end) - LEFT JOIN questionnaire_sample_exclude_priority AS qsep ON (qsep.questionnaire_id = c.questionnaire_id AND qsep.sample_id = c.sample_id) - LEFT JOIN case_availability AS casa ON (casa.case_id = c.case_id) - LEFT JOIN availability AS ava ON (ava.availability_group_id = casa.availability_group_id) - WHERE c.current_operator_id IS NULL - AND ou.outcome_type_id IN (1,5) - AND (casa.case_id IS NULL OR (ava.day_of_week = DAYOFWEEK(CONVERT_TZ(NOW(),'System',s.Time_zone_name)) AND TIME(CONVERT_TZ(NOW(), 'System' , s.Time_zone_name)) >= ava.start AND TIME(CONVERT_TZ(NOW(), 'System' , s.Time_zone_name)) <= ava.end )) - AND (a.call_id is NULL or (a.end < CONVERT_TZ(DATE_SUB(NOW(), INTERVAL ou.default_delay_minutes MINUTE),'System','UTC'))) - AND ap.case_id is NULL - AND ((qsep.questionnaire_id is NULL) or qsep.exclude = 0) - AND !(q.restrict_work_shifts = 1 AND sh.shift_id IS NULL AND ou.outcome_type_id != 2) - AND !(si.call_restrict = 1 AND cr.day_of_week IS NULL AND ou.outcome_type_id != 2) - AND ((apn.appointment_id IS NOT NULL) or qs.call_attempt_max = 0 or ((SELECT count(*) FROM call_attempt WHERE case_id = c.case_id) < qs.call_attempt_max)) - AND ((apn.appointment_id IS NOT NULL) or qs.call_max = 0 or ((SELECT count(*) FROM `call` WHERE case_id = c.case_id) < qs.call_max)) - AND (SELECT count(*) FROM `questionnaire_sample_quota` WHERE questionnaire_id = c.questionnaire_id AND sample_import_id = s.import_id AND quota_reached = 1) = 0 - -group by s.import_id"; - - $rs = $db->GetAll($sql); - - if (empty($rs)) - { - print "
" . T_("No cases currently available to call") . "
"; - } - else - { - xhtml_table($rs,array("description","available"),array(T_("Sample"),T_("Cases currently available to call")),"tclass",false,array("available")); - } - - $atime = get_average_time_questionnaire(10,$questionnaire_id); - $mins = intval($atime / 60); - $secs = $atime % 60; - - print "

" . T_("Average time on a completed questionnaire") . ": $mins " . T_("Min") . " $secs " . T_("Secs") . "

"; - - - $sql = "SELECT o.calc, count( c.case_id ) - FROM `case` AS c, `outcome` AS o - WHERE c.questionnaire_id = '$questionnaire_id' - AND c.current_outcome_id = o.outcome_id - GROUP BY o.calc"; - - $a = $db->GetAssoc($sql); - $a = aapor_clean($a); - - - print ""; - print ""; - print ""; - print ""; - print ""; - print "
" . T_("Outcome") . "" . T_("Rate") . "
" . T_("Response Rate 1") . "" . round(aapor_rr1($a),2) . "
" . T_("Refusal Rate 1") . "" . round(aapor_ref1($a),2) . "
" . T_("Cooperation Rate 1") . "" . round(aapor_coop1($a),2) . "
" . T_("Contact Rate 1") . "" . round(aapor_con1($a),2) . "
"; - - - $sql = "SELECT CONCAT('', o.description, '') as des, o.outcome_id, count( c.case_id ) as count, ROUND((count(c.case_id) / (SELECT count(case_id) FROM `case` WHERE questionnaire_id = '$questionnaire_id')) * 100,2) as perc - FROM `case` AS c, `outcome` AS o - WHERE c.questionnaire_id = '$questionnaire_id' - AND c.current_outcome_id = o.outcome_id - GROUP BY o.outcome_id"; - - $rs = $db->GetAll($sql); - - if (!empty($rs)) - { - translate_array($rs,array("des")); - xhtml_table($rs,array("des","count","perc"),array(T_("Outcome"),T_("Count"),T_("%")),"tclass",array("des" => "Complete"),array("count","perc")); - - $operator_id = false; - if (isset($_GET['operator_id'])) $operator_id = bigintval($_GET['operator_id']); - - //display a list of operators - $sql = "SELECT s.operator_id as value,s.firstname as description, CASE WHEN s.operator_id = '$operator_id' THEN 'selected=\'selected\'' ELSE '' END AS selected - FROM operator as s, operator_questionnaire as q - WHERE s.operator_id = q.operator_id - AND q.questionnaire_id = '$questionnaire_id'"; - - $r = $db->GetAll($sql); - - print "

" . T_("Operator") . ": " . "

"; - if(!empty($r)) - display_chooser($r,"operator_id","operator_id",true,"questionnaire_id=$questionnaire_id"); - - if ($operator_id != false) - { - print "

" . T_("Operator call outcomes") . "

"; - - $sql = "SELECT o.description as des, o.outcome_id, count( c.call_id ) as count, ROUND((count(c.call_id) / (SELECT count(call.call_id) FROM `call` JOIN `case` ON (call.case_id = `case`.case_id AND `case`.questionnaire_id = $questionnaire_id ) WHERE call.operator_id = '$operator_id')) * 100,2) as perc - FROM `call` AS c, `case` as ca, `outcome` AS o - WHERE ca.questionnaire_id = '$questionnaire_id' - AND ca.case_id = c.case_id - AND c.operator_id = '$operator_id' - AND c.outcome_id = o.outcome_id - GROUP BY o.outcome_id"; - - $rs = $db->GetAll($sql); - - if (!empty($rs)) - { - translate_array($rs,array("des")); - xhtml_table($rs,array("des","count","perc"),array(T_("Outcome"),T_("Count"),T_("%")),"tclass",array("des" => "Complete"),array("count","perc")); - } - } - - $sample_import_id = false; - if (isset($_GET['sample_import_id'])) $sample_import_id = bigintval($_GET['sample_import_id']); - - //display a list of samples - $sql = "SELECT s.sample_import_id as value,s.description, CASE WHEN s.sample_import_id = '$sample_import_id' THEN 'selected=\'selected\'' ELSE '' END AS selected - FROM sample_import as s, questionnaire_sample as q - WHERE s.sample_import_id = q.sample_import_id - AND q.questionnaire_id = '$questionnaire_id'"; - - $r = $db->GetAll($sql); - - - print "

" . T_("Sample") . ": " . "

"; - if(!empty($r)) - display_chooser($r,"sample_import_id","sample_import_id",true,"questionnaire_id=$questionnaire_id"); - - - if ($sample_import_id != false) - { - print "

" . T_("Sample status") . "

"; - - $sql = "SELECT CASE WHEN (c.sample_id is not null) = 1 THEN '" . TQ_("Drawn from sample") . "' ELSE '" . TQ_("Remain in sample") . "' END as drawn, - count(*) as count - FROM sample as s - JOIN questionnaire_sample as qs ON (qs.questionnaire_id = '$questionnaire_id' and qs.sample_import_id = s.import_id) - LEFT JOIN `case` as c ON (c.questionnaire_id = qs.questionnaire_id and c.sample_id = s.sample_id) - WHERE s.import_id = '$sample_import_id' - GROUP BY (c.sample_id is not null)"; - - xhtml_table($db->GetAll($sql),array("drawn","count"),array(T_("Status"),T_("Number"))); - - - print "

" . T_("Outcomes") . "

"; - - - $sql = "SELECT o.description as des, o.outcome_id, count( c.case_id ) as count,ROUND(count(c.case_id) / (SELECT count(case_id) FROM `case` JOIN sample ON (`case`.sample_id = sample.sample_id AND sample.import_id = '$sample_import_id') WHERE questionnaire_id = '$questionnaire_id' ) * 100,2) as perc - - FROM `case` AS c, `outcome` AS o, sample as s - WHERE c.questionnaire_id = '$questionnaire_id' - AND c.sample_id = s.sample_id - AND s.import_id = '$sample_import_id' - AND c.current_outcome_id = o.outcome_id - GROUP BY o.outcome_id"; - - $rs = $db->GetAll($sql); - - if (!empty($rs)) - { - translate_array($rs,array("des")); - xhtml_table($rs,array("des","count","perc"),array(T_("Outcome"),T_("Count"),T_("%")),"tclass",array("des" => "Complete"),array("count","perc")); - } - else - print "

" . T_("No outcomes recorded for this sample") . "

"; - } - - } - else - print "

" . T_("No outcomes recorded for this questionnaire") . "

"; - - - //display a list of shifts with completions and a link to either add a report or view reports - print "

" . T_("Shifts") . "

"; - - $sql = "SELECT s.shift_id, CONCAT(DATE_FORMAT(CONVERT_TZ(s.start,'UTC',o.Time_zone_name),'" . DATE_TIME_FORMAT ."'), ' - ', DATE_FORMAT(CONVERT_TZ(s.end,'UTC',o.Time_zone_name),'" . DATE_TIME_FORMAT ."')) as description, - CASE WHEN sr.shift_id IS NULL THEN CONCAT('" . TQ_("No shift reports: Add report") . "') ELSE CONCAT('" . TQ_("View shift reports") . "') END AS link, c.completions as completions, CONCAT('" . TQ_("View operator performance") . "') as operform - FROM `shift` as s - JOIN operator as o on (o.operator_id = '$admin_operator_id') - LEFT JOIN shift_report as sr on (sr.shift_id = s.shift_id) - LEFT JOIN ( SELECT count(*) as completions,sh.shift_id - FROM `call` as a, `case` as b, shift as sh - WHERE a.outcome_id = '10' - AND a.case_id = b.case_id - AND b.questionnaire_id = '$questionnaire_id' - AND sh.start <= a.start - AND sh.end >= a.start - GROUP BY sh.shift_id) as c on (s.shift_id = c.shift_id) - WHERE s.questionnaire_id = '$questionnaire_id' - GROUP BY shift_id - ORDER BY s.start ASC"; - - $r = $db->GetAll($sql); - - if (empty($r)) - print "

" . T_("No shifts defined for this questionnaire") . "

"; - else - xhtml_table($r,array("description","completions","link","operform"),array(T_("Shift"),T_("Completions"),T_("Shift report"),T_("Operator performance")),"tclass"); - - - -} - -xhtml_foot(); - -?> - +" . T_("Select a questionnaire") . ""; +display_questionnaire_chooser($questionnaire_id, false, "pull-left col-sm-4", "form-control"); +print "
"; +if ($questionnaire_id != false) +{ + //print "

" . T_("Outcomes") . "

"; + print "
" . T_("Sample status") . "
"; + + $sql = "SELECT CASE WHEN (c.sample_id is not null) = 1 THEN '" . TQ_("Drawn from sample") . "' ELSE '" . TQ_("Remain in sample") . "' END as drawn, + count(*) as count + FROM sample as s + JOIN questionnaire_sample as qs ON (qs.questionnaire_id = '$questionnaire_id' and qs.sample_import_id = s.import_id) + LEFT JOIN `case` as c ON (c.questionnaire_id = qs.questionnaire_id and c.sample_id = s.sample_id) + GROUP BY (c.sample_id is not null)"; + if ($db->GetAll($sql)) xhtml_table($db->GetAll($sql),array("drawn","count"),array(T_("Status"),T_("Number")), "table-hover table table-condensed", false, array("count")); + else print "
" . T_("No samples assigned") . ". 
"; + print "
"; + + print "
" . T_("Case availability (cases with temporary or appointment outcomes)") ."
"; + + $sql = "SELECT count(c.case_id) as available, si.description + FROM `case` as c + LEFT JOIN `call` as a on (a.call_id = c.last_call_id) + JOIN (sample as s, sample_import as si) on (s.sample_id = c.sample_id and si.sample_import_id = s.import_id) + JOIN (questionnaire_sample as qs, questionnaire as q, outcome as ou) on (q.questionnaire_id = $questionnaire_id and c.questionnaire_id = q.questionnaire_id and qs.sample_import_id = s.import_id and qs.questionnaire_id = q.questionnaire_id and ou.outcome_id = c.current_outcome_id) + LEFT JOIN shift as sh on (sh.questionnaire_id = q.questionnaire_id and (CONVERT_TZ(NOW(),'System','UTC') >= sh.start) AND (CONVERT_TZ(NOW(),'System','UTC') <= sh.end)) + LEFT JOIN appointment as ap on (ap.case_id = c.case_id AND ap.completed_call_id is NULL AND (ap.start > CONVERT_TZ(NOW(),'System','UTC'))) + LEFT JOIN appointment as apn on (apn.case_id = c.case_id AND apn.completed_call_id is NULL AND (CONVERT_TZ(NOW(),'System','UTC') >= apn.start) AND (CONVERT_TZ(NOW(),'System','UTC') <= apn.end)) + LEFT JOIN call_restrict as cr on (cr.day_of_week = DAYOFWEEK(CONVERT_TZ(NOW(), 'System' , s.Time_zone_name)) and TIME(CONVERT_TZ(NOW(), 'System' , s.Time_zone_name)) >= cr.start and TIME(CONVERT_TZ(NOW(), 'System' , s.Time_zone_name)) <= cr.end) + LEFT JOIN questionnaire_sample_exclude_priority AS qsep ON (qsep.questionnaire_id = c.questionnaire_id AND qsep.sample_id = c.sample_id) + LEFT JOIN case_availability AS casa ON (casa.case_id = c.case_id) + LEFT JOIN availability AS ava ON (ava.availability_group_id = casa.availability_group_id) + WHERE c.current_operator_id IS NULL + AND ou.outcome_type_id IN (1,5) + AND (casa.case_id IS NULL OR (ava.day_of_week = DAYOFWEEK(CONVERT_TZ(NOW(),'System',s.Time_zone_name)) AND TIME(CONVERT_TZ(NOW(), 'System' , s.Time_zone_name)) >= ava.start AND TIME(CONVERT_TZ(NOW(), 'System' , s.Time_zone_name)) <= ava.end )) + AND (a.call_id is NULL or (a.end < CONVERT_TZ(DATE_SUB(NOW(), INTERVAL ou.default_delay_minutes MINUTE),'System','UTC'))) + AND ap.case_id is NULL + AND ((qsep.questionnaire_id is NULL) or qsep.exclude = 0) + AND !(q.restrict_work_shifts = 1 AND sh.shift_id IS NULL AND ou.outcome_type_id != 2) + AND !(si.call_restrict = 1 AND cr.day_of_week IS NULL AND ou.outcome_type_id != 2) + AND ((apn.appointment_id IS NOT NULL) or qs.call_attempt_max = 0 or ((SELECT count(*) FROM call_attempt WHERE call_attempt.case_id = c.case_id) < qs.call_attempt_max)) + AND ((apn.appointment_id IS NOT NULL) or qs.call_max = 0 or ((SELECT count(*) FROM `call` WHERE `call`.case_id = c.case_id) < qs.call_max)) + AND (SELECT count(*) FROM `questionnaire_sample_quota` WHERE `questionnaire_sample_quota`.questionnaire_id = c.questionnaire_id AND sample_import_id = s.import_id AND `questionnaire_sample_quota`.quota_reached = 1) = 0 + +group by s.import_id"; + + $rs = $db->GetAll($sql); + + if (empty($rs)) + { + print "
" . T_("No cases currently available to call") . "
"; + } + else + { + xhtml_table($rs,array("description","available"),array(T_("Sample"),T_("Cases currently available to call")),"tclass",false,array("available")); + } + print "
"; + + $atime = get_average_time_questionnaire(10,$questionnaire_id); + $mins = intval($atime / 60); + $secs = $atime % 60; + + print "
" . T_("Average time on a completed questionnaire") . ": $mins " . T_("Min") . " $secs " . T_("Secs") . "
"; + + $sql = "SELECT o.calc, count( c.case_id ) + FROM `case` AS c, `outcome` AS o + WHERE c.questionnaire_id = '$questionnaire_id' + AND c.current_outcome_id = o.outcome_id + GROUP BY o.calc"; + + $a = $db->GetAssoc($sql); + $a = aapor_clean($a); + + print ""; // table-hover table table-condensed + print ""; + print ""; + print ""; + print ""; + print "
" . T_("Outcome") . "" . T_("Rate") . "
" . T_("Response Rate 1") . "" . round(aapor_rr1($a),2) . "
" . T_("Refusal Rate 1") . "" . round(aapor_ref1($a),2) . "
" . T_("Cooperation Rate 1") . "" . round(aapor_coop1($a),2) . "
" . T_("Contact Rate 1") . "" . round(aapor_con1($a),2) . "
"; + + $sql = "SELECT count(case_id) FROM `case` WHERE `case`.questionnaire_id = '$questionnaire_id'"; + $cases = $db->GetOne($sql); + + $sql = "SELECT CONCAT('', o.description, '') as des, o.outcome_id, count( c.case_id ) as count, ROUND((count( c.case_id ) / $cases) * 100,2) as perc + FROM `case` AS c, `outcome` AS o + WHERE c.questionnaire_id = '$questionnaire_id' + AND c.current_outcome_id = o.outcome_id + GROUP BY o.outcome_id"; + + $rs = $db->GetAll($sql); + + if (!empty($rs)) + { print "
"; + //print "

" . T_("Total cases for questionnaire") . " = $cases

"; + translate_array($rs,array("des")); + xhtml_table($rs,array("des","count","perc"),array(T_("Outcome"),T_("Count")," " . T_("%")),"tclass",false,array("count","perc"));//array("des" => "Complete") + print "
"; + + $sample_import_id = false; + if (isset($_GET['sample_import_id'])) $sample_import_id = bigintval($_GET['sample_import_id']); + + //display a list of samples + $sql = "SELECT s.sample_import_id as value,s.description, CASE WHEN s.sample_import_id = '$sample_import_id' THEN 'selected=\'selected\'' ELSE '' END AS selected + FROM sample_import as s, questionnaire_sample as q + WHERE s.sample_import_id = q.sample_import_id + AND q.questionnaire_id = '$questionnaire_id'"; + + $r = $db->GetAll($sql); + + + print "

" . T_("Sample") . ": " . "

"; + if(!empty($r)) + display_chooser($r,"sample_import_id","sample_import_id",true,"questionnaire_id=$questionnaire_id",true,true,false,true,"pull-left col-sm-4"); + else print "

" . T_("No samples assigned") . "

"; + if ($sample_import_id != false) + { + print "

" . T_("Sample status") . "

"; + + $sql = "SELECT CASE WHEN (c.sample_id is not null) = 1 THEN '" . TQ_("Drawn from sample") . "' ELSE '" . TQ_("Remain in sample") . "' END as drawn, + count(*) as count + FROM sample as s + JOIN questionnaire_sample as qs ON (qs.questionnaire_id = '$questionnaire_id' and qs.sample_import_id = s.import_id) + LEFT JOIN `case` as c ON (c.questionnaire_id = qs.questionnaire_id and c.sample_id = s.sample_id) + WHERE s.import_id = '$sample_import_id' + GROUP BY (c.sample_id is not null)"; + + xhtml_table($db->GetAll($sql),array("drawn","count"),array(T_("Status"),T_("Number")), "tclass", false, array("count")); + print "
"; + + print "
"; //

" . T_("Outcomes") . "

"; + + + $sql = "SELECT CONCAT('', o.description, '') as des, o.outcome_id, count( c.case_id ) as count,ROUND(count(c.case_id) / (SELECT count(case_id) FROM `case` JOIN sample ON (`case`.sample_id = sample.sample_id AND sample.import_id = '$sample_import_id') WHERE questionnaire_id = '$questionnaire_id' ) * 100,2) as perc + + FROM `case` AS c, `outcome` AS o, sample as s + WHERE c.questionnaire_id = '$questionnaire_id' + AND c.sample_id = s.sample_id + AND s.import_id = '$sample_import_id' + AND c.current_outcome_id = o.outcome_id + GROUP BY o.outcome_id"; + + $rs = $db->GetAll($sql); + + if (!empty($rs)) + { + translate_array($rs,array("des")); + xhtml_table($rs,array("des","count","perc"),array(T_("Outcome"),T_("Count"),T_("%")),"tclass",array("des" => "Complete"),array("count","perc")); + } + else + print "

" . T_("No outcomes recorded for this sample") . "

"; + + print "
"; + } + $operator_id = false; + if (isset($_GET['operator_id'])) $operator_id = bigintval($_GET['operator_id']); + + //display a list of operators !!!worked for this questionnaire_id !!!! + $sql = "SELECT s.operator_id as value, s.firstname as description, CASE WHEN s.operator_id = '$operator_id' THEN 'selected=\'selected\'' ELSE '' END AS selected + FROM `call` as c , `operator`as s, `case` as ca + WHERE ca.questionnaire_id = '$questionnaire_id' + AND ca.case_id = c.case_id + AND c.operator_id = s.operator_id + GROUP by c.operator_id"; + + $r = $db->GetAll($sql); + + print "

" . T_("Operator") . ": " . "

"; + if(!empty($r)) + display_chooser($r,"operator_id","operator_id",true,"questionnaire_id=$questionnaire_id",true,true,false,true,"pull-left col-sm-4"); + else print "

" . T_("No operators assigned") . ". 

"; + print "" ; + if ($operator_id != false) + { + print "

" . T_("Operator call outcomes") . "

"; + + $sql = "SELECT o.description as des, o.outcome_id, count( c.call_id ) as count, ROUND((count(c.call_id) / (SELECT count(call.call_id) FROM `call` JOIN `case` ON (call.case_id = `case`.case_id AND `case`.questionnaire_id = $questionnaire_id ) WHERE call.operator_id = '$operator_id')) * 100,2) as perc + FROM `call` AS c, `case` as ca, `outcome` AS o + WHERE ca.questionnaire_id = '$questionnaire_id' + AND ca.case_id = c.case_id + AND c.operator_id = '$operator_id' + AND c.outcome_id = o.outcome_id + GROUP BY o.outcome_id"; + + $rs = $db->GetAll($sql); + + if (!empty($rs)) + { + translate_array($rs,array("des")); + xhtml_table($rs,array("des","count","perc"),array(T_("Outcome"),T_("Count"),T_("%")),"tclass",array("des" => "Complete"),array("count","perc")); + } + print "
"; + } + + } + else + print "

" . T_("No outcomes recorded for this questionnaire") . "

"; + + + //display a list of shifts with completions and a link to either add a report or view reports + print "
"; + print "

" . T_("Shifts") . ":

"; + + $sql = "SELECT s.shift_id, CONCAT(DATE_FORMAT(CONVERT_TZ(s.start,'UTC',o.Time_zone_name),'" . DATE_FORMAT . "')) as sdate,CONCAT(DATE_FORMAT(CONVERT_TZ(s.start,'UTC',o.Time_zone_name),'" . TIME_FORMAT . "'),'-', DATE_FORMAT(CONVERT_TZ(s.end,'UTC',o.Time_zone_name),'" . TIME_FORMAT . "')) as stime, + CASE WHEN sr.shift_id IS NULL THEN + CONCAT('') + ELSE CONCAT('') + END AS link, + c.completions as completions, + CONCAT('') as operform + FROM `shift` as s + JOIN operator as o on (o.operator_id = '$admin_operator_id') + LEFT JOIN shift_report as sr on (sr.shift_id = s.shift_id) + LEFT JOIN ( SELECT count(*) as completions,sh.shift_id + FROM `call` as a, `case` as b, shift as sh + WHERE a.outcome_id = '10' + AND a.case_id = b.case_id + AND b.questionnaire_id = '$questionnaire_id' + AND sh.start <= a.start + AND sh.end >= a.start + GROUP BY sh.shift_id) as c on (s.shift_id = c.shift_id) + WHERE s.questionnaire_id = '$questionnaire_id' + GROUP BY shift_id + ORDER BY s.start ASC"; + + $r = $db->GetAll($sql); + + if (empty($r)) + print "

" . T_("No shifts defined for this questionnaire") . "

"; + else { + print "
"; + print "
"; + xhtml_table($r,array("sdate","stime","completions","link","operform"),array(T_("Date"),T_("Shift time"),T_("Completions"),T_("Shift report"),T_("Operator performance")),"tclass"); + print "
"; + } +} + +xhtml_foot($js_foot); + +?> \ No newline at end of file