示例#1
0
 public function StatusMapForDate($date)
 {
     freemed::acl_enforce('scheduling', 'read');
     $s = CreateObject('org.freemedsoftware.api.Scheduler');
     $u = freemed::user_cache();
     $q = "CALL patientWorkflowStatusByDate( " . $GLOBALS['sql']->quote($s->ImportDate($date)) . ", " . $GLOBALS['sql']->quote($u->getManageConfig('workflow_status_age') + 0) . " )";
     return $GLOBALS['sql']->queryAllStoredProc($q);
 }
 public function GetBlockedTimeSlots($providerid, $date = null)
 {
     freemed::acl_enforce('scheduling', 'write');
     $providerGroups = CreateObject('org.freemedsoftware.module.ProviderGroups');
     $providerGroupsIds = $providerGroups->getGroupIds($providerid);
     $q = "select sbshour,sbsminute,sbsduration from scheduler_block_slots where sbsprovider=" . $GLOBALS['sql']->quote($providerid) . ($date ? " and sbdate='" . $date . "'" : "");
     foreach ($providerGroupsIds as $ids) {
         $q = $q . " or sbsprovidergroup = " . $ids['id'];
     }
     return $GLOBALS['sql']->queryAll($q);
 }
示例#3
0
 public function GetDetailedRecord($id)
 {
     freemed::acl_enforce('emr', 'read');
     $q = "SELECT cg.id,cg.groupname,cg.grouplength,cg.groupfrequency,cg.groupmembers,cg.groupfacility as facility, CONCAT(f.psrname,' ',f.psrnote,' (',f.psrcity,',',f.psrstate,')') as groupfacility  FROM calgroup cg  left outer join facility f on f.id=cg.groupfacility where cg.id=" . $GLOBALS['sql']->quote($id);
     $groupResult = $GLOBALS['sql']->queryRow($q);
     if ($groupResult) {
         $members = $groupResult['groupmembers'];
         $q2 = "select CONCAT(pa.ptlname, ', ', pa.ptfname, IF(LENGTH(pa.ptmname)>0,CONCAT(' ',pa.ptmname),''), IF(LENGTH(pa.ptsuffix)>0,CONCAT(' ',pa.ptsuffix),''), ' (', pa.ptid, ')') AS patient from patient pa where pa.id in (" . $members . ")";
         $membersResult = $GLOBALS['sql']->queryAll($q2);
         $allMembers = "";
         foreach ($membersResult as $mem) {
             $allMembers = $allMembers . $mem['patient'] . "\n";
         }
         $groupResult['groupmembersName'] = $allMembers;
     }
     return $groupResult;
 }
示例#4
0
 public function ListTags($criteria)
 {
     freemed::acl_enforce('emr', 'read');
     if (strlen($criteria) < 3) {
         return array();
     }
     $query = "SELECT DISTINCT(tag) AS tag FROM " . $this->table_name . " WHERE tag LIKE '%" . $GLOBALS['sql']->escape($criteria) . "%' AND ( dateexpire = 0 OR dateexpire > NOW() ) ORDER BY tag LIMIT 20";
     $result = $GLOBALS['sql']->queryCol($query);
     $found = false;
     foreach ($result as $entry) {
         if (strtolower($entry) == strtolower($criteria)) {
             $found = true;
         }
         $return[$entry] = $entry;
     }
     if (!$found) {
         $return[$criteria] = $criteria;
     }
     return $return;
 }
示例#5
0
 protected function GenerateReport_Jasper($param, $format, $query, $params = NULL, $send_to_printer = null)
 {
     //return $params;
     freemed::acl_enforce('reporting', 'write');
     //Checking for default printer if send_to_print is true
     if ($send_to_printer) {
         $defaultPrinter = freemed::user_cache()->getManageConfig('defaultPrinter');
         if (!$defaultPrinter) {
             return "DPNS";
         }
         //Default printer not set
         $printing = CreateObject('org.freemedsoftware.api.Printing');
         $printerAvailable = $printing->PrinterAvailable($defaultPrinter);
         if (!$printerAvailable) {
             return "PNA";
         }
         //Printer not available
     }
     switch ($format) {
         case 'html':
             $outformat = 'HTML';
             $ext = 'html';
             break;
         case 'xml':
             $outformat = 'XML';
             $ext = 'xml';
             break;
         case 'pdf':
             $outformat = 'PDF';
             $ext = 'pdf';
             break;
         case 'xls':
             $outformat = 'XLS';
             $ext = 'xls';
             break;
         default:
             $outformat = 'PDF';
             $ext = 'pdf';
             break;
     }
     // end switch format
     // Create connection string
     $jdbc_url = "jdbc:mysql://" . DB_HOST . ":3306/" . DB_NAME;
     // Prepare parameters
     $parameters = "";
     if ($params != NULL && count($params) > 0) {
         foreach ($params as $k => $p) {
             $parameters .= " --param=" . $p;
             switch ($param['params'][$k]['type']) {
                 case 'Date':
                     $parameters .= " --paramformat=date";
                     break;
                 case 'Facility':
                 case 'User':
                 case 'BottleID':
                 case 'TestStatus':
                 case 'MessageID':
                 case 'EMRModule':
                 case 'SupportModule':
                     $parameters .= " --paramformat=int";
                     break;
                 case 'Integer':
                 case 'int':
                     $parameters .= " --paramformat=int";
                     break;
                 default:
                     $parameters .= " --paramformat=string";
                     break;
             }
         }
     }
     $reportprefix = $param['report_formatting'] . "." . mktime();
     // Wrap and generate
     $cmd = "java -jar " . PHYSICAL_LOCATION . "/scripts/jasper/JasperWrapper.jar --dburl=" . escapeshellarg($jdbc_url) . " --dbuser="******" --dbpass="******" --ipath=" . escapeshellarg(PHYSICAL_LOCATION . '/data/report/') . " --opath=" . escapeshellarg(PHYSICAL_LOCATION . '/data/cache/') . " --oprefix=" . escapeshellarg($reportprefix) . " --format=" . escapeshellarg($outformat) . " --report=" . escapeshellarg($param['report_formatting'] . ".jrxml") . " " . $parameters;
     syslog(LOG_INFO, "Jasper cmd = {$cmd}");
     // Execute actual report generation
     `{$cmd} 2>&1 | logger -t JasperWrapper`;
     $output_file = PHYSICAL_LOCATION . "/data/cache/" . $reportprefix . "." . $ext;
     //If send_to_printer then send print command and returns
     if ($send_to_printer) {
         $printer = CreateObject('org.freemedsoftware.core.PrinterWrapper');
         $printer->driver->PrintFile($defaultPrinter, $output_file);
         unlink($output_file);
         return "PRINTED";
     }
     switch ($format) {
         case 'xls':
             Header('Content-type: application/x-ms-excel');
             break;
         case 'html':
             Header('Content-type: text/html');
             break;
         case 'xml':
             Header('Content-type: text/xml');
             break;
         case 'pdf':
         default:
             Header('Content-type: application/pdf');
             break;
     }
     Header("Content-Transfer-Encoding:­binary");
     Header("Content-Disposition: inline; filename=\"" . $param['report_formatting'] . ".{$ext}\"");
     Header("Cache-Control: no-cache, must-revalidate");
     // HTTP/1.1
     Header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
     // Date in the past
     readfile($output_file);
     @unlink($output_file);
     @unlink($output_file . '_files');
     die;
 }
示例#6
0
 public function picklist($string, $_limit = 10, $inputlimit = 2)
 {
     freemed::acl_enforce('emr', 'read');
     $limit = $_limit < 10 ? 10 : $_limit;
     if (strlen($string) < $inputlimit) {
         syslog(LOG_INFO, "under {$inputlimit}");
         return false;
     }
     $criteria = addslashes($string);
     if (!(strpos($criteria, ',') === false)) {
         list($last, $first) = explode(',', $criteria);
     } else {
         if (!(strpos($criteria, ' ') === false)) {
             list($first, $last) = explode(' ', $criteria);
         } else {
             $either = $criteria;
         }
     }
     $last = trim($last);
     $first = trim($first);
     $either = trim($either);
     if ($first and $last) {
         $q[] = "ptfname LIKE '" . addslashes($either) . "%'";
         $q[] = "ptlname LIKE '" . addslashes($either) . "%'";
         $q[] = "( ptlname LIKE '" . addslashes($last) . "%' AND " . " ptfname LIKE '" . addslashes($first) . "%' )";
     } elseif ($first) {
         $q[] = "ptfname LIKE '" . addslashes($either) . "%'";
         $q[] = "ptlname LIKE '" . addslashes($either) . "%'";
         $q[] = "ptfname LIKE '" . addslashes($first) . "%'";
         $q[] = "ptid LIKE '%" . addslashes($first) . "%'";
     } elseif ($last) {
         $q[] = "ptfname LIKE '" . addslashes($either) . "%'";
         $q[] = "ptlname LIKE '" . addslashes($either) . "%'";
         $q[] = "ptlname LIKE '" . addslashes($last) . "%'";
         $q[] = "ptid LIKE '%" . addslashes($last) . "%'";
     } else {
         $q[] = "ptfname LIKE '" . addslashes($either) . "%'";
         $q[] = "ptlname LIKE '" . addslashes($either) . "%'";
         $q[] = "ptid LIKE '%" . addslashes($either) . "%'";
     }
     $query = "SELECT * FROM patient WHERE ( " . join(' OR ', $q) . " ) " . "AND ( ISNULL(ptarchive) OR ptarchive=0 ) LIMIT {$limit}";
     syslog(LOG_INFO, "PICK| {$query}");
     $result = $GLOBALS['sql']->queryAll($query);
     if (count($result) < 1) {
         return array();
     }
     $count = 0;
     foreach ($result as $r) {
         $_obj = CreateObject('org.freemedsoftware.core.Patient', $r);
         $return[(int) $r['id']] = trim(stripslashes($_obj->to_text()));
     }
     syslog(LOG_INFO, "picklist| found " . count($return) . " results returned");
     return $return;
 }
示例#7
0
 public function ExecuteTool($uuid, $param)
 {
     freemed::acl_enforce('admin', 'write');
     $tool = $this->GetToolParameters($uuid, false);
     // Sanity checking
     if (!$tool['tool_name']) {
         return false;
     }
     $s = CreateObject('org.freemedsoftware.api.Scheduler');
     foreach ($tool['params'] as $k => $v) {
         if (!$v['optional'] and !$param[$k]) {
             syslog(LOG_INFO, get_class($this) . "| parameter {$k} failed for tool {$uuid}");
             return false;
         }
         switch ($v['type']) {
             case 'Date':
                 $pass[] = $GLOBALS['sql']->quote($s->ImportDate($param[$k]));
                 break;
             default:
                 $pass[] = $GLOBALS['sql']->quote($param[$k]);
                 break;
         }
     }
     // Form query
     $query = "CALL " . $tool['tool_sp'] . " ( " . @join(', ', $pass) . " ); ";
     //print_r($result); die();
     $result = $GLOBALS['sql']->queryAllStoredProc($query);
     return $result;
 }
示例#8
0
 public function GetAll()
 {
     freemed::acl_enforce('emr', 'read');
     $query = "select a.stamp as stamp, c.username as user, \n          concat(b.ptlname, ' ', b.ptmname, ' ', b.ptfname) as patient, \n          a.provider, a.rxorig as rxorig, a.note as note,a.approved as approved, \n          a.locked as locked, a.id as id \n          from " . $this->table_name . " as a, \n          patient as b, \n          user as c \n          where a.patient = b.id and c.id = a.user ORDER BY stamp DESC";
     return $GLOBALS['sql']->queryAll($query);
 }
示例#9
0
 public function GetDetailedRecordWithIntake($id)
 {
     freemed::acl_enforce('emr', 'read');
     $id = $GLOBALS['sql']->quote($id);
     $q = "select * FROM callin c where c.id=" . $id . " AND " . $this->archive_check;
     $return = $GLOBALS['sql']->queryRow($q);
     $q = "select tii.id as treatment_id,tii.* from treatment_initial_intake tii where tii.intaketype = 'callin' and tii.patient = " . $id;
     $r = $GLOBALS['sql']->queryRow($q);
     //return $r;
     if ($r) {
         $return = array_merge($r, $return);
     }
     return $return;
 }
示例#10
0
 public function AgingReportQualified($criteria)
 {
     freemed::acl_enforce('financial', 'read');
     $s = CreateObject('org.freemedsoftware.api.Scheduler');
     foreach ($criteria as $k => $v) {
         //print "criteria key = $k, value = $v<hr/>\n";
         switch ($k) {
             case 'aging':
                 switch ($v) {
                     case '0-30':
                     case '31-60':
                     case '61-90':
                     case '91-120':
                         list($lower, $upper) = explode('-', $v);
                         break;
                     case '120+':
                         $lower = '120';
                         $upper = '10000';
                         break;
                 }
                 // end inner aging switch
                 if ($upper) {
                     $q[] = "(TO_DAYS(NOW()) - TO_DAYS(pa.payrecdt) >= " . addslashes($lower) . ") AND " . "(TO_DAYS(NOW()) - TO_DAYS(pa.payrecdt) <= " . addslashes($upper) . ")";
                 }
                 break;
                 // end aging case
             // end aging case
             case 'billed':
                 if ($v == '0' or $v == '1') {
                     $q[] = "p.procbilled = '" . addslashes($v) . "'";
                 }
                 break;
                 // end billed case
             // end billed case
             case 'date':
                 if ($v) {
                     $q[] = "pa.payrecdt = '" . addslashes($s->ImportDate($v)) . "'";
                 }
                 break;
                 // end date
             // end date
             case 'date_of':
                 if ($v) {
                     $q[] = "p.procdt = '" . addslashes($s->ImportDate($v)) . "'";
                 }
                 break;
                 // end procedure date
             // end procedure date
             case 'procedure':
                 if ($v) {
                     $q[] = "p.id = '" . addslashes($v) . "'";
                 }
                 break;
                 // end procedure case
             // end procedure case
             case 'provider':
                 if ($v) {
                     $q[] = "pr.id = '" . addslashes($v) . "'";
                 }
                 break;
                 // end provider case
             // end provider case
             case 'facility':
                 if ($v) {
                     $q[] = "p.procpos = '" . addslashes($v) . "'";
                 }
                 break;
                 // end facility case
             // end facility case
             case 'patient':
                 if ($v) {
                     $q[] = "pt.id = '" . addslashes($v) . "'";
                 }
                 break;
                 // end patient case
             // end patient case
             case 'first_name':
                 if ($v) {
                     $q[] = "pt.ptfname LIKE '%" . addslashes($v) . "%'";
                 }
                 break;
                 // end first name
             // end first name
             case 'last_name':
                 if ($v) {
                     $q[] = "pt.ptlname LIKE '%" . addslashes($v) . "%'";
                 }
                 break;
                 // end last name
             // end last name
             case 'type':
                 if ($v) {
                     $q[] = "pa.payreccat = '" . addslashes($v) . "'";
                 }
                 break;
             case 'date_from':
                 if ($v) {
                     $q[] = "pa.payrecdtadd >= '" . addslashes($v) . "'";
                 }
                 break;
             case 'date_to':
                 if ($v) {
                     $q[] = "pa.payrecdtadd <= '" . addslashes($v) . "'";
                 }
                 break;
             case 'tag':
                 $tag_object = CreateObject('org.freemedsoftware.module.PatientTag');
                 $obj = $tag_object->SimpleTagSearch($v);
                 for ($i = 0; $i < count($obj); $i++) {
                     $patient_ids[] = "p.procpatient = '" . $obj[$i]['patient_record'] . "'";
                 }
                 $condition = join(' OR ', $patient_ids);
                 if ($condition != "") {
                     $condition = '(' . $condition . ')';
                 }
                 $q[] = $condition;
                 break;
         }
         // end outer criteria type switch
     }
     // end criteria foreach loop
     //print "debug: criteria = ".join(' AND ', $q)." <br/>\n";
     $query = "SELECT " . "CONCAT(pt.ptlname, ', ', pt.ptfname, ' ', pt.ptmname) AS patient, " . "pt.id AS patient_id, " . "CONCAT(pr.phyfname, ' ', pr.phylname) AS provider, " . "pr.id AS provider_id, " . "ROUND(p.procamtpaid, 2) AS total_amount_paid, " . "ROUND(p.procbalcurrent, 2) AS total_balance, " . "ROUND(IF(FIND_IN_SET(pa.payreccat, '0,1,7,8,11'), pa.payrecamt, 0), 2) AS money_in, " . "ROUND(IF(FIND_IN_SET(pa.payreccat, '0,1,7,8,11'), 0, pa.payrecamt), 2) AS money_out, " . "p.id AS procedure_id, " . "p.procdt AS date_of, " . "DATE_FORMAT(p.procdt, '%m/%d/%Y') AS date_of_mdy, " . "pa.payrecdtadd AS payment_date, " . "DATE_FORMAT(pa.payrecdt, '%m/%d/%Y') AS payment_date_mdy, " . "pa.payreccat AS item_type_id, " . "CASE pa.payreccat " . "WHEN 0 THEN '" . addslashes(__("Payment")) . "' " . "WHEN 1 THEN '" . addslashes(__("Adjustment")) . "' " . "WHEN 2 THEN '" . addslashes(__("Refund")) . "' " . "WHEN 3 THEN '" . addslashes(__("Denial")) . "' " . "WHEN 4 THEN '" . addslashes(__("Rebill")) . "' " . "WHEN 5 THEN '" . addslashes(__("Charge")) . "' " . "WHEN 6 THEN '" . addslashes(__("Transfer")) . "' " . "WHEN 7 THEN '" . addslashes(__("Withholding")) . "' " . "WHEN 8 THEN '" . addslashes(__("Deductable")) . "' " . "WHEN 9 THEN '" . addslashes(__("Fee Adjustment")) . "' " . "WHEN 10 THEN '" . addslashes(__("Billed")) . "' " . "WHEN 11 THEN '" . addslashes(__("Copayment")) . "' " . "WHEN 12 THEN '" . addslashes(__("Writeoff")) . "' " . "ELSE '" . __("Unknown") . "' END AS item_type, " . "pa.id AS item " . "FROM procrec p " . "LEFT OUTER JOIN payrec pa ON pa.payrecproc=p.id " . "LEFT OUTER JOIN patient pt ON pt.id=p.procpatient " . "LEFT OUTER JOIN physician pr ON pr.id=p.procphysician " . "WHERE " . (is_array($q) ? join(' AND ', $q) : ' ( 1 > 0 ) ') . " " . "ORDER BY date_of DESC, item";
     //print "<hr/>query = \"$query\"<hr/>\n";
     $result = $GLOBALS['sql']->queryAll($query);
     $return = array();
     foreach ($result as $r) {
         // Make sure to deserialize the id map, since
         // we can't actually extract values from it using
         // SQL regex's, or if we could, it would be a
         // huge waste of processor time...
         if (is_array(@unserialize($r['id_map']))) {
             $id_map = unserialize($r['id_map']);
             $r['id_map'] = $id_map[$r['_provider']];
         } else {
             $id_map = array();
         }
         $return[] = $r;
         // patient, claims, paid, balance, ratio
     }
     return $return;
 }
示例#11
0
 public function SetValues($hash)
 {
     freemed::acl_enforce('admin', 'write');
     if (!is_object($hash) && !is_array($hash)) {
         return false;
     }
     $h = (array) $hash;
     foreach ($h as $k => $v) {
         $q = "UPDATE config SET c_value=" . $GLOBALS['sql']->quote($v) . " WHERE c_option=" . $GLOBALS['sql']->quote($k);
         $GLOBALS['sql']->query($q);
     }
     return true;
 }
示例#12
0
 public function ImportTables($tables)
 {
     freemed::acl_enforce('admin', 'write');
     foreach ($tables['exporttables'] as $v) {
         //$created = $this->ImportStockData($v);
         if (!$created) {
             return false;
         }
     }
     return true;
 }
示例#13
0
 public function GetAll()
 {
     freemed::acl_enforce('emr', 'read');
     $q = "SELECT *, CONCAT(lastname, ' ', lastname2) AS fulllastname FROM " . $this->table_name . " WHERE processed = FALSE ORDER BY dateof DESC";
     return $GLOBALS['sql']->queryAll($q);
 }
示例#14
0
 public function SetAppointment($data = NULL)
 {
     freemed::acl_enforce('scheduling', 'write');
     // Check for bogus data
     if ($data == NULL) {
         return false;
     }
     $ourdata = (array) $data;
     // Set defaults
     $fields = array('caltype' => 'pat', 'calstatus' => 'scheduled');
     // Only pass fields that are set as overrides
     foreach ($this->calendar_field_mapping as $k => $v) {
         if (isset($ourdata[$k])) {
             $fields[$v] = $ourdata[$k];
         }
     }
     // Set add and modify
     $fields['caldateof'] = $this->ImportDate($fields['caldateof']);
     $this_user = freemed::user_cache();
     $fields['user'] = $this_user->user_number;
     $query = $GLOBALS['sql']->insert_query('scheduler', $fields);
     $result = $GLOBALS['sql']->query($query);
     if (!$result) {
         return false;
     } else {
         return $GLOBALS['sql']->lastInsertId('scheduler', 'id');
     }
 }
示例#15
0
 function AgingReportQualified($criteria)
 {
     freemed::acl_enforce('financial', 'read');
     $s = CreateObject('org.freemedsoftware.api.Scheduler');
     foreach ($criteria as $k => $v) {
         //print "criteria key = $k, value = $v<hr/>\n";
         switch ($k) {
             case 'aging':
                 switch ($v) {
                     case '0-30':
                     case '31-60':
                     case '61-90':
                     case '91-120':
                         list($lower, $upper) = explode('-', $v);
                         break;
                     case '120+':
                         $lower = '120';
                         $upper = '10000';
                         break;
                 }
                 // end inner aging switch
                 if ($upper) {
                     $q[] = "(TO_DAYS(NOW()) - TO_DAYS(p.procdt) >= " . addslashes($lower) . ") AND " . "(TO_DAYS(NOW()) - TO_DAYS(p.procdt) <= " . addslashes($upper) . ")";
                 }
                 break;
                 // end aging case
             // end aging case
             case 'billed':
                 if ($v == '0' or $v == '1') {
                     $q[] = "p.procbilled = '" . addslashes($v) . "'";
                 }
                 break;
                 // end billed case
             // end billed case
             case 'date':
                 if ($v && ($criteria['week'] == "" || $criteria['week'] == NULL)) {
                     $q[] = "p.procdt = '" . addslashes($s->ImportDate($v)) . "'";
                 }
                 break;
                 // end date
             // end date
             case 'week':
                 if ($v && ($criteria['date'] != "" || $criteria['date'] != NULL)) {
                     $q[] = "WEEK(p.procdt) = WEEK('" . addslashes($s->ImportDate($criteria['date'])) . "')";
                 }
                 break;
                 // end week
             // end week
             case 'provider':
                 if ($v) {
                     $q[] = "p.procphysician = '" . addslashes($v) . "'";
                 }
                 break;
                 // end patient case
             // end patient case
             case 'facility':
                 if ($v) {
                     $q[] = "p.procpos = '" . addslashes($v) . "'";
                 }
                 break;
                 // end patient case
             // end patient case
             case 'patient':
                 if ($v) {
                     $q[] = "pt.id = '" . addslashes($v) . "'";
                 }
                 break;
                 // end patient case
             // end patient case
             case 'first_name':
                 if ($v) {
                     $q[] = "pt.ptfname LIKE '%" . addslashes($v) . "%'";
                 }
                 break;
                 // end first name
             // end first name
             case 'last_name':
                 if ($v) {
                     $q[] = "pt.ptlname LIKE '%" . addslashes($v) . "%'";
                 }
                 break;
                 // end last name
             // end last name
             case 'payer':
                 if ($v) {
                     $q[] = "c.covinsco = '" . addslashes($v) . "'";
                 }
                 break;
                 // end payer case
             // end payer case
             case 'payergroup':
                 if ($v) {
                     $q[] = "i.inscogroup = '" . addslashes($v) . "'";
                 }
                 break;
                 // end payergroup case
             // end payergroup case
             case 'plan':
                 if ($v) {
                     $q[] = "c.covplanname = '" . addslashes($v) . "'";
                 }
                 break;
             case 'status':
                 if ($v) {
                     $q[] = "p.procstatus = '" . addslashes($v) . "'";
                 }
                 break;
             case 'tag':
                 $tag_object = CreateObject('org.freemedsoftware.module.PatientTag');
                 $obj = $tag_object->SimpleTagSearch($v);
                 for ($i = 0; $i < count($obj); $i++) {
                     $patient_ids[] = "p.procpatient = '" . $obj[$i]['patient_record'] . "'";
                 }
                 $condition = join(' OR ', $patient_ids);
                 if ($condition != "") {
                     $condition = '(' . $condition . ')';
                 }
                 $q[] = $condition;
                 break;
         }
         // end outer criteria type switch
     }
     // end criteria foreach loop
     //print "debug: criteria = ".join(' AND ', $q)." <br/>\n";
     $query = "SELECT DISTINCT p.id AS Id, CONCAT(pt.ptlname, ', ', pt.ptfname, " . "' ', pt.ptmname) AS patient, " . "pt.id AS patient_id, " . "p.procdt AS date_of, " . "DATE_FORMAT(p.procdt,'%m/%d/%Y') AS date_of_mdy, " . "p.procstatus AS status, " . "p.procbilled AS billed, " . "p.procphysician AS provider_id, " . "p.proccurcovtp AS proc_cov_type, " . "p.id AS claim, " . "p.procpos AS pos, " . "c.covpatinsno AS insured_id, " . "c.covinsco AS payer_id, " . "CONCAT(i.insconame, ' (', i.inscocity, ', ', " . "i.inscostate, ')') AS payer, " . "i.inscoidmap AS id_map, " . "cl.clbillkey AS billkey, " . "TRUNCATE(p.procamtpaid, 2) AS paid, " . "TRUNCATE(p.procbalcurrent, 2) AS balance " . "FROM procrec p " . "LEFT OUTER JOIN coverage c ON p.proccurcovid = c.id " . "LEFT OUTER JOIN insco i ON c.covinsco = i.id " . "LEFT OUTER JOIN patient pt ON p.procpatient = pt.id " . "LEFT OUTER JOIN claimlog cl ON cl.clprocedure = p.id AND cl.clbillkey != 0 AND cl.clbillkey=(select max(tcl.clbillkey) from claimlog tcl where tcl.clprocedure=p.id) " . "WHERE ";
     if ($criteria['zerobalance'] + 0 == '0') {
         $query .= "p.procbalcurrent > 0 AND ";
     }
     $query .= (is_array($q) ? join(' AND ', $q) : ' ( 1 > 0 ) ') . " " . "ORDER BY patient, balance DESC";
     //print "<hr/>query = \"$query\"<hr/>\n";
     $result = $GLOBALS['sql']->queryAll($query);
     $return = array();
     foreach ($result as $r) {
         // Make sure to deserialize the id map, since
         // we can't actually extract values from it using
         // SQL regex's, or if we could, it would be a
         // huge waste of processor time...
         $pm = CreateObject('org.freemedsoftware.module.ProviderModule');
         $r['provider_name'] = $pm->fullName($r['provider_id']);
         if (is_array(@unserialize($r['id_map']))) {
             $id_map = unserialize($r['id_map']);
             $r['id_map'] = $id_map[$r['provider_id']];
         } else {
             $id_map = array();
         }
         $fac = CreateObject('org.freemedsoftware.module.FacilityModule');
         $r['posname'] = $fac->to_text($r['pos']);
         $return[] = $r;
         // patient, claims, paid, balance, ratio
     }
     return $return;
 }
示例#16
0
 public function DelAllowedACOs($userId)
 {
     freemed::acl_enforce('admin', 'delete');
     $acl = $this->acl_object();
     return $acl->del_allowed_objects($userId);
 }
示例#17
0
 public function mod($data, $blockedACOs = NULL, $allowedACOs = NULL)
 {
     freemed::acl_enforce('admin', 'write');
     if (is_array($data)) {
         if (!$data['id']) {
             return false;
         }
     } elseif (is_object($data)) {
         if (!$data->id) {
             return false;
         }
     } else {
         return false;
     }
     $ourdata = (array) $data;
     // Protect admin user
     if ($ourdata['id'] + 0 == 1) {
         return false;
     }
     $tempVariables = $this->variables;
     if (!$data['userpassword']) {
         // remove password from variables if no need to change the password
         unset($tempVariables[1]);
     }
     $this->mod_pre($ourdata);
     $GLOBALS['sql']->load_data($ourdata);
     $result = $GLOBALS['sql']->query($GLOBALS['sql']->update_query('user', $tempVariables, array("id" => $data['id'])));
     if ($data['useracl']) {
         if (!is_array($data['useracl'])) {
             $data['useracl'] = explode(",", $data['useracl']);
         }
     } else {
         $data['useracl'] = array($data['useracl']);
     }
     // Create user ACL object If not already exists in ACL tables
     module_function('ACL', 'UserAdd', array($data['id']));
     if (is_array($data['useracl'])) {
         $groups = module_function('ACL', 'UserGroups');
         foreach ($groups as $group) {
             $found = false;
             foreach ($data['useracl'] as $acl_id) {
                 if ($group[1] == $acl_id) {
                     $found = true;
                 }
             }
             $inThisGroup = module_function('ACL', 'UserInGroup', array($data['id'], $group[1]));
             if ($found && !$inThisGroup) {
                 // Need to add
                 $o = module_function('ACL', 'AddUserToGroup', array($data['id'], $group[1]));
             }
             if (!$found && $inThisGroup) {
                 // Need to remove
                 $abc = $abc . ':rm:';
                 $o = module_function('ACL', 'RemoveUserFromGroup', array($data['id'], $group[1]));
             }
         }
     }
     // ACL routine for adding all blockedACOs
     if ($blockedACOs) {
         module_function('ACL', 'DelBlockedACOs', $data['id']);
         $blockedACOsSuccess = module_function('ACL', 'AddBlockedACOs', array($data['id'], $blockedACOs));
     } else {
         //else remove blocked permission if exists
         module_function('ACL', 'DelBlockedACOs', $data['id']);
     }
     // ACL routine for adding all allowedACOs
     if ($allowedACOs) {
         module_function('ACL', 'DelAllowedACOs', $data['id']);
         $allowedACOsSuccess = module_function('ACL', 'AddAllowedACOs', array($data['id'], $allowedACOs));
     } else {
         //else remove blocked permission if exists
         module_function('ACL', 'DelAllowedACOs', $data['id']);
     }
     return $result ? true : false;
 }
示例#18
0
 public function mod($data)
 {
     freemed::acl_enforce('emr', 'modify');
     if (!is_array($data) and !is_object($data)) {
         syslog(LOG_INFO, get_class($this) . "| no data presented");
         return false;
     }
     $ourdata = (array) $data;
     if (!$ourdata['id']) {
         syslog(LOG_INFO, get_class($this) . "| no id presented");
         return false;
     }
     // Check for modification locking
     if (!freemed::lock_override()) {
         if ($this->locked($ourdata['id'])) {
             return false;
         }
     }
     // Handle row-level locking mechanism
     $lock = CreateObject('org.freemedsoftware.core.RecordLock', $this->table_name);
     if ($lock->IsLocked($ourdata['id'])) {
         return false;
     } else {
         $lock->LockRow($ourdata['id']);
     }
     $ourdata = $this->prepare($ourdata);
     $this->mod_pre($ourdata);
     $GLOBALS['sql']->load_data($ourdata);
     $result = $GLOBALS['sql']->query($GLOBALS['sql']->update_query($this->table_name, $this->variables, array("id" => $data['id']), $this->date_variables));
     $this->mod_post($ourdata);
     $this->moduleFieldCheck(get_class($this), $data['id'], $data);
     // Unlock row, since update is done
     $lock->UnlockRow($data['id']);
     return $result ? true : false;
 }