You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
328 lines
9.5 KiB
328 lines
9.5 KiB
<?php |
|
|
|
// Copyright (C) 2009-2011, 2016 Rod Roark <rod@sunsetsystems.com> |
|
// |
|
// This program is free software; you can redistribute it and/or |
|
// modify it under the terms of the GNU General Public License |
|
// as published by the Free Software Foundation; either version 2 |
|
// of the License, or (at your option) any later version. |
|
|
|
// This provides enhancement functions for the LBFgcac visit form. |
|
// It is invoked by interface/forms/LBF/new.php. |
|
|
|
// Private function. Constructs a query to find a given lbf_data field's |
|
// values from visits within the past 2 weeks. |
|
// |
|
function _LBFgcac_query_recent($more) |
|
{ |
|
global $pid, $encounter, $formname, $formid; |
|
|
|
// Get the date of this visit. |
|
$encrow = sqlQuery("SELECT date FROM form_encounter WHERE " . |
|
"pid = ? AND encounter = ?", [$pid, $encounter]); |
|
$encdate = $encrow['date']; |
|
|
|
// Query complications from the two weeks prior to this visit. |
|
$query = "SELECT d.field_value " . |
|
"FROM forms AS f, form_encounter AS fe, lbf_data AS d " . |
|
"WHERE f.pid = '" . add_escape_custom($pid) . "' AND " . |
|
"f.formdir = '" . add_escape_custom($formname) . "' AND " . |
|
"f.deleted = 0 AND " . |
|
"fe.pid = f.pid AND fe.encounter = f.encounter AND " . |
|
"fe.date <= '" . add_escape_custom($encdate) . "' AND " . |
|
"DATE_ADD(fe.date, INTERVAL 14 DAY) > '" . add_escape_custom($encdate) . "' AND " . |
|
"d.form_id = f.form_id AND $more"; |
|
|
|
return $query; |
|
} |
|
|
|
// Private function. Given a field name, gets its value from the most |
|
// recent instance of this form type that is not more than 2 weeks old. |
|
// |
|
function _LBFgcac_recent_default($name) |
|
{ |
|
global $formid; |
|
|
|
// This logic only makes sense for a new form. |
|
if ($formid) { |
|
return ''; |
|
} |
|
|
|
$query = _LBFgcac_query_recent( |
|
"d.field_id = ? " . |
|
"ORDER BY f.form_id DESC LIMIT 1" |
|
); |
|
$row = sqlQuery($query, [$name]); |
|
|
|
if (empty($row['field_value'])) { |
|
return ''; |
|
} |
|
|
|
return $row['field_value']; |
|
} |
|
|
|
// Private function. Query services within 2 weeks of this encounter. |
|
// |
|
function _LBFgcac_query_recent_services() |
|
{ |
|
global $pid, $encounter; |
|
|
|
// Get the date of this visit. |
|
$encrow = sqlQuery("SELECT date FROM form_encounter WHERE " . |
|
"pid = ? AND encounter = ?", [$pid, $encounter]); |
|
$encdate = $encrow['date']; |
|
|
|
// Query services from the two weeks prior to this visit. |
|
$query = "SELECT c.related_code " . |
|
"FROM form_encounter AS fe, billing AS b, codes AS c " . |
|
"WHERE fe.pid = '" . add_escape_custom($pid) . "' AND fe.date <= '" . add_escape_custom($encdate) . "' AND " . |
|
"DATE_ADD(fe.date, INTERVAL 14 DAY) > '" . add_escape_custom($encdate) . "' AND " . |
|
"b.pid = fe.pid AND b.encounter = fe.encounter AND b.activity = 1 AND " . |
|
"b.code_type = 'MA' AND c.code_type = '12' AND " . |
|
"c.code = b.code AND c.modifier = b.modifier " . |
|
"ORDER BY fe.date DESC, b.id DESC"; |
|
|
|
return $query; |
|
} |
|
|
|
// Private function. Query services from this encounter. |
|
// |
|
function _LBFgcac_query_current_services() |
|
{ |
|
global $pid, $encounter; |
|
|
|
$query = "SELECT c.related_code " . |
|
"FROM billing AS b, codes AS c WHERE " . |
|
"b.pid = '" . add_escape_custom($pid) . "' AND b.encounter = '" . add_escape_custom($encounter) . "' AND b.activity = 1 AND " . |
|
"b.code_type = 'MA' AND c.code_type = '12' AND " . |
|
"c.code = b.code AND c.modifier = b.modifier " . |
|
"ORDER BY b.id DESC"; |
|
|
|
return $query; |
|
} |
|
|
|
// The purpose of this function is to create JavaScript for the <head> |
|
// section of the page. This in turn defines desired javaScript |
|
// functions. |
|
// |
|
function LBFgcac_javascript() |
|
{ |
|
global $formid; |
|
|
|
// Query complications from the two weeks prior to this visit. |
|
$res = sqlStatement(_LBFgcac_query_recent( |
|
"f.form_id != '" . add_escape_custom($formid) . "' AND " . |
|
"d.field_id = 'complications'" |
|
)); |
|
|
|
// This JavaScript function is to enable items in the "Main complications" |
|
// list that have been selected, and to disable all others. |
|
// Option.disabled seems to work for Firefox 3 and IE8 but not IE6. |
|
echo "// Enable recent complications and disable all others. |
|
function set_main_compl_list() { |
|
var f = document.forms[0]; |
|
var sel = f.form_main_compl; |
|
var n = ''; |
|
"; |
|
// We use the checkbox object values as a scratch area to note which |
|
// complications were already selected from other forms. |
|
while ($row = sqlFetchArray($res)) { |
|
$a = explode('|', $row['field_value']); |
|
foreach ($a as $complid) { |
|
if (empty($complid)) { |
|
continue; |
|
} |
|
|
|
echo " n = 'form_complications[" . attr($complid) . "]'; if (f[n]) f[n].value = 2;\n"; |
|
} |
|
} |
|
|
|
echo " // Scan the list items and set their disabled flags. |
|
for (var i = 1; i < sel.options.length; ++i) { |
|
n = 'form_complications[' + sel.options[i].value + ']'; |
|
sel.options[i].disabled = (f[n] && (f[n].checked || f[n].value == '2')) ? false : true; |
|
} |
|
} |
|
"; |
|
|
|
echo " |
|
// Disable most form fields if refusing abortion. |
|
function client_status_changed() { |
|
var f = document.forms[0]; |
|
var dis1 = false; // true to disable complications |
|
var dis2 = false; // true to disable procedures |
|
var cs = f.form_client_status; |
|
var csval = ''; |
|
if (cs.type) { // cs = select list |
|
if (cs.selectedIndex >= 0) { |
|
csval = cs.options[cs.selectedIndex].value; |
|
} |
|
} |
|
else { // cs = array of radio buttons |
|
for (var i = 0; i < cs.length; ++i) { |
|
if (cs[i].checked) { |
|
csval = cs[i].value; |
|
break; |
|
} |
|
} |
|
} |
|
if (csval == 'mara' || csval == 'defer' || csval == 'refin') { |
|
dis1 = true; |
|
dis2 = true; |
|
} |
|
else if (csval == 'maaa') { |
|
dis2 = true; |
|
} |
|
for (var i = 0; i < f.elements.length; ++i) { |
|
var e = f.elements[i]; |
|
if (e.name.substring(0,18) == 'form_complications' || e.name == 'form_main_compl') { |
|
e.disabled = dis1; |
|
} |
|
else if (e.name == 'form_in_ab_proc') { |
|
e.disabled = dis2; |
|
} |
|
else if (e.name == 'form_ab_location') { |
|
if (csval == 'maaa') { |
|
e.disabled = (e.value == 'part' || e.value == 'oth' || e.value == 'na'); |
|
} |
|
else if (csval == 'mara' || csval == 'defer' || csval == 'self') { |
|
e.disabled = true; // (e.value != 'na'); |
|
} |
|
// else if (csval == 'refout') { |
|
// e.disabled = (e.value == 'proc' || e.value == 'ma'); |
|
// } |
|
else { // inbound referral |
|
e.disabled = (e.value == 'na' || e.value == 'proc' || e.value == 'ma'); |
|
} |
|
} |
|
else if (e.name == 'form_gc_rreason') { |
|
e.disabled = (csval != 'mara' && csval != 'refout'); |
|
} |
|
} |
|
} |
|
"; |
|
|
|
echo " |
|
// Enable some form fields before submitting. |
|
// This is because disabled fields do not submit their data, however |
|
// we do want to save the default values that were set for them. |
|
function mysubmit() { |
|
var f = document.forms[0]; |
|
for (var i = 0; i < f.elements.length; ++i) { |
|
var e = f.elements[i]; |
|
if (e.name == 'form_in_ab_proc') { |
|
e.disabled = false; |
|
} |
|
} |
|
top.restoreSession(); |
|
return true; |
|
} |
|
"; |
|
} |
|
|
|
// The purpose of this function is to create JavaScript that is run |
|
// once when the page is loaded. |
|
// |
|
function LBFgcac_javascript_onload() |
|
{ |
|
echo " |
|
set_main_compl_list(); |
|
client_status_changed(); |
|
var f = document.forms[0]; |
|
for (var i = 0; i < f.elements.length; ++i) { |
|
var e = f.elements[i]; |
|
if (e.name.substring(0,18) == 'form_complications') |
|
e.onclick = function () { set_main_compl_list(); }; |
|
} |
|
var cs = f.form_client_status; |
|
if (cs.type) { // cs = select list |
|
cs.onchange = function () { client_status_changed(); }; |
|
} |
|
else { // cs = array of radio buttons |
|
for (var i = 0; i < cs.length; ++i) { |
|
cs[i].onclick = function () { client_status_changed(); }; |
|
} |
|
} |
|
f.onsubmit = function () { return mysubmit(); }; |
|
"; |
|
} |
|
|
|
// Generate default for client status. |
|
// |
|
function LBFgcac_default_client_status() |
|
{ |
|
return _LBFgcac_recent_default('client_status'); |
|
} |
|
|
|
// Generate default for visit type. If there are no recent prior visits, |
|
// then default to new procedure. |
|
// |
|
function LBFgcac_default_ab_location() |
|
{ |
|
global $formid; |
|
if ($formid) { |
|
return ''; |
|
} |
|
|
|
$vt = _LBFgcac_recent_default('ab_location'); |
|
if (empty($vt)) { |
|
return 'proc'; |
|
} |
|
|
|
return $vt; |
|
} |
|
|
|
// Generate default for the induced procedure type. |
|
// |
|
function LBFgcac_default_in_ab_proc() |
|
{ |
|
|
|
// Check previous GCAC visit forms for this setting. |
|
$default = _LBFgcac_recent_default('in_ab_proc'); |
|
if ($default !== '') { |
|
return $default; |
|
} |
|
|
|
// If none, query services from recent visits to see if an IPPF code |
|
// matches that of a procedure type in the list. |
|
$res = sqlStatement(_LBFgcac_query_recent_services()); |
|
while ($row = sqlFetchArray($res)) { |
|
if (empty($row['related_code'])) { |
|
continue; |
|
} |
|
|
|
$relcodes = explode(';', $row['related_code']); |
|
foreach ($relcodes as $codestring) { |
|
if ($codestring === '') { |
|
continue; |
|
} |
|
|
|
list($codetype, $code) = explode(':', $codestring); |
|
if ($codetype !== 'IPPF') { |
|
continue; |
|
} |
|
|
|
$lres = sqlStatement("SELECT option_id, mapping FROM list_options " . |
|
"WHERE list_id = 'in_ab_proc' AND activity = 1"); |
|
while ($lrow = sqlFetchArray($lres)) { |
|
$maparr = explode(':', $lrow['mapping']); |
|
if (empty($maparr[1])) { |
|
continue; |
|
} |
|
|
|
if (preg_match('/^' . $maparr[1] . '/', $code)) { |
|
return $lrow['option_id']; |
|
} |
|
} |
|
} // end foreach |
|
} |
|
|
|
return ''; |
|
} |
|
|
|
// Generate default for the main complication. |
|
// |
|
function LBFgcac_default_main_compl() |
|
{ |
|
return _LBFgcac_recent_default('main_compl'); |
|
}
|
|
|