4 * Report - Cash receipts by Provider
6 * This module was written for one of my clients to report on cash
7 * receipts by practitioner. It is not as complete as it should be
8 * but I wanted to make the code available to the project because
9 * many other practices have this same need. - rod@sunsetsystems.com
12 * @link http://www.open-emr.org
13 * @author Rod Roark <rod@sunsetsystems.com>
14 * @author Terry Hill <terry@lillysystems.com>
15 * @author Brady Miller <brady.g.miller@gmail.com>
16 * @copyright Copyright (c) 2006-2020 Rod Roark <rod@sunsetsystems.com>
17 * @copyright Copyright (c) 2016 Terry Hill <terry@lillysystems.com>
18 * @copyright Copyright (c) 2017-2019 Brady Miller <brady.g.miller@gmail.com>
19 * @license https://github.com/openemr/openemr/blob/master/LICENSE GNU General Public License 3
22 // TODO: Replace tables with BS4 grid classes for GSoC
25 require_once('../globals.php');
26 require_once($GLOBALS['srcdir'] . '/patient.inc.php');
27 require_once($GLOBALS['srcdir'] . '/options.inc.php');
28 require_once($GLOBALS['fileroot'] . '/custom/code_types.inc.php');
29 // This determines if a particular procedure code corresponds to receipts
30 // for the "Clinic" column as opposed to receipts for the practitioner. Each
31 // practice will have its own policies in this regard, so you'll probably
32 // have to customize this function. If you use the "fee sheet" encounter
33 // form then the code below may work for you.
35 require_once('../forms/fee_sheet/codes.php');
37 use OpenEMR\Common\Acl\AclMain
;
38 use OpenEMR\Common\Csrf\CsrfUtils
;
39 use OpenEMR\Common\Twig\TwigContainer
;
40 use OpenEMR\Common\Utils\FormatMoney
;
41 use OpenEMR\Core\Header
;
43 if (!AclMain
::aclCheckCore('acct', 'rep') && !AclMain
::aclCheckCore('acct', 'rep_a')) {
44 echo (new TwigContainer(null, $GLOBALS['kernel']))->getTwig()->render('core/unauthorized.html.twig', ['pageTitle' => xl("Cash Receipts by Provider")]);
48 function is_clinic($code)
51 $i = strpos($code, ':');
53 $code = substr($code, 0, $i);
57 !empty($bcodes['CPT4'][xl('Lab')][$code]) ||
58 !empty($bcodes['CPT4'][xl('Immunizations')][$code]) ||
59 !empty($bcodes['HCPCS'][xl('Therapeutic Injections')][$code])
63 $form_use_edate = $_POST['form_use_edate'] ??
null;
65 $form_proc_codefull = trim($_POST['form_proc_codefull'] ??
'');
66 // Parse the code type and the code from <code_type>:<code>
67 $tmp_code_array = explode(':', $form_proc_codefull);
68 $form_proc_codetype = $tmp_code_array[0];
69 $form_proc_code = $tmp_code_array[1] ??
null;
71 $form_dx_codefull = trim($_POST['form_dx_codefull'] ??
'');
72 // Parse the code type and the code from <code_type>:<code>
73 $tmp_code_array = explode(':', $form_dx_codefull);
74 $form_dx_codetype = $tmp_code_array[0];
75 $form_dx_code = $tmp_code_array[1] ??
null;
77 $form_procedures = empty($_POST['form_procedures']) ?
0 : 1;
78 $form_from_date = (isset($_POST['form_from_date'])) ?
DateToYYYYMMDD($_POST['form_from_date']) : date('Y-m-01');
79 $form_to_date = (isset($_POST['form_to_date'])) ?
DateToYYYYMMDD($_POST['form_to_date']) : date('Y-m-d');
81 $form_facility = $_POST['form_facility'] ??
null;
86 <title
><?php
echo xlt('Cash Receipts by Provider')?
></title
>
88 <?php Header
::setupHeader(['datetime-picker', 'report-helper']); ?
>
91 /* specifically include & exclude from printing */
97 #report_parameters_daterange {
106 /* specifically exclude some from the screen */
108 #report_parameters_daterange {
117 oeFixedHeaderSetup(document
.getElementById('mymaintable'));
118 var win
= top
.printLogSetup ? top
: opener
.top
;
119 win
.printLogSetup(document
.getElementById('printbutton'));
121 $
('.datepicker').datetimepicker({
122 <?php
$datetimepicker_timepicker = false; ?
>
123 <?php
$datetimepicker_showseconds = false; ?
>
124 <?php
$datetimepicker_formatInput = true; ?
>
125 <?php
require($GLOBALS['srcdir'] . '/js/xl/jquery-datetimepicker-2-5-4.js.php'); ?
>
126 <?php
// can add any additional javascript settings to datetimepicker here; need to prepend first setting with a comma ?>
130 // This is for callback by the find-code popup.
131 // Erases the current entry
132 // The target element is set by the find-code popup
133 // (this allows use of this in multiple form elements on the same page)
134 function set_related_target(codetype
, code
, selector
, codedesc
, target_element
, limit
=0) {
135 var f
= document
.forms
[0];
136 var s
= f
[target_element
].value
;
138 s
= codetype +
':' + code
;
142 f
[target_element
].value
= s
;
145 // This invokes the find-code (procedure/service codes) popup.
146 function sel_procedure() {
147 dlgopen('../patient_file/encounter/find_code_popup.php?target_element=form_proc_codefull&codetype=' +
<?php
echo js_url(collect_codetypes("procedure", "csv")); ?
>, '_blank', 500, 400);
150 // This invokes the find-code (diagnosis codes) popup.
151 function sel_diagnosis() {
152 dlgopen('../patient_file/encounter/find_code_popup.php?target_element=form_dx_codefull&codetype=' +
<?php
echo js_url(collect_codetypes("diagnosis", "csv")); ?
>, '_blank', 500, 400);
158 <body
class="body_top">
159 <div
class="container">
161 <div
class="col-sm-12">
162 <div
class="clearfix">
164 <?php
echo xlt('Report'); ?
> - <?php
echo xlt('Cash Receipts by Provider'); ?
>
168 </div
><!-- end of header div
-->
171 <form method
='post' action
='sl_receipts_report.php' id
='theform' onsubmit
='return top.restoreSession()'>
172 <input type
="hidden" name
="csrf_token_form" value
="<?php echo attr(CsrfUtils::collectCsrfToken()); ?>" />
174 <div id
="report_parameters">
176 <input type
='hidden' name
='form_refresh' id
='form_refresh' value
=''/>
180 <td style
='width: 660px'>
181 <div
class='float-left'>
185 <td
class='col-form-label'>
186 <?php
echo xlt('Facility'); ?
>:
189 <?php
dropdown_facility($form_facility, 'form_facility'); ?
>
191 <td
class='col-form-label'>
192 <?php
echo xlt('Provider'); ?
>:
196 if (AclMain
::aclCheckCore('acct', 'rep_a')) {
197 // Build a drop-down list of providers.
199 $query = "select id, lname, fname from users where " .
200 "authorized = 1 order by lname, fname";
201 $res = sqlStatement($query);
202 echo "<select name='form_doctor' class='form-control'>\n";
203 echo " <option value=''>-- " . xlt('All Providers') . " --\n";
204 while ($row = sqlFetchArray($res)) {
205 $provid = $row['id'];
206 echo " <option value='" . attr($provid) . "'";
207 if (!empty($_POST['form_doctor']) && ($provid == $_POST['form_doctor'])) {
211 echo ">" . text($row['lname']) . ", " . text($row['fname']) . "\n";
216 echo "<input type='hidden' name='form_doctor' value='" . attr($_SESSION['authUserID']) . "'>";
221 <select name
='form_use_edate' class='form-control'>
222 <option value
='0'><?php
echo xlt('Payment Date'); ?
></option
>
223 <option value
='1'<?php
echo ($form_use_edate) ?
' selected' : ''; ?
>><?php
echo xlt('Invoice Date'); ?
></option
>
228 <td
class='col-form-label'>
229 <?php
echo xlt('From'); ?
>:
232 <input type
='text' class='datepicker form-control' name
='form_from_date' id
="form_from_date" size
='10' value
='<?php echo attr(oeFormatShortDate($form_from_date)); ?>'
233 title
='<?php echo xla('Date of appointments
'); ?>' >
235 <td
class='col-form-label'>
236 <?php
echo xlt('To{{Range}}'); ?
>:
239 <input type
='text' class='datepicker form-control' name
='form_to_date' id
="form_to_date" size
='10' value
='<?php echo attr(oeFormatShortDate($form_to_date)); ?>'
240 title
='<?php echo xla('Optional end date
'); ?>' >
245 <td
class='col-form-label'>
247 if (!$GLOBALS['simplified_demographics']) {
248 echo ' ' . xlt('Procedure/Service') . ':';
252 <input type
='text' class='form-control' name
='form_proc_codefull' size
='11' value
='<?php echo attr($form_proc_codefull); ?>' onclick
='sel_procedure()'
253 title
='<?php echo xla('Optional procedure
/service code
'); ?>'
255 if ($GLOBALS['simplified_demographics']) {
256 echo "style='display:none'";
260 <td
class='col-form-label'>
262 if (!$GLOBALS['simplified_demographics']) {
263 echo ' ' . xlt('Diagnosis') . ':';
267 <input type
='text' class='form-control' name
='form_dx_codefull' size
='11' value
='<?php echo attr($form_dx_codefull); ?>' onclick
='sel_diagnosis()'
268 title
='<?php echo xla('Enter a diagnosis code to exclude all invoices not containing it
'); ?>'
270 if ($GLOBALS['simplified_demographics']) {
271 echo "style='display: none'";
276 <div
class='checkbox'>
277 <label
><input type
='checkbox' name
='form_details' value
='1'<?php
echo (!empty($_POST['form_details'])) ?
" checked" : ""; ?
>><?php
echo xlt('Details')?
></label
>
279 <div
class='checkbox'>
280 <label
><input type
='checkbox' name
='form_procedures' value
='1'<?php
echo ($form_procedures) ?
" checked" : ""; ?
>><?php
echo xlt('Procedures')?
></label
>
291 <td
class='h-100 align-middle' align
='left'>
293 <table
class='w-100 h-100 border-left'>
296 <div
class="text-center">
297 <div
class="btn-group" role
="group">
298 <a href
='#' class='btn btn-secondary btn-save' onclick
='$("#form_refresh").attr("value","true"); $("#theform").submit();'>
299 <?php
echo xlt('Submit'); ?
>
301 <?php
if (!empty($_POST['form_refresh'])) { ?
>
302 <a href
='#' class='btn btn-secondary btn-print' id
='printbutton'>
303 <?php
echo xlt('Print'); ?
>
317 if (!empty($_POST['form_refresh'])) {
318 if (!CsrfUtils
::verifyCsrfToken($_POST["csrf_token_form"])) {
319 CsrfUtils
::csrfNotVerified();
323 <div id
="report_results">
324 <table
class='table' cellpadding
='1' cellspacing
='2' width
='98%' id
='mymaintable'>
327 <?php
echo xlt('Practitioner') ?
>
330 <?php
echo xlt('Date') ?
>
332 <?php
if ($form_procedures) { ?
>
335 if ($GLOBALS['cash_receipts_report_invoice'] == '0') {
342 <?php
if ($form_proc_codefull) { ?
>
344 <?php
echo xlt('InvAmt') ?
>
347 <?php
if ($form_proc_codefull) { ?
>
349 <?php
echo xlt('Insurance') ?
>
352 <?php
if ($form_procedures) { ?
>
354 <?php
echo xlt('Procedure') ?
>
357 <?php
echo xlt('Prof.') ?
>
360 <?php
echo xlt('Clinic') ?
>
364 <?php
echo xlt('Received') ?
>
369 if ($_POST['form_refresh']) {
370 $form_doctor = $_POST['form_doctor'];
371 if (!AclMain
::aclCheckCore('acct', 'rep_a')) {
372 // only allow user to see their encounter information
373 $form_doctor = $_SESSION['authUserID'];
378 $ids_to_skip = array();
381 // Get copays. These will be ignored if a CPT code was specified.
383 if (!$form_proc_code ||
!$form_proc_codetype) {
384 /*************************************************************
385 $query = "SELECT b.fee, b.pid, b.encounter, b.code_type, b.code, b.modifier, " .
386 "fe.date, fe.id AS trans_id, u.id AS docid " .
387 "FROM billing AS b " .
388 "JOIN form_encounter AS fe ON fe.pid = b.pid AND fe.encounter = b.encounter " .
389 "JOIN forms AS f ON f.pid = b.pid AND f.encounter = b.encounter AND f.formdir = 'newpatient' " .
390 "LEFT OUTER JOIN users AS u ON u.username = f.user " .
391 "WHERE b.code_type = 'COPAY' AND b.activity = 1 AND " .
392 "fe.date >= '$form_from_date 00:00:00' AND fe.date <= '$form_to_date 23:59:59'";
393 // If a facility was specified.
394 if ($form_facility) {
395 $query .= " AND fe.facility_id = '$form_facility'";
397 // If a doctor was specified.
399 $query .= " AND u.id = '$form_doctor'";
401 *************************************************************/
402 $sqlBindArray = array();
403 $query = "SELECT b.fee, b.pid, b.encounter, b.code_type, b.code, b.modifier, " .
404 "fe.date, fe.id AS trans_id, fe.provider_id AS docid, fe.invoice_refno " .
405 "FROM billing AS b " .
406 "JOIN form_encounter AS fe ON fe.pid = b.pid AND fe.encounter = b.encounter " .
407 "WHERE b.code_type = 'COPAY' AND b.activity = 1 AND " .
408 "fe.date >= ? AND fe.date <= ?";
409 array_push($sqlBindArray, $form_from_date . " 00:00:00", $form_to_date . " 23:59:59");
410 // If a facility was specified.
411 if ($form_facility) {
412 $query .= " AND fe.facility_id = ?";
413 array_push($sqlBindArray, $form_facility);
416 // If a doctor was specified.
418 $query .= " AND fe.provider_id = ?";
419 array_push($sqlBindArray, $form_doctor);
422 /************************************************************/
424 $res = sqlStatement($query, $sqlBindArray);
425 while ($row = sqlFetchArray($res)) {
426 $trans_id = $row['trans_id'];
427 $thedate = substr($row['date'], 0, 10);
428 $patient_id = $row['pid'];
429 $encounter_id = $row['encounter'];
431 if (!empty($ids_to_skip[$trans_id])) {
436 // If a diagnosis code was given then skip any invoices without
438 if ($form_dx_code && $form_dx_codetype) {
439 $tmp = sqlQuery("SELECT count(*) AS count FROM billing WHERE " .
440 "pid = ? AND encounter = ? AND " .
441 "code_type = ? AND code LIKE ? AND " .
442 "activity = 1", array($patient_id,$encounter_id,$form_dx_codetype,$form_dx_code));
443 if (empty($tmp['count'])) {
444 $ids_to_skip[$trans_id] = 1;
451 "%08u%s%08u%08u%06u",
458 $arows[$key] = array();
459 $arows[$key]['transdate'] = $thedate;
460 $arows[$key]['amount'] = $row['fee'];
461 $arows[$key]['docid'] = $row['docid'];
462 $arows[$key]['project_id'] = 0;
463 $arows[$key]['memo'] = '';
464 if ($GLOBALS['cash_receipts_report_invoice'] == '0') {
465 $arows[$key]['invnumber'] = "$patient_id.$encounter_id";
467 $arows[$key]['invnumber'] = "$patient_name";
470 $arows[$key]['irnumber'] = $row['invoice_refno'];
472 } // end copays (not $form_proc_code)
474 // Get ar_activity (having payments), form_encounter, forms, users, optional ar_session
475 /***************************************************************
476 $query = "SELECT a.pid, a.encounter, a.post_time, a.code, a.modifier, a.pay_amount, " .
477 "fe.date, fe.id AS trans_id, u.id AS docid, s.deposit_date, s.payer_id " .
478 "FROM ar_activity AS a " .
479 "JOIN form_encounter AS fe ON fe.pid = a.pid AND fe.encounter = a.encounter " .
480 "JOIN forms AS f ON f.pid = a.pid AND f.encounter = a.encounter AND f.formdir = 'newpatient' " .
481 "LEFT OUTER JOIN users AS u ON u.username = f.user " .
482 "LEFT OUTER JOIN ar_session AS s ON s.session_id = a.session_id " .
483 "WHERE a.pay_amount != 0 AND ( " .
484 "a.post_time >= '$form_from_date 00:00:00' AND a.post_time <= '$form_to_date 23:59:59' " .
485 "OR fe.date >= '$form_from_date 00:00:00' AND fe.date <= '$form_to_date 23:59:59' " .
486 "OR s.deposit_date >= '$form_from_date' AND s.deposit_date <= '$form_to_date' )";
487 // If a procedure code was specified.
488 if ($form_proc_code) $query .= " AND a.code = '$form_proc_code'";
489 // If a facility was specified.
490 if ($form_facility) $query .= " AND fe.facility_id = '$form_facility'";
491 // If a doctor was specified.
492 if ($form_doctor) $query .= " AND u.id = '$form_doctor'";
493 ***************************************************************/
494 $sqlBindArray = array();
495 $query = "SELECT a.pid, a.encounter, a.post_time, a.code, a.modifier, a.pay_amount, " .
496 "fe.date, fe.id AS trans_id, fe.provider_id AS docid, fe.invoice_refno, s.deposit_date, s.payer_id, " .
497 "b.provider_id, concat(p.lname, ' ', p.fname) as 'pat_fulname' " .
498 "FROM ar_activity AS a " .
499 "JOIN form_encounter AS fe ON fe.pid = a.pid AND fe.encounter = a.encounter " .
500 "LEFT OUTER JOIN ar_session AS s ON s.session_id = a.session_id " .
501 "LEFT OUTER JOIN patient_data AS p ON p.pid = a.pid " .
502 "LEFT OUTER JOIN billing AS b ON b.pid = a.pid AND b.encounter = a.encounter AND " .
503 "b.code = a.code AND b.modifier = a.modifier AND b.activity = 1 AND " .
504 "b.code_type != 'COPAY' AND b.code_type != 'TAX' " .
505 "WHERE a.deleted IS NULL AND a.pay_amount != 0 AND ( " .
506 "a.post_time >= ? AND a.post_time <= ? " .
507 "OR fe.date >= ? AND fe.date <= ? " .
508 "OR s.deposit_date >= ? AND s.deposit_date <= ? )";
509 array_push($sqlBindArray, $form_from_date . " 00:00:00", $form_to_date . " 23:59:59", $form_from_date . " 00:00:00", $form_to_date . " 23:59:59", $form_from_date, $form_to_date);
510 // If a procedure code was specified.
511 // Support code type if it is in the ar_activity table. Note it is not always included, so
512 // also support a blank code type in ar_activity table.
513 if ($form_proc_codetype && $form_proc_code) {
514 $query .= " AND (a.code_type = ? OR a.code_type = '') AND a.code = ?";
515 array_push($sqlBindArray, $form_proc_codetype, $form_proc_code);
518 // If a facility was specified.
519 if ($form_facility) {
520 $query .= " AND fe.facility_id = ?";
521 array_push($sqlBindArray, $form_facility);
524 // If a doctor was specified.
526 $query .= " AND ( b.provider_id = ? OR " .
527 "( ( b.provider_id IS NULL OR b.provider_id = 0 ) AND " .
528 "fe.provider_id = ? ) )";
529 array_push($sqlBindArray, $form_doctor, $form_doctor);
532 /**************************************************************/
534 $res = sqlStatement($query, $sqlBindArray);
535 while ($row = sqlFetchArray($res)) {
536 $trans_id = $row['trans_id'];
537 $patient_id = $row['pid'];
538 $encounter_id = $row['encounter'];
539 $patient_name = $row['pat_fulname'];
541 if (!empty($ids_to_skip[$trans_id])) {
546 if ($form_use_edate) {
547 $thedate = substr($row['date'], 0, 10);
549 if (!empty($row['deposit_date'])) {
550 $thedate = $row['deposit_date'];
552 $thedate = substr($row['post_time'], 0, 10);
556 if (strcmp($thedate, $form_from_date) < 0 ||
strcmp($thedate, $form_to_date) > 0) {
561 // If a diagnosis code was given then skip any invoices without
563 if ($form_dx_code && $form_dx_codetype) {
564 $tmp = sqlQuery("SELECT count(*) AS count FROM billing WHERE " .
565 "pid = ? AND encounter = ? AND " .
566 "code_type = ? AND code LIKE ? AND " .
567 "activity = 1", array($patient_id,$encounter_id,$form_dx_codetype,$form_dx_code));
568 if (empty($tmp['count'])) {
569 $ids_to_skip[$trans_id] = 1;
575 $docid = empty($row['encounter_id']) ?
$row['docid'] : $row['encounter_id'];
577 "%08u%s%08u%08u%06u",
584 $arows[$key] = array();
585 $arows[$key]['transdate'] = $thedate;
586 $arows[$key]['amount'] = 0 - $row['pay_amount'];
587 $arows[$key]['docid'] = $docid;
588 $arows[$key]['project_id'] = empty($row['payer_id']) ?
0 : $row['payer_id'];
589 $arows[$key]['memo'] = $row['code'];
590 if ($GLOBALS['cash_receipts_report_invoice'] == '0') {
591 $arows[$key]['invnumber'] = "$patient_id.$encounter_id";
593 $arows[$key]['invnumber'] = "$patient_name";
596 $arows[$key]['irnumber'] = $row['invoice_refno'];
602 foreach ($arows as $row) {
603 // Get insurance company name
605 if ($form_proc_codefull && $row['project_id']) {
606 $tmp = sqlQuery("SELECT name FROM insurance_companies WHERE " .
607 "id = ?", array($row['project_id']));
608 $insconame = $tmp['name'];
613 if ($form_procedures && is_clinic($row['memo'])) {
614 $amount2 -= $row['amount'];
616 $amount1 -= $row['amount'];
619 // if ($docid != $row['employee_id']) {
620 if ($docid != $row['docid']) {
624 <!-- TODO
: Replace bgcolor with BS4
!-->
625 <tr bgcolor
="#ddddff">
626 <td
class="detail" colspan
="<?php echo ($form_proc_codefull ? 4 : 2) + ($form_procedures ? 2 : 0); ?>">
627 <?php
echo xlt('Totals for ') . text($docname) ?
>
630 <?php
echo text(FormatMoney
::getBucks($doctotal1)) ?
>
632 <?php
if ($form_procedures) { ?
>
634 <?php
echo text(FormatMoney
::getBucks($doctotal2)) ?
>
644 $docid = $row['docid'];
645 $tmp = sqlQuery("SELECT lname, fname FROM users WHERE id = ?", array($docid));
646 $docname = empty($tmp) ?
xl('Unknown') : $tmp['fname'] . ' ' . $tmp['lname'];
648 $docnameleft = $docname;
651 if ($_POST['form_details']) {
656 <?php
echo text($docnameleft); $docnameleft = " " ?
>
659 <?php
echo text(oeFormatShortDate($row['transdate'])); ?
>
661 <?php
if ($form_procedures) { ?
>
663 <?php
echo empty($row['irnumber']) ?
text($row['invnumber']) : text($row['irnumber']); ?
>
667 if ($form_proc_code && $form_proc_codetype) {
668 echo " <td class='detail' align='right'>";
669 list($patient_id, $encounter_id) = explode(".", $row['invnumber']);
670 $tmp = sqlQuery("SELECT SUM(fee) AS sum FROM billing WHERE " .
671 "pid = ? AND encounter = ? AND " .
672 "code_type = ? AND code = ? AND activity = 1", array($patient_id,$encounter_id,$form_proc_codetype,$form_proc_code));
673 echo text(FormatMoney
::getBucks($tmp['sum']));
678 if ($form_proc_codefull) { ?
>
680 <?php
echo text($insconame) ?
>
683 <?php
if ($form_procedures) { ?
>
685 <?php
echo text($row['memo']) ?
>
688 <td
class="detail" align
="right">
689 <?php
echo text(FormatMoney
::getBucks($amount1)) ?
>
691 <?php
if ($form_procedures) { ?
>
692 <td
class="detail" align
="right">
693 <?php
echo text(FormatMoney
::getBucks($amount2)) ?
>
699 $doctotal1 +
= $amount1;
700 $doctotal2 +
= $amount2;
702 $grandtotal1 = $grandtotal1 ??
null;
703 $grandtotal1 +
= $amount1;
705 $grandtotal2 = $grandtotal2 ??
null;
706 $grandtotal2 +
= $amount2;
709 <!-- TODO
: Replace bgcolor with BS4
!-->
710 <tr bgcolor
="#ddddff">
711 <td
class="detail" colspan
="<?php echo ($form_proc_codefull ? 4 : 2) + ($form_procedures ? 2 : 0); ?>">
712 <?php
echo xlt('Totals for ') . text($docname ??
'') ?
>
715 <?php
echo text(FormatMoney
::getBucks($doctotal1 ??
'')) ?
>
717 <?php
if ($form_procedures) { ?
>
719 <?php
echo text(FormatMoney
::getBucks($doctotal2)) ?
>
724 <!-- TODO
: Replace bgcolor with BS4
!-->
725 <tr bgcolor
="#ffdddd">
726 <td
class="detail" colspan
="<?php echo ($form_proc_codefull ? 4 : 2) + ($form_procedures ? 2 : 0); ?>">
727 <?php
echo xlt('Grand Totals') ?
>
730 <?php
echo text(FormatMoney
::getBucks($grandtotal1 ??
'')) ?
>
732 <?php
if ($form_procedures) { ?
>
734 <?php
echo text(FormatMoney
::getBucks($grandtotal2)) ?
>
738 <?php
$report_from_date = oeFormatShortDate($form_from_date) ;
739 $report_to_date = oeFormatShortDate($form_to_date) ;
741 <div align
='right'><span
class='title'><?php
echo xlt('Report Date') . ' '; ?
><?php
echo text($report_from_date);?
> - <?php
echo text($report_to_date);?
></span
></div
>
751 <?php
echo xlt('Please input search criteria above, and click Submit to view results.'); ?
>