4 * Encounter form for entering procedure orders.
7 * @link http://www.open-emr.org
8 * @author Rod Roark <rod@sunsetsystems.com>
9 * @author Brady Miller <brady.g.miller@gmail.com>
10 * @author Sherwin Gaddis <sherwingaddis@gmail.com>
11 * @author Jerry Padgett <sjpadgett@gmail.com>
12 * @author Ranganath Pathak <pathak@scrs1.org>
13 * @copyright Copyright (c) 2010-2017 Rod Roark <rod@sunsetsystems.com>
14 * @copyright Copyright (c) 2017-2019 Brady Miller <brady.g.miller@gmail.com>
15 * @copyright Copyright (c) 2019 Ranganath Pathak <pathak@scrs1.org>
16 * @license https://github.com/openemr/openemr/blob/master/LICENSE GNU General Public License 3
19 require_once(__DIR__
. "/../../globals.php");
20 require_once("$srcdir/api.inc");
21 require_once("$srcdir/forms.inc");
22 require_once("$srcdir/options.inc.php");
23 require_once(__DIR__
. "/../../orders/qoe.inc.php");
24 require_once(__DIR__
. "/../../../custom/code_types.inc.php");
26 use OpenEMR\Common\Csrf\CsrfUtils
;
27 use OpenEMR\Core\Header
;
29 if (!$encounter) { // comes from globals.php
30 die("Internal error: we do not seem to be in an encounter!");
33 // Defaults for new orders.
34 $provider_id = getProviderIdOfEncounter($encounter);
36 'provider_id' => $provider_id,
37 'date_ordered' => date('Y-m-d'),
38 //'date_collected' => date('Y-m-d H:i'),
41 if ($_POST['bn_save_ereq']) { //labcorp
42 $_POST['bn_xmit'] = "transmit";
45 $patient = sqlQueryNoLog("SELECT * FROM `patient_data` WHERE `pid` = ?", array($pid));
47 global $gbl_lab, $gbl_lab_title, $gbl_client_acct;
49 function get_lab_name($id): string
51 global $gbl_lab_title, $gbl_lab, $gbl_client_acct;
52 $tmp = sqlQuery("SELECT name, send_fac_id as clientid, npi FROM procedure_providers Where ppid = ?", array($id));
53 $gbl_lab = stripos($tmp['name'], 'quest') !== false ?
'quest' : 'ammon';
54 $gbl_lab = stripos($tmp['name'], 'labcorp') !== false ?
'labcorp' : $gbl_lab;
55 $gbl_lab = stripos($tmp['name'], 'clarity') !== false ?
'clarity' : $gbl_lab;
56 $gbl_lab_title = trim($tmp['name']);
57 $gbl_client_acct = trim($tmp['clientid']);
61 if (!function_exists('ucname')) {
62 function ucname($string): string
64 $string = ucwords(strtolower($string));
65 foreach (array('-', '\'') as $delimiter) {
66 if (strpos($string, $delimiter) !== false) {
67 $string = implode($delimiter, array_map('ucfirst', explode($delimiter, $string)));
74 function cbvalue($cbname): string
76 return $_POST[$cbname] ?
'1' : '0';
79 function cbinput($name, $colname)
82 $ret = "<input type='checkbox' name='" . attr($name) . "' value='1'";
90 function cbcell($name, $desc, $colname): string
92 return "<td width='25%' nowrap>" . cbinput($name, $colname) . text($desc) . "</td>\n";
95 function QuotedOrNull($fld)
104 function getListOptions($list_id, $fieldnames = array('option_id', 'title', 'seq')): array
107 $query = sqlStatement("SELECT " . implode(',', $fieldnames) . " FROM list_options where list_id = ? AND activity = 1 order by seq", array($list_id));
108 while ($ll = sqlFetchArray($query)) {
109 foreach ($fieldnames as $val) {
110 $output[$ll['option_id']][$val] = $ll[$val];
116 // do not change from $_REQUEST.
117 $formid = (int)($_REQUEST['id'] ??
0);
119 $reload_url = $rootdir . '/patient_file/encounter/view_form.php?formname=procedure_order&id=' . urlencode($formid);
120 $req_url = $GLOBALS['web_root'] . '/controller.php?document&retrieve&patient_id=' . urlencode($pid) . '&document_id=';
123 // If Save or Transmit was clicked, save the info.
125 if ($_POST['bn_save'] ||
!empty($_POST['bn_xmit']) ||
!empty($_POST['bn_save_exit'])) {
126 if (!CsrfUtils
::verifyCsrfToken($_POST["csrf_token_form"])) {
127 CsrfUtils
::csrfNotVerified();
129 $ppid = (int)$_POST['form_lab_id'];
130 if (get_lab_name($ppid) === 'labcorp') {
131 if (!empty($_POST['form_account_facility'])) {
132 $location = sqlQueryNoLog("SELECT f.id, f.facility_code, f.name FROM facility as f " .
133 "WHERE f.id = ?", array($_POST['form_account_facility']));
134 $_POST['form_account'] = $location['facility_code'];
136 $_POST['form_account'] = '';
140 "date_ordered = ?, " .
141 "provider_id = ?, " .
143 "date_collected = ?, " .
144 "order_priority = ?, " .
145 "order_status = ?, " .
146 "billing_type = ?, " .
148 "specimen_fasting = ?, " .
149 "specimen_volume = ?, " .
150 "clinical_hx = ?, " .
151 "patient_instructions = ?, " .
153 "encounter_id = ?, " .
154 "history_order = ?, " .
156 "order_diagnosis = ?, " .
158 "account_facility = ?, " .
159 "collector_id = ?, " .
160 "procedure_order_type = ?";
162 QuotedOrNull($_POST['form_date_ordered']),
163 (int)$_POST['form_provider_id'],
165 QuotedOrNull($_POST['form_date_collected']),
166 $_POST['form_order_priority'],
167 $_POST['form_order_status'],
168 $_POST['form_billing_type'],
169 $_POST['form_order_psc'],
170 $_POST['form_specimen_fasting'] ??
'',
171 $_POST['form_specimen_volume'] ??
'',
172 trim($_POST['form_clinical_hx']),
173 trim($_POST['form_patient_instructions']),
176 trim($_POST['form_history_order']),
177 trim($_POST['form_order_abn']),
178 trim($_POST['form_order_diagnosis']),
179 trim($_POST['form_account']),
180 (int)$_POST['form_account_facility'],
181 (int)$_POST['form_collector_id'],
182 trim($_POST['procedure_type_names']),
184 // If updating an existing form...
187 $query = "UPDATE procedure_order SET $sets WHERE procedure_order_id = ?";
188 $set_array_temp = $set_array;
189 $set_array_temp[] = $formid;
190 sqlStatement($query, $set_array_temp);
191 $gbl_lab = get_lab_name($ppid);
192 $lab_title = $gbl_lab_title . "-$formid";
193 $query = "UPDATE forms SET form_name = ? WHERE encounter = ? AND form_id = ? AND formdir = ?";
194 sqlStatement($query, array($lab_title, $encounter, $formid, 'procedure_order'));
196 $query = "INSERT INTO procedure_order SET $sets";
197 $formid = sqlInsert($query, $set_array);
198 $gbl_lab = get_lab_name($ppid);
199 $lab_title = $gbl_lab_title . "-$formid";
200 addForm($encounter, $lab_title, $formid, "procedure_order", $pid, $userauthorized);
205 $log_file = $GLOBALS["OE_SITE_DIR"] . "/documents/labs/" . check_file_dir_name(get_lab_name($ppid)) . "/logs/" . check_file_dir_name($formid) . "_order_log.log";
206 $order_log = $_POST['order_log'] ??
'';
208 file_put_contents($log_file, $order_log);
210 // Remove any existing procedures and their answers for this order and
211 // replace them from the form.
213 "DELETE FROM procedure_answers WHERE procedure_order_id = ?",
217 "DELETE FROM procedure_order_code WHERE procedure_order_id = ?",
221 for ($i = 0; isset($_POST['form_proc_type'][$i]); ++
$i) {
222 $ptid = $_POST['form_proc_type'][$i] +
0;
227 $prefix = "ans$i" . "_";
230 $procedure_order_seq = sqlQuery("SELECT IFNULL(MAX(procedure_order_seq),0) + 1 AS increment FROM procedure_order_code WHERE procedure_order_id = ? ", array($formid));
232 "INSERT INTO procedure_order_code SET " .
233 "procedure_order_id = ?, " .
235 "procedure_order_title = ?, " .
237 "procedure_code = (SELECT procedure_code FROM procedure_type WHERE procedure_type_id = ?), " .
238 "procedure_name = (SELECT name FROM procedure_type WHERE procedure_type_id = ?)," .
239 "procedure_order_seq = ? ",
242 trim($_POST['form_proc_type_diag'][$i]),
243 trim($_POST['form_proc_order_title'][$i]),
244 trim($_POST['form_transport'][$i]),
247 $procedure_order_seq['increment']
252 $poseq = $procedure_order_seq['increment'];
254 $qres = sqlStatement("SELECT " .
255 "q.procedure_code, q.question_code, q.options, q.fldtype " .
256 "FROM procedure_type AS t " .
257 "JOIN procedure_questions AS q ON q.lab_id = t.lab_id " .
258 "AND q.procedure_code = t.procedure_code AND q.activity = 1 " .
259 "WHERE t.procedure_type_id = ? " .
260 "ORDER BY q.seq, q.question_text", array($ptid));
262 while ($qrow = sqlFetchArray($qres)) {
263 $options = trim($qrow['options']);
264 $qcode = trim($qrow['question_code']);
265 $pcode = trim($qrow['procedure_code']);
266 $fldtype = $qrow['fldtype'];
268 if ($fldtype == 'G') {
269 if ($_POST["G1_$prefix$qcode"]) {
270 $data = $_POST["G1_$prefix$qcode"] * 7 +
$_POST["G2_$prefix$qcode"];
273 $data = $_POST["$prefix$qcode"];
276 if (!isset($data) ||
$data === '') {
280 if (!is_array($data)) {
281 $data = array($data);
284 foreach ($data as $datum) {
285 // Note this will auto-assign the seq value.
287 $answer_seq = sqlQuery("SELECT IFNULL(MAX(answer_seq),0) + 1 AS increment FROM procedure_answers WHERE procedure_order_id = ? AND procedure_order_seq = ? AND question_code = ? ", array($formid, $poseq, $qcode));
289 "INSERT INTO procedure_answers SET " .
290 "procedure_order_id = ?, " .
291 "procedure_order_seq = ?, " .
292 "question_code = ?, " .
295 "procedure_code = ?",
296 array($formid, $poseq, $qcode, $answer_seq['increment'], trim($datum), $pcode)
303 if (isset($_POST['bn_save_exit'])) {
304 formHeader("Redirecting....");
306 $msg = xl('Transmit failed') . ': ' . $alertmsg;
307 echo "\n<script>alert(" . js_escape($msg) . ")</script>\n";
315 if (!empty($_POST['bn_xmit'])) {
316 // Validate, log and send order. Sets up documents and requisition buttons
317 $gbl_lab = get_lab_name($ppid);
320 if ($_POST['form_provider_id'] +
0 < 1) {
321 $order_data .= "\n" . xlt("Ordering Provider is required but not selected!");
324 foreach ($_POST['form_proc_type_diag'] as $diag) {
325 $diag_flag = (!empty($diag) ||
!empty($_POST['form_order_diagnosis'])) ?
(++
$diag_flag) : $diag_flag;
327 if ($diag_flag === 0) {
328 $order_data .= "\n" . xlt("At least one diagnosis is required! Please add a diagnosis for this order.");
330 if ($_POST['form_order_abn'] === 'required') {
331 $order_data .= "\n" . xlt("ABN is required but not signed!");
333 if (!$_POST['form_date_collected'] && !$_POST['form_order_psc']) {
334 $order_data .= "\n" . xlt("Specimen Collections date has not been entered and this is not a PSC Hold Order!");
337 $alertmsg = date('Y-m-d H:i') . " " . xlt("Prior Validations Errors") . $order_data;
338 $order_data .= "\n<span class='text-danger'>" . "- " .
339 xlt("Please resolve errors and resubmit order.") .
341 $order_data = nl2br($order_data);
343 $alertmsg = $order_log . "\n" . $alertmsg;
344 $order_log = $alertmsg; // persist log
346 $order_log = $alertmsg;
349 file_put_contents($log_file, $order_log);
350 } else { // drop through if no errors..
351 if ($gbl_lab === 'ammon' ||
$gbl_lab === 'clarity') {
352 require_once(__DIR__
. "/../../procedure_tools/gen_universal_hl7/gen_hl7_order.inc.php");
353 $alertmsg = gen_hl7_order($formid, $hl7);
354 } elseif ($gbl_lab === 'labcorp') {
355 require_once(__DIR__
. "/../../procedure_tools/labcorp/ereq_form.php");
356 require_once(__DIR__
. "/../../procedure_tools/labcorp/gen_hl7_order.inc.php");
357 $alertmsg = gen_hl7_order($formid, $hl7, $reqStr);
358 } else { // Default lab. Add more labs here.
359 require_once(__DIR__
. "/../../orders/gen_hl7_order.inc.php");
360 $alertmsg = gen_hl7_order($formid, $hl7);
362 if (empty($alertmsg)) {
363 if (empty($_POST['bn_save_ereq'])) {
364 $alertmsg = send_hl7_order($ppid, $hl7);
367 $order_data .= $alertmsg;
369 if (empty($alertmsg)) {
371 if (empty($_POST['bn_save_ereq'])) {
372 sqlStatement("UPDATE procedure_order SET date_transmitted = NOW() WHERE procedure_order_id = ?", array($formid));
373 $order_log .= "\n" . date('Y-m-d H:i') . " " .
374 xlt("Order Successfully Sent") . "...\n" .
375 xlt("Order HL7 Content") .
377 if ($_POST['form_order_psc']) {
378 if ($gbl_lab === 'labcorp') {
379 $order_log .= "\n" . date('Y-m-d H:i') . " " .
380 xlt("Generating and charting requisition for PSC Hold Order") . "...\n";
381 ereqForm($pid, $encounter, $formid, $reqStr, $savereq);
385 if (isset($_POST['bn_save_ereq'])) {
388 if ($gbl_lab === 'labcorp') {
389 // Manual requisition
390 $order_log .= "\n" . date('Y-m-d H:i') . " " .
391 xlt("Generating requisition based on order HL7 content") . "...\n" . $hl7 . "\n";
392 ereqForm($pid, $encounter, $formid, $reqStr, $savereq);
395 file_put_contents($log_file, $order_log);
398 $alertmsg = $order_log . "\n" . $alertmsg;
399 $order_log = $alertmsg; // persist log
401 $order_log = $alertmsg;
403 file_put_contents($log_file, $order_log);
406 unset($_POST['bn_xmit']);
408 unset($_POST['bn_save']);
409 $reload_url = $rootdir . '/patient_file/encounter/view_form.php?formname=procedure_order&id=' . attr($formid);
410 if (empty($order_data)) {
411 header('Location:' . $reload_url);
415 if (!empty($formid)) {
416 $row = sqlQuery("SELECT * FROM procedure_order WHERE procedure_order_id = ?", array($formid));
420 "SELECT p.fname, p.mname, p.lname, fe.date FROM " .
421 "form_encounter AS fe, forms AS f, patient_data AS p WHERE " .
422 "p.pid = ? AND f.pid = p.pid AND f.encounter = ? AND " .
423 "f.formdir = 'newpatient' AND f.deleted = 0 AND " .
424 "fe.id = f.form_id LIMIT 1",
425 array($pid, $encounter)
428 $bill_type = $row['billing_type'];
429 $gbl_lab = get_lab_name($row['lab_id']);
432 $location = sqlQueryNoLog("SELECT f.id, f.facility_code, f.name FROM facility as f " .
433 "WHERE f.id = ?", array($row['account_facility']));
435 $location = sqlQueryNoLog("SELECT f.id, f.facility_code, f.name FROM users as u " .
436 "INNER JOIN facility as f ON u.facility_id = f.id WHERE u.id = ?", array($row['provider_id']));
438 $account = $location['facility_code'];
439 $account_name = $location['name'];
440 $account_facility = $location['id'];
441 if (!empty($row['lab_id'])) {
442 $log_file = $GLOBALS["OE_SITE_DIR"] . "/documents/labs/" . check_file_dir_name(get_lab_name($row['lab_id'])) . "/logs/";
444 if (!is_dir($log_file)) {
445 if (!mkdir($log_file, 0755, true) && !is_dir($log_file)) {
446 throw new \
RuntimeException(sprintf('Directory "%s" was not created', $log_file));
450 $log_file .= check_file_dir_name($formid) . '_order_log.log';
451 if (file_exists($log_file)) {
452 $order_log = file_get_contents($log_file);
459 <?php Header
::setupHeader(['datetime-picker']); ?
>
462 // Some JS Globals that will be useful.
464 var currentLabId
= <?php
echo js_escape($row['lab_id']); ?
>;
465 var currentLab
= <?php
echo js_escape($gbl_lab); ?
>;
466 var currentLabTitle
= <?php
echo js_escape($gbl_lab_title); ?
>;
467 var viewmode
= <?php
echo !empty($viewmode) ?
1 : 0 ?
>;
468 var refreshForm
= <?php
echo js_escape($reload_url); ?
>;
470 function processSubmit(od
) { // not used yet
471 $
("#form_order_abn").val(od
.order_abn
);
472 $
("#bn_save").click();
475 function initCalendars() {
477 <?php
$datetimepicker_timepicker = false; ?
>
478 <?php
$datetimepicker_showseconds = false; ?
>
479 <?php
$datetimepicker_formatInput = false; ?
>
480 <?php
require($GLOBALS['srcdir'] . '/js/xl/jquery-datetimepicker-2-5-4.js.php'); ?
>
482 var datetimepicker
= {
483 <?php
$datetimepicker_timepicker = true; ?
>
484 <?php
$datetimepicker_showseconds = false; ?
>
485 <?php
$datetimepicker_formatInput = false; ?
>
486 <?php
require($GLOBALS['srcdir'] . '/js/xl/jquery-datetimepicker-2-5-4.js.php'); ?
>
488 $
('.datepicker').datetimepicker(datepicker
);
489 $
('.datetimepicker').datetimepicker(datetimepicker
);
492 function initDeletes() {
493 $
(".itemDelete").on("click", function (event
) {
498 function deleteRow(event
) {
499 event
.preventDefault();
500 event
.stopPropagation();
501 let target
= $
(event
.currentTarget
).closest('tr').find("input[name^='form_proc_type_desc']").val();
504 yn
= confirm(<?php
echo xlj("Confirm to remove item") ?
> +
"\n" + target
);
506 $
(event
.currentTarget
).closest(".proc-table").remove();
509 // This invokes the find-procedure-type popup.
510 // formseq = 0-relative index in the form.
511 function sel_proc_type(formseq
) {
512 let f
= document
.forms
[0];
513 gbl_formseq
= formseq
;
514 let ptvarname
= 'form_proc_type[' + formseq +
']';
516 let title
= <?php
echo xlj("Find Procedure Order"); ?
>;
517 // This replaces the previous search for an easier/faster order picker tool.
518 dlgopen('../../orders/find_order_popup.php' +
519 '?labid=' +
encodeURIComponent(f
.form_lab_id
.value
) +
520 '&order=' +
encodeURIComponent(f
[ptvarname
].value
) +
521 '&formid=' +
<?php
echo js_url($formid); ?
> +
522 '&formseq=' +
encodeURIComponent(formseq
),
523 '_blank', 850, 500, '', title
);
526 // This is for callback by the find-procedure-type popup.
527 // Sets both the selected type ID and its descriptive name.
528 // Also set diagnosis if supplied in configuration and custom test groups.
529 function set_proc_type(typeid
, typename
, diagcodes
= '', temptype
, testid
, newCnt
= 0) {
530 let f
= document
.forms
[0];
531 let ptvarname
= 'form_proc_type[' + gbl_formseq +
']';
532 let ptdescname
= 'form_proc_type_desc[' + gbl_formseq +
']';
533 let ptcodes
= 'form_proc_type_diag[' + gbl_formseq +
']';
534 let pttransport
= 'form_transport[' + gbl_formseq +
']';
535 let ptproccode
= 'form_proc_code[' + gbl_formseq +
']';
538 f
[pttransport
].value
= temptype
;
539 f
[ptvarname
].value
= typeid
;
540 f
[ptdescname
].value
= typename
;
541 f
[ptproccode
].value
= testid
;
543 f
[ptcodes
].value
= diagcodes
;
545 gbl_formseq
= addProcLine(true);
549 // This is also for callback by the find-procedure-type popup.
550 // Sets the contents of the table containing the form fields for questions.
551 function set_proc_html(s
, js
) {
552 document
.getElementById('qoetable[' + gbl_formseq +
']').innerHTML
= s
;
556 // New lab selected so clear all procedures and questions from the form.
557 function lab_id_changed(el
) {
559 let msg
= "Changing Labs will clear this order.\nAre you sure you want to continue?";
561 $
("#form_lab_id").val(currentLabId
);
565 top
.restoreSession();
566 let lab
= $
("#form_lab_id option:selected").text();
567 if (lab
.toLowerCase().indexOf('quest') !== -1) currentLab
= 'quest';
568 if (lab
.toLowerCase().indexOf('ammon') !== -1) currentLab
= 'ammon';
569 if (lab
.toLowerCase().indexOf('labcorp') !== -1) currentLab
= 'labcorp';
570 if (lab
.toLowerCase().indexOf('clarity') !== -1) currentLab
= 'clarity';
572 let f
= document
.forms
[0];
573 for (let i
= 0; true; ++i
) {
574 let ix
= '[' + i +
']';
575 if (!f
['form_proc_type' + ix
]) break;
576 let target
= '#procedures_item_' + i
;
577 $
(target
).closest(".proc-table").remove();
581 $
("#bn_save").click();
587 function addProcedure() {
588 $
(".procedure-order-container").append($
(".procedure-order").clone());
589 let newOrder
= $
(".procedure-order-container .procedure-order:last");
590 $
(newOrder +
" label:first").append("1");
593 function addProcLine(flag
= false) {
594 let f
= document
.forms
[0];
596 for (; f
['form_proc_type[' + i +
']']; ++i
) ;
597 // build new item html.. a hidden html block to clone may be better here.
598 let cell
= "<table class='table table-sm proc-table'><tr>" +
599 "<input type='hidden' name='form_proc_code[" + i +
"]' value= />" +
600 "<td onclick='deleteRow(event)' class='itemDelete'><i class='fa fa-trash'></i></td>" +
601 "<td class='itemTransport quest'><input readonly class='itemTransport form-control' type='text' onclick='getDetails(event, " + i +
")' name='form_transport[" + i +
"]' value=''></td>" +
602 "<td class='procedure-div'><input type='hidden' name='form_proc_order_title[" + i +
"]' value=procedure>" +
603 "<input type='text' class='form-control c-hand' name='form_proc_type_desc[" + i +
"]' onclick='sel_proc_type(" + i +
")' " +
604 "onfocus='this.blur()' title='<?php echo xla('Click to select the desired procedure'); ?>' readonly /> " +
605 "<input type='hidden' name='form_proc_type[" + i +
"]' value='-1' /></td>" +
606 "<td class='diagnosis-div input-group'>" +
607 "<div class='input-group-prepend'><span class='btn btn-secondary input-group-text'>" +
608 "<i onclick='current_diagnoses(this)' class='fa fa-search fa-lg' title='<?php echo xla('Click to search past and current diagnoses history'); ?>'></i></span></div>" +
609 "<input type='text' class='form-control c-hand' name='form_proc_type_diag[" + i +
"]' onclick='sel_related(this.name)'" +
610 "title='<?php echo xla('Click to add diagnosis for this test'); ?>' onfocus='this.blur()' readonly /></td>" +
611 "<td><div class='table-responsive' id='qoetable[" + i +
"]'></div></td></tr></table>";
613 $
(".procedure-order-container").append(cell
); // add the new item to procedures list
617 if (!flag
) {// flag true indicates add procedure item from custom group callback with current index.
625 // The name of the form field for find-code popup results.
626 var rcvarname
, targetElement
, targetProcedure
;
628 function current_diagnoses(whereElement
) {
629 targetProcedure
= whereElement
.parentElement
.parentElement
.parentElement
.previousElementSibling
;
630 targetElement
= whereElement
.parentElement
.parentElement
.nextElementSibling
;
631 let title
= <?php
echo xlj("Diagnosis Codes History"); ?
>;
632 dlgopen('find_code_history.php', 'dxDialog', 'modal-mlg', 450, '', title
, {
634 {text
: '<?php echo xla('Save
'); ?>', id
: 'saveDx', style
: 'primary btn-save'},
635 {text
: '<?php echo xla('Help
'); ?>', id
: 'showTips', style
: 'primary btn-show'},
636 {text
: '<?php echo xla('Cancel
'); ?>', close
: true, style
: 'secondary btn-cancel'},
641 // This is for callback by the find-code popup.
642 // Appends to or erases the current list of related codes.
643 function set_related(codetype
, code
, selector
, codedesc
) {
644 var f
= document
.forms
[0];
645 var s
= f
[rcvarname
].value
;
647 if (s
.length
> 0) s +
= ';';
648 s +
= codetype +
':' + code
;
652 f
[rcvarname
].value
= s
;
655 // This invokes the find-code popup.
656 function sel_related(varname
) {
658 // codetype is just to make things easier and avoid mistakes.
659 // Might be nice to have a lab parameter for acceptable code types.
660 // Also note the controlling script here runs from interface/patient_file/encounter/.
661 let title
= '<?php echo xla("Select Diagnosis Codes"); ?>';
662 <?php
/*echo attr(collect_codetypes("diagnosis", "csv")); */?
>
663 dlgopen(top
.webroot_url +
'/interface/patient_file/encounter/find_code_dynamic.php?codetype=ICD10', '_blank', 985, 750, '', title
);
666 // This is for callback by the find-code popup.
667 // Returns the array of currently selected codes with each element in codetype:code format.
668 function get_related() {
669 return document
.forms
[0][rcvarname
].value
.split(';');
672 // This is for callback by the find-code popup.
673 // Deletes the specified codetype:code from the currently selected list.
674 function del_related(s
) {
675 my_del_related(s
, document
.forms
[0][rcvarname
], false);
678 var transmitting
= false;
680 // Issue a Cancel/OK warning if a previously transmitted order is being transmitted again.
681 function validate(f
, e
) {
682 <?php
if (!empty($row['date_transmitted'])) { ?
>
684 if (!confirm(<?php
echo xlj('This order was already transmitted on') ?
> +
' ' +
685 <?php
echo js_escape($row['date_transmitted']) ?
> +
'. ' +
686 <?php
echo xlj('Are you sure you want to transmit it again?'); ?
>)) {
691 $
(".wait").removeClass('d-none');
692 top
.restoreSession();
697 // calendars need to be available to init dynamically for procedure item adds.
703 error
: function (jqXHR
, exception
) {
704 if (jqXHR
.status
=== 0) {
705 alert('Not connected to network.');
706 } else if (jqXHR
.status
== 404) {
707 alert('Requested page not found. [404]');
708 } else if (jqXHR
.status
== 500) {
709 alert('Internal Server Error [500].');
710 } else if (exception
=== 'parsererror') {
711 alert('Requested JSON parse failed.');
712 } else if (exception
=== 'timeout') {
713 alert('Time out error.');
714 } else if (exception
=== 'abort') {
715 alert('Ajax request aborted.');
717 alert('Uncaught Error.\n' + jqXHR
.responseText
);
723 <?php
if ($row['date_transmitted']) { ?
>
724 $
("#summary").collapse("toggle");
728 function getDetails(e
, id
) {
729 top
.restoreSession();
730 let f
= document
.forms
[0];
731 let codeattr
= 'form_proc_code[' + id +
']';
732 let codetitle
= 'form_proc_type_desc[' + id +
']';
733 let code
= f
[codeattr
].value
;
734 let url
= top
.webroot_url +
"/interface/procedure_tools/libs/labs_ajax.php";
735 url +
= "?action=code_detail)&code=" +
encodeURIComponent(code
) +
736 "&csrf_token_form=" +
<?php
echo js_url(CsrfUtils
::collectCsrfToken()); ?
>;
737 let title
= <?php
echo xlj("Test") ?
> +
": " + code +
" " + f
[codetitle
].value
;
738 dlgopen(url
, 'details', 'modal-md', 200, '', title
, {
740 {text
: '<?php echo xla('Got It
'); ?>', close
: true, style
: 'secondary btn-sm'}
745 function initForm(reload
= false) {
751 $
(".labcorp").hide();
752 $
(".clarity").hide();
753 $
(".defaultProcedure").hide();
755 if (currentLab
=== 'ammon') {
757 } else if (currentLab
=== 'quest') {
759 } else if (currentLab
=== 'labcorp') {
760 $
(".labcorp").show();
761 } else if (currentLab
=== 'clarity') {
762 $
(".clarity").show();
763 } else if (currentLab
=== '') {
764 $
(".defaultProcedure").show();
768 function createLabels(e
) {
770 let prmt
= <?php
echo js_escape(xla("How many sets of specimen labels to create?") .
771 "\n" . xla("Each test in order gets a label.")); ?
>;
772 let count
= prompt(prmt
, '1');
773 if (!count
) return false;
775 let f
= document
.forms
[0];
778 for (; f
['form_transport[' + i +
']']; ++i
) {
779 transport
= f
['form_transport[' + i +
']'].value
;
780 transport
= transport
> '' ? transport
: 'none';
781 tarray +
= transport +
";";
783 let printer
= 'file';
784 let acctid
= <?php
echo js_escape($gbl_client_acct); ?
>;
785 let order
= f
.id
.value
;
786 let patient
= <?php
echo js_escape($patient['lname'] . ', ' . $patient['fname'] . ' ' . $patient['mname']); ?
>;
787 let pid
= <?php
echo js_escape($patient['pid']); ?
>;
788 let url
= top
.webroot_url +
"/interface/procedure_tools/libs/labs_ajax.php";
789 // this escapes above
790 let uri
= "?action=print_labels&count=" +
encodeURIComponent(count
) +
"&order=" +
encodeURIComponent(order
) +
"&pid=" +
encodeURIComponent(pid
) +
791 "&acctid=" +
encodeURIComponent(acctid
) +
"&patient=" +
encodeURIComponent(patient
) +
"&specimen=" +
encodeURIComponent(tarray
) +
792 "&csrf_token_form=" +
<?php
echo js_url(CsrfUtils
::collectCsrfToken()); ?
>;
794 // retrieve the labels
795 dlgopen(url + uri
, 'pdf', 'modal-md', 750, '');
799 $
(".wait").removeClass('d-none');
804 @media only screen
and (max
-width
: 768px
) {
807 text
-align
: left
!important
;
819 .proc
-table
.itemDelete
{
821 color
: var(--danger
);
825 .proc
-table
.itemTransport
{
832 .proc
-table
.procedure
-div
{
836 .proc
-table
.diagnosis
-div
{
846 $name = $enrow['fname'] . ' ';
847 $name .= (!empty($enrow['mname'])) ?
$enrow['mname'] . ' ' . $enrow['lname'] : $enrow['lname'];
848 $date = xl('on') . ' ' . oeFormatShortDate(substr($enrow['date'], 0, 10));
849 $title = array(xl('Order for'), $name, $date);
851 <body
class="body_top" onsubmit
="doWait(event)">
852 <div
class="container">
853 <div
class="page-header">
854 <h2
><?php
echo implode(" ", $title); ?
></h2
>
856 <div
class="col-md-12">
857 <form
class="form form-horizontal" method
="post" action
="" onsubmit
="return validate(this,event)">
858 <input type
="hidden" name
="csrf_token_form" value
="<?php echo attr(CsrfUtils::collectCsrfToken()); ?>" />
859 <input type
='hidden' name
='id' value
='<?php echo attr($formid) ?>' />
860 <fieldset
class="row">
861 <legend data
-toggle
="collapse" data
-target
="#orderOptions">
862 <i
class="fa fa-plus"></i
>
863 <?php
echo xlt('Select Options for Current Order Id') . ' ' . (text($formid) ?
text($formid) : 'New Order') ?
>
865 <div
class="col-md-12 collapse show" id
="orderOptions">
866 <div
class="form-group form-row">
867 <label
for="provider_id" class="col-form-label col-md-2"><?php
echo xlt('Ordering Provider'); ?
></label
>
868 <div
class="col-md-2">
869 <?php
generate_form_field(array('data_type' => 10, 'field_id' => 'provider_id'), $row['provider_id']); ?
>
871 <label
for="form_date_ordered" class="col-form-label col-md-2"><?php
echo xlt('Order Date'); ?
></label
>
872 <div
class="col-md-2">
873 <input type
='text' class='datepicker form-control'
874 name
='form_date_ordered'
875 id
='form_date_ordered'
876 value
="<?php echo attr($row['date_ordered']); ?>"
877 title
="<?php echo xla('Date of this order'); ?>" />
879 <label
for="lab_id" class="col-form-label col-md-2"><?php
echo xlt('Sending To'); ?
></label
>
880 <div
class="col-md-2">
881 <select name
='form_lab_id' id
='form_lab_id' onchange
='lab_id_changed(this)' class='form-control'>
883 $ppres = sqlStatement("SELECT `ppid`, name FROM `procedure_providers` WHERE `active` = 1 ORDER BY name, ppid");
884 while ($pprow = sqlFetchArray($ppres)) {
885 echo "<option value='" . attr($pprow['ppid']) . "'";
886 if ($pprow['ppid'] == $row['lab_id']) {
888 $gbl_lab = get_lab_name($pprow['ppid']);
890 echo ">" . text($pprow['name']) . "</option>";
895 <div
class="clearfix"></div
>
897 <div
class="form-group form-row">
898 <label
for="form_order_psc" class="col-form-label col-md-2"><?php
echo xlt('PSC Hold Order'); ?
></label
>
899 <div
class="col-md-2">
901 $pscOrderOpts = array(
903 'field_id' => 'order_psc',
904 'list_id' => 'boolean'
906 generate_form_field($pscOrderOpts, $row['order_psc']);
909 <label
for="form_date_collected" class="col-form-label col-md-2"><?php
echo xlt('Time Collected'); ?
></label
>
910 <div
class="col-md-2">
911 <input
class='datetimepicker form-control'
913 name
='form_date_collected'
914 id
='form_date_collected'
915 value
="<?php echo attr(substr($row['date_collected'], 0, 16)); ?>"
916 title
="<?php echo xla('Date and time that the sample was collected'); ?>" />
918 <label
for="form_account_facility" class="col-form-label col-md-2 labcorp"><?php
echo xlt('Sending From'); ?
></label
>
919 <div
class="col-md-2 labcorp">
920 <select name
='form_account_facility' id
='form_account_facility' class='form-control'>
921 <option value
=""><?php
echo xlt('Select Location'); ?
></option
>
923 $ppres = sqlStatement("SELECT id, name, facility_code FROM facility WHERE facility_code > '' ORDER BY name, id");
924 while ($facrow = sqlFetchArray($ppres)) {
925 echo "<option value='" . attr($facrow['id']) . "'";
926 if ($facrow['id'] == $row['account_facility'] && !$formid) {
927 $account = $facrow['facility_code'];
928 $account_facility = $facrow['account_facility'];
929 $account_name = $facrow['name'];
931 } elseif ($facrow['id'] == $account_facility) {
933 $account = $facrow['facility_code'];
934 $account_facility = $facrow['account_facility'];
935 $account_name = $facrow['name'];
937 echo ">" . text($facrow['name']) . "</option>";
941 <input readonly type
='hidden' class="input-sm" name
="form_account" value
="<?php echo attr($account); ?>">
943 <div
class="clearfix"></div
>
945 <!--------------------Collections
--------------------------->
946 <div
class="form-group form-row">
947 <label
for="form_specimen_fasting" class="col-form-label col-md-2"><?php
echo xlt('Fasting'); ?
></label
>
948 <div
class="col-md-2">
950 generate_form_field(array('data_type' => 1, 'field_id' => 'specimen_fasting',
951 'list_id' => 'yesno'), $row['specimen_fasting']);
954 <label
for="collector_id" class="col-form-label col-md-2"><?php
echo xlt('Collected By'); ?
></label
>
955 <div
class="col-md-2">
956 <?php
generate_form_field(array('data_type' => 10, 'field_id' => 'collector_id'), $row['collector_id']); ?
>
958 <label
for='form_order_abn' class="col-form-label col-md-2"><?php
echo xlt('ABN Status'); ?
></label
>
959 <div
class="col-md-2">
960 <select name
='form_order_abn' id
='form_order_abn' class='form-control'>
961 <option value
="not_required" <?php
echo $row['order_abn'] === 'not_required' ?
' selected' : '' ?
>><?php
echo xlt('Not Required'); ?
></option
>
962 <option value
="required" <?php
echo $row['order_abn'] === 'required' ?
' selected' : '' ?
>><?php
echo xlt('Required'); ?
></option
>
963 <option value
="signed" <?php
echo $row['order_abn'] === 'signed' ?
' selected' : '' ?
>><?php
echo xlt('Signed'); ?
></option
>
966 <div
class="clearfix"></div
>
968 <div
class="form-group form-row">
969 <label
for="form_order_priority"
970 class="col-form-label col-md-2"><?php
echo xlt('Priority'); ?
></label
>
971 <div
class="col-md-2">
973 generate_form_field(array('data_type' => 1, 'field_id' => 'order_priority',
974 'list_id' => 'ord_priority'), $row['order_priority']);
977 <label
for="form_order_status"
978 class="col-form-label col-md-2"><?php
echo xlt('Status'); ?
></label
>
979 <div
class="col-md-2">
981 generate_form_field(array('data_type' => 1, 'field_id' => 'order_status',
982 'list_id' => 'ord_status'), $row['order_status']);
985 <label
for="form_billing_type"
986 class="col-form-label col-md-2"><?php
echo xlt('Billing'); ?
></label
>
987 <div
class="col-md-2">
989 generate_form_field(array('data_type' => 1, 'field_id' => 'billing_type',
990 'list_id' => 'procedure_billing'), $row['billing_type']);
993 <div
class="clearfix"></div
>
995 <div
class="form-group form-row">
996 <label
for="form_history_order"
997 class="col-form-label col-md-2"><?php
echo xlt('History Order'); ?
></label
>
998 <div
class="col-md-2">
1000 $historyOrderOpts = array(
1002 'field_id' => 'history_order',
1003 'list_id' => 'boolean'
1005 generate_form_field($historyOrderOpts, $row['history_order']); ?
>
1007 <div
class="clearfix"></div
>
1009 <div
class="form-group form-row">
1010 <label
for="form_clinical_hx" class="col-form-label col-md-1"><?php
echo xlt('Clinical History'); ?
></label
>
1011 <div
class="col-md-5">
1012 <textarea name
="form_clinical_hx" id
="form_clinical_hx"
1013 class="text" rows
="2" cols
="60" wrap
="hard"><?php
echo text($row['clinical_hx']); ?
></textarea
>
1015 <label
for="form_data_ordered" class="col-form-label col-md-1"><?php
echo xlt('Patient Instructions'); ?
></label
>
1016 <div
class="col-md-5">
1017 <textarea rows
='2' cols
="60" wrap
="hard" id
='form_patient_instructions'
1018 name
='form_patient_instructions' class='text'><?php
echo text($row['patient_instructions']) ?
></textarea
>
1023 <fieldset
class="row">
1024 <legend
><?php
$t = "<span>" .
1025 ($gbl_lab === "labcorp" ?
"Location Account: $account_name $account" : "") . "</span>";
1026 echo xlt('Procedure Order Details') . " " . text($gbl_lab_title) . " " . $t; ?
>
1028 <?php
if ($order_data) { ?
>
1029 <div id
="errorAlerts" class="alert alert-danger alert-dismissible col-6 offset-3" role
="alert">
1030 <button type
="button" class="close" data
-dismiss
="alert"><span
class="text-dark">×
;</span
></button
>
1032 <?php
echo $order_data;
1033 unset($order_data); ?
>
1037 <div
class="col-md-12 procedure-order-container table-responsive">
1038 <div
class="form-group form-row bg-dark text-light my-2 py-1">
1039 <label
for="form_order_diagnosis" class="col-form-label col-md-2"><?php
echo xlt('Primary Diagnosis'); ?
></label
>
1040 <div
class="col-md-4">
1043 $diagres = sqlStatement(
1044 "SELECT diagnosis FROM lists " .
1045 "Where activity = 1 And type = ? And pid = ?",
1046 array('medical_problem', $pid)
1048 $problem_diags = '';
1049 while ($probrow = sqlFetchArray($diagres)) {
1050 if (strpos($probrow['diagnosis'], 'ICD') === false) {
1053 $problem_diags .= $probrow['diagnosis'] . ';';
1056 <input
class='form-control c-hand' type
='text' name
='form_order_diagnosis' id
='form_order_diagnosis'
1057 value
='<?php echo $problem_diags ? attr($problem_diags) : attr($row['order_diagnosis
']) ?>'
1058 onclick
='sel_related(this.name)'
1059 title
='<?php echo xla('Required Primary Diagnosis
for Order
. This will be automatically added to any missing test order diagnosis
.'); ?>'
1060 readonly onfocus
='this.blur()' />
1062 <label
for="procedure_type_names col-md-2" class="col-form-label"><?php
echo xlt('Procedure Type'); ?
></label
>
1063 <div
class="col-md-4">
1064 <?php
$procedure_order_type = getListOptions('order_type', array('option_id', 'title')); ?
>
1065 <select name
="procedure_type_names" id
="procedure_type_names" class='form-control'>
1066 <?php
foreach ($procedure_order_type as $ordered_types) { ?
>
1067 <option value
="<?php echo attr($ordered_types['option_id']); ?>"
1068 <?php
echo $ordered_types['option_id'] == $row['procedure_order_type'] ?
" selected" : ""; ?
>><?php
echo text(xl_list_label($ordered_types['title'])); ?
>
1075 // This section merits some explanation. :)
1077 // If any procedures have already been saved for this form, then a top-level table row is
1078 // created for each of them, and includes the relevant questions and any existing answers.
1079 // Otherwise a single empty table row is created for entering the first or only procedure.
1081 // If a new procedure is selected or changed, the questions for it are (re)generated from
1082 // the dialog window from which the procedure is selected, via JavaScript. The sel_proc_type
1083 // function and the types.php script that it invokes collaborate to support this feature.
1085 // The generate_qoe_html function in qoe.inc.php contains logic to generate the HTML for
1086 // the questions, and can be invoked either from this script or from types.php.
1088 // The $i counter that you see below is to resolve the need for unique names for form fields
1089 // that may occur for each of the multiple procedure requests within the same order.
1090 // procedure_order_seq serves a similar need for uniqueness at the database level.
1094 $opres = sqlStatement(
1096 "pc.procedure_order_seq, pc.procedure_code, pc.procedure_name, " .
1097 "pc.diagnoses, pc.procedure_order_title, pc.transport," .
1098 // In case of duplicate procedure codes this gets just one.
1099 "(SELECT pt.procedure_type_id FROM procedure_type AS pt WHERE " .
1100 "(pt.procedure_type LIKE 'ord%' OR pt.procedure_type LIKE 'for%' OR pt.procedure_type LIKE 'pro%') AND pt.lab_id = ? AND " .
1101 "pt.procedure_code = pc.procedure_code ORDER BY " .
1102 "pt.activity DESC, pt.procedure_type_id LIMIT 1) AS procedure_type_id " .
1103 "FROM procedure_order_code AS pc " .
1104 "WHERE pc.procedure_order_id = ? " .
1105 "ORDER BY pc.procedure_order_seq",
1106 array($row['lab_id'], $formid)
1108 while ($oprow = sqlFetchArray($opres)) {
1111 $reqres = $opres = sqlStatement(
1112 "Select id, url, documentationOf From documents where foreign_id = ? And list_id = ? Order By id",
1113 array($pid, $formid)
1115 while ($oprow = sqlFetchArray($reqres)) {
1116 $doc_type = stripos($oprow['url'], 'ABN') ?
'ABN' : 'REQ';
1117 if ($gbl_lab === "labcorp") {
1120 $this_req = $req_url . $oprow['id'];
1121 $this_name = $oprow['documentationOf'];
1122 $this_name = $this_name && $this_name !== "ABN" ?
($doc_type . '_' . $this_name) : $doc_type;
1123 $req[] = array('url' => $this_req, 'type' => $doc_type, 'name' => $this_name);
1125 $req_count = count($req);
1127 if (empty($oparr)) {
1128 $oparr[] = array('procedure_name' => '');
1133 foreach ($oparr as $oprow) {
1134 $ptid = -1; // -1 means no procedure is selected yet
1135 if (!empty($oprow['procedure_type_id'])) {
1136 $ptid = $oprow['procedure_type_id'];
1139 <table
class="table table-sm proc-table" id
="procedures_item_<?php echo (string)attr($i) ?>">
1140 <?php
if ($i < 1) { ?
>
1144 <th
class="quest"> 
;</th
>
1145 <th
><?php
echo xlt('Procedure Test'); ?
></th
>
1146 <th
><?php
echo xlt('Diagnosis Codes'); ?
></th
>
1147 <th
><?php
echo xlt("Order Questions"); ?
></th
>
1153 <input type
='hidden' name
='form_proc_code[<?php echo $i; ?>]' value
='<?php echo attr($oprow['procedure_code
']) ?>' />
1154 <td
class="itemDelete"><i
class="fa fa-trash fa-lg"></i
></td
>
1155 <td
class="itemTransport quest">
1156 <input
class="itemTransport form-control" readonly
1157 name
='form_transport[<?php echo $i; ?>]' onclick
='getDetails(event, <?php echo $i; ?>)'
1158 placeholder
='<?php echo xla('Click to review the Directory of Service
for this test
'); ?>'
1159 value
='<?php echo attr($oprow['transport
']) ?>'>
1161 <td
class="procedure-div">
1162 <?php
if (empty($formid) ||
empty($oprow['procedure_order_title'])) : ?
>
1163 <input type
="hidden" name
="form_proc_order_title[<?php echo $i; ?>]"
1166 <input type
='hidden' name
='form_proc_order_title[<?php echo $i; ?>]'
1167 value
='<?php echo attr($oprow['procedure_order_title
']) ?>'>
1169 <input type
='text' name
='form_proc_type_desc[<?php echo $i; ?>]'
1170 value
='<?php echo attr($oprow['procedure_name
']) ?>'
1171 onclick
="sel_proc_type(<?php echo $i; ?>)"
1172 onfocus
='this.blur()'
1173 title
='<?php echo xla('Click to select the desired procedure
'); ?>'
1174 placeholder
='<?php echo xla('Click to select the desired procedure
'); ?>'
1175 class='form-control c-hand' readonly
/>
1176 <input type
='hidden' name
='form_proc_type[<?php echo $i; ?>]' value
='<?php echo attr($ptid); ?>' />
1178 <td
class='diagnosis-div input-group'>
1179 <div
class='input-group-prepend'>
1180 <span
class='btn btn-secondary input-group-text'>
1181 <i onclick
='current_diagnoses(this)' class='fa fa-search fa-lg' title
='<?php echo xla('Click to search past
and current diagnoses history
'); ?>'></i
>
1184 <input
class='form-control c-hand' type
='text'
1185 name
='form_proc_type_diag[<?php echo $i; ?>]'
1186 value
='<?php echo attr($oprow['diagnoses
']) ?>'
1187 onclick
='sel_related(this.name)'
1188 title
='<?php echo xla('Click to add diagnosis
for this test
'); ?>'
1189 onfocus
='this.blur()' readonly
/>
1192 <!-- MSIE innerHTML property
for a TABLE element is read
-only
, so using a DIV here
. -->
1193 <div
class="table-responsive" id
='qoetable[<?php echo attr($i); ?>]'>
1195 $qoe_init_javascript = '';
1196 echo generate_qoe_html($ptid, $formid, ($oprow['procedure_order_seq'] ??
null), $i);
1197 if ($qoe_init_javascript) {
1198 echo "<script>$qoe_init_javascript</script>";
1212 <button type
="button" class="btn btn-success btn-add" onclick
="addProcLine()"><?php
echo xlt('Add Procedure'); ?
>
1216 <div
class="row card clearfix">
1217 <legend
class="card-heading collapsed" data
-toggle
="collapse" data
-target
="#summary">
1218 <i
class="fa fa-plus mr-2"></i
><?php
echo xlt("Order Documents and Logs"); ?
>
1219 <i
class="wait fa fa-cog fa-spin ml-2 d-none"></i
>
1221 <div
class="card-body collapse" id
="summary">
1222 <div
class="form-group"> <!--Order document links
-->
1223 <div
class="col-md-12 text-left position-override">
1224 <legend
class="bg-dark text-light"><?php
echo xlt("Order Documents"); ?
></legend
>
1225 <div
class="btn-group" role
="group">
1227 foreach ($req as $reqdoc) {
1228 $title = $reqdoc['name'];
1229 $rpath = $reqdoc['url']; ?
>
1230 <a
class="btn btn-outline-primary" href
="<?php echo attr($rpath); ?>"><?php
echo text($title) ?
></a
>
1232 <a
class='btn btn-success ml-1' href
='#'
1233 onclick
="createLabels(event, this)"><?php
echo xlt('Labels'); ?
></a
>
1235 if ($gbl_lab === "labcorp") { ?
>
1236 <button type
="submit" class="btn btn-outline-primary btn-save"
1237 name
='bn_save_ereq' id
='bn_save_ereq' value
="save_ereq"
1238 onclick
='transmitting = false;'><?php
echo xlt('Manual eREQ'); ?
>
1240 <?php
} elseif ($gbl_lab === 'clarity') {
1241 echo "<a class='btn btn-outline-primary' target='_blank' href='$rootdir/procedure_tools/clarity/ereq_form.php?debug=1&formid=" . attr_url($formid) . "'>" . xlt("Manual eREQ") . "</a>";
1247 <div
class="col-md-12">
1248 <legend
class="bg-dark text-light"><?php
echo xlt('Order Log'); ?
></legend
>
1249 <div
class="jumbotron m-0 px-2 py-0 overflow-auto" id
="processLog" style
="max-height:500px;">
1251 if (!empty($order_log)) {
1252 $alertmsg = $order_log;
1254 $order_log = $alertmsg;
1256 if (!empty($alertmsg)) {
1257 echo nl2br(text($alertmsg));
1260 <input type
="hidden" name
="order_log" value
="<?php echo text($order_log); ?>">
1265 <div
class="row form-group clearfix">
1266 <div
class="float-left position-override mt-2">
1267 <div
class="btn-group" role
="group">
1268 <button type
="submit" class="btn btn-primary btn-save"
1269 name
="bn_save" id
="bn_save" value
="save"
1270 onclick
='transmitting = false;'><?php
echo xlt('Save Current'); ?
>
1272 <button type
="submit" class="btn btn-success btn-save"
1273 name
='bn_save_exit' id
='bn_save_exit' value
="save_exit"
1274 onclick
='transmitting = false;'><?php
echo xlt('Save'); ?
>
1276 <button type
="submit" class="btn btn-primary btn-transmit"
1277 name
='bn_xmit' value
="transmit"
1278 onclick
='transmitting = true;'><?php
echo xlt('Transmit Order'); ?
>
1280 <button type
="button" class="btn btn-secondary btn-cancel"
1281 onclick
="top.restoreSession();location='<?php echo $GLOBALS['form_exit_url']; ?>'"><?php
echo xlt('Cancel/Exit'); ?
>
1284 <span
class="wait fa fa-cog fa-spin fa-2x ml-2 d-none"></span
>
1289 </div
><!--end of
.container
-->