From 892525d80fed694b82fea19411289dda85f56d30 Mon Sep 17 00:00:00 2001 From: Adam Zammit Date: Tue, 28 Jan 2014 14:58:05 +1100 Subject: [PATCH] New tables created for complex quotas Conversion of code to handle new schema begun --- CHANGELOG | 33 +++++++++++++++++++++++++++++ admin/questionnairelist.php | 16 +++++++++++++++ admin/quotareport.php | 27 ++++++++++++++++++------ admin/quotarow.php | 40 +++++++++++------------------------- admin/samplecallattempts.php | 20 +++++++++++++++--- database/quexs.sql | 31 ++++++++++++++++++++++++++++ 6 files changed, 130 insertions(+), 37 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 6943474c..968c2b78 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,36 @@ +CREATE TABLE `qsqr_question` ( + `qsqr_question_id` bigint(20) NOT NULL AUTO_INCREMENT, + `questionnaire_sample_quota_row_id` bigint(20) NOT NULL, + `lime_sgqa` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `value` varchar(2048) COLLATE utf8_unicode_ci NOT NULL, + `comparison` varchar(15) COLLATE utf8_unicode_ci NOT NULL, + `description` text COLLATE utf8_unicode_ci NOT NULL, + PRIMARY KEY (`qsqr_question_id`), + KEY `questionnaire_sample_quota_row_id` (`questionnaire_sample_quota_row_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ; + +CREATE TABLE `qsqr_sample` ( + `qsqr_sample_id` bigint(20) NOT NULL AUTO_INCREMENT, + `questionnaire_sample_quota_row_id` bigint(20) NOT NULL, + `exclude_var` char(128) COLLATE utf8_unicode_ci NOT NULL, + `exclude_val` varchar(256) COLLATE utf8_unicode_ci NOT NULL, + `comparison` varchar(15) COLLATE utf8_unicode_ci NOT NULL, + `description` text COLLATE utf8_unicode_ci NOT NULL, + PRIMARY KEY (`qsqr_sample_id`), + KEY `questionnaire_sample_quota_row_id` (`questionnaire_sample_quota_row_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ; + + +INSERT INTO qsqr_question (questionnaire_sample_quota_row_id,lime_sgqa,value,comparison) +SELECT questionnaire_sample_quota_row_id, lime_sgqa, value, comparison +FROM questionnaire_sample_quota_row; + +INSERT INTO qsqr_sample (questionnaire_sample_quota_row_id,exclude_var,exclude_val,comparison) +SELECT questionnaire_sample_quota_row_id, exclude_var,exclude_val, 'LIKE' +FROM questionnaire_sample_quota_row; + + + queXS 1.10.0 - Changes since 1.9.2 New Feature: Operators can choose extension (see: https://blueprints.launchpad.net/quexs/+spec/operatorextension) diff --git a/admin/questionnairelist.php b/admin/questionnairelist.php index b8a01b0f..4a2b0bf1 100644 --- a/admin/questionnairelist.php +++ b/admin/questionnairelist.php @@ -158,6 +158,22 @@ if (isset($_POST['questionnaire_id']) && isset($_POST['submit'])) $db->Execute($sql); + $sql = "DELETE FROM qsqr_question + WHERE questionnaire_sample_quota_row_id IN ( + SELECT questionnaire_sample_quota_row_id + FROM questionnaire_sample_quota_row + WHERE questionnaire_id = $questionnaire_id)"; + + $db->Execute($sql); + + $sql = "DELETE FROM qsqr_sample + WHERE questionnaire_sample_quota_row_id IN ( + SELECT questionnaire_sample_quota_row_id + FROM questionnaire_sample_quota_row + WHERE questionnaire_id = $questionnaire_id)"; + + $db->Execute($sql); + $sql = "DELETE FROM `questionnaire_sample_quota_row` WHERE questionnaire_id = $questionnaire_id"; diff --git a/admin/quotareport.php b/admin/quotareport.php index 3004ccc3..bf2ddbe5 100644 --- a/admin/quotareport.php +++ b/admin/quotareport.php @@ -179,11 +179,12 @@ if ($questionnaire_id) //a. (Standard quota) Monitor outcomes of questions in completed questionnaires, and exclude selected sample records when completion limit is reached //b. (Replicate quota) Exclude selected sample records (where lime_sgqa == -1) - $sql = "SELECT questionnaire_sample_quota_row_id,lime_sgqa,value,completions,quota_reached,lime_sid,comparison,exclude_var,exclude_val,qsq.description,current_completions, priority, autoprioritise - FROM questionnaire_sample_quota_row as qsq, questionnaire as q + $sql = "SELECT questionnaire_sample_quota_row_id,qsqr_question.lime_sgqa,value,completions,quota_reached,lime_sid,qsq.description,current_completions, priority, autoprioritise + FROM questionnaire_sample_quota_row as qsq, questionnaire as q, qsqr_question WHERE qsq.questionnaire_id = '$questionnaire_id' AND qsq.sample_import_id = '$sample_import_id' - AND q.questionnaire_id = '$questionnaire_id'"; + AND q.questionnaire_id = '$questionnaire_id' + AND qsqr_question.questionnaire_sample_quota_row_id = qsq.questionnaire_sample_quota_row_id"; $r = $db->GetAll($sql); @@ -210,9 +211,23 @@ if ($questionnaire_id) //We need to calc Sample size, Sample drawn, Sample remain $sql = "SELECT (c.sample_id is not null) as type, 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) - JOIN sample_var as sv ON (sv.sample_id = s.sample_id AND sv.var LIKE '{$v['exclude_var']}' AND sv.val LIKE '{$v['exclude_val']}') - LEFT JOIN `case` as c ON (c.questionnaire_id = qs.questionnaire_id and c.sample_id = s.sample_id) + JOIN questionnaire_sample as qs ON (qs.questionnaire_id = '$questionnaire_id' and qs.sample_import_id = s.import_id) "; + + $sql2 = "SELECT exclude_val,exclude_var,comparison + FROM qsqr_sample + WHERE questionnaire_sample_quota_row_id = {$v['questionnaire_sample_quota_row_id']}"; + + $rev = $db->GetAll($sql2); + + //reduce sample by every item in the qsqr_sample table + $x = 1; + foreach($rev as $ev) + { + $sql .= " JOIN sample_var as sv$x ON (sv$x.sample_id = s.sample_id AND sv$x.var LIKE '{$ev['exclude_var']}' AND sv$x.val {$ev['comparison']} '{$ev['exclude_val']}') "; + $x++; + } + + $sql .= " 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)"; diff --git a/admin/quotarow.php b/admin/quotarow.php index b4f3fced..5544a963 100755 --- a/admin/quotarow.php +++ b/admin/quotarow.php @@ -112,12 +112,12 @@ if (isset($_GET['questionnaire_id']) && isset($_GET['sgqa']) && isset($_GET['va if (isset($_GET['questionnaire_id']) && isset($_GET['questionnaire_sample_quota_row_id'])) { - //need to remove quota + //need to edit quota $questionnaire_id = bigintval($_GET['questionnaire_id']); $questionnaire_sample_quota_row_id = bigintval($_GET['questionnaire_sample_quota_row_id']); - open_row_quota($questionnaire_sample_quota_row_id); + //open_row_quota($questionnaire_sample_quota_row_id); } $questionnaire_id = false; @@ -160,9 +160,9 @@ if ($questionnaire_id != false) print "

" . T_("Copied quotas") . "

"; } - print "

" . T_("Current row quotas (click to delete)") . "

"; + print "

" . T_("Current row quotas (click to edit)") . "

"; - $sql = "SELECT questionnaire_sample_quota_row_id,lime_sgqa,value,completions,quota_reached,lime_sid,comparison,exclude_var,exclude_val,current_completions + $sql = "SELECT questionnaire_sample_quota_row_id,qsq.description FROM questionnaire_sample_quota_row as qsq, questionnaire as q WHERE qsq.questionnaire_id = '$questionnaire_id' AND qsq.sample_import_id = '$sample_import_id' @@ -177,7 +177,12 @@ if ($questionnaire_id != false) else { foreach($r as $v) - { + { + print "
" . $v['description'] . ""; + + } + /* + if ($v['lime_sgqa'] == -1) print "
" . T_("Replicate: Where") . " " . $v['exclude_var'] . " " . T_("like") . " " . $v['exclude_val'] . " - "; else if ($v['lime_sgqa'] == -2) @@ -197,30 +202,9 @@ if ($questionnaire_id != false) print "
"; } + */ - - $sql = "SELECT s.sample_import_id as value,s.description, '' AS selected - FROM sample_import as s, questionnaire_sample as q - WHERE q.questionnaire_id = $questionnaire_id - AND q.sample_import_id = s.sample_import_id - AND s.sample_import_id != '$sample_import_id'"; - - $ss = $db->GetAll($sql); - - if (!empty($ss)) - { - print "

" . T_("Copy quotas for this sample to (No error/duplicate checking): "); - display_chooser($ss,"copy_sample_import_id","copy_sample_import_id",false,false,false,false); - print "

"; - - print "

" . T_("Copy quotas for this sample to (No error/duplicate checking) with adjusting: "); - display_chooser($ss,"copy_sample_import_id_with_adjustment","copy_sample_import_id_with_adjustment",false,false,false,false); - print "

"; - } - - } - - + //new quota print "

" . T_("Select a question for the row quota") . "

"; $sql = "SELECT lime_sid diff --git a/admin/samplecallattempts.php b/admin/samplecallattempts.php index 8a37abb5..2be2415c 100644 --- a/admin/samplecallattempts.php +++ b/admin/samplecallattempts.php @@ -77,9 +77,23 @@ function sample_call_attempt_report($questionnaire_id = false, $sample_id = fals $s = "JOIN sample as s ON (s.sample_id = c.sample_id AND s.import_id = '$sample_id')"; $qs = ""; - if ($qsqri !== false) - $qs = "JOIN questionnaire_sample_quota_row as q ON (q.questionnaire_sample_quota_row_id = '$qsqri') - JOIN sample_var ON (sample_var.sample_id = c.sample_id AND sample_var.var LIKE q.exclude_var AND sample_var.val LIKE q.exclude_val)"; + + if ($qsqri !== false) + { + $sql2 = "SELECT exclude_val,exclude_var,comparison + FROM qsqr_sample + WHERE questionnaire_sample_quota_row_id = $qsqri"; + + $rev = $db->GetAll($sql2); + + //reduce sample by every item in the qsqr_sample table + $x = 1; + foreach($rev as $ev) + { + $qs .= " JOIN sample_var as sv$x ON (sv$x.sample_id = c.sample_id AND sv$x.var LIKE '{$ev['exclude_var']}' AND sv$x.val {$ev['comparison']} '{$ev['exclude_val']}') "; + $x++; + } + } $sql = "SELECT ca1 AS callattempts, COUNT( ca1 ) AS sample FROM ( SELECT count( ca.call_attempt_id ) AS ca1 diff --git a/database/quexs.sql b/database/quexs.sql index bf50273b..5c82f807 100644 --- a/database/quexs.sql +++ b/database/quexs.sql @@ -1362,8 +1362,39 @@ CREATE TABLE `process_log` ( -- +-- Table structure for table `qsqr_question` +-- +-- + +CREATE TABLE `qsqr_question` ( + `qsqr_question_id` bigint(20) NOT NULL AUTO_INCREMENT, + `questionnaire_sample_quota_row_id` bigint(20) NOT NULL, + `lime_sgqa` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `value` varchar(2048) COLLATE utf8_unicode_ci NOT NULL, + `comparison` varchar(15) COLLATE utf8_unicode_ci NOT NULL, + `description` text COLLATE utf8_unicode_ci NOT NULL, + PRIMARY KEY (`qsqr_question_id`), + KEY `questionnaire_sample_quota_row_id` (`questionnaire_sample_quota_row_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ; + -- -------------------------------------------------------- +-- +-- Table structure for table `qsqr_sample` +-- + +CREATE TABLE `qsqr_sample` ( + `qsqr_sample_id` bigint(20) NOT NULL AUTO_INCREMENT, + `questionnaire_sample_quota_row_id` bigint(20) NOT NULL, + `exclude_var` char(128) COLLATE utf8_unicode_ci NOT NULL, + `exclude_val` varchar(256) COLLATE utf8_unicode_ci NOT NULL, + `comparison` varchar(15) COLLATE utf8_unicode_ci NOT NULL, + `description` text COLLATE utf8_unicode_ci NOT NULL, + PRIMARY KEY (`qsqr_sample_id`), + KEY `questionnaire_sample_quota_row_id` (`questionnaire_sample_quota_row_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ; + + -- -- Table structure for table `questionnaire` --