Compare commits

...

2 Commits

Author SHA1 Message Date
6c37654b0a - done soal dan dashboard unit 2025-12-04 16:12:06 +07:00
d5bb9cc508 - progress index soal 2025-12-04 15:58:06 +07:00
4 changed files with 288 additions and 104 deletions

View File

@ -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 '
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#detail_jawaban" data-id="'. $row->id .'">
Detail
</button>
';
})
->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');
}

84
composer.lock generated
View File

@ -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",

View File

@ -43,9 +43,8 @@
<table id="table" class="dt-complex-header table table-bordered">
<thead class="bg-primary" id="table_header">
<tr>
<th class="text-white fs-5">Nama Pegawai</th>
<th class="text-white fs-5">Unit Kerja</th>
<th class="text-white fs-5">Tanggal Isi</th>
<th class="text-white fs-5">Total</th>
</tr>
</thead>
</table>
@ -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' }
]
});
}
</script>
@endsection
@endsection

View File

@ -171,6 +171,10 @@
font-weight: 600;
font-size: 12px;
}
.badge-placeholder {
visibility: hidden;
}
</style>
@endsection
@ -257,10 +261,59 @@
@php
$questionCounter = 0;
$groupedQuestionDetails = [];
$groupIndexMap = [];
foreach ($soal->soalDetail as $detailItem) {
$detailConfigItem = json_decode($detailItem->soal, true) ?? [];
$detailHalValue = $detailItem->hal ?? $listHal->first();
$questionNumberValue = $detailConfigItem['no'] ?? null;
$hasNumberValue = $questionNumberValue !== null && $questionNumberValue !== '';
$groupKey = $hasNumberValue
? $detailHalValue . '|' . $questionNumberValue
: 'detail_' . $detailItem->id;
if (!array_key_exists($groupKey, $groupIndexMap)) {
$groupIndexMap[$groupKey] = count($groupedQuestionDetails);
$groupedQuestionDetails[] = [
'hal' => $detailHalValue,
'number' => $hasNumberValue ? $questionNumberValue : null,
'items' => [],
];
}
$groupPosition = $groupIndexMap[$groupKey];
$groupedQuestionDetails[$groupPosition]['items'][] = [
'detail' => $detailItem,
'config' => $detailConfigItem,
];
}
@endphp
@forelse ($soal->soalDetail as $detail)
@forelse ($groupedQuestionDetails as $groupData)
@php
$detailConfig = json_decode($detail->soal, true) ?? [];
$groupHal = $groupData['hal'];
$groupNumber = $groupData['number'];
$groupItems = $groupData['items'];
$groupFirstDetail = $groupItems[0]['detail'] ?? null;
$groupFirstConfig = $groupItems[0]['config'] ?? [];
$groupType = $groupFirstConfig['type'] ?? 'option';
$groupHasConsent = false;
foreach ($groupItems as $groupItemCheck) {
if (!empty($groupItemCheck['config']['persetujuan_form'])) {
$groupHasConsent = true;
break;
}
}
@endphp
<div class="question-card mb-4"
data-hal-card="{{ $groupHal }}"
data-detail-id="{{ $groupFirstDetail ? $groupFirstDetail->id : '' }}"
data-consent-question="{{ $groupHasConsent ? '1' : '0' }}"
data-question-type="{{ $groupType }}"
style="{{ $groupHal == $hal ? '' : 'display: none;' }}">
@foreach ($groupItems as $groupItem)
@php
$detail = $groupItem['detail'];
$detailConfig = $groupItem['config'] ?? [];
$pertanyaan = $detailConfig['soal'] ?? 'Pertanyaan tidak tersedia';
$type = $detailConfig['type'] ?? 'option';
$optionsRaw = $detailConfig['options'] ?? [];
@ -298,7 +351,6 @@
|| (is_string($currentAnswer) && stripos($currentAnswer, 'lainnya') !== false)
|| (!empty($oldOtherAnswer));
$detailHal = $detail->hal ?? $listHal->first();
$isVisible = $detailHal == $hal;
$optionsCount = is_array($options) ? count($options) : 0;
$hasLainnyaOption = collect($options)->contains(function ($optionItem) {
return is_string($optionItem) && stripos($optionItem, 'lainnya') !== false;
@ -315,6 +367,9 @@
$dualYearOld = null;
$dualMonthOld = null;
$questionNumber = $detailConfig['no'] ?? '';
$hasGroupNumber = $groupNumber !== null && $groupNumber !== '';
$badgeNumber = $hasGroupNumber ? $groupNumber : $questionNumber;
$shouldShowNumber = $badgeNumber !== null && $badgeNumber !== '' && (!$hasGroupNumber || $loop->first);
$rangeMin = null;
$rangeMax = null;
$rangeStep = 1;
@ -428,17 +483,16 @@
$rangeMaxDisplay = ($rangeMax !== null && floor($rangeMax) == $rangeMax) ? (int) $rangeMax : $rangeMax;
$rangeDefaultDisplay = ($rangeDefault !== null && floor($rangeDefault) == $rangeDefault) ? (int) $rangeDefault : $rangeDefault;
@endphp
<div class="question-card mb-4"
data-hal-card="{{ $detailHal }}"
data-detail-id="{{ $detail->id }}"
data-consent-question="{{ $isConsentQuestion ? '1' : '0' }}"
data-question-type="{{ $type }}"
style="{{ $isVisible ? '' : 'display: none;' }}">
@if (!$loop->first)
<hr class="my-4">
@endif
<div class="row g-3 align-items-start question-layout">
<div class="col-md-6 question-text-col">
<div class="d-flex align-items-center gap-3 mb-1">
@if ($questionNumber !== null)
<span class="badge rounded-pill bg-label-primary fs-6">{{ $questionNumber }}</span>
@if ($shouldShowNumber)
<span class="badge rounded-pill bg-label-primary fs-6">{{ $badgeNumber }}</span>
@elseif($hasGroupNumber)
<span class="badge rounded-pill bg-label-primary fs-6 badge-placeholder" aria-hidden="true">{{ $badgeNumber }}</span>
@endif
<h5 class="fw-semibold mb-0">{{ $pertanyaan }}</h5>
</div>
@ -653,6 +707,7 @@
@enderror
</div>
</div>
@endforeach
</div>
@empty
<div class="alert alert-info">