public function processPatientDiagnosesAction()
 {
     $patientId = (int) $this->_getParam('patientId');
     $diagnoses = $this->_getParam('diagnoses');
     if ($patientId > 0) {
         $patientDiagnosisIterator = new PatientDiagnosisIterator();
         $patientDiagnosisIterator->setFilters(array('patientId' => $patientId));
         $existingDiagnoses = $patientDiagnosisIterator->toArray('code', 'patientId');
         foreach ($diagnoses as $code => $diagnosis) {
             if (isset($existingDiagnoses[$code])) {
                 unset($existingDiagnoses[$code]);
             }
             $diagnosis['code'] = $code;
             $diagnosis['patientId'] = $patientId;
             $patientDiagnosis = new PatientDiagnosis();
             $patientDiagnosis->code = $code;
             $patientDiagnosis->populate();
             if ($patientDiagnosis->dateTime == '0000-00-00 00:00:00') {
                 $diagnosis['dateTime'] = date('Y-m-d H:i:s');
             }
             $patientDiagnosis->populateWithArray($diagnosis);
             $patientDiagnosis->persist();
         }
         // delete un-used records
         foreach ($existingDiagnoses as $code => $patientId) {
             $patientDiagnosis = new PatientDiagnosis();
             $patientDiagnosis->code = $code;
             $patientDiagnosis->patientId = $patientId;
             $patientDiagnosis->setPersistMode(WebVista_Model_ORM::DELETE);
             $patientDiagnosis->persist();
         }
     }
     $data = array();
     $data['msg'] = __('Record saved successfully');
     $json = Zend_Controller_Action_HelperBroker::getStaticHelper('json');
     $json->suppressExit = true;
     $json->direct($data);
 }
 public function populateVisitDiagnoses()
 {
     $iterator = new PatientDiagnosisIterator();
     $iterator->setFilters(array('visitId' => $this->visitId));
     foreach ($iterator as $patientDiagnosis) {
         $this->setUnsetDiagnosis($patientDiagnosis->code, true);
     }
 }
 public function listPatientDiagnosesAction()
 {
     $patientId = (int) $this->_getParam('patientId');
     $visitId = (int) $this->_getParam('visitId');
     $rows = array();
     if ($patientId > 0) {
         // add to problem list, primary, diagnosis, comment
         $patientDiagnosisIterator = new PatientDiagnosisIterator();
         $patientDiagnosisIterator->setFilters(array('patientId' => $patientId, 'visitId' => $visitId));
         foreach ($patientDiagnosisIterator as $patientDiagnosis) {
             $rows[] = $this->_generateRowData($patientDiagnosis);
         }
     }
     $data = array();
     $data['rows'] = $rows;
     $json = Zend_Controller_Action_HelperBroker::getStaticHelper('json');
     $json->suppressExit = true;
     $json->direct($data);
 }
 public static function generateOBR(array $data)
 {
     static $obrCtr = 1;
     $orderLabTest = $data['orderLabTest'];
     $labTest = $data['labTest'];
     $loinc = $data['loinc'];
     $obr = 'OBR|' . $obrCtr++ . '||' . $labTest->filerOrderNum . '^Lab^2.16.840.1.113883.19.3.1.6^ISO|';
     $altIdentifier = '3456543';
     $obr .= $loinc->loincNum . '^' . $loinc->shortname . '^LN^' . $altIdentifier . '^' . $labTest->service . '^99USI|||';
     // concatenated diagnoses ,
     $diagnoses = array();
     $iterator = new PatientDiagnosisIterator();
     $iterator->setFilters(array('patientId' => (int) $orderLabTest->order->patientId));
     foreach ($iterator as $pd) {
         $diagnoses[$pd->code] = $pd->diagnosis;
     }
     $relevantClinicalInfo = implode(',', $diagnoses);
     $obr .= date('YmdHiO', strtotime($labTest->observationTime)) . '||||||' . $relevantClinicalInfo . '|||';
     $provider = $orderLabTest->order->provider;
     $providerId = strlen($provider->identifier) > 0 ? $provider->identifier : $provider->personId;
     $building = Building::getBuildingDefaultLocation($provider->personId);
     if ($provider->personId > 0) {
         $obr .= $providerId . '^' . $provider->person->lastName . '^' . $provider->person->firstName . '^^^^^^' . $building->name . '&2.16.840.1.113883.19.4.6&ISO';
     }
     $obr .= '||||||' . date('YmdHiO', strtotime($labTest->reportTime)) . '|||' . $labTest->status . '||||||';
     $reasonForStudy = array();
     foreach ($diagnoses as $code => $description) {
         $codeSystem = strpos($code, '.') === false ? 'SCT' : 'I9CDX';
         $reasonForStudy[] = $code . '^' . $description . '^' . $codeSystem;
     }
     $obr .= implode('~', $reasonForStudy);
     return $obr;
 }
 public function paymentReceiptAction()
 {
     // d96de46c-be90-45b0-b5f9-0b4abee76483
     $referenceId = $this->_getParam('referenceId');
     $personId = (int) $this->_getParam('personId');
     $visitId = (int) $this->_getParam('visitId');
     $data = $this->_getAttachmentData($referenceId);
     $patient = new Patient();
     $patient->personId = $personId;
     if ($personId > 0) {
         $patient->populate();
     }
     $person = $patient->person;
     $visit = new Visit();
     $visit->visitId = $visitId;
     if ($visitId > 0) {
         $visit->populate();
     }
     $practiceId = (int) $visit->practiceId;
     if (!$practiceId > 0) {
         $buildingId = (int) $visit->buildingId;
         if ($buildingId > 0) {
             $building = new Building();
             $building->buildingId = $buildingId;
             $building->populate();
             $practiceId = (int) $building->practiceId;
         } else {
             $roomId = (int) $visit->roomId;
             if ($roomId > 0) {
                 $room = new Room();
                 $room->roomId = $roomId;
                 $room->populate();
                 $practiceId = (int) $room->building->practiceId;
             }
         }
     }
     $practice = new Practice();
     $practice->practiceId = $practiceId;
     if ($practiceId > 0) {
         $practice->populate();
     }
     $primaryAddress = $practice->primaryAddress;
     $xml = new SimpleXMLElement('<data/>');
     $xmlPractice = $xml->addChild('practice');
     $this->_addChild($xmlPractice, 'name', $practice->name);
     $this->_addChild($xmlPractice, 'primaryLine1', $primaryAddress->line1);
     $primaryCityStateZip = $primaryAddress->city . ' ' . $primaryAddress->state . ' ' . $primaryAddress->postalCode;
     $this->_addChild($xmlPractice, 'primaryCityStateZip', $primaryCityStateZip);
     $this->_addChild($xmlPractice, 'mainPhone', $practice->mainPhone->number);
     $xmlPatient = $xml->addChild('patient');
     $name = $person->firstName . ' ' . $person->middleName . ' ' . $person->lastName;
     $this->_addChild($xmlPatient, 'name', $name);
     $addresses = Address::listAddresses($personId);
     if (isset($addresses[Address::TYPE_BILLING])) {
         $address = $addresses[Address::TYPE_BILLING];
     } else {
         if (isset($addresses[Address::TYPE_HOME])) {
             $address = $addresses[Address::TYPE_HOME];
         } else {
             if (isset($addresses[Address::TYPE_MAIN])) {
                 $address = $addresses[Address::TYPE_MAIN];
             } else {
                 if (isset($addresses[Address::TYPE_SEC])) {
                     $address = $addresses[Address::TYPE_SEC];
                 } else {
                     if (isset($addresses[Address::TYPE_OTHER])) {
                         $address = $addresses[Address::TYPE_OTHER];
                     } else {
                         $address = array_pop($addresses);
                     }
                 }
             }
         }
     }
     $billingCityStateZip = $address->city . ' ' . $address->state . ' ' . $address->postalCode;
     $this->_addChild($xmlPatient, 'billingLine1', $address->line1);
     $this->_addChild($xmlPatient, 'billingCityStateZip', $billingCityStateZip);
     $iterator = new PatientProcedureIterator();
     $iterator->setFilters(array('visitId' => $visitId));
     $procedures = array();
     foreach ($iterator as $row) {
         $procedures[] = $row->code;
     }
     $iterator = new PatientDiagnosisIterator();
     $iterator->setFilters(array('visitId' => $visitId));
     $diagnoses = array();
     foreach ($iterator as $row) {
         $diagnoses[] = $row->code;
     }
     $xmlNotes = $xmlPatient->addChild('notes');
     $note = implode(',', $procedures) . " \t " . implode(',', $diagnoses) . " \t " . date('m/d/y', strtotime($visit->dateOfTreatment));
     $this->_addChild($xmlNotes, 'note', $note);
     $today = date('Y-m-d');
     $todaysTotal = 0;
     $iterator = new PaymentIterator();
     $iterator->setFilters(array('visitId' => $visitId, 'company' => 'System', 'paymentDate' => $today));
     $payments = array();
     foreach ($iterator as $row) {
         $payments[] = $row;
     }
     $iterator->setFilters(array('personId' => $personId, 'unallocated' => true, 'paymentDate' => $today));
     foreach ($iterator as $row) {
         $payments[] = $row;
     }
     foreach ($payments as $row) {
         $xmlPayment = $xmlPatient->addChild('payments');
         $paymentDate = date('m/d/y', strtotime($row->paymentDate));
         $this->_addChild($xmlPayment, 'date', $paymentDate);
         $this->_addChild($xmlPayment, 'description', $row->title . ' .... Thank You');
         $this->_addChild($xmlPayment, 'method', $row->paymentType);
         $amount = (double) $row->amount;
         $todaysTotal += $amount;
         $this->_addChild($xmlPayment, 'amount', '-' . number_format($amount, 2));
         $this->_addChild($xmlPayment, 'insurance', $row->insuranceDisplay);
     }
     $fees = $visit->calculateFees();
     $previousBalance = $fees['total'];
     $this->_addChild($xmlPatient, 'previousBalance', number_format($previousBalance, 2));
     $this->_addChild($xmlPatient, 'todaysTotal', '-' . number_format($todaysTotal, 2));
     $totalDue = $previousBalance - $todaysTotal;
     $this->_addChild($xmlPatient, 'totalDue', number_format($totalDue, 2));
     $totalDueFromPatient = $previousBalance;
     $this->_addChild($xmlPatient, 'totalDueFromPatient', number_format($totalDueFromPatient, 2));
     try {
         $content = ReportBase::mergepdfset($xml, $data);
         $this->getResponse()->setHeader('Content-Type', 'application/pdf');
     } catch (Exception $e) {
         $content = '<script>alert("' . $e->getMessage() . '")</script>';
     }
     $this->view->content = $content;
     $this->render('binary-template');
 }
 public function listDiagnosesAction()
 {
     $visitId = (int) $this->_getParam('visitId');
     $id = (int) $this->_getParam('id');
     $rows = array();
     if ($visitId > 0) {
         $visit = new Visit();
         $visit->visitId = $visitId;
         $visit->populate();
         $patientProcedure = new PatientProcedure();
         $patientProcedure->patientProcedureId = $id;
         $patientProcedure->populate();
         $diagnoses = array();
         for ($i = 1; $i <= 8; $i++) {
             $field = 'diagnosisCode' . $i;
             $key = $patientProcedure->{$field};
             if (strlen($key) > 0) {
                 $diagnoses[$key] = $key;
             }
         }
         $enabled = array();
         $disabled = array();
         $patientDiagnosisIterator = new PatientDiagnosisIterator();
         $patientDiagnosisIterator->setFilters(array('patientId' => (int) $visit->patientId, 'visitId' => $visitId));
         foreach ($patientDiagnosisIterator as $row) {
             $tmp = array();
             $tmp['id'] = $row->code;
             $tmp['data'] = array();
             $tmp['data'][] = isset($diagnoses[$row->code]) ? '1' : '';
             $diagnosis = $row->code . ': ' . $row->diagnosis;
             if ($row->isPrimary) {
                 $diagnosis = '<strong>' . $diagnosis . '</strong>';
             }
             $tmp['data'][] = $diagnosis;
             if ($tmp['data'][0] == '1') {
                 $enabled[$diagnoses[$row->code]] = $tmp;
             } else {
                 $disabled[] = $tmp;
             }
         }
         $tmp = $enabled;
         $enabled = array();
         foreach ($diagnoses as $diagnosis) {
             $enabled[] = $tmp[$diagnosis];
         }
         $rows = array_merge($enabled, $disabled);
     }
     $data = array();
     $data['rows'] = $rows;
     $json = Zend_Controller_Action_HelperBroker::getStaticHelper('json');
     $json->suppressExit = true;
     $json->direct($data);
 }