insertBatch($patatt); } public function updatePatAtt(array $patatt, string $InternalPID) { // Ambil daftar address aktif saat ini dari DB $oldActive = $this->getActiveAddresses($InternalPID); // Normalisasi input baru (hapus duplikat & pastikan punya key 'Address') $mapNew = []; foreach ($patatt as $row) { if (empty($row['Address'])) continue; $mapNew[$row['Address']] = $row; // overwrite duplikat } $newData = array_keys($mapNew); // Hitung data yang ditambah & dihapus $added = array_diff($newData, $oldActive); // address baru $removed = array_diff($oldActive, $newData); // address lama dihapus // Soft delete yang dihapus if (!empty($removed)) { $this->softDeleteByAddresses($InternalPID, $removed); } // Tambahkan / re-activate yang baru foreach ($added as $addr) { $data = $mapNew[$addr]; $data['InternalPID'] = $InternalPID; // Coba re-activate dulu $this->reactivateAddress($InternalPID, $addr); // Cek apakah ada baris yang di-update (re-activate) if ($this->db->affectedRows() === 0) { // Tidak ada baris lama yang dihapus → insert baru $this->insert($data); } } } public function deletePatAtt(string $InternalPID) { $this->where('InternalPID', $InternalPID)->delete(); } // Dapatkan daftar alamat aktif berdasarkan InternalPID public function getActiveAddresses(string $InternalPID): array { $rows = $this->select('Address')->where('InternalPID', $InternalPID)->where('DelDate', null)->findAll(); return array_column($rows, 'Address'); } // Soft delete beberapa address sekaligus public function softDeleteByAddresses(string $InternalPID, array $addresses) { if (empty($addresses)) return; $this->where('InternalPID', $InternalPID)->whereIn('Address', $addresses)->delete(); } // Reactivate (hapus DelDate) 1 address jika pernah dihapus // Return true jika berhasil re-activate public function reactivateAddress(string $InternalPID, string $Address): bool { return $this->where('InternalPID', $InternalPID)->where('Address', $Address)->where('DelDate IS NOT NULL', null, false)->set('DelDate', null)->orderBy('PatAttID', 'DESC')->limit(1)->update(); } }