db = \Config\Database::connect(); $this->model = new OrderTestModel(); $this->patientModel = new PatientModel(); $this->visitModel = new PatVisitModel(); $this->rules = [ 'InternalPID' => 'required|is_natural' ]; } public function index() { $internalPID = $this->request->getVar('InternalPID'); try { if ($internalPID) { $rows = $this->model->getOrdersByPatient($internalPID); } else { $rows = $this->db->table('ordertest') ->where('DelDate', null) ->orderBy('OrderDateTime', 'DESC') ->get() ->getResultArray(); } return $this->respond([ 'status' => 'success', 'message' => 'Data fetched successfully', 'data' => $rows ], 200); } catch (\Exception $e) { return $this->failServerError('Something went wrong: ' . $e->getMessage()); } } public function show($orderID = null) { try { $row = $this->model->getOrder($orderID); if (empty($row)) { return $this->respond([ 'status' => 'success', 'message' => 'Data not found.', 'data' => null ], 200); } return $this->respond([ 'status' => 'success', 'message' => 'Data fetched successfully', 'data' => $row ], 200); } catch (\Exception $e) { return $this->failServerError('Something went wrong: ' . $e->getMessage()); } } public function create() { $input = $this->request->getJSON(true); if (!$this->validateData($input, $this->rules)) { return $this->failValidationErrors($this->validator->getErrors()); } try { if (!$this->patientModel->find($input['InternalPID'])) { return $this->failValidationErrors(['InternalPID' => 'Patient not found']); } if (!empty($input['PatVisitID'])) { $visit = $this->visitModel->find($input['PatVisitID']); if (!$visit) { return $this->failValidationErrors(['PatVisitID' => 'Visit not found']); } } $orderID = $this->model->createOrder($input); return $this->respondCreated([ 'status' => 'success', 'message' => 'Order created successfully', 'data' => ['OrderID' => $orderID] ], 201); } catch (\Exception $e) { return $this->failServerError('Something went wrong: ' . $e->getMessage()); } } public function update() { $input = $this->request->getJSON(true); if (empty($input['OrderID'])) { return $this->failValidationErrors(['OrderID' => 'OrderID is required']); } try { $order = $this->model->getOrder($input['OrderID']); if (!$order) { return $this->failNotFound('Order not found'); } $updateData = []; if (isset($input['Priority'])) $updateData['Priority'] = $input['Priority']; if (isset($input['OrderStatus'])) $updateData['OrderStatus'] = $input['OrderStatus']; if (isset($input['OrderingProvider'])) $updateData['OrderingProvider'] = $input['OrderingProvider']; if (isset($input['DepartmentID'])) $updateData['DepartmentID'] = $input['DepartmentID']; if (isset($input['WorkstationID'])) $updateData['WorkstationID'] = $input['WorkstationID']; if (!empty($updateData)) { $this->model->update($input['OrderID'], $updateData); } return $this->respond([ 'status' => 'success', 'message' => 'Order updated successfully', 'data' => $this->model->getOrder($input['OrderID']) ], 200); } catch (\Exception $e) { return $this->failServerError('Something went wrong: ' . $e->getMessage()); } } public function delete() { $input = $this->request->getJSON(true); $orderID = $input['OrderID'] ?? null; if (empty($orderID)) { return $this->failValidationErrors(['OrderID' => 'OrderID is required']); } try { $order = $this->model->getOrder($orderID); if (!$order) { return $this->failNotFound('Order not found'); } $this->model->softDelete($orderID); return $this->respondDeleted([ 'status' => 'success', 'message' => 'Order deleted successfully' ]); } catch (\Exception $e) { return $this->failServerError('Something went wrong: ' . $e->getMessage()); } } public function updateStatus() { $input = $this->request->getJSON(true); if (empty($input['OrderID']) || empty($input['OrderStatus'])) { return $this->failValidationErrors(['error' => 'OrderID and OrderStatus are required']); } $validStatuses = ['ORD', 'SCH', 'ANA', 'VER', 'REV', 'REP']; if (!in_array($input['OrderStatus'], $validStatuses)) { return $this->failValidationErrors(['OrderStatus' => 'Invalid status. Valid: ' . implode(', ', $validStatuses)]); } try { $order = $this->model->getOrder($input['OrderID']); if (!$order) { return $this->failNotFound('Order not found'); } $this->model->updateStatus($input['OrderID'], $input['OrderStatus']); return $this->respond([ 'status' => 'success', 'message' => 'Order status updated successfully', 'data' => $this->model->getOrder($input['OrderID']) ], 200); } catch (\Exception $e) { return $this->failServerError('Something went wrong: ' . $e->getMessage()); } } }