Merge branches 'main' and 'main' of https://git.rsabhk.co.id/muhammad_thoriq/mutu-rsab
This commit is contained in:
commit
d98c87bc08
85
app/Exports/DashboardDemografiExport.php
Normal file
85
app/Exports/DashboardDemografiExport.php
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Exports;
|
||||||
|
|
||||||
|
use Maatwebsite\Excel\Concerns\FromArray;
|
||||||
|
use Maatwebsite\Excel\Concerns\WithStyles;
|
||||||
|
use PhpOffice\PhpSpreadsheet\Style\Border;
|
||||||
|
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
|
||||||
|
|
||||||
|
class DashboardDemografiExport implements FromArray, WithStyles
|
||||||
|
{
|
||||||
|
protected $data;
|
||||||
|
|
||||||
|
public function __construct($data)
|
||||||
|
{
|
||||||
|
$this->data = $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function array(): array
|
||||||
|
{
|
||||||
|
return array_map(fn($d) => $d['row'], $this->data);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function styles(Worksheet $sheet)
|
||||||
|
{
|
||||||
|
foreach ($this->data as $index => $item) {
|
||||||
|
$rowNumber = $index + 1;
|
||||||
|
$rowType = $item['type'];
|
||||||
|
|
||||||
|
switch ($rowType) {
|
||||||
|
|
||||||
|
case 'title':
|
||||||
|
$sheet->getStyle("A{$rowNumber}")
|
||||||
|
->applyFromArray([
|
||||||
|
'font' => [
|
||||||
|
'bold' => true,
|
||||||
|
'size' => 14,
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'header':
|
||||||
|
$sheet->getStyle("A{$rowNumber}:C{$rowNumber}")
|
||||||
|
->applyFromArray([
|
||||||
|
'font' => [
|
||||||
|
'bold' => true,
|
||||||
|
'size' => 12
|
||||||
|
],
|
||||||
|
'fill' => [
|
||||||
|
'fillType' => 'solid',
|
||||||
|
'color' => ['rgb' => 'FFFF99']
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'body':
|
||||||
|
$sheet->getStyle("A{$rowNumber}:C{$rowNumber}")
|
||||||
|
->applyFromArray([
|
||||||
|
'font' => [
|
||||||
|
'size' => 11
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// APPLY BORDER HANYA UNTUK ROW NON-EMPTY
|
||||||
|
foreach ($this->data as $i => $item) {
|
||||||
|
if ($item['type'] === 'empty') continue; // ❌ skip border
|
||||||
|
|
||||||
|
$row = $i + 1;
|
||||||
|
$sheet->getStyle("A{$row}:C{$row}")
|
||||||
|
->applyFromArray([
|
||||||
|
'borders' => [
|
||||||
|
'allBorders' => [
|
||||||
|
'borderStyle' => Border::BORDER_THIN,
|
||||||
|
'color' => ['rgb' => '000000']
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -3,6 +3,7 @@
|
|||||||
namespace App\Http\Controllers;
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
use App\Exports\DashboardAnalisisExport;
|
use App\Exports\DashboardAnalisisExport;
|
||||||
|
use App\Exports\DashboardDemografiExport;
|
||||||
use App\Exports\DashboardExport;
|
use App\Exports\DashboardExport;
|
||||||
use App\Exports\DashboardJawabanExport;
|
use App\Exports\DashboardJawabanExport;
|
||||||
use App\Models\Jawaban;
|
use App\Models\Jawaban;
|
||||||
@ -252,6 +253,19 @@ class AdminController extends Controller
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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()
|
public function dashboard_analisis()
|
||||||
{
|
{
|
||||||
$data['list_unit_kerja'] = [
|
$data['list_unit_kerja'] = [
|
||||||
@ -386,7 +400,7 @@ class AdminController extends Controller
|
|||||||
foreach ($soal as $key => $value) {
|
foreach ($soal as $key => $value) {
|
||||||
$jawaban = [];
|
$jawaban = [];
|
||||||
$soal_json = json_decode($value['soal'], true);
|
$soal_json = json_decode($value['soal'], true);
|
||||||
if($soal_json['is_analitic'] == 0){
|
if($soal_json['is_analitic'] != 1){
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -568,7 +582,7 @@ class AdminController extends Controller
|
|||||||
foreach ($soal as $key => $value) {
|
foreach ($soal as $key => $value) {
|
||||||
$jawaban = [];
|
$jawaban = [];
|
||||||
$soal_json = json_decode($value['soal'], true);
|
$soal_json = json_decode($value['soal'], true);
|
||||||
if($soal_json['is_analitic'] == 0){
|
if($soal_json['is_analitic'] != 1){
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -862,4 +876,515 @@ class AdminController extends Controller
|
|||||||
return Excel::download(new DashboardJawabanExport($data_header, $data), 'data jawaban pegawai.xlsx');
|
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');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -13,6 +13,16 @@
|
|||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<div class="card-title fs-4 fw-bold">Dashboard</div>
|
<div class="card-title fs-4 fw-bold">Dashboard</div>
|
||||||
|
<div class="mt-5">
|
||||||
|
<div class="card w-50 text-bg-danger">
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="card-title fs-4 fw-bold d-flex justify-content-between">
|
||||||
|
<div class="text-white">Total Tidak Mau Survey</div>
|
||||||
|
<div class="text-white" id="total_tidak_mau">-</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="mt-5">
|
<div class="mt-5">
|
||||||
<div class="d-flex gap-2 align-items-end">
|
<div class="d-flex gap-2 align-items-end">
|
||||||
<div class="form-group w-75">
|
<div class="form-group w-75">
|
||||||
@ -72,6 +82,7 @@
|
|||||||
})
|
})
|
||||||
|
|
||||||
generateTable();
|
generateTable();
|
||||||
|
getTotalTidakMauSurvey();
|
||||||
});
|
});
|
||||||
|
|
||||||
function generateTable() {
|
function generateTable() {
|
||||||
@ -92,5 +103,19 @@
|
|||||||
]
|
]
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getTotalTidakMauSurvey() {
|
||||||
|
$.ajax({
|
||||||
|
url: "{{ url('/admin/get_data_pegawai_tidak_mau_survey') }}",
|
||||||
|
type: "POST",
|
||||||
|
data: {
|
||||||
|
unit_kerja: $('#select_unit_kerja').val(),
|
||||||
|
_token: "{{ csrf_token() }}"
|
||||||
|
},
|
||||||
|
success: function(res) {
|
||||||
|
$('#total_tidak_mau').html((res.data ?? '-') + ' Orang');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
@endsection
|
@endsection
|
||||||
|
|||||||
318
resources/views/admin/dashboard_demografi.blade.php
Normal file
318
resources/views/admin/dashboard_demografi.blade.php
Normal file
@ -0,0 +1,318 @@
|
|||||||
|
@extends('layouts.template_admin')
|
||||||
|
|
||||||
|
@section('title', 'Dashboard | Mutu RSAB Harapan Kita')
|
||||||
|
@section('custom_css')
|
||||||
|
@endsection
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="card-title fs-4 fw-bold">Dashboard Demografi</div>
|
||||||
|
<div class="mt-5">
|
||||||
|
<div class="d-flex gap-2 align-items-end">
|
||||||
|
<div class="form-group w-75">
|
||||||
|
<label for="select_unit_kerja" class="form-label">Unit Kerja</label>
|
||||||
|
<select id="select_unit_kerja" class="select2 form-select" multiple>
|
||||||
|
@foreach ($list_unit_kerja as $item)
|
||||||
|
<option value="{{ $item }}">{{ $item }}</option>
|
||||||
|
@endforeach
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="w-100 d-flex gap-2">
|
||||||
|
<div class="btn btn-primary" id="search_button">
|
||||||
|
Cari
|
||||||
|
</div>
|
||||||
|
<form id="export_form" action="{{ url('/admin/report_data_demografi') }}" method="POST">
|
||||||
|
@csrf
|
||||||
|
<select class="d-none" name="unit_kerja[]" multiple>
|
||||||
|
@foreach ($list_unit_kerja as $item)
|
||||||
|
<option value="{{ $item }}">{{ $item }}</option>
|
||||||
|
@endforeach
|
||||||
|
</select>
|
||||||
|
<div type="button" class="btn btn-primary" id="export_form_button">Download Excel</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="mt-3" id="body_table" style="max-height: 80vh; overflow-y: auto;">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@endsection
|
||||||
|
|
||||||
|
@section('custom_js')
|
||||||
|
<script>
|
||||||
|
$(document).ready(function(){
|
||||||
|
$(".select2").select2();
|
||||||
|
$('#search_button').click(function(){
|
||||||
|
get_data_analisis();
|
||||||
|
})
|
||||||
|
|
||||||
|
$('#export_form_button').click(function() {
|
||||||
|
let select_unit_kerja = $('#select_unit_kerja').val();
|
||||||
|
$('[name="unit_kerja[]"]').val(select_unit_kerja);
|
||||||
|
|
||||||
|
$('#export_form').submit();
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
function get_data_analisis() {
|
||||||
|
$('#body_table').html(`<div class="p-10 d-flex justify-content-center">
|
||||||
|
<div>
|
||||||
|
<!-- Fold -->
|
||||||
|
<div class="sk-fold">
|
||||||
|
<div class="sk-fold-cube"></div>
|
||||||
|
<div class="sk-fold-cube"></div>
|
||||||
|
<div class="sk-fold-cube"></div>
|
||||||
|
<div class="sk-fold-cube"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>`);
|
||||||
|
$.ajax({
|
||||||
|
url: "{{ url('/admin/get_data_dashboard_demografi') }}",
|
||||||
|
type: "POST",
|
||||||
|
data: {
|
||||||
|
unit_kerja: $('#select_unit_kerja').val(),
|
||||||
|
_token: "{{ csrf_token() }}"
|
||||||
|
},
|
||||||
|
success: function(res) {
|
||||||
|
const data = res.data.data;
|
||||||
|
const dataMappingLamaKerjaFaskes = data.find(v => v.no_soal == '8');
|
||||||
|
const dataMappingLamaKerjaFaskesIndex = data.findIndex(v => v.no_soal == '8');
|
||||||
|
if(dataMappingLamaKerjaFaskes && dataMappingLamaKerjaFaskesIndex){
|
||||||
|
let totalJawaban = dataMappingLamaKerjaFaskes.jawaban.reduce((sum, item) => sum + item.value, 0);
|
||||||
|
|
||||||
|
const jawabanCategory = [
|
||||||
|
{
|
||||||
|
name: '0 - 1 Tahun',
|
||||||
|
total: totalJawaban,
|
||||||
|
percent: 0,
|
||||||
|
value: 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '2 - 5 Tahun',
|
||||||
|
total: totalJawaban,
|
||||||
|
percent: 0,
|
||||||
|
value: 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '6 - 10 Tahun',
|
||||||
|
total: totalJawaban,
|
||||||
|
percent: 0,
|
||||||
|
value: 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '> 10 Tahun',
|
||||||
|
total: totalJawaban,
|
||||||
|
percent: 0,
|
||||||
|
value: 0
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
// set value
|
||||||
|
dataMappingLamaKerjaFaskes.jawaban.map(val => {
|
||||||
|
const parts = val.name.split(" ");
|
||||||
|
const tahunParts = parts[0] ?? 0;
|
||||||
|
const bulanParts = parts[2] >> 0;
|
||||||
|
|
||||||
|
const tahun = `${tahunParts}.${bulanParts}`;
|
||||||
|
|
||||||
|
if(tahun <= 1){
|
||||||
|
jawabanCategory[0]['value'] += val.value;
|
||||||
|
} else if(tahun >= 2 && tahun <= 5){
|
||||||
|
jawabanCategory[1]['value'] += val.value;
|
||||||
|
} else if(tahun >= 6 && tahun <= 10) {
|
||||||
|
jawabanCategory[2]['value'] += val.value;
|
||||||
|
} else {
|
||||||
|
jawabanCategory[3]['value'] += val.value;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const mappingPercent = jawabanCategory.map(val => {
|
||||||
|
let percent = null;
|
||||||
|
|
||||||
|
if(val.total > 0){
|
||||||
|
percent = parseInt((val.value/val.total) * 100);
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
...val,
|
||||||
|
percent: percent
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const dataPerCategory = {
|
||||||
|
no_soal: dataMappingLamaKerjaFaskes.no_soal,
|
||||||
|
soal:dataMappingLamaKerjaFaskes.soal,
|
||||||
|
jawaban: mappingPercent
|
||||||
|
};
|
||||||
|
data[dataMappingLamaKerjaFaskesIndex] = dataPerCategory;
|
||||||
|
}
|
||||||
|
|
||||||
|
const dataMappingLamaKerjaUnit = data.find(v => v.no_soal == '9');
|
||||||
|
const dataMappingLamaKerjaUnitIndex = data.findIndex(v => v.no_soal == '9');
|
||||||
|
if(dataMappingLamaKerjaUnit && dataMappingLamaKerjaUnitIndex){
|
||||||
|
let totalJawaban = dataMappingLamaKerjaUnit.jawaban.reduce((sum, item) => sum + item.value, 0);
|
||||||
|
|
||||||
|
const jawabanCategory = [
|
||||||
|
{
|
||||||
|
name: '0 - 1 Tahun',
|
||||||
|
total: totalJawaban,
|
||||||
|
percent: 0,
|
||||||
|
value: 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '2 - 5 Tahun',
|
||||||
|
total: totalJawaban,
|
||||||
|
percent: 0,
|
||||||
|
value: 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '6 - 10 Tahun',
|
||||||
|
total: totalJawaban,
|
||||||
|
percent: 0,
|
||||||
|
value: 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '> 10 Tahun',
|
||||||
|
total: totalJawaban,
|
||||||
|
percent: 0,
|
||||||
|
value: 0
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
// set value
|
||||||
|
dataMappingLamaKerjaUnit.jawaban.map(val => {
|
||||||
|
const parts = val.name.split(" ");
|
||||||
|
const tahunParts = parts[0] ?? 0;
|
||||||
|
const bulanParts = parts[2] >> 0;
|
||||||
|
|
||||||
|
const tahun = `${tahunParts}.${bulanParts}`;
|
||||||
|
|
||||||
|
if(tahun <= 1){
|
||||||
|
jawabanCategory[0]['value'] += val.value;
|
||||||
|
} else if(tahun >= 2 && tahun <= 5){
|
||||||
|
jawabanCategory[1]['value'] += val.value;
|
||||||
|
} else if(tahun >= 6 && tahun <= 10) {
|
||||||
|
jawabanCategory[2]['value'] += val.value;
|
||||||
|
} else {
|
||||||
|
jawabanCategory[3]['value'] += val.value;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const mappingPercent = jawabanCategory.map(val => {
|
||||||
|
let percent = null;
|
||||||
|
|
||||||
|
if(val.total > 0){
|
||||||
|
percent = parseInt((val.value/val.total) * 100);
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
...val,
|
||||||
|
percent: percent
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const dataPerCategory = {
|
||||||
|
no_soal: dataMappingLamaKerjaUnit.no_soal,
|
||||||
|
soal:dataMappingLamaKerjaUnit.soal,
|
||||||
|
jawaban: mappingPercent
|
||||||
|
};
|
||||||
|
data[dataMappingLamaKerjaUnitIndex] = dataPerCategory;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$('#body_table').html("");
|
||||||
|
|
||||||
|
let stringTable = '';
|
||||||
|
data.forEach(element => {
|
||||||
|
stringTable += '<div class="mt-5">';
|
||||||
|
stringTable += `<div class="fw-bold fs-5 mb-3">${element.no_soal}. ${element.soal}</div>`;
|
||||||
|
stringTable += '<div class="table-responsive mb-8">';
|
||||||
|
stringTable += '<table id="table_detail" class="table table-bordered">';
|
||||||
|
stringTable += `<thead class="bg-primary" id="table_header">
|
||||||
|
<tr>
|
||||||
|
<th class="text-white">Jawaban</th>
|
||||||
|
<th class="text-white">Persentase Responden</th>
|
||||||
|
<th class="text-white">Jumlah Responden</th>
|
||||||
|
</tr>
|
||||||
|
</thead>`;
|
||||||
|
stringTable += '<tbody>';
|
||||||
|
let total = 0;
|
||||||
|
element.jawaban.forEach(e => {
|
||||||
|
stringTable += `
|
||||||
|
<tr>
|
||||||
|
<td>${e.name}</td>`;
|
||||||
|
if(e?.total > 0) {
|
||||||
|
total = e?.total;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(e.percent > 0){
|
||||||
|
stringTable += `<td class="fw-bold">${e.percent}%</td>`;
|
||||||
|
} else {
|
||||||
|
stringTable += `<td class="fw-bold">-</td>`;
|
||||||
|
}
|
||||||
|
|
||||||
|
stringTable += `<td class="">${e.value ?? 0} Orang</td>`;
|
||||||
|
stringTable += `</tr>`;
|
||||||
|
});
|
||||||
|
stringTable += '</tbody>';
|
||||||
|
stringTable += '</table>';
|
||||||
|
stringTable += '</div>';
|
||||||
|
stringTable += '</div>';
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
$('#body_table').html(stringTable);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function generateChart(data, id, soal) {
|
||||||
|
Highcharts.chart(id, {
|
||||||
|
chart: { type: 'column' },
|
||||||
|
title: { text: soal },
|
||||||
|
xAxis: {
|
||||||
|
categories: [soal],
|
||||||
|
title: { text: null },
|
||||||
|
labels: { enabled: false }
|
||||||
|
},
|
||||||
|
yAxis: {
|
||||||
|
min: 0,
|
||||||
|
max: 100,
|
||||||
|
title: { text: null }
|
||||||
|
},
|
||||||
|
credits: { enabled: false },
|
||||||
|
tooltip: {
|
||||||
|
useHTML: true,
|
||||||
|
formatter: function() {
|
||||||
|
console.log(this.point);
|
||||||
|
|
||||||
|
const totalUser = this.point.total_user ?? 0;
|
||||||
|
const totalSemua = this.point.total_semua ?? 0;
|
||||||
|
return `
|
||||||
|
<b>${this.series.name}</b><br>
|
||||||
|
Nilai: ${this.y}%<br>
|
||||||
|
Total Jawaban: ${totalUser}<br>
|
||||||
|
Total Semua: ${totalSemua}
|
||||||
|
`;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
series: data.map(j => ({
|
||||||
|
name: j.name,
|
||||||
|
type: 'column',
|
||||||
|
data: [{y: j.y, total_user: j.value, total_semua: j.total}]
|
||||||
|
})),
|
||||||
|
dataLabels: {
|
||||||
|
enabled: true,
|
||||||
|
formatter: function() {
|
||||||
|
return this.y + '%'; // ⬅️ Tampilkan angka + %
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
@endsection
|
||||||
@ -106,7 +106,7 @@
|
|||||||
processing: true,
|
processing: true,
|
||||||
serverSide: true,
|
serverSide: true,
|
||||||
ajax: {
|
ajax: {
|
||||||
url: `{{ url('/admin/get_data_pegawai_sudah_survey') }}`,
|
url: `{{ url('/admin/get_data_pegawai_jawaban') }}`,
|
||||||
type: 'POST',
|
type: 'POST',
|
||||||
data: function (d) {
|
data: function (d) {
|
||||||
d.nama_pegawai = $('#nama_pegawai').val();
|
d.nama_pegawai = $('#nama_pegawai').val();
|
||||||
|
|||||||
@ -110,21 +110,23 @@
|
|||||||
<nav class="nav flex-column sidebar-scroll list-materi bg-white px-5 gap-2">
|
<nav class="nav flex-column sidebar-scroll list-materi bg-white px-5 gap-2">
|
||||||
<a href="{{ url('/admin') }}" class="nav-link px-0 list-materi-hover px-3 d-flex justify-content-between align-items-center fs-5">
|
<a href="{{ url('/admin') }}" class="nav-link px-0 list-materi-hover px-3 d-flex justify-content-between align-items-center fs-5">
|
||||||
<div class="d-flex gap-2 align-items-center">
|
<div class="d-flex gap-2 align-items-center">
|
||||||
<i class="fa-solid fa-gauge-high"></i> Dashboard
|
<i class="fa-solid fa-building"></i> Dashboard Per Unit
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
<a href="{{ url('/admin/dashboard_demografi') }}" class="nav-link px-0 list-materi-hover px-3 d-flex justify-content-between align-items-center fs-5">
|
||||||
|
<div class="d-flex gap-2 align-items-center">
|
||||||
|
<i class="fa-solid fa-magnifying-glass-chart"></i> Analisis Demografi
|
||||||
</div>
|
</div>
|
||||||
<i class="fa-solid fa-chevron-right"></i>
|
|
||||||
</a>
|
</a>
|
||||||
<a href="{{ url('/admin/dashboard_analisis') }}" class="nav-link px-0 list-materi-hover px-3 d-flex justify-content-between align-items-center fs-5">
|
<a href="{{ url('/admin/dashboard_analisis') }}" class="nav-link px-0 list-materi-hover px-3 d-flex justify-content-between align-items-center fs-5">
|
||||||
<div class="d-flex gap-2 align-items-center">
|
<div class="d-flex gap-2 align-items-center">
|
||||||
<i class="fa-solid fa-gauge-high"></i> Dashboard Analisis
|
<i class="fa-solid fa-circle-question"></i> Analisis Per Soal
|
||||||
</div>
|
</div>
|
||||||
<i class="fa-solid fa-chevron-right"></i>
|
|
||||||
</a>
|
</a>
|
||||||
<a href="{{ url('/admin/dashboard_jawaban') }}" class="nav-link px-0 list-materi-hover px-3 d-flex justify-content-between align-items-center fs-5">
|
<a href="{{ url('/admin/dashboard_jawaban') }}" class="nav-link px-0 list-materi-hover px-3 d-flex justify-content-between align-items-center fs-5">
|
||||||
<div class="d-flex gap-2 align-items-center">
|
<div class="d-flex gap-2 align-items-center">
|
||||||
<i class="fa-solid fa-gauge-high"></i> Dashboard Jawaban
|
<i class="fa-solid fa-people-group"></i> Detail Jawaban Pegawai
|
||||||
</div>
|
</div>
|
||||||
<i class="fa-solid fa-chevron-right"></i>
|
|
||||||
</a>
|
</a>
|
||||||
</nav>
|
</nav>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -11,13 +11,18 @@ Route::post('/jawaban', [SoalController::class, 'store'])->name('soal.store');
|
|||||||
Route::get('/jawaban/terima-kasih', [SoalController::class, 'thankYou'])->name('soal.thankyou');
|
Route::get('/jawaban/terima-kasih', [SoalController::class, 'thankYou'])->name('soal.thankyou');
|
||||||
Route::get('/admin', [AdminController::class, 'index']);
|
Route::get('/admin', [AdminController::class, 'index']);
|
||||||
Route::post('/admin/get_data_pegawai_sudah_survey', [AdminController::class, 'get_data_pegawai_sudah_survey']);
|
Route::post('/admin/get_data_pegawai_sudah_survey', [AdminController::class, 'get_data_pegawai_sudah_survey']);
|
||||||
|
Route::post('/admin/get_data_pegawai_tidak_mau_survey', [AdminController::class, 'data_tidak_mau_survey']);
|
||||||
Route::get('/admin/dashboard_jawaban', [AdminController::class, 'dashboard_analisis']);
|
Route::get('/admin/dashboard_jawaban', [AdminController::class, 'dashboard_analisis']);
|
||||||
Route::post('/admin/get_data_dashboard_jawaban', [AdminController::class, 'get_data_dashboard_analisis']);
|
Route::post('/admin/get_data_dashboard_jawaban', [AdminController::class, 'get_data_dashboard_analisis']);
|
||||||
Route::get('/redirect-smart', [SoalController::class, 'redirectSmart']);
|
Route::get('/redirect-smart', [SoalController::class, 'redirectSmart']);
|
||||||
Route::post('/admin/report', [AdminController::class, 'download_report_data_pegawai_sudah_survey']);
|
Route::post('/admin/report', [AdminController::class, 'download_report_data_pegawai_sudah_survey']);
|
||||||
Route::get('/admin/dashboard_analisis', [AdminController::class, 'dashboard_analisis']);
|
Route::get('/admin/dashboard_analisis', [AdminController::class, 'dashboard_analisis']);
|
||||||
Route::get('/admin/dashboard_jawaban', [AdminController::class, 'dashboard_jawaban']);
|
Route::get('/admin/dashboard_jawaban', [AdminController::class, 'dashboard_jawaban']);
|
||||||
|
Route::post('/admin/get_data_pegawai_jawaban', [AdminController::class, 'get_data_pegawai_jawaban']);
|
||||||
Route::get('/admin/detail_jawaban/{jawaban_id}', [AdminController::class, 'get_jawaban']);
|
Route::get('/admin/detail_jawaban/{jawaban_id}', [AdminController::class, 'get_jawaban']);
|
||||||
Route::post('/admin/get_data_dashboard_analisis', [AdminController::class, 'get_data_dashboard_analisis']);
|
Route::post('/admin/get_data_dashboard_analisis', [AdminController::class, 'get_data_dashboard_analisis']);
|
||||||
Route::post('/admin/report_data_analisis', [AdminController::class, 'report_data_dashboard_analisis']);
|
Route::post('/admin/report_data_analisis', [AdminController::class, 'report_data_dashboard_analisis']);
|
||||||
Route::post('/admin/report_jawaban', [AdminController::class, 'download_report_data_jawaban_pegawai']);
|
Route::post('/admin/report_jawaban', [AdminController::class, 'download_report_data_jawaban_pegawai']);
|
||||||
|
Route::get('/admin/dashboard_demografi', [AdminController::class, 'dashboard_demografi']);
|
||||||
|
Route::post('/admin/get_data_dashboard_demografi', [AdminController::class, 'get_data_dashboard_demografi']);
|
||||||
|
Route::post('/admin/report_data_demografi', [AdminController::class, 'download_report_dashboard_demografi']);
|
||||||
Loading…
x
Reference in New Issue
Block a user