/**
  * 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;
 }