diff --git a/admin/bulkappointment.php b/admin/bulkappointment.php new file mode 100644 index 00000000..4207539a --- /dev/null +++ b/admin/bulkappointment.php @@ -0,0 +1,272 @@ + + * @copyright Australian Consortium for Social and Political Research (ACSPRI) 2012 + * @package queXS + * @subpackage admin + * @link http://www.acspri.org.au/software queXS was writen for ACSPRI + * @license http://opensource.org/licenses/gpl-2.0.php The GNU General Public License (GPL) Version 2 + * + */ + +/** + * Configuration file + */ +include ("../config.inc.php"); + +/** + * XHTML functions + */ +include ("../functions/functions.xhtml.php"); + +/** + * Database functions + */ +include ("../db.inc.php"); + +/** + * Operator functions + */ +include("../functions/functions.operator.php"); + +/** + * Validate that an uploaded CSV file contains a caseid, starttime and endtime column and generate + * an array containing the details for confirming on screen or updating the database + * + * @param string $tmpfname File name of uploaded CSV file + * + * @return bool|array False if invalid otherwise an array of arrays containing caseid,starttime,endtime and note + * @author Adam Zammit + * @since 2012-11-02 + */ +function validate_bulk_appointment($tmpfname) +{ + $handle = fopen($tmpfname, "r"); + $row = 1; + $cols = array("caseid" => -1,"starttime" => -1,"endtime" => -1); + $index = array(); + $optcols = array("note" => -1); + + $todo = array(); + + while (($data = fgetcsv($handle)) !== FALSE) + { + //data contains an array of elements in the csv + //selected contains an indexed array of elements to import with the type attached + + + if ($row == 1) //validate + { + $colcount = 0; + $ic = 0; + foreach($data as $col) + { + if (array_key_exists(strtolower($col),$cols)) + { + $cols[strtolower($col)] = $ic; + $colcount++; + } + if (array_key_exists(strtolower($col),$optcols)) + { + $optcols[strtolower($col)] = $ic; + } + $ic++; + } + if ($colcount != 3) + { + return false; + } + } + else + { + $note = ""; + if (isset($data[$optcols['note']])) + $note = $data[$optcols['note']]; + + $sd = getdate(strtotime($data[$cols['starttime']])); + $s = $sd['year'] . "-" . str_pad($sd['mon'],2,"0", STR_PAD_LEFT) . "-" . str_pad($sd['mday'],2,"0",STR_PAD_LEFT) . " " . str_pad($sd['hours'],2,"0",STR_PAD_LEFT) . ":" . str_pad($sd['minutes'],2,"0",STR_PAD_LEFT) . ":" . str_pad($sd['seconds'],2,"0",STR_PAD_LEFT); + + $sd = getdate(strtotime($data[$cols['endtime']])); + $e = $sd['year'] . "-" . str_pad($sd['mon'],2,"0", STR_PAD_LEFT) . "-" . str_pad($sd['mday'],2,"0",STR_PAD_LEFT) . " " . str_pad($sd['hours'],2,"0",STR_PAD_LEFT) . ":" . str_pad($sd['minutes'],2,"0",STR_PAD_LEFT) . ":" . str_pad($sd['seconds'],2,"0",STR_PAD_LEFT); + + $todor = array($data[$cols['caseid']],$s,$e,$note); + + $todo[] = $todor; + } + + $row++; + } + + fclose($handle); + + return $todo; +} + + +if (isset($_POST['tmpfname'])) +{ + xhtml_head("queXS",true,array("../css/table.css")); + $todo = validate_bulk_appointment($_POST['tmpfname']); + + if (is_array($todo)) + { + $res = array(); + foreach($todo as $r) + { + $db->StartTrans(); + + //check the current case id exists and outcome is not final + $sql = "SELECT c.case_id + FROM `case` as c, `outcome` as o + WHERE c.current_outcome_id = o.outcome_id + AND o.outcome_type_id != 4 + AND c.case_id = {$r[0]} + AND c.current_operator_id IS NULL"; + + $caseid = $db->GetOne($sql); + + if (!empty($caseid)) + { + //insert an appointment in respondent time + $sql = "SELECT respondent_id + FROM respondent + WHERE case_id = {$r[0]}"; + + $rid = $db->GetOne($sql); + + $sql = "SELECT contact_phone_id + FROM contact_phone + WHERE case_id = {$r[0]} + ORDER BY priority ASC"; + + $cid = $db->GetOne($sql); + + $oid = get_operator_id(); + + $sql = "INSERT INTO call_attempt (call_attempt_id,case_id,operator_id,respondent_id,start,end) + VALUES (NULL,{$r[0]},$oid,$rid,CONVERT_TZ(NOW(),'System','UTC'),CONVERT_TZ(NOW(),'System','UTC'))"; + + $db->Execute($sql); + + $call_attempt_id = $db->Insert_ID(); + + $sql = "INSERT INTO appointment (case_id,contact_phone_id,`start`,`end`,respondent_id,call_attempt_id) + SELECT {$r[0]},$cid,CONVERT_TZ('{$r[1]}',Time_zone_name,'UTC'),CONVERT_TZ('{$r[2]}',Time_zone_name,'UTC'),$rid,$call_attempt_id + FROM respondent + WHERE respondent_id = $rid"; + + $db->Execute($sql); + + $aid = $db->Insert_ID(); + + //change the outcome to unspecified appointment, other + $sql = "UPDATE `case` + SET current_outcome_id = 22 + WHERE case_id = {$r[0]}"; + + $db->Execute($sql); + + //add a note if not blank + if (!empty($r[3])) + { + $note = $db->qstr($r[3]); + $sql = "INSERT INTO case_note (case_id,operator_id,note,datetime) + VALUES ({$r[0]},$oid,$note,CONVERT_TZ(NOW(),'System','UTC'))"; + $db->Execute($sql); + + } + + $cnote = T_("Added appointment") . " $aid"; + } + else + { + $cnote = T_("No such case id, or case set to a final outcome, or case currently assigned to an operator"); + } + + $res[] = array("" . $r[0] . "",$cnote); + $db->CompleteTrans(); + } + xhtml_table($res,array(0,1),array(T_("Case id"),T_("Result"))); + } + xhtml_foot(); +} +else if (isset($_POST['import_file'])) +{ + //file has been submitted + + xhtml_head("queXS",true,array("../css/table.css")); + ?> +
+ " . T_("Please check the case id's, appointment start and end times and notes are correct before accepting below") . "

"; + $todoh = array(T_("Case id"), T_("Start time"), T_("End time"), T_("Note")); + xhtml_table($todo,array(0,1,2,3),$todoh); + ?> + +

+

"/>

+
+ " . T_("The file does not contain at least caseid, starttime and endtime columns. Please try again.") ."

"; + + xhtml_foot(); + +} +else +{ + //need to supply file to upload + xhtml_head(T_("Import: Select file to upload"),true,array("../css/table.css")); + ?> +

+

+

+
+ + + + +
caseidstarttimeendtimenote
12012-08-15 11:00:002012-08-15 13:00:00Appointment automatically generated
22012-08-15 12:00:002012-08-15 14:00:00Appointment automatically generated
32012-08-15 13:00:002012-08-15 15:00:00Appointment automatically generated
+
+

+

+

"/>

+
+ + diff --git a/admin/index.php b/admin/index.php index d9c19cfc..f8bcc807 100644 --- a/admin/index.php +++ b/admin/index.php @@ -92,7 +92,8 @@ print "
  • " . T_("Supervisor functions") . "

    "; print "
  • "; +print "
  • " . T_("Shift reports") . "
  • "; +print "
  • " . T_("Bulk appointment generator") . "
  • "; print "
  • " . T_("System settings") . "

    "; print "