db = \Config\Database::connect(); } // OK public function index() { try { $pat_num = $this->request->getVar('pat_num'); $pat_altnum = $this->request->getVar('pat_altnum'); $pat_name = $this->request->getVar('pat_name'); $pat_dob = $this->request->getVar('pat_dob'); $start_date = $this->request->getVar('start_date'); $end_date = $this->request->getVar('end_date'); $builder = $this->db->table('patients'); if ($pat_name !== null) { $sql = "LOWER(CONCAT_WS(' ', IFNULL(prefix,''), IFNULL(name_first,''), IFNULL(name_middle,''), IFNULL(name_last,''), IFNULL(name_maiden,''), IFNULL(suffix,'')))"; $rawSql = new RawSql($sql); $builder->like($rawSql, $pat_name, 'both'); } if ($pat_num !== null) { $builder->where('pat_num', $pat_num); } if ($pat_altnum !== null) { $builder->where('pat_altnum', $pat_altnum); } if ($pat_dob !== null) { $builder->where('pat_dob', $pat_dob); } if ($start_date !== null || $end_date !== null) { $builder->join('requests', 'pat_id=patients.pat_id','left'); if ($start_date !== null) { $builder->where('requests.req_date >=', $start_date . ' 00:00:00'); } if ($end_date !== null) { $builder->where('requests.req_date <=', $end_date . ' 23:59:00'); } } $filteredPatients = $builder->get()->getResultArray(); // Data pasien tidak ada mengembalikan - success 200 if (empty($filteredPatients)) { return $this->respond([ 'status' => 'success', 'message' => 'No patient records found matching the criteria.', 'data' => [] ], 200); } // Data pasien ditemukan dan mengembalikan - success 200 return $this->respond([ 'status' => 'success', 'message'=> "Patients fetched successfully", 'data' => $filteredPatients, ], 200); } catch (\Exception $e) { // Error Server Mengembalikan 500 return $this->failServerError('Something went wrong'); } } // OK public function show($id = null) { try { $builder = $this->db->table('patients'); $patient = $builder->where('pat_num', $id)->get()->getRowArray(); // Data pasien tidak ada mengembalikan - success 200 if (empty($patient)) { return $this->respond([ 'status' => 'success', 'message' => 'Patient with ID ' . $id . ' not found.', 'data' => [], ], 200); } // Data pasien ditemukan dan mengembalikan - success 200 return $this->respond([ 'status' => 'success', 'message'=> "Patient Show Successfully", 'data' => $patient, ], 200); } catch (\Exception $e) { // Error Server Mengembalikan 500 return $this->failServerError('Something went wrong'); } } // OK public function create() { try { $input = $this->request->getJSON(true); // $datas = [ // 'name_first' => $data['name_first'], // 'name_last' => $data['name_last'], // 'name_middle' => $data['name_middle'] ?? null, // 'name_maiden' => $data['name_maiden'] ?? null, // 'pat_num' => $data['pat_num'], // 'prefix' => $data['prefix'] ?? null, // 'suffix' => $data['suffix'] ?? null, // 'birth_date' => $data['pat_dob'] ?? null, // 'pat_altnum' => $data['pat_altnum'] ?? null, // 'address_1' => $data['address_1'] ?? null, // 'address_2' => $data['address_2'] ?? null, // 'address_3' => $data['address_3'] ?? null, // 'city' => $data['city'] ?? null, // 'province' => $data['province'] ?? null, // 'zip' => $data['zip'] ?? null, // 'email_1' => $data['email_1'] ?? null, // 'email_2' => $data['email_2'] ?? null, // 'phone' => $data['phone'] ?? null, // 'mobile_phone' => $data['mobile_phone'] ?? null, // 'mother' => $data['mother'] ?? null, // 'account_number' => $data['account_number'] ?? null, // 'marital_status' => $data['marital_status'] ?? null, // 'country_id' => $data['country_id'] ?? null, // 'race_id' => $data['race_id'] ?? null, // 'religion_id' => $data['religion_id'] ?? null, // 'ethnic_id' => $data['ethnic_id'] ?? null, // 'citizenship' => $data['citizenship'] ?? null, // 'death' => $data['death'] ?? null, // 'death_date' => $data['death_date'] ?? null, // 'create_date' => date('Y-m-d H:i:s'), // ]; $data = [ 'name_first' => $input['firstName'], // Mengambil dari firstName 'name_last' => $input['lastName'], // Mengambil dari lastName 'name_middle' => $input['middleName'] ?? null, // Mengambil dari middleName 'name_maiden' => $input['maindenName'] ?? null, // Mengambil dari maindenName 'pat_num' => $input['patientID'], // Mengambil dari patientID 'prefix' => $input['title'] ?? null, // Mengambil dari title 'suffix' => $input['suffixName'] ?? null, // Mengambil dari suffixName 'birth_date' => $input['birthdate'] ?? null, // Mengambil dari birthdate 'pat_altnum' => $input['alternateID'] ?? null, // Mengambil dari alternateID 'address_1' => $input['street1'] ?? null, // Mengambil dari street1 'address_2' => $input['street2'] ?? null, // Mengambil dari street2 'address_3' => $input['placeOfBirthdate'] ?? null, // Memetakan placeOfBirthdate ke address_3, jika diperlukan 'city' => $input['city'] ?? null, // Mengambil dari city 'province' => $input['province'] ?? null, // Mengambil dari province 'zip' => null, // Tidak ada padanan langsung di newPatientForm, bisa diisi manual atau dari input lain 'email_1' => $input['email1'] ?? null, // Mengambil dari email1 'email_2' => $input['email2'] ?? null, // Mengambil dari email2 'phone' => $input['phone'] ?? null, // Mengambil dari phone 'mobile_phone' => $input['mobile'] ?? null, // Mengambil dari mobile 'mother' => $input['motherName'] ?? null, // Mengambil dari motherName 'account_number' => null, // Tidak ada padanan langsung, bisa diisi manual atau dari input lain 'marital_status' => $input['maritalStatus'] ?? null, // Mengambil dari maritalStatus 'country_id' => null, // Tidak ada padanan langsung, perlu penyesuaian jika ada input negara // 'race_id' => $data['race'] ?? null, // Mengambil dari race // 'religion_id' => $data['religion'] ?? null, // Mengambil dari religion // 'ethnic_id' => $data['ethnic'] ?? null, // Mengambil dari ethnic 'citizenship' => null, // Tidak ada padanan langsung, perlu penyesuaian jika ada input kewarganegaraan 'death' => $input['death'] ?? null, // Mengambil dari death (asumsi 0/1 atau boolean) 'death_date' => $input['deathTime'] ?? null, // Mengambil dari deathTime 'create_date' => date('Y-m-d H:i:s'), // Ini adalah tanggal dan waktu saat ini di server PHP ]; $rules = [ 'pat_num' => 'required|is_unique[patients.pat_num]|max_length[50]', 'name_first' => 'required|min_length[3]|max_length[255]', 'name_middle' => 'permit_empty', 'name_maiden' => 'permit_empty', 'name_last' => 'permit_empty', 'birth_date' => 'permit_empty|valid_date[Y-m-d]', 'pat_altnum' => 'permit_empty|max_length[50]', 'address_1' => 'permit_empty', 'address_2' => 'permit_empty', 'address_3' => 'permit_empty', 'city' => 'permit_empty', ]; // Request dari client tidak valid atau tidak bisa diproses oleh server - 400 if (!$this->validateData($data, $rules)) { return $this->respond([ 'status' => 'error', 'message' => 'Validation failed', 'errors' => $this->validator->getErrors() ], 400); } $this->db->table('patients')->insert($data); $newPatientId = $this->db->insertID(); // Sukses & Insert = 201 - Kirim data patient ID return $this->respondCreated([ 'status' => 'success', 'message' => 'Patient created successfully', 'data' => $newPatientId ], 201); } catch (\Exception $e) { // Error Server = 500 return $this->failServerError('Something went wrong'); } } // OK public function update($pat_id = null) { try { $input = $this->request->getJSON(true); $data = [ 'name_first' => $input['name_first'], // Mengambil dari firstName 'name_last' => $input['name_last'], // Mengambil dari lastName 'name_middle' => $input['middleName'] ?? null, // Mengambil dari middleName 'name_maiden' => $input['maindenName'] ?? null, // Mengambil dari maindenName 'pat_num' => $input['pat_num'], // Mengambil dari patientID 'prefix' => $input['title'] ?? null, // Mengambil dari title 'suffix' => $input['suffixName'] ?? null, // Mengambil dari suffixName 'birth_date' => $input['birthdate'] ?? null, // Mengambil dari birthdate 'pat_altnum' => $input['alternateID'] ?? null, // Mengambil dari alternateID 'address_1' => $input['street1'] ?? null, // Mengambil dari street1 'address_2' => $input['street2'] ?? null, // Mengambil dari street2 'address_3' => $input['placeOfBirthdate'] ?? null, // Memetakan placeOfBirthdate ke address_3, jika diperlukan 'city' => $input['city'] ?? null, // Mengambil dari city 'province' => $input['province'] ?? null, // Mengambil dari province 'zip' => null, // Tidak ada padanan langsung di newPatientForm, bisa diisi manual atau dari input lain 'email_1' => $input['email1'] ?? null, // Mengambil dari email1 'email_2' => $input['email2'] ?? null, // Mengambil dari email2 'phone' => $input['phone'] ?? null, // Mengambil dari phone 'mobile_phone' => $input['mobile'] ?? null, // Mengambil dari mobile 'mother' => $input['motherName'] ?? null, // Mengambil dari motherName 'account_number' => null, // Tidak ada padanan langsung, bisa diisi manual atau dari input lain 'marital_status' => $input['maritalStatus'] ?? null, // Mengambil dari maritalStatus 'country_id' => null, // Tidak ada padanan langsung, perlu penyesuaian jika ada input negara 'citizenship' => null, // Tidak ada padanan langsung, perlu penyesuaian jika ada input kewarganegaraan 'death' => $input['death'] ?? null, // Mengambil dari death (asumsi 0/1 atau boolean) 'death_date' => $input['deathTime'] ?? null, // Mengambil dari deathTime 'create_date' => date('Y-m-d H:i:s'), // Ini adalah tanggal dan waktu saat ini di server PHP ]; // Apakah Pasien Ada $existingPatient = $this->db->table('patients')->where('pat_id', $pat_id)->get()->getRowArray(); // Mengembalikan 404 if (empty($existingPatient)) { return $this->failNotFound('Patient with ID ' . $pat_id . ' not found.'); } $rules = [ 'pat_num' => 'required|max_length[50]', 'name_first' => 'required|min_length[3]|max_length[255]', 'name_middle' => 'permit_empty', 'name_maiden' => 'permit_empty', 'name_last' => 'permit_empty', 'birth_date' => 'permit_empty|valid_date[Y-m-d]', 'pat_altnum' => 'permit_empty|max_length[50]', 'address_1' => 'permit_empty', 'address_2' => 'permit_empty', 'address_3' => 'permit_empty', 'city' => 'permit_empty', ]; // Request dari client tidak valid atau tidak bisa diproses oleh server - 400 if (!$this->validateData($data, $rules)) { return $this->failValidationErrors($this->validator->getErrors()); } $allowedUpdateFields = [ 'name_first', 'name_last', 'name_middle', 'pat_num', 'pat_altnum', 'birth_date', 'birth_place', 'address_1', 'address_2', 'address_3', 'city', 'province', 'zip', 'email_1', 'email_2', 'phone', 'mobile_phone', 'mother', 'account_number' ]; $datas = []; foreach ($allowedUpdateFields as $field) { if (isset($data[$field])) { $datas[$field] = $data[$field]; } } if (empty($data)) { return $this->failValidationError('No data provided for update.'); } $this->db->table('patients')->where('pat_id', $pat_id)->update($data); // Sukses & Insert = 201 - Kirim data patient ID return $this->respondCreated([ 'status' => 'success', 'message' => 'Patient updated successfully', 'data' => $data ], 201); } catch (\Exception $e) { // Error Server = 500 return $this->failServerError('Something went wrong '.$e); } } // OK public function delete($pat_id = null) { try { if (!$pat_id) { return $this->failValidationError('Patient ID is required.'); } // Cari data pasien $patient = $this->db->table('patients') ->where('pat_id', $pat_id) ->get() ->getRow(); if (!$patient) { return $this->failNotFound("Patient ID with {$pat_id} not found."); } // Hapus data pasien berdasarkan pat_num $this->db->table('patients')->where('pat_id', $pat_id)->delete(); // Mengembalikan 200 return $this->respondDeleted([ 'status' => 'success', 'message' => "Patient ID with {$pat_id} deleted successfully." ]); } catch (\Exception $e) { return $this->failServerError("Internal server error: " . $e->getMessage()); } } }