From 430f8148428bee40dd4fdd546f542c965f81899d Mon Sep 17 00:00:00 2001 From: drbowen Date: Thu, 23 Jun 2005 05:32:44 +0000 Subject: [PATCH] Initial import. --- interface/billing/billing_process.php | 8 +- interface/billing/billing_report.php | 42 +- interface/billing/sl_eob_help.php | 47 + interface/billing/sl_eob_invoice.php | 788 ++++++++++++++ interface/billing/sl_eob_patient_note.php | 67 ++ interface/billing/sl_eob_search.php | 472 +++++++++ interface/billing/sl_receipts_report.php | 249 +++++ interface/login/filler.php | 10 +- interface/login/login.php | 2 +- interface/main/authorizations/authorizations.php | 2 +- interface/main/calendar/find_patient.php | 4 +- .../pntemplates/default/views/day/default.html | 527 +++++++--- .../pntemplates/default/views/week/default.html | 525 +++++++--- .../calendar/modules/PostCalendar/pnuserapi.php | 13 +- interface/main/finder/finder_navigation.php | 2 +- interface/main/finder/patient_select.php | 4 +- interface/main/main_navigation.php | 23 +- interface/main/myadmin/config.inc.php | 11 +- interface/patient_file/encounter/coding.php | 18 +- .../patient_file/encounter/encounter_title.php | 24 +- interface/patient_file/encounter/forms.php | 14 +- .../patient_file/encounter/patient_encounter.php | 15 +- interface/patient_file/encounter/search_code.php | 97 ++ .../patient_file/encounter/superbill_codes.php | 236 ++--- .../encounter/superbill_custom_full.php | 77 +- interface/patient_file/history/encounters.php | 92 +- interface/patient_file/history/encounters_full.php | 199 ++-- interface/patient_file/history/history.php | 2 +- interface/patient_file/navigation.php | 42 +- interface/patient_file/problem_encounter.php | 298 ++++++ interface/patient_file/report/custom_report.php | 11 +- interface/patient_file/report/full_report.php | 15 +- interface/patient_file/report/patient_report.php | 2 + .../patient_file/report/print_custom_report.php | 12 +- interface/patient_file/summary/add_edit_issue.php | 274 +++++ interface/patient_file/summary/demographics.php | 730 ++++++------- .../patient_file/summary/demographics_full.php | 1095 ++++++++++---------- .../patient_file/summary/demographics_save.php | 350 ++++--- interface/patient_file/summary/immunizations.php | 366 ++++--- interface/patient_file/summary/patient_summary.php | 17 +- interface/patient_file/summary/pnotes.php | 65 +- interface/patient_file/summary/shot_record.php | 57 + interface/patient_file/summary/stats.php | 87 +- interface/patient_file/summary/stats_full.php | 158 ++- interface/pic/logo.gif | Bin 3220 -> 34408 bytes interface/pic/show_calendar.gif | Bin 0 -> 200 bytes interface/reports/appt_encounter_report.php | 218 ++++ interface/reports/players_report.php | 148 +++ interface/themes/style_sky_blue.css | 4 +- interface/usergroup/facility_admin.php | 35 +- interface/usergroup/user_admin.php | 12 +- interface/usergroup/usergroup.php | 19 +- interface/usergroup/usergroup_admin.php | 18 +- interface/usergroup/usergroup_navigation.php | 13 + templates/report/general_default.html | 27 +- 55 files changed, 5506 insertions(+), 2137 deletions(-) create mode 100644 interface/billing/sl_eob_help.php create mode 100644 interface/billing/sl_eob_invoice.php create mode 100644 interface/billing/sl_eob_patient_note.php create mode 100644 interface/billing/sl_eob_search.php create mode 100644 interface/billing/sl_receipts_report.php rewrite interface/main/calendar/modules/PostCalendar/pntemplates/default/views/day/default.html (92%) rewrite interface/main/calendar/modules/PostCalendar/pntemplates/default/views/week/default.html (92%) create mode 100644 interface/patient_file/encounter/search_code.php rewrite interface/patient_file/encounter/superbill_codes.php (64%) rewrite interface/patient_file/history/encounters_full.php (76%) create mode 100644 interface/patient_file/problem_encounter.php create mode 100644 interface/patient_file/summary/add_edit_issue.php rewrite interface/patient_file/summary/demographics.php (72%) rewrite interface/patient_file/summary/demographics_full.php (93%) rewrite interface/patient_file/summary/demographics_save.php (92%) rewrite interface/patient_file/summary/immunizations.php (98%) create mode 100644 interface/patient_file/summary/shot_record.php rewrite interface/patient_file/summary/stats_full.php (97%) rewrite interface/pic/logo.gif (100%) create mode 100644 interface/pic/show_calendar.gif create mode 100644 interface/reports/appt_encounter_report.php create mode 100644 interface/reports/players_report.php diff --git a/interface/billing/billing_process.php b/interface/billing/billing_process.php index 320b147f3..d1e72ba5b 100644 --- a/interface/billing/billing_process.php +++ b/interface/billing/billing_process.php @@ -56,7 +56,8 @@ if (isset($_POST['bn_electronic_file']) && !empty($_POST['claims'])) { $pid = $tmpvars[0]; $encounter = $tmpvars[1]; if (!empty($encounter) && !empty($pid)) { - $sql = "UPDATE billing set billed = 1 where encounter = '" . $encounter . "' and pid = '" . $pid . "'"; + $sql = "UPDATE billing set billed = 1 where encounter = '" . $encounter . + "' and pid = '" . $pid . "' and activity != 0"; $result = $db->execute($sql); if(!$result) { $error = true; @@ -71,10 +72,7 @@ if (isset($_POST['bn_electronic_file']) && !empty($_POST['claims'])) { } } if (!$error) { - - - - header("Pragma: public"); + header("Pragma: public"); header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Content-Type: application/force-download"); diff --git a/interface/billing/billing_report.php b/interface/billing/billing_report.php index 355e565b0..5f8e4526f 100644 --- a/interface/billing/billing_report.php +++ b/interface/billing/billing_report.php @@ -1,5 +1,7 @@ '" . mysql_real_escape_string($sdate) . "' or DATE_FORMAT( process_date, '%Y-%m-%d' ) = '" . mysql_real_escape_string($sdate) ."') " - . "and (process_date < '" . mysql_real_escape_string($edate) . "'or DATE_FORMAT( process_date, '%Y-%m-%d' ) = '" . mysql_real_escape_string($edate) ."') " - . " order by pid,encounter"; + $sql = "SELECT billing.*, concat(pd.fname, ' ', pd.lname) as name from billing " + . "join patient_data as pd on pd.pid = billing.pid where billed = '1' and " + . "(process_date > '" . mysql_real_escape_string($sdate) + . "' or DATE_FORMAT( process_date, '%Y-%m-%d' ) = '" . mysql_real_escape_string($sdate) ."') " + . "and (process_date < '" . mysql_real_escape_string($edate) + . "'or DATE_FORMAT( process_date, '%Y-%m-%d' ) = '" . mysql_real_escape_string($edate) ."') " + . "order by pid,encounter"; $db = get_db(); $results = $db->Execute($sql); $billings = array(); @@ -171,7 +176,13 @@ if ($userauthorized) { print ' '; $acct_config = $GLOBALS['oer_config']['ws_accounting']; if($acct_config['enabled'] == true) { - print '[Accounting System]'; + print '[SQL-Ledger]'; + if (acl_check('acct', 'rep')) { + print '   [Reports]'; + } + if (acl_check('acct', 'eob')) { + print '   [EOBs]'; + } } ?> @@ -292,7 +303,6 @@ if ($ret = getBillsBetween($from_date,$to_date,$my_authorized,$unbilled,"%")) { $skipping = FALSE; foreach ($ret as $iter) { - $name = getPatientData($iter['pid']); $this_encounter_id = $iter['pid'] . "-" . $iter['encounter']; if ($last_encounter_id != $this_encounter_id) { @@ -325,6 +335,19 @@ if ($ret = getBillsBetween($from_date,$to_date,$my_authorized,$unbilled,"%")) { } } + $name = getPatientData($iter['pid'], "fname, mname, lname"); + + # Check if patient has primary insurance and a subscriber exists for it. + # If not we will highlight their name in red. + # TBD: more checking here. + # + $res = sqlQuery("select count(*) as count from insurance_data where " . + "pid = " . $iter['pid'] . " and " . + "type='primary' and " . + "subscriber_lname is not null and " . + "subscriber_lname != '' limit 1"); + $namecolor = ($res['count'] > 0) ? "black" : "#ff7777"; + ++$encount; $bgcolor = "#" . (($encount & 1) ? "ddddff" : "ffdddd"); echo "\n"; @@ -332,7 +355,7 @@ if ($ret = getBillsBetween($from_date,$to_date,$my_authorized,$unbilled,"%")) { $rcount = 0; $oldcode = ""; - $lhtml .= " ". $name['fname'] . " " . $name['lname'] . " (" . $iter['pid'] . "-" . $iter['encounter'] . ")"; + $lhtml .= " ". $name['fname'] . " " . $name['lname'] . " (" . $iter['pid'] . "-" . $iter['encounter'] . ")"; $lhtml .= "   [To Encounter]"; $lhtml .= "   [To Demographics]"; $lhtml .= "
\n"; @@ -342,7 +365,7 @@ if ($ret = getBillsBetween($from_date,$to_date,$my_authorized,$unbilled,"%")) { $result = sqlStatement($query); $count = 0; - $default_x12_partner = $iter['x12_partner_id']; + $default_x12_partner = $iter['ic_x12id']; while ($row = mysql_fetch_array($result)) { if (strlen($row['provider']) > 0) { @@ -409,7 +432,8 @@ if ($ret = getBillsBetween($from_date,$to_date,$my_authorized,$unbilled,"%")) { $oldcode = $iter['code_type']; $rhtml .= "\n"; $justify = ""; - if ($iter['code_type'] == "CPT4" || $iter['code_type'] == "HCPCS") { +// if ($iter['code_type'] == "CPT4" || $iter['code_type'] == "HCPCS") { + if ($code_types[$iter['code_type']]['just']) { $js = split(":",$iter['justify']); $counter = 0; foreach ($js as $j) { diff --git a/interface/billing/sl_eob_help.php b/interface/billing/sl_eob_help.php new file mode 100644 index 000000000..7eec0ddbd --- /dev/null +++ b/interface/billing/sl_eob_help.php @@ -0,0 +1,47 @@ + + + +EOB Posting - Instructions + + +

EOB Data Entry

+ +

This module consists of two windows (not including this help page) +and promotes efficient entry of EOB data. + +

The first window is the invoice search page. At the top you should +enter a check number, pay date and check amount. The reason for the check +number and pay date is so that you don't have to enter them over and over +again for each claim. The amount that you enter will be decreased for each +invoice that is given part of the payment, and hopefully will end at zero +when you are done. + +

Just below the check information is a blue area where you put in your +search parameters. You can search by patient name, chart number, encounter +number or date of service, or any combination of these. The "Closed" checkbox, +if checked, will include closed invoices in the search. Click the Search +button to perform the search. + +

Upon searching you are presented with a list of invoices. Click on one +of the invoice numbers to open the second window, which is the data entry +page. + +

In the data entry page you can change the due date and notes for the invoice. +More importantly, for each billing code for which an amount was charged, you +can enter payment and adjustment information. + +

The Source and Date columns are copied from the first page, so normally +you will not need to touch those. You can put a payment amount in the Pay +column, an adjustment amount in the Adjust column, or both. You can also click +the "W" on the right to automatically compute an adjustment value that +writes off the remainder of the charge for that line item. + +

Pay attention to the due date. This is the date when we will start asking +the patient to pay the remaining balance. If there is a balance +that the patient should pay, then set the due date to the current date. If +you will be submitting a secondary claim then set the due date about 40 days +into the future, or as otherwise prescribed by your site's policies. + +

After the information is correctly entered, click the Save button. + + diff --git a/interface/billing/sl_eob_invoice.php b/interface/billing/sl_eob_invoice.php new file mode 100644 index 000000000..2306829af --- /dev/null +++ b/interface/billing/sl_eob_invoice.php @@ -0,0 +1,788 @@ + + // + // 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 is the second of two pages to support posting of EOBs. + // The first is sl_eob_search.php. + + include_once("../globals.php"); + include_once("../../library/patient.inc"); + include_once("../../library/forms.inc"); + include_once("../../library/sql-ledger.inc"); + include_once("../../library/invoice_summary.inc.php"); + include_once("../../custom/code_types.inc.php"); + + $debug = 0; // set to 1 for debugging mode + + $reasons = array( + "Ins adjust", + "Coll w/o", + "Pt released", + "Sm debt w/o", + "To ded'ble", + "To copay", + "Bad debt", + "Discount", + "Hardship w/o", + "Ins refund", + "Pt refund", + "Ins overpaid", + "Pt overpaid" + ); + + $info_msg = ""; + + // Format money for display. + // + function bucks($amount) { + if ($amount) + printf("%.2f", $amount); + } + + // Insert a row into the acc_trans table. + // + function addTransaction($invid, $chartid, $amount, $date, $source, $memo, $insplan) { + global $sl_err, $debug; + $date = fixDate($date); + $query = "INSERT INTO acc_trans ( " . + "trans_id, " . + "chart_id, " . + "amount, " . + "transdate, " . + "source, " . + "project_id, " . + "memo " . + ") VALUES ( " . + "$invid, " . // trans_id + "$chartid, " . // chart_id + "$amount, " . // amount + "'$date', " . // transdate + "'$source', " . // source + "$insplan, " . // project_id + "'$memo' " . // memo + ")"; + if ($debug) { + echo $query . "
\n"; + } else { + SLQuery($query); + if ($sl_err) die($sl_err); + } + } + + // Insert a row into the invoice table. + // + function addLineItem($invid, $serialnumber, $amount, $adjdate, $insplan, $reason) { + global $sl_err, $services_id, $debug; + $adjdate = fixDate($adjdate); + $description = "Adjustment $adjdate $reason"; + $query = "INSERT INTO invoice ( " . + "trans_id, " . + "parts_id, " . + "description, " . + "qty, " . + "allocated, " . + "sellprice, " . + "fxsellprice, " . + "discount, " . + "unit, " . + "project_id, " . + "serialnumber " . + ") VALUES ( " . + "$invid, " . // trans_id + "$services_id, " . // parts_id + "'$description', " . // description + "1, " . // qty + "0, " . // allocated + "$amount, " . // sellprice + "$amount, " . // fxsellprice + "0, " . // discount + "'', " . // unit + "$insplan, " . // project_id + "'$serialnumber'" . // serialnumber + ")"; + if ($debug) { + echo $query . "
\n"; + } else { + SLQuery($query); + if ($sl_err) die($sl_err); + } + } + + // Update totals and payment date in the invoice header. Dollar amounts are + // stored as double precision floats so we have to be careful about rounding. + // + function updateAR($invid, $amount, $paid = 0, $paydate = "") { + global $sl_err, $debug; + $paydate = fixDate($paydate); + $query = "UPDATE ar SET amount = round(CAST (amount AS numeric) + $amount, 2), " . + "netamount = round(CAST (netamount AS numeric) + $amount, 2)"; + if ($paid) $query .= ", paid = round(CAST (paid AS numeric) + $paid, 2), datepaid = '$paydate'"; + $query .= " WHERE id = $invid"; + if ($debug) { + echo $query . "
\n"; + } else { + SLQuery($query); + if ($sl_err) die($sl_err); + } + } + + // Do whatever is necessary to make this invoice re-billable. + // + function setupSecondary($invid) { + global $sl_err, $debug, $info_msg, $GLOBALS; + + // Get some needed items from the SQL-Ledger invoice. + $arres = SLQuery("select invnumber, transdate, customer_id, employee_id " . + "from ar where ar.id = $invid"); + if ($sl_err) die($sl_err); + $arrow = SLGetRow($arres, 0); + if (! $arrow) die("There is no match for invoice id = $trans_id."); + $customer_id = $arrow['customer_id']; + list($trash, $encounter) = explode(".", $arrow['invnumber']); + + // Get the OpenEMR PID corresponding to the customer. + $pdrow = sqlQuery("SELECT patient_data.pid " . + "FROM integration_mapping, patient_data WHERE " . + "integration_mapping.foreign_id = $customer_id AND " . + "integration_mapping.foreign_table = 'customer' AND " . + "patient_data.id = integration_mapping.local_id"); + $pid = $pdrow['pid']; + if (! $pid) die("Cannot find patient from SQL-Ledger customer id = $customer_id."); + + // Find out if the encounter exists. + $ferow = sqlQuery("SELECT pid FROM form_encounter WHERE " . + "encounter = $encounter"); + $encounter_pid = $ferow['pid']; + + // If it exists, just update the billing items. + if ($encounter_pid) { + if ($encounter_pid != $pid) + die("Expected form_encounter.pid to be $pid, but was $encounter_pid"); + $query = "UPDATE billing SET billed = 0, bill_process = 0, payer_id = -1, " . + "bill_date = NULL, process_date = NULL, process_file = NULL " . + "WHERE encounter = $encounter AND pid = $pid AND activity = 1"; + if ($debug) { + echo $query . "
\n"; + } else { + sqlQuery($query); + } + $info_msg = "Encounter $encounter is ready for re-billing."; + return; + } + + // It does not exist then it better be a date. + if (! preg_match("/^20\d\d\d\d\d\d$/", $encounter)) + die("Internal error: encounter '$encounter' should exist but does not."); + + $employee_id = $arrow['employee_id']; + + // Get the OpenEMR provider info corresponding to the SQL-Ledger salesman. + $drrow = sqlQuery("SELECT users.id, users.username, users.facility " . + "FROM integration_mapping, users WHERE " . + "integration_mapping.foreign_id = $employee_id AND " . + "integration_mapping.foreign_table = 'salesman' AND " . + "users.id = integration_mapping.local_id"); + $provider_id = $drrow['id']; + if (! $provider_id) die("Cannot find provider from SQL-Ledger employee = $employee_id."); + + $date_of_service = $arrow['transdate']; + if (! $date_of_service) die("Invoice has no date!"); + + // Generate a new encounter number. + $conn = $GLOBALS['adodb']['db']; + $new_encounter = $conn->GenID("sequences"); + + // Create the "new encounter". + $encounter_id = 0; + $query = "INSERT INTO form_encounter ( " . + "date, reason, facility, pid, encounter, onset_date " . + ") VALUES ( " . + "'$date_of_service', " . + "'Imported from Accounting', " . + "'" . addslashes($drrow['facility']) . "', " . + "$pid, " . + "$new_encounter, " . + "'$date_of_service' " . + ")"; + if ($debug) { + echo $query . "
\n"; + echo "Call to addForm() goes here.
\n"; + } else { + $encounter_id = idSqlStatement($query); + if (! $encounter_id) die("Insert failed: $query"); + addForm($new_encounter, "New Patient Encounter", $encounter_id, + "newpatient", $pid, 1, $date_of_service); + $info_msg = "Encounter $new_encounter has been created. "; + } + + // For each invoice line item with a billing code we will insert + // a billing row with payer_id set to -1. Order the line items + // chronologically so that each procedure code will be followed by + // its associated icd9 code. + + $inres = SLQuery("SELECT * FROM invoice WHERE trans_id = $invid " . + "ORDER BY id"); + if ($sl_err) die($sl_err); + + // When nonzero, this will be the ID of a billing row that needs to + // have its justify field set. + $proc_ins_id = 0; + + for ($irow = 0; $irow < SLRowCount($inres); ++$irow) { + $row = SLGetRow($inres, $irow); + $amount = $row['sellprice']; + + // Extract the billing code. + $code = "Unknown"; + if (preg_match("/([A-Za-z0-9]\d\d\S*)/", $row['serialnumber'], $matches)) { + $code = strtoupper($matches[1]); + } + else if (preg_match("/([A-Za-z0-9]\d\d\S*)/", $row['description'], $matches)) { + $code = strtoupper($matches[1]); + } + + list($code, $modifier) = explode("-", $code); + + // Set the billing code type and description. + $code_type = ""; + $code_text = ""; + + /**** + if (preg_match("/CPT/", $row['serialnumber'])) { + $code_type = "CPT4"; + $code_text = "Procedure $code"; + } + else if (preg_match("/HCPCS/", $row['serialnumber'])) { + $code_type = "HCPCS"; + $code_text = "Procedure $code"; + } + else if (preg_match("/ICD/", $row['serialnumber'])) { + $code_type = "ICD9"; + $code_text = "Diagnosis $code"; + if ($proc_ins_id) { + $query = "UPDATE billing SET justify = '$code' WHERE id = $proc_ins_id"; + if ($debug) { + echo $query . "
\n"; + } else { + sqlQuery($query); + } + $proc_ins_id = 0; + } + } + ****/ + + foreach ($code_types as $key => $value) { + if (preg_match("/$key/", $row['serialnumber'])) { + $code_type = $key; + if ($value['fee']) { + $code_text = "Procedure $code"; + } else { + $code_text = "Diagnosis $code"; + if ($proc_ins_id) { + $query = "UPDATE billing SET justify = '$code' WHERE id = $proc_ins_id"; + if ($debug) { + echo $query . "
\n"; + } else { + sqlQuery($query); + } + $proc_ins_id = 0; + } + } + break; + } + } + + // Skip adjustments. + if (! $code_type) continue; + + // Insert the billing item. If this for a procedure code then save + // the row ID so that we can update the "justify" field with the ICD9 + // code, which should come next in the loop. + // + $query = "INSERT INTO billing ( " . + "date, code_type, code, pid, provider_id, user, groupname, authorized, " . + "encounter, code_text, activity, payer_id, billed, bill_process, " . + "modifier, units, fee, justify " . + ") VALUES ( " . + "NOW(), " . + "'$code_type', " . + "'$code', " . + "$pid, " . + "$provider_id, " . + "'" . $_SESSION['authId'] . "', " . + "'" . $_SESSION['authProvider'] . "', " . + "1, " . + "$new_encounter, " . + "'$code_text', " . + "1, " . + "-1, " . + "0, " . + "0, " . + "'$modifier', " . + "0, " . + "$amount, " . + "'' " . + ")"; + if ($debug) { + echo $query . "
\n"; + } else { + $proc_ins_id = idSqlStatement($query); + if ($code_type != "CPT4" && $code_type != "HCPCS") + $proc_ins_id = 0; + } + } + + // Finally, change this invoice number to contain the new encounter number. + // + $new_invnumber = "$pid.$new_encounter"; + $query = "UPDATE ar SET invnumber = '$new_invnumber' WHERE id = $invid"; + if ($debug) { + echo $query . "
\n"; + } else { + SLQuery($query); + if ($sl_err) die($sl_err); + $info_msg .= "This invoice number has been changed to $new_invnumber."; + } + } +?> + + + +EOB Posting - Invoice + + + +This module is in test mode. The database will not be changed.

\n"; + } + $paytotal = 0; + foreach ($_POST['form_line'] as $code => $cdata) { + $thissrc = trim($cdata['src']); + $thisdate = trim($cdata['date']); + $thispay = trim($cdata['pay']); + $thisadj = trim($cdata['adj']); + $thisins = trim($cdata['ins']); + $reason = trim($cdata['reason']); + if (strpos(strtolower($reason), 'ins') !== false) + $reason .= ' ' . $_POST['form_insurance']; + if (! $thisins) $thisins = 0; + if ($thispay) { + // Post a payment: add to ar, subtract from cash. + addTransaction($trans_id, $chart_id_ar, $thispay, $thisdate, $thissrc, $code, $thisins); + addTransaction($trans_id, $chart_id_cash, 0 - $thispay, $thisdate, $thissrc, $code, $thisins); + updateAR($trans_id, 0, $thispay, $thisdate); + $paytotal += $thispay; + } + if ($thisadj) { + // Post an adjustment: add negative invoice item, add to ar, subtract from income + addLineItem($trans_id, $code, 0 - $thisadj, $thisdate, $thisins, $reason); + addTransaction($trans_id, $chart_id_ar, $thisadj, $thisdate, "InvAdj $thissrc", $code, $thisins); + addTransaction($trans_id, $chart_id_income, 0 - $thisadj, $thisdate, "InvAdj $thissrc", $code, $thisins); + updateAR($trans_id, 0 - $thisadj); + } + } + $form_duedate = fixDate($_POST['form_duedate']); + $form_notes = trim($_POST['form_notes']); + + // Maintain the list of insurances whose EOBs we have posted. + // We use the "Ship Via" field of the invoice to hold these. + // + $form_eobs = trim($_POST['form_eobs']); + $form_insurance = trim($_POST['form_insurance']); + if (strpos($form_eobs, $form_insurance) === false) { + if ($form_eobs) $form_eobs .= ","; else $form_eobs = "EOBs: "; + $form_eobs .= $form_insurance; + } + + $query = "UPDATE ar SET duedate = '$form_duedate', notes = '$form_notes', " . + "shipvia = '$form_eobs' WHERE id = $trans_id"; + + if ($debug) { + echo $query . "
\n"; + } else { + SLQuery($query); + if ($sl_err) die($sl_err); + } + if ($_POST['form_secondary']) { + setupSecondary($trans_id); + } + echo "\n"; + SLClose(); + exit(); + } + + // Get invoice data into $arrow. + $arres = SLQuery("select ar.*, customer.name, employee.name as doctor " . + "from ar, customer, employee where ar.id = $trans_id and " . + "customer.id = ar.customer_id and employee.id = ar.employee_id"); + if ($sl_err) die($sl_err); + $arrow = SLGetRow($arres, 0); + if (! $arrow) die("There is no match for invoice id = $trans_id."); + + // Determine the date of service. An 8-digit encounter number is + // presumed to be a date of service imported during conversion. + // Otherwise look it up in the form_encounter table. + // + $svcdate = ""; + list($trash, $encounter) = explode(".", $arrow['invnumber']); + if (strlen($encounter) == 8) { + $svcdate = substr($encounter, 0, 4) . "-" . substr($encounter, 4, 2) . + "-" . substr($encounter, 6, 2); + } + else if ($encounter) { + $tmp = sqlQuery("SELECT date FROM form_encounter WHERE " . + "encounter = $encounter"); + $svcdate = substr($tmp['date'], 0, 10); + } + + // Get invoice charge details. + $codes = get_invoice_summary($trans_id, true); +?> +

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Patient: + + + + +
+ Provider: + + +
+ Invoice: + + +
+ Svc Date: + + + + Already posted:  + +
+ Bill Date: + + + + Now posting for:  + Ins1  + Ins2  + Ins3  + Patient + ' /> +
+ Due Date: + + ' + title='Due date mm/dd/yyyy or yyyy-mm-dd'> + + Needs secondary billing +    + +   + +
+
+ + + + + + + + + + + + + + $cdata) { + ++$encount; + $bgcolor = "#" . (($encount & 1) ? "ddddff" : "ffdddd"); + $dispcode = $code; + // this sorts the details more or less chronologically: + ksort($cdata['dtl']); + foreach ($cdata['dtl'] as $dkey => $ddata) { + $ddate = substr($dkey, 0, 10); + if (preg_match('/^(\d\d\d\d)(\d\d)(\d\d)\s*$/', $ddate, $matches)) { + $ddate = $matches[1] . '-' . $matches[2] . '-' . $matches[3]; + } + $tmpchg = ""; + $tmpadj = ""; + if ($ddata['chg'] > 0) + $tmpchg = $ddata['chg']; + else if ($ddata['chg'] < 0) + $tmpadj = 0 - $ddata['chg']; +?> + + + + + + + + + + + + + + + + + + + + + + + +
+ Code + + Charge + + Balance  + + Source + + Date + + Pay + + Adjust + + Reason +
+ + + + +   + + + + + + + + + + +
+ + +   + + + +   + + + + + + + + +   W + + +
+
+
+ + + diff --git a/interface/billing/sl_eob_patient_note.php b/interface/billing/sl_eob_patient_note.php new file mode 100644 index 000000000..611df4c57 --- /dev/null +++ b/interface/billing/sl_eob_patient_note.php @@ -0,0 +1,67 @@ + + // + // 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 allows entry and editing of a "billing note" for the patient. + + include_once("../globals.php"); + include_once("../../library/patient.inc"); + include_once("../../library/forms.inc"); + + $info_msg = ""; +?> + + + +EOB Posting - Patient Note + + +\n"; + if ($info_msg) echo " alert('$info_msg');\n"; + echo " window.close();\n"; + echo "\n"; + exit(); + } + + $row = sqlQuery("select fname, lname, genericname2, genericval2 " . + "from patient_data where pid = '$patient_id' limit 1"); +?> +
+ +

Billing Note for

+

 

+ +
+ +

+' /> +

+ +

 

+ +  + + +
+
+ + + diff --git a/interface/billing/sl_eob_search.php b/interface/billing/sl_eob_search.php new file mode 100644 index 000000000..f9bdf5d9d --- /dev/null +++ b/interface/billing/sl_eob_search.php @@ -0,0 +1,472 @@ + + // + // 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 is the first of two pages to support posting of EOBs. + // The second is sl_eob_invoice.php. + + include_once("../globals.php"); + include_once("../../library/patient.inc"); + include_once("../../library/sql-ledger.inc"); + include_once("../../library/invoice_summary.inc.php"); + include_once("../../custom/statement.inc.php"); + + $DEBUG = 0; // set to 0 for production, 1 to test + + $alertmsg = ''; + + function bucks($amount) { + if ($amount) + printf("%.2f", $amount); + } + + $today = date("Y-m-d"); + + SLConnect(); + + // Print statements if requested. + // + if ($_POST['form_print'] && $_POST['form_cb']) { + + $fhprint = fopen($STMT_TEMP_FILE, 'w'); + + $where = ""; + foreach ($_POST['form_cb'] as $key => $value) $where .= " OR ar.id = $key"; + $where = substr($where, 4); + + // Sort by patient so that multiple invoices can be + // represented on a single statement. + $res = SLQuery("SELECT ar.*, customer.name, " . + "customer.address1, customer.address2, " . + "customer.city, customer.state, customer.zipcode " . + "FROM ar, customer WHERE ( $where ) AND " . + "customer.id = ar.customer_id " . + "ORDER BY ar.customer_id, ar.transdate"); + if ($sl_err) die($sl_err); + + $stmt = array(); + + for ($irow = 0; $irow < SLRowCount($res); ++$irow) { + $row = SLGetRow($res, $irow); + + // Determine the date of service. An 8-digit encounter number is + // presumed to be a date of service imported during conversion. + // Otherwise look it up in the form_encounter table. + // + $svcdate = ""; + list($pid, $encounter) = explode(".", $row['invnumber']); + if (strlen($encounter) == 8) { + $svcdate = substr($encounter, 0, 4) . "-" . substr($encounter, 4, 2) . + "-" . substr($encounter, 6, 2); + } else if ($encounter) { + $tmp = sqlQuery("SELECT date FROM form_encounter WHERE " . + "encounter = $encounter"); + $svcdate = substr($tmp['date'], 0, 10); + } + + // How many times have we dunned them for this invoice? + $intnotes = trim($row['intnotes']); + $duncount = substr_count(strtolower($intnotes), "statement sent"); + + // If this is a new patient then print the pending statement + // and start a new one. This is an associative array: + // + // pid = patient ID + // patient = patient name + // amount = total amount due + // duedate = due date of the oldest included invoice + // age = number of days from duedate to today + // to = array of addressee name/address lines + // lines = array of: + // dos = date of service "yyyy-mm-dd" + // desc = description + // amount = charge less adjustments + // paid = amount paid + // notice = 1 for first notice, 2 for second, etc. + // + if ($stmt['pid'] != $row['customer_id']) { + fwrite($fhprint, create_statement($stmt)); + $stmt['pid'] = $row['customer_id']; + $stmt['patient'] = $row['name']; + $stmt['to'] = array($row['name']); + if ($row['address1']) $stmt['to'][] = $row['address1']; + if ($row['address2']) $stmt['to'][] = $row['address2']; + $stmt['to'][] = $row['city'] . ", " . $row['state'] . " " . $row['zipcode']; + $stmt['lines'] = array(); + $stmt['amount'] = '0.00'; + $stmt['today'] = $today; + $stmt['duedate'] = $row['duedate']; + } else { + // Report the oldest due date. + if ($row['duedate'] < $stmt['duedate']) { + $stmt['duedate'] = $row['duedate']; + } + } + + $stmt['age'] = round((strtotime($today) - strtotime($stmt['duedate'])) / + (24 * 60 * 60)); + + $invlines = get_invoice_summary($row['id']); + foreach ($invlines as $key => $value) { + $line = array(); + $line['dos'] = $svcdate; + $line['desc'] = "Procedure $key"; + $line['amount'] = sprintf("%.2f", $value['chg']); + $line['paid'] = sprintf("%.2f", $value['chg'] - $value['bal']); + $line['notice'] = $duncount + 1; + $stmt['lines'][] = $line; + $stmt['amount'] = sprintf("%.2f", $stmt['amount'] + $value['bal']); + } + + // Record something in ar.intnotes about this statement run. + if ($intnotes) $intnotes .= "\n"; + $intnotes = addslashes($intnotes . "Statement sent $today"); + if (! $DEBUG && ! $_POST['form_without']) { + SLQuery("UPDATE ar SET intnotes = '$intnotes' WHERE id = " . $row['id']); + if ($sl_err) die($sl_err); + } + } + + fwrite($fhprint, create_statement($stmt)); + + if ($DEBUG) { + $alertmsg = "Printing skipped; see test output in $STMT_TEMP_FILE"; + } else { + exec("$STMT_PRINT_CMD $STMT_TEMP_FILE"); + if ($_POST['form_without']) { + $alertmsg = "Now printing statements; invoices will not be updated."; + } else { + $alertmsg = "Now printing statements and updating invoices."; + } + } + } +?> + + + +EOB Posting - Search + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+   + + Source: + + ' + title='A check number or claim number to identify the payment'> + + Pay Date: + + ' + title='Date of payment mm/dd/yyyy'> + + Amount: + + ' + title='Paid amount that you will allocate'> + + Help +
+
+ Name: + + ' + title='Any part of the patient name'> + + Chart ID: + + ' + title='Patient chart ID'> + + Encounter: + + ' + title='Encounter number'> + + Svc Date: + + ' + title='Date of service mm/dd/yyyy'> + + + + +
+
+ + + + + + + + + + + + + + +\n"; // debugging + + $t_res = SLQuery($query); + if ($sl_err) die($sl_err); + + for ($irow = 0; $irow < SLRowCount($t_res); ++$irow) { + $row = SLGetRow($t_res, $irow); + + $bgcolor = (($irow & 1) ? "#ffdddd" : "#ddddff"); + + // Determine the date of service. If this was a search parameter + // then we already know it. Or an 8-digit encounter number is + // presumed to be a date of service imported during conversion. + // Otherwise look it up in the form_encounter table. + // + $svcdate = ""; + list($pid, $encounter) = explode(".", $row['invnumber']); + if ($form_date) { + $svcdate = $form_date; + } + else if (strlen($encounter) == 8) { + $svcdate = substr($encounter, 0, 4) . "-" . substr($encounter, 4, 2) . + "-" . substr($encounter, 6, 2); + } + else if ($encounter) { + $tmp = sqlQuery("SELECT date FROM form_encounter WHERE " . + "encounter = $encounter"); + $svcdate = substr($tmp['date'], 0, 10); + } + + // $duncount was originally supposed to be the number of times that + // the patient was sent a statement for this invoice. + // + $duncount = substr_count(strtolower($row['intnotes']), "statement sent"); + + // But if we have not yet billed the patient, then compute $duncount as a + // negative count of the number of insurance plans for which we have not + // yet posted an EOB. + // + if (! $duncount) { + $insgot = strtolower($row['notes']); + $inseobs = strtolower($row['shipvia']); + foreach (array('ins1', 'ins2', 'ins3') as $value) { + if (strpos($insgot, $value) !== false && + strpos($inseobs, $value) === false) + --$duncount; + } + } + + $isdue = ($row['duedate'] <= $today && $row['amount'] > $row['paid']) ? " checked" : ""; +?> + + + + + + + + + + + + + +
+  Patient + +  Invoice + +  Svc Date + +  Due Date + + Amount  + + Paid  + + Balance  + + Prv + + Sel +
+   + +   + +   + +   + +   + +   + +   + + + + ]' /> +
+ +

+   +   +   + Without Update +

+ +
+
+ + + diff --git a/interface/billing/sl_receipts_report.php b/interface/billing/sl_receipts_report.php new file mode 100644 index 000000000..4b9ef65be --- /dev/null +++ b/interface/billing/sl_receipts_report.php @@ -0,0 +1,249 @@ + + + +Receipts for Medical Services + + + +
+ +

Cash Receipts

+ +
+ + + + + + + + + + + +
+\n"; + echo "
+
+ + + + + + + + + + + += '$from_date' and " . + "acc_trans.transdate <= '$to_date' and " . + "ar.id = acc_trans.trans_id"; + + if ($form_doctor) { + $tmp = sqlQuery("select foreign_id from integration_mapping where " . + "foreign_table = 'salesman' and local_id = $form_doctor"); + // $emplid = SLQueryValue("select id from employee where employeenumber = " . + // $tmp['foreign_id']); + $emplid = $tmp['foreign_id']; + $query .= " and ar.employee_id = $emplid"; + } + + $query .= " order by ar.employee_id, acc_trans.transdate, ar.invnumber, acc_trans.memo"; + + echo "\n"; + + $t_res = SLQuery($query); + if ($sl_err) die($sl_err); + + $docname = ""; + $docnameleft = ""; + $docid = 0; + $doctotal1 = 0; + $grandtotal1 = 0; + $doctotal2 = 0; + $grandtotal2 = 0; + + for ($irow = 0; $irow < SLRowCount($t_res); ++$irow) { + $row = SLGetRow($t_res, $irow); + $amount1 = 0; + $amount2 = 0; + if (is_clinic($row['memo'])) + $amount2 -= $row['amount']; + else + $amount1 -= $row['amount']; + + if ($docid != $row['employee_id']) { + if ($docid) { + // Print doc totals. +?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Practitioner + + Date + + Invoice + + Procedure + + Prof. + + Clinic +
+ Totals for + + + + +
+ + + + + + + + + + + +
+ Totals for + + + + +
+ Grand Totals + + + + +
+
+
+ + diff --git a/interface/login/filler.php b/interface/login/filler.php index 72386f67a..ba8470ae4 100644 --- a/interface/login/filler.php +++ b/interface/login/filler.php @@ -1,20 +1,14 @@ - - Navigation - - - - + - diff --git a/interface/login/login.php b/interface/login/login.php index acaf616ff..60a818a38 100644 --- a/interface/login/login.php +++ b/interface/login/login.php @@ -83,7 +83,7 @@ if (count($result) != 1) {
-Copyright Notice:
+Copyright Notice
diff --git a/interface/main/authorizations/authorizations.php b/interface/main/authorizations/authorizations.php index 9682bf2ad..d7af0afb2 100644 --- a/interface/main/authorizations/authorizations.php +++ b/interface/main/authorizations/authorizations.php @@ -53,7 +53,7 @@ sqlStatement("update transactions set authorized=1 where pid='".$_GET["pid"]."'" //fetch billing information: -if ($res = sqlStatement("select *, concat(u.fname,' ', u.lname) as user from billing LEFT JOIN users as u on billing.user = u.id where billing.authorized=0 and groupname='$groupname'")) { +if ($res = sqlStatement("select *, concat(u.fname,' ', u.lname) as user from billing LEFT JOIN users as u on billing.user = u.id where billing.authorized = 0 and billing.activity = 1 and groupname='$groupname'")) { for ($iter = 0;$row = sqlFetchArray($res);$iter++) $result[$iter] = $row; diff --git a/interface/main/calendar/find_patient.php b/interface/main/calendar/find_patient.php index 212ef1afd..d72714a00 100644 --- a/interface/main/calendar/find_patient.php +++ b/interface/main/calendar/find_patient.php @@ -8,7 +8,7 @@ if ($_GET['show_pnote_link'] == true || $_POST['show_pnote_link'] == true) { $pnote_link = "&show_pnote_link=1"; } //the maximum number of patient records to display: -$M = 100; +$M = 2000; /*if ($_GET['new'] == 1) { echo "new is 1"; @@ -116,7 +116,7 @@ else { " onfocus="javascript:document.findpatientform.lastname.value='';">

diff --git a/interface/main/calendar/modules/PostCalendar/pntemplates/default/views/day/default.html b/interface/main/calendar/modules/PostCalendar/pntemplates/default/views/day/default.html dissimilarity index 92% index dddb4a205..b12cdaf3d 100644 --- a/interface/main/calendar/modules/PostCalendar/pntemplates/default/views/day/default.html +++ b/interface/main/calendar/modules/PostCalendar/pntemplates/default/views/day/default.html @@ -1,156 +1,371 @@ -[-*Smarty*-] -[-config_load file="default.conf"-] -[-*Load the Language Definitions*-] -[-config_load file="lang.$USER_LANG"-] -[-include file="$TPL_NAME/views/header.html"-] -[-* we want to include out stylesheet for this view*-] -[-fetch file="$TPL_STYLE_PATH/day.css" assign="css"-] -[-eval var=$css-] - -[-if $PRINT_VIEW != 1-] -[-*Main Navigation*-] -[-include file="$TPL_NAME/views/global/navigation.html"-] -[-/if-] - -[-assign var="dayname" value=$DATE|date_format:"%w"-] -[-assign var="day" value=$DATE|date_format:"%d"|string_format:"%1d"-] -[-assign var="month" value=$DATE|date_format:"%m"|string_format:"%1d"-] -[-assign var="year" value=$DATE|date_format:"%Y"|string_format:"%4d"-] - - - - - [-if $PRINT_VIEW != 1-] - - [-/if-] - -
- << - [-if $USE_INT_DATES eq true-] - [-pc_date_format date=$DATE format=#_PC_DATE_FORMAT_INT#-] - [-else-] - [-pc_date_format date=$DATE format=#_PC_DATE_FORMAT_STD#-] - [-/if-] - >> - -
- - - - [-foreach item=provider from=$providers-] - - [-/foreach-] - -
- - - - - [-foreach name=dates item=events key=date from=$A_EVENTS-] - - [-/foreach-] - - - -
[-$provider.fname[0]-][-$provider.lname-]
- - [-assign var="dayname" value=$date|date_format:"%w"-] - [-assign var="day" value=$date|date_format:"%d"|string_format:"%1d"-] - [-assign var="month" value=$date|date_format:"%m"|string_format:"%1d"-] - [-assign var="year" value=$date|date_format:"%Y"|string_format:"%4d"-] - [-assign var="eventdate" value=$date|date_format:"%Y%m%d"-] - [-pc_sort_events var="S_EVENTS" sort="time" order="asc" value=$A_EVENTS-] - -[-php-] - $arr_events = (array)$this->_tpl_vars['S_EVENTS'][$this->_tpl_vars['date']]; - list($this->_tpl_vars['eventkey'], $this->_tpl_vars['event']) = each($arr_events); -[-/php-] - - [-foreach name=times item=time from=$times-] - - - [-assign var="eventsbydate" value=$S_EVENTS.$date-] - - [-* foreach name=events key=eventkey item=event from=$S_EVENTS.$date *-] - -[-php-] - for (; isset($this->_tpl_vars['eventkey']); - list($this->_tpl_vars['eventkey'], $this->_tpl_vars['event']) = each($arr_events)) - { -[-/php-] - - [-assign var="starth" value=$event.startTime|date_format:"%H"-] - [-assign var="displaystarth" value=$event.startTime|date_format:"%I:%M %p" -] - [-assign var="startm" value=$event.startTime|date_format:"%M"-] - [-assign var="mykey" value=$eventkey-] - - [-* if $time.hour == $starth && $startm >= $time.minute && $startm < ($time.minute + $interval) && $event.aid == $provider.id *-] - -[-php-] - if ($this->_tpl_vars['event']['aid'] != $this->_tpl_vars['provider']['id']) - continue; - if ($this->_tpl_vars['starth'] < $this->_tpl_vars['time']['hour']) - continue; - if ($this->_tpl_vars['starth'] > $this->_tpl_vars['time']['hour']) - break; - if ($this->_tpl_vars['startm'] < $this->_tpl_vars['time']['minute']) - continue; - if ($this->_tpl_vars['startm'] >= ($this->_tpl_vars['time']['minute'] + $this->_tpl_vars['interval'])) - break; -[-/php-] - - [-assign var="flagfound" value=true-] - [-assign var="eid" value=$event.eid-] - - - [-* /if *-] - [-* /foreach *-] - -[-php-] - } // end for -[-/php-] - - [-assign var="flagfound" value=false -] - - [-/foreach-] -
- [-if $time.mer == "pm" -] - [-assign var="event_startampm" value=2-] - [-if $time.hour > 12 -] - [-math equation="x-12" x=$time.hour-]:[-$time.minute-] - [-else-] - [-$time.hour-]:[-$time.minute-] - [-/if-] - [-else-] - [-assign var="event_startampm" value=1-] - [-$time.hour-]:[-$time.minute-] - [-/if-] - [-$time.mer-] - - - - [-assign var=short_event_title value=$event.title|strip_tags -] - [-$short_event_title|truncate::"$day_td_width":""-] -
- [-$displaystarth-]([-$event.duration_hours-]:[-$event.duration_minutes-])
- [-include file="$TPL_NAME/user/patient_line.html" event=$event show_icons=true show_provider=false show_patient=true -]  -
-
-
- -[-if $PRINT_VIEW != 1-] - - - - -
- [-#_PC_THEME_PRINT#-] -
- - - - -[-/if-] -[-*footer*-] -[-include file="$TPL_NAME/views/global/footer.html"-] -[-include file="$TPL_NAME/views/footer.html"-] +[-*Smarty*-] +[-*****************************************************************************-] +[-* This is the source code for both day/default.html and week/default.html. *-] +[-* They should always be identical. If you change one, copy to the other! *-] +[-*****************************************************************************-] +[-* Copyright (C) 2005 Rod Roark and others *-] +[-* *-] +[-* 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. *-] +[-*****************************************************************************-] +[-config_load file="default.conf"-] +[-*Load the Language Definitions*-] +[-config_load file="lang.$USER_LANG"-] +[-include file="$TPL_NAME/views/header.html"-] +[-* we want to include out stylesheet for this view*-] +[-fetch file="$TPL_STYLE_PATH/day.css" assign="css"-] +[-eval var=$css-] + + + + + +[-php-] + + // [-if $PRINT_VIEW != 1-] + // [-*Main Navigation*-] + // [-include file="$TPL_NAME/views/global/navigation.html"-] + // [-/if-] + + $A_EVENTS =& $this->_tpl_vars['A_EVENTS']; + $S_EVENTS =& $this->_tpl_vars['S_EVENTS']; + $providers =& $this->_tpl_vars['providers']; + $times =& $this->_tpl_vars['times']; + $interval = $this->_tpl_vars['interval']; + $viewtype = $this->_tpl_vars['VIEW_TYPE']; + $PREV_WEEK_URL = $this->_tpl_vars['PREV_WEEK_URL']; + $NEXT_WEEK_URL = $this->_tpl_vars['NEXT_WEEK_URL']; + $PREV_DAY_URL = $this->_tpl_vars['PREV_DAY_URL']; + $NEXT_DAY_URL = $this->_tpl_vars['NEXT_DAY_URL']; + + $Date = postcalendar_getDate(); + if (!isset($y)) $y = substr($Date, 0, 4); + if (!isset($m)) $m = substr($Date, 4, 2); + if (!isset($d)) $d = substr($Date, 6, 2); + + // echo "\n"; + + $MULTIDAY = count($A_EVENTS) > 1; + + $provinfo = getProviderInfo(); + + echo "
\n"; + echo "
\n"; + echo "\n"; + echo " \n"; + echo " \n"; + + // Build the scrolling selection list of providers. + echo " \n"; + + // Build the date and view type selectors and the Go button. + echo " \n"; + + // Show the Add and Search buttons. + echo " \n"; + echo " \n"; + + // Show the date/range and its previous- and next-day/week selectors. + echo " \n"; + echo " \n"; + echo " \n"; + + echo " \n"; + echo "
\n"; + echo " \n"; + echo " \n"; + echo " "; + echo ""; + echo "\n"; + echo " \n"; + echo "  \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo "
\n"; + $atmp = array_keys($A_EVENTS); + if ($MULTIDAY) { + echo "<< \n"; + echo date("F j Y", strtotime($atmp[0])); + echo " - "; + echo date("F j Y", strtotime($atmp[count($atmp)-1])); + echo " >>\n"; + } else { + echo "<< \n"; + echo date("l, F j, Y", strtotime($atmp[0])); + echo " >>\n"; + } + echo " \n"; + echo "  \n"; + echo "
\n"; + echo "
\n"; + echo "
\n"; + +[-/php-] + +[-assign var="dayname" value=$DATE|date_format:"%w"-] +[-assign var="day" value=$DATE|date_format:"%d"|string_format:"%1d"-] +[-assign var="month" value=$DATE|date_format:"%m"|string_format:"%1d"-] +[-assign var="year" value=$DATE|date_format:"%Y"|string_format:"%4d"-] + +[-pc_sort_events var="S_EVENTS" sort="time" order="asc" value=$A_EVENTS-] + +[-php-] + + echo "\n"; + + // For each day... + foreach ($A_EVENTS as $date => $events) { + $need_headers = true; + $eventdate = substr($date, 0, 4) . substr($date, 5, 2) . substr($date, 8, 2); + + // If multiple days then show a date header for each. + if ($MULTIDAY) { + echo " \n"; + echo " "; + echo " \n"; + } + + $arr_events = $S_EVENTS[$date]; + list($slotkey, $slotevent) = each($arr_events); + + // This is an array of provider status information for this day, + // used to properly assign table cell attributes. + $provstat = array(); + + $slotindex = 0; + $lastslotindex = count($times) - 1; + + // For each time slot... + foreach ($times as $slottime) { + $startampm = ($slottime['mer']) == "pm" ? 2 : 1; + $starttimeh = $slottime['hour']; + $starttimem = $slottime['minute']; + + // Repeat doc names at 1PM. This is a kludge; omit it for released code. + // if ($starttimeh == 13 && $starttimem == 0) $need_headers = true; + + // Get all events just for this time slot now, because we can pick up where + // we left off and because we don't want to re-scan all events for the day + // for each table cell. + // + $arr_slot = array(); + for (; isset($slotkey); list($slotkey, $slotevent) = each($arr_events)) { + $starth = substr($slotevent['startTime'], 0, 2); + $startm = substr($slotevent['startTime'], 3, 2); + + if ($starth > $starttimeh) break; + if ($startm >= ($starttimem + $interval)) break; + $arr_slot[$slotkey] = $slotevent; + + $catid = $slotevent['catid']; + $providerid = $slotevent['aid']; + $durminutes = ceil($slotevent['duration'] / 60); + $durslots = ceil($durminutes / $interval); + + // While we're here, collect information for setting cell colors. + if ($catid == 2) { // in office + $provstat[$providerid]['in'] = true; + } + else if ($catid == 3) { // out of office + $provstat[$providerid]['in'] = false; + } + else if ($catid == 4 || $catid == 8 || $catid == 11) { // unavailable types + $endindex = $slotindex + $durslots; + for ($i = $slotindex; $i < $endindex; ++$i) { + $provstat[$providerid][$i]['res'] = true; + } + } + // if duration > slot size then mark slots for border control. + if ($durslots > 1) { + $endindex = $slotindex + $durslots - 1; + for ($i = $slotindex; $i < $endindex; ++$i) { + $provstat[$providerid][$i]['ext'] = true; + } + } + } + + // Write a header row with the provider names if appropriate. + if ($need_headers) { + $need_headers = false; + echo " \n"; + foreach ($providers as $provider) { + echo " \n"; + } + echo " \n"; + } + + echo " \n"; + + // We are now ready to write the table row for the current time slot. + // This loops once for each provider to be displayed. + // + foreach ($providers as $provider) { + $providerid = $provider['id']; + + $content = ""; // this will be the event cell content + + $clsuffix = "acell"; + if ($provstat[$providerid][$slotindex]['res'] || ! $provstat[$providerid]['in']) { + $clsuffix = "ucell"; + } + + // Remove top and/or bottom table cell borders using CSS when events span + // time slots or when the practitioner is not in-office. Using "rowspan" + // would be a difficult and inferior solution to this problem. + // + $tdstyle=""; + if ($slotindex < $lastslotindex && + ($provstat[$providerid][$slotindex]['ext'] || !$provstat[$providerid]['in'])) { + $tdstyle .= " nobot"; + } + if ($slotindex > 0 && ($provstat[$providerid][$slotindex-1]['ext'] || + !($provstat[$providerid]['in'] || $provstat[$providerid]['wasin']))) { + $tdstyle .= " notop"; + } + + $disptimeh = ($starttimeh > 12) ? ($starttimeh - 12) : $starttimeh; + + echo " \n"; + + echo " \n"; + + // Keep track of whether the doc was in during the previous time slot. + $provstat[$providerid]['wasin'] = $provstat[$providerid]['in']; + + } // end provider + + echo " \n"; + + ++$slotindex; + } // end time slot + } // end day + + echo "
" . + date("l, F j, Y", strtotime($date)) . "
"; + echo $provider['fname'][0] . " " . $provider['lname']; + echo "
"; + echo ""; + echo "$disptimeh:$starttimem"; + echo ""; + + // Scan all events for this time slot and generate the associated HTML for + // this doc. JavaScript is used in hrefs to reduce the volume of output. + // + reset($arr_slot); + while (list($eventkey, $event) = each($arr_slot)) { + if ($event['aid'] != $providerid) continue; + if ($content) $content .= " "; + $starth = substr($event['startTime'], 0, 2); + $startm = substr($event['startTime'], 3, 2); + $eventid = $event['eid']; + $patientid = $event['pid']; + $commapos = strpos($event['patient_name'], ","); + $lname = addslashes(ucfirst(strtolower(substr($event['patient_name'], 0, $commapos)))); + $fname = addslashes(ucfirst(strtolower(substr($event['patient_name'], $commapos + 2)))); + $patient_dob = $event['patient_dob']; + $patient_age = $event['patient_age']; + $catid = $event['catid']; + $catname = $event['catname']; + $title = "$fname, age $patient_age ($patient_dob) " . addslashes($event['hometext']); + if ($catid == 2 || $catid == 3 || $catid == 4 || $catid == 8 || $catid == 11) { + if ($catid == 2) $catname = "IN"; + else if ($catid == 3) $catname = "OUT"; + else if ($catid == 4) $catname = "VACATION"; + else if ($catid == 8) $catname = "LUNCH"; + else if ($catid == 11) $catname = "RESERVED"; + // Omit lunch, vacation, etc. if the doc is not in-office. + if ($provstat[$providerid]['in'] || $catid < 4) { + $content .= ""; + $content .= $catname . ""; + } + } + else { // some sort of patient appointment + $content .= ""; + $content .= $startm . ""; + $content .= "-"; + if ($catid == 1) $content .= ""; + $content .= $lname; + if ($catid == 1) $content .= ""; + $content .= ""; + } + } // end while + + if (! $content) $content = " "; + echo $content . "
\n"; + + // [-*footer*-] + // [-include file="$TPL_NAME/views/global/footer.html"-] + // [-include file="$TPL_NAME/views/footer.html"-] + +[-/php-] + + + diff --git a/interface/main/calendar/modules/PostCalendar/pntemplates/default/views/week/default.html b/interface/main/calendar/modules/PostCalendar/pntemplates/default/views/week/default.html dissimilarity index 92% index 4243f7869..b12cdaf3d 100644 --- a/interface/main/calendar/modules/PostCalendar/pntemplates/default/views/week/default.html +++ b/interface/main/calendar/modules/PostCalendar/pntemplates/default/views/week/default.html @@ -1,154 +1,371 @@ -[-*Smarty*-] -[-config_load file="default.conf"-] -[-*Load the Language Definitions*-] -[-config_load file="lang.$USER_LANG"-] -[-include file="$TPL_NAME/views/header.html"-] -[-* we want to include out stylesheet for this view*-] -[-fetch file="$TPL_STYLE_PATH/day.css" assign="css"-] -[-eval var=$css-] - -[-if $PRINT_VIEW != 1-] -[-*Main Navigation*-] -[-include file="$TPL_NAME/views/global/navigation.html"-] -[-/if-] -[-assign var="dayname" value=$DATE|date_format:"%w"-] -[-assign var="day" value=$DATE|date_format:"%d"|string_format:"%1d"-] -[-assign var="month" value=$DATE|date_format:"%m"|string_format:"%1d"-] -[-assign var="year" value=$DATE|date_format:"%Y"|string_format:"%4d"-] - - - - - [-/if-] - -
- << - [-pc_week_range date=$DATE sep=" - " format=#_PC_DATE_FORMAT_MDY#-] - >> - [-if $PRINT_VIEW != 1-] - -
- - - - [-foreach item=provider from=$providers-] - - [-/foreach-] - -
- - - - - [-foreach name=dates item=events key=date from=$A_EVENTS-] - - - - [-/foreach-] - - - -
[-$provider.fname[0]-][-$provider.lname-]
- - [-assign var="dayname" value=$date|date_format:"%w"-] - [-assign var="day" value=$date|date_format:"%d"|string_format:"%1d"-] - [-assign var="month" value=$date|date_format:"%m"|string_format:"%1d"-] - [-assign var="year" value=$date|date_format:"%Y"|string_format:"%4d"-] - [-assign var="eventdate" value=$date|date_format:"%Y%m%d"-] - [-pc_sort_events var="S_EVENTS" sort="time" order="asc" value=$A_EVENTS-] - [-pc_date_format date=$date format=#_PC_DATE_FORMAT_STD#-] - -[-php-] - $arr_events = (array)$this->_tpl_vars['S_EVENTS'][$this->_tpl_vars['date']]; - list($this->_tpl_vars['eventkey'], $this->_tpl_vars['event']) = each($arr_events); -[-/php-] - - [-foreach name=times item=time from=$times-] - - - [-assign var="eventsbydate" value=$S_EVENTS.$date-] - - [-* foreach name=events key=eventkey item=event from=$S_EVENTS.$date *-] - -[-php-] - for (; isset($this->_tpl_vars['eventkey']); - list($this->_tpl_vars['eventkey'], $this->_tpl_vars['event']) = each($arr_events)) - { -[-/php-] - - [-assign var="starth" value=$event.startTime|date_format:"%H"-] - [-assign var="displaystarth" value=$event.startTime|date_format:"%I:%M %p" -] - [-assign var="startm" value=$event.startTime|date_format:"%M"-] - [-assign var="mykey" value=$eventkey-] - - [-* if $time.hour == $starth && $startm >= $time.minute && $startm < ($time.minute + $interval) && $event.aid == $provider.id *-] - -[-php-] - if ($this->_tpl_vars['event']['aid'] != $this->_tpl_vars['provider']['id']) - continue; - if ($this->_tpl_vars['starth'] < $this->_tpl_vars['time']['hour']) - continue; - if ($this->_tpl_vars['starth'] > $this->_tpl_vars['time']['hour']) - break; - if ($this->_tpl_vars['startm'] < $this->_tpl_vars['time']['minute']) - continue; - if ($this->_tpl_vars['startm'] >= ($this->_tpl_vars['time']['minute'] + $this->_tpl_vars['interval'])) - break; -[-/php-] - - [-assign var="flagfound" value=true-] - [-assign var="eid" value=$event.eid-] - - - [-* /if *-] - [-* /foreach *-] - -[-php-] - } // end for -[-/php-] - - [-assign var="flagfound" value=false -] - - [-/foreach-] - -
- [-if $time.mer == "pm" -] - [-assign var="event_startampm" value=2-] - [-if $time.hour > 12 -] - [-math equation="x-12" x=$time.hour-]:[-$time.minute-] - [-else-] - [-$time.hour-]:[-$time.minute-] - [-/if-] - [-else-] - [-assign var="event_startampm" value=1-] - [-$time.hour-]:[-$time.minute-] - [-/if-] - [-$time.mer-] - - - - [-assign var=short_event_title value=$event.title|strip_tags -] - [-$short_event_title|truncate::"$day_td_width":""-] -
- [-$displaystarth-]([-$event.duration_hours-]:[-$event.duration_minutes-])
- [-include file="$TPL_NAME/user/patient_line.html" event=$event show_icons=true show_provider=false show_patient=true -]  -
-
-
- -[-if $PRINT_VIEW != 1-] - - - - -
- [-#_PC_THEME_PRINT#-] -
- - - - -[-/if-] -[-*footer*-] -[-include file="$TPL_NAME/views/global/footer.html"-] -[-include file="$TPL_NAME/views/footer.html"-] +[-*Smarty*-] +[-*****************************************************************************-] +[-* This is the source code for both day/default.html and week/default.html. *-] +[-* They should always be identical. If you change one, copy to the other! *-] +[-*****************************************************************************-] +[-* Copyright (C) 2005 Rod Roark and others *-] +[-* *-] +[-* 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. *-] +[-*****************************************************************************-] +[-config_load file="default.conf"-] +[-*Load the Language Definitions*-] +[-config_load file="lang.$USER_LANG"-] +[-include file="$TPL_NAME/views/header.html"-] +[-* we want to include out stylesheet for this view*-] +[-fetch file="$TPL_STYLE_PATH/day.css" assign="css"-] +[-eval var=$css-] + + + + + +[-php-] + + // [-if $PRINT_VIEW != 1-] + // [-*Main Navigation*-] + // [-include file="$TPL_NAME/views/global/navigation.html"-] + // [-/if-] + + $A_EVENTS =& $this->_tpl_vars['A_EVENTS']; + $S_EVENTS =& $this->_tpl_vars['S_EVENTS']; + $providers =& $this->_tpl_vars['providers']; + $times =& $this->_tpl_vars['times']; + $interval = $this->_tpl_vars['interval']; + $viewtype = $this->_tpl_vars['VIEW_TYPE']; + $PREV_WEEK_URL = $this->_tpl_vars['PREV_WEEK_URL']; + $NEXT_WEEK_URL = $this->_tpl_vars['NEXT_WEEK_URL']; + $PREV_DAY_URL = $this->_tpl_vars['PREV_DAY_URL']; + $NEXT_DAY_URL = $this->_tpl_vars['NEXT_DAY_URL']; + + $Date = postcalendar_getDate(); + if (!isset($y)) $y = substr($Date, 0, 4); + if (!isset($m)) $m = substr($Date, 4, 2); + if (!isset($d)) $d = substr($Date, 6, 2); + + // echo "\n"; + + $MULTIDAY = count($A_EVENTS) > 1; + + $provinfo = getProviderInfo(); + + echo "
\n"; + echo "
\n"; + echo "\n"; + echo " \n"; + echo " \n"; + + // Build the scrolling selection list of providers. + echo " \n"; + + // Build the date and view type selectors and the Go button. + echo " \n"; + + // Show the Add and Search buttons. + echo " \n"; + echo " \n"; + + // Show the date/range and its previous- and next-day/week selectors. + echo " \n"; + echo " \n"; + echo " \n"; + + echo " \n"; + echo "
\n"; + echo " \n"; + echo " \n"; + echo " "; + echo ""; + echo "\n"; + echo " \n"; + echo "  \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo "
\n"; + $atmp = array_keys($A_EVENTS); + if ($MULTIDAY) { + echo "<< \n"; + echo date("F j Y", strtotime($atmp[0])); + echo " - "; + echo date("F j Y", strtotime($atmp[count($atmp)-1])); + echo " >>\n"; + } else { + echo "<< \n"; + echo date("l, F j, Y", strtotime($atmp[0])); + echo " >>\n"; + } + echo " \n"; + echo "  \n"; + echo "
\n"; + echo "
\n"; + echo "
\n"; + +[-/php-] + +[-assign var="dayname" value=$DATE|date_format:"%w"-] +[-assign var="day" value=$DATE|date_format:"%d"|string_format:"%1d"-] +[-assign var="month" value=$DATE|date_format:"%m"|string_format:"%1d"-] +[-assign var="year" value=$DATE|date_format:"%Y"|string_format:"%4d"-] + +[-pc_sort_events var="S_EVENTS" sort="time" order="asc" value=$A_EVENTS-] + +[-php-] + + echo "\n"; + + // For each day... + foreach ($A_EVENTS as $date => $events) { + $need_headers = true; + $eventdate = substr($date, 0, 4) . substr($date, 5, 2) . substr($date, 8, 2); + + // If multiple days then show a date header for each. + if ($MULTIDAY) { + echo " \n"; + echo " "; + echo " \n"; + } + + $arr_events = $S_EVENTS[$date]; + list($slotkey, $slotevent) = each($arr_events); + + // This is an array of provider status information for this day, + // used to properly assign table cell attributes. + $provstat = array(); + + $slotindex = 0; + $lastslotindex = count($times) - 1; + + // For each time slot... + foreach ($times as $slottime) { + $startampm = ($slottime['mer']) == "pm" ? 2 : 1; + $starttimeh = $slottime['hour']; + $starttimem = $slottime['minute']; + + // Repeat doc names at 1PM. This is a kludge; omit it for released code. + // if ($starttimeh == 13 && $starttimem == 0) $need_headers = true; + + // Get all events just for this time slot now, because we can pick up where + // we left off and because we don't want to re-scan all events for the day + // for each table cell. + // + $arr_slot = array(); + for (; isset($slotkey); list($slotkey, $slotevent) = each($arr_events)) { + $starth = substr($slotevent['startTime'], 0, 2); + $startm = substr($slotevent['startTime'], 3, 2); + + if ($starth > $starttimeh) break; + if ($startm >= ($starttimem + $interval)) break; + $arr_slot[$slotkey] = $slotevent; + + $catid = $slotevent['catid']; + $providerid = $slotevent['aid']; + $durminutes = ceil($slotevent['duration'] / 60); + $durslots = ceil($durminutes / $interval); + + // While we're here, collect information for setting cell colors. + if ($catid == 2) { // in office + $provstat[$providerid]['in'] = true; + } + else if ($catid == 3) { // out of office + $provstat[$providerid]['in'] = false; + } + else if ($catid == 4 || $catid == 8 || $catid == 11) { // unavailable types + $endindex = $slotindex + $durslots; + for ($i = $slotindex; $i < $endindex; ++$i) { + $provstat[$providerid][$i]['res'] = true; + } + } + // if duration > slot size then mark slots for border control. + if ($durslots > 1) { + $endindex = $slotindex + $durslots - 1; + for ($i = $slotindex; $i < $endindex; ++$i) { + $provstat[$providerid][$i]['ext'] = true; + } + } + } + + // Write a header row with the provider names if appropriate. + if ($need_headers) { + $need_headers = false; + echo " \n"; + foreach ($providers as $provider) { + echo " \n"; + } + echo " \n"; + } + + echo " \n"; + + // We are now ready to write the table row for the current time slot. + // This loops once for each provider to be displayed. + // + foreach ($providers as $provider) { + $providerid = $provider['id']; + + $content = ""; // this will be the event cell content + + $clsuffix = "acell"; + if ($provstat[$providerid][$slotindex]['res'] || ! $provstat[$providerid]['in']) { + $clsuffix = "ucell"; + } + + // Remove top and/or bottom table cell borders using CSS when events span + // time slots or when the practitioner is not in-office. Using "rowspan" + // would be a difficult and inferior solution to this problem. + // + $tdstyle=""; + if ($slotindex < $lastslotindex && + ($provstat[$providerid][$slotindex]['ext'] || !$provstat[$providerid]['in'])) { + $tdstyle .= " nobot"; + } + if ($slotindex > 0 && ($provstat[$providerid][$slotindex-1]['ext'] || + !($provstat[$providerid]['in'] || $provstat[$providerid]['wasin']))) { + $tdstyle .= " notop"; + } + + $disptimeh = ($starttimeh > 12) ? ($starttimeh - 12) : $starttimeh; + + echo " \n"; + + echo " \n"; + + // Keep track of whether the doc was in during the previous time slot. + $provstat[$providerid]['wasin'] = $provstat[$providerid]['in']; + + } // end provider + + echo " \n"; + + ++$slotindex; + } // end time slot + } // end day + + echo "
" . + date("l, F j, Y", strtotime($date)) . "
"; + echo $provider['fname'][0] . " " . $provider['lname']; + echo "
"; + echo ""; + echo "$disptimeh:$starttimem"; + echo ""; + + // Scan all events for this time slot and generate the associated HTML for + // this doc. JavaScript is used in hrefs to reduce the volume of output. + // + reset($arr_slot); + while (list($eventkey, $event) = each($arr_slot)) { + if ($event['aid'] != $providerid) continue; + if ($content) $content .= " "; + $starth = substr($event['startTime'], 0, 2); + $startm = substr($event['startTime'], 3, 2); + $eventid = $event['eid']; + $patientid = $event['pid']; + $commapos = strpos($event['patient_name'], ","); + $lname = addslashes(ucfirst(strtolower(substr($event['patient_name'], 0, $commapos)))); + $fname = addslashes(ucfirst(strtolower(substr($event['patient_name'], $commapos + 2)))); + $patient_dob = $event['patient_dob']; + $patient_age = $event['patient_age']; + $catid = $event['catid']; + $catname = $event['catname']; + $title = "$fname, age $patient_age ($patient_dob) " . addslashes($event['hometext']); + if ($catid == 2 || $catid == 3 || $catid == 4 || $catid == 8 || $catid == 11) { + if ($catid == 2) $catname = "IN"; + else if ($catid == 3) $catname = "OUT"; + else if ($catid == 4) $catname = "VACATION"; + else if ($catid == 8) $catname = "LUNCH"; + else if ($catid == 11) $catname = "RESERVED"; + // Omit lunch, vacation, etc. if the doc is not in-office. + if ($provstat[$providerid]['in'] || $catid < 4) { + $content .= ""; + $content .= $catname . ""; + } + } + else { // some sort of patient appointment + $content .= ""; + $content .= $startm . ""; + $content .= "-"; + if ($catid == 1) $content .= ""; + $content .= $lname; + if ($catid == 1) $content .= ""; + $content .= ""; + } + } // end while + + if (! $content) $content = " "; + echo $content . "
\n"; + + // [-*footer*-] + // [-include file="$TPL_NAME/views/global/footer.html"-] + // [-include file="$TPL_NAME/views/footer.html"-] + +[-/php-] + + + diff --git a/interface/main/calendar/modules/PostCalendar/pnuserapi.php b/interface/main/calendar/modules/PostCalendar/pnuserapi.php index 63595ca69..7f0e6e0e0 100644 --- a/interface/main/calendar/modules/PostCalendar/pnuserapi.php +++ b/interface/main/calendar/modules/PostCalendar/pnuserapi.php @@ -960,9 +960,13 @@ function &postcalendar_userapi_pcQueryEvents($args) LEFT JOIN users as u2 ON a.pc_aid = u2.id LEFT JOIN patient_data as pd ON a.pc_pid=pd.pid WHERE b.pc_catid = a.pc_catid - AND a.pc_eventstatus = $eventstatus - AND (a.pc_endDate >= '$start' OR a.pc_endDate = '0000-00-00') - AND a.pc_eventDate <= '$end' "; + AND a.pc_eventstatus = $eventstatus + AND ((a.pc_endDate >= '$start' AND a.pc_eventDate <= '$end') OR + (a.pc_endDate = '0000-00-00' AND a.pc_eventDate >= '$start' AND a.pc_eventDate <= '$end')) "; + + // The above two lines replace these: + // AND (a.pc_endDate >= '$start' OR a.pc_endDate = '0000-00-00') + // AND a.pc_eventDate <= '$end' "; if(!empty($providerID)) { @@ -1001,6 +1005,9 @@ function &postcalendar_userapi_pcQueryEvents($args) // END SEARCH FUNCTIONALITY //====================================================================== //echo "sq: $sql
"; + + // echo "\n"; // debugging + $result = $dbconn->Execute($sql); if($dbconn->ErrorNo() != 0) die ($dbconn->ErrorMsg()); diff --git a/interface/main/finder/finder_navigation.php b/interface/main/finder/finder_navigation.php index e3e5d409e..e2bbd07af 100644 --- a/interface/main/finder/finder_navigation.php +++ b/interface/main/finder/finder_navigation.php @@ -20,7 +20,7 @@ include_once("../../globals.php"); Find Patient:?> diff --git a/interface/main/finder/patient_select.php b/interface/main/finder/patient_select.php index f00fc68d6..4389b6d5d 100644 --- a/interface/main/finder/patient_select.php +++ b/interface/main/finder/patient_select.php @@ -2,9 +2,9 @@ include_once("../../globals.php"); include_once("$srcdir/patient.inc"); - //the maximum number of patient records to display: -$M = 100; +$M = 2000; + // this is a quick fix so it doesn't go to thousands records. // the searching functions on patient.inc need improvement. if ($patient=='') $patient='Please enter some information'; diff --git a/interface/main/main_navigation.php b/interface/main/main_navigation.php index aca024dd4..1aba935f3 100644 --- a/interface/main/main_navigation.php +++ b/interface/main/main_navigation.php @@ -1,5 +1,6 @@ @@ -18,10 +19,10 @@ include_once("../globals.php"); Find Patient:?> - - + @@ -39,14 +40,14 @@ include_once("../globals.php");  Change Password  + -  Administration  - + +  Reports  @@ -55,16 +56,20 @@ include_once("../globals.php");  Notes  +  Billing  - + +  Home  +  Logout   + diff --git a/interface/main/myadmin/config.inc.php b/interface/main/myadmin/config.inc.php index 5d3f368ed..cf60a0a0f 100644 --- a/interface/main/myadmin/config.inc.php +++ b/interface/main/myadmin/config.inc.php @@ -5,10 +5,13 @@ ini_set("magic_quotes","0"); include_once ("../../../library/sqlconf.php"); include_once("../../globals.php"); include_once("$srcdir/auth.inc"); -if($_SESSION['userauthorized'] != 1){ - echo "You do not have access to this resource
"; - exit; - } +include_once("../../../library/acl.inc"); + +// if($_SESSION['userauthorized'] != 1){ +if (! acl_check('admin', 'database')) { + echo "You do not have access to this resource
"; + exit; +} global $sqlconf; diff --git a/interface/patient_file/encounter/coding.php b/interface/patient_file/encounter/coding.php index 545d9357a..f0928d5fd 100644 --- a/interface/patient_file/encounter/coding.php +++ b/interface/patient_file/encounter/coding.php @@ -1,25 +1,21 @@ - - - - topmargin=0 rightmargin=0 leftmargin=2 bottommargin=0 marginwidth=2 marginheight=0>
Coding/Billing
Superbill
- -
ICD-9-CM Search
- -
CPT Search
-
HCPCS Search
+ + $value) { ?> +
Search
+ +
Copay
Other

Prescriptions
@@ -27,7 +23,5 @@ include_once("../../globals.php");
Add Prescription
- - diff --git a/interface/patient_file/encounter/encounter_title.php b/interface/patient_file/encounter/encounter_title.php index ea3df0879..8ce54a743 100644 --- a/interface/patient_file/encounter/encounter_title.php +++ b/interface/patient_file/encounter/encounter_title.php @@ -14,30 +14,20 @@ include_once("$srcdir/patient.inc"); topmargin=0 rightmargin=0 leftmargin=2 bottommargin=0 marginwidth=2 marginheight=0> diff --git a/interface/patient_file/encounter/forms.php b/interface/patient_file/encounter/forms.php index e0f21896d..073c87ed4 100644 --- a/interface/patient_file/encounter/forms.php +++ b/interface/patient_file/encounter/forms.php @@ -31,15 +31,15 @@ if (is_numeric($pid)) { if ($result = getFormByEncounter($pid, $encounter, "id, date, form_id, form_name,formdir,user")) { echo "
"; foreach ($result as $iter) { - //print "" . $iter{"form_name"} . "
\n"; - $form_info = getFormInfoById($iter['id']); echo ''; $user = $iter['user']; $user = getNameFromUsername($user); - + + $form_name = ($iter['formdir'] == 'newpatient') ? "Patient Encounter" : $iter['form_name']; + echo ''; - echo " @@ -111,7 +108,6 @@ elseif (!is_numeric($fstart)) { $fend = $fstart + 100; - ?> @@ -132,15 +128,13 @@ $fend = $fstart + 100; + + $value) { ?> - - + + @@ -160,63 +154,64 @@ $search = $_GET['search']; $sql = "select * from codes "; if (!is_numeric($filter) && empty($search)) { - $filter = ""; + $filter = ""; } elseif (!empty($search)) { - $sql .= " where code like '%" . mysql_real_escape_string($search) . "%'" ; + $sql .= " where code like '%" . mysql_real_escape_string($search) . "%'"; } else { $sql .= " where code_type = $filter "; } -$sql .= " order by code_type,code,units,code_text limit $fstart, $fend"; +$sql .= " order by code_type, code, units, code_text limit $fstart, $fend"; $res = sqlStatement($sql); for ($iter = 0;$row = sqlFetchArray($res);$iter++) $all[$iter] = $row; - if ($all) { $count =0; foreach($all as $iter) { $count++; - - //if ($count == $N) { - // print "
' . $user['fname'] . " " . $user['lname'] .'" . $iter{"form_name"} . ""; + echo "$form_name"; echo "\n"; $counter = 0; @@ -73,13 +73,7 @@ if ($result = getFormByEncounter($pid, $encounter, "id, date, form_id, form_name } echo "
"; } - - ?> - - - - diff --git a/interface/patient_file/encounter/patient_encounter.php b/interface/patient_file/encounter/patient_encounter.php index f1adb72c7..52d25e1b3 100644 --- a/interface/patient_file/encounter/patient_encounter.php +++ b/interface/patient_file/encounter/patient_encounter.php @@ -13,6 +13,17 @@ if (!isset($_GET["codefrom"]) ) { ?> - - + + diff --git a/interface/patient_file/encounter/search_code.php b/interface/patient_file/encounter/search_code.php new file mode 100644 index 000000000..30458c3f2 --- /dev/null +++ b/interface/patient_file/encounter/search_code.php @@ -0,0 +1,97 @@ + + + + + + + topmargin=0 rightmargin=0 leftmargin=2 bottommargin=0 marginwidth=2 marginheight=0> + + + + + + +
+  + + +
+ + + Codes
+ +Search +
+ + + +
+\n"; + $count = 0; + } + + echo "" . + ucwords("" . strtoupper($iter{"code"}) . " " . $iter['modifier'] . + "" . " " . strtolower($iter{"code_text"}))."
\n"; + + $count++; + $total++; + if ($total == $M) { + echo "Some codes were not displayed.\n"; + break; + } + } + } +?> +
+ + +
+ + + diff --git a/interface/patient_file/encounter/superbill_codes.php b/interface/patient_file/encounter/superbill_codes.php dissimilarity index 64% index 65b95a1cb..f64713232 100644 --- a/interface/patient_file/encounter/superbill_codes.php +++ b/interface/patient_file/encounter/superbill_codes.php @@ -1,139 +1,97 @@ - - - - - - - - - - topmargin=0 rightmargin=0 leftmargin=2 bottommargin=0 marginwidth=2 marginheight=0> - - - - - - -
- -
- -
Superbill -
-
- - - 0 || $icd9_count > 0 || $hcpcs_count > 0) { - print ""; - - while( $count < $iter ){ - print ""; - ++$index; - } - /*foreach($all as $iter) { - $count++; - print "
"; - echo "" . $iter['code'] . "" . " " . $iter['code_text'] ; - echo "
\n"; - if ($count == $N) { - print "
CPT CodesICD9 CodesHCPCS Codes
"; - if( !empty( $cpts[$index] ) ){ - $code = $cpts[$index]; - print "
"; - echo "" . $code['code'] . "" . " " . $code['modifier'] . " " . $code['code_text'] ; - echo "
\n"; - ++$count; - } - print "
"; - if( !empty( $icd9s[$index] ) ){ - $code = $icd9s[$index]; - print "
"; - echo "" . $code['code'] . "" . " " . $code['modifier'] . " " . $code['code_text'] ; - echo "
\n"; - ++$count; - } - print "
"; - if( !empty( $hcpcs[$index] ) ){ - $code = $hcpcs[$index]; - print "
"; - echo "" . $code['code'] . "" . " " . $code['modifier'] . " " . $code['code_text'] ; - echo "
\n"; - ++$count; - } - print "
\n"; - $count = 0; - } - } - */ -} - -?> - - - -
- - - - - - - - - - - - - - + + + + + + topmargin=0 rightmargin=0 leftmargin=2 bottommargin=0 marginwidth=2 marginheight=0> + + + + +
+ +
+ +
Superbill +
+
+ + +\n"; +foreach ($code_types as $key => $value) { + $codes[$key] = array(); + echo " \n"; +} +echo " \n"; + +for ($iter = 0; $row = sqlFetchArray($res); $iter++){ + foreach ($code_types as $key => $value) { + if ($value['id'] == $row['code_type']) { + $codes[$key][] = $row; + break; + } + } +} + +$index=0; + +$numlines = 0; +foreach ($codes as $value) + $numlines = max($numlines, count($value)); + +while ($index < $numlines) { + echo " \n"; + foreach ($codes as $key => $value) { + echo " \n"; + } + echo " \n"; + ++$index; +} + +?> + +
$key Codes
\n"; + if(!empty($value[$index])) { + $code = $value[$index]; + echo "
"; + echo "" . $code['code'] . "" . " " . $code['modifier'] . " " . $code['code_text'] ; + echo "
\n"; + } + echo "
+ + + + + diff --git a/interface/patient_file/encounter/superbill_custom_full.php b/interface/patient_file/encounter/superbill_custom_full.php index 13fc4cdd4..f20cbf048 100644 --- a/interface/patient_file/encounter/superbill_custom_full.php +++ b/interface/patient_file/encounter/superbill_custom_full.php @@ -1,15 +1,12 @@
ALL   -CPT   - -ICD9   - -HCPCS  
+  
 
\n"; - //} - - print "\n"; echo "\n"; - + } - } - - ?>
CodeTypeTextModifierUnitsFee
"; - print "" . $iter["code"] . "" . $code_type_array[$iter["code_type"]] . "" . $iter{"code_text"}; + + $has_fees = false; + foreach ($code_types as $key => $value) { + if ($value['id'] == $iter['code_type']) { + $has_fees = $value['fee']; + break; + } + } + + print "
"; + print "" . $iter["code"] . + "" . + $key . + "" . $iter{"code_text"}; print ""; - if ($iter['code_type'] != CODE_TYPE_ICD9) { + if ($has_fees) { echo "" . $iter['modifier'] . ""; } echo ""; - if ($iter['code_type'] != CODE_TYPE_ICD9) { + if ($has_fees) { echo "" . $iter['units'] . ""; } echo ""; - if ($iter['code_type'] != CODE_TYPE_ICD9) { + if ($has_fees) { echo "$" . sprintf("%01.2f", $iter['fee']) . ""; } echo "[Delete][Edit]
- - - - - - diff --git a/interface/patient_file/history/encounters.php b/interface/patient_file/history/encounters.php index a21e3fb47..4bc43ec0f 100644 --- a/interface/patient_file/history/encounters.php +++ b/interface/patient_file/history/encounters.php @@ -7,36 +7,26 @@ include_once("$srcdir/pnotes.inc"); include_once("$srcdir/patient.inc"); //maximum number of encounter entries to display on this page: -$N = 5; +$N = 10; ?> - - - topmargin=0 rightmargin=0 leftmargin=2 bottommargin=0 marginwidth=2 marginheight=0> - - - - - Past Encounters
- - -
+ + - - += $N) { //we have more encounters to print, but we've reached our display maximum - print "\n"; + print "\n"; break; } - //print_r($iter);print "
"; + +/**** $subresult = getFormByEncounter($pid, $iter{"encounter"}, "*", "New Patient Encounter"); - $raw_encounter_date = date( "Y-m-d" ,strtotime($subresult[0]{"date"})); $encounter_date = date( "D F jS" ,strtotime($subresult[0]{"date"})); - print ""; - print ""; - - /////////// +****/ + $reason_string = ""; - if ($result4 = sqlQuery("select * from form_encounter where encounter='".$iter{"encounter"}."' and pid='$pid'")) { - + if ($result4 = sqlQuery("select * from form_encounter where encounter='" . $iter{"encounter"} . "' and pid='$pid'")) { + $raw_encounter_date = date("Y-m-d", strtotime($result4{"date"})); + $encounter_date = date("D F jS", strtotime($result4{"date"})); $reason_string .= $result4{"reason"} . "
\n"; - } - - print ""; - + + print "\n"; + print "\n"; + print "\n"; + +/**** /////////// $comments = ""; if ($subresult3 = getPnotesByDate(date( "Y-m-d" ,strtotime($subresult[0]{"date"})), "all", "*", $pid, 5, 0)){ @@ -82,48 +73,43 @@ if ($result = getEncounters($pid)) { } print ""; - - - /////////// +****/ + $coded = ""; if ($subresult2 = getBillingByEncounter($pid,$iter{"encounter"})) { //this is where we print out the text of the billing that occurred on this encounter foreach ($subresult2 as $iter2) { - $coded .= $iter2{"code_text"} . ", "; - - + $coded .= ""; + $coded .= $iter2{"code"} . ", "; } - $coded = substr($coded,0,strlen($coded)-2); + $coded = substr($coded, 0, strlen($coded) - 2); } - - print ""; - - /////////// + + print "\n"; + $insured = "$raw_encounter_date"; - if ($subresult5 = getInsuranceDataByDate( $pid, $raw_encounter_date, "primary")) { - $insured = "Primary: ".$subresult5{"provider_name"}."
\n"; + $subresult5 = getInsuranceDataByDate($pid, $raw_encounter_date, "primary"); + if ($subresult5 && $subresult5{"provider_name"}) { + $insured = "Primary: " . $subresult5{"provider_name"} . "
\n"; } - if ($subresult6 = getInsuranceDataByDate( $pid, $raw_encounter_date, "secondary")) { - $insured .= "Secondary: ".$subresult6{"provider_name"}."
\n"; + $subresult6 = getInsuranceDataByDate($pid, $raw_encounter_date, "secondary"); + if ($subresult6 && $subresult6{"provider_name"}) { + $insured .= "Secondary: ".$subresult6{"provider_name"}."
\n"; } - if ($subresult7 = getInsuranceDataByDate( $pid, $raw_encounter_date, "tertiary")) { - $insured .= "Tertiary: ".$subresult7{"provider_name"}."
\n"; + $subresult7 = getInsuranceDataByDate($pid, $raw_encounter_date, "tertiary"); + if ($subresult6 && $subresult7{"provider_name"}) { + $insured .= "Tertiary: ".$subresult7{"provider_name"}."
\n"; } - - - - print ""; - + + print "\n"; + print "\n"; - } } ?> -
Date ReasonPatient Notes Billing Insurance
Some encounters were not displayed. Click here to view all.
Some encounters were not displayed. Click here to view all.
" . $encounter_date . "" . $reason_string . "
" . $encounter_date . "" . $reason_string . "" . $comments . "" . $coded . "" . $coded . "" . $insured . "" . $insured . "
- - \ No newline at end of file + diff --git a/interface/patient_file/history/encounters_full.php b/interface/patient_file/history/encounters_full.php dissimilarity index 76% index e77fe4460..30ec631e9 100644 --- a/interface/patient_file/history/encounters_full.php +++ b/interface/patient_file/history/encounters_full.php @@ -1,119 +1,80 @@ - - - - - - - - - - - topmargin=0 rightmargin=0 leftmargin=2 bottommargin=0 marginwidth=2 marginheight=0> - - - - - -Past Encounters
- - - - - - - - - - -"; - - print ""; - - /////////// - $reason_string = ""; - if ($result4 = sqlQuery("select * from form_encounter where encounter='".$iter{"encounter"}."' and pid='$pid'")) { - - $reason_string .= $result4{"reason"} . "
\n"; - - } - - print ""; - - /////////// - $comments = ""; - if ($subresult3 = getPnotesByDate(date( "Y-m-d" ,strtotime($subresult[0]{"date"})), "all", "*", $pid, 5, 0)){ - //this is where we print out short headers for comments enterred into the patient file on the same date - - - foreach ($subresult3 as $iter3) { - $comments .= stripslashes(strterm($iter3{"body"},100)) . "
"; - - } - $comments = substr($comments,0,strlen($comments)-4); - } - - print ""; - - - /////////// - $coded = ""; - if ($subresult2 = getBillingByEncounter($pid,$iter{"encounter"})) { - //this is where we print out the text of the billing that occurred on this encounter - foreach ($subresult2 as $iter2) { - $coded .= $iter2{"code_text"} . ", "; - - - } - $coded = substr($coded,0,strlen($coded)-2); - } - - print ""; - - /////////// - $insured = "$raw_encounter_date"; - if ($subresult5 = getInsuranceDataByDate( $pid, $raw_encounter_date, "primary")) { - $insured = "Primary: ".$subresult5{"provider"}."
\n"; - } - if ($subresult6 = getInsuranceDataByDate( $pid, $raw_encounter_date, "secondary")) { - $insured .= "Secondary: ".$subresult6{"provider"}."
\n"; - } - if ($subresult7 = getInsuranceDataByDate( $pid, $raw_encounter_date, "tertiary")) { - $insured .= "Tertiary: ".$subresult7{"provider"}."
\n"; - } - - - - print ""; - - print "\n"; - - } -} - -?> - - -
-DateReasonCommentsBillingInsurance" . $encounter_date . "" . $reason_string . "" . $comments . "" . $coded . "" . $insured . "
- - - - \ No newline at end of file + + + + + + + + topmargin=0 rightmargin=0 leftmargin=2 bottommargin=0 marginwidth=2 marginheight=0> + +Past Encounters
+ + + + + + + + + +\n"; + } + + print "\n"; + print "\n"; + print "\n"; + + $coded = ""; + if ($subresult2 = getBillingByEncounter($pid, $iter{"encounter"})) { + //this is where we print out the text of the billing that occurred on this encounter + foreach ($subresult2 as $iter2) { + $coded .= ""; + $coded .= $iter2{"code"} . ", "; + } + $coded = substr($coded, 0, strlen($coded) - 2); + } + + print "\n"; + + $insured = "$raw_encounter_date"; + $subresult5 = getInsuranceDataByDate($pid, $raw_encounter_date, "primary"); + if ($subresult5 && $subresult5{"provider_name"}) { + $insured = "Primary: " . $subresult5{"provider_name"} . "
\n"; + } + $subresult6 = getInsuranceDataByDate($pid, $raw_encounter_date, "secondary"); + if ($subresult6 && $subresult6{"provider_name"}) { + $insured .= "Secondary: ".$subresult6{"provider_name"}."
\n"; + } + $subresult7 = getInsuranceDataByDate($pid, $raw_encounter_date, "tertiary"); + if ($subresult6 && $subresult7{"provider_name"}) { + $insured .= "Tertiary: ".$subresult7{"provider_name"}."
\n"; + } + + print "\n"; + + print "\n"; + } +} + +?> + +
DateReasonBillingInsurance
" . $encounter_date . "" . $reason_string . "" . $coded . "" . $insured . "
+ + + diff --git a/interface/patient_file/history/history.php b/interface/patient_file/history/history.php index 002c4b7ec..685aeae95 100644 --- a/interface/patient_file/history/history.php +++ b/interface/patient_file/history/history.php @@ -40,7 +40,7 @@ if (!is_array($result)) {
-Patient Had:
+Surgeries:
Cataract Surgery:
Tonsillectomy:
Appendectomy:
diff --git a/interface/patient_file/navigation.php b/interface/patient_file/navigation.php index 7dbc4b291..d4d484a63 100644 --- a/interface/patient_file/navigation.php +++ b/interface/patient_file/navigation.php @@ -8,32 +8,60 @@ include_once("../globals.php"); + + topmargin=0 rightmargin=0 leftmargin=5 marginheight=0 bottommargin=0 link=#000000 vlink=#000000 alink=#000000> - - - - - - - +
+ Summary + History + Encounter + Transaction + Documents + Report + Close   +
+ +
+ +
diff --git a/interface/patient_file/problem_encounter.php b/interface/patient_file/problem_encounter.php new file mode 100644 index 000000000..3cfa6ad9b --- /dev/null +++ b/interface/patient_file/problem_encounter.php @@ -0,0 +1,298 @@ + + // + // 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. + + include_once("../globals.php"); + include_once("../../library/patient.inc"); + + $patdata = getPatientData($pid, "fname,lname"); + + $alertmsg = ""; // anything here pops up in an alert box + $endjs = ""; // holds javascript to write at the end + + // If the Save button was clicked... + if ($_POST['form_save']) { + $form_pid = $_POST['form_pid']; + $form_pelist = $_POST['form_pelist']; + $pattern = '|/(\d+),(\d+),([YN])|'; + + preg_match_all($pattern, $form_pelist, $matches); + $numsets = count($matches[1]); + + sqlQuery("DELETE FROM issue_encounter WHERE pid = '$form_pid'"); + + for ($i = 0; $i < $numsets; ++$i) { + $list_id = $matches[1][$i]; + $encounter = $matches[2][$i]; + $resolved = ($matches[3][$i] == 'Y') ? 1 : 0; + $query = "INSERT INTO issue_encounter ( " . + "pid, list_id, encounter, resolved " . + ") VALUES ( " . + "$form_pid, $list_id, $encounter, $resolved " . + ")"; + sqlQuery($query); + } + + // All done. + echo "\n"; + exit(); + } + + // get problems + $pres = sqlStatement("SELECT * FROM lists WHERE pid = $pid " . + "ORDER BY type, date"); + + // get encounters + $eres = sqlStatement("SELECT * FROM form_encounter WHERE pid = $pid " . + "ORDER BY date DESC"); + + // get problem/encounter relations + $peres = sqlStatement("SELECT * FROM issue_encounter WHERE pid = $pid"); +?> + + + +Issues and Encounters + + + + + + + +
+\n"; + // pelist looks like /problem,encounter,Y/problem,encounter,N/[...]. + echo "\n"; +?> + + + + + + + + + + + + + + + + +
+ Issues and Encounters for \n"; ?> +
+ + + + + + + + + +\n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + $endjs .= "pselected['$rowid'] = '';\n"; + } +?> +
+ + Issues Section +
TypeTitleDescription
" . $row['type'] . "" . $row['title'] . "" . $row['comments'] . "
+
+ + + + + + + + +\n"; + echo " \n"; + echo " \n"; + echo " \n"; + $endjs .= "eselected['$rowid'] = '';\n"; + } +?> +
+ + Encounters Section +
DatePresenting Complaint
" . substr($row['date'], 0, 10) . "" . $row['reason'] . "
+
+   + +
+ +
+ +

Instructions: Choose a section and click an item within it; then in +the other section you will see the related items highlighted, and you can click +in that section to create, remove and change the relationships. Note that the +highlight color (green = resolved, red = unresolved) is an attribute of the +relationship, not of the item itself. +

+ + + + diff --git a/interface/patient_file/report/custom_report.php b/interface/patient_file/report/custom_report.php index 3d5d3625f..594395ff3 100644 --- a/interface/patient_file/report/custom_report.php +++ b/interface/patient_file/report/custom_report.php @@ -135,9 +135,18 @@ if (stristr($key,"include_")) { } elseif ($val == "medications") { print "Patient Medications:
"; printListData($pid, "medication", "1"); + } elseif ($val == "medical_problems") { + print "Patient Medical Problems:
"; + printListData($pid, "medical_problem", "1"); } elseif ($val == "immunizations") { print "Patient Immunization:
"; - printListData($pid, "immunization", "1"); + $sql = "select if(i1.administered_date,concat(i1.administered_date,' - ',i2.name) ,substring(i1.note,1,20) ) as immunization_data from immunizations i1 left join immunization i2 on i1.immunization_id = i2.id where i1.patient_id = $pid order by administered_date desc"; + + $result = sqlStatement($sql); + + while ($row=sqlFetchArray($result)){ + echo " " . $row{'immunization_data'} . "
\n"; + } } elseif ($val == "notes") { print "Patient Notes:
"; printPatientNotes($pid); diff --git a/interface/patient_file/report/full_report.php b/interface/patient_file/report/full_report.php index 860d607e4..9f7c98397 100644 --- a/interface/patient_file/report/full_report.php +++ b/interface/patient_file/report/full_report.php @@ -79,9 +79,20 @@ printListData($pid, "allergy", "1") printListData($pid, "medication", "1") ?>
+Medical Problems:
+
+ Immunizations:
" . $row{'immunization_data'} . "
\n"; +} ?>

@@ -125,4 +136,4 @@ printPatientForms($pid, $N); - \ No newline at end of file + diff --git a/interface/patient_file/report/patient_report.php b/interface/patient_file/report/patient_report.php index 2ee88951a..145d5b3b6 100644 --- a/interface/patient_file/report/patient_report.php +++ b/interface/patient_file/report/patient_report.php @@ -26,10 +26,12 @@ include_once("../../globals.php"); Employer
Insurance
Billing
+
Allergies
Medications
Immunizations
+Medical Problems
Patient Notes
Transactions
diff --git a/interface/patient_file/report/print_custom_report.php b/interface/patient_file/report/print_custom_report.php index f21cd033b..5e39cc0c7 100644 --- a/interface/patient_file/report/print_custom_report.php +++ b/interface/patient_file/report/print_custom_report.php @@ -163,9 +163,19 @@ if (stristr($key,"include_")) { } elseif ($val == "medications") { print "Patient Medications:
"; printListData($pid, "medication", "1"); + } elseif ($val == "medical_problems") { + print "Patient Medical Problems:
"; + printListData($pid, "medical_problem", "1"); } elseif ($val == "immunizations") { print "Patient Immunization:
"; - printListData($pid, "immunization", "1"); + $sql = "select if(i1.administered_date,concat(i1.administered_date,' - ',i2.name) ,substring(i1.note,1,20) ) as immunization_data from immunizations i1 left join immunization i2 on i1.immunization_id = i2.id where i1.patient_id = $pid order by administered_date desc"; + + $result = sqlStatement($sql); + + while ($row=sqlFetchArray($result)){ + echo " " . $row{'immunization_data'} . " +
\n"; + } } elseif ($val == "notes") { print "Patient Notes:
"; printPatientNotes($pid); diff --git a/interface/patient_file/summary/add_edit_issue.php b/interface/patient_file/summary/add_edit_issue.php new file mode 100644 index 000000000..0144fa696 --- /dev/null +++ b/interface/patient_file/summary/add_edit_issue.php @@ -0,0 +1,274 @@ + + // + // 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. + + include_once("../../globals.php"); + include_once("$srcdir/lists.inc"); + include_once("$srcdir/patient.inc"); + // include_once("$srcdir/overlib_mini.js"); + // include_once("$srcdir/calendar.js"); + + $issue = $_REQUEST['issue']; + $info_msg = ""; + + $arrtype = array( + 'medical_problem' => 'Problem', + 'allergy' => 'Allergy', + 'medication' => 'Medication', + 'surgery' => 'Surgery' + ); + + $arroccur = array( + 0 => 'Unknown or N/A', + 1 => 'First', + 2 => 'Second', + 3 => 'Third', + 4 => 'Chronic/Recurrent', + 5 => 'Acute on Chronic' + ); + + function QuotedOrNull($fld) { + if ($fld) return "'$fld'"; + return "NULL"; + } + +?> + + +<? echo $issue ? "Edit" : "Add New" ?> Issue + + + + + + + + + + + +> + $value) { + if ($i++ == $_POST['form_type']) $text_type = $key; + } + + if ($issue) { + sqlStatement("UPDATE lists SET " . + "type = '" . $text_type . "', " . + "title = '" . $_POST['form_title'] . "', " . + "comments = '" . $_POST['form_comments'] . "', " . + "begdate = " . QuotedOrNull(fixDate($_POST['form_begin'], '')) . ", " . + "enddate = " . QuotedOrNull(fixDate($_POST['form_end'], '')) . ", " . + "occurrence = '" . $_POST['form_occur'] . "', " . + "referredby = '" . $_POST['form_referredby'] . "', " . + "extrainfo = '" . $_POST['form_missed'] . "' " . + "WHERE id = '$issue'"); + } else { + sqlInsert("INSERT INTO lists ( " . + "date, pid, type, title, activity, comments, begdate, enddate, " . + "occurrence, referredby, extrainfo, user, groupname " . + ") VALUES ( " . + "NOW(), " . + "'$pid', " . + "'" . $text_type . "', " . + "'" . $_POST['form_title'] . "', " . + "1, " . + "'" . $_POST['form_comments'] . "', " . + QuotedOrNull(fixDate($_POST['form_begin'], '')) . ", " . + QuotedOrNull(fixDate($_POST['form_end'], '')) . ", " . + "'" . $_POST['form_occur'] . "', " . + "'" . $_POST['form_referredby'] . "', " . + "'" . $_POST['form_missed'] . "', " . + "'" . $$_SESSION['authUser'] . "', " . + "'" . $$_SESSION['authProvider'] . "' )"); + } + + // Close this window and redisplay the updated list of issues. + // + echo "\n"; + exit(); + } + + $irow = array(); + $type_index = 0; + if ($issue) { + $irow = sqlQuery("SELECT * FROM lists WHERE id = $issue"); + foreach ($arrtype as $key => $value) { + if ($key == $irow['type']) break; + ++$type_index; + } + } +?> + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Type: +$value \n"; + ++$index; + } +?> +
Title: +
+ ' style='width:100%' /> +
Begin Date: + ' + title='yyyy-mm-dd date of onset, surgery or start of medication' /> + +
End Date: + ' + title='yyyy-mm-dd date of recovery or end of medication' /> + +  (leave blank if still active) +
Occurrence: + +
Missed: + ' + title='Number of games or events missed, if any' /> +  games/events +
Referred by: + ' + style='width:100%' title='Referring physician and practice' /> +
Comments: + +
+ +

+ +  + +

+ +
+
+ + + diff --git a/interface/patient_file/summary/demographics.php b/interface/patient_file/summary/demographics.php dissimilarity index 72% index 51e496efa..5fde23491 100644 --- a/interface/patient_file/summary/demographics.php +++ b/interface/patient_file/summary/demographics.php @@ -1,359 +1,371 @@ - - - - - - - - - - - topmargin=0 rightmargin=0 leftmargin=2 bottommargin=0 marginwidth=2 marginheight=0> - -Demographics - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Name:
-Number: -
- -DOB: - - -Sex: S.S.:
- -Address: - -

- - -
- -Emergency Contact: - -Home: "; - echo $result{"phone_home"}; - } - if ($result{"phone_biz"} != "") { - echo "
Work: "; - echo $result{"phone_biz"}; - } - if ($result{"phone_cell"} != "") { - echo "
Mobile: "; - echo $result{"phone_cell"}; - } - if ($result{"email"} != "") { - echo "
Email:
"; - echo '' . $result{"email"} . ''; - } -?> - - -
-Marital Status: "; - echo "" . $result{"status"} . ""; - } -?> -
-Occupation:
-Employer: -
- -Employer Address: - -
- -
- - - -
-
-Race/Ethnicity:
-Language:
-Interpretter:
-Family Size:
- - -
- -Financial Review Date:
-Monthly Income:
-Migrant/Seasonal:
-Homeless, etc.:
-
- - - - - - - - - - -
:
:
- -
-Primary Provider:
- -
-Primary Insurance Provider:

-Policy Number:
-Plan Name:
-Group Number:
-
-Subscriber:

-S.S.: D.O.B.:
-Phone: -
-
-Subscriber Address:

- -
-Subscriber Employer:


- -
CoPay:
-Secondary Insurance Provider:

-Policy Number:
-Plan Name:
-Group Number:
-
-Subscriber:

-S.S.: D.O.B.:
-Phone: -
-
-Subscriber Address:

- -
-Subscriber Employer:


- -
CoPay:
-Tertiary Insurance Provider:

-Policy Number:
-Plan Name:
-Group Number:
-
-Subscriber:

-S.S.: D.O.B.:
-Phone: -
-
-Subscriber Address:

- -
-Subscriber Employer:


- -
CoPay:
- -
- - - -
- - -

- - - -

- - - + + + + + + + + topmargin=0 rightmargin=0 leftmargin=2 bottommargin=0 marginwidth=2 marginheight=0> + +

Demographics

+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Name:
+ Number: +
+ + DOB: + + + + Sex: S.S.:
+ + Address: + +

+ + +
+
+ + Emergency Contact: +Home: "; + echo $result{"phone_home"}; + } + if ($result{"phone_biz"} != "") { + echo "
Work: "; + echo $result{"phone_biz"}; + } + if ($result{"phone_cell"} != "") { + echo "
Mobile: "; + echo $result{"phone_cell"}; + } + if ($result{"email"} != "") { + echo "
Email:
"; + echo '' . $result{"email"} . ''; + } +?> +
+Marital Status: "; + echo "" . $result{"status"} . ""; + } +?> +
+ Patient $opt_out Mailed Information "; + ?> +
+ Patient $opt_out Voice Messages "; + ?> +
+   +
+Occupation:
+Employer: +
+ + Employer Address: + +
+ +
+ + + +
+
+ +
+ Fitness to Play:
+ +
+ +
+Race/Ethnicity:
+Language:
+Interpretter:
+Family Size:
+
+ +Financial Review Date:
+Monthly Income:
+Migrant/Seasonal:
+Homeless, etc.:
+
+ + + + + + + + + +
:
:
+
+ Primary Provider:
+ +
+ Primary Insurance Provider:

+ Policy Number:
+ Plan Name:
+ Group Number:
+
+ Subscriber:

+ S.S.: D.O.B.:
+ Phone: +
+
+ Subscriber Address:

+
+ Subscriber Employer:


+
CoPay:
+ Secondary Insurance Provider:

+ Policy Number:
+ Plan Name:
+ Group Number:
+
+ Subscriber:

+ S.S.: D.O.B.:
+ Phone: +
+
+ Subscriber Address:

+
+ Subscriber Employer:


+
+ CoPay: +
+ Tertiary Insurance Provider:

+ Policy Number:
+ Plan Name:
+ Group Number:
+
+ Subscriber:

+ S.S.: D.O.B.:
+ Phone: +
+
+ Subscriber Address:

+
+ Subscriber Employer:


+
+ CoPay: +
+
+ tag and everything, and then terminates our script prematurely! +// So I disabled it. BTW the comments below re postnuke are not mine. +// -- Rod 2005-06-16 +// +if (false && isset($pid)) { // was: if (isset($pid)) { +//postnuke doesn't make it easy to set globals/get/post +//didn't want to use an ifram here so I had to fake a page +//load environment by setting the things that would have +//been passed in the querystring + +include_once("$srcdir/calendar.inc"); + +unset($func); +unset($module); +unset($Date); +$_GET['module'] = "PostCalendar"; +$_GET['func'] = "search"; +$_GET['Date'] = pc_getDate(); +$_GET['no_nav'] = 2; +$_GET['patient_id'] = intval($pid); +$_GET['submit'] = "listapps"; +global $func,$Date,$module; +$module = "PostCalendar"; +$func = "search"; +$Date = $_GET['Date']; +$submit = "listapps"; +$no_nav = 2; +$patient_id = $_GET['patient_id']; + +//now that the environment is set, include the page, it will +//behave as though it was loaded in an iframe with the querystring +//variables set +chdir("../../main/calendar"); +include("index.php"); +} +?> +
+ + + diff --git a/interface/patient_file/summary/demographics_full.php b/interface/patient_file/summary/demographics_full.php dissimilarity index 93% index 812f5e4b1..b223f370d 100644 --- a/interface/patient_file/summary/demographics_full.php +++ b/interface/patient_file/summary/demographics_full.php @@ -1,544 +1,551 @@ - - - - - - - - - - topmargin=0 rightmargin=0 leftmargin=2 bottommargin=0 marginwidth=2 marginheight=0> - - -
- -"> -"> -"> - -Demographics - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Name: - -"> "> "> -
-DOB: - -"> Patient Number:  ">
-Sex: - -Emergency Contact: ">
S.S.: ">Emergency Phone:() -
Address: ">Home Phone: ">() -
City: ">Work Phone:() -
State: ">Mobile Phone: () -
Zip Code: ">Contact Email: ">
Country: ">User Defined Fields
Marital Status: - - - " />" />
Provider: - - " />" />
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-[Save Patient Demographics]
-"> -"> -"> - - - - - - - - -
Occupation: ">
Employer:
(enter Student, PT Student, or leave blank for unemployed)
">
-
- - - - - - - - - - - - - - - - -
Employer Address">
City: ">
State: ">
Zip Code: ">
Country: ">
-
-[Save Patient Demographics]
-Language:
-
-">

- - -Race/Ethnicity:
- -
-">
- -
- - - - - - - - - - - - - - - - - - - -
Financial Review Date: ">
Family Size: ">
Monthly Income: ">(Numbers only)
Homeless, etc.: ">
Interpretter: ">
Migrant/Seasonal: ">
- - - - - - - -
-[Save Patient Demographics] -
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
 Add New Insurer -
Plan Name: plan_name value="">
Policy Number: policy_number value="">
Group Number: group_number value="">
Subscriber Employer (SE)
(enter Student, PT Student, or leave blank for unemployed):
subscriber_employer value="">
SE Address: subscriber_employer_street value="">
- - - - - - - - - - - - - -
SE City: subscriber_employer_city value="">SE State: subscriber_employer_state value="">
SE Zip Code: subscriber_employer_postal_code value="">SE Country: subscriber_employer_country value="">
-
-
-Subscriber: subscriber_fname value="">subscriber_mname value="">subscriber_lname value=""> - -
- -Relationship: - -(Browse)
-D.O.B.: subscriber_DOB value=" -"> -S.S.: subscriber_ss value=" ">  -Sex: - -
-Subscriber Address: subscriber_street value="">
-City: subscriber_city value=""> -State: subscriber_state value="">
-Zip Code: subscriber_postal_code value=""> -Country: subscriber_country value="">
- - -Subscriber Phone: subscriber_phone value=""> - - -(subscriber_phone_area onblur="javascript:update_isubscriber_phone();" value="">) subscriber_phone_first onblur="javascript:update_isubscriber_phone();" value="">-subscriber_phone_last onblur="javascript:update_isubscriber_phone();" value=""> -
-CoPay: copay value=""> -
-[Save Patient Demographics] - - - - - - - -
- -

- - - + + + + + + + + + + + + topmargin=0 rightmargin=0 leftmargin=2 bottommargin=0 marginwidth=2 marginheight=0> + + +
+ + +Demographics + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Name: + + "> "> "> +
DOB: + ' onkeyup='datekeyup(this,mypcc)' + title='yyyy-mm-dd' /> +   Number:  ">
Sex: + + Emergency Contact: ">
S.S.: ">Emergency Phone:' onkeyup='phonekeyup(this,mypcc)' />
Address: ">Home Phone: ' onkeyup='phonekeyup(this,mypcc)' />
City: ">Work Phone:' onkeyup='phonekeyup(this,mypcc)' />
: ">Mobile Phone: ' onkeyup='phonekeyup(this,mypcc)' />
Code: ">Contact Email: ">
Country: ">User Defined Fields
Marital Status: + + " />" />
Provider: + + " />" />
+ [Save Patient Demographics] +
+
+ + + + + + + + + + + + + + + + +
HIPAA Choices:
Allow Mail: + + Allow Voice Msg: + +
+ [Save Patient Demographics] +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ "> + "> + "> + + + + + + + + + + + + + + + + + + + + + +
Occupation: ">
Employer:">
(if unemployed enter Student, PT Student, or leave blank)
 
Squad: + +
+
+ + + + + + + + + + + + + + + + +
Employer Address">
City: ">
: ">
Code: ">
Country: ">
+
+ [Save Patient Demographics]
+ Language:
+
+ ">

+ Race/Ethnicity:
+ +
+ ">
+
+ + + + + + + + + + + + + + + + + + + +
Financial Review Date: ">
Family Size: ">
Monthly Income: ">(Numbers only)
Homeless, etc.: ">
Interpretter: ">
Migrant/Seasonal: ">
+
+ [Save Patient Demographics] +
+
+ + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+  Add New Insurer +
Plan Name: plan_name value="">
Policy Number: policy_number value="">
Group Number: group_number value="">
Subscriber Employer (SE)
+ (if unemployed enter Student,
PT Student, or leave blank):
subscriber_employer value="">
SE Address: subscriber_employer_street value="">
+ + + + + + + + + + + + + +
SE City: subscriber_employer_city value="">SE : subscriber_employer_state value="">
SE Code: subscriber_employer_postal_code value="">SE Country: subscriber_employer_country value="">
+
+
+ Subscriber: subscriber_fname value="">subscriber_mname value="">subscriber_lname value=""> +
+ Relationship: + + (Browse)
+ D.O.B.: + ' + onkeyup='datekeyup(this,mypcc)' title='yyyy-mm-dd' /> + S.S.: subscriber_ss value=" ">  + Sex: + +
+ Subscriber Address: subscriber_street value="">
+ City: subscriber_city value=""> + : subscriber_state value="">
+ Code: subscriber_postal_code value=""> + Country: subscriber_country value="">
+ Subscriber Phone: + +
+ CoPay: copay value=""> +
+[Save Patient Demographics] +
+ + + +
+ +
+ + + + + diff --git a/interface/patient_file/summary/demographics_save.php b/interface/patient_file/summary/demographics_save.php dissimilarity index 92% index d94bb3b30..a64c0d1ce 100644 --- a/interface/patient_file/summary/demographics_save.php +++ b/interface/patient_file/summary/demographics_save.php @@ -1,177 +1,173 @@ - $val) { - if ($val == "MM/DD/YYYY") { - $_POST[$key] = ""; - }// elseif ($val == "on") {//this section of code is needed only for checkboxes on the form - // $_POST[$key] = "1"; - //} -} - -if ($_POST["sex"] == "Unselected") { - $var_sex = ""; -} else { - $var_sex = $_POST["sex"]; -} - -if ($_POST{dob} != "") { - $dob = $_POST["dob"]; -} else { - $dob = ""; -} - - -$finrev = fixDate($_POST["financial_review"]); - -newPatientData( $_POST["db_id"], - $_POST["title"], - $_POST["fname"], - $_POST["lname"], - $_POST["mname"], - $var_sex, - $dob, - $_POST["street"], - $_POST["postal_code"], - $_POST["city"], - $_POST["state"], - $_POST["country_code"], - $_POST["ss"], - $_POST["occupation"], - $_POST["phone_home"], - $_POST["phone_biz"], - $_POST["phone_contact"], - $_POST["status"], - $_POST["contact_relationship"], - $_POST["referrer"], - $_POST["referrerID"], - $_POST["email"], - strtolower($_POST["language"]), - $_POST["ethnoracial"], - $_POST["interpretter"], - $_POST["migrantseasonal"], - $_POST["family_size"], - $_POST["monthly_income"], - $_POST["homeless"], - $finrev, - $_POST["pubpid"], - $pid, - $_POST["providerID"], - $_POST["genericname1"], - $_POST["genericval1"], - $_POST["genericname2"], - $_POST["genericval2"], - $_POST["phone_cell"] - ); - -newEmployerData( $pid, - $_POST["ename"], - $_POST["estreet"], - $_POST["epostal_code"], - $_POST["ecity"], - $_POST["estate"], - $_POST["ecountry"] - ); - - -$i1dob = fixDate($_POST["i1subscriber_DOB"]); - -newInsuranceData( $pid, - "primary", - $_POST["i1provider"], - $_POST["i1policy_number"], - $_POST["i1group_number"], - $_POST["i1plan_name"], - $_POST["i1subscriber_lname"], - $_POST["i1subscriber_mname"], - $_POST["i1subscriber_fname"], - $_POST["i1subscriber_relationship"], - $_POST["i1subscriber_ss"], - $i1dob, - $_POST["i1subscriber_street"], - $_POST["i1subscriber_postal_code"], - $_POST["i1subscriber_city"], - $_POST["i1subscriber_state"], - $_POST["i1subscriber_country"], - $_POST["i1subscriber_phone"], - $_POST["i1subscriber_employer"], - $_POST["i1subscriber_employer_street"], - $_POST["i1subscriber_employer_city"], - $_POST["i1subscriber_employer_postal_code"], - $_POST["i1subscriber_employer_state"], - $_POST["i1subscriber_employer_country"], - $_POST['i1copay'], - $_POST['i1subscriber_sex'] - ); - - - -$i2dob = fixDate($_POST["i2subscriber_DOB"]); - -newInsuranceData( $pid, - "secondary", - $_POST["i2provider"], - $_POST["i2policy_number"], - $_POST["i2group_number"], - $_POST["i2plan_name"], - $_POST["i2subscriber_lname"], - $_POST["i2subscriber_mname"], - $_POST["i2subscriber_fname"], - $_POST["i2subscriber_relationship"], - $_POST["i2subscriber_ss"], - $i2dob, - $_POST["i2subscriber_street"], - $_POST["i2subscriber_postal_code"], - $_POST["i2subscriber_city"], - $_POST["i2subscriber_state"], - $_POST["i2subscriber_country"], - $_POST["i2subscriber_phone"], - $_POST["i2subscriber_employer"], - $_POST["i2subscriber_employer_street"], - $_POST["i2subscriber_employer_city"], - $_POST["i2subscriber_employer_postal_code"], - $_POST["i2subscriber_employer_state"], - $_POST["i2subscriber_employer_country"], - $_POST['i2copay'], - $_POST['i2subscriber_sex'] - ); - -$i3dob = fixDate($_POST["i3subscriber_DOB"]); - -newInsuranceData( $pid, - "tertiary", - $_POST["i3provider"], - $_POST["i3policy_number"], - $_POST["i3group_number"], - $_POST["i3plan_name"], - $_POST["i3subscriber_lname"], - $_POST["i3subscriber_mname"], - $_POST["i3subscriber_fname"], - $_POST["i3subscriber_relationship"], - $_POST["i3subscriber_ss"], - $i3dob, - $_POST["i3subscriber_street"], - $_POST["i3subscriber_postal_code"], - $_POST["i3subscriber_city"], - $_POST["i3subscriber_state"], - $_POST["i3subscriber_country"], - $_POST["i3subscriber_phone"], - $_POST["i3subscriber_employer"], - $_POST["i3subscriber_employer_street"], - $_POST["i3subscriber_employer_city"], - $_POST["i3subscriber_employer_postal_code"], - $_POST["i3subscriber_employer_state"], - $_POST["i3subscriber_employer_country"], - $_POST['i3copay'], - $_POST['i3subscriber_sex'] - ); - - - - -include_once("patient_summary.php"); -?> - + $val) { + if ($val == "MM/DD/YYYY") { + $_POST[$key] = ""; + } +} + +if ($_POST["sex"] == "Unselected") { + $var_sex = ""; +} else { + $var_sex = $_POST["sex"]; +} + +if ($_POST{dob} != "") { + $dob = $_POST["dob"]; +} else { + $dob = ""; +} + +$finrev = fixDate($_POST["financial_review"]); + +newPatientData( + $_POST["db_id"], + $_POST["title"], + $_POST["fname"], + $_POST["lname"], + $_POST["mname"], + $var_sex, + $dob, + $_POST["street"], + $_POST["postal_code"], + $_POST["city"], + $_POST["state"], + $_POST["country_code"], + $_POST["ss"], + $_POST["occupation"], + $_POST["phone_home"], + $_POST["phone_biz"], + $_POST["phone_contact"], + $_POST["status"], + $_POST["contact_relationship"], + $_POST["referrer"], + $_POST["referrerID"], + $_POST["email"], + strtolower($_POST["language"]), + $_POST["ethnoracial"], + $_POST["interpretter"], + $_POST["migrantseasonal"], + $_POST["family_size"], + $_POST["monthly_income"], + $_POST["homeless"], + $finrev, + $_POST["pubpid"], + $pid, + $_POST["providerID"], + $_POST["genericname1"], + $_POST["genericval1"], + $_POST["genericname2"], + $_POST["genericval2"], + $_POST["phone_cell"], + $_POST["hipaa_mail"], + $_POST["hipaa_voice"], + $_POST["squad"] +); + +newEmployerData( + $pid, + $_POST["ename"], + $_POST["estreet"], + $_POST["epostal_code"], + $_POST["ecity"], + $_POST["estate"], + $_POST["ecountry"] +); + +$i1dob = fixDate($_POST["i1subscriber_DOB"]); + +newInsuranceData( + $pid, + "primary", + $_POST["i1provider"], + $_POST["i1policy_number"], + $_POST["i1group_number"], + $_POST["i1plan_name"], + $_POST["i1subscriber_lname"], + $_POST["i1subscriber_mname"], + $_POST["i1subscriber_fname"], + $_POST["i1subscriber_relationship"], + $_POST["i1subscriber_ss"], + $i1dob, + $_POST["i1subscriber_street"], + $_POST["i1subscriber_postal_code"], + $_POST["i1subscriber_city"], + $_POST["i1subscriber_state"], + $_POST["i1subscriber_country"], + $_POST["i1subscriber_phone"], + $_POST["i1subscriber_employer"], + $_POST["i1subscriber_employer_street"], + $_POST["i1subscriber_employer_city"], + $_POST["i1subscriber_employer_postal_code"], + $_POST["i1subscriber_employer_state"], + $_POST["i1subscriber_employer_country"], + $_POST['i1copay'], + $_POST['i1subscriber_sex'] +); + +$i2dob = fixDate($_POST["i2subscriber_DOB"]); + +newInsuranceData( + $pid, + "secondary", + $_POST["i2provider"], + $_POST["i2policy_number"], + $_POST["i2group_number"], + $_POST["i2plan_name"], + $_POST["i2subscriber_lname"], + $_POST["i2subscriber_mname"], + $_POST["i2subscriber_fname"], + $_POST["i2subscriber_relationship"], + $_POST["i2subscriber_ss"], + $i2dob, + $_POST["i2subscriber_street"], + $_POST["i2subscriber_postal_code"], + $_POST["i2subscriber_city"], + $_POST["i2subscriber_state"], + $_POST["i2subscriber_country"], + $_POST["i2subscriber_phone"], + $_POST["i2subscriber_employer"], + $_POST["i2subscriber_employer_street"], + $_POST["i2subscriber_employer_city"], + $_POST["i2subscriber_employer_postal_code"], + $_POST["i2subscriber_employer_state"], + $_POST["i2subscriber_employer_country"], + $_POST['i2copay'], + $_POST['i2subscriber_sex'] +); + +$i3dob = fixDate($_POST["i3subscriber_DOB"]); + +newInsuranceData( + $pid, + "tertiary", + $_POST["i3provider"], + $_POST["i3policy_number"], + $_POST["i3group_number"], + $_POST["i3plan_name"], + $_POST["i3subscriber_lname"], + $_POST["i3subscriber_mname"], + $_POST["i3subscriber_fname"], + $_POST["i3subscriber_relationship"], + $_POST["i3subscriber_ss"], + $i3dob, + $_POST["i3subscriber_street"], + $_POST["i3subscriber_postal_code"], + $_POST["i3subscriber_city"], + $_POST["i3subscriber_state"], + $_POST["i3subscriber_country"], + $_POST["i3subscriber_phone"], + $_POST["i3subscriber_employer"], + $_POST["i3subscriber_employer_street"], + $_POST["i3subscriber_employer_city"], + $_POST["i3subscriber_employer_postal_code"], + $_POST["i3subscriber_employer_state"], + $_POST["i3subscriber_employer_country"], + $_POST['i3copay'], + $_POST['i3subscriber_sex'] +); + +include_once("patient_summary.php"); +?> diff --git a/interface/patient_file/summary/immunizations.php b/interface/patient_file/summary/immunizations.php dissimilarity index 98% index 36fd393e3..c2492371b 100644 --- a/interface/patient_file/summary/immunizations.php +++ b/interface/patient_file/summary/immunizations.php @@ -1,153 +1,213 @@ - $val) { - if ($val == "true" || $val == "false") { - $id = str_replace("act","",$var); - if ($val == "true") {reappearList ($id);}elseif($val=="false"){disappearList($id);}; - //print "$id: $val > $act_state
\n"; - - } - } -} elseif ($mode == "new") { - addList($pid,"immunization",$_POST["title"],$_POST["comments"],1); -} -} - - - - - - - - -?> - - - - - - - - - topmargin=0 rightmargin=0 leftmargin=2 bottommargin=0 marginwidth=2 marginheight=0> - - - - - - -
-  - - -Immunizations -
- -
- - -
- -
-[Add New Immunization] -
- - -
- - - - - - -View: ->[All] ->[Only Active] ->[Only Inactive] - -
-[Change Activity] -

- - -" . $iter{"title"} . "\n"; - - - - if ($iter{"activity"}) { - $checked = "checked"; - } else { - $checked = ""; - } - print ""; - print ""; - print "".$iter{"title"} . "(".date("n/j/Y",strtotime($iter{"date"})).")
"; - print "" . $iter{"comments"} . "
\n"; - - - - } -} - -?> -
- - - - -
-[Change Activity] - - - - - - - - - - - -
- - - - - - - - - - - - -
- - - - \ No newline at end of file + + + + + + + + + topmargin=0 rightmargin=0 leftmargin=2 bottommargin=0 marginwidth=2 marginheight=0> + Immunizations + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + Immunization + + + +
+ + Date Administered + + + + +
+ + Immunization Manufacturer + + + +
+ + Immunization Lot Number + + + +
+ + Name and Title of Immunization Administrator + + + +
+ + Date Immunization Information Statements Given + + + + +
+ + Notes + + + +
+
[Print Shot Record] +
+ +
[Save Immunization] +
+
[Clear] +
+
+ + + + + +
+ + + "; + print ""; + print ""; + print ""; + print ""; + print ""; + print ""; + print ""; + } + ?> +
DateVaccineManufacturerLot NumberAdministered ByEducation DateNote[Edit]" . $row{"administered_date"} . "" . $row{"immunization"} . "" . $row{"manufacturer"} . "" . $row{"lot_number"} . "" . $row{"administered_by"} . "" . $row{"education_date"} . "" . $row{"note"} . "
+
+ + + diff --git a/interface/patient_file/summary/patient_summary.php b/interface/patient_file/summary/patient_summary.php index bed7a9e3c..60fe21b84 100644 --- a/interface/patient_file/summary/patient_summary.php +++ b/interface/patient_file/summary/patient_summary.php @@ -6,23 +6,26 @@ include_once("../../globals.php"); -OpenEMR +Patient Summary - - - - + + + + + - + + + <body bgcolor="#FFFFFF"> </body> - diff --git a/interface/patient_file/summary/pnotes.php b/interface/patient_file/summary/pnotes.php index 890df9d95..a40170271 100644 --- a/interface/patient_file/summary/pnotes.php +++ b/interface/patient_file/summary/pnotes.php @@ -6,7 +6,6 @@ include_once("$srcdir/pnotes.inc"); - @@ -19,25 +18,34 @@ include_once("$srcdir/pnotes.inc"); - - - Patient Notes
- - Execute($sql); +if($resnote && !$resnote->EOF && $resnote->fields['genericname2'] == 'Billing') { + $billing_note = $resnote->fields['genericval2']; + $colorbeg = ""; + $colorend = ""; +} + //Display what the patient owes require_once($GLOBALS['fileroot'] ."/library/classes/WSWrapper.class.php"); $customer_info['id'] = 0; -$conn = $GLOBALS['adodb']['db']; $sql = "SELECT foreign_id from integration_mapping as im LEFT JOIN patient_data as pd on im.local_id=pd.id where pd.pid = '" . $pid . "' and im.local_table='patient_data' and im.foreign_table='customer'"; $result = $conn->Execute($sql); if($result && !$result->EOF) @@ -47,10 +55,13 @@ if($result && !$result->EOF) $function['ezybiz.customer_balance'] = array(new xmlrpcval($customer_info,"struct")); $ws = new WSWrapper($function); -if(is_numeric($ws->value)) -{ - $formatted = sprintf('$%01.2f', $ws->value); - print "\n"; +if(is_numeric($ws->value)) { + $formatted = sprintf('$%01.2f', $ws->value); + print "\n"; +} + +if($billing_note) { + print "\n"; } //retrieve all active notes @@ -82,41 +93,9 @@ foreach ($result as $iter) {
Balance Due$formatted
$colorbeg" . "Balance Due$colorend$colorbeg$formatted$colorend
$colorbeg" . "Billing Note$colorend$colorbeg$billing_note$colorend
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/interface/patient_file/summary/shot_record.php b/interface/patient_file/summary/shot_record.php new file mode 100644 index 000000000..ec5d00197 --- /dev/null +++ b/interface/patient_file/summary/shot_record.php @@ -0,0 +1,57 @@ +ezSetMargins(72,30,50,30); +$pdf->selectFont($GLOBALS['fileroot'] . "/library/fonts/Helvetica.afm"); + +$res = sqlQuery("select concat(f.name,'\n',f.street,'\n',f.city,', ',f.state,' ',f.postal_code) as facility_address + from facility f + ,users u + where u.facility = f.name + and u.id = " . $_SESSION['authId'] + ); + +$opts = array('justification' => "center"); +$pdf->ezText($res['facility_address'] + ,"",$opts + ); + +$res = sqlQuery("select concat(p.lname,', ',p.fname,' ',p.mname) patient_name + ,date_format(p.DOB,'%c/%e/%Y') as patient_DOB + ,concat(p.street,'\n',p.city,', ',p.state,' ',p.postal_code) as patient_address + from patient_data p where p.pid = $pid"); + +$pdf->ezText("\n" . $res['patient_name'] . "\nDate of Birth: " . $res['patient_DOB'] . "\n" . $res['patient_address']); +$pdf->ezText("\n"); + +$title = 'Shot Record as of: ' . date('m/d/Y h:i:s a'); + +$res = sqlStatement("select date_format(i1.administered_date,'%Y-%c-%e') as 'Date\nAdministered' + ,i2.name as 'Vaccine' + ,i1.manufacturer as 'Manufacturer' + ,i1.lot_number as 'Lot\nNumber' + ,concat(u.lname,', ',u.fname) as 'Administered By' + ,date_format(i1.education_date,'%Y-%c-%e') as 'Patient\nEducation\nDate' + ,i1.note as 'Comments' + from immunizations i1 + left join immunization i2 on i1.immunization_id = i2.id + left join users u on i1.administered_by_id = u.id + left join patient_data p on i1.patient_id = p.pid +where p.pid = " . $pid); + +while ($data[] = sqlFetchArray($res)) {} + +$opts = array('maxWidth' => 504 + ,'fontSize' => 8 + ); + +$pdf->ezTable($data,"",$title,$opts); + +$pdf->ezText("\n\n\n\nSignature:________________________________","",array('justification' => 'right')); + +$pdf->ezStream(); + +?> diff --git a/interface/patient_file/summary/stats.php b/interface/patient_file/summary/stats.php index ff52b1d2a..04b9de327 100644 --- a/interface/patient_file/summary/stats.php +++ b/interface/patient_file/summary/stats.php @@ -4,28 +4,42 @@ include_once("$srcdir/lists.inc"); ?> - - + - + + topmargin=0 rightmargin=0 leftmargin=2 bottommargin=0 marginwidth=2 marginheight=0> -
+ + + + + + + + + + + + + + + + + + + + +
+Medical Problems
+" . $iter{"title"} . "
\n"; + } +} +?> +
Medications
" . $iter{"title"} . "
\n"; } - } - ?> - - - +
Allergies
- - -Immunizations
+
+Surgeries
" . $iter{"title"} . ": ".strterm($iter{"comments"},20)."
\n"; - } + } } - -$cwd = getcwd(); +?> +
+Immunizations
+" . $row{'immunization_data'} . "
\n"; +} +?> +
Prescriptions'; echo $c->act(array("prescription" => "", "block" => "", "patient_id" => $pid)); ?> +
-Problem List
-" . $iter{"title"}."
\n"; - } -} - -?> -
diff --git a/interface/patient_file/summary/stats_full.php b/interface/patient_file/summary/stats_full.php dissimilarity index 97% index fac9f974f..21416e022 100644 --- a/interface/patient_file/summary/stats_full.php +++ b/interface/patient_file/summary/stats_full.php @@ -1,28 +1,130 @@ - - - - - -OpenEMR - - - - - - - - - - - - -<body bgcolor="#FFFFFF"> - -</body> - - - - + // + // 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. + + include_once("../../globals.php"); + include_once("$srcdir/lists.inc"); + + $arroccur = array( + 0 => 'Unknown or N/A', + 1 => 'First', + 2 => 'Second', + 3 => 'Third', + 4 => 'Chronic/Recurrent', + 5 => 'Acute on Chronic' + ); + + // get issues + $pres = sqlStatement("SELECT * FROM lists WHERE pid = $pid " . + "ORDER BY type, begdate"); +?> + + + + + +Patient Issues + + + + + + + +> +
+ + + + + + + + + + + + + + + + +\n"; + echo " \n"; + echo " \n"; + } + + $rowid = $row['id']; + + $disptitle = trim($row['title']) ? $row['title'] : "[Missing Title]"; + + $ierow = sqlQuery("SELECT count(*) AS count FROM issue_encounter WHERE " . + "list_id = $rowid"); + + ++$encount; + $bgcolor = "#" . (($encount & 1) ? "ddddff" : "ffdddd"); + + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + if ($GLOBALS['athletic_team']) + echo " \n"; // games missed + else + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + } +?> +
TypeTitleBeginEndOccurrenceMissedRefByCommentsEnc
$disptype
 " . + "$disptitle" . $row['begdate'] . " " . $row['enddate'] . " " . $arroccur[$row['occurrence']] . "" . $row['extrainfo'] . "" . $row['referredby'] . "" . $row['comments'] . "" . + " " . $ierow['count'] . " 
+ +

+     + +

+ +
+ + diff --git a/interface/pic/logo.gif b/interface/pic/logo.gif dissimilarity index 100% index 8729b5676ee0ecbc8676ffb5e6a3a5e61cf3d001..9346c96455121851663b8e2770a9c72248dabe26 100644 GIT binary patch literal 34408 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 literal 3220 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 W;pi!5>6>I3xMdjyiT~d=%>D}-w7|{) diff --git a/interface/pic/show_calendar.gif b/interface/pic/show_calendar.gif new file mode 100644 index 0000000000000000000000000000000000000000..68d10f1b31220bb7eb2c33d0ac800c6b17512dfe GIT binary patch literal 200 zcwTe&bhEHblwc5J*vtR|4Pe{=rW(L3AUJT~z<;2?e}?~H>OYtT1UeucAiWGMwE~Tv ztM@wWJG=Y;@h=J~ne(0rGATbx>(I)Q{e445XLHn~Cl>d6w`BjUlfL+P#)Y*}-cQc9 z9JGS1kZvZeZOoyI&PlfKhi&jwGF(_4P^m1lWCL2!~zZG%~7 flaRi6kH$oGSFNejrq9rxIeVsL-+W0y1_o;YXAV_- literal 0 HcwPel00001 diff --git a/interface/reports/appt_encounter_report.php b/interface/reports/appt_encounter_report.php new file mode 100644 index 000000000..b4372e238 --- /dev/null +++ b/interface/reports/appt_encounter_report.php @@ -0,0 +1,218 @@ + + // + // 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 report cross-references appointments with encounters. + // For a given date, show a line for each appointment with the + // matching encounter, and also for each encounter that has no + // matching appointment. This helps to catch these errors: + // + // * Appointments with no encounter + // * Encounters with no appointment + // * Codes not justified + // * Codes not authorized + // * Procedure codes without a fee + // * Fees assigned to diagnoses (instead of procedures) + // * Encounters not billed + + include_once("../globals.php"); + include_once("../../library/patient.inc"); + include_once("../../custom/code_types.inc.php"); + + $alertmsg = ''; // not used yet but maybe later + + function bucks($amount) { + if ($amount) + printf("%.2f", $amount); + } + + if ($_POST['form_search']) { + $form_date = fixDate($_POST['form_date'], ""); + + // MySQL doesn't grok full outer joins so we do it the hard way. + // + $query = "( " . + "SELECT " . + "e.pc_startTime, " . + "fe.encounter, " . + "f.authorized, " . + "p.fname, p.lname, p.pid, " . + "u.lname AS docname " . + "FROM openemr_postcalendar_events AS e " . + "LEFT OUTER JOIN form_encounter AS fe " . + "ON LEFT(fe.date, 10) = e.pc_eventDate AND fe.pid = e.pc_pid " . + "LEFT OUTER JOIN forms AS f ON f.encounter = fe.encounter AND f.formdir = 'newpatient' " . + "LEFT OUTER JOIN patient_data AS p ON p.pid = e.pc_pid " . + "LEFT OUTER JOIN users AS u ON u.id = e.pc_aid " . + "WHERE e.pc_eventDate = '$form_date' AND " . + "( e.pc_catid = 5 OR e.pc_catid = 9 OR e.pc_catid = 10 ) " . + ") UNION ( " . + "SELECT " . + "e.pc_startTime, " . + "fe.encounter, " . + "f.authorized, " . + "p.fname, p.lname, p.pid, " . + "u.lname AS docname " . + "FROM form_encounter AS fe " . + "LEFT OUTER JOIN openemr_postcalendar_events AS e " . + "ON LEFT(fe.date, 10) = e.pc_eventDate AND fe.pid = e.pc_pid AND " . + "( e.pc_catid = 5 OR e.pc_catid = 9 OR e.pc_catid = 10 ) " . + "LEFT OUTER JOIN forms AS f ON f.encounter = fe.encounter AND f.formdir = 'newpatient' " . + "LEFT OUTER JOIN patient_data AS p ON p.pid = fe.pid " . + "LEFT OUTER JOIN users AS u ON u.username = f.user " . + "WHERE LEFT(fe.date, 10) = '$form_date' " . + ") " . + "ORDER BY docname, pc_startTime"; + + $res = sqlStatement($query); + } +?> + + + +Appointments and Encounters + + + +
+ +
+ + + + + + + + + + + + + + + + +
+
+

Appointments and Encounters

+
+ Booking Date: + ' + title='Date of appointments mm/dd/yyyy'> +   + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+  Practitioner + +  Time + +  Patient + + Chart  + + Encounter  + + Charge  + + Billed + +  Error +
+   + +   + +   + +   + +   + +   + + + +   +
+ +
+
+ + + diff --git a/interface/reports/players_report.php b/interface/reports/players_report.php new file mode 100644 index 000000000..72db233dd --- /dev/null +++ b/interface/reports/players_report.php @@ -0,0 +1,148 @@ + + // + // 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 report simply lists all players/patients who are members + // of a squad. It is applicable only for sports teams. + + include_once("../globals.php"); + include_once("../../library/patient.inc"); + + $squads = array( + 'None', + 'Senior', + 'Academy', + 'Ladies' + ); + + $fitnesses = array( + 'Full Play', + 'Full Training', + 'Restricted Training', + 'Injured Out' + ); + + $fitcolors = array( + '#00ff00', + '#ffff00', + '#ff8800', + '#ff3333' + ); + + $alertmsg = ''; // not used yet but maybe later + + $query = "SELECT * FROM patient_data " . + "ORDER BY squad, lname, fname"; + $res = sqlStatement($query); +?> + + + + + + +Team Roster + + + +
+ +
+ + + + + + + + + + + + + + + + +
+
+

Team Roster

+
+ +
+
+ + + + + + + + + + + + + + + + + + +
+  Squad + +  Player + +  Fitness + +  Last Encounter +
+   + +   + +   + +    +
+ +
+
+ + + diff --git a/interface/themes/style_sky_blue.css b/interface/themes/style_sky_blue.css index adebabf97..18f9aec52 100644 --- a/interface/themes/style_sky_blue.css +++ b/interface/themes/style_sky_blue.css @@ -39,8 +39,8 @@ A:{visited: #000000;} .required { font-family: sans-serif; text-decoration: none; - font-size: 12pt; - color: #770000; + font-size: 10pt; + color: #880000; font-weight: bold; } diff --git a/interface/usergroup/facility_admin.php b/interface/usergroup/facility_admin.php index 919c8594f..5da84fa4b 100644 --- a/interface/usergroup/facility_admin.php +++ b/interface/usergroup/facility_admin.php @@ -1,16 +1,13 @@ - @@ -100,13 +94,10 @@ if (isset($_POST["fid"])) { Billing Attn: -     

   [Back]
@@ -114,21 +105,5 @@ This is now deprecated use the newer X12 partner management in practice settings - - - - - - - - - - - - - - - - diff --git a/interface/usergroup/user_admin.php b/interface/usergroup/user_admin.php index ade4dd86a..ebec17204 100644 --- a/interface/usergroup/user_admin.php +++ b/interface/usergroup/user_admin.php @@ -1,6 +1,7 @@
Federal Drug ID: "> + +UPIN: "> +   + + Additional Info:
diff --git a/interface/usergroup/usergroup.php b/interface/usergroup/usergroup.php index 9386e4095..f98581c04 100644 --- a/interface/usergroup/usergroup.php +++ b/interface/usergroup/usergroup.php @@ -1,9 +1,10 @@ @@ -15,7 +16,21 @@ OpenEMR ,*" cols="*" frameborder="NO" border="0" framespacing="0"> - + + src="usergroup_admin.php" + + src="../forms_admin/forms_admin.php" + + src="/controller.php?practice_settings" + + src="../main/calendar/index.php?module=PostCalendar&type=admin&func=modifyconfig" + + src="../main/myadmin/index.php" + + src="/logview/logview.php" + + name="Main" scrolling="auto" noresize frameborder="NO"> <body bgcolor="#FFFFFF"> diff --git a/interface/usergroup/usergroup_admin.php b/interface/usergroup/usergroup_admin.php index 818537a6f..437eaa94d 100644 --- a/interface/usergroup/usergroup_admin.php +++ b/interface/usergroup/usergroup_admin.php @@ -33,7 +33,19 @@ if ($_POST["mode"] == "facility") } if ($doit == true) { - $prov_id = idSqlStatement("insert into users set username='".$_POST["username"]."',password='".$_POST["newauthPass"]."',fname='".$_POST["fname"]."',mname='".$_POST["mname"]."',lname='".$_POST["lname"]."',federaltaxid='".$_POST["federaltaxid"]."',authorized='".$_POST["authorized"]."',info='".$_POST["info"]."',federaldrugid='".$_POST["federaldrugid"]."',facility='".$_POST["facility"]."'"); + $prov_id = idSqlStatement("insert into users set " . + "username = '" . $_POST["username"] . + "', password = '" . $_POST["newauthPass"] . + "', fname = '" . $_POST["fname"] . + "', mname = '" . $_POST["mname"] . + "', lname = '" . $_POST["lname"] . + "', federaltaxid = '" . $_POST["federaltaxid"] . + "', authorized = '" . $_POST["authorized"] . + "', info = '" . $_POST["info"] . + "', federaldrugid = '" . $_POST["federaldrugid"] . + "', upin = '" . $_POST["upin"] . + "', facility = '" . $_POST["facility"] . + "'"); sqlStatement("insert into groups set name='".$_POST["groupname"]."',user='".$_POST["username"]."'"); $ws = new WSProvider($prov_id); } @@ -206,6 +218,10 @@ foreach($result as $iter) { <td><span class=text>Federal Tax ID: </span></td><td><input type=entry name='federaltaxid' size=20></td> <td><span class=text>Federal Drug ID: </span></td><td><input type=entry name='federaldrugid' size=20></td> </tr> +<tr> +<td><span class="text">UPIN: </span></td><td><input type="entry" name="upin" size="20"></td> +<td><span class=text>&nbsp;</span></td><td>&nbsp;</td> +</tr> </table> <span class=text>Additional Info: </span><br> <textarea name=info cols=40 rows=4 wrap=auto></textarea> diff --git a/interface/usergroup/usergroup_navigation.php b/interface/usergroup/usergroup_navigation.php index 57d046bed..dc0c951ab 100644 --- a/interface/usergroup/usergroup_navigation.php +++ b/interface/usergroup/usergroup_navigation.php @@ -1,5 +1,6 @@ <? include_once("../globals.php"); +include_once("../../library/acl.inc"); ?> <html> @@ -16,29 +17,41 @@ include_once("../globals.php"); <table border="0" cellspacing="0" cellpadding="0" width="100%" height="100%"> <tr> +<? if (acl_check('admin', 'users')) { ?> <td valign="middle" nowrap> &nbsp;&nbsp;<a class=menu target=Main href="usergroup_admin.php">Users & Groups</a>&nbsp; </td> +<? } ?> +<? if (acl_check('admin', 'forms')) { ?> <td valign="middle" nowrap> &nbsp;<a class=menu target=Main href="../forms_admin/forms_admin.php">Forms Settings</a>&nbsp; </td> +<? } ?> +<? if (acl_check('admin', 'practice')) { ?> <td valign="middle" nowrap> &nbsp;<a class=menu target=Main href="<?=$GLOBALS['webroot']?>/controller.php?practice_settings">Practice Settings</a>&nbsp; </td> +<? } ?> +<? if (acl_check('admin', 'calendar')) { ?> <td valign="middle" nowrap> &nbsp;<a class=menu target=Main href="../main/calendar/index.php?module=PostCalendar&type=admin&func=modifyconfig">Calendar Settings</a>&nbsp; </td> +<? } ?> +<? if (acl_check('admin', 'database')) { ?> <td valign="middle" nowrap> &nbsp;<a class=menu target=Main href="../main/myadmin/index.php">Database&nbsp;Reporting</a>&nbsp; </td> +<? } ?> +<? if (acl_check('admin', 'users')) { ?> <td valign="middle" nowrap> &nbsp;<a class=menu target=Main href="<?echo $rootdir?>/logview/logview.php">View Logs</a>&nbsp; </td> +<? } ?> <td valign="middle" align="right" nowrap> <?//<a href="../logout.php?auth=logout" target="_top" class="logout">Logout</a>?> diff --git a/templates/report/general_default.html b/templates/report/general_default.html index 9a5400e9d..646d47f87 100644 --- a/templates/report/general_default.html +++ b/templates/report/general_default.html @@ -1,7 +1,8 @@ <html> <head> {literal} - <style type="text/css" title="mystyles" media="all"> + +<style type="text/css" title="mystyles" media="all"> <!-- td { font-size:8pt; @@ -11,23 +12,41 @@ a { font-size:8pt; font-family:helvetica; } - --> </style> -<script language="javascript"> + +<script language="JavaScript"> + function clear_vars() { document.report.var1.value = ""; document.report.var2.value = ""; } + +function dopopup(aurl) { + window.open(aurl, '_blank', 'width=750,height=550,resizable=1'); +} + </script> + {/literal} </head> <body bgcolor="{$STYLE.BGCOLOR2}"> <a href="custom_report_range.php" target="_new">Superbill Report</a> <br/> - +<a href="appt_encounter_report.php" target="_new">Appointments-Encounters Report</a> +{php} + if ($GLOBALS['athletic_team']) { + echo "<br/>\n"; + echo "<a href='javascript:dopopup(\"players_report.php\")'>Team Roster</a>\n"; + } +{/php} +<br/> +&nbsp; +<br/> <a href="{$printable_link}" target="_new">[printable]</a> +&nbsp; +<br/> <form name="report" action="index.php" method="get"> <table> <tr> -- 2.11.4.GIT