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.
339 lines
11 KiB
339 lines
11 KiB
2 years ago
|
<?php
|
||
|
|
||
|
/**
|
||
|
* This module is used to find and add insurance companies.
|
||
|
* It is opened as a popup window. The opener may have a
|
||
|
* JavaScript function named set_insurance(id, name), in which
|
||
|
* case selecting or adding an insurance company will cause the
|
||
|
* function to be called passing the ID and name of that company.
|
||
|
*
|
||
|
* When used for searching, this module will in turn open another
|
||
|
* popup window ins_list.php, which lists the matched results and
|
||
|
* permits selection of one of them via the same set_insurance()
|
||
|
* function.
|
||
|
*
|
||
|
* @package OpenEMR
|
||
|
* @link http://www.open-emr.org
|
||
|
* @author Rod Roark <rod@sunsetsystems.com>
|
||
|
* @author Brady Miller <brady.g.miller@gmail.com>
|
||
|
* @author Tyler Wrenn <tyler@tylerwrenn.com>
|
||
|
* @copyright Copyright (c) 2005 Rod Roark <rod@sunsetsystems.com>
|
||
|
* @copyright Copyright (c) 2018 Brady Miller <brady.g.miller@gmail.com>
|
||
|
* @copyright Copyright (c) 2020 Tyler Wrenn <tyler@tylerwrenn.com>
|
||
|
* @license https://github.com/openemr/openemr/blob/master/LICENSE GNU General Public License 3
|
||
|
*/
|
||
|
|
||
|
require_once("../globals.php");
|
||
|
|
||
|
use OpenEMR\Common\Csrf\CsrfUtils;
|
||
|
use OpenEMR\Core\Header;
|
||
|
use OpenEMR\Services\InsuranceCompanyService;
|
||
|
|
||
|
// Putting a message here will cause a popup window to display it.
|
||
|
$info_msg = "";
|
||
|
|
||
|
// Grab insurance type codes from service
|
||
|
$insuranceCompany = new InsuranceCompanyService();
|
||
|
$ins_type_code_array = $insuranceCompany->getInsuranceTypes();
|
||
|
|
||
|
?>
|
||
|
<html>
|
||
|
<head>
|
||
|
<title><?php echo xlt('Insurance Company Search/Add');?></title>
|
||
|
|
||
|
<?php Header::setupHeader(['opener','topdialog']); ?>
|
||
|
|
||
|
<style>
|
||
|
td {
|
||
|
font-size: 0.8125rem;
|
||
|
}
|
||
|
|
||
|
#form_entry {
|
||
|
display: block;
|
||
|
}
|
||
|
|
||
|
#form_list {
|
||
|
display: none;
|
||
|
}
|
||
|
|
||
|
</style>
|
||
|
|
||
|
<script>
|
||
|
|
||
|
<?php require($GLOBALS['srcdir'] . "/restoreSession.php"); ?>
|
||
|
|
||
|
// This is invoked when our Search button is clicked.
|
||
|
function dosearch() {
|
||
|
|
||
|
$("#form_entry").hide();
|
||
|
var f = document.forms[0];
|
||
|
var search_list = 'ins_list.php' +
|
||
|
'?form_name=' + encodeURIComponent(f.form_name.value ) +
|
||
|
'&form_attn=' + encodeURIComponent(f.form_attn.value ) +
|
||
|
'&form_addr1=' + encodeURIComponent(f.form_addr1.value ) +
|
||
|
'&form_addr2=' + encodeURIComponent(f.form_addr2.value ) +
|
||
|
'&form_city=' + encodeURIComponent(f.form_city.value ) +
|
||
|
'&form_state=' + encodeURIComponent(f.form_state.value ) +
|
||
|
'&form_zip=' + encodeURIComponent(f.form_zip.value ) +
|
||
|
'&form_phone=' + encodeURIComponent(f.form_phone.value ) +
|
||
|
'&form_cms_id=' + encodeURIComponent(f.form_cms_id.value) +
|
||
|
'&csrf_token_form=' + <?php echo js_url(CsrfUtils::collectCsrfToken()); ?>;
|
||
|
|
||
|
top.restoreSession();
|
||
|
$("#form_list").load( search_list ).show();
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
// The ins_list.php window calls this to set the selected insurance.
|
||
|
function set_insurance(ins_id, ins_name) {
|
||
|
if (opener.closed || ! opener.set_insurance)
|
||
|
alert('The target form was closed; I cannot apply your selection.');
|
||
|
else
|
||
|
opener.set_insurance(ins_id, ins_name);
|
||
|
dlgclose('InsSaveClose',false);
|
||
|
}
|
||
|
|
||
|
// This is set to true on a mousedown of the Save button. The
|
||
|
// reason is so we can distinguish between clicking on the Save
|
||
|
// button vs. hitting the Enter key, as we prefer the "default"
|
||
|
// action to be search and not save.
|
||
|
var save_clicked = false;
|
||
|
|
||
|
// Onsubmit handler.
|
||
|
function validate(f) {
|
||
|
// If save was not clicked then default to searching.
|
||
|
if (! save_clicked) return dosearch();
|
||
|
save_clicked = false;
|
||
|
|
||
|
msg = '';
|
||
|
if (! f.form_name.value.length ) msg += 'Company name is missing. ';
|
||
|
if (! f.form_addr1.value.length) msg += 'Address is missing. ';
|
||
|
if (! f.form_city.value.length ) msg += 'City is missing. ';
|
||
|
if (! f.form_state.value.length) msg += 'State is missing. ';
|
||
|
if (! f.form_zip.value.length ) msg += 'Zip is missing.';
|
||
|
|
||
|
if (msg) {
|
||
|
alert(msg);
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
top.restoreSession();
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
</script>
|
||
|
|
||
|
</head>
|
||
|
|
||
|
<body class="body_top">
|
||
|
<?php
|
||
|
// If we are saving, then save and close the window.
|
||
|
//
|
||
|
if ($_POST['form_save'] ?? '') {
|
||
|
if (!CsrfUtils::verifyCsrfToken($_POST["csrf_token_form"])) {
|
||
|
CsrfUtils::csrfNotVerified();
|
||
|
}
|
||
|
|
||
|
$ins_id = '';
|
||
|
$ins_name = $_POST['form_name'];
|
||
|
|
||
|
if ($ins_id) {
|
||
|
// sql for updating could go here if this script is enhanced to support
|
||
|
// editing of existing insurance companies.
|
||
|
} else {
|
||
|
$ins_id = $insuranceCompany->insert(
|
||
|
array(
|
||
|
'name' => $ins_name,
|
||
|
'attn' => $_POST['form_attn'],
|
||
|
'cms_id' => $_POST['form_cms_id'],
|
||
|
'ins_type_code' => $_POST['form_ins_type_code'],
|
||
|
'x12_receiver_id' => $_POST['form_partner'],
|
||
|
'x12_default_parter_id' => $_POST['form_partner'],
|
||
|
'alt_cms_id' => null,
|
||
|
'line1' => $_POST['form_addr1'],
|
||
|
'line2' => $_POST['form_addr2'],
|
||
|
'city' => $_POST['form_city'],
|
||
|
'state' => $_POST['form_state'],
|
||
|
'zip' => $_POST['form_zip'],
|
||
|
'country' => $_POST['form_country'],
|
||
|
'foreign_id' => $ins_id,
|
||
|
'cqm_sop' => $_POST['form_cqm_sop']
|
||
|
)
|
||
|
);
|
||
|
|
||
|
$phone_parts = array();
|
||
|
preg_match(
|
||
|
"/(\d\d\d)\D*(\d\d\d)\D*(\d\d\d\d)/",
|
||
|
$_POST['form_phone'],
|
||
|
$phone_parts
|
||
|
);
|
||
|
|
||
|
if (!empty($phone_parts)) {
|
||
|
sqlStatement("INSERT INTO phone_numbers ( " .
|
||
|
"id, country_code, area_code, prefix, number, type, foreign_id " .
|
||
|
") VALUES ( " .
|
||
|
"'" . add_escape_custom(generate_id()) . "', " .
|
||
|
"'+1'" . ", " .
|
||
|
"'" . add_escape_custom($phone_parts[1] ?? '') . "', " .
|
||
|
"'" . add_escape_custom($phone_parts[2] ?? '') . "', " .
|
||
|
"'" . add_escape_custom($phone_parts[3] ?? '') . "', " .
|
||
|
"'2'" . ", " .
|
||
|
"'" . add_escape_custom($ins_id) . "' " .
|
||
|
")");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Close this window and tell our opener to select the new company.
|
||
|
//
|
||
|
echo "<script>\n";
|
||
|
if ($info_msg) {
|
||
|
echo " alert(" . js_escape($info_msg) . ");\n";
|
||
|
}
|
||
|
|
||
|
echo " top.restoreSession();\n";
|
||
|
echo " if (opener.set_insurance) opener.set_insurance(" . js_escape($ins_id) . "," . js_escape($ins_name) . ");\n";
|
||
|
echo " dlgclose();\n";
|
||
|
echo "</script></body></html>\n";
|
||
|
exit();
|
||
|
}
|
||
|
|
||
|
// Query x12_partners.
|
||
|
$xres = sqlStatement(
|
||
|
"SELECT id, name FROM x12_partners ORDER BY name"
|
||
|
);
|
||
|
?>
|
||
|
<div id="form_entry">
|
||
|
|
||
|
<form method='post' name='theform' action='ins_search.php' onsubmit='return validate(this)'>
|
||
|
<input type="hidden" name="csrf_token_form" value="<?php echo attr(CsrfUtils::collectCsrfToken()); ?>" />
|
||
|
<center>
|
||
|
|
||
|
<p>
|
||
|
<table class="w-100 border-0">
|
||
|
<tr>
|
||
|
<td class="font-weight-bold" width='1%' nowrap><?php echo xlt('Name'); ?>:</td>
|
||
|
<td>
|
||
|
<input type='text' size='20' name='form_name' maxlength='35' class='form-control form-control-sm' title='<?php echo xla('Name of insurance company'); ?>' />
|
||
|
</td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td class="font-weight-bold" nowrap><?php echo xlt('Attention');?>:</td>
|
||
|
<td>
|
||
|
<input type='text' size='20' name='form_attn' maxlength='35' class='form-control form-control-sm' title='<?php echo xla('Contact name'); ?>' />
|
||
|
</td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td class="font-weight-bold" nowrap><?php echo xlt('Address1'); ?>:</td>
|
||
|
<td>
|
||
|
<input type='text' size='20' name='form_addr1' maxlength='35' class='form-control form-control-sm' title='First address line' />
|
||
|
</td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td class="font-weight-bold" nowrap><?php echo xlt('Address2'); ?>:</td>
|
||
|
<td>
|
||
|
<input type='text' size='20' name='form_addr2' maxlength='35' class='form-control form-control-sm' title='Second address line, if any' />
|
||
|
</td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td class="font-weight-bold" nowrap><?php echo xlt('City/State'); ?>:</td>
|
||
|
<td class="form-row">
|
||
|
<div class="col">
|
||
|
<input type='text' size='20' name='form_city' maxlength='25' class='form-control form-control-sm' title='City name' />
|
||
|
</div>
|
||
|
<div class="col">
|
||
|
<input type='text' size='3' name='form_state' maxlength='35' class='form-control form-control-sm' title='State or locality' />
|
||
|
</div>
|
||
|
</td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td class="font-weight-bold" nowrap><?php echo xlt('Zip/Country:'); ?></td>
|
||
|
<td class="form-row">
|
||
|
<div class="col">
|
||
|
<input type='text' size='20' name='form_zip' maxlength='10' class='form-control form-control-sm' title='Postal code' />
|
||
|
</div>
|
||
|
<div class="col">
|
||
|
<input type='text' size='20' class="form-control form-control-sm" name='form_country' value='USA' maxlength='35' title='Country name' />
|
||
|
</div>
|
||
|
</td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td class="font-weight-bold" nowrap><?php echo xlt('Phone'); ?>:</td>
|
||
|
<td>
|
||
|
<input type='text' size='20' name='form_phone' maxlength='20' class='form-control form-control-sm' title='Telephone number' />
|
||
|
</td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<td class="font-weight-bold" nowrap><?php echo xlt('Payer ID'); ?>:</td>
|
||
|
<td>
|
||
|
<input type='text' size='20' name='form_cms_id' maxlength='15' class='form-control form-control-sm' title='Identifier assigned by CMS' />
|
||
|
</td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td class="font-weight-bold" nowrap><?php echo xlt('Payer Type'); ?>:</td>
|
||
|
<td>
|
||
|
<select name='form_ins_type_code' class="form-control form-control-sm">
|
||
|
<?php
|
||
|
for ($i = 1; $i < count($ins_type_code_array); ++$i) {
|
||
|
echo " <option value='" . attr($i) . "'";
|
||
|
echo ">" . text($ins_type_code_array[$i]) . "\n";
|
||
|
}
|
||
|
?>
|
||
|
</select>
|
||
|
</td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td class="font-weight-bold" nowrap><?php echo xlt('X12 Partner'); ?>:</td>
|
||
|
<td>
|
||
|
<select name='form_partner' title='Default X12 Partner' class="form-control form-control-sm">
|
||
|
<option value=""><?php echo '-- ' . xlt('None{{Partner}}') . ' --'; ?></option>
|
||
|
<?php
|
||
|
while ($xrow = sqlFetchArray($xres)) {
|
||
|
echo " <option value='" . attr($xrow['id']) . "'";
|
||
|
echo ">" . text($xrow['name']) . "</option>\n";
|
||
|
}
|
||
|
?>
|
||
|
</select>
|
||
|
</td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td class="font-weight-bold" nowrap><?php echo xlt('CQM Source of Payment'); ?>:</td>
|
||
|
<td>
|
||
|
<select name='form_cqm_sop' title='CQM Source of Payment' class="form-control form-control-sm">
|
||
|
<option value=""><?php echo '-- ' . xlt('None{{CQM SOP}}') . ' --'; ?></option>
|
||
|
<?php
|
||
|
$cqm_sop_array = $insuranceCompany->getInsuranceCqmSop();
|
||
|
foreach ($cqm_sop_array as $key => $value) {
|
||
|
echo " <option value='" . attr($key) . "'";
|
||
|
echo ">" . text($value) . "</option>\n";
|
||
|
}
|
||
|
?>
|
||
|
</select>
|
||
|
</td>
|
||
|
</tr>
|
||
|
|
||
|
</table>
|
||
|
|
||
|
<input type='button' value='<?php echo xla('Search'); ?>' class='btn btn-primary' onclick='dosearch()' />
|
||
|
<input type='submit' value='<?php echo xla('Save as New'); ?>' class='btn btn-primary' name='form_save' onmousedown='save_clicked=true' />
|
||
|
<input type='button' value='<?php echo xla('Cancel'); ?>' class='btn btn-primary' onclick='window.close();'/>
|
||
|
|
||
|
</center>
|
||
|
</form>
|
||
|
</div>
|
||
|
|
||
|
<div id="form_list">
|
||
|
</div>
|
||
|
|
||
|
</body>
|
||
|
</html>
|