Remove time limit from the clinical reminder script
[openemr.git] / interface / patient_file / reminder / patient_reminders.php
bloba57496294811c25d5d7b2c0b1cbebe15820853ec
1 <?php
2 // Copyright (C) 2011 by following authors:
3 // -Brady Miller <brady@sparmy.com>
4 // -Ensofttek, LLC
5 //
6 // This program is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU General Public License
8 // as published by the Free Software Foundation; either version 2
9 // of the License, or (at your option) any later version.
11 //SANITIZE ALL ESCAPES
12 $sanitize_all_escapes=true;
14 //STOP FAKE REGISTER GLOBALS
15 $fake_register_globals=false;
17 require_once("../../globals.php");
18 require_once("$srcdir/options.inc.php");
19 require_once("$srcdir/formdata.inc.php");
20 require_once("$srcdir/reminders.php");
21 require_once("$srcdir/clinical_rules.php");
23 //Remove time limit, since script can take many minutes
24 set_time_limit(0);
27 <html>
28 <head>
29 <?php html_header_show();?>
30 <link rel="stylesheet" href="<?php echo $css_header;?>" type="text/css">
32 <style type="text/css">@import url(../../../library/dynarch_calendar.css);</style>
33 <script type="text/javascript" src="../../../library/dialog.js"></script>
34 <script type="text/javascript" src="../../../library/textformat.js"></script>
35 <script type="text/javascript" src="../../../library/dynarch_calendar.js"></script>
36 <?php include_once("{$GLOBALS['srcdir']}/dynarch_calendar_en.inc.php"); ?>
37 <script type="text/javascript" src="../../../library/dynarch_calendar_setup.js"></script>
38 <script type="text/javascript" src="../../../library/js/common.js"></script>
39 <script type="text/javascript" src="../../../library/js/fancybox/jquery.fancybox-1.2.6.js"></script>
40 <link rel="stylesheet" type="text/css" href="../../../library/js/fancybox/jquery.fancybox-1.2.6.css" media="screen" />
41 <script type="text/javascript" src="../../../library/js/jquery.1.3.2.js"></script>
43 <script LANGUAGE="JavaScript">
44 var mypcc = '<?php echo $GLOBALS['phone_country_code'] ?>';
45 </script>
47 </head>
49 <?php
50 $patient_id = ($_GET['patient_id']) ? $_GET['patient_id'] : "";
51 $mode = ($_GET['mode']) ? $_GET['mode'] : "simple";
52 $sortby = $_GET['sortby'];
53 $sortorder = $_GET['sortorder'];
54 $begin = $_GET['begin'];
56 // Update the reminders and show debugging data
57 $update_rem_log = update_reminders('', $patient_id);
59 if ($mode == "simple") {
60 // Collect the rules for the per patient rules selection tab
61 $rules_default = resolve_rules_sql('','0',TRUE);
66 <script language="javascript">
67 // This is for callback by the find-patient popup.
68 function setpatient(pid, lname, fname, dob) {
69 var f = document.forms[0];
70 f.form_patient.value = lname + ', ' + fname;
71 f.patient_id.value = pid;
74 // This invokes the find-patient popup.
75 function sel_patient() {
76 dlgopen('../../main/calendar/find_patient_popup.php', '_blank', 500, 400);
78 </script>
80 <body class='body_top'>
81 <div>
82 <span class='title'><?php echo htmlspecialchars( xl('Patient Reminders'), ENT_NOQUOTES); ?></span>
83 </div>
84 <?php if ($mode == "simple") { ?>
85 <div style='float:left;margin-right:10px'>
86 <?php echo htmlspecialchars( xl('for'), ENT_NOQUOTES);?>&nbsp;
87 <span class="title">
88 <a href="../summary/demographics.php" onclick="top.restoreSession()"><?php echo htmlspecialchars( getPatientName($pid), ENT_NOQUOTES); ?></a>
89 </span>
90 </div>
91 <div>
92 <a href="../summary/demographics.php" <?php if (!$GLOBALS['concurrent_layout']) echo "target='Main'"; ?> class="css_button" onclick="top.restoreSession()">
93 <span><?php echo htmlspecialchars( xl('Back To Patient'), ENT_NOQUOTES);?></span>
94 </a>
95 </div>
96 <?php } ?>
97 <div>
98 &nbsp;
99 </div>
101 <?php
102 // This is for sorting the records.
103 $sort = array("category, item", "lname, fname", "due_status", "date_created", "hipaa_allowemail", "hipaa_allowsms", "date_sent", "voice_status", "email_status", "sms_status", "mail_status");
104 if($sortby == "") {
105 $sortby = $sort[0];
107 if($sortorder == "") {
108 $sortorder = "asc";
110 for($i = 0; $i < count($sort); $i++) {
111 $sortlink[$i] = "<a href=\"patient_reminders.php?patient_id=$patient_id&mode=$mode&sortby=$sort[$i]&sortorder=asc\" onclick=\"top.restoreSession()\">" .
112 "<img src=\"../../../images/sortdown.gif\" border=0 alt=\"".htmlspecialchars(xl('Sort Up'), ENT_QUOTES)."\"></a>";
114 for($i = 0; $i < count($sort); $i++) {
115 if($sortby == $sort[$i]) {
116 switch($sortorder) {
117 case "asc" : $sortlink[$i] = "<a href=\"patient_reminders.php?patient_id=$patient_id&mode=$mode&sortby=$sortby&sortorder=desc\" onclick=\"top.restoreSession()\">" .
118 "<img src=\"../../../images/sortup.gif\" border=0 alt=\"".htmlspecialchars(xl('Sort Up'), ENT_QUOTES)."\"></a>";
119 break;
120 case "desc" : $sortlink[$i] = "<a href=\"patient_reminders.php?patient_id=$patient_id&mode=$mode&sortby=$sortby&sortorder=asc\" onclick=\"top.restoreSession()\">" .
121 "<img src=\"../../../images/sortdown.gif\" border=0 alt=\"".htmlspecialchars(xl('Sort Down'), ENT_QUOTES)."\"></a>";
122 break;
123 } break;
126 // This is for managing page numbering and display beneath the Patient Reminders table.
127 $listnumber = 25;
128 $sqlBindArray = array();
129 if (!empty($patient_id)) {
130 $add_sql = "AND a.pid=? ";
131 array_push($sqlBindArray,$patient_id);
133 $sql = "SELECT a.id, a.due_status, a.category, a.item, a.date_created, a.date_sent, b.fname, b.lname " .
134 "FROM `patient_reminders` as a, `patient_data` as b " .
135 "WHERE a.active='1' AND a.pid=b.pid ".$add_sql;
136 $result = sqlStatement($sql, $sqlBindArray);
137 if(sqlNumRows($result) != 0) {
138 $total = sqlNumRows($result);
140 else {
141 $total = 0;
143 if($begin == "" or $begin == 0) {
144 $begin = 0;
146 $prev = $begin - $listnumber;
147 $next = $begin + $listnumber;
148 $start = $begin + 1;
149 $end = $listnumber + $start - 1;
150 if($end >= $total) {
151 $end = $total;
153 if($end < $start) {
154 $start = 0;
156 if($prev >= 0) {
157 $prevlink = "<a href=\"patient_reminders.php?patient_id=$patient_id&mode=$mode&sortby=$sortby&sortorder=$sortorder&begin=$prev\" onclick=\"top.restoreSession()\"><<</a>";
159 else {
160 $prevlink = "<<";
163 if($next < $total) {
164 $nextlink = "<a href=\"patient_reminders.php?patient_id=$patient_id&mode=$mode&sortby=$sortby&sortorder=$sortorder&begin=$next\" onclick=\"top.restoreSession()\">>></a>";
166 else {
167 $nextlink = ">>";
172 <br>
173 <br>
175 <?php if ($mode == "simple") { // show the per patient rule setting option ?>
176 <ul class="tabNav">
177 <li class='current'><a href='/play/javascript-tabbed-navigation/'><?php echo htmlspecialchars( xl('Main'), ENT_NOQUOTES); ?></a></li>
178 <li ><a href='/play/javascript-tabbed-navigation/' onclick='top.restoreSession()'><?php echo htmlspecialchars( xl('Rules'), ENT_NOQUOTES); ?></a></li>
179 </ul>
180 <div class="tabContainer">
181 <div class="tab current" style="height:auto;width:97%;">
182 <?php } ?>
184 <div id='report_parameters'>
185 <table>
186 <tr>
187 <td width='410px'>
188 <div style='float:left'>
189 <table class='text'>
190 <tr>
191 <td class='label'>
192 <?php echo " "; ?>
193 </td>
194 </tr>
195 </table>
196 </div>
197 </td>
198 <td align='left' valign='middle' height="100%">
199 <table style='border-left:1px solid; width:100%; height:100%' >
200 <tr>
201 <td>
202 <div style='margin-left:15px'>
203 <?php if ($mode == "admin") { ?>
204 <a href='#' class='css_button' onclick='return ReminderBatch()'>
205 <span><?php echo htmlspecialchars( xl('Send Reminders Batch'), ENT_NOQUOTES); ?></span>
206 </a>
207 <?php } ?>
208 <a href='patient_reminders.php?patient_id=<?php echo $patient_id; ?>&mode=<?php echo $mode; ?>' class='css_button' onclick='top.restoreSession()'>
209 <span><?php echo htmlspecialchars( xl('Refresh'), ENT_NOQUOTES); ?></span>
210 </a>
211 </div>
212 </td>
213 <td align=right class='text'><?php echo $prevlink." ".$end." of ".$total." ".$nextlink; ?></td>
214 </tr>
215 </table>
216 </td>
217 </tr>
218 </table>
219 </div>
221 <div id='report_results'>
222 <table>
223 <thead>
224 <th><?php echo htmlspecialchars( xl('Item'), ENT_NOQUOTES) . " " . $sortlink[0]; ?></th>
225 <th><?php echo htmlspecialchars( xl('Patient'), ENT_NOQUOTES) . " " . $sortlink[1]; ?></th>
226 <th><?php echo htmlspecialchars( xl('Due Status'), ENT_NOQUOTES) . " " . $sortlink[2]; ?></th>
227 <th><?php echo htmlspecialchars( xl('Date Created'), ENT_NOQUOTES) . " " . $sortlink[3]; ?></th>
228 <th><?php echo htmlspecialchars( xl('Email Auth'), ENT_NOQUOTES) . " " . $sortlink[4]; ?></th>
229 <th><?php echo htmlspecialchars( xl('SMS Auth'), ENT_NOQUOTES) . " " . $sortlink[5]; ?></th>
230 <th><?php echo htmlspecialchars( xl('Date Sent'), ENT_NOQUOTES) . " " . $sortlink[6]; ?></th>
231 <th><?php echo htmlspecialchars( xl('Voice Sent'), ENT_NOQUOTES) . " " . $sortlink[7]; ?></th>
232 <th><?php echo htmlspecialchars( xl('Email Sent'), ENT_NOQUOTES) . " " . $sortlink[8]; ?></th>
233 <th><?php echo htmlspecialchars( xl('SMS Sent'), ENT_NOQUOTES) . " " . $sortlink[9]; ?></th>
234 <th><?php echo htmlspecialchars( xl('Mail Sent'), ENT_NOQUOTES) . " " . $sortlink[10]; ?></th>
235 </thead>
236 <tbody>
237 <?php
238 $sql = "SELECT a.id, a.due_status, a.category, a.item, a.date_created, a.date_sent, a.voice_status, " .
239 "a.sms_status, a.email_status, a.mail_status, b.fname, b.lname, b.hipaa_allowemail, b.hipaa_allowsms " .
240 "FROM `patient_reminders` as a, `patient_data` as b " .
241 "WHERE a.active='1' AND a.pid=b.pid " . $add_sql .
242 "ORDER BY " . add_escape_custom($sortby) . " " .
243 add_escape_custom($sortorder) . " " .
244 "LIMIT " . add_escape_custom($begin) . ", " .
245 add_escape_custom($listnumber);
246 $result = sqlStatement($sql,$sqlBindArray);
247 while ($myrow = sqlFetchArray($result)) { ?>
248 <tr>
249 <td><?php echo generate_display_field(array('data_type'=>'1','list_id'=>'rule_action_category'),$myrow['category']) . " : " .
250 generate_display_field(array('data_type'=>'1','list_id'=>'rule_action'),$myrow['item']); ?></td>
251 <td><?php echo htmlspecialchars($myrow['lname'].", ".$myrow['fname'], ENT_NOQUOTES); ?></td>
252 <td><?php echo generate_display_field(array('data_type'=>'1','list_id'=>'rule_reminder_due_opt'),$myrow['due_status']); ?></td>
253 <td><?php echo ($myrow['date_created']) ? htmlspecialchars($myrow['date_created'], ENT_NOQUOTES) : " "; ?></td>
254 <td><?php echo ($myrow['hipaa_allowemail']=='YES') ? htmlspecialchars( xl("YES"), ENT_NOQUOTES) : htmlspecialchars( xl("NO"), ENT_NOQUOTES); ?></td>
255 <td><?php echo ($myrow['hipaa_allowsms']=='YES') ? htmlspecialchars( xl("YES"), ENT_NOQUOTES) : htmlspecialchars( xl("NO"), ENT_NOQUOTES); ?></td>
256 <td><?php echo ($myrow['date_sent']) ? htmlspecialchars($myrow['date_sent'], ENT_NOQUOTES) : htmlspecialchars( xl("Not Sent Yet") , ENT_NOQUOTES); ?></td>
257 <td><?php echo ($myrow['voice_status']==1) ? htmlspecialchars( xl("YES"), ENT_NOQUOTES) : htmlspecialchars( xl("NO"), ENT_NOQUOTES); ?></td>
258 <td><?php echo ($myrow['email_status']==1) ? htmlspecialchars( xl("YES"), ENT_NOQUOTES) : htmlspecialchars( xl("NO"), ENT_NOQUOTES); ?></td>
259 <td><?php echo ($myrow['sms_status']==1) ? htmlspecialchars( xl("YES"), ENT_NOQUOTES) : htmlspecialchars( xl("NO"), ENT_NOQUOTES); ?></td>
260 <td><?php echo ($myrow['mail_status']==1) ? htmlspecialchars( xl("YES"), ENT_NOQUOTES) : htmlspecialchars( xl("NO"), ENT_NOQUOTES); ?></td>
261 </tr>
262 <?php } ?>
263 </tbody>
264 </table>
265 </div>
267 <?php if ($mode == "simple") { // show the per patient rule setting option ?>
268 </div>
269 <div class="tab" style="height:auto;width:97%;">
270 <div id='report_results'>
271 <table>
272 <tr>
273 <th rowspan="2"><?php echo htmlspecialchars( xl('Rule'), ENT_NOQUOTES); ?></th>
274 <th colspan="2"><?php echo htmlspecialchars( xl('Patient Reminder'), ENT_NOQUOTES); ?></th>
275 </tr>
276 <tr>
277 <th><?php echo htmlspecialchars( xl('Patient Setting'), ENT_NOQUOTES); ?></th>
278 <th style="left-margin:1em;"><?php echo htmlspecialchars( xl('Practice Default Setting'), ENT_NOQUOTES); ?></th>
279 </tr>
280 <?php foreach ($rules_default as $rule) { ?>
281 <tr>
282 <td style="border-right:1px solid black;"><?php echo generate_display_field(array('data_type'=>'1','list_id'=>'clinical_rules'), $rule['id']); ?></td>
283 <td align="center">
284 <?php
285 $patient_rule = collect_rule($rule['id'],$patient_id);
286 // Set the patient specific setting for gui
287 if (empty($patient_rule)) {
288 $select = "default";
290 else {
291 if ($patient_rule['patient_reminder_flag'] == "1") {
292 $select = "on";
294 else if ($patient_rule['patient_reminder_flag'] == "0"){
295 $select = "off";
297 else { // $patient_rule['patient_reminder_flag'] == NULL
298 $select = "default";
300 } ?>
301 <select class="patient_reminder" name="<?php echo htmlspecialchars( $rule['id'], ENT_NOQUOTES); ?>">
302 <option value="default" <?php if ($select == "default") echo "selected"; ?>><?php echo htmlspecialchars( xl('Default'), ENT_NOQUOTES); ?></option>
303 <option value="on" <?php if ($select == "on") echo "selected"; ?>><?php echo htmlspecialchars( xl('On'), ENT_NOQUOTES); ?></option>
304 <option value="off" <?php if ($select == "off") echo "selected"; ?>><?php echo htmlspecialchars( xl('Off'), ENT_NOQUOTES); ?></option>
305 </select>
306 </td>
307 <td align="center" style="border-right:1px solid black;">
308 <?php if ($rule['patient_reminder_flag'] == "1") {
309 echo htmlspecialchars( xl('On'), ENT_NOQUOTES);
311 else {
312 echo htmlspecialchars( xl('Off'), ENT_NOQUOTES);
313 } ?>
314 </td>
315 </tr>
316 <?php } ?>
317 </table>
318 </div>
319 </div>
320 </div>
321 <?php } ?>
323 <script language="javascript">
325 $(document).ready(function(){
327 tabbify();
329 $(".patient_reminder").change(function() {
330 top.restoreSession();
331 $.post( "../../../library/ajax/rule_setting.php", {
332 rule: this.name,
333 type: 'patient_reminder',
334 setting: this.value,
335 patient_id: '<?php echo htmlspecialchars($patient_id, ENT_QUOTES); ?>'
341 // Show a template popup of patient reminders batch sending tool.
342 function ReminderBatch() {
343 top.restoreSession();
344 dlgopen('../../batchcom/batch_reminders.php', '_blank', 600, 500);
345 return false;
347 </script>
348 </body>
349 </html>