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

merged 'quexs-samplesort'

This commit is contained in:
Alex
2015-09-16 00:52:22 +03:00
5 changed files with 107 additions and 12 deletions

View File

@@ -52,6 +52,8 @@ WHERE 1;
/* Remove redundant table */
DROP TABLE `sessions2`;
/* Add sort order feature to questionnaire sample table */
ALTER TABLE `questionnaire_sample` ADD `sort_order` INT( 11 ) NOT NULL DEFAULT '0';
queXS 1.13.1 - Changes since 1.13.0

View File

@@ -93,8 +93,14 @@ if (isset($_GET['questionnaire_id']) && isset($_GET['sample']) && isset($_GET['
$an = 0;
if (isset($_GET['allownew'])) $an = 1;
$sql = "INSERT INTO questionnaire_sample(questionnaire_id,sample_import_id,call_max,call_attempt_max,random_select,answering_machine_messages,allow_new)
VALUES('$questionnaire_id','$sid','$cm','$cam','$selecttype','$am', '$an')";
$sql = "SELECT MAX(sort_order) + 1
FROM questionnaire_sample
WHERE questionnaire_id = '$questionnaire_id'";
$so = $db->GetOne($sql);
$sql = "INSERT INTO questionnaire_sample(questionnaire_id,sample_import_id,call_max,call_attempt_max,random_select,answering_machine_messages,allow_new,sort_order)
VALUES('$questionnaire_id','$sid','$cm','$cam','$selecttype','$am', '$an', '$so')";
$db->Execute($sql);
@@ -176,7 +182,6 @@ if (isset($_POST['edit']))
}
if (isset($_GET['questionnaire_id']) && isset($_GET['rsid']))
{
$questionnaire_id = bigintval($_GET['questionnaire_id']);
@@ -239,7 +244,67 @@ if (isset($_GET['questionnaire_id']) && isset($_GET['rsid']))
<?php
xhtml_foot($js_foot);
die();
}
}
else if (isset($_GET['sort']))
{
if ($_GET['sort'] == "up")
{
//find previous in sort order and do a swap
$sql = "SELECT sample_import_id,sort_order
FROM questionnaire_sample
WHERE questionnaire_id = $questionnaire_id
AND sort_order < (SELECT sort_order FROM questionnaire_sample WHERE questionnaire_id = $questionnaire_id AND sample_import_id = $sid)
ORDER BY sort_order DESC LIMIT 1";
$rs = $db->GetRow($sql);
$ssid = $rs['sample_import_id'];
$sso = $rs['sort_order'];
$sql = "UPDATE questionnaire_sample
SET sort_order = $sso
WHERE sample_import_id = $sid
AND questionnaire_id = $questionnaire_id";
$db->Execute($sql);
$sql = "UPDATE questionnaire_sample
SET sort_order = ($sso + 1)
WHERE sample_import_id = $ssid
AND questionnaire_id = $questionnaire_id";
$db->Execute($sql);
}
else
{
//find next in sort order and do a swap
$sql = "SELECT sample_import_id,sort_order
FROM questionnaire_sample
WHERE questionnaire_id = $questionnaire_id
AND sort_order > (SELECT sort_order FROM questionnaire_sample WHERE questionnaire_id = $questionnaire_id AND sample_import_id = $sid)
ORDER BY sort_order ASC LIMIT 1";
$rs = $db->GetRow($sql);
$ssid = $rs['sample_import_id'];
$sso = $rs['sort_order'];
$sql = "UPDATE questionnaire_sample
SET sort_order = $sso
WHERE sample_import_id = $sid
AND questionnaire_id = $questionnaire_id";
$db->Execute($sql);
$sql = "UPDATE questionnaire_sample
SET sort_order = ($sso - 1)
WHERE sample_import_id = $ssid
AND questionnaire_id = $questionnaire_id";
$db->Execute($sql);
}
}
else
{
//need to remove rsid from questionnaire
@@ -266,7 +331,7 @@ if ($questionnaire_id != false)
print "<div class='clearfix '></div><div class='panel-body'>
<h3 class='text-primary'>". T_("Samples selected for this questionnaire") .":</h3>";
$sql = "SELECT si.description as description,
$sql = "SELECT q.sort_order as sort_order, si.description as description,si.sample_import_id,
CASE WHEN q.call_max = 0 THEN '". TQ_("Unlimited") ."' ELSE q.call_max END as call_max,
CASE WHEN q.call_attempt_max = 0 THEN '". TQ_("Unlimited") . "' ELSE q.call_attempt_max END AS call_attempt_max,
CASE WHEN q.random_select = 0 THEN '". TQ_("Sequential") ."' ELSE '". TQ_("Random") . "' END as random_select,
@@ -276,12 +341,39 @@ if ($questionnaire_id != false)
CONCAT('<a href=\'\' data-toggle=\'confirmation\' data-placement=\'top\' data-href=\"?questionnaire_id=$questionnaire_id&amp;rsid=', si.sample_import_id ,'\" class=\'btn center-block\'><i class=\'fa fa-chain-broken fa-lg\' data-toggle=\'tooltip\' title=\'". TQ_("Click to unassign") ."\'></i></a>') as unassign
FROM questionnaire_sample as q, sample_import as si
WHERE q.sample_import_id = si.sample_import_id
AND q.questionnaire_id = '$questionnaire_id'";
AND q.questionnaire_id = '$questionnaire_id'
ORDER BY q.sort_order ASC";
$qs = $db->GetAll($sql);
if (!empty($qs))
xhtml_table($qs,array("description","call_max","call_attempt_max","answering_machine_messages","random_select","allow_new","edit","unassign"),array(T_("Sample"), T_("Max calls"), T_("Max call attempts"), T_("Answering machine messages"), T_("Selection type"), T_("Allow new numbers to be drawn?"), T_("Edit"), T_("Unassign sample")));
if (!empty($qs))
{
$co = count($qs);
if ($co > 1)
{
for($i = 0; $i < $co; $i++)
{
$down = "<a href='?questionnaire_id=$questionnaire_id&amp;sort=down&amp;rsid={$qs[$i]['sample_import_id']}'><i class=\"fa fa-arrow-down\"></i></a>";
$up = "<a href='?questionnaire_id=$questionnaire_id&amp;sort=up&amp;rsid={$qs[$i]['sample_import_id']}'><i class=\"fa fa-arrow-up\"></i></a>";
if ($i == 0) //down only
{
$qs[$i]['sort_order'] = $down;
}
else if ($i == ($co - 1)) //up only
{
$qs[$i]['sort_order'] = $up;
}
else
{
$qs[$i]['sort_order'] = "$up $down";
}
}
}
else
$qs[0]['sort_order'] = "<i class=\"fa fa-minus\"></i>";
xhtml_table($qs,array("sort_order","description","call_max","call_attempt_max","answering_machine_messages","random_select","allow_new","edit","unassign"),array(T_("Sort order"),T_("Sample"), T_("Max calls"), T_("Max call attempts"), T_("Answering machine messages"), T_("Selection type"), T_("Allow new numbers to be drawn?"), T_("Edit"), T_("Unassign sample")));
}
else
print "<div class='alert text-danger'><h4>". T_("No samples selected for this questionnaire") ."</h4></div>";

View File

@@ -267,7 +267,7 @@ while (!is_process_killed($process_id)) //check if process killed every $sleepin
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_id = c.questionnaire_id AND sample_import_id = s.import_id AND quota_reached = 1) = 0
GROUP BY c.case_id
ORDER BY IF(ISNULL(apn.end),1,0),apn.end ASC, qsep.priority DESC, CONVERT_TZ(NOW(), 'System' , s.Time_zone_name) DESC , a.start ASC";
ORDER BY IF(ISNULL(apn.end),1,0),apn.end ASC, qsep.priority DESC, CONVERT_TZ(NOW(), 'System' , s.Time_zone_name) DESC , a.start ASC, qs.sort_order ASC";
$rs = $db->GetAll($sql);
@@ -308,7 +308,7 @@ while (!is_process_killed($process_id)) //check if process killed every $sleepin
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
GROUP BY s.sample_id,qs.questionnaire_id
ORDER BY qsep.priority DESC, rand() * qs.random_select, s.sample_id";
ORDER BY qsep.priority DESC, rand() * qs.random_select, qs.sort_order ASC";
$rs = $db->GetAll($sql);

View File

@@ -1263,6 +1263,7 @@ CREATE TABLE `questionnaire_sample` (
`random_select` tinyint(1) NOT NULL DEFAULT '0',
`answering_machine_messages` int(11) NOT NULL DEFAULT '1',
`allow_new` tinyint(1) NOT NULL DEFAULT '1',
`sort_order` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`questionnaire_id`,`sample_import_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

View File

@@ -708,7 +708,7 @@ function get_case_id($operator_id, $create = false)
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 ((apn.require_operator_id IS NULL) OR (apn.require_operator_id = '$operator_id'))
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
ORDER BY IF(ISNULL(apn.end),1,0),apn.end ASC, qsep.priority DESC, CONVERT_TZ(NOW(), 'System' , s.Time_zone_name) DESC , a.start ASC
ORDER BY IF(ISNULL(apn.end),1,0),apn.end ASC, qsep.priority DESC, CONVERT_TZ(NOW(), 'System' , s.Time_zone_name) DESC , a.start ASC, qs.sort_order ASC
LIMIT 1";
//apn.appointment_id contains the id of an appointment if we are calling on an appointment
@@ -762,7 +762,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
ORDER BY qsep.priority DESC, CONVERT_TZ(NOW(), 'System' , s.Time_zone_name) DESC, rand() * qs.random_select, s.sample_id
ORDER BY qsep.priority DESC, CONVERT_TZ(NOW(), 'System' , s.Time_zone_name) DESC, rand() * qs.random_select, qs.sort_order ASC
LIMIT 1";
}