Update Patient
This commit is contained in:
parent
01921d753a
commit
d8b68b923a
@ -251,116 +251,253 @@ class Patient extends Controller {
|
||||
|
||||
|
||||
// OK - Done
|
||||
// public function update($InternalPID = null) {
|
||||
|
||||
// try {
|
||||
|
||||
// $InternalPID = (int) $InternalPID;
|
||||
|
||||
// $input = $this->request->getJSON(true);
|
||||
|
||||
// $dataPatient = [
|
||||
// "PatientID" => $input['PatientID'] ?? null,
|
||||
// "AlternatePID" => $input['AlternatePID'] ?? null,
|
||||
// "Prefix" => $input['Prefix'] ?? null,
|
||||
// "NameFirst" => $input['NameFirst'] ?? null,
|
||||
// "NameMiddle" => $input['NameMiddle'] ?? null,
|
||||
// "NameMaiden" => $input['NameMaiden'] ?? null,
|
||||
// "NameLast" => $input['NameLast'] ?? null,
|
||||
// "Suffix" => $input['Suffix'] ?? null,
|
||||
// "NameAlias" => $input['NameAlias'] ?? null,
|
||||
// "Gender" => isset($input['Gender']) ? (int) $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,
|
||||
// "ZIP" => $input['ZIP'] ?? null,
|
||||
// "EmailAddress1" => $input['EmailAddress1'] ?? null,
|
||||
// "EmailAddress2" => $input['EmailAddress2'] ?? null,
|
||||
// "Phone" => $input['Phone'] ?? null,
|
||||
// "MobilePhone" => $input['MobilePhone'] ?? null,
|
||||
// "RaceID" => isset($input['RaceID']) ? (int) $input['RaceID'] : null,
|
||||
// "IntCountryID" => isset($input['IntCountryID']) ? (int) $input['IntCountryID'] : null,
|
||||
// "MaritalStatus" => $input['MaritalStatus'] ?? null,
|
||||
// "ReligionID" => isset($input['ReligionID']) ? (int) $input['ReligionID'] : null,
|
||||
// "EthnicID" => isset($input['EthnicID']) ? (int) $input['EthnicID'] : null,
|
||||
// "Citizenship" => $input['Citizenship'] ?? null,
|
||||
// "DeathIndicator" => isset($input['DeathIndicator']) ? (int) $input['DeathIndicator'] : null,
|
||||
// 'DeathDateTime' => $input['DeathDateTime'] ?: null,
|
||||
// "CreateDate" => date('Y-m-d H:i:s'),
|
||||
// "DelDate" => null,
|
||||
// // Linkto
|
||||
// // Mother
|
||||
// // AccountNumber
|
||||
// ];
|
||||
|
||||
// $rulesDataPatient = [
|
||||
// 'PatientID' => 'required|is_unique[patient.PatientID]|max_length[50]',
|
||||
// 'AlternatePID' => 'permit_empty|max_length[50]',
|
||||
// 'NameFirst' => 'required|min_length[1]|max_length[255]',
|
||||
// 'EmailAddress1' => 'required|is_unique[patient.EmailAddress1]',
|
||||
// 'DeathIndicator' => 'required',
|
||||
// 'Gender' => 'required'
|
||||
// ];
|
||||
|
||||
// $dataPatidt = [
|
||||
// "IdentifierType" => $input['IdentifierType'] ?? null,
|
||||
// "Identifier" => $input['Identifier'] ?? null,
|
||||
// "CreateDate" => date('Y-m-d H:i:s'),
|
||||
// ];
|
||||
|
||||
// $rulesDataPatidt = [
|
||||
// 'Identifier' => 'required|is_unique[patidt.Identifier]',
|
||||
// ];
|
||||
|
||||
// $existingPatient = $this->db->table('patient')->where('InternalPID', $InternalPID)->get()->getRowArray();
|
||||
|
||||
// // Mengembalikan 404
|
||||
// if (empty($existingPatient)) {
|
||||
// return $this->failNotFound('Patient with ID ' . $InternalPID . ' not found.');
|
||||
// }
|
||||
|
||||
// // Request dari client tidak valid atau tidak bisa diproses oleh server - 400
|
||||
// if (!$this->validateData($dataPatient, $rules)) {
|
||||
// return $this->failValidationErrors($this->validator->getErrors());
|
||||
// }
|
||||
|
||||
// $allowedUpdateFields = [
|
||||
// 'NameFirst', 'NameLast', 'NameMiddle',
|
||||
// 'PatientID', 'AlternatePID', 'Birthdate', 'PlaceOfBirth',
|
||||
// 'Street_1', 'Street_2', 'Street_3', 'City', 'Province', 'ZIP',
|
||||
// 'EmailAddress1', 'EmailAddress2', 'Phone', 'MobilePhone', 'Mother', 'AccountNumber'
|
||||
// ];
|
||||
|
||||
// $datas = [];
|
||||
// foreach ($allowedUpdateFields as $field) {
|
||||
// if (isset($dataPatient[$field])) {
|
||||
// $datas[$field] = $dataPatient[$field];
|
||||
// }
|
||||
// }
|
||||
|
||||
// if (empty($dataPatient)) {
|
||||
// return $this->failValidationError('No data provided for update.');
|
||||
// }
|
||||
|
||||
// $this->db->table('patient')->where('InternalPID', $InternalPID)->update($dataPatient);
|
||||
|
||||
// // Sukses & Insert = 201 - Kirim data patient ID
|
||||
// return $this->respondCreated([
|
||||
// 'status' => 'success',
|
||||
// 'message' => 'Patient updated successfully',
|
||||
// 'data' => $dataPatient
|
||||
// ], 201);
|
||||
|
||||
// } catch (\Exception $e) {
|
||||
// // Error Server = 500
|
||||
// return $this->failServerError('Something went wrong '.$e->getMessage());
|
||||
// }
|
||||
// }
|
||||
public function update($InternalPID = null) {
|
||||
|
||||
try {
|
||||
|
||||
$InternalPID = (int) $InternalPID;
|
||||
if (!$InternalPID || !is_numeric($InternalPID)) {
|
||||
return $this->respond(['status' => 'error', 'message' => 'Invalid or missing InternalPID'], 400);
|
||||
}
|
||||
|
||||
$input = $this->request->getJSON(true);
|
||||
if (!$input) {
|
||||
return $this->respond(['status' => 'error', 'message' => 'Invalid JSON input'], 400);
|
||||
}
|
||||
|
||||
// Cek apakah data patient ada
|
||||
$patient = $this->db->table('patient')->where('InternalPID', $InternalPID)->get()->getRowArray();
|
||||
if (!$patient) {
|
||||
return $this->respond(['status' => 'error', 'message' => 'Patient not found'], 404);
|
||||
}
|
||||
|
||||
$LinkTo = null;
|
||||
if (!empty($input['LinkTo']) && is_array($input['LinkTo'])) {
|
||||
$ids = [];
|
||||
foreach ($input['LinkTo'] as $row) {
|
||||
if (isset($row['InternalPID']) && is_numeric($row['InternalPID'])) {
|
||||
$ids[] = (int)$row['InternalPID'];
|
||||
}
|
||||
}
|
||||
$LinkTo = implode(',', $ids);
|
||||
}
|
||||
|
||||
// Data untuk update patient
|
||||
$dataPatient = [
|
||||
"PatientID" => $input['PatientID'] ?? null,
|
||||
"AlternatePID" => $input['AlternatePID'] ?? null,
|
||||
"Prefix" => $input['Prefix'] ?? null,
|
||||
"NameFirst" => $input['NameFirst'] ?? null,
|
||||
"NameMiddle" => $input['NameMiddle'] ?? null,
|
||||
"NameMaiden" => $input['NameMaiden'] ?? null,
|
||||
"NameLast" => $input['NameLast'] ?? null,
|
||||
"Suffix" => $input['Suffix'] ?? null,
|
||||
"NameAlias" => $input['NameAlias'] ?? null,
|
||||
"Gender" => isset($input['Gender']) ? (int) $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,
|
||||
"ZIP" => $input['ZIP'] ?? null,
|
||||
"EmailAddress1" => $input['EmailAddress1'] ?? null,
|
||||
"EmailAddress2" => $input['EmailAddress2'] ?? null,
|
||||
"Phone" => $input['Phone'] ?? null,
|
||||
"MobilePhone" => $input['MobilePhone'] ?? null,
|
||||
"RaceID" => isset($input['RaceID']) ? (int) $input['RaceID'] : null,
|
||||
"IntCountryID" => isset($input['IntCountryID']) ? (int) $input['IntCountryID'] : null,
|
||||
"MaritalStatus" => $input['MaritalStatus'] ?? null,
|
||||
"ReligionID" => isset($input['ReligionID']) ? (int) $input['ReligionID'] : null,
|
||||
"EthnicID" => isset($input['EthnicID']) ? (int) $input['EthnicID'] : null,
|
||||
"Citizenship" => $input['Citizenship'] ?? null,
|
||||
"DeathIndicator" => isset($input['DeathIndicator']) ? (int) $input['DeathIndicator'] : null,
|
||||
'DeathDateTime' => $input['DeathDateTime'] ?: null,
|
||||
"CreateDate" => date('Y-m-d H:i:s'),
|
||||
"DelDate" => null,
|
||||
// Linkto
|
||||
// Mother
|
||||
// AccountNumber
|
||||
"PatientID" => $input['PatientID'] ?? $patient['PatientID'],
|
||||
"AlternatePID" => $input['AlternatePID'] ?? $patient['AlternatePID'],
|
||||
"Prefix" => $input['Prefix'] ?? $patient['Prefix'],
|
||||
"NameFirst" => $input['NameFirst'] ?? $patient['NameFirst'],
|
||||
"NameMiddle" => $input['NameMiddle'] ?? $patient['NameMiddle'],
|
||||
"NameMaiden" => $input['NameMaiden'] ?? $patient['NameMaiden'],
|
||||
"NameLast" => $input['NameLast'] ?? $patient['NameLast'],
|
||||
"Suffix" => $input['Suffix'] ?? $patient['Suffix'],
|
||||
"NameAlias" => $input['NameAlias'] ?? $patient['NameAlias'],
|
||||
"Gender" => isset($input['Gender']) && is_numeric($input['Gender']) ? (int)$input['Gender'] : $patient['Gender'],
|
||||
"PlaceOfBirth" => $input['PlaceOfBirth'] ?? $patient['PlaceOfBirth'],
|
||||
"Birthdate" => $input['Birthdate'] ?: $patient['Birthdate'],
|
||||
"Street_1" => $input['Street_1'] ?? $patient['Street_1'],
|
||||
"Street_2" => $input['Street_2'] ?? $patient['Street_2'],
|
||||
"Street_3" => $input['Street_3'] ?? $patient['Street_3'],
|
||||
"City" => $input['City'] ?? $patient['City'],
|
||||
"Province" => $input['Province'] ?? $patient['Province'],
|
||||
"ZIP" => $input['ZIP'] ?? $patient['ZIP'],
|
||||
"EmailAddress1" => $input['EmailAddress1'] ?? $patient['EmailAddress1'],
|
||||
"EmailAddress2" => $input['EmailAddress2'] ?? $patient['EmailAddress2'],
|
||||
"Phone" => $input['Phone'] ?? $patient['Phone'],
|
||||
"MobilePhone" => $input['MobilePhone'] ?? $patient['MobilePhone'],
|
||||
"RaceID" => isset($input['RaceID']) && is_numeric($input['RaceID']) ? (int)$input['RaceID'] : $patient['RaceID'],
|
||||
"IntCountryID" => isset($input['IntCountryID']) && is_numeric($input['IntCountryID']) ? (int)$input['IntCountryID'] : $patient['IntCountryID'],
|
||||
"MaritalStatus" => $input['MaritalStatus'] ?? $patient['MaritalStatus'],
|
||||
"ReligionID" => isset($input['ReligionID']) && is_numeric($input['ReligionID']) ? (int)$input['ReligionID'] : $patient['ReligionID'],
|
||||
"EthnicID" => isset($input['EthnicID']) && is_numeric($input['EthnicID']) ? (int)$input['EthnicID'] : $patient['EthnicID'],
|
||||
"Citizenship" => $input['Citizenship'] ?? $patient['Citizenship'],
|
||||
"DeathIndicator" => isset($input['DeathIndicator']) && is_numeric($input['DeathIndicator']) ? (int)$input['DeathIndicator'] : $patient['DeathIndicator'],
|
||||
'DeathDateTime' => $input['DeathDateTime'] ?: $patient['DeathDateTime'],
|
||||
"LinkTo" => $LinkTo,
|
||||
];
|
||||
|
||||
// Atur aturan validasi dengan pengecualian is_unique untuk InternalPID ini
|
||||
$rulesDataPatient = [
|
||||
'PatientID' => 'required|is_unique[patient.PatientID]|max_length[50]',
|
||||
'PatientID' => "required|max_length[50]|is_unique[patient.PatientID,InternalPID,{$InternalPID}]",
|
||||
'AlternatePID' => 'permit_empty|max_length[50]',
|
||||
'NameFirst' => 'required|min_length[1]|max_length[255]',
|
||||
'EmailAddress1' => 'required|is_unique[patient.EmailAddress1]',
|
||||
'EmailAddress1' => "required|is_unique[patient.EmailAddress1,InternalPID,{$InternalPID}]",
|
||||
'DeathIndicator' => 'required',
|
||||
'Gender' => 'required'
|
||||
];
|
||||
|
||||
// Ambil data patidt
|
||||
$patidt = $this->db->table('patidt')->where('InternalPID', $InternalPID)->get()->getRowArray();
|
||||
$dataPatidt = [
|
||||
"IdentifierType" => $input['IdentifierType'] ?? null,
|
||||
"Identifier" => $input['Identifier'] ?? null,
|
||||
"CreateDate" => date('Y-m-d H:i:s'),
|
||||
"IdentifierType" => $input['Identity']['IdentifierType'] ?? ($patidt['IdentifierType'] ?? null),
|
||||
"Identifier" => $input['Identity']['Identifier'] ?? ($patidt['Identifier'] ?? null),
|
||||
];
|
||||
|
||||
$rulesDataPatidt = [
|
||||
'Identifier' => 'required|is_unique[patidt.Identifier]',
|
||||
];
|
||||
|
||||
$existingPatient = $this->db->table('patient')->where('InternalPID', $InternalPID)->get()->getRowArray();
|
||||
|
||||
// Mengembalikan 404
|
||||
if (empty($existingPatient)) {
|
||||
return $this->failNotFound('Patient with ID ' . $InternalPID . ' not found.');
|
||||
}
|
||||
|
||||
// Request dari client tidak valid atau tidak bisa diproses oleh server - 400
|
||||
if (!$this->validateData($dataPatient, $rules)) {
|
||||
return $this->failValidationErrors($this->validator->getErrors());
|
||||
}
|
||||
|
||||
$allowedUpdateFields = [
|
||||
'NameFirst', 'NameLast', 'NameMiddle',
|
||||
'PatientID', 'AlternatePID', 'Birthdate', 'PlaceOfBirth',
|
||||
'Street_1', 'Street_2', 'Street_3', 'City', 'Province', 'ZIP',
|
||||
'EmailAddress1', 'EmailAddress2', 'Phone', 'MobilePhone', 'Mother', 'AccountNumber'
|
||||
'Identifier' => "required|is_unique[patidt.Identifier,InternalPID,{$InternalPID}]"
|
||||
];
|
||||
|
||||
$datas = [];
|
||||
foreach ($allowedUpdateFields as $field) {
|
||||
if (isset($dataPatient[$field])) {
|
||||
$datas[$field] = $dataPatient[$field];
|
||||
}
|
||||
// Validasi
|
||||
if (!$this->validateData($dataPatient, $rulesDataPatient)) {
|
||||
return $this->respond([
|
||||
'status' => 'error',
|
||||
'message' => 'Validation failed (patient)',
|
||||
'errors' => $this->validator->getErrors()
|
||||
], 400);
|
||||
}
|
||||
|
||||
if (empty($dataPatient)) {
|
||||
return $this->failValidationError('No data provided for update.');
|
||||
if (!$this->validateData($dataPatidt, $rulesDataPatidt)) {
|
||||
return $this->respond([
|
||||
'status' => 'error',
|
||||
'message' => 'Validation failed (patidt)',
|
||||
'errors' => $this->validator->getErrors()
|
||||
], 400);
|
||||
}
|
||||
|
||||
// Transaksi update
|
||||
$this->db->transStart();
|
||||
|
||||
$this->db->table('patient')->where('InternalPID', $InternalPID)->update($dataPatient);
|
||||
$dbError = $this->db->error();
|
||||
if (!empty($dbError['message'])) {
|
||||
$this->db->transRollback();
|
||||
return $this->failServerError('Update patient failed: ' . $dbError['message']);
|
||||
}
|
||||
|
||||
// Sukses & Insert = 201 - Kirim data patient ID
|
||||
return $this->respondCreated([
|
||||
'status' => 'success',
|
||||
$this->db->table('patidt')->where('InternalPID', $InternalPID)->update($dataPatidt);
|
||||
$dbError = $this->db->error();
|
||||
if (!empty($dbError['message'])) {
|
||||
$this->db->transRollback();
|
||||
return $this->failServerError('Update patidt failed: ' . $dbError['message']);
|
||||
}
|
||||
|
||||
$this->db->transComplete();
|
||||
|
||||
if ($this->db->transStatus() === false) {
|
||||
$dbError = $this->db->error();
|
||||
return $this->failServerError('Failed to update patient data (transaction rolled back): ' . ($dbError['message'] ?? 'Unknown error'));
|
||||
}
|
||||
|
||||
return $this->respond([
|
||||
'status' => 'success',
|
||||
'message' => 'Patient updated successfully',
|
||||
'data' => $dataPatient
|
||||
], 201);
|
||||
'data' => $InternalPID
|
||||
], 200);
|
||||
|
||||
} catch (\Exception $e) {
|
||||
// Error Server = 500
|
||||
return $this->failServerError('Something went wrong '.$e->getMessage());
|
||||
}
|
||||
$this->db->transRollback();
|
||||
return $this->failServerError('Something went wrong: ' . $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// OK - Done
|
||||
public function delete($InternalPID = null) {
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user