mutu-rsab/app/Http/Controllers/AdminController.php
2025-12-01 13:22:55 +07:00

271 lines
9.7 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\Jawaban;
use App\Models\SoalDetail;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Yajra\DataTables\DataTables;
class AdminController extends Controller
{
//
public function index()
{
$data['list_unit_kerja'] = [
"Direktur Utama dan Direksi",
"Satuan Pengawas Internal",
"Komite Mutu",
"Komite Medik",
"Komite Keperawatan",
"Komite PPI & PRA",
"KTKL",
"KFT",
"KEH",
"ULP",
"Timker Yankep",
"Timker Yanjang",
"Timker Perencanaan, Evaluasi dan Program",
"Timker Hukum dan Humas",
"Timker Yanmed",
"Timker Perencanaan dan Evaluasi Anggaran",
"Timker Akutansi dan BMN",
"Timker Organisasi dan Sumber Daya Manusia",
"Timker TU & RT",
"Timker Diklat",
"Timker Penelitian",
"Timker Pelaksanan Keuangan",
"Instalasi Rawat Inap",
"Instalasi Rawat Jalan Reguler",
"Instalasi Rawat Intensif / ICU",
"Instalasi Rehabilitasi Medik",
"Instalasi Gizi",
"Instalasi Laboratorium Terpadu",
"Instalasi Sistem Informasi Manajemen Rumah Sakit (SIMRS)",
"Instalasi Bedah Sentral",
"Instalasi Radiologi",
"Instalasi Farmasi",
"Instalasi Rekam Medis",
"Instalasi Gawat Darurat",
"Instalasi Verifikasi dan Penjaminan Pasien",
"Instalasi KL & K3RS",
"ISSB",
"IPT",
"IPJNI",
"IPSPRS",
"IPPB",
"IPPISGB",
"Instalasi Rawat Jalan Eksekutif",
"Instalasi Teknologi Berbantu (TRB)",
"Klinik Utama Bintaro",
"KSM Anak",
"KSM Obstetri & Ginekologi",
"KSM Bedah",
"KSM Anestesi",
"KSM Gigi & Mulut",
"KSM Spesialis Lain",
"KSM Umum",
"Lainnya (Mahasiswa dan Outsourcing)"
];
return view('admin.dashboard', $data);
}
public function get_data_pegawai_sudah_survey(Request $request)
{
$query = Jawaban::query();
if ($request->nama_pegawai) {
$query->where('nama', 'ILIKE', '%' . $request->nama_pegawai . '%');
}
if ($request->unit_kerja) {
$query->whereIn('unit', $request->unit_kerja);
}
return DataTables::of($query)->make(true);
}
public function dashboard_analisis()
{
$data['list_unit_kerja'] = [
"Direktur Utama dan Direksi",
"Satuan Pengawas Internal",
"Komite Mutu",
"Komite Medik",
"Komite Keperawatan",
"Komite PPI & PRA",
"KTKL",
"KFT",
"KEH",
"ULP",
"Timker Yankep",
"Timker Yanjang",
"Timker Perencanaan, Evaluasi dan Program",
"Timker Hukum dan Humas",
"Timker Yanmed",
"Timker Perencanaan dan Evaluasi Anggaran",
"Timker Akutansi dan BMN",
"Timker Organisasi dan Sumber Daya Manusia",
"Timker TU & RT",
"Timker Diklat",
"Timker Penelitian",
"Timker Pelaksanan Keuangan",
"Instalasi Rawat Inap",
"Instalasi Rawat Jalan Reguler",
"Instalasi Rawat Intensif / ICU",
"Instalasi Rehabilitasi Medik",
"Instalasi Gizi",
"Instalasi Laboratorium Terpadu",
"Instalasi Sistem Informasi Manajemen Rumah Sakit (SIMRS)",
"Instalasi Bedah Sentral",
"Instalasi Radiologi",
"Instalasi Farmasi",
"Instalasi Rekam Medis",
"Instalasi Gawat Darurat",
"Instalasi Verifikasi dan Penjaminan Pasien",
"Instalasi KL & K3RS",
"ISSB",
"IPT",
"IPJNI",
"IPSPRS",
"IPPB",
"IPPISGB",
"Instalasi Rawat Jalan Eksekutif",
"Instalasi Teknologi Berbantu (TRB)",
"Klinik Utama Bintaro",
"KSM Anak",
"KSM Obstetri & Ginekologi",
"KSM Bedah",
"KSM Anestesi",
"KSM Gigi & Mulut",
"KSM Spesialis Lain",
"KSM Umum",
"Lainnya (Mahasiswa dan Outsourcing)"
];
return view('admin.dashboard_analisis', $data);
}
public function get_data_dashboard_analisis(Request $request)
{
try {
$soal = SoalDetail::all()->sortBy('id')->values()->toArray();
$data = [];
foreach ($soal as $key => $value) {
$jawaban = [];
$soal_json = json_decode($value['soal'], true);
$sub = DB::table('lms_mutu_jawaban_detail')
->select('lms_mutu_soal_detail_id', DB::raw('COUNT(*) AS total_semua'))
->join(
'lms_mutu_jawaban',
'lms_mutu_jawaban_detail.lms_mutu_jawaban_id',
'=',
'lms_mutu_jawaban.id'
)
->where('lms_mutu_soal_detail_id', $value['id']);
if($request->unit_kerja) {
$sub->whereIn('lms_mutu_jawaban.unit', $request->unit_kerja);
}
$sub->groupBy('lms_mutu_soal_detail_id');
$result = DB::table('lms_mutu_jawaban_detail AS d')
->joinSub($sub, 't', function($join) {
$join->on('t.lms_mutu_soal_detail_id', '=', 'd.lms_mutu_soal_detail_id');
})
->join(
'lms_mutu_jawaban',
'd.lms_mutu_jawaban_id',
'=',
'lms_mutu_jawaban.id'
)
->selectRaw(
'd.lms_mutu_soal_detail_id,
d.jawaban,
COUNT(*) AS total_jawaban,
t.total_semua,
ROUND((COUNT(*)::numeric / t.total_semua::numeric) * 100) AS percent'
)
->where('d.lms_mutu_soal_detail_id', $value['id'])
->groupBy('d.lms_mutu_soal_detail_id', 'd.jawaban', 't.total_semua');
if($request->unit_kerja) {
$result->whereIn('lms_mutu_jawaban.unit', $request->unit_kerja);
}
$result->orderBy('d.lms_mutu_soal_detail_id', 'asc');
if(count($soal_json['options']) > 0){
foreach ($soal_json['options'] as $v) {
if($v != 'Lainnya'){
$row = (clone $result)->where('d.jawaban', $v)
->first();
if($row) {
$data_per_jawaban = [
'name' => $v,
'y' => (float) $row->percent,
'value' => $row->total_jawaban,
'total' => $row->total_semua
];
array_push($jawaban, $data_per_jawaban);
} else {
$data_per_jawaban = [
'name' => $v,
'y' => 0
];
array_push($jawaban, $data_per_jawaban);
}
} else {
$get_data = (clone $result)->whereNotIn('d.jawaban', $soal_json['options'])
->get()
->toArray();
foreach ($get_data as $val) {
$data_per_jawaban = [
'name' => $val->jawaban,
'y' => (float) $val->percent,
'value' => $val->total_jawaban,
'total' => $val->total_semua
];
array_push($jawaban, $data_per_jawaban);
}
}
}
} else {
$get_data = $result->get()
->toArray();
foreach ($get_data as $val) {
$data_per_jawaban = [
'name' => $val->jawaban,
'y' => (float) $val->percent,
'value' => $val->total_jawaban,
'total' => $val->total_semua
];
array_push($jawaban, $data_per_jawaban);
}
}
$data_persoal = [
'soal' => $soal_json['soal'],
'jawaban' => $jawaban
];
array_push($data, $data_persoal);
}
return response()->json([
'msg' => 'Berhasil',
'data' => $data
], 200);
} catch (\ErrorException $th) {
return response()->json([
'msg' => 'Oops something wrong!',
'data' => null,
'msg_dev' => $th
], 500);
}
}
}