341 lines
8.4 KiB
PHP
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);
|
|
}
|
|
} |