/**
  * When Operator user saves results request is posted to this method
  * it saves the results of test for which a patient has applied.
  */
 public function saveresultAction()
 {
     $this->_helper->layout->disableLayout();
     $this->_helper->viewRenderer->setNoRender(true);
     $data = $this->getRequest()->getPost();
     patient::saveTestResult($data);
     echo json_encode(['messages' => 'Results are saved.']);
     die;
 }
 /**
  * This method is used to save the new patient or update the information of 
  * an existing patient. a user with the mrn.no is create with the username and
  * password same as mrn. no.
  * it also enters the order of patient
  * @param type $dataPosted
  * @return array id of patient and order
  */
 public function save($dataPosted)
 {
     $userObj = new Application_Model_User();
     $arrayCols = $userObj->fetchNew()->toArray();
     $patientObj = new Application_Model_Patient();
     $arrayColsPat = $patientObj->fetchNew()->toArray();
     $dataPosted['updated_at'] = date('Y-m-d H:i:s');
     $dataPosted['created_at'] = date('Y-m-d H:i:s');
     $user_data = array_intersect_key($dataPosted, $arrayCols);
     // filter the posted data to model attributes
     $patient_data = array_intersect_key($dataPosted, $arrayColsPat);
     unset($patient_data['id']);
     $user_data['username'] = $dataPosted['m_r_no'];
     $user_data['password'] = md5($dataPosted['m_r_no']);
     $user_data['user_type'] = 'patient';
     //update user and patient if id  passed
     if (!empty($user_data['id'])) {
         unset($user_data['created_at']);
         unset($patient_data['created_at']);
         $userObj->update($user_data, 'id=' . $user_data['id']);
         $user_id = $user_data['id'];
         $patient_data['user_id'] = $user_id;
         $patientObj->update($patient_data, 'user_id=' . $user_id);
     } else {
         //insert new user and patient if id not passed
         unset($user_data['id']);
         $user_id = $userObj->insert($user_data);
         $patient_data['user_id'] = $user_id;
         $patientObj->insert($patient_data);
     }
     $result['id'] = $user_id;
     $result['order_id'] = '';
     // Save patient Tests
     $patient_orders_obj = new Application_Model_DbTable_PatientOrders();
     if (isset($dataPosted['test_id'])) {
         $testIds = $dataPosted['test_id'];
     } else {
         $testIds = [];
     }
     if (!empty($dataPosted['order_id']) || count($testIds)) {
         if (empty($dataPosted['order_id'])) {
             $dataOrder['user_id'] = $user_id;
             $dataOrder['created_at'] = date('Y-m-d H:i:s');
             $dataOrder['total_tests'] = count($testIds);
             $order_id = $patient_orders_obj->insert($dataOrder);
         } else {
             $order_id = $dataPosted['order_id'];
             $dataOrder['total_tests'] = count($testIds);
             $patient_orders_obj->update($dataOrder, 'id = ' . $order_id);
         }
         $result['order_id'] = $order_id;
         // Delete the removed tests
         $OrderTestsObj = new Application_Model_DbTable_OrderTests();
         $oldTests = $OrderTestsObj->fetchAll('order_id = ' . $order_id);
         $oldTestsArr = [];
         foreach ($oldTests as $oldTest) {
             if (!in_array($oldTest['test_id'], $testIds)) {
                 $OrderTestsObj->delete('test_id = ' . $oldTest['test_id'] . ' and order_id = ' . $order_id);
             }
             $oldTestsArr[] = $oldTest['test_id'];
         }
         // Add new tests
         foreach ($testIds as $newTest) {
             if (!in_array($newTest, $oldTestsArr)) {
                 $OrderTestsObj->insert(['test_id' => $newTest, 'order_id' => $order_id]);
             }
         }
     }
     return $result;
 }
 public function getBirthday()
 {
     $this->__load();
     return parent::getBirthday();
 }
 /**
  * PDF of a test order is downloaded by this method
  */
 public function downloadpdfAction()
 {
     $this->_helper->layout->disableLayout();
     $this->_helper->viewRenderer->setNoRender(true);
     $id = $this->getRequest()->getParam('id', '');
     $email = $this->getRequest()->getParam('email', 0);
     require_once 'mpdf/mpdf.php';
     $html .= $this->view->action('viewreport', 'patient', 'patient', array('id' => $id));
     $mpdf = new mPDF('+aCJK', 'A4', '', '', 15, 15, 15, 0, 0, 0);
     $mpdf->mirrorMargins = 0;
     $mpdf->setAutoBottomMargin = 'stretch';
     $mpdf->SetDisplayMode('fullwidth');
     $mpdf->WriteHTML($html);
     $fileName = 'PDF_Form' . time() . '.pdf';
     $mpdf->Output('tmp/' . $fileName, $email ? 'F' : 'D');
     if ($email) {
         $patient = patient::getOrderById($id);
         $mail = new PHPMailer();
         $mail->From = '*****@*****.**';
         $mail->FromName = 'Lab';
         $mail->addAddress($patient[0]['email'], '');
         $mail->addAttachment('tmp/' . $fileName);
         $mail->Subject = 'Your Test Report';
         $mail->Body = 'Please find attached report';
         if (!$mail->send()) {
             echo 'Message could not be sent.';
             echo 'Mailer Error: ' . $mail->ErrorInfo;
         } else {
             unlink('tmp/' . $fileName);
             $flashMessenger = $this->_helper->getHelper('FlashMessenger');
             $flashMessenger->addMessage('mail_sent');
             $this->_redirect('/patient/orders');
         }
     }
 }