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