You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
242 lines
5.9 KiB
242 lines
5.9 KiB
<?php |
|
|
|
/** |
|
* This file contains functions for handling on-site portal notes attached to patient files. |
|
* |
|
* @package OpenEMR |
|
* @link https://www.open-emr.org |
|
* @author Jerry Padgett <sjpadgett@gmail.com> |
|
* @copyright Copyright (c) 2016-2017 Jerry Padgett <sjpadgett@gmail.com> |
|
* @license https://github.com/openemr/openemr/blob/master/LICENSE GNU General Public License 3 |
|
*/ |
|
|
|
require_once("$srcdir/pnotes.inc"); |
|
|
|
function addPortalMailboxPnote( |
|
$pid, |
|
$newtext, |
|
$authorized = '0', |
|
$activity = '1', |
|
$title = 'Unassigned', |
|
$assigned_to = '', |
|
$datetime = '', |
|
$message_status = "New", |
|
$master_note = '0' |
|
) { |
|
|
|
if (empty($datetime)) { |
|
$datetime = date('Y-m-d H:i:s'); |
|
} |
|
|
|
// make inactive if set as Done |
|
if ($message_status == "Done") { |
|
$activity = 0; |
|
} |
|
|
|
$user = $_SESSION['authUser'] ? $_SESSION['authUser'] : $pid; |
|
$pname = $_SESSION['ptName'] ? $_SESSION['ptName'] : $user; |
|
|
|
/* $body = " ($pname"; |
|
if ($assigned_to) $body .= " to $assigned_to"; |
|
$body = $body . ') ' . $newtext; */ |
|
|
|
$body = $newtext; |
|
|
|
return sqlInsert( |
|
"INSERT INTO pnotes (date, body, pid, user, groupname, " . |
|
"authorized, activity, title, assigned_to, message_status, portal_relation) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", |
|
array($datetime, $body, $pid, $user, 'Default', $authorized, $activity, $title, $assigned_to, $message_status,$master_note) |
|
); |
|
} |
|
|
|
function getPortalPatientNotes($pid = '', $limit = '', $offset = 0, $search = '') |
|
{ |
|
if ($limit) { |
|
$limit = "LIMIT " . escape_limit($offset) . ", " . escape_limit($limit); |
|
} |
|
|
|
$sql = " |
|
SELECT |
|
p.id, |
|
p.date, |
|
p.user, |
|
p.title, |
|
REPLACE( |
|
p.body, |
|
'-patient-', |
|
CONCAT(pd.fname, ' ', pd.lname) |
|
) AS body, |
|
p.message_status, |
|
'Message' as `type`, |
|
p.portal_relation |
|
FROM |
|
pnotes AS p |
|
LEFT JOIN patient_data AS pd |
|
ON pd.pid = p.pid |
|
WHERE assigned_to = '-patient-' |
|
AND p.deleted != 1 |
|
AND p.pid = ? |
|
$search |
|
ORDER BY `date` desc |
|
$limit |
|
"; |
|
$res = sqlStatement($sql, array($pid)); |
|
for ($iter = 0; $row = sqlFetchArray($res); $iter++) { |
|
$all[$iter] = $row; |
|
} |
|
|
|
return $all; |
|
} |
|
|
|
function getPortalPatientNotifications($pid = '', $limit = '', $offset = 0, $search = '') |
|
{ |
|
if ($limit) { |
|
$limit = "LIMIT " . escape_limit($offset) . ", " . escape_limit($limit); |
|
} |
|
|
|
$sql = " |
|
SELECT |
|
pr.id, |
|
date_created AS `date`, |
|
'Patient Reminders' AS `user`, |
|
due_status AS title, |
|
CONCAT(lo.title, ':', lo2.title) AS body, |
|
'' as message_status, |
|
'Notification' as `type` |
|
FROM |
|
patient_reminders AS pr |
|
LEFT JOIN list_options AS lo |
|
ON lo.option_id = pr.category |
|
AND lo.list_id = 'rule_action_category' |
|
LEFT JOIN list_options AS lo2 |
|
ON lo2.option_id = pr.item |
|
AND lo2.list_id = 'rule_action' |
|
WHERE pid = ? |
|
AND active = 1 |
|
AND date_created > DATE_SUB(NOW(), INTERVAL 1 MONTH) |
|
$search |
|
ORDER BY `date` desc |
|
$limit |
|
"; |
|
$res = sqlStatement($sql, array($pid)); |
|
for ($iter = 0; $row = sqlFetchArray($res); $iter++) { |
|
$all[$iter] = $row; |
|
} |
|
|
|
return $all; |
|
} |
|
|
|
function getPortalPatientSentNotes($pid = '', $limit = '', $offset = 0, $search = '') |
|
{ |
|
if ($limit) { |
|
$limit = "LIMIT " . escape_limit($offset) . ", " . escape_limit($limit); |
|
} |
|
|
|
$sql = " |
|
SELECT |
|
p.id, |
|
p.date, |
|
p.assigned_to, |
|
p.title, |
|
REPLACE( |
|
p.body, |
|
'-patient-', |
|
CONCAT(pd.fname, ' ', pd.lname) |
|
) AS body, |
|
p.activity, |
|
p.message_status, |
|
'Message' as `type`, |
|
p.portal_relation |
|
FROM |
|
pnotes AS p |
|
LEFT JOIN patient_data AS pd |
|
ON pd.pid = p.pid |
|
WHERE `user` = ? |
|
AND p.deleted != 1 |
|
AND p.pid = ? |
|
AND p.message_status != 'Done' |
|
$search |
|
ORDER BY `date` desc |
|
$limit |
|
"; |
|
$res = sqlStatement($sql, array($pid,$pid)); |
|
for ($iter = 0; $row = sqlFetchArray($res); $iter++) { |
|
$all[$iter] = $row; |
|
} |
|
|
|
return $all; |
|
} |
|
function updatePortalPnoteMessageStatus($id, $message_status) |
|
{ |
|
if ($message_status == "Done") { |
|
sqlStatement("update pnotes set message_status = ?, activity = '0' where id = ?", array($message_status, $id)); |
|
} else { |
|
sqlStatement("update pnotes set message_status = ?, activity = '1' where id = ?", array($message_status, $id)); |
|
} |
|
} |
|
function getMails($pid, $dotype, $nsrch, $nfsrch) |
|
{ |
|
|
|
if ($pid) { |
|
if ($dotype == "inbox") { |
|
if ($nsrch && $nfsrch) { |
|
$result_notes = getPortalPatientNotes($pid, '', '0', $nsrch); |
|
$result_notifications = getPortalPatientNotifications($pid, '', '0', $nfsrch); |
|
$result = array_merge((array)$result_notes, (array)$result_notifications); |
|
} else { |
|
$result_notes = getPortalPatientNotes($pid); |
|
$result_notifications = getPortalPatientNotifications($pid); |
|
$result = array_merge((array)$result_notes, (array)$result_notifications); |
|
} |
|
|
|
return $result; |
|
} elseif ($dotype == "sent") { |
|
if ($nsrch) { |
|
$result_sent_notes = getPortalPatientSentNotes($pid, '', '0', $nsrch); |
|
} else { |
|
$result_sent_notes = getPortalPatientSentNotes($pid); |
|
} |
|
|
|
return $result_sent_notes; |
|
} |
|
} else { |
|
return 'failed'; |
|
} |
|
} |
|
|
|
function getMailDetails($id) |
|
{ |
|
if ($pid) { |
|
$result = getPnoteById($id); |
|
if ($result['assigned_to'] == '-patient-' && $result['message_status'] == 'New') { |
|
updatePortalPnoteMessageStatus($id, 'Read'); |
|
} |
|
|
|
return $result; |
|
} else { |
|
return 'failed'; |
|
} |
|
} |
|
|
|
function sendMail($pid, $note, string $title = null, $to, $noteid) |
|
{ |
|
if (!$title) { |
|
$title = 'Unassigned'; |
|
} |
|
if ($pid) { |
|
addPortalMailboxPnote($pid, $note, '1', '1', $title, $to, '', 'New', $noteid); |
|
return 1; |
|
} else { |
|
return 'failed'; |
|
} |
|
} |
|
|
|
|
|
function updateStatus($id, $status) |
|
{ |
|
if ($pid) { |
|
updatePortalPnoteMessageStatus($id, $status); |
|
} else { |
|
return 'failed'; |
|
} |
|
}
|
|
|