public static function listClaims(array $filters) { $db = Zend_Registry::get('dbAdapter'); $sqlSelect = $db->select()->from('claimFiles')->join('encounter', 'encounter.encounter_id = claimFiles.visitId')->order('claimFiles.dateTime DESC')->order('encounter.appointmentId'); foreach ($filters as $key => $value) { switch ($key) { case 'DOSDateRange': $sqlSelect->where("encounter.date_of_treatment BETWEEN '{$value['start']} 00:00:00' AND '{$value['end']} 23:59:59'"); break; case 'facilities': // practice, building, room if (!is_array($value)) { $value = array($value); } $facilities = array(); foreach ($value as $val) { $facilities[] = 'practice_id = ' . (int) $val['practice'] . ' AND building_id = ' . (int) $val['building'] . ' AND room_id = ' . (int) $val['room']; } $sqlSelect->where(implode(' OR ', $facilities)); break; case 'payers': $payers = array(); foreach ($value as $payerId) { $payers[] = (int) $payerId; } $sqlSelect->where('activePayerId IN (' . implode(',', $payers) . ')'); break; case 'facility': // practice, building, room $sqlSelect->where('encounter.practice_id = ?', (int) $value['practice']); $sqlSelect->where('encounter.building_id = ?', (int) $value['building']); $sqlSelect->where('encounter.room_id = ?', (int) $value['room']); break; case 'insurer': $sqlSelect->where('encounter.activePayerId = ?', (int) $value); break; case 'visitId': $sqlSelect->where('encounter.encounter_id = ?', (int) $value); break; case 'provider': $sqlSelect->where('encounter.treating_person_id = ?', (int) $value); break; } } $columnMeta = array(); $rows = array(); $stmt = $db->query($sqlSelect); while ($row = $stmt->fetch(PDO::FETCH_NUM)) { if (!isset($rows[0])) { for ($i = 0, $ctr = count($row); $i < $ctr; $i++) { $columnMeta[$i] = $stmt->getColumnMeta($i); } } $data = array(); $col = 0; foreach ($columnMeta as $i => $meta) { $data[$meta['table']][$meta['name']] = $row[$i]; } $claimFile = new ClaimFile(); $claimFile->populateWithArray($data[$claimFile->_table]); $visit = new Visit(); $visit->populateWithArray($data[$visit->_table]); $rows[] = array('claimFile' => $claimFile, 'visit' => $visit); } return $rows; }