1393 lines
56 KiB
PHP
1393 lines
56 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Exports\DashboardAnalisisExport;
|
|
use App\Exports\DashboardDemografiExport;
|
|
use App\Exports\DashboardExport;
|
|
use App\Exports\DashboardJawabanExport;
|
|
use App\Models\Jawaban;
|
|
use App\Models\JawabanDetail;
|
|
use App\Models\SoalDetail;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Maatwebsite\Excel\Facades\Excel;
|
|
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)
|
|
{
|
|
$masterUnits = [
|
|
"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"
|
|
];
|
|
$query = Jawaban::query()
|
|
->select([
|
|
'unit',
|
|
DB::raw('COUNT(*) as total_unit'),
|
|
])->whereNotNull('unit');
|
|
|
|
|
|
if ($request->unit_kerja) {
|
|
$query->whereIn('unit', (array) $request->unit_kerja);
|
|
$masterUnits = array_intersect($masterUnits, $request->unit_kerja);
|
|
}
|
|
$query->groupBy('unit')
|
|
->havingRaw('COUNT(*) > 0');
|
|
$rekap = $query->get()->pluck('total_unit', 'unit');
|
|
|
|
$data = collect($masterUnits)
|
|
->filter(fn($unit) => ($rekap[$unit] ?? 0) > 0)
|
|
->map(fn($unit) => [
|
|
'unit' => $unit,
|
|
'total_unit' => $rekap[$unit],
|
|
])
|
|
->values();
|
|
|
|
return DataTables::of($data)->make(true);
|
|
|
|
}
|
|
|
|
public function download_report_data_pegawai_sudah_survey(Request $request)
|
|
{
|
|
$masterUnits = [
|
|
"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",
|
|
];
|
|
|
|
$query = Jawaban::query()
|
|
->select([
|
|
'unit',
|
|
DB::raw('COUNT(*) as total'),
|
|
])
|
|
->whereNotNull('unit');
|
|
|
|
if ($request->nama_pegawai) {
|
|
$query->where('nama', 'ILIKE', '%' . $request->nama_pegawai . '%');
|
|
}
|
|
|
|
if ($request->select_unit_kerja) {
|
|
$selectedUnits = (array) $request->select_unit_kerja;
|
|
$query->whereIn('unit', $selectedUnits);
|
|
|
|
$masterUnits = array_values(array_intersect($masterUnits, $selectedUnits));
|
|
}
|
|
|
|
$query->groupBy('unit');
|
|
|
|
$rekap = $query->get()->pluck('total', 'unit');
|
|
|
|
$rows = [];
|
|
$rows[] = ['Unit Kerja', 'Total'];
|
|
|
|
foreach ($masterUnits as $unit) {
|
|
$rows[] = [
|
|
$unit,
|
|
(int) ($rekap[$unit] ?? 0),
|
|
];
|
|
}
|
|
|
|
return Excel::download(new DashboardExport($rows), 'data pegawai yang sudah survey.xlsx');
|
|
|
|
}
|
|
|
|
public function data_tidak_mau_survey(Request $request)
|
|
{
|
|
$total_tidak = DB::table('lms_mutu_jawaban_detail as a')
|
|
->where('a.lms_mutu_soal_detail_id', 51)
|
|
->where('a.jawaban', 'TIDAK')
|
|
->count();
|
|
|
|
return response()->json([
|
|
'msg' => 'Berhasil',
|
|
'data' => $total_tidak
|
|
], 200);
|
|
}
|
|
|
|
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 dashboard_jawaban()
|
|
{
|
|
$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_jawaban', $data);
|
|
}
|
|
|
|
public function get_data_dashboard_analisis(Request $request)
|
|
{
|
|
try {
|
|
$soal = SoalDetail::all()->sortBy('id')->values()->toArray();
|
|
|
|
$data = [];
|
|
$data_option_setuju = [];
|
|
$data_option_selalu = [];
|
|
$data_option_other = [];
|
|
$total = 0;
|
|
|
|
foreach ($soal as $key => $value) {
|
|
$jawaban = [];
|
|
$soal_json = json_decode($value['soal'], true);
|
|
if($soal_json['is_analitic'] != 1){
|
|
continue;
|
|
}
|
|
|
|
$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'])
|
|
->where('jawaban', '!=', null);
|
|
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'])
|
|
->where('d.jawaban', '!=', null)
|
|
->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(is_array($soal_json['options'])){
|
|
if(count($soal_json['options']) > 0){
|
|
foreach ($soal_json['options'] as $v) {
|
|
|
|
if($v != 'Tidak Berlaku/Tidak Tahu, Sebutkan Alasan'){
|
|
$row = (clone $result)->where('d.jawaban', $v)
|
|
->first();
|
|
|
|
if($row) {
|
|
if($total == 0){
|
|
$total = $row->total_semua;
|
|
}
|
|
$data_per_jawaban = [
|
|
'name' => $v,
|
|
'percent' => (float) $row->percent,
|
|
'value' => $row->total_jawaban,
|
|
'total' => $row->total_semua
|
|
];
|
|
|
|
array_push($jawaban, $data_per_jawaban);
|
|
} else {
|
|
$data_per_jawaban = [
|
|
'name' => $v,
|
|
'percent' => 0
|
|
];
|
|
array_push($jawaban, $data_per_jawaban);
|
|
}
|
|
} else {
|
|
$get_data = 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,
|
|
STRING_AGG(d.jawaban, ', ') AS jawaban_gabungan,
|
|
t.total_semua,
|
|
COUNT(*) AS total_jawaban,
|
|
ROUND((COUNT(*)::numeric / t.total_semua::numeric) * 100) AS percent"
|
|
)
|
|
->where('d.lms_mutu_soal_detail_id', $value['id'])
|
|
->where('jawaban', '!=', null)
|
|
->whereNotIn('d.jawaban', $soal_json['options'])
|
|
->groupBy('d.lms_mutu_soal_detail_id', 't.total_semua')->first();
|
|
|
|
// $get_data = (clone $result)->whereNotIn('d.jawaban', $soal_json['options'])
|
|
// ->get()
|
|
// ->toArray();
|
|
|
|
// foreach ($get_data as $val) {
|
|
if($get_data){
|
|
$data_per_jawaban = [
|
|
'name' => 'Tidak Berlaku/Tidak Tahu, Sebutkan Alasan',
|
|
'percent' => (float) $get_data->percent,
|
|
'value' => $get_data->total_jawaban,
|
|
'total' => $get_data->total_semua,
|
|
'jawaban' => $get_data->jawaban_gabungan
|
|
];
|
|
} else {
|
|
$data_per_jawaban = [
|
|
'name' => 'Tidak Berlaku/Tidak Tahu, Sebutkan Alasan',
|
|
'percent' => 0,
|
|
'value' => 0,
|
|
'jawaban' => '-'
|
|
];
|
|
}
|
|
// }
|
|
array_push($jawaban, $data_per_jawaban);
|
|
}
|
|
}
|
|
} else {
|
|
$get_data = $result->get()
|
|
->toArray();
|
|
foreach ($get_data as $val) {
|
|
$data_per_jawaban = [
|
|
'name' => $val->jawaban,
|
|
'percent' => (float) $val->percent,
|
|
'value' => $val->total_jawaban,
|
|
'total' => $val->total_semua
|
|
];
|
|
array_push($jawaban, $data_per_jawaban);
|
|
}
|
|
}
|
|
|
|
$data_persoal = [
|
|
'no_soal' => $soal_json['no'],
|
|
'soal' => $soal_json['soal'],
|
|
'jawaban' => $jawaban
|
|
];
|
|
|
|
if(in_array('Sangat Tidak Setuju', $soal_json['options'])) {
|
|
array_push($data_option_setuju, $data_persoal);
|
|
} else if(in_array('Selalu', $soal_json['options'])) {
|
|
array_push($data_option_selalu, $data_persoal);
|
|
} else {
|
|
array_push($data_option_other, $data_persoal);
|
|
}
|
|
}
|
|
}
|
|
|
|
$data = [
|
|
'option_setuju' => $data_option_setuju,
|
|
'option_other' => $data_option_other,
|
|
'option_selalu' => $data_option_selalu,
|
|
'total' => $total
|
|
];
|
|
return response()->json([
|
|
'msg' => 'Berhasil',
|
|
'data' => $data
|
|
], 200);
|
|
} catch (\ErrorException $th) {
|
|
dd($th);
|
|
return response()->json([
|
|
'msg' => 'Oops something wrong!',
|
|
'data' => null,
|
|
'msg_dev' => $th
|
|
], 500);
|
|
}
|
|
}
|
|
|
|
public function report_data_dashboard_analisis(Request $request)
|
|
{
|
|
try {
|
|
$soal = SoalDetail::all()->sortBy('id')->values()->toArray();
|
|
|
|
$data_option_setuju = [];
|
|
$data_option_selalu = [];
|
|
$data_option_other = [];
|
|
$total = 0;
|
|
|
|
foreach ($soal as $key => $value) {
|
|
$jawaban = [];
|
|
$soal_json = json_decode($value['soal'], true);
|
|
if($soal_json['is_analitic'] != 1){
|
|
continue;
|
|
}
|
|
|
|
$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(is_array($soal_json['options'])){
|
|
if(count($soal_json['options']) > 0){
|
|
foreach ($soal_json['options'] as $v) {
|
|
|
|
if($v != 'Tidak Berlaku/Tidak Tahu, Sebutkan Alasan'){
|
|
$row = (clone $result)->where('d.jawaban', $v)
|
|
->first();
|
|
|
|
if($row) {
|
|
if($total == 0){
|
|
$total = $row->total_semua;
|
|
}
|
|
$data_per_jawaban = [
|
|
'name' => $v,
|
|
'percent' => (float) $row->percent,
|
|
'value' => $row->total_jawaban,
|
|
'total' => $row->total_semua
|
|
];
|
|
|
|
array_push($jawaban, $data_per_jawaban);
|
|
} else {
|
|
$data_per_jawaban = [
|
|
'name' => $v,
|
|
'percent' => 0
|
|
];
|
|
array_push($jawaban, $data_per_jawaban);
|
|
}
|
|
} else {
|
|
$get_data = 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,
|
|
STRING_AGG(d.jawaban, ', ') AS jawaban_gabungan,
|
|
t.total_semua,
|
|
COUNT(*) AS total_jawaban,
|
|
ROUND((COUNT(*)::numeric / t.total_semua::numeric) * 100) AS percent"
|
|
)
|
|
->where('d.lms_mutu_soal_detail_id', $value['id'])
|
|
->whereNotIn('d.jawaban', $soal_json['options'])
|
|
->groupBy('d.lms_mutu_soal_detail_id', 't.total_semua')->first();
|
|
|
|
// $get_data = (clone $result)->whereNotIn('d.jawaban', $soal_json['options'])
|
|
// ->get()
|
|
// ->toArray();
|
|
|
|
// foreach ($get_data as $val) {
|
|
if($get_data){
|
|
$data_per_jawaban = [
|
|
'name' => 'Tidak Berlaku/Tidak Tahu, Sebutkan Alasan',
|
|
'percent' => (float) $get_data->percent,
|
|
'value' => $get_data->total_jawaban,
|
|
'total' => $get_data->total_semua,
|
|
'jawaban' => $get_data->jawaban_gabungan
|
|
];
|
|
} else {
|
|
$data_per_jawaban = [
|
|
'name' => 'Tidak Berlaku/Tidak Tahu, Sebutkan Alasan',
|
|
'percent' => 0,
|
|
'value' => 0,
|
|
'jawaban' => '-'
|
|
];
|
|
}
|
|
// }
|
|
array_push($jawaban, $data_per_jawaban);
|
|
}
|
|
}
|
|
} else {
|
|
$get_data = $result->get()
|
|
->toArray();
|
|
foreach ($get_data as $val) {
|
|
$data_per_jawaban = [
|
|
'name' => $val->jawaban,
|
|
'percent' => (float) $val->percent,
|
|
'value' => $val->total_jawaban,
|
|
'total' => $val->total_semua
|
|
];
|
|
array_push($jawaban, $data_per_jawaban);
|
|
}
|
|
}
|
|
|
|
$data_persoal = [
|
|
'no_soal' => $soal_json['no'],
|
|
'soal' => $soal_json['soal'],
|
|
'jawaban' => $jawaban
|
|
];
|
|
|
|
if(in_array('Sangat Tidak Setuju', $soal_json['options'])) {
|
|
array_push($data_option_setuju, $data_persoal);
|
|
} else if(in_array('Selalu', $soal_json['options'])) {
|
|
array_push($data_option_selalu, $data_persoal);
|
|
} else {
|
|
array_push($data_option_other, $data_persoal);
|
|
}
|
|
}
|
|
}
|
|
|
|
$data_setuju_report = [];
|
|
$data_setuju_header = ['No', 'Soal'];
|
|
foreach ($data_option_setuju as $key => $value) {
|
|
$data['no'] = $value['no_soal'];
|
|
$data['soal'] = $value['soal'];
|
|
foreach ($value['jawaban'] as $k => $v) {
|
|
if(!in_array($v['name'], $data_setuju_header)){
|
|
array_push($data_setuju_header, $v['name']);
|
|
}
|
|
if($v['percent'] > 0){
|
|
$data[$v['name']] = $v['percent'] . '%/ '. $v['value']. ' Orang';
|
|
} else {
|
|
$data[$v['name']] = '-';
|
|
}
|
|
|
|
// if($v['name'] == 'Tidak Berlaku/Tidak Tahu, Sebutkan Alasan') {
|
|
// $data['jawaban_lainnya'] = $v['jawaban'];
|
|
// }
|
|
}
|
|
$data['total'] = $total;
|
|
array_push($data_setuju_report, $data);
|
|
}
|
|
// array_push($data_setuju_header, 'Jawaban Lainnya');
|
|
array_push($data_setuju_header, 'Total Responden');
|
|
array_unshift($data_setuju_report, $data_setuju_header);
|
|
|
|
$data_other_report = [];
|
|
$data_other_header = ['No', 'Soal'];
|
|
foreach ($data_option_other as $key => $value) {
|
|
$data_other['no'] = $value['no_soal'];
|
|
$data_other['soal'] = $value['soal'];
|
|
foreach ($value['jawaban'] as $k => $v) {
|
|
if(!in_array($v['name'], $data_other_header)){
|
|
array_push($data_other_header, $v['name']);
|
|
}
|
|
if($v['percent'] > 0){
|
|
$data_other[$v['name']] = $v['percent'] . '%/ '. $v['value']. ' Orang';
|
|
} else {
|
|
$data_other[$v['name']] = '-';
|
|
}
|
|
}
|
|
$data_other['total'] = $total;
|
|
array_push($data_other_report, $data_other);
|
|
}
|
|
array_push($data_other_header, 'Total Responden');
|
|
array_unshift($data_other_report, $data_other_header);
|
|
|
|
$data_selalu_report = [];
|
|
$data_selalu_header = ['No', 'Soal'];
|
|
foreach ($data_option_selalu as $key => $value) {
|
|
$data_selalu['no'] = $value['no_soal'];
|
|
$data_selalu['soal'] = $value['soal'];
|
|
foreach ($value['jawaban'] as $k => $v) {
|
|
if(!in_array($v['name'], $data_selalu_header)){
|
|
array_push($data_selalu_header, $v['name']);
|
|
}
|
|
if($v['percent'] > 0){
|
|
$data_selalu[$v['name']] = $v['percent'] . '%/ '. $v['value']. ' Orang';
|
|
} else {
|
|
$data_selalu[$v['name']] = '-';
|
|
}
|
|
|
|
// if($v['name'] == 'Tidak Berlaku/Tidak Tahu, Sebutkan Alasan') {
|
|
// $data_selalu['jawaban_lainnya'] = $v['jawaban'];
|
|
// }
|
|
}
|
|
$data_selalu['total'] = $total;
|
|
array_push($data_selalu_report, $data_selalu);
|
|
}
|
|
// array_push($data_selalu_header, 'Jawaban Lainnya');
|
|
array_push($data_selalu_header, 'Total Responden');
|
|
array_unshift($data_selalu_report, $data_selalu_header);
|
|
|
|
// $data = [
|
|
// 'option_setuju' => $data_option_setuju,
|
|
// 'option_other' => $data_option_other,
|
|
// 'option_selalu' => $data_option_selalu,
|
|
// 'total' => $total
|
|
// ];
|
|
|
|
return Excel::download(new DashboardAnalisisExport($data_setuju_report, $data_other_report, $data_selalu_report), 'data analisis.xlsx');
|
|
} catch (\ErrorException $th) {
|
|
dd($th);
|
|
return response()->json([
|
|
'msg' => 'Oops something wrong!',
|
|
'data' => null,
|
|
'msg_dev' => $th
|
|
], 500);
|
|
}
|
|
}
|
|
|
|
public function get_jawaban($jawaban_id)
|
|
{
|
|
try {
|
|
$data = JawabanDetail::where('lms_mutu_jawaban_id', $jawaban_id)->join('lms_mutu_soal_detail', 'lms_mutu_soal_detail_id', '=', 'lms_mutu_soal_detail.id')->orderBy('lms_mutu_soal_detail.id', 'asc')->get()->toArray();
|
|
|
|
return response()->json([
|
|
'msg' => 'Berhasil',
|
|
'data' => $data
|
|
], 200);
|
|
} catch (\ErrorException $th) {
|
|
return response()->json([
|
|
'msg' => 'Oops something wrong!',
|
|
'data' => null,
|
|
'msg_dev' => $th
|
|
], 500);
|
|
}
|
|
}
|
|
|
|
public function download_report_data_jawaban_pegawai(Request $request)
|
|
{
|
|
$query = Jawaban::query();
|
|
$query->select('id', 'nama', 'unit');
|
|
|
|
if ($request->nama_pegawai) {
|
|
$query->where('nama', 'ILIKE', '%' . $request->nama_pegawai . '%');
|
|
}
|
|
|
|
if ($request->select_unit_kerja) {
|
|
$query->whereIn('unit', $request->select_unit_kerja);
|
|
}
|
|
|
|
$data = $query->get()->toArray();
|
|
$data_header = ['Nama Pegawai', 'Unit Kerja'];
|
|
|
|
foreach ($data as $key => &$value) {
|
|
$data_jawaban = JawabanDetail::select(
|
|
'lms_mutu_jawaban_detail.*',
|
|
DB::raw("lms_mutu_soal_detail.soal->>'soal' as soal"),
|
|
DB::raw("lms_mutu_soal_detail.soal->>'no' as no")
|
|
)->where('lms_mutu_jawaban_id', $value['id'])->join('lms_mutu_soal_detail', 'lms_mutu_soal_detail_id', '=', 'lms_mutu_soal_detail.id')->orderBy('id', 'asc')->get()->toArray();
|
|
|
|
foreach ($data_jawaban as $k => $v) {
|
|
if(count($data_jawaban) > 10){
|
|
if(!in_array($v['soal'], $data_header)){
|
|
array_push($data_header, $v['soal']);
|
|
}
|
|
}
|
|
$data[$key][$v['soal']] = $v['jawaban'];
|
|
}
|
|
|
|
unset($value['id']);
|
|
unset($value['jawaban_detail']);
|
|
}
|
|
|
|
return Excel::download(new DashboardJawabanExport($data_header, $data), 'data jawaban pegawai.xlsx');
|
|
|
|
}
|
|
|
|
|
|
public function get_data_pegawai_jawaban(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)
|
|
->addColumn('action', function ($row) {
|
|
return '
|
|
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#detail_jawaban" data-id="'. $row->id .'">
|
|
Detail
|
|
</button>
|
|
';
|
|
})
|
|
->make(true);
|
|
|
|
}
|
|
|
|
public function dashboard_demografi()
|
|
{
|
|
$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_demografi', $data);
|
|
}
|
|
|
|
public function get_data_dashboard_demografi(Request $request)
|
|
{
|
|
try {
|
|
$soal = SoalDetail::all()->sortBy('id')->values()->toArray();
|
|
|
|
$data = [];
|
|
$data_all = [];
|
|
$total = 0;
|
|
|
|
foreach ($soal as $key => $value) {
|
|
$jawaban = [];
|
|
$soal_json = json_decode($value['soal'], true);
|
|
if($soal_json['is_analitic'] != 2){
|
|
continue;
|
|
}
|
|
|
|
$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'])
|
|
->where('jawaban', '!=', null);
|
|
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'])
|
|
->where('d.jawaban', '!=', null)
|
|
->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(is_array($soal_json['options'])){
|
|
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) {
|
|
if($total == 0){
|
|
$total = $row->total_semua;
|
|
}
|
|
$data_per_jawaban = [
|
|
'name' => $v,
|
|
'percent' => (float) $row->percent,
|
|
'value' => $row->total_jawaban,
|
|
'total' => $row->total_semua
|
|
];
|
|
|
|
array_push($jawaban, $data_per_jawaban);
|
|
} else {
|
|
$data_per_jawaban = [
|
|
'name' => $v,
|
|
'percent' => 0
|
|
];
|
|
array_push($jawaban, $data_per_jawaban);
|
|
}
|
|
} else {
|
|
$get_data = 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,
|
|
STRING_AGG(d.jawaban, ', ') AS jawaban_gabungan,
|
|
t.total_semua,
|
|
COUNT(*) AS total_jawaban,
|
|
ROUND((COUNT(*)::numeric / t.total_semua::numeric) * 100) AS percent"
|
|
)
|
|
->where('d.lms_mutu_soal_detail_id', $value['id'])
|
|
->where('jawaban', '!=', null)
|
|
->whereNotIn('d.jawaban', $soal_json['options'])
|
|
->groupBy('d.lms_mutu_soal_detail_id', 't.total_semua')->first();
|
|
|
|
// $get_data = (clone $result)->whereNotIn('d.jawaban', $soal_json['options'])
|
|
// ->get()
|
|
// ->toArray();
|
|
|
|
// foreach ($get_data as $val) {
|
|
if($get_data){
|
|
$data_per_jawaban = [
|
|
'name' => 'Lainnya',
|
|
'percent' => (float) $get_data->percent,
|
|
'value' => $get_data->total_jawaban,
|
|
'total' => $get_data->total_semua,
|
|
'jawaban' => $get_data->jawaban_gabungan
|
|
];
|
|
} else {
|
|
$data_per_jawaban = [
|
|
'name' => 'Lainnya',
|
|
'percent' => 0,
|
|
'value' => 0,
|
|
'jawaban' => '-'
|
|
];
|
|
}
|
|
// }
|
|
array_push($jawaban, $data_per_jawaban);
|
|
}
|
|
}
|
|
} else {
|
|
$get_data = $result->get()
|
|
->toArray();
|
|
foreach ($get_data as $val) {
|
|
$data_per_jawaban = [
|
|
'name' => $val->jawaban,
|
|
'percent' => (float) $val->percent,
|
|
'value' => $val->total_jawaban,
|
|
'total' => $val->total_semua
|
|
];
|
|
array_push($jawaban, $data_per_jawaban);
|
|
}
|
|
}
|
|
|
|
$data_persoal = [
|
|
'no_soal' => $soal_json['no'],
|
|
'soal' => $soal_json['soal'],
|
|
'jawaban' => $jawaban
|
|
];
|
|
|
|
array_push($data_all, $data_persoal);
|
|
}
|
|
}
|
|
|
|
$data = [
|
|
'data' => $data_all,
|
|
'total' => $total
|
|
];
|
|
|
|
return response()->json([
|
|
'msg' => 'Berhasil',
|
|
'data' => $data
|
|
], 200);
|
|
} catch (\ErrorException $th) {
|
|
dd($th);
|
|
return response()->json([
|
|
'msg' => 'Oops something wrong!',
|
|
'data' => null,
|
|
'msg_dev' => $th
|
|
], 500);
|
|
}
|
|
}
|
|
|
|
public function download_report_dashboard_demografi(Request $request)
|
|
{
|
|
$soal = SoalDetail::all()->sortBy('id')->values()->toArray();
|
|
|
|
$data = [];
|
|
$data_all = [];
|
|
$total = 0;
|
|
|
|
foreach ($soal as $key => $value) {
|
|
$jawaban = [];
|
|
$soal_json = json_decode($value['soal'], true);
|
|
if($soal_json['is_analitic'] != 2){
|
|
continue;
|
|
}
|
|
$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'])
|
|
->where('jawaban', '!=', null);
|
|
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'])
|
|
->where('d.jawaban', '!=', null)
|
|
->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(is_array($soal_json['options'])){
|
|
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) {
|
|
if($total == 0){
|
|
$total = $row->total_semua;
|
|
}
|
|
$data_per_jawaban = [
|
|
'name' => $v,
|
|
'percent' => (float) $row->percent,
|
|
'value' => $row->total_jawaban,
|
|
'total' => $row->total_semua
|
|
];
|
|
|
|
array_push($jawaban, $data_per_jawaban);
|
|
} else {
|
|
$data_per_jawaban = [
|
|
'name' => $v,
|
|
'percent' => 0
|
|
];
|
|
array_push($jawaban, $data_per_jawaban);
|
|
}
|
|
} else {
|
|
$get_data = 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,
|
|
STRING_AGG(d.jawaban, ', ') AS jawaban_gabungan,
|
|
t.total_semua,
|
|
COUNT(*) AS total_jawaban,
|
|
ROUND((COUNT(*)::numeric / t.total_semua::numeric) * 100) AS percent"
|
|
)
|
|
->where('d.lms_mutu_soal_detail_id', $value['id'])
|
|
->where('jawaban', '!=', null)
|
|
->whereNotIn('d.jawaban', $soal_json['options'])
|
|
->groupBy('d.lms_mutu_soal_detail_id', 't.total_semua')->first();
|
|
|
|
// $get_data = (clone $result)->whereNotIn('d.jawaban', $soal_json['options'])
|
|
// ->get()
|
|
// ->toArray();
|
|
|
|
// foreach ($get_data as $val) {
|
|
if($get_data){
|
|
$data_per_jawaban = [
|
|
'name' => 'Lainnya',
|
|
'percent' => (float) $get_data->percent,
|
|
'value' => $get_data->total_jawaban,
|
|
'total' => $get_data->total_semua,
|
|
'jawaban' => $get_data->jawaban_gabungan
|
|
];
|
|
} else {
|
|
$data_per_jawaban = [
|
|
'name' => 'Lainnya',
|
|
'percent' => 0,
|
|
'value' => 0,
|
|
'jawaban' => '-'
|
|
];
|
|
}
|
|
// }
|
|
array_push($jawaban, $data_per_jawaban);
|
|
}
|
|
}
|
|
} else {
|
|
$get_data = $result->get()
|
|
->toArray();
|
|
foreach ($get_data as $val) {
|
|
$data_per_jawaban = [
|
|
'name' => $val->jawaban,
|
|
'percent' => (float) $val->percent,
|
|
'value' => $val->total_jawaban,
|
|
'total' => $val->total_semua
|
|
];
|
|
array_push($jawaban, $data_per_jawaban);
|
|
}
|
|
}
|
|
|
|
$data_persoal = [
|
|
'no_soal' => $soal_json['no'],
|
|
'soal' => $soal_json['soal'],
|
|
'jawaban' => $jawaban
|
|
];
|
|
|
|
array_push($data_all, $data_persoal);
|
|
}
|
|
}
|
|
|
|
$data_report = [];
|
|
foreach ($data_all as $index => $value) {
|
|
|
|
// SOAL → tandai sebagai 'title'
|
|
$data_report[] = [
|
|
'type' => 'title',
|
|
'row' => [$value['no_soal'] . ', ' . $value['soal']]
|
|
];
|
|
// HEADER TABLE → tandai sebagai 'header'
|
|
$data_report[] = [
|
|
'type' => 'header',
|
|
'row' => ['Jawaban', 'Persentase Responden', 'Jumlah Responden']
|
|
];
|
|
|
|
if($value['no_soal'] != 8 && $value['no_soal'] != 9) {
|
|
// ISI TABEL → tandai sebagai 'body'
|
|
foreach ($value['jawaban'] as $v) {
|
|
$data_report[] = [
|
|
'type' => 'body',
|
|
'row' => [$v['name'], $v['percent'] ?? '-', ($v['value'] ?? '0') .' Orang']
|
|
];
|
|
}
|
|
} else {
|
|
$total = array_reduce($value['jawaban'], function($acc, $item) {
|
|
return $acc + $item['value'];
|
|
}, 0);
|
|
|
|
$category = [
|
|
[
|
|
'name' => '0 - 1 Tahun',
|
|
'total' => $total,
|
|
'percent' => 0,
|
|
'value' => 0
|
|
],
|
|
[
|
|
'name' => '3 - 5 Tahun',
|
|
'total' => $total,
|
|
'percent' => 0,
|
|
'value' => 0
|
|
],
|
|
[
|
|
'name' => '6 - 10 Tahun',
|
|
'total' => $total,
|
|
'percent' => 0,
|
|
'value' => 0
|
|
],
|
|
[
|
|
'name' => '> 10 Tahun',
|
|
'total' => $total,
|
|
'percent' => 0,
|
|
'value' => 0
|
|
],
|
|
];
|
|
|
|
// set value
|
|
foreach ($value['jawaban'] as $v) {
|
|
$teks = $v['name'];
|
|
|
|
$parts = explode(" ", $teks);
|
|
$tahun = $parts[0] ?? 0;
|
|
$bulan = $parts[2] ?? 0;
|
|
|
|
$tahun = $tahun . '.' . $bulan;
|
|
|
|
if($tahun <= 1){
|
|
$category[0]['value'] += $v['value'];
|
|
} else if($tahun >= 2 && $tahun <= 5){
|
|
$category[1]['value'] += $v['value'];
|
|
} else if($tahun >= 6 && $tahun <= 10) {
|
|
$category[2]['value'] += $v['value'];
|
|
} else {
|
|
$category[3]['value'] += $v['value'];
|
|
}
|
|
}
|
|
|
|
$mappingPercent = array_map(
|
|
fn($val) => array_merge(
|
|
$val,
|
|
['percent' => $val['total'] > 0 ? intval(($val['value'] / $val['total']) * 100) : null]
|
|
),
|
|
$category
|
|
);
|
|
|
|
foreach ($mappingPercent as $i => $v) {
|
|
$data_report[] = [
|
|
'type' => 'body',
|
|
'row' => [$v['name'], $v['percent'] ?? '-', ($v['value'] ?? '0') .' Orang']
|
|
];
|
|
}
|
|
}
|
|
|
|
// SPASER
|
|
$data_report[] = ['type' => 'empty', 'row' => ['']];
|
|
$data_report[] = ['type' => 'empty', 'row' => ['']];
|
|
$data_report[] = ['type' => 'empty', 'row' => ['']];
|
|
}
|
|
|
|
return Excel::download(new DashboardDemografiExport($data_report, 'Dashboard Demografi'), 'data demografi.xlsx');
|
|
}
|
|
}
|