Update (insert, patch & get/show) Patient Pattat dan perbaikan Patcom
This commit is contained in:
parent
bd899819cf
commit
7db10f5cc6
@ -70,8 +70,9 @@ class PatientModel extends Model {
|
|||||||
|
|
||||||
// Default nested structures
|
// Default nested structures
|
||||||
$patient['PatIdt'] = null;
|
$patient['PatIdt'] = null;
|
||||||
|
$patient['PatCom'] = null;
|
||||||
$patient['PatAtt'] = [];
|
$patient['PatAtt'] = [];
|
||||||
|
|
||||||
foreach ($rows as $row) {
|
foreach ($rows as $row) {
|
||||||
if ($row['IdentifierType'] && $row['Identifier'] && !$patient['PatIdt']) {
|
if ($row['IdentifierType'] && $row['Identifier'] && !$patient['PatIdt']) {
|
||||||
$patient['PatIdt'] = [
|
$patient['PatIdt'] = [
|
||||||
@ -80,6 +81,10 @@ class PatientModel extends Model {
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($row['Comment']) {
|
||||||
|
$patient['PatCom'] = $row['Comment'];
|
||||||
|
}
|
||||||
|
|
||||||
if ($row['Address']) {
|
if ($row['Address']) {
|
||||||
$patient['PatAtt'][] = ['Address' => $row['Address']];
|
$patient['PatAtt'][] = ['Address' => $row['Address']];
|
||||||
}
|
}
|
||||||
@ -111,14 +116,14 @@ class PatientModel extends Model {
|
|||||||
$patcom['InternalPID'] = $newInternalPID;
|
$patcom['InternalPID'] = $newInternalPID;
|
||||||
$db->table('patcom')->insert($patcom);
|
$db->table('patcom')->insert($patcom);
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
if (!empty($patatt)) {
|
if (!empty($patatt)) {
|
||||||
foreach ($patatt as &$row) {
|
foreach ($patatt as &$row) {
|
||||||
$row['InternalPID'] = $newInternalPID;
|
$row['InternalPID'] = $newInternalPID;
|
||||||
}
|
}
|
||||||
$db->table('patatt')->upsertBatch($patatt);
|
$db->table('patatt')->upsertBatch($patatt);
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
$db->transComplete();
|
$db->transComplete();
|
||||||
|
|
||||||
if ($db->transStatus() === false) {
|
if ($db->transStatus() === false) {
|
||||||
@ -137,7 +142,8 @@ class PatientModel extends Model {
|
|||||||
$db = \Config\Database::connect();
|
$db = \Config\Database::connect();
|
||||||
$patidt = $input['PatIdt'] ?? [];
|
$patidt = $input['PatIdt'] ?? [];
|
||||||
$patatt = $input['PatAtt'] ?? [];
|
$patatt = $input['PatAtt'] ?? [];
|
||||||
$patcom['Comment'] = $input['Comment'] ?? [];
|
$patcom['Comment'] = $input['PatCom'] ?? [];
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$db->transStart();
|
$db->transStart();
|
||||||
$InternalPID = $input['InternalPID'];
|
$InternalPID = $input['InternalPID'];
|
||||||
@ -160,23 +166,74 @@ class PatientModel extends Model {
|
|||||||
if ($exists) {
|
if ($exists) {
|
||||||
$db->table('patcom')->where('InternalPID', $InternalPID)->update($patcom);
|
$db->table('patcom')->where('InternalPID', $InternalPID)->update($patcom);
|
||||||
} else {
|
} else {
|
||||||
$patidt['InternalPID'] = $InternalPID;
|
$patcom['InternalPID'] = $InternalPID;
|
||||||
$db->table('patcom')->insert($patcom);
|
$db->table('patcom')->insert($patcom);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$db->table('patcom')->where('InternalPID', $InternalPID)->delete();
|
$db->table('patcom')->where('InternalPID', $InternalPID)->delete();
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
|
$now = date('Y-m-d H:i:s');
|
||||||
if (!empty($patatt)) {
|
if (!empty($patatt)) {
|
||||||
$db->table('patatt')->where('InternalPID', $InternalPID)->delete();
|
// Ambil daftar address aktif (DelDate IS NULL) di DB
|
||||||
foreach ($patatt as $row) {
|
$oldActive = $db->table('patatt')
|
||||||
$row['InternalPID'] = $InternalPID;
|
->select('Address')
|
||||||
$db->table('patatt')->insert($row);
|
->where('InternalPID', $InternalPID)
|
||||||
}
|
->where('DelDate', null)
|
||||||
|
->get()->getResultArray();
|
||||||
|
$oldActive = array_column($oldActive, 'Address');
|
||||||
|
|
||||||
|
// Normalisasi & dedup input baru (berdasarkan Address)
|
||||||
|
$mapNew = [];
|
||||||
|
foreach ($patatt as $row) {
|
||||||
|
if (!isset($row['Address'])) continue;
|
||||||
|
$mapNew[$row['Address']] = $row; // overwrite duplikat di input
|
||||||
|
}
|
||||||
|
$newData = array_keys($mapNew);
|
||||||
|
|
||||||
|
// Hitung yang perlu ditambah & dihapus
|
||||||
|
$added = array_diff($newData, $oldActive); // baru (belum aktif)
|
||||||
|
$removed = array_diff($oldActive, $newData); // dulu aktif tapi hilang di input
|
||||||
|
|
||||||
|
|
||||||
|
// 1) Soft delete yang dihapus
|
||||||
|
if (!empty($removed)) {
|
||||||
|
$db->table('patatt')
|
||||||
|
->where('InternalPID', $InternalPID)
|
||||||
|
->whereIn('Address', $removed)
|
||||||
|
->set('DelDate', $now)
|
||||||
|
->update();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2) Tambahkan yang baru
|
||||||
|
foreach ($added as $addr) {
|
||||||
|
$data = $mapNew[$addr];
|
||||||
|
$data['InternalPID'] = $InternalPID;
|
||||||
|
|
||||||
|
// Coba REACTIVATE satu baris yang pernah di-soft delete (kalau ada)
|
||||||
|
$builder = $db->table('patatt');
|
||||||
|
$builder->set('DelDate', null);
|
||||||
|
// Kalau ada kolom lain yang mau di-update saat re-activate, set di sini juga
|
||||||
|
// mis: $builder->set('Note', $data['Note'] ?? null);
|
||||||
|
|
||||||
|
$builder->where('InternalPID', $InternalPID)
|
||||||
|
->where('Address', $addr)
|
||||||
|
->where('(DelDate IS NOT NULL)', null, false)
|
||||||
|
->orderBy('PatAttID', 'DESC')
|
||||||
|
->limit(1)
|
||||||
|
->update();
|
||||||
|
|
||||||
|
if ($db->affectedRows() === 0) {
|
||||||
|
// Tidak ada baris soft-deleted untuk alamat ini → INSERT baru
|
||||||
|
$db->table('patatt')->insert($data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
$db->table('patatt')->where('InternalPID', $InternalPID)->delete();
|
// Input kosong → semua yang masih aktif di-soft delete
|
||||||
|
$db->table('patatt')->where('InternalPID', $InternalPID)->where('DelDate', null)->set('DelDate', $now)->update();
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
$db->transComplete();
|
$db->transComplete();
|
||||||
|
|
||||||
if ($db->transStatus() === false) {
|
if ($db->transStatus() === false) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user