Support browser downloads of orders and uploads of results.
authorRod Roark <rod@sunsetsystems.com>
Fri, 18 Jan 2013 23:11:16 +0000 (18 15:11 -0800)
committerRod Roark <rod@sunsetsystems.com>
Tue, 29 Jan 2013 18:17:10 +0000 (29 10:17 -0800)
interface/orders/gen_hl7_order.inc.php
interface/orders/list_reports.php
interface/orders/load_compendium.php
interface/orders/receive_hl7_results.inc.php

index 256325b..ae87d2b 100644 (file)
@@ -442,6 +442,17 @@ function send_hl7_order($ppid, $out) {
     }
   }
 
+  else if ($protocol == 'DL') {
+    header("Pragma: public");
+    header("Expires: 0");
+    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
+    header("Content-Type: application/force-download");
+    header("Content-Disposition: attachment; filename=order_$msgid.hl7");
+    header("Content-Description: File Transfer");
+    echo $out;
+    exit;
+  }
+
   // TBD: Insert "else if ($protocol == '???') {...}" to support other protocols.
 
   else {
index a0dcf27..b61e19f 100644 (file)
@@ -97,7 +97,7 @@ function openResults(orderid) {
 </head>
 
 <body class="body_top">
-<form method='post' action='list_reports.php'
+<form method='post' action='list_reports.php' enctype='multipart/form-data'
  onsubmit='return validate(this)'>
 
 <?php
@@ -110,6 +110,22 @@ if ($errmsg) {
   echo "<font color='red'>" . text($errmsg) . "</font><br />\n";
 }
 
+// Process uploaded file if there is one.
+if (!empty($_FILES['userfile']['name'])) { // if upload was attempted
+  if (is_uploaded_file($_FILES['userfile']['tmp_name'])) {
+    $hl7 = file_get_contents($_FILES['userfile']['tmp_name']);
+    $msg = receive_hl7_results($hl7);
+    $message = xl('Upload processed successfully');
+    if ($msg) {
+      $message = xl('Error processing upload') . ": " . $msg;
+    }
+    echo text($message) . "<br />\n";
+  }
+  else {
+    echo "<font color='red'>" . xlt('Upload failed!') . "</font><br />\n";
+  }
+}
+
 $form_from_date = empty($_POST['form_from_date']) ? '' : trim($_POST['form_from_date']);
 $form_to_date = empty($_POST['form_to_date']) ? '' : trim($_POST['form_to_date']);
 // if (empty($form_to_date)) $form_to_date = $form_from_date;
@@ -123,7 +139,7 @@ $form_patient = !empty($_POST['form_patient']);
  <tr>
   <td class='text'>
    &nbsp;<?php echo xlt('From'); ?>:
-   <input type='text' size='10' name='form_from_date' id='form_from_date'
+   <input type='text' size='8' name='form_from_date' id='form_from_date'
     value='<?php echo attr($form_from_date); ?>'
     title='<?php echo xla('yyyy-mm-dd'); ?>'
     onkeyup='datekeyup(this,mypcc)' onblur='dateblur(this,mypcc)' />
@@ -132,7 +148,7 @@ $form_patient = !empty($_POST['form_patient']);
     title='<?php echo xla('Click here to choose a date'); ?>' />
 
    &nbsp;<?php echo xlt('To'); ?>:
-   <input type='text' size='10' name='form_to_date' id='form_to_date'
+   <input type='text' size='8' name='form_to_date' id='form_to_date'
     value='<?php echo attr($form_to_date); ?>'
     title='<?php echo xla('yyyy-mm-dd'); ?>'
     onkeyup='datekeyup(this,mypcc)' onblur='dateblur(this,mypcc)' />
@@ -157,7 +173,14 @@ foreach (array('1' => xl('All'), '2' => xl('Reviewed'), '3' => xl('Unreviewed'),
     <?php if ($form_patient) echo 'checked '; ?>/>Current Patient Only
 
    &nbsp;
-   <input type='submit' name='form_refresh' value=<?php echo xla('Refresh'); ?>>
+   <span title='<?php echo xla('You may optionally upload HL7 results from a file'); ?>'>
+   <?php echo xlt('Upload'); ?>:
+   <input type='hidden' name='MAX_FILE_SIZE' value='4000000' />
+   <input type='file' name='userfile' size='8' />
+   </span>
+
+   &nbsp;
+   <input type='submit' name='form_refresh' value=<?php echo xla('Submit'); ?>>
   </td>
  </tr>
 </table>
index 5132d17..7b8bbef 100644 (file)
@@ -357,6 +357,7 @@ if ($form_step == 1) {
             }
           }
         }
+
         else if ($form_action == 2) { // load questions
           // Mark the vendor's current questions inactive.
           sqlStatement("UPDATE procedure_questions SET activity = 0 WHERE lab_id = ?",
@@ -369,7 +370,9 @@ if ($form_step == 1) {
           //   1: Question Code
           //   2: Question
           //   3: Is Required (always "false")
-          //   4: Field Type ("Free Text", "Pre-Defined Text" or "Multiselect Pre-Defined Text")
+          //   4: Field Type ("Free Text", "Pre-Defined Text" or "Drop Down";
+          //      "Drop Down" was previously "Multiselect Pre-Defined Text" and
+          //      indicates that more than one choice is allowed)
           //   5: Response (just one; the row is duplicated for each possible value)
           //
           while (!feof($fhcsv)) {
@@ -385,11 +388,12 @@ if ($form_step == 1) {
               "lab_id = ? AND procedure_code = ? AND question_code = ?",
               array($lab_id, $pcode, $qcode));
 
-            // If this is the first option value and it's Multiselect, then
-            // prepend '+;' to indicate start of a multi-select list.
+            // If this is the first option value and its type is Drop Down, then
+            // prepend '+;' to indicate the start of a multi-select list.
             if (!empty($options) &&
                 (empty($qrow['options']) || empty($qrow['activity'])) &&
-                strpos($acsv[4], 'Multiselect') !== FALSE)
+                (strpos($acsv[4], 'Multiselect') !== FALSE) ||
+                 strpos($acsv[4], 'Drop') !== FALSE))
             {
               $options = '+;' . $options;
             }
index b45a80b..d8ef5be 100644 (file)
@@ -92,7 +92,7 @@ function rhl7ReportStatus($s) {
  * @param  string  &$hl7     The input HL7 text.
  * @return string            Error text, or empty if no errors.
  */
-function receive_hl7_results(&$pprow, &$hl7) {
+function receive_hl7_results(&$hl7) {
   if (substr($hl7, 0, 3) != 'MSH') {
     return xl('Input does not begin with a MSH segment');
   }
@@ -348,7 +348,7 @@ function poll_hl7_results(&$messages) {
           continue;
         }
         // Parse and process its contents.
-        $msg = receive_hl7_results($pprow, $hl7);
+        $msg = receive_hl7_results($hl7);
         if ($msg) {
           $messages[] = xl('Error processing file') . " '$file':" . $msg;
           ++$badcount;