1670 lines
50 KiB
PHP
1670 lines
50 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\Hash;
|
|
use App\Exports\PasienExport;
|
|
use Maatwebsite\Excel\Facades\Excel;
|
|
use Carbon\Carbon;
|
|
use Illuminate\Support\Facades\Storage;
|
|
use App\Models\User;
|
|
|
|
class PasienController extends Controller
|
|
{
|
|
public function __construct()
|
|
{
|
|
if (session('role') === 'super_admin') {
|
|
abort(403);
|
|
}
|
|
}
|
|
public function index(Request $request)
|
|
{
|
|
if (session('role') === 'super_admin') {
|
|
return redirect('/dashboard');
|
|
}
|
|
$id_petugas = session('petugas_id');
|
|
|
|
if ($id_petugas === null) {
|
|
return redirect('/')->with('error', 'Session login hilang, silakan login ulang');
|
|
}
|
|
|
|
$petugas = DB::table('petugas')
|
|
->leftJoin('fasyankes', 'petugas.id_fasyankes', '=', 'fasyankes.id_fasyankes')
|
|
->where('petugas.id_petugas', $id_petugas)
|
|
->select(
|
|
'petugas.*',
|
|
'fasyankes.nama_fasyankes'
|
|
)
|
|
->first();
|
|
|
|
if (!$petugas) {
|
|
return redirect('/')->with('error', 'Data petugas tidak ditemukan');
|
|
}
|
|
|
|
$query = DB::table('users')
|
|
->leftJoin('pasien_medis', function ($join) {
|
|
$join->on('users.id_user', '=', 'pasien_medis.id_user')
|
|
->whereRaw('pasien_medis.id_medis = (
|
|
SELECT MIN(pm2.id_medis)
|
|
FROM pasien_medis pm2
|
|
WHERE pm2.id_user = users.id_user
|
|
)');
|
|
})
|
|
->select(
|
|
'users.id_user',
|
|
'pasien_medis.id_medis',
|
|
'users.nik',
|
|
'users.nama_lengkap',
|
|
'users.email',
|
|
'users.tgl_lahir',
|
|
'users.alamat',
|
|
DB::raw("
|
|
TRIM(
|
|
REGEXP_SUBSTR(
|
|
users.alamat,
|
|
'RT/RW[[:space:]]*[0-9]+/[0-9]+'
|
|
)
|
|
) AS rt_rw
|
|
"),
|
|
DB::raw("
|
|
TRIM(
|
|
SUBSTRING_INDEX(users.alamat, ', RT/RW', 1)
|
|
) AS dusun
|
|
"),
|
|
|
|
DB::raw("
|
|
TRIM(
|
|
REPLACE(
|
|
SUBSTRING_INDEX(
|
|
SUBSTRING_INDEX(users.alamat, ', Kecamatan', 1),
|
|
', Desa',
|
|
-1
|
|
),
|
|
'Desa ',
|
|
''
|
|
)
|
|
) AS desa
|
|
"),
|
|
|
|
DB::raw("
|
|
TRIM(
|
|
REPLACE(
|
|
SUBSTRING_INDEX(users.alamat, 'Kecamatan ', -1),
|
|
'Kecamatan ',
|
|
''
|
|
)
|
|
) AS kecamatan
|
|
"),
|
|
'users.no_telp',
|
|
'users.jenis_kelamin',
|
|
'users.nama_fasyankes',
|
|
'pasien_medis.diagnosa',
|
|
'pasien_medis.tgl_mulai_pengobatan',
|
|
'pasien_medis.status_kesehatan',
|
|
'pasien_medis.jam_minum'
|
|
)
|
|
->where('users.role', 'pasien');
|
|
|
|
// PETUGAS BIASA HANYA LIHAT FASYANKES SENDIRI
|
|
if ($petugas->role !== 'super_admin') {
|
|
$query->where('users.nama_fasyankes', $petugas->nama_fasyankes);
|
|
}
|
|
|
|
// SEARCH
|
|
if ($request->filled('search')) {
|
|
$search = $request->search;
|
|
|
|
$query->where(function ($q) use ($search) {
|
|
$q->where('users.nama_lengkap', 'LIKE', "%{$search}%")
|
|
->orWhere('users.nik', 'LIKE', "%{$search}%")
|
|
->orWhere('users.nama_fasyankes', 'LIKE', "%{$search}%");
|
|
|
|
if (session('role') == 'super_admin') {
|
|
$q->orWhere('users.email', 'LIKE', "%{$search}%");
|
|
}
|
|
});
|
|
}
|
|
|
|
// FILTER STATUS
|
|
if ($request->filled('status')) {
|
|
$query->where('pasien_medis.status_kesehatan', $request->status);
|
|
}
|
|
|
|
// FILTER DESA
|
|
if ($request->filled('desa')) {
|
|
|
|
$desa = strtoupper(trim($request->desa));
|
|
|
|
$query->whereRaw(
|
|
'UPPER(users.alamat) LIKE ?',
|
|
["%DESA {$desa}%"]
|
|
);
|
|
}
|
|
|
|
// FILTER FASYANKES
|
|
if ($request->filled('fasyankes')) {
|
|
$query->where('users.nama_fasyankes', $request->fasyankes);
|
|
}
|
|
|
|
// FILTER TANGGAL
|
|
if ($request->filled('start_date') && $request->filled('end_date')) {
|
|
|
|
$query->whereBetween(
|
|
'pasien_medis.tgl_mulai_pengobatan',
|
|
[$request->start_date, $request->end_date]
|
|
);
|
|
} elseif ($request->filled('start_date')) {
|
|
|
|
$query->where(
|
|
'pasien_medis.tgl_mulai_pengobatan',
|
|
'>=',
|
|
$request->start_date
|
|
);
|
|
}
|
|
|
|
$pasiens = $query
|
|
->orderBy('users.nama_lengkap', 'asc')
|
|
->paginate(20);
|
|
|
|
// AMBIL LIST FASYANKES UNTUK FILTER + FORM
|
|
$listFasyankes = DB::table('fasyankes')
|
|
->orderBy('nama_fasyankes', 'asc')
|
|
->get();
|
|
|
|
return view(
|
|
'data-pasien',
|
|
compact(
|
|
'pasiens',
|
|
'petugas',
|
|
'listFasyankes'
|
|
)
|
|
);
|
|
}
|
|
|
|
public function store(Request $request)
|
|
{
|
|
if (session('role') === 'super_admin') {
|
|
return redirect('/dashboard');
|
|
}
|
|
$id_petugas = session('petugas_id');
|
|
|
|
if (!$id_petugas) {
|
|
return redirect('/')->with('error', 'Session login hilang, silakan login ulang');
|
|
}
|
|
|
|
$petugas = DB::table('petugas')
|
|
->leftJoin('fasyankes', 'petugas.id_fasyankes', '=', 'fasyankes.id_fasyankes')
|
|
->where('petugas.id_petugas', $id_petugas)
|
|
->select(
|
|
'petugas.*',
|
|
'fasyankes.nama_fasyankes'
|
|
)
|
|
->first();
|
|
|
|
$request->validate([
|
|
'nik' => 'required|digits:16',
|
|
'nama' => 'required',
|
|
'email' => 'required|email',
|
|
'tgl_lahir' => 'required|date',
|
|
'telp' => 'required',
|
|
'jenis_kelamin' => 'required|in:L,P',
|
|
|
|
'dusun' => 'required',
|
|
'rtrw' => 'required',
|
|
'desa' => 'required',
|
|
'kecamatan' => 'required',
|
|
'riwayat' => 'required|array',
|
|
'riwayat.*.diagnosa' => 'required',
|
|
'riwayat.*.tgl_mulai' => 'required|date|before_or_equal:today',
|
|
'riwayat.*.tgl_selesai' => 'required|date',
|
|
'riwayat.*.jam_minum' => 'required',
|
|
'riwayat.*.status_kesehatan' => 'required|in:Masih Proses,Sembuh,Gagal,Meninggal',
|
|
'riwayat.*.file_awal' =>
|
|
'nullable|file|mimes:pdf,jpg,jpeg,png|max:5120',
|
|
|
|
'riwayat.*.file_56_hari' =>
|
|
'nullable|file|mimes:pdf,jpg,jpeg,png|max:5120',
|
|
|
|
'riwayat.*.file_168_hari' =>
|
|
'nullable|file|mimes:pdf,jpg,jpeg,png|max:5120',
|
|
]);
|
|
|
|
// CEK HANYA NIK (NIK TIDAK BOLEH DUPLIKAT)
|
|
$cekUserNik = DB::table('users')->where('nik', $request->nik)->first();
|
|
if ($cekUserNik) {
|
|
return redirect()->back()->with('error', 'Pasien sudah terdaftar di sistem / aplikasi mobile (NIK sudah digunakan).');
|
|
}
|
|
|
|
$alamatLengkap =
|
|
$request->dusun .
|
|
", RT/RW " . $request->rtrw .
|
|
", Desa " . $request->desa .
|
|
", Kecamatan " . $request->kecamatan;
|
|
|
|
$passwordOtomatis = date(
|
|
'dmY',
|
|
strtotime($request->tgl_lahir)
|
|
);
|
|
|
|
// SUPER ADMIN BISA PILIH FASYANKES
|
|
$namaFasyankes =
|
|
$petugas->role === 'super_admin'
|
|
? $request->nama_fasyankes
|
|
: $petugas->nama_fasyankes;
|
|
|
|
DB::transaction(function () use (
|
|
$request,
|
|
$alamatLengkap,
|
|
$passwordOtomatis,
|
|
$namaFasyankes,
|
|
$id_petugas
|
|
) {
|
|
|
|
$id_user = DB::table('users')->insertGetId([
|
|
'nik' => $request->nik,
|
|
'password' => Hash::make($passwordOtomatis),
|
|
'nama_lengkap' => strtoupper($request->nama),
|
|
'email' => $request->email,
|
|
'tgl_lahir' => $request->tgl_lahir,
|
|
'jenis_kelamin' => $request->jenis_kelamin,
|
|
'no_telp' => $request->telp,
|
|
'alamat' => strtoupper($alamatLengkap),
|
|
'nama_fasyankes' => $namaFasyankes,
|
|
'role' => 'pasien',
|
|
'created_at' => now(),
|
|
'updated_at' => now()
|
|
]);
|
|
|
|
// MULTI FILE UPLOAD (TABEL file_pasien)
|
|
// =========================
|
|
// SIMPAN SEMUA RIWAYAT
|
|
// =========================
|
|
|
|
if ($request->has('riwayat')) {
|
|
|
|
foreach ($request->riwayat as $index => $item) {
|
|
|
|
$id_medis = DB::table('pasien_medis')->insertGetId([
|
|
|
|
'id_user' => $id_user,
|
|
|
|
'pengobatan_ke' => $index + 1,
|
|
|
|
'diagnosa' => $item['diagnosa'] ?? null,
|
|
|
|
'tgl_mulai_pengobatan' => $item['tgl_mulai'] ?? null,
|
|
|
|
'tgl_estimasi_selesai' => $item['tgl_selesai'] ?? null,
|
|
|
|
'jam_minum' => $item['jam_minum'] ?? null,
|
|
|
|
'status_kesehatan' => $item['status_kesehatan'] ?? 'Masih Proses'
|
|
]);
|
|
|
|
$uploads = [
|
|
|
|
'file_awal' => 'awal',
|
|
|
|
'file_56_hari' => '56_hari',
|
|
|
|
'file_168_hari' => '168_hari'
|
|
|
|
];
|
|
|
|
foreach ($uploads as $field => $tahap) {
|
|
|
|
$file =
|
|
$request->file(
|
|
"riwayat.$index.$field"
|
|
);
|
|
|
|
if (!$file) {
|
|
continue;
|
|
}
|
|
|
|
$path =
|
|
$file->store(
|
|
'file_pasien',
|
|
'public'
|
|
);
|
|
|
|
DB::table('file_pasien')
|
|
->insert([
|
|
|
|
'id_user' => $id_user,
|
|
|
|
'id_medis' => $id_medis,
|
|
|
|
'tahap' => $tahap,
|
|
|
|
'nama_file' =>
|
|
$file->getClientOriginalName(),
|
|
|
|
'path_file' => $path,
|
|
|
|
'created_at' => now(),
|
|
|
|
'updated_at' => now()
|
|
]);
|
|
}
|
|
}
|
|
}
|
|
|
|
DB::table('log_aktivitas')->insert([
|
|
'id_petugas' => $id_petugas,
|
|
'aktivitas' => 'Menambahkan pasien baru: ' . $request->nama,
|
|
'created_at' => now(),
|
|
'updated_at' => now()
|
|
]);
|
|
});
|
|
|
|
return redirect()->back()->with(
|
|
'success',
|
|
'Pasien berhasil ditambahkan'
|
|
);
|
|
}
|
|
|
|
private function cekIzinUploadTahap($id_medis, $tahap)
|
|
{
|
|
if (session('role') === 'super_admin') {
|
|
return redirect('/dashboard');
|
|
}
|
|
$medis = DB::table('pasien_medis')
|
|
->where('id_medis', $id_medis)
|
|
->first();
|
|
|
|
if (!$medis) {
|
|
return false;
|
|
}
|
|
|
|
// TAMBAHAN INI
|
|
if (
|
|
in_array(
|
|
strtolower($medis->status_kesehatan),
|
|
['gagal', 'meninggal']
|
|
)
|
|
) {
|
|
return false;
|
|
}
|
|
|
|
$hariBerjalan =
|
|
Carbon::parse($medis->tgl_mulai_pengobatan)
|
|
->diffInDays(now());
|
|
|
|
if ($tahap == 'awal') {
|
|
return true;
|
|
}
|
|
|
|
if ($tahap == '56_hari') {
|
|
return $hariBerjalan >= 56;
|
|
}
|
|
|
|
if ($tahap == '168_hari') {
|
|
return $hariBerjalan >= 168;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public function update(Request $request, $id)
|
|
{
|
|
if (session('role') === 'super_admin') {
|
|
return redirect('/dashboard');
|
|
}
|
|
try {
|
|
|
|
$id_petugas = session('petugas_id');
|
|
|
|
$petugas = DB::table('petugas')
|
|
->leftJoin('fasyankes', 'petugas.id_fasyankes', '=', 'fasyankes.id_fasyankes')
|
|
->where('petugas.id_petugas', $id_petugas)
|
|
->select(
|
|
'petugas.*',
|
|
'fasyankes.nama_fasyankes'
|
|
)
|
|
->first();
|
|
|
|
$request->validate([
|
|
|
|
// =========================
|
|
// DATA IDENTITAS
|
|
// =========================
|
|
|
|
'nik' => 'required|digits:16|unique:users,nik,' . $id . ',id_user',
|
|
|
|
'nama' => 'required|string',
|
|
|
|
'email' => 'required|email',
|
|
|
|
'telp' => 'required',
|
|
|
|
'tgl_lahir' => 'required|date',
|
|
|
|
'jenis_kelamin' => 'required|in:L,P',
|
|
|
|
'dusun' => 'required',
|
|
|
|
'rtrw' => 'required',
|
|
|
|
'desa' => 'required',
|
|
|
|
'kecamatan' => 'required',
|
|
|
|
// =========================
|
|
// FASYANKES
|
|
// =========================
|
|
|
|
'nama_fasyankes' => session('role') == 'super_admin'
|
|
? 'required'
|
|
: 'nullable',
|
|
|
|
// =========================
|
|
// RIWAYAT PENGOBATAN
|
|
// =========================
|
|
|
|
'riwayat' => 'required|array|min:1',
|
|
|
|
'riwayat.*.diagnosa' => 'required',
|
|
|
|
'riwayat.*.jam_minum' => 'required',
|
|
|
|
'riwayat.*.tgl_mulai' => 'required|date|before_or_equal:today',
|
|
|
|
'riwayat.*.tgl_selesai' => 'required|date',
|
|
|
|
'riwayat.*.status_kesehatan' => 'required',
|
|
|
|
// =========================
|
|
// FILE LAB
|
|
// =========================
|
|
|
|
'riwayat.*.file_awal' =>
|
|
'nullable|file|mimes:pdf,jpg,jpeg,png|max:5120',
|
|
|
|
'riwayat.*.file_56_hari' =>
|
|
'nullable|file|mimes:pdf,jpg,jpeg,png|max:5120',
|
|
|
|
'riwayat.*.file_168_hari' =>
|
|
'nullable|file|mimes:pdf,jpg,jpeg,png|max:5120',
|
|
]);
|
|
|
|
$desa = trim($request->desa);
|
|
$kecamatan = trim($request->kecamatan);
|
|
|
|
// HAPUS PREFIX JIKA SUDAH ADA
|
|
$desa = preg_replace('/^Desa\s+/i', '', $desa);
|
|
|
|
$kecamatan = preg_replace('/^Kecamatan\s+/i', '', $kecamatan);
|
|
|
|
$alamatLengkap =
|
|
trim($request->dusun) .
|
|
", RT/RW " . trim($request->rtrw) .
|
|
", Desa " . $desa .
|
|
", Kecamatan " . $kecamatan;
|
|
|
|
$namaFasyankes =
|
|
$petugas->role === 'super_admin'
|
|
? $request->nama_fasyankes
|
|
: $petugas->nama_fasyankes;
|
|
|
|
DB::transaction(function () use (
|
|
$request,
|
|
$id,
|
|
$alamatLengkap,
|
|
$namaFasyankes,
|
|
$id_petugas
|
|
) {
|
|
|
|
// =========================
|
|
// UPDATE DATA USER
|
|
// =========================
|
|
|
|
DB::table('users')
|
|
->where('id_user', $id)
|
|
->update([
|
|
'nama_lengkap' => strtoupper($request->nama),
|
|
'nik' => $request->nik,
|
|
'email' => $request->email,
|
|
'no_telp' => $request->telp,
|
|
'jenis_kelamin' => $request->jenis_kelamin === 'L' ? 'L' : 'P',
|
|
'tgl_lahir' => $request->tgl_lahir,
|
|
'alamat' => strtoupper($alamatLengkap),
|
|
'nama_fasyankes' => $namaFasyankes,
|
|
'updated_at' => now()
|
|
]);
|
|
|
|
// =========================
|
|
// LOOP SEMUA RIWAYAT
|
|
// =========================
|
|
|
|
$idRiwayatTerkirim = [];
|
|
|
|
if ($request->has('riwayat')) {
|
|
|
|
foreach ($request->riwayat as $index => $item) {
|
|
|
|
// =========================
|
|
// UPDATE RIWAYAT LAMA
|
|
// =========================
|
|
|
|
if (!empty($item['id_medis'])) {
|
|
|
|
DB::table('pasien_medis')
|
|
->where('id_medis', $item['id_medis'])
|
|
->update([
|
|
|
|
'diagnosa' => $item['diagnosa'] ?? null,
|
|
|
|
'tgl_mulai_pengobatan' =>
|
|
$item['tgl_mulai'] ?? null,
|
|
|
|
'tgl_estimasi_selesai' =>
|
|
$item['tgl_selesai'] ?? null,
|
|
|
|
'jam_minum' =>
|
|
$item['jam_minum'] ?? null,
|
|
|
|
'status_kesehatan' =>
|
|
$item['status_kesehatan'] ?? 'Masih Proses',
|
|
|
|
]);
|
|
|
|
$idRiwayatTerkirim[] = $item['id_medis'];
|
|
|
|
$uploads = [
|
|
|
|
'file_awal' => 'awal',
|
|
|
|
'file_56_hari' => '56_hari',
|
|
|
|
'file_168_hari' => '168_hari'
|
|
|
|
];
|
|
|
|
foreach ($uploads as $field => $tahap) {
|
|
|
|
$file =
|
|
$request->file(
|
|
"riwayat.$index.$field"
|
|
);
|
|
|
|
if (!$file) {
|
|
continue;
|
|
}
|
|
|
|
if (
|
|
!$this->cekIzinUploadTahap(
|
|
$item['id_medis'],
|
|
$tahap
|
|
)
|
|
) {
|
|
|
|
throw new \Exception(
|
|
'Belum waktunya upload file'
|
|
);
|
|
}
|
|
|
|
$fileLama =
|
|
DB::table('file_pasien')
|
|
->where(
|
|
'id_medis',
|
|
$item['id_medis']
|
|
)
|
|
->where(
|
|
'tahap',
|
|
$tahap
|
|
)
|
|
->first();
|
|
|
|
if ($fileLama) {
|
|
|
|
if (
|
|
Storage::disk('public')
|
|
->exists(
|
|
$fileLama->path_file
|
|
)
|
|
) {
|
|
|
|
Storage::disk('public')
|
|
->delete(
|
|
$fileLama->path_file
|
|
);
|
|
}
|
|
|
|
DB::table('file_pasien')
|
|
->where(
|
|
'id_file',
|
|
$fileLama->id_file
|
|
)
|
|
->delete();
|
|
}
|
|
|
|
$path =
|
|
$file->store(
|
|
'file_pasien',
|
|
'public'
|
|
);
|
|
|
|
DB::table('file_pasien')
|
|
->insert([
|
|
|
|
'id_user' => $id,
|
|
|
|
'id_medis' => $item['id_medis'],
|
|
|
|
'tahap' => $tahap,
|
|
|
|
'nama_file' =>
|
|
$file->getClientOriginalName(),
|
|
|
|
'path_file' => $path,
|
|
|
|
'created_at' => now(),
|
|
|
|
'updated_at' => now()
|
|
]);
|
|
}
|
|
}
|
|
|
|
// =========================
|
|
// INSERT RIWAYAT BARU
|
|
// =========================
|
|
|
|
else {
|
|
|
|
$jumlahPengobatan = DB::table('pasien_medis')
|
|
->where('id_user', $id)
|
|
->count();
|
|
|
|
$newId = DB::table('pasien_medis')
|
|
->insertGetId([
|
|
|
|
'id_user' => $id,
|
|
|
|
'pengobatan_ke' => $jumlahPengobatan + 1,
|
|
|
|
'diagnosa' =>
|
|
$item['diagnosa'] ?? null,
|
|
|
|
'tgl_mulai_pengobatan' =>
|
|
$item['tgl_mulai'] ?? null,
|
|
|
|
'tgl_estimasi_selesai' =>
|
|
$item['tgl_selesai'] ?? null,
|
|
|
|
'jam_minum' =>
|
|
$item['jam_minum'] ?? null,
|
|
|
|
'status_kesehatan' =>
|
|
$item['status_kesehatan'] ?? 'Masih Proses',
|
|
]);
|
|
|
|
$idRiwayatTerkirim[] = $newId;
|
|
$uploads = [
|
|
|
|
'file_awal' => 'awal',
|
|
|
|
'file_56_hari' => '56_hari',
|
|
|
|
'file_168_hari' => '168_hari'
|
|
|
|
];
|
|
|
|
foreach ($uploads as $field => $tahap) {
|
|
|
|
$file =
|
|
$request->file(
|
|
"riwayat.$index.$field"
|
|
);
|
|
|
|
if (!$file) {
|
|
continue;
|
|
}
|
|
|
|
if (
|
|
!$this->cekIzinUploadTahap(
|
|
$newId,
|
|
$tahap
|
|
)
|
|
) {
|
|
continue;
|
|
}
|
|
|
|
$path =
|
|
$file->store(
|
|
'file_pasien',
|
|
'public'
|
|
);
|
|
|
|
DB::table('file_pasien')
|
|
->insert([
|
|
|
|
'id_user' => $id,
|
|
|
|
'id_medis' => $newId,
|
|
|
|
'tahap' => $tahap,
|
|
|
|
'nama_file' =>
|
|
$file->getClientOriginalName(),
|
|
|
|
'path_file' => $path,
|
|
|
|
'created_at' => now(),
|
|
|
|
'updated_at' => now()
|
|
]);
|
|
}
|
|
}
|
|
}
|
|
|
|
// =========================
|
|
// HAPUS RIWAYAT YANG DIHAPUS DARI FORM
|
|
// =========================
|
|
|
|
$riwayatLama = DB::table('pasien_medis')
|
|
->where('id_user', $id)
|
|
->pluck('id_medis')
|
|
->toArray();
|
|
|
|
$yangDihapus = array_diff(
|
|
$riwayatLama,
|
|
$idRiwayatTerkirim
|
|
);
|
|
|
|
if (!empty($yangDihapus)) {
|
|
|
|
// =========================
|
|
// HAPUS FILE DARI STORAGE
|
|
// =========================
|
|
|
|
$files = DB::table('file_pasien')
|
|
->whereIn('id_medis', $yangDihapus)
|
|
->get();
|
|
|
|
foreach ($files as $file) {
|
|
|
|
if (
|
|
$file->path_file &&
|
|
Storage::disk('public')->exists($file->path_file)
|
|
) {
|
|
|
|
Storage::disk('public')
|
|
->delete($file->path_file);
|
|
}
|
|
}
|
|
|
|
// =========================
|
|
// HAPUS FILE DATABASE
|
|
// =========================
|
|
|
|
DB::table('file_pasien')
|
|
->whereIn('id_medis', $yangDihapus)
|
|
->delete();
|
|
|
|
// =========================
|
|
// HAPUS RIWAYAT
|
|
// =========================
|
|
|
|
DB::table('pasien_medis')
|
|
->whereIn('id_medis', $yangDihapus)
|
|
->delete();
|
|
}
|
|
}
|
|
|
|
// =========================
|
|
// LOG AKTIVITAS
|
|
// =========================
|
|
|
|
DB::table('log_aktivitas')->insert([
|
|
'id_petugas' => $id_petugas,
|
|
'aktivitas' => 'Mengupdate data pasien ID: ' . $id,
|
|
'created_at' => now(),
|
|
'updated_at' => now()
|
|
]);
|
|
});
|
|
|
|
DashboardController::updateNotifikasiHariIni($id);
|
|
|
|
return redirect('/data-pasien')
|
|
->with('success', 'Data berhasil diupdate');
|
|
} catch (\Exception $e) {
|
|
|
|
return redirect()->back()
|
|
->with('error', $e->getMessage());
|
|
}
|
|
}
|
|
|
|
|
|
public function destroy($id)
|
|
{
|
|
if (session('role') === 'super_admin') {
|
|
return redirect('/dashboard');
|
|
}
|
|
$pasien = DB::table('users')
|
|
->where('id_user', $id)
|
|
->first();
|
|
|
|
// PUTUSKAN RELASI SKRINING DENGAN PASIEN
|
|
DB::table('skrining')
|
|
->where('id_user', $id)
|
|
->update([
|
|
'id_user' => null
|
|
]);
|
|
|
|
// HAPUS FILE PASIEN DARI STORAGE
|
|
$files = DB::table('file_pasien')
|
|
->where('id_user', $id)
|
|
->get();
|
|
|
|
foreach ($files as $f) {
|
|
if ($f->path_file && Storage::disk('public')->exists($f->path_file)) {
|
|
Storage::disk('public')->delete($f->path_file);
|
|
}
|
|
}
|
|
|
|
DB::transaction(function () use ($id) {
|
|
|
|
DB::table('file_pasien')
|
|
->where('id_user', $id)
|
|
->delete();
|
|
|
|
DB::table('pasien_medis')
|
|
->where('id_user', $id)
|
|
->delete();
|
|
|
|
DB::table('users')
|
|
->where('id_user', $id)
|
|
->delete();
|
|
});
|
|
|
|
DB::table('log_aktivitas')->insert([
|
|
'id_petugas' => session('petugas_id'),
|
|
'aktivitas' => 'Menghapus pasien: ' . ($pasien->nama_lengkap ?? 'Unknown'),
|
|
'created_at' => now(),
|
|
'updated_at' => now()
|
|
]);
|
|
|
|
return response()->json([
|
|
'success' => true
|
|
]);
|
|
}
|
|
|
|
public function updateStatus(Request $request, $id)
|
|
{
|
|
if (session('role') === 'super_admin') {
|
|
return redirect('/dashboard');
|
|
}
|
|
try {
|
|
|
|
$status =
|
|
$request->status_kesehatan
|
|
?? $request->status;
|
|
|
|
if (!$status) {
|
|
|
|
return response()->json([
|
|
'success' => false,
|
|
'message' => 'Data status tidak ditemukan'
|
|
], 400);
|
|
}
|
|
|
|
DB::table('pasien_medis')
|
|
->where('id_medis', $id)
|
|
->update([
|
|
'status_kesehatan' => $status
|
|
]);
|
|
|
|
DB::table('log_aktivitas')->insert([
|
|
'id_petugas' => session('petugas_id'),
|
|
'aktivitas' => 'Mengubah status pasien ID: ' . $id . ' menjadi ' . $status,
|
|
'created_at' => now(),
|
|
'updated_at' => now()
|
|
]);
|
|
|
|
return response()->json([
|
|
'success' => true,
|
|
'message' => 'Status berhasil diperbarui'
|
|
]);
|
|
} catch (\Exception $e) {
|
|
|
|
return response()->json([
|
|
'success' => false,
|
|
'message' => 'Server Error: ' . $e->getMessage()
|
|
], 500);
|
|
}
|
|
}
|
|
|
|
public function show($id_medis)
|
|
{
|
|
if (session('role') === 'super_admin') {
|
|
return redirect('/dashboard');
|
|
}
|
|
// AMBIL DATA MEDIS YANG DIKLIK
|
|
$medisAktif = DB::table('pasien_medis')
|
|
->where('id_medis', $id_medis)
|
|
->first();
|
|
|
|
if (!$medisAktif) {
|
|
abort(404);
|
|
}
|
|
|
|
// AMBIL SEMUA RIWAYAT PENGOBATAN PASIEN
|
|
$riwayat_pengobatan = DB::table('pasien_medis')
|
|
->where('id_user', $medisAktif->id_user)
|
|
->orderBy('pengobatan_ke', 'asc')
|
|
->get();
|
|
|
|
// AMBIL DATA USER
|
|
$user = DB::table('users')
|
|
->where('id_user', $medisAktif->id_user)
|
|
->first();
|
|
|
|
// GABUNGKAN USER + RIWAYAT
|
|
$pasien = (object)[
|
|
'id_user' => $user->id_user,
|
|
'nama_lengkap' => $user->nama_lengkap,
|
|
'nik' => $user->nik,
|
|
'alamat' => $user->alamat,
|
|
'no_telp' => $user->no_telp,
|
|
'jenis_kelamin' => $user->jenis_kelamin,
|
|
'nama_fasyankes' => $user->nama_fasyankes,
|
|
'riwayat_pengobatan' => $riwayat_pengobatan
|
|
];
|
|
|
|
// =========================================
|
|
// GENERATE PROGRESS UNTUK SETIAP PENGOBATAN
|
|
// =========================================
|
|
|
|
foreach ($riwayat_pengobatan as $r) {
|
|
|
|
// AMBIL MONITORING BERDASARKAN ID_MEDIS
|
|
$monitoring = DB::table('monitoring_obat')
|
|
->where('id_medis', $r->id_medis)
|
|
->get();
|
|
|
|
// =========================
|
|
// HITUNG HARI BERJALAN
|
|
// =========================
|
|
|
|
$tglMulai = Carbon::parse($r->tgl_mulai_pengobatan)->startOfDay();
|
|
$sekarang = Carbon::now();
|
|
|
|
// Default hari berjalan = hari sekarang
|
|
$hariAktif = $tglMulai->diffInDays($sekarang) + 1;
|
|
|
|
$hariAktif = $hariAktif;
|
|
|
|
if ($sekarang->format('H:i:s') !== '00:00:00') {
|
|
$hariAktif = $hariAktif - 1;
|
|
}
|
|
|
|
// Minimal 0
|
|
if ($hariAktif < 0) {
|
|
$hariAktif = 0;
|
|
}
|
|
|
|
// Maksimal 168
|
|
if ($hariAktif > 168) {
|
|
$hariAktif = 168;
|
|
}
|
|
|
|
// =========================
|
|
// TAHAP AWAL
|
|
// =========================
|
|
|
|
$tahap_awal = [];
|
|
|
|
for ($i = 1; $i <= 56; $i++) {
|
|
|
|
$record = $monitoring
|
|
->where('tahap', 'awal')
|
|
->where('hari_ke', $i)
|
|
->first();
|
|
|
|
if ($record) {
|
|
|
|
$tahap_awal[$i] = [
|
|
'status' => $record->status == 1 ? 'done' : 'missed',
|
|
'jam' => $record->jam_konfirmasi,
|
|
];
|
|
} else {
|
|
|
|
if ($i > $hariAktif) {
|
|
|
|
$tahap_awal[$i] = [
|
|
'status' => 'pending',
|
|
'jam' => null,
|
|
];
|
|
} else {
|
|
|
|
$tahap_awal[$i] = [
|
|
'status' => 'missed',
|
|
'jam' => null,
|
|
];
|
|
}
|
|
}
|
|
}
|
|
|
|
// =========================
|
|
// TAHAP LANJUTAN
|
|
// =========================
|
|
|
|
$tahap_lanjutan = [];
|
|
|
|
for ($i = 1; $i <= 112; $i++) {
|
|
|
|
$hariGlobal = 56 + $i;
|
|
|
|
$record = $monitoring
|
|
->where('tahap', 'lanjutan')
|
|
->where('hari_ke', $i)
|
|
->first();
|
|
|
|
if ($record) {
|
|
|
|
$tahap_lanjutan[$i] = [
|
|
'status' => $record->status == 1 ? 'done' : 'missed',
|
|
'jam' => $record->jam_konfirmasi,
|
|
];
|
|
} else {
|
|
|
|
if ($hariGlobal > $hariAktif) {
|
|
|
|
$tahap_lanjutan[$i] = [
|
|
'status' => 'pending',
|
|
'jam' => null,
|
|
];
|
|
} else {
|
|
|
|
$tahap_lanjutan[$i] = [
|
|
'status' => 'missed',
|
|
'jam' => null,
|
|
];
|
|
}
|
|
}
|
|
}
|
|
|
|
// =========================
|
|
// HITUNG MISSED
|
|
// =========================
|
|
|
|
$jumlah_missed = 0;
|
|
|
|
foreach ($tahap_awal as $hari => $item) {
|
|
|
|
if (
|
|
$hari <= $hariAktif &&
|
|
$item['status'] == 'missed'
|
|
) {
|
|
$jumlah_missed++;
|
|
}
|
|
}
|
|
|
|
foreach ($tahap_lanjutan as $hari => $item) {
|
|
|
|
$hariGlobal = 56 + $hari;
|
|
|
|
if (
|
|
$hariGlobal <= $hariAktif &&
|
|
$item['status'] == 'missed'
|
|
) {
|
|
$jumlah_missed++;
|
|
}
|
|
}
|
|
|
|
// SIMPAN KE OBJECT RIWAYAT
|
|
$r->tahap_awal = $tahap_awal;
|
|
$r->tahap_lanjutan = $tahap_lanjutan;
|
|
$r->jumlah_missed = $jumlah_missed;
|
|
}
|
|
|
|
return view(
|
|
'detail-pasien',
|
|
compact('pasien')
|
|
);
|
|
}
|
|
|
|
public function detailPasien($id_medis)
|
|
{
|
|
if (session('role') === 'super_admin') {
|
|
return redirect('/dashboard');
|
|
}
|
|
// Ambil data pasien + user
|
|
$pasien = DB::table('pasien_medis')
|
|
->join('users', 'users.id_user', '=', 'pasien_medis.id_user')
|
|
->where('pasien_medis.id_medis', $id_medis)
|
|
->first();
|
|
|
|
// Ambil monitoring
|
|
$monitoring = DB::table('monitoring_obat')
|
|
->where('id_medis', $id_medis)
|
|
->get()
|
|
->groupBy(function ($item) {
|
|
return $item->tahap . '-' . $item->hari_ke;
|
|
});
|
|
|
|
// Fungsi generate hari
|
|
$generateHari = function ($totalHari, $tahap) use ($monitoring) {
|
|
$data = [];
|
|
for ($i = 1; $i <= $totalHari; $i++) {
|
|
$key = $tahap . '-' . $i;
|
|
|
|
if (isset($monitoring[$key])) {
|
|
|
|
$item = $monitoring[$key]->first();
|
|
|
|
$data[$i] = [
|
|
'status' => $item->status == 1 ? 'done' : 'missed',
|
|
'jam' => $item->jam_konfirmasi
|
|
];
|
|
} else {
|
|
$data[$i] = [
|
|
'status' => 'missed',
|
|
'jam' => null
|
|
];
|
|
}
|
|
}
|
|
return $data;
|
|
};
|
|
|
|
$tahap_awal = $generateHari(56, 'awal');
|
|
$tahap_lanjutan = $generateHari(112, 'lanjutan');
|
|
|
|
// Hitung jumlah hari missed
|
|
$jumlah_missed = collect($tahap_awal)
|
|
->merge($tahap_lanjutan)
|
|
->filter(fn($item) => $item['status'] == 'missed')
|
|
->count();
|
|
|
|
return view('detail-pasien', compact(
|
|
'pasien',
|
|
'tahap_awal',
|
|
'tahap_lanjutan',
|
|
'jumlah_missed'
|
|
));
|
|
}
|
|
|
|
public function exportExcel(Request $request)
|
|
{
|
|
if (session('role') === 'super_admin') {
|
|
return redirect('/dashboard');
|
|
}
|
|
try {
|
|
|
|
while (ob_get_level() > 0) {
|
|
ob_end_clean();
|
|
}
|
|
|
|
$id_petugas = session('petugas_id');
|
|
|
|
$petugas = DB::table('petugas')
|
|
->leftJoin('fasyankes', 'petugas.id_fasyankes', '=', 'fasyankes.id_fasyankes')
|
|
->where('petugas.id_petugas', $id_petugas)
|
|
->select(
|
|
'petugas.*',
|
|
'fasyankes.nama_fasyankes'
|
|
)
|
|
->first();
|
|
|
|
$query = DB::table('users')
|
|
->leftJoin('pasien_medis', function ($join) {
|
|
$join->on('users.id_user', '=', 'pasien_medis.id_user')
|
|
->whereRaw('pasien_medis.id_medis = (
|
|
SELECT MAX(pm2.id_medis)
|
|
FROM pasien_medis pm2
|
|
WHERE pm2.id_user = users.id_user
|
|
)');
|
|
})
|
|
->where('users.role', 'pasien');
|
|
|
|
// PETUGAS BIASA
|
|
if ($petugas->role !== 'super_admin') {
|
|
$query->where(
|
|
'users.nama_fasyankes',
|
|
$petugas->nama_fasyankes
|
|
);
|
|
}
|
|
|
|
if ($request->filled('search')) {
|
|
|
|
$search = $request->search;
|
|
|
|
$query->where(function ($q) use ($search) {
|
|
|
|
$q->where('users.nama_lengkap', 'LIKE', "%{$search}%")
|
|
->orWhere('users.nik', 'LIKE', "%{$search}%")
|
|
->orWhere('users.nama_fasyankes', 'LIKE', "%{$search}%");
|
|
});
|
|
}
|
|
|
|
if ($request->filled('status')) {
|
|
$query->where(
|
|
'pasien_medis.status_kesehatan',
|
|
$request->status
|
|
);
|
|
}
|
|
|
|
if ($request->filled('desa')) {
|
|
|
|
$desa = strtoupper(trim($request->desa));
|
|
|
|
$query->whereRaw(
|
|
'UPPER(users.alamat) LIKE ?',
|
|
["%DESA {$desa}%"]
|
|
);
|
|
}
|
|
|
|
if ($request->filled('fasyankes')) {
|
|
$query->where(
|
|
'users.nama_fasyankes',
|
|
$request->fasyankes
|
|
);
|
|
}
|
|
|
|
if (
|
|
$request->filled('start_date')
|
|
&&
|
|
$request->filled('end_date')
|
|
) {
|
|
|
|
$query->whereBetween(
|
|
'pasien_medis.tgl_mulai_pengobatan',
|
|
[$request->start_date, $request->end_date]
|
|
);
|
|
} elseif ($request->filled('start_date')) {
|
|
|
|
$query->where(
|
|
'pasien_medis.tgl_mulai_pengobatan',
|
|
'>=',
|
|
$request->start_date
|
|
);
|
|
}
|
|
|
|
$data = $query
|
|
->select(
|
|
'users.id_user',
|
|
'pasien_medis.id_medis',
|
|
'users.nama_lengkap',
|
|
'users.nik',
|
|
'users.email',
|
|
'users.tgl_lahir',
|
|
'users.jenis_kelamin',
|
|
'users.alamat',
|
|
'users.no_telp',
|
|
'users.nama_fasyankes',
|
|
'pasien_medis.diagnosa',
|
|
'pasien_medis.jam_minum',
|
|
'pasien_medis.status_kesehatan',
|
|
'pasien_medis.tgl_mulai_pengobatan',
|
|
'pasien_medis.tgl_estimasi_selesai'
|
|
)
|
|
->orderBy('users.nama_lengkap', 'asc')
|
|
->get();
|
|
|
|
if ($data->isEmpty()) {
|
|
return back()->with(
|
|
'error',
|
|
'Tidak ada data yang sesuai filter'
|
|
);
|
|
}
|
|
|
|
// HITUNG JUMLAH HARI TIDAK MINUM OBAT
|
|
$data = $data->map(function ($row) {
|
|
|
|
$totalHari = 168;
|
|
|
|
$jumlahKonfirmasi = DB::table('monitoring_obat')
|
|
->where('id_medis', $row->id_medis)
|
|
->where('status', 1)
|
|
->count();
|
|
|
|
$row->jumlah_tidak_minum = $totalHari - $jumlahKonfirmasi;
|
|
|
|
return $row;
|
|
});
|
|
|
|
$fileName =
|
|
'data-pasien-' .
|
|
date('YmdHis') .
|
|
'.xlsx';
|
|
|
|
return Excel::download(
|
|
new \App\Exports\PasienExport($data, $petugas->role),
|
|
$fileName
|
|
);
|
|
} catch (\Exception $e) {
|
|
|
|
return back()->with(
|
|
'error',
|
|
'Gagal export: ' . $e->getMessage()
|
|
);
|
|
}
|
|
}
|
|
|
|
// ENDPOINT UNTUK AMBIL DAFTAR FILE PASIEN (UNTUK POPUP SWEETALERT)
|
|
public function getFilePasien($id)
|
|
{
|
|
if (session('role') === 'super_admin') {
|
|
return redirect('/dashboard');
|
|
}
|
|
$files = DB::table('file_pasien')
|
|
->where('id_user', $id)
|
|
->orderBy('created_at', 'desc')
|
|
->get();
|
|
|
|
return response()->json([
|
|
'success' => true,
|
|
'data' => $files
|
|
]);
|
|
}
|
|
|
|
public function hapusFileLab($id_file)
|
|
{
|
|
if (session('role') === 'super_admin') {
|
|
return redirect('/dashboard');
|
|
}
|
|
try {
|
|
|
|
$file = DB::table('file_pasien')
|
|
->where('id_file', $id_file)
|
|
->first();
|
|
|
|
if (!$file) {
|
|
return response()->json([
|
|
'success' => false,
|
|
'message' => 'File tidak ditemukan'
|
|
], 404);
|
|
}
|
|
|
|
if (!empty($file->path_file)) {
|
|
|
|
$path = str_replace('storage/', '', $file->path_file);
|
|
|
|
Storage::disk('public')->delete($path);
|
|
}
|
|
|
|
$idMedis = $file->id_medis;
|
|
|
|
$deleted = DB::table('file_pasien')
|
|
->where('id_file', $id_file)
|
|
->delete();
|
|
|
|
if (!$deleted) {
|
|
|
|
return response()->json([
|
|
'success' => false,
|
|
'message' => 'Data file gagal dihapus'
|
|
], 404);
|
|
}
|
|
|
|
$jumlahFile = DB::table('file_pasien')
|
|
->where('id_medis', $idMedis)
|
|
->count();
|
|
|
|
return response()->json([
|
|
'success' => true,
|
|
'message' => 'File berhasil dihapus',
|
|
'id_medis' => $idMedis,
|
|
'jumlah_file' => $jumlahFile
|
|
]);
|
|
} catch (\Exception $e) {
|
|
|
|
return response()->json([
|
|
'success' => false,
|
|
'message' => 'Server Error: ' . $e->getMessage()
|
|
], 500);
|
|
}
|
|
}
|
|
public function pindahFasyankes(Request $request, $id)
|
|
{
|
|
if (session('role') === 'super_admin') {
|
|
return redirect('/dashboard');
|
|
}
|
|
try {
|
|
|
|
$request->validate([
|
|
'nama_fasyankes' => 'required'
|
|
]);
|
|
|
|
$pasien = User::where('id_user', $id)->first();
|
|
|
|
if (!$pasien) {
|
|
return response()->json([
|
|
'success' => false,
|
|
'message' => 'Pasien tidak ditemukan.'
|
|
], 404);
|
|
}
|
|
|
|
$pasien->nama_fasyankes = $request->nama_fasyankes;
|
|
|
|
$pasien->save();
|
|
|
|
return response()->json([
|
|
'success' => true,
|
|
'message' => 'Pasien berhasil dipindahkan.'
|
|
]);
|
|
} catch (\Exception $e) {
|
|
|
|
return response()->json([
|
|
'success' => false,
|
|
'message' => $e->getMessage()
|
|
], 500);
|
|
}
|
|
}
|
|
public function edit($id)
|
|
{
|
|
$data = DB::table('users')
|
|
->leftJoin('pasien_medis', function ($join) {
|
|
|
|
$join->on('users.id_user', '=', 'pasien_medis.id_user')
|
|
->whereRaw('pasien_medis.id_medis = (
|
|
|
|
SELECT pm2.id_medis
|
|
FROM pasien_medis pm2
|
|
WHERE pm2.id_user = users.id_user
|
|
ORDER BY pm2.pengobatan_ke ASC
|
|
LIMIT 1
|
|
|
|
)');
|
|
})
|
|
->where('users.id_user', $id)
|
|
->select(
|
|
'users.id_user',
|
|
'users.nik',
|
|
'users.nama_lengkap',
|
|
'users.email',
|
|
'users.tgl_lahir',
|
|
'users.jenis_kelamin',
|
|
'users.no_telp',
|
|
'users.alamat',
|
|
'users.nama_fasyankes',
|
|
'pasien_medis.id_medis',
|
|
'pasien_medis.diagnosa',
|
|
'pasien_medis.tgl_mulai_pengobatan',
|
|
'pasien_medis.tgl_estimasi_selesai',
|
|
'pasien_medis.jam_minum'
|
|
)
|
|
->first();
|
|
|
|
return response()->json([
|
|
'success' => true,
|
|
'data' => $data
|
|
]);
|
|
}
|
|
public function getRiwayatPengobatan($id)
|
|
{
|
|
if (session('role') === 'super_admin') {
|
|
return redirect('/dashboard');
|
|
}
|
|
$data = DB::table('pasien_medis')
|
|
->where('id_user', $id)
|
|
->orderBy('pengobatan_ke', 'asc')
|
|
->get()
|
|
->map(function ($item) {
|
|
|
|
$item->file_awal =
|
|
DB::table('file_pasien')
|
|
->where('id_medis', $item->id_medis)
|
|
->where('tahap', 'awal')
|
|
->first();
|
|
|
|
$item->file_56_hari =
|
|
DB::table('file_pasien')
|
|
->where('id_medis', $item->id_medis)
|
|
->where('tahap', '56_hari')
|
|
->first();
|
|
|
|
$item->file_168_hari =
|
|
DB::table('file_pasien')
|
|
->where('id_medis', $item->id_medis)
|
|
->where('tahap', '168_hari')
|
|
->first();
|
|
|
|
$item->boleh_awal =
|
|
$this->cekIzinUploadTahap(
|
|
$item->id_medis,
|
|
'awal'
|
|
);
|
|
|
|
$item->boleh_56_hari =
|
|
$this->cekIzinUploadTahap(
|
|
$item->id_medis,
|
|
'56_hari'
|
|
);
|
|
|
|
$item->boleh_168_hari =
|
|
$this->cekIzinUploadTahap(
|
|
$item->id_medis,
|
|
'168_hari'
|
|
);
|
|
return $item;
|
|
});
|
|
|
|
|
|
return response()->json([
|
|
'success' => true,
|
|
'data' => $data
|
|
]);
|
|
}
|
|
public function tambahRiwayatPengobatan(Request $request, $id_user)
|
|
{
|
|
if (session('role') === 'super_admin') {
|
|
return redirect('/dashboard');
|
|
}
|
|
try {
|
|
|
|
$validated = $request->validate([
|
|
'diagnosa' => 'required|string',
|
|
'tgl_mulai_pengobatan' => 'required|date|before_or_equal:today',
|
|
'tgl_estimasi_selesai' => 'required|date',
|
|
'jam_minum' => 'required'
|
|
]);
|
|
|
|
// =========================
|
|
// CEK USER
|
|
// =========================
|
|
|
|
$user = DB::table('users')
|
|
->where('id_user', $id_user)
|
|
->first();
|
|
|
|
if (!$user) {
|
|
|
|
return response()->json([
|
|
'success' => false,
|
|
'message' => 'User tidak ditemukan'
|
|
], 404);
|
|
}
|
|
|
|
DB::beginTransaction();
|
|
|
|
// =========================
|
|
// AMBIL PENGOBATAN TERAKHIR
|
|
// =========================
|
|
|
|
$jumlahPengobatan = DB::table('pasien_medis')
|
|
->where('id_user', $id_user)
|
|
->count();
|
|
|
|
$nextPengobatan =
|
|
$jumlahPengobatan + 1;
|
|
|
|
// =========================
|
|
// INSERT RIWAYAT BARU
|
|
// =========================
|
|
|
|
DB::table('pasien_medis')->insert([
|
|
|
|
'id_user' => $id_user,
|
|
|
|
'pengobatan_ke' => $nextPengobatan,
|
|
|
|
'diagnosa' => $validated['diagnosa'],
|
|
|
|
'tgl_mulai_pengobatan' => $validated['tgl_mulai_pengobatan'],
|
|
|
|
'tgl_estimasi_selesai' => $validated['tgl_estimasi_selesai'],
|
|
|
|
'jam_minum' => $validated['jam_minum'],
|
|
|
|
'status_kesehatan' => 'Masih Proses',
|
|
]);
|
|
|
|
// =========================
|
|
// LOG AKTIVITAS
|
|
// =========================
|
|
|
|
DB::table('log_aktivitas')->insert([
|
|
|
|
'id_petugas' => session('petugas_id'),
|
|
|
|
'aktivitas' => 'Menambah riwayat pengobatan pasien ID: ' . $id_user,
|
|
|
|
'created_at' => now(),
|
|
|
|
'updated_at' => now()
|
|
]);
|
|
|
|
DB::commit();
|
|
|
|
DashboardController::updateNotifikasiHariIni($id_user);
|
|
|
|
return response()->json([
|
|
|
|
'success' => true,
|
|
|
|
'message' => 'Riwayat pengobatan berhasil ditambahkan'
|
|
]);
|
|
} catch (\Exception $e) {
|
|
|
|
DB::rollBack();
|
|
|
|
return response()->json([
|
|
|
|
'success' => false,
|
|
|
|
'message' => 'Gagal simpan riwayat: ' . $e->getMessage()
|
|
|
|
], 500);
|
|
}
|
|
}
|
|
public function getFileByMedis($id)
|
|
{
|
|
if (session('role') === 'super_admin') {
|
|
return redirect('/dashboard');
|
|
}
|
|
$files = DB::table('file_pasien')
|
|
->where('id_medis', $id)
|
|
->orderByDesc('id_file')
|
|
->get();
|
|
|
|
return response()->json([
|
|
'success' => true,
|
|
'data' => $files
|
|
]);
|
|
}
|
|
}
|