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); } }