enable to upload docx templates (#1961)
[openemr.git] / interface / reports / patient_list.php
blobf2ef16b1a04d6004603af8772e56c8a710c833f4
1 <?php
2 /**
3 * This report lists patients that were seen within a given date
4 * range, or all patients if no date range is entered.
6 * @package OpenEMR
7 * @link http://www.open-emr.org
8 * @author Rod Roark <rod@sunsetsystems.com>
9 * @author Brady Miller <brady.g.miller@gmail.com>
10 * @copyright Copyright (c) 2006-2016 Rod Roark <rod@sunsetsystems.com>
11 * @copyright Copyright (c) 2017 Brady Miller <brady.g.miller@gmail.com>
12 * @license https://github.com/openemr/openemr/blob/master/LICENSE GNU General Public License 3
15 require_once("../globals.php");
16 require_once("$srcdir/patient.inc");
17 require_once("$srcdir/options.inc.php");
19 use OpenEMR\Core\Header;
21 // Prepare a string for CSV export.
22 function qescape($str)
24 $str = str_replace('\\', '\\\\', $str);
25 return str_replace('"', '\\"', $str);
28 $from_date = DateToYYYYMMDD($_POST['form_from_date']);
29 $to_date = DateToYYYYMMDD($_POST['form_to_date']);
30 if (empty($to_date) && !empty($from_date)) {
31 $to_date = date('Y-12-31');
34 if (empty($from_date) && !empty($to_date)) {
35 $from_date = date('Y-01-01');
38 $form_provider = empty($_POST['form_provider']) ? 0 : intval($_POST['form_provider']);
40 // In the case of CSV export only, a download will be forced.
41 if ($_POST['form_csvexport']) {
42 header("Pragma: public");
43 header("Expires: 0");
44 header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
45 header("Content-Type: application/force-download");
46 header("Content-Disposition: attachment; filename=patient_list.csv");
47 header("Content-Description: File Transfer");
48 } else {
50 <html>
51 <head>
53 <title><?php echo xlt('Patient List'); ?></title>
55 <?php Header::setupHeader(['datetime-picker', 'report-helper']); ?>
57 <script language="JavaScript">
59 $(document).ready(function() {
60 oeFixedHeaderSetup(document.getElementById('mymaintable'));
61 top.printLogSetup(document.getElementById('printbutton'));
63 $('.datepicker').datetimepicker({
64 <?php $datetimepicker_timepicker = false; ?>
65 <?php $datetimepicker_showseconds = false; ?>
66 <?php $datetimepicker_formatInput = true; ?>
67 <?php require($GLOBALS['srcdir'] . '/js/xl/jquery-datetimepicker-2-5-4.js.php'); ?>
68 <?php // can add any additional javascript settings to datetimepicker here; need to prepend first setting with a comma ?>
69 });
70 });
72 </script>
74 <style type="text/css">
76 /* specifically include & exclude from printing */
77 @media print {
78 #report_parameters {
79 visibility: hidden;
80 display: none;
82 #report_parameters_daterange {
83 visibility: visible;
84 display: inline;
85 margin-bottom: 10px;
87 #report_results table {
88 margin-top: 0px;
92 /* specifically exclude some from the screen */
93 @media screen {
94 #report_parameters_daterange {
95 visibility: hidden;
96 display: none;
98 #report_results {
99 width: 100%;
103 </style>
105 </head>
107 <body class="body_top">
109 <!-- Required for the popup date selectors -->
110 <div id="overDiv" style="position:absolute; visibility:hidden; z-index:1000;"></div>
112 <span class='title'><?php echo xlt('Report'); ?> - <?php echo xlt('Patient List'); ?></span>
114 <div id="report_parameters_daterange">
115 <?php if (!(empty($to_date) && empty($from_date))) { ?>
116 <?php echo text(oeFormatShortDate($from_date)) ." &nbsp; " . xlt('to') . " &nbsp; " . text(oeFormatShortDate($to_date)); ?>
117 <?php } ?>
118 </div>
120 <form name='theform' id='theform' method='post' action='patient_list.php' onsubmit='return top.restoreSession()'>
122 <div id="report_parameters">
124 <input type='hidden' name='form_refresh' id='form_refresh' value=''/>
125 <input type='hidden' name='form_csvexport' id='form_csvexport' value=''/>
127 <table>
128 <tr>
129 <td width='60%'>
130 <div style='float:left'>
132 <table class='text'>
133 <tr>
134 <td class='control-label'>
135 <?php echo xlt('Provider'); ?>:
136 </td>
137 <td>
138 <?php
139 generate_form_field(array('data_type' => 10, 'field_id' => 'provider',
140 'empty_title' => '-- All --'), $_POST['form_provider']);
142 </td>
143 <td class='control-label'>
144 <?php echo xlt('Visits From'); ?>:
145 </td>
146 <td>
147 <input class='datepicker form-control' type='text' name='form_from_date' id="form_from_date" size='10' value='<?php echo attr(oeFormatShortDate($from_date)); ?>'>
148 </td>
149 <td class='control-label'>
150 <?php echo xlt('To'); ?>:
151 </td>
152 <td>
153 <input class='datepicker form-control' type='text' name='form_to_date' id="form_to_date" size='10' value='<?php echo attr(oeFormatShortDate($to_date)); ?>'>
154 </td>
155 </tr>
156 </table>
158 </div>
160 </td>
161 <td align='left' valign='middle' height="100%">
162 <table style='border-left:1px solid; width:100%; height:100%' >
163 <tr>
164 <td>
165 <div class="text-center">
166 <div class="btn-group" role="group">
167 <a href='#' class='btn btn-default btn-save' onclick='$("#form_csvexport").val(""); $("#form_refresh").attr("value","true"); $("#theform").submit();'>
168 <?php echo xlt('Submit'); ?>
169 </a>
170 <a href='#' class='btn btn-default btn-transmit' onclick='$("#form_csvexport").attr("value","true"); $("#theform").submit();'>
171 <?php echo xlt('Export to CSV'); ?>
172 </a>
173 <?php if ($_POST['form_refresh']) { ?>
174 <a href='#' id='printbutton' class='btn btn-default btn-print'>
175 <?php echo xlt('Print'); ?>
176 </a>
177 <?php } ?>
178 </div>
179 </div>
180 </td>
181 </tr>
182 </table>
183 </td>
184 </tr>
185 </table>
186 </div> <!-- end of parameters -->
188 <?php
189 } // end not form_csvexport
191 if ($_POST['form_refresh'] || $_POST['form_csvexport']) {
192 if ($_POST['form_csvexport']) {
193 // CSV headers:
194 echo '"' . xl('Last Visit') . '",';
195 echo '"' . xl('First') . '",';
196 echo '"' . xl('Last') . '",';
197 echo '"' . xl('Middle') . '",';
198 echo '"' . xl('ID') . '",';
199 echo '"' . xl('Street') . '",';
200 echo '"' . xl('City') . '",';
201 echo '"' . xl('State') . '",';
202 echo '"' . xl('Zip') . '",';
203 echo '"' . xl('Home Phone') . '",';
204 echo '"' . xl('Work Phone') . '"' . "\n";
205 } else {
208 <div id="report_results">
209 <table id='mymaintable'>
210 <thead>
211 <th> <?php echo xlt('Last Visit'); ?> </th>
212 <th> <?php echo xlt('Patient'); ?> </th>
213 <th> <?php echo xlt('ID'); ?> </th>
214 <th> <?php echo xlt('Street'); ?> </th>
215 <th> <?php echo xlt('City'); ?> </th>
216 <th> <?php echo xlt('State'); ?> </th>
217 <th> <?php echo xlt('Zip'); ?> </th>
218 <th> <?php echo xlt('Home Phone'); ?> </th>
219 <th> <?php echo xlt('Work Phone'); ?> </th>
220 </thead>
221 <tbody>
222 <?php
223 } // end not export
224 $totalpts = 0;
225 $sqlArrayBind = array();
226 $query = "SELECT " .
227 "p.fname, p.mname, p.lname, p.street, p.city, p.state, " .
228 "p.postal_code, p.phone_home, p.phone_biz, p.pid, p.pubpid, " .
229 "count(e.date) AS ecount, max(e.date) AS edate, " .
230 "i1.date AS idate1, i2.date AS idate2, " .
231 "c1.name AS cname1, c2.name AS cname2 " .
232 "FROM patient_data AS p ";
233 if (!empty($from_date)) {
234 $query .= "JOIN form_encounter AS e ON " .
235 "e.pid = p.pid AND " .
236 "e.date >= ? AND " .
237 "e.date <= ? ";
238 array_push($sqlArrayBind, $from_date .' 00:00:00', $to_date . ' 23:59:59');
239 if ($form_provider) {
240 $query .= "AND e.provider_id = ? ";
241 array_push($sqlArrayBind, $form_provider);
243 } else {
244 if ($form_provider) {
245 $query .= "JOIN form_encounter AS e ON " .
246 "e.pid = p.pid AND e.provider_id = ? ";
247 array_push($sqlArrayBind, $form_provider);
248 } else {
249 $query .= "LEFT OUTER JOIN form_encounter AS e ON " .
250 "e.pid = p.pid ";
254 $query .=
255 "LEFT OUTER JOIN insurance_data AS i1 ON " .
256 "i1.pid = p.pid AND i1.type = 'primary' " .
257 "LEFT OUTER JOIN insurance_companies AS c1 ON " .
258 "c1.id = i1.provider " .
259 "LEFT OUTER JOIN insurance_data AS i2 ON " .
260 "i2.pid = p.pid AND i2.type = 'secondary' " .
261 "LEFT OUTER JOIN insurance_companies AS c2 ON " .
262 "c2.id = i2.provider " .
263 "GROUP BY p.lname, p.fname, p.mname, p.pid, i1.date, i2.date " .
264 "ORDER BY p.lname, p.fname, p.mname, p.pid, i1.date DESC, i2.date DESC";
265 $res = sqlStatement($query, $sqlArrayBind);
267 $prevpid = 0;
268 while ($row = sqlFetchArray($res)) {
269 if ($row['pid'] == $prevpid) {
270 continue;
273 $prevpid = $row['pid'];
274 $age = '';
275 if ($row['DOB']) {
276 $dob = $row['DOB'];
277 $tdy = $row['edate'] ? $row['edate'] : date('Y-m-d');
278 $ageInMonths = (substr($tdy, 0, 4)*12) + substr($tdy, 5, 2) -
279 (substr($dob, 0, 4)*12) - substr($dob, 5, 2);
280 $dayDiff = substr($tdy, 8, 2) - substr($dob, 8, 2);
281 if ($dayDiff < 0) {
282 --$ageInMonths;
285 $age = intval($ageInMonths/12);
288 if ($_POST['form_csvexport']) {
289 echo '"' . oeFormatShortDate(substr($row['edate'], 0, 10)) . '",';
290 echo '"' . qescape($row['lname']) . '",';
291 echo '"' . qescape($row['fname']) . '",';
292 echo '"' . qescape($row['mname']) . '",';
293 echo '"' . qescape($row['pubpid']) . '",';
294 echo '"' . qescape(xl($row['street'])) . '",';
295 echo '"' . qescape(xl($row['city'])) . '",';
296 echo '"' . qescape(xl($row['state'])) . '",';
297 echo '"' . qescape($row['postal_code']) . '",';
298 echo '"' . qescape($row['phone_home']) . '",';
299 echo '"' . qescape($row['phone_biz']) . '"' . "\n";
300 } else {
302 <tr>
303 <td>
304 <?php echo text(oeFormatShortDate(substr($row['edate'], 0, 10))); ?>
305 </td>
306 <td>
307 <?php echo text($row['lname'] . ', ' . $row['fname'] . ' ' . $row['mname']); ?>
308 </td>
309 <td>
310 <?php echo text($row['pubpid']); ?>
311 </td>
312 <td>
313 <?php echo xlt($row['street']); ?>
314 </td>
315 <td>
316 <?php echo xlt($row['city']); ?>
317 </td>
318 <td>
319 <?php echo xlt($row['state']); ?>
320 </td>
321 <td>
322 <?php echo text($row['postal_code']); ?>
323 </td>
324 <td>
325 <?php echo text($row['phone_home']); ?>
326 </td>
327 <td>
328 <?php echo text($row['phone_biz']); ?>
329 </td>
330 </tr>
331 <?php
332 } // end not export
333 ++$totalpts;
334 } // end while
335 if (!$_POST['form_csvexport']) {
338 <tr class="report_totals">
339 <td colspan='9'>
340 <?php echo xlt('Total Number of Patients'); ?>
342 <?php echo text($totalpts); ?>
343 </td>
344 </tr>
346 </tbody>
347 </table>
348 </div> <!-- end of results -->
349 <?php
350 } // end not export
351 } // end if refresh or export
353 if (!$_POST['form_refresh'] && !$_POST['form_csvexport']) {
355 <div class='text'>
356 <?php echo xlt('Please input search criteria above, and click Submit to view results.'); ?>
357 </div>
358 <?php
361 if (!$_POST['form_csvexport']) {
364 </form>
365 </body>
367 </html>
368 <?php
369 } // end not export