2
0
mirror of https://github.com/ACSPRI/queXS synced 2024-04-02 12:12:16 +00:00

Added quota row functionality (ability to assign a quota to remove records by row from a sample)

This commit is contained in:
azammitdcarf
2009-03-27 03:32:03 +00:00
parent 67e206bac5
commit db1bcfb1df
5 changed files with 351 additions and 9 deletions

View File

@@ -302,6 +302,7 @@ function get_case_id($operator_id, $create = false)
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
AND (SELECT count(*) FROM `questionnaire_sample_quota_row` as qsqr, sample_var as sv WHERE qsqr.questionnaire_id = c.questionnaire_id AND qsqr.sample_import_id = s.import_id AND qsqr.quota_reached = 1 and sv.sample_id = s.sample_id AND sv.var = qsqr.exclude_var AND qsqr.exclude_val LIKE sv.val) = 0
ORDER BY apn.start DESC, a.start ASC
LIMIT 1";
@@ -336,6 +337,7 @@ function get_case_id($operator_id, $create = false)
AND !(q.restrict_work_shifts = 1 AND sh.shift_id IS NULL)
AND !(si.call_restrict = 1 AND cr.day_of_week IS NULL)
AND (SELECT count(*) FROM `questionnaire_sample_quota` WHERE questionnaire_id = qs.questionnaire_id AND sample_import_id = s.import_id AND quota_reached = 1) = 0
AND (SELECT count(*) FROM `questionnaire_sample_quota_row` as qsqr, sample_var as sv WHERE qsqr.questionnaire_id = qs.questionnaire_id AND qsqr.sample_import_id = s.import_id AND qsqr.quota_reached = 1 AND sv.sample_id = s.sample_id AND sv.var = qsqr.exclude_var AND qsqr.exclude_val LIKE sv.val) = 0
ORDER BY rand() * qs.random_select, s.sample_id
LIMIT 1";
@@ -959,13 +961,11 @@ function missed_appointment($call_attempt_id)
}
/**
* Check if any quotas apply to this questionnaire
* and if so, update them
*
* @param int $questionnaire_id The questionnaire id
* Update the quota table (sample wide)
*
* @param int $questionnaire_id The questionnaire ID to update
*/
function update_quotas($questionnaire_id)
function update_quota($questionnaire_id)
{
global $db;
@@ -999,6 +999,63 @@ function update_quotas($questionnaire_id)
}
return false;
}
/**
* Update the row quota table
*
* @param int $questionnaire_id The questionnaire ID to update
*/
function update_row_quota($questionnaire_id)
{
global $db;
$sql = "SELECT questionnaire_sample_quota_row_id,q.questionnaire_id,sample_import_id,lime_sgqa,value,comparison,completions,quota_reached,q.lime_sid
FROM questionnaire_sample_quota_row as qsq, questionnaire as q
WHERE qsq.questionnaire_id = '$questionnaire_id'
AND q.questionnaire_id = '$questionnaire_id'";
$rs = $db->GetAll($sql);
if (isset($rs) && !empty($rs))
{
//include limesurvey functions
include_once(dirname(__FILE__).'/functions.limesurvey.php');
//update all row quotas for this questionnaire
foreach($rs as $r)
{
$completions = limesurvey_quota_completions($r['lime_sgqa'],$r['lime_sid'],$r['questionnaire_id'],$r['sample_import_id'],$r['value'],$r['comparison']);
if ($completions >= $r['completions'])
{
//set row quota to reached
$sql = "UPDATE questionnaire_sample_quota_row
SET quota_reached = '1'
WHERE questionnaire_sample_quota_row_id = {$r['questionnaire_sample_quota_row_id']}";
$db->Execute($sql);
}
}
}
return false;
}
/**
* Check if any quotas apply to this questionnaire
* and if so, update them
*
* @param int $questionnaire_id The questionnaire id
*
*/
function update_quotas($questionnaire_id)
{
update_quota($questionnaire_id);
update_row_quota($questionnaire_id);
}