diff --git a/app/Http/Controllers/AdminController.php b/app/Http/Controllers/AdminController.php index d831718..bf88fdc 100644 --- a/app/Http/Controllers/AdminController.php +++ b/app/Http/Controllers/AdminController.php @@ -78,45 +78,177 @@ class AdminController extends Controller public function get_data_pegawai_sudah_survey(Request $request) { - $query = Jawaban::query(); + $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->nama_pegawai) { - $query->where('nama', 'ILIKE', '%' . $request->nama_pegawai . '%'); - } if ($request->unit_kerja) { - $query->whereIn('unit', $request->unit_kerja); + $query->whereIn('unit', (array) $request->unit_kerja); + $masterUnits = array_intersect($masterUnits, $request->unit_kerja); } + $query->groupBy('unit'); + $rekap = $query->get()->pluck('total_unit', 'unit'); - return DataTables::of($query) - ->addColumn('action', function ($row) { - return ' - - '; - }) - ->make(true); + $data = collect($masterUnits)->map(function ($unit) use ($rekap) { + return [ + 'unit' => $unit, + 'total_unit' => $rekap[$unit] ?? 0, + ]; + }); + + return DataTables::of($data)->make(true); } public function download_report_data_pegawai_sudah_survey(Request $request) { - $query = Jawaban::query(); - $query->select('nama', 'unit', 'tanggal_isi'); + $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) { - $query->whereIn('unit', $request->select_unit_kerja); + $selectedUnits = (array) $request->select_unit_kerja; + $query->whereIn('unit', $selectedUnits); + + $masterUnits = array_values(array_intersect($masterUnits, $selectedUnits)); } - $data = $query->get()->toArray(); - array_unshift($data, ['Nama Pegawai', 'Unit Kerja', 'Tanggal Isi']); - - return Excel::download(new DashboardExport($data), 'data pegawai yang sudah survey.xlsx'); + $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'); } @@ -269,7 +401,7 @@ class AdminController extends Controller ->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->whereIn('lms_mutu_jawaban.unit', $request->unit_kerja); } $sub->groupBy('lms_mutu_soal_detail_id'); @@ -294,18 +426,18 @@ class AdminController extends Controller ->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->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; @@ -316,7 +448,7 @@ class AdminController extends Controller 'value' => $row->total_jawaban, 'total' => $row->total_semua ]; - + array_push($jawaban, $data_per_jawaban); } else { $data_per_jawaban = [ @@ -347,11 +479,11 @@ class AdminController extends Controller ->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 = [ @@ -386,13 +518,13 @@ class AdminController extends Controller 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'])) { @@ -402,7 +534,7 @@ class AdminController extends Controller } } } - + $data = [ 'option_setuju' => $data_option_setuju, 'option_other' => $data_option_other, @@ -450,7 +582,7 @@ class AdminController extends Controller ) ->where('lms_mutu_soal_detail_id', $value['id']); if($request->unit_kerja) { - $sub->whereIn('lms_mutu_jawaban.unit', $request->unit_kerja); + $sub->whereIn('lms_mutu_jawaban.unit', $request->unit_kerja); } $sub->groupBy('lms_mutu_soal_detail_id'); @@ -474,18 +606,18 @@ class AdminController extends Controller ->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->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; @@ -496,7 +628,7 @@ class AdminController extends Controller 'value' => $row->total_jawaban, 'total' => $row->total_semua ]; - + array_push($jawaban, $data_per_jawaban); } else { $data_per_jawaban = [ @@ -526,11 +658,11 @@ class AdminController extends Controller ->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 = [ @@ -565,13 +697,13 @@ class AdminController extends Controller 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'])) { @@ -581,7 +713,7 @@ class AdminController extends Controller } } } - + $data_setuju_report = []; $data_setuju_header = ['No', 'Soal']; foreach ($data_option_setuju as $key => $value) { @@ -677,7 +809,7 @@ class AdminController extends Controller { 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 @@ -726,7 +858,7 @@ class AdminController extends Controller unset($value['id']); unset($value['jawaban_detail']); } - + return Excel::download(new DashboardJawabanExport($data_header, $data), 'data jawaban pegawai.xlsx'); } diff --git a/composer.lock b/composer.lock index f2de464..402bddc 100644 --- a/composer.lock +++ b/composer.lock @@ -727,31 +727,31 @@ }, { "name": "fruitcake/php-cors", - "version": "v1.3.0", + "version": "v1.4.0", "source": { "type": "git", "url": "https://github.com/fruitcake/php-cors.git", - "reference": "3d158f36e7875e2f040f37bc0573956240a5a38b" + "reference": "38aaa6c3fd4c157ffe2a4d10aa8b9b16ba8de379" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/3d158f36e7875e2f040f37bc0573956240a5a38b", - "reference": "3d158f36e7875e2f040f37bc0573956240a5a38b", + "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/38aaa6c3fd4c157ffe2a4d10aa8b9b16ba8de379", + "reference": "38aaa6c3fd4c157ffe2a4d10aa8b9b16ba8de379", "shasum": "" }, "require": { - "php": "^7.4|^8.0", - "symfony/http-foundation": "^4.4|^5.4|^6|^7" + "php": "^8.1", + "symfony/http-foundation": "^5.4|^6.4|^7.3|^8" }, "require-dev": { - "phpstan/phpstan": "^1.4", + "phpstan/phpstan": "^2", "phpunit/phpunit": "^9", - "squizlabs/php_codesniffer": "^3.5" + "squizlabs/php_codesniffer": "^4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2-dev" + "dev-master": "1.3-dev" } }, "autoload": { @@ -782,7 +782,7 @@ ], "support": { "issues": "https://github.com/fruitcake/php-cors/issues", - "source": "https://github.com/fruitcake/php-cors/tree/v1.3.0" + "source": "https://github.com/fruitcake/php-cors/tree/v1.4.0" }, "funding": [ { @@ -794,7 +794,7 @@ "type": "github" } ], - "time": "2023-10-12T05:21:21+00:00" + "time": "2025-12-03T09:33:47+00:00" }, { "name": "graham-campbell/result-type", @@ -1271,16 +1271,16 @@ }, { "name": "laravel/framework", - "version": "v11.46.2", + "version": "v11.47.0", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "d6b16e72a98c2ad3257ec6b3f1f00532c3b1c2fc" + "reference": "86693ffa1ba32f56f8c44e31416c6665095a62c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/d6b16e72a98c2ad3257ec6b3f1f00532c3b1c2fc", - "reference": "d6b16e72a98c2ad3257ec6b3f1f00532c3b1c2fc", + "url": "https://api.github.com/repos/laravel/framework/zipball/86693ffa1ba32f56f8c44e31416c6665095a62c5", + "reference": "86693ffa1ba32f56f8c44e31416c6665095a62c5", "shasum": "" }, "require": { @@ -1482,7 +1482,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2025-11-25T19:02:06+00:00" + "time": "2025-11-28T18:20:11+00:00" }, { "name": "laravel/prompts", @@ -2600,16 +2600,16 @@ }, { "name": "nesbot/carbon", - "version": "3.10.3", + "version": "3.11.0", "source": { "type": "git", "url": "https://github.com/CarbonPHP/carbon.git", - "reference": "8e3643dcd149ae0fe1d2ff4f2c8e4bbfad7c165f" + "reference": "bdb375400dcd162624531666db4799b36b64e4a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/8e3643dcd149ae0fe1d2ff4f2c8e4bbfad7c165f", - "reference": "8e3643dcd149ae0fe1d2ff4f2c8e4bbfad7c165f", + "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/bdb375400dcd162624531666db4799b36b64e4a1", + "reference": "bdb375400dcd162624531666db4799b36b64e4a1", "shasum": "" }, "require": { @@ -2617,9 +2617,9 @@ "ext-json": "*", "php": "^8.1", "psr/clock": "^1.0", - "symfony/clock": "^6.3.12 || ^7.0", + "symfony/clock": "^6.3.12 || ^7.0 || ^8.0", "symfony/polyfill-mbstring": "^1.0", - "symfony/translation": "^4.4.18 || ^5.2.1 || ^6.0 || ^7.0" + "symfony/translation": "^4.4.18 || ^5.2.1 || ^6.0 || ^7.0 || ^8.0" }, "provide": { "psr/clock-implementation": "1.0" @@ -2701,7 +2701,7 @@ "type": "tidelift" } ], - "time": "2025-09-06T13:39:36+00:00" + "time": "2025-12-02T21:04:28+00:00" }, { "name": "nette/schema", @@ -2770,20 +2770,20 @@ }, { "name": "nette/utils", - "version": "v4.0.9", + "version": "v4.1.0", "source": { "type": "git", "url": "https://github.com/nette/utils.git", - "reference": "505a30ad386daa5211f08a318e47015b501cad30" + "reference": "fa1f0b8261ed150447979eb22e373b7b7ad5a8e0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/505a30ad386daa5211f08a318e47015b501cad30", - "reference": "505a30ad386daa5211f08a318e47015b501cad30", + "url": "https://api.github.com/repos/nette/utils/zipball/fa1f0b8261ed150447979eb22e373b7b7ad5a8e0", + "reference": "fa1f0b8261ed150447979eb22e373b7b7ad5a8e0", "shasum": "" }, "require": { - "php": "8.0 - 8.5" + "php": "8.2 - 8.5" }, "conflict": { "nette/finder": "<3", @@ -2806,7 +2806,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-master": "4.1-dev" } }, "autoload": { @@ -2853,9 +2853,9 @@ ], "support": { "issues": "https://github.com/nette/utils/issues", - "source": "https://github.com/nette/utils/tree/v4.0.9" + "source": "https://github.com/nette/utils/tree/v4.1.0" }, - "time": "2025-10-31T00:45:47+00:00" + "time": "2025-12-01T17:49:23+00:00" }, { "name": "nikic/php-parser", @@ -6930,16 +6930,16 @@ }, { "name": "laravel/sail", - "version": "v1.48.1", + "version": "v1.50.0", "source": { "type": "git", "url": "https://github.com/laravel/sail.git", - "reference": "ef122b223f5fca5e5d88bda5127c846710886329" + "reference": "9177d5de1c8247166b92ea6049c2b069d2a1802f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/sail/zipball/ef122b223f5fca5e5d88bda5127c846710886329", - "reference": "ef122b223f5fca5e5d88bda5127c846710886329", + "url": "https://api.github.com/repos/laravel/sail/zipball/9177d5de1c8247166b92ea6049c2b069d2a1802f", + "reference": "9177d5de1c8247166b92ea6049c2b069d2a1802f", "shasum": "" }, "require": { @@ -6989,7 +6989,7 @@ "issues": "https://github.com/laravel/sail/issues", "source": "https://github.com/laravel/sail" }, - "time": "2025-11-17T22:05:34+00:00" + "time": "2025-12-03T17:16:36+00:00" }, { "name": "mockery/mockery", @@ -7688,16 +7688,16 @@ }, { "name": "phpunit/phpunit", - "version": "11.5.44", + "version": "11.5.45", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "c346885c95423eda3f65d85a194aaa24873cda82" + "reference": "faf5fff4fb9beb290affa53f812b05380819c51a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c346885c95423eda3f65d85a194aaa24873cda82", - "reference": "c346885c95423eda3f65d85a194aaa24873cda82", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/faf5fff4fb9beb290affa53f812b05380819c51a", + "reference": "faf5fff4fb9beb290affa53f812b05380819c51a", "shasum": "" }, "require": { @@ -7769,7 +7769,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.44" + "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.45" }, "funding": [ { @@ -7793,7 +7793,7 @@ "type": "tidelift" } ], - "time": "2025-11-13T07:17:35+00:00" + "time": "2025-12-01T07:38:43+00:00" }, { "name": "sebastian/cli-parser", diff --git a/resources/views/admin/dashboard.blade.php b/resources/views/admin/dashboard.blade.php index ddc4d1f..231d926 100644 --- a/resources/views/admin/dashboard.blade.php +++ b/resources/views/admin/dashboard.blade.php @@ -43,9 +43,8 @@ - - +
Nama Pegawai Unit KerjaTanggal IsiTotal
@@ -83,17 +82,15 @@ url: `{{ url('/admin/get_data_pegawai_sudah_survey') }}`, type: 'POST', data: function (d) { - d.nama_pegawai = $('#nama_pegawai').val(); d.unit_kerja = $('#select_unit_kerja').val(); d._token = '{{ csrf_token() }}'; } }, columns: [ - { data: 'nama' }, { data: 'unit' }, - { data: 'tanggal_isi' } + { data: 'total_unit' } ] }); } -@endsection \ No newline at end of file +@endsection