Files
silaras-rssa/app/Controllers/Pasien.php
T
2026-06-03 14:49:09 +07:00

341 lines
8.4 KiB
PHP

<?php
namespace App\Controllers;
use App\Models\PasienModel;
class Pasien extends BaseController
{
public function __construct()
{
$session = session();
// Jika belum login
if (!$session->get('logged_in')) {
header('Location: ' . base_url('login'));
exit;
}
$timeout = 600;
if (
$session->get('last_activity') &&
(time() - $session->get('last_activity')) > $timeout
) {
$session->remove([
'id',
'nama',
'username',
'role',
'logged_in',
'last_activity'
]);
$session->setFlashdata(
'error',
'Sesi Anda telah berakhir karena tidak ada aktivitas selama 10 menit.'
);
header('Location: ' . base_url('login'));
exit;
}
$session->set('last_activity', time());
}
public function login()
{
if (session()->get('logged_in')) {
return redirect()->to('/');
}
return view('auth/login');
}
public function dashboard()
{
$db = \Config\Database::connect();
$builder = $db->table('register_ambulans');
$data = [
'total' => (clone $builder)->countAllResults(),
'emergency' => (clone $builder)
->where('order_type', 'True Emergency')
->countAllResults(),
'non' => (clone $builder)
->where('order_type', 'Non Emergency')
->countAllResults(),
'pending' => (clone $builder)
->where('order_type', 'Pending Order')
->countAllResults(),
];
return view('dashboard', $data);
}
public function input()
{
$data['register'] = $this->generateRegister();
return view('input', $data);
}
public function aktif()
{
$db = \Config\Database::connect();
$builder = $db->table('register_ambulans r');
$builder->select('
r.id,
r.register,
r.rm,
r.order_type,
r.status,
r.fase,
r.prioritas,
r.created_at,
r.nama_penelpon,
r.no_penelpon,
p.nama,
p.gender,
p.alamat
');
$builder->join('pasien p', 'p.rm = r.rm', 'left');
$builder->orderBy('r.id', 'DESC');
$data['pasien'] = $builder->get()->getResultArray();
return view('pasien_aktif', $data);
}
public function next($id)
{
$db = \Config\Database::connect();
$builder = $db->table('register_ambulans');
$p = $builder->where('id', $id)->get()->getRowArray();
if (!$p) return redirect()->back();
$fase = $p['fase'] ?? 1;
if ($fase < 6) {
$fase++;
}
$status = ($fase == 6) ? 'Selesai' : 'Diproses';
$builder->where('id', $id)->update([
'fase' => $fase,
'status' => $status
]);
return redirect()->back();
}
public function create()
{
return view('pasien/create');
}
private function generateRegister()
{
$today = date('ymd');
$db = \Config\Database::connect();
$builder = $db->table('register_ambulans');
$builder->like('register', "AMB-$today", 'after');
$count = $builder->countAllResults();
$urutan = str_pad($count + 1, 3, '0', STR_PAD_LEFT);
return "AMB-$today-$urutan";
}
private function hitungUmur($tglLahir)
{
if (!$tglLahir) return '-';
$birth = new \DateTime($tglLahir);
$today = new \DateTime();
$umur = $today->diff($birth)->y;
return $umur . ' tahun';
}
public function simpan()
{
$db = \Config\Database::connect();
$rm = $this->request->getPost('no_rm');
if (empty($rm)) {
$rm = null;
}
// ================= CEK PASIEN =================
$pasien = null;
if ($rm) {
$pasien = $db->table('pasien')
->where('rm', $rm)
->get()
->getRowArray();
}
// ================= JIKA PASIEN BARU =================
if ($rm && !$pasien) {
$dataPasien = [
'rm' => $rm,
'atribut' => $this->request->getPost('panggilan_depan'),
'nama' => $this->request->getPost('nama'),
'gender' => $this->request->getPost('gender'),
'alamat' => $this->request->getPost('alamat'),
'tgl_lahir' => $this->request->getPost('tanggal_lahir'),
];
$db->table('pasien')->insert($dataPasien);
}
// ================= SIMPAN REGISTER =================
$dataRegister = [
'rm' => $rm,
'register' => $this->generateRegister(),
'order_type' => $this->request->getPost('order_type'),
'fase' => 1,
'status' => 'Predispatch',
];
$db->table('register_ambulans')->insert($dataRegister);
$registerId = $db->insertID();
$dataOrder = [
'register_id' => $registerId,
'nama_penelpon' => $this->request->getPost('nama_penelpon'),
'no_penelpon' => $this->request->getPost('no_penelpon'),
'kesadaran' => $this->request->getPost('kesadaran'),
'kategori' => $this->request->getPost('kategori'),
'pernafasan' => json_encode([
'sesak' => $this->request->getPost('sesak'),
'batuk' => $this->request->getPost('batuk'),
]),
'posisi' => json_encode([
'lokasi' => $this->request->getPost('posisi_pasien'),
'lainnya' => $this->request->getPost('posisi_lainnya')
]),
'keterbatasan' => $this->request->getPost('gerak'),
'nyeri' => json_encode([
'status' => $this->request->getPost('status_nyeri'),
'lokasi' => $this->request->getPost('lokasi_nyeri'),
'lain' => $this->request->getPost('nyeri_lain'),
]),
'suhu' => $this->request->getPost('suhu'),
'bahaya' => json_encode([
'status' => $this->request->getPost('bahaya'),
'detail' => $this->request->getPost('bahaya_detail')
]),
'berat_badan' => $this->request->getPost('berat_badan'),
'keluhan_utama' => $this->request->getPost('keluhan_utama'),
'tujuan' => $this->request->getPost('tujuan'),
'tujuan_detail' => $this->request->getPost('tujuan_detail'),
'persetujuan' => $this->request->getPost('persetujuan'),
'biaya' => $this->request->getPost('biaya'),
'validasi' => $this->request->getPost('validasi'),
'petugas_id' => $this->request->getPost('petugas_id'),
];
$db->table('pasien_order')->insert($dataOrder);
return redirect()->to('/pasien/aktif');
}
public function cekRM()
{
$model = new \App\Models\PasienModel();
$rm = $this->request->getPost('rm');
$data = $model->where('rm', $rm)->first();
if ($data) {
return $this->response->setJSON([
'status' => 'found',
'data' => $data
]);
}
return $this->response->setJSON([
'status' => 'not_found'
]);
}
public function linkRM()
{
$db = \Config\Database::connect();
$registerId = $this->request->getPost('register_id');
$rm = $this->request->getPost('rm');
$db->table('register_ambulans')
->where('id', $registerId)
->update(['rm' => $rm]);
return $this->response->setJSON([
'status' => 'success'
]);
}
public function search()
{
$q = $this->request->getPost('q');
$db = \Config\Database::connect();
$data = $db->table('pasien')
->like('rm', $q)
->orLike('nama', $q)
->limit(10)
->get()
->getResultArray();
return $this->response->setJSON([
'data' => $data
]);
}
public function predispatch($id)
{
$db = \Config\Database::connect();
// ================= REGISTER + PASIEN =================
$data['pasien'] = $db->table('register_ambulans r')
->select('r.*, p.nama, p.alamat, p.gender, p.tgl_lahir')
->join('pasien p', 'p.rm = r.rm', 'left')
->where('r.id', $id)
->get()
->getRowArray();
// ================= UMUR =================
$data['pasien']['umur'] = $this->hitungUmur($data['pasien']['tgl_lahir'] ?? null);
// ================= ORDER + PETUGAS =================
$order = $db->table('pasien_order o')
->select('o.*, pg.nama as petugas_nama')
->join('pegawai pg', 'pg.id = o.petugas_id', 'left')
->where('o.register_id', $id)
->get()
->getRowArray();
$data['order'] = $order ?? [];
return view('predispatch', $data);
}
}