879 lines
24 KiB
PHP
879 lines
24 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)
|
|
->where('status !=', 'batal')
|
|
->countAllResults(),
|
|
|
|
'emergency' => (clone $builder)
|
|
->where('order_type', 'True Emergency')
|
|
->where('status !=', 'batal')
|
|
->countAllResults(),
|
|
|
|
'non' => (clone $builder)
|
|
->where('order_type', 'Non Emergency')
|
|
->where('status !=', 'batal')
|
|
->countAllResults(),
|
|
|
|
'pending' => (clone $builder)
|
|
->where('order_type', 'Pending Order')
|
|
->where('status !=', 'batal')
|
|
->countAllResults(),
|
|
];
|
|
|
|
return view('dashboard', $data);
|
|
}
|
|
|
|
public function input($id = null)
|
|
{
|
|
$db = \Config\Database::connect();
|
|
|
|
$edit_mode = false;
|
|
$pasien = [];
|
|
$order = [];
|
|
$register = null;
|
|
|
|
// ================= EDIT MODE =================
|
|
if (!empty($id)) {
|
|
|
|
$edit_mode = true;
|
|
|
|
$pasien = $db->table('register_ambulans r')
|
|
->select('
|
|
r.id,
|
|
r.rm,
|
|
r.register,
|
|
r.order_type,
|
|
r.status,
|
|
r.fase,
|
|
r.nama_penelpon,
|
|
r.no_penelpon,
|
|
|
|
p.atribut,
|
|
p.nama,
|
|
p.alamat,
|
|
p.gender,
|
|
p.tgl_lahir
|
|
')
|
|
->join('pasien p', 'p.rm = r.rm', 'left')
|
|
->where('r.id', $id)
|
|
->get()
|
|
->getRowArray();
|
|
|
|
// ❌ kalau data tidak ada → redirect
|
|
if (!$pasien) {
|
|
return redirect()->to('/pasien/aktif')
|
|
->with('error', 'Data tidak ditemukan');
|
|
}
|
|
|
|
// ================= ORDER =================
|
|
$order = $db->table('pasien_order o')
|
|
->select('o.*, pg.nama as petugas_nama, ra.order_type')
|
|
->join('pegawai pg', 'pg.id = o.petugas_id', 'left')
|
|
->join('register_ambulans ra', 'ra.id = o.register_id', 'left')
|
|
->where('o.register_id', $id)
|
|
->get()
|
|
->getRowArray();
|
|
|
|
// fallback biar view aman
|
|
if (!$order) {
|
|
$order = [];
|
|
}
|
|
|
|
// register ambil dari DB
|
|
$register = $pasien['register'] ?? null;
|
|
|
|
} else {
|
|
|
|
// ================= INPUT BARU =================
|
|
$register = $this->generateRegister();
|
|
|
|
// kosongkan biar view tidak error
|
|
$pasien = [];
|
|
$order = [];
|
|
}
|
|
|
|
return view('input', [
|
|
'pasien' => $pasien,
|
|
'order' => $order,
|
|
'edit_mode' => $edit_mode,
|
|
'id' => $id,
|
|
'register' => $register
|
|
]);
|
|
}
|
|
|
|
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->where('r.status !=', 'batal');
|
|
|
|
$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 (empty($tglLahir) || $tglLahir == '0000-00-00') return '-';
|
|
|
|
try {
|
|
$birth = new \DateTime($tglLahir);
|
|
$today = new \DateTime();
|
|
|
|
$diff = $today->diff($birth);
|
|
|
|
return sprintf(
|
|
'%d tahun %d bulan %d hari',
|
|
$diff->y,
|
|
$diff->m,
|
|
$diff->d
|
|
);
|
|
} catch (\Exception $e) {
|
|
return '-';
|
|
}
|
|
}
|
|
|
|
public function simpan()
|
|
{
|
|
$db = \Config\Database::connect();
|
|
|
|
// VALIDASI
|
|
$rules = [
|
|
'rm' => 'required|numeric',
|
|
'nama' => 'required',
|
|
'gender' => 'required|in_list[Laki-laki,Perempuan]',
|
|
'tanggal_lahir' => 'required|valid_date',
|
|
'alamat' => 'required',
|
|
|
|
'nama_penelpon' => 'required',
|
|
'no_penelpon' => 'required|numeric',
|
|
|
|
'order_type' => 'required',
|
|
'kategori' => 'required',
|
|
|
|
'kesadaran' => 'required',
|
|
'suhu' => 'required',
|
|
|
|
'persetujuan' => 'required|in_list[setuju,tidak,menunggu]',
|
|
'tujuan' => 'required',
|
|
|
|
'petugas_id' => 'required'
|
|
];
|
|
|
|
// VALIDASI CONDITIONAL
|
|
if ($this->request->getPost('status_nyeri') === 'ya') {
|
|
$rules['lokasi_nyeri'] = 'required';
|
|
}
|
|
|
|
if ($this->request->getPost('bahaya') === 'ada') {
|
|
$rules['bahaya_detail'] = 'required';
|
|
}
|
|
|
|
if ($this->request->getPost('posisi_pasien') === 'lainnya') {
|
|
$rules['posisi_lainnya'] = 'required';
|
|
}
|
|
|
|
// EKSEKUSI VALIDASI
|
|
if (!$this->validate($rules)) {
|
|
return redirect()->back()
|
|
->withInput()
|
|
->with('errors', $this->validator->getErrors());
|
|
}
|
|
// ================= AMBIL INPUT =================
|
|
$rm = $this->request->getPost('rm');
|
|
|
|
// normalisasi RM → hanya angka
|
|
if (!empty($rm)) {
|
|
$rm = preg_replace('/[^0-9]/', '', $rm);
|
|
} else {
|
|
$rm = null;
|
|
}
|
|
|
|
// ================= DATA PASIEN =================
|
|
$dataPasien = [
|
|
'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') ?? '',
|
|
];
|
|
|
|
// ================= CEK PASIEN =================
|
|
if ($rm) {
|
|
|
|
$pasien = $db->table('pasien')
|
|
->where('rm', $rm)
|
|
->get()
|
|
->getRowArray();
|
|
|
|
if ($pasien) {
|
|
// ✅ UPDATE pasien lama
|
|
$db->table('pasien')
|
|
->where('rm', $rm)
|
|
->update($dataPasien);
|
|
} else {
|
|
// ✅ INSERT pasien baru
|
|
$dataPasien['rm'] = $rm;
|
|
$db->table('pasien')->insert($dataPasien);
|
|
}
|
|
}
|
|
|
|
// ================= REGISTER =================
|
|
$db->table('register_ambulans')->insert([
|
|
'rm' => $rm,
|
|
'register' => $this->generateRegister(),
|
|
'order_type' => $this->request->getPost('order_type'),
|
|
'fase' => 1,
|
|
'status' => 'Predispatch',
|
|
|
|
// penelpon
|
|
'nama_penelpon' => $this->request->getPost('nama_penelpon') ?? '',
|
|
'no_penelpon' => $this->request->getPost('no_penelpon') ?? '',
|
|
]);
|
|
|
|
// ambil id (register_id saat edit)
|
|
$id = $this->request->getPost('id');
|
|
|
|
$petugasId = $this->request->getPost('petugas_id');
|
|
|
|
if (empty($petugasId)) {
|
|
$petugasId = $this->request->getPost('petugas_id_old');
|
|
}
|
|
// ================= DATA ORDER =================
|
|
$dataOrder = [
|
|
'keluhan_utama' => $this->request->getPost('keluhan_utama') ?? '',
|
|
'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') ?? '',
|
|
'lantai' => $this->request->getPost('posisi_lantai') ?? '',
|
|
'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') ?? '',
|
|
'tujuan' => $this->request->getPost('tujuan') ?? '',
|
|
'tujuan_detail' => $this->request->getPost('tujuan_detail') ?? '',
|
|
'informasi_lain'=> $this->request->getPost('informasi_lain') ?? '',
|
|
|
|
'persetujuan' => $this->request->getPost('persetujuan') ?? 'menunggu',
|
|
'biaya' => $this->request->getPost('biaya') ?? 0,
|
|
'validasi' => $this->request->getPost('validasi') ?? '',
|
|
'petugas_id' => $petugasId,
|
|
];
|
|
|
|
|
|
// ================= INSERT / UPDATE =================
|
|
if ($id) {
|
|
|
|
// ✅ EDIT MODE → UPDATE
|
|
$db->table('pasien_order')
|
|
->where('register_id', $id)
|
|
->update($dataOrder);
|
|
|
|
} else {
|
|
|
|
// ✅ INPUT BARU → INSERT
|
|
$registerId = $db->insertID(); // dari register_ambulans
|
|
|
|
$dataOrder['register_id'] = $registerId;
|
|
|
|
$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();
|
|
|
|
// ================= ROLE + MODE EDIT =================
|
|
$role = session()->get('role');
|
|
$edit_mode = $this->request->getGet('edit') == '1';
|
|
|
|
// ================= REGISTER + PASIEN =================
|
|
$pasien = $db->table('register_ambulans r')
|
|
->select('
|
|
r.*,
|
|
COALESCE(NULLIF(p.atribut, ""), r.atribut) as atribut,
|
|
COALESCE(NULLIF(p.nama, ""), r.nama_pasien) as nama,
|
|
COALESCE(NULLIF(p.alamat, ""), r.alamat) as alamat,
|
|
COALESCE(NULLIF(p.gender, ""), r.gender) as gender,
|
|
COALESCE(NULLIF(p.tgl_lahir, ""), r.tgl_lahir) as tgl_lahir
|
|
')
|
|
->join('pasien p', 'p.rm = r.rm', 'left')
|
|
->where('r.id', $id)
|
|
->get()
|
|
->getRowArray();
|
|
|
|
if (!$pasien) {
|
|
return redirect()->to('/pasien/aktif');
|
|
}
|
|
|
|
// ================= UMUR =================
|
|
$pasien['umur'] = $this->hitungUmur($pasien['tgl_lahir'] ?? null);
|
|
|
|
// ================= ORDER =================
|
|
$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();
|
|
|
|
// fallback aman
|
|
if (!$order) {
|
|
$order = [];
|
|
}
|
|
|
|
// ================= VIEW SWITCH =================
|
|
if ($edit_mode) {
|
|
return view('input', [
|
|
'pasien' => $pasien,
|
|
'order' => $order,
|
|
'role' => $role,
|
|
'edit_mode' => true,
|
|
'register' => $pasien['register']
|
|
]);
|
|
}
|
|
|
|
return view('predispatch', [
|
|
'pasien' => $pasien,
|
|
'order' => $order,
|
|
'role' => $role,
|
|
'edit_mode' => false
|
|
]);
|
|
}
|
|
|
|
public function list()
|
|
{
|
|
$db = \Config\Database::connect();
|
|
|
|
// 🔽 DEFAULT BULAN SEKARANG
|
|
$periode = $this->request->getGet('periode') ?? date('Y-m');
|
|
$bulan = date('m', strtotime($periode));
|
|
$tahun = date('Y', strtotime($periode));
|
|
|
|
// ================= LIST DATA =================
|
|
$builder = $db->table('register_ambulans r');
|
|
|
|
$builder->select('
|
|
r.id,
|
|
r.register,
|
|
r.rm,
|
|
r.order_type,
|
|
r.fase,
|
|
r.status,
|
|
r.created_at,
|
|
p.nama,
|
|
p.atribut,
|
|
p.gender,
|
|
p.alamat,
|
|
p.tgl_lahir,
|
|
o.tujuan
|
|
');
|
|
|
|
$builder->join('pasien p', 'p.rm = r.rm', 'left');
|
|
$builder->join('pasien_order o', 'o.register_id = r.id', 'left');
|
|
|
|
// filter bulan
|
|
$builder->where('MONTH(r.created_at)', $bulan);
|
|
$builder->where('YEAR(r.created_at)', $tahun);
|
|
|
|
$builder->orderBy('r.created_at', 'DESC');
|
|
|
|
$data['pasien'] = $builder->get()->getResultArray();
|
|
|
|
// ================= REKAP =================
|
|
|
|
// TOTAL
|
|
$data['total'] = $db->table('register_ambulans r')
|
|
->where('MONTH(r.created_at)', $bulan)
|
|
->where('YEAR(r.created_at)', $tahun)
|
|
->countAllResults();
|
|
|
|
// ✅ TERLAYANI (fase = 6)
|
|
$data['terlayani'] = $db->table('register_ambulans r')
|
|
->where('MONTH(r.created_at)', $bulan)
|
|
->where('YEAR(r.created_at)', $tahun)
|
|
->where('r.fase', 6)
|
|
->countAllResults();
|
|
|
|
// ⏳ DALAM PELAYANAN
|
|
$data['dalam_pelayanan'] = $db->table('register_ambulans r')
|
|
->where('MONTH(r.created_at)', $bulan)
|
|
->where('YEAR(r.created_at)', $tahun)
|
|
->where('r.fase <', 6)
|
|
->where('r.status !=', 'batal')
|
|
->countAllResults();
|
|
|
|
// ❌ BATAL
|
|
$data['batal'] = $db->table('register_ambulans r')
|
|
->where('MONTH(r.created_at)', $bulan)
|
|
->where('YEAR(r.created_at)', $tahun)
|
|
->where('r.status', 'batal')
|
|
->countAllResults();
|
|
|
|
$data['periode'] = $periode;
|
|
|
|
return view('pasien/list', $data);
|
|
}
|
|
|
|
public function edit($id)
|
|
{
|
|
$db = \Config\Database::connect();
|
|
|
|
// ambil data register + pasien
|
|
$data['pasien'] = $db->table('register_ambulans r')
|
|
->select('r.*, p.nama, p.atribut, p.gender, p.alamat, p.tgl_lahir')
|
|
->join('pasien p', 'p.rm = r.rm', 'left')
|
|
->where('r.id', $id)
|
|
->get()
|
|
->getRowArray();
|
|
|
|
// ambil order
|
|
$data['order'] = $db->table('pasien_order')
|
|
->where('register_id', $id)
|
|
->get()
|
|
->getRowArray();
|
|
|
|
return view('pasien/edit', $data);
|
|
}
|
|
|
|
public function update($id)
|
|
{
|
|
$db = \Config\Database::connect();
|
|
$role = session()->get('role');
|
|
|
|
// ================= REGISTER (TIDAK BOLEH DIUBAH) =================
|
|
$register = $db->table('register_ambulans')
|
|
->where('id', $id)
|
|
->get()
|
|
->getRowArray();
|
|
|
|
$rm = $this->request->getPost('rm');
|
|
|
|
// ================= PASIEN =================
|
|
$dataPasien = [
|
|
'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'),
|
|
];
|
|
|
|
// RM HANYA ADMIN
|
|
if ($role === 'admin') {
|
|
$db->table('register_ambulans')
|
|
->where('id', $id)
|
|
->update(['rm' => $rm]);
|
|
}
|
|
|
|
// update pasien by RM lama
|
|
$db->table('pasien')
|
|
->where('rm', $register['rm'])
|
|
->update($dataPasien);
|
|
|
|
// ================= UPDATE ORDER TYPE =================
|
|
$db->table('register_ambulans')
|
|
->where('id', $id)
|
|
->update([
|
|
'order_type' => $this->request->getPost('order_type')
|
|
]);
|
|
// ================= ORDER (SEMUA BOLEH DIEDIT) =================
|
|
$statusNyeri = $this->request->getPost('status_nyeri') ?? '';
|
|
$lokasiNyeri = $this->request->getPost('lokasi_nyeri') ?? [];
|
|
$nyeriLain = $this->request->getPost('nyeri_lain') ?? '';
|
|
$petugasId = $this->request->getPost('petugas_id');
|
|
if (empty($petugasId)) {
|
|
$petugasId = $this->request->getPost('petugas_id_old');
|
|
}
|
|
$dataOrder = [
|
|
'keluhan_utama' => $this->request->getPost('keluhan_utama'),
|
|
'kesadaran' => $this->request->getPost('kesadaran'),
|
|
|
|
'pernafasan' => json_encode([
|
|
'sesak' => $this->request->getPost('sesak') ?? '',
|
|
'batuk' => $this->request->getPost('batuk') ?? '',
|
|
], JSON_UNESCAPED_UNICODE),
|
|
|
|
'posisi' => json_encode([
|
|
'lokasi' => $this->request->getPost('posisi_pasien') ?? '',
|
|
'lantai' => $this->request->getPost('posisi_lantai') ?? '',
|
|
'lainnya' => $this->request->getPost('posisi_lainnya') ?? '',
|
|
]),
|
|
|
|
'keterbatasan' => $this->request->getPost('gerak') ?? '',
|
|
|
|
'nyeri' => json_encode([
|
|
'status' => $statusNyeri,
|
|
'lokasi' => is_array($lokasiNyeri) ? $lokasiNyeri : [$lokasiNyeri],
|
|
'lain' => $nyeriLain ?? ''
|
|
], JSON_UNESCAPED_UNICODE),
|
|
|
|
'suhu' => $this->request->getPost('suhu'),
|
|
|
|
'bahaya' => json_encode([
|
|
'status' => $this->request->getPost('bahaya') ?? '',
|
|
'detail' => $this->request->getPost('bahaya_detail') ?? '',
|
|
], JSON_UNESCAPED_UNICODE),
|
|
|
|
'berat_badan' => $this->request->getPost('berat_badan'),
|
|
|
|
'tujuan' => $this->request->getPost('tujuan'),
|
|
'tujuan_detail' => $this->request->getPost('tujuan_detail'),
|
|
'persetujuan' => $this->request->getPost('persetujuan'),
|
|
'biaya' => $this->request->getPost('biaya'),
|
|
'informasi_lain' => $this->request->getPost('informasi_lain') ?? '',
|
|
'validasi' => $this->request->getPost('validasi'),
|
|
'petugas_id' => $petugasId,
|
|
];
|
|
$db->table('pasien_order')
|
|
->where('register_id', $id)
|
|
->update($dataOrder);
|
|
|
|
return redirect()->to('/pasien/predispatch/' . $id);
|
|
}
|
|
|
|
public function index()
|
|
{
|
|
$db = \Config\Database::connect();
|
|
$builder = $db->table('pasien');
|
|
|
|
$periode = $this->request->getGet('periode');
|
|
|
|
if ($periode) {
|
|
$bulan = date('m', strtotime($periode));
|
|
$tahun = date('Y', strtotime($periode));
|
|
|
|
$builder->where('MONTH(tgl_masuk)', $bulan);
|
|
$builder->where('YEAR(tgl_masuk)', $tahun);
|
|
}
|
|
|
|
// ambil data
|
|
$data['pasien'] = $builder->get()->getResultArray();
|
|
|
|
// kirim ke view
|
|
return view('list', $data);
|
|
}
|
|
|
|
public function detail($id)
|
|
{
|
|
$db = \Config\Database::connect();
|
|
|
|
$pasien = $db->table('register_ambulans r')
|
|
->select('r.*, p.nama, p.alamat, p.gender')
|
|
->join('pasien p', 'p.rm = r.rm', 'left')
|
|
->where('r.id', $id) // 🔥 INI KUNCI
|
|
->get()
|
|
->getRowArray();
|
|
|
|
if (!$pasien) {
|
|
return redirect()->to('/pasien/list');
|
|
}
|
|
|
|
return view('pasien/detail_riwayat', [
|
|
'p' => $pasien
|
|
]);
|
|
}
|
|
|
|
public function hapus($id)
|
|
{
|
|
$db = \Config\Database::connect();
|
|
|
|
// =========================
|
|
// VALIDASI PASSWORD
|
|
// =========================
|
|
$password = $this->request->getPost('admin_password');
|
|
|
|
if ($password !== 'admin119') {
|
|
return redirect()->back()
|
|
->with('error', 'Password admin salah');
|
|
}
|
|
|
|
// =========================
|
|
// CEK DATA
|
|
// =========================
|
|
$cek = $db->table('register_ambulans')
|
|
->where('id', $id)
|
|
->get()
|
|
->getRowArray();
|
|
|
|
if (!$cek) {
|
|
return redirect()->back()
|
|
->with('error', 'Data tidak ditemukan');
|
|
}
|
|
|
|
// =========================
|
|
// HAPUS RELASI
|
|
// =========================
|
|
$db->table('pasien_order')
|
|
->where('register_id', $id)
|
|
->delete();
|
|
|
|
// =========================
|
|
// HAPUS DATA
|
|
// =========================
|
|
$db->table('register_ambulans')
|
|
->where('id', $id)
|
|
->delete();
|
|
|
|
return redirect()->to('/pasien/list')
|
|
->with('success', 'Data berhasil dihapus');
|
|
}
|
|
|
|
public function batal()
|
|
{
|
|
$data = $this->request->getJSON(true);
|
|
|
|
$id = $data['id'] ?? null;
|
|
$alasan = $data['alasan'] ?? '';
|
|
|
|
if (!$id) {
|
|
return $this->response->setJSON([
|
|
'status' => 'error',
|
|
'message' => 'ID tidak ditemukan'
|
|
]);
|
|
}
|
|
|
|
$db = \Config\Database::connect();
|
|
|
|
$db->table('register_ambulans')
|
|
->where('id', $id)
|
|
->update([
|
|
'status' => 'batal',
|
|
'fase' => 0, // 🔥 WAJIB biar stop total
|
|
'alasan_batal' => $alasan
|
|
]);
|
|
|
|
return $this->response->setJSON([
|
|
'status' => 'ok'
|
|
]);
|
|
}
|
|
|
|
public function aktifkan()
|
|
{
|
|
$data = $this->request->getJSON(true);
|
|
|
|
$id = $data['id'] ?? null;
|
|
|
|
if (!$id) {
|
|
return $this->response->setJSON([
|
|
'status' => 'error'
|
|
]);
|
|
}
|
|
|
|
$db = \Config\Database::connect();
|
|
|
|
$db->table('register_ambulans')
|
|
->where('id', $id)
|
|
->update([
|
|
'status' => 'Predispatch',
|
|
'fase' => 1,
|
|
'alasan_batal' => null
|
|
]);
|
|
|
|
return $this->response->setJSON([
|
|
'status' => 'ok'
|
|
]);
|
|
}
|
|
} |