clqms-be/app/Controllers/Patient.php

315 lines
13 KiB
PHP
Raw Normal View History

<?php
namespace App\Controllers;
use CodeIgniter\API\ResponseTrait;
use CodeIgniter\Controller;
use CodeIgniter\Database\RawSql;
class Patient extends Controller {
use ResponseTrait;
public function __construct() {
$this->db = \Config\Database::connect();
}
2025-07-23 11:03:46 +07:00
// OK
public function index() {
2025-07-23 11:03:46 +07:00
try {
2025-08-01 13:37:13 +07:00
$PatientID = $this->request->getVar('PatientID');
$AlternatePID = $this->request->getVar('AlternatePID');
$Prefix = $this->request->getVar('Prefix');
$name = $this->request->getVar('name');
$Suffix = $this->request->getVar('Suffix');
$BirthDate = $this->request->getVar('BirthDate');
$startDate = $this->request->getVar('startDate');
$endDate = $this->request->getVar('endDate');
$builder = $this->db->table('Patient');
2025-07-23 11:03:46 +07:00
2025-08-01 13:37:13 +07:00
if ($name !== null) {
2025-07-23 11:03:46 +07:00
$sql = "LOWER(CONCAT_WS(' ', IFNULL(prefix,''), IFNULL(name_first,''), IFNULL(name_middle,''), IFNULL(name_last,''), IFNULL(name_maiden,''), IFNULL(suffix,'')))";
$rawSql = new RawSql($sql);
2025-08-01 13:37:13 +07:00
$builder->like($rawSql, $name, 'both');
2025-07-23 11:03:46 +07:00
}
2025-08-01 13:37:13 +07:00
if ($PatientID !== null) { $builder->where('PatientID', $pat_num); }
if ($AlternatePID !== null) { $builder->where('AlternatePID', $pat_altnum); }
if ($BirthDate !== null) { $builder->where('BirthDate', $pat_dob); }
/*
if ($startDate !== null || $endDate !== null) {
2025-07-23 11:03:46 +07:00
$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'); }
}
2025-08-01 13:37:13 +07:00
*/
2025-07-23 11:03:46 +07:00
$filteredPatients = $builder->get()->getResultArray();
2025-07-23 11:03:46 +07:00
// Data pasien tidak ada mengembalikan - success 200
if (empty($filteredPatients)) {
return $this->respond([
2025-07-16 09:19:47 +07:00
'status' => 'success',
2025-07-23 11:03:46 +07:00
'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.');
2025-07-23 11:03:46 +07:00
}
}
2025-07-23 11:03:46 +07:00
// OK
public function show($id = null) {
2025-07-23 11:03:46 +07:00
try {
$builder = $this->db->table('Patient');
2025-08-01 13:37:13 +07:00
$patient = $builder->where('PatientID', $id)->get()->getRowArray();
2025-07-23 11:03:46 +07:00
// Data pasien tidak ada mengembalikan - success 200
if (empty($patient)) {
return $this->respond([
2025-07-16 09:19:47 +07:00
'status' => 'success',
2025-07-23 11:03:46 +07:00
'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');
}
2025-07-16 09:19:47 +07:00
}
2025-07-23 11:03:46 +07:00
// OK
public function create() {
2025-07-23 11:03:46 +07:00
try {
$input = $this->request->getJSON(true);
$data = [
2025-08-01 13:37:13 +07:00
"PatientID" => $input['PatientID'] ?? null,
"AlternatePID" => $input['AlternatePID'] ?? null,
"Prefix" => $input['Prefix'] ?? null,
"NameFirst" => $input['NameFirst'] ?? null,
"NameMiddle" => $input['NameMiddle'] ?? null,
"NameLast" => $input['NameLast'] ?? null,
"NameMaiden" => $input['NameMaiden'] ?? null,
"Suffix" => $input['Suffix'] ?? null,
"NameAlias" => $input['NameAlias'] ?? null,
"Gender" => $input['Gender'] ?? null,
"PlaceOfBirth" => $input['PlaceOfBirth'] ?? null,
"BirthDate" => $input['BirthDate'] ?? null,
"Street_1" => $input['Street_1'] ?? null,
"Street_2" => $input['Street_2'] ?? null,
"Street_3" => $input['Street_3'] ?? null,
"City" => $input['City'] ?? null,
"Province" => $input['Province'] ?? null,
"CountryID" => $input['CountryID'] ?? null,
"ZIP" => $input['ZIP'] ?? null,
"EmailAddress1" => $input['EmailAddress1'] ?? null,
"EmailAddress2" => $input['EmailAddress2'] ?? null,
"Phone" => $input['Phone'] ?? null,
"Mobilephone" => $input['Mobilephone'] ?? null,
"Mother" => $input['Mother'] ?? null,
"Accountnumber" => $input['Accountnumber'] ?? null,
"RaceID" => $input['RaceID'] ?? null,
"MaritalStatus" => $input['MaritalStatus'] ?? null,
"ReligionID" => $input['ReligionID'] ?? null,
"EthnicID" => $input['EthnicID'] ?? null,
"Citizenship" => $input['Citizenship'] ?? null,
"DeathIndicator" => $input['DeathIndicator'] ?? null,
"DeathDateTime" => $input['DeathDateTime'] ?? null,
"LinkTo" => $input['LinkTo'] ?? null,
"create_date" => date('Y-m-d H:i:s')
2025-07-23 11:03:46 +07:00
];
$rules = [
2025-08-01 13:37:13 +07:00
'PatientID' => 'required|is_unique[patients.pat_num]|max_length[50]',
'NameFirst' => 'required|min_length[3]|max_length[255]',
'NameMiddle' => 'permit_empty',
'NameMaiden' => 'permit_empty',
'NameLast' => 'permit_empty',
2025-07-28 16:44:23 +07:00
// 'birth_date' => 'permit_empty|valid_date[Y-m-d]|not_in_list[0000-00-00]',
2025-08-01 13:37:13 +07:00
'AlternatePID' => 'permit_empty|max_length[50]',
'Street_1' => 'permit_empty',
'Street_2' => 'permit_empty',
'Street_3' => 'permit_empty',
'City' => 'permit_empty',
2025-07-23 11:03:46 +07:00
];
// 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);
}
2025-08-01 13:37:13 +07:00
$this->db->table('Patient')->insert($data);
2025-07-23 11:03:46 +07:00
$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) {
2025-07-23 11:03:46 +07:00
// Error Server = 500
2025-07-28 16:44:23 +07:00
return $this->failServerError('Something went wrong'.$e);
2025-07-23 11:03:46 +07:00
}
}
2025-07-23 11:03:46 +07:00
// OK
2025-08-01 13:37:13 +07:00
public function update($PatientID = null) {
2025-07-23 11:03:46 +07:00
try {
$input = $this->request->getJSON(true);
2025-07-23 11:03:46 +07:00
$data = [
2025-08-01 13:37:13 +07:00
"AlternatePID" => $input['AlternatePID'] ?? null,
"Prefix" => $input['Prefix'] ?? null,
"NameFirst" => $input['NameFirst'] ?? null,
"NameMiddle" => $input['NameMiddle'] ?? null,
"NameLast" => $input['NameLast'] ?? null,
"NameMaiden" => $input['NameMaiden'] ?? null,
"Suffix" => $input['Suffix'] ?? null,
"NameAlias" => $input['NameAlias'] ?? null,
"Gender" => $input['Gender'] ?? null,
"PlaceOfBirth" => $input['PlaceOfBirth'] ?? null,
"BirthDate" => $input['BirthDate'] ?? null,
"Street_1" => $input['Street_1'] ?? null,
"Street_2" => $input['Street_2'] ?? null,
"Street_3" => $input['Street_3'] ?? null,
"City" => $input['City'] ?? null,
"Province" => $input['Province'] ?? null,
"CountryID" => $input['CountryID'] ?? null,
"ZIP" => $input['ZIP'] ?? null,
"EmailAddress1" => $input['EmailAddress1'] ?? null,
"EmailAddress2" => $input['EmailAddress2'] ?? null,
"Phone" => $input['Phone'] ?? null,
"Mobilephone" => $input['Mobilephone'] ?? null,
"Mother" => $input['Mother'] ?? null,
"Accountnumber" => $input['Accountnumber'] ?? null,
"RaceID" => $input['RaceID'] ?? null,
"MaritalStatus" => $input['MaritalStatus'] ?? null,
"ReligionID" => $input['ReligionID'] ?? null,
"EthnicID" => $input['EthnicID'] ?? null,
"Citizenship" => $input['Citizenship'] ?? null,
"DeathIndicator" => $input['DeathIndicator'] ?? null,
"DeathDateTime" => $input['DeathDateTime'] ?? null,
"LinkTo" => $input['LinkTo'] ?? null,
"create_date" => date('Y-m-d H:i:s')
2025-07-23 11:03:46 +07:00
];
2025-08-01 13:37:13 +07:00
$rules = [
'NameFirst' => 'required|min_length[3]|max_length[255]',
'NameMiddle' => 'permit_empty',
'NameMaiden' => 'permit_empty',
'NameLast' => 'permit_empty',
// 'birth_date' => 'permit_empty|valid_date[Y-m-d]|not_in_list[0000-00-00]',
'AlternatePID' => 'permit_empty|max_length[50]',
'Street_1' => 'permit_empty',
'Street_2' => 'permit_empty',
'Street_3' => 'permit_empty',
'City' => 'permit_empty',
];
$existingPatient = $this->db->table('Patient')->where('PatientID', $PatientID)->get()->getRowArray();
2025-07-23 11:03:46 +07:00
// Mengembalikan 404
if (empty($existingPatient)) {
2025-08-01 13:37:13 +07:00
return $this->failNotFound('Patient with ID ' . $PatientID . ' not found.');
}
2025-07-23 11:03:46 +07:00
// Request dari client tidak valid atau tidak bisa diproses oleh server - 400
if (!$this->validateData($data, $rules)) {
return $this->failValidationErrors($this->validator->getErrors());
}
$allowedUpdateFields = [
2025-08-01 13:37:13 +07:00
'NameFirst', 'NameLast', 'NameMiddle',
'PatientID', 'AlternatePID', 'BirthDate', 'PlaceOfBirth',
'Street_1', 'Street_2', 'Street_3', 'City', 'Province', 'ZIP',
'Emailaddress1', 'Emailaddress2', 'Phone', 'Mobilephone', 'Mother', 'AccountNumber'
2025-07-23 11:03:46 +07:00
];
$datas = [];
foreach ($allowedUpdateFields as $field) {
if (isset($data[$field])) {
$datas[$field] = $data[$field];
}
}
if (empty($data)) {
return $this->failValidationError('No data provided for update.');
}
2025-08-01 13:37:13 +07:00
$this->db->table('Patient')->where('PatientID', $PatientID)->update($data);
2025-07-23 11:03:46 +07:00
// Sukses & Insert = 201 - Kirim data patient ID
return $this->respondCreated([
'status' => 'success',
'message' => 'Patient updated successfully',
'data' => $data
], 201);
2025-07-23 11:03:46 +07:00
} catch (\Exception $e) {
// Error Server = 500
return $this->failServerError('Something went wrong '.$e);
}
}
2025-07-23 11:03:46 +07:00
// OK
2025-08-01 13:37:13 +07:00
public function delete($PatientID = null) {
2025-07-23 11:03:46 +07:00
try {
2025-08-01 13:37:13 +07:00
if (!$PatientID) {
2025-07-23 11:03:46 +07:00
return $this->failValidationError('Patient ID is required.');
}
// Cari data pasien
2025-08-01 13:37:13 +07:00
$patient = $this->db->table('Patient')->where('PatientID', $PatientID)->get()->getRow();
2025-07-23 11:03:46 +07:00
if (!$patient) {
2025-08-01 13:37:13 +07:00
return $this->failNotFound("Patient ID with {$PatientID} not found.");
2025-07-23 11:03:46 +07:00
}
// Hapus data pasien berdasarkan pat_num
2025-08-01 13:37:13 +07:00
$this->db->table('Patient')->where('PatientID', $PatientID)->delete();
2025-07-23 11:03:46 +07:00
// Mengembalikan 200
return $this->respondDeleted([
'status' => 'success',
2025-08-01 13:37:13 +07:00
'message' => "Patient ID with {$PatientID} deleted successfully."
2025-07-23 11:03:46 +07:00
]);
} catch (\Exception $e) {
return $this->failServerError("Internal server error: " . $e->getMessage());
}
}
}