From 510e8a2352585e1a5f98694bb80033102fd2ee52 Mon Sep 17 00:00:00 2001 From: Dwi Swandhana Date: Sat, 4 Jul 2026 09:36:08 +0700 Subject: [PATCH] update --- .../app/Http/Controllers/ReportController.php | 105 ++++++++++++++++++ htdocs/resources/views/admin/report.blade.php | 17 +++ .../views/cetak/mikroskopisbtasp.blade.php | 97 ++++++++++++++++ htdocs/routes/web.php | 1 + 4 files changed, 220 insertions(+) create mode 100644 htdocs/resources/views/cetak/mikroskopisbtasp.blade.php diff --git a/htdocs/app/Http/Controllers/ReportController.php b/htdocs/app/Http/Controllers/ReportController.php index 5aae0f19..aa67b7d4 100644 --- a/htdocs/app/Http/Controllers/ReportController.php +++ b/htdocs/app/Http/Controllers/ReportController.php @@ -340,6 +340,108 @@ class ReportController extends Controller ? 'MEMENUHI TARGET' : 'TIDAK MEMENUHI TARGET'; } + private function normalizeBtaSpValue($value) { + $value = trim(strip_tags((string) $value)); + $normalized = strtolower(str_replace(' ', '', $value)); + + if ($normalized === '+++' || $normalized === '3+') { + return '+++'; + } + if ($normalized === '++' || $normalized === '2+') { + return '++'; + } + if ($normalized === '+' || $normalized === '1+') { + return '+'; + } + if (in_array($normalized, ['1-9', '1s/d9', '1sd9'], true)) { + return '1-9'; + } + if (in_array($normalized, ['neg', 'negatif', 'negative'], true)) { + return 'Neg'; + } + + return null; + } + private function buildMikroskopisBtaSpReport($bulan, $tahun) { + $nilaiList = ['+++', '++', '+', '1-9', 'Neg']; + $report = []; + + foreach (['L' => 'Laki-laki', 'P' => 'Perempuan'] as $kodeKelamin => $labelKelamin) { + foreach ($nilaiList as $nilai) { + $report[$kodeKelamin][$nilai] = [ + 'kelamin' => $labelKelamin, + 'nilai' => $nilai, + 'pagi' => 0, + 'sewaktu' => 0, + ]; + } + } + + $query = DB::table('db_komponenjawaban') + ->select('db_komponenjawaban.komponen', 'db_komponenjawaban.isidata', 'periksa.jkpasien') + ->leftJoin('periksa', 'db_komponenjawaban.accnumber', 'periksa.nofoto') + ->where(function ($q) { + $q->where('db_komponenjawaban.komponen', 'LIKE', '%hasilpemeriksaantbbiakan_pagi%') + ->orWhere('db_komponenjawaban.komponen', 'LIKE', '%hasilpemeriksaantbbiakan_sewaktu%'); + }) + ->whereNotNull('db_komponenjawaban.isidata') + ->where('db_komponenjawaban.isidata', '!=', '') + ->whereYear('periksa.daftar', $tahun); + + if ($bulan != 'ALL' && $bulan != 'Pick Month') { + $query->whereMonth('periksa.daftar', $bulan); + } + + foreach ($query->get() as $row) { + $kelamin = $row->jkpasien == 'L' ? 'L' : 'P'; + $nilai = $this->normalizeBtaSpValue($row->isidata); + + if ($nilai === null || !isset($report[$kelamin][$nilai])) { + continue; + } + + if (stripos($row->komponen, 'hasilpemeriksaantbbiakan_pagi') !== false) { + $report[$kelamin][$nilai]['pagi']++; + } + + if (stripos($row->komponen, 'hasilpemeriksaantbbiakan_sewaktu') !== false) { + $report[$kelamin][$nilai]['sewaktu']++; + } + } + + return array_merge(array_values($report['L']), array_values($report['P'])); + } + public function genMikroskopisBtaSpReport(Request $request) { + $bulan = $request->input('bulan'); + $tahun = $request->input('tahun'); + + if ($tahun == '' OR is_null($tahun)){ + $getarray = explode('?', $bulan); + $bulan = $getarray[0] ?? date('m'); + $tahun = $getarray[1] ?? date('Y'); + $bulan = str_replace('bulan=', '', $bulan); + $tahun = str_replace('tahun=', '', $tahun); + } + + $nilaiList = ['+++', '++', '+', '1-9', 'Neg']; + $reportRows = collect($this->buildMikroskopisBtaSpReport($bulan, $tahun)); + $rekapLaki = $reportRows + ->where('kelamin', 'Laki-laki') + ->keyBy('nilai') + ->toArray(); + $rekapPerempuan = $reportRows + ->where('kelamin', 'Perempuan') + ->keyBy('nilai') + ->toArray(); + + return view('cetak.mikroskopisbtasp', compact( + 'rekapLaki', + 'rekapPerempuan', + 'nilaiList', + 'bulan', + 'tahun' + )); + } public function report(Request $request) { $bulan = $request->input('bulan'); $tahun = $request->input('tahun'); @@ -355,6 +457,9 @@ class ReportController extends Controller $order = $request->input('order') ?? 'id desc'; $filterscount = $request->input('filterscount') ?? 0; $isMdrReport = $jenisreport == 'list_hasil_mdr'; + if ($jenisreport == 'mikroskopis_bta_sp') { + return response()->json($this->buildMikroskopisBtaSpReport($bulan, $tahun)); + } if ($jenisreport == 'biorepository'){ if ($bulan == 'ALL'){ $queryBiorepo = DB::table('db_komponenjawaban') diff --git a/htdocs/resources/views/admin/report.blade.php b/htdocs/resources/views/admin/report.blade.php index cbd9c79f..fa8c343a 100644 --- a/htdocs/resources/views/admin/report.blade.php +++ b/htdocs/resources/views/admin/report.blade.php @@ -72,6 +72,9 @@
+
+ +
Biorepository Bakteri
@@ -654,6 +657,20 @@ $(document).ready(function () { var url = '{{url('/')}}/znreport?bulan='+bulan+'?tahun='+tahun; window.location.href = url; } + }); + $('#btnmikroskopisbtasp').click(function () { + var bulan = document.getElementById('bulan').value; + var tahun = document.getElementById('tahun').value; + if (bulan == '' || tahun == ''){ + swal({ + title : 'Mohon diLengkapi', + text : 'Data Dasar Bulan dan Tahun Wajib di Isi', + type : 'error', + }); + } else { + var url = '{{url('/')}}/mikroskopisbtasp?bulan='+bulan+'&tahun='+tahun; + window.location.href = url; + } }); $('#btnrekaptat').click(function () { var bulan = document.getElementById('bulan').value; diff --git a/htdocs/resources/views/cetak/mikroskopisbtasp.blade.php b/htdocs/resources/views/cetak/mikroskopisbtasp.blade.php new file mode 100644 index 00000000..dd13252d --- /dev/null +++ b/htdocs/resources/views/cetak/mikroskopisbtasp.blade.php @@ -0,0 +1,97 @@ +@extends('base.layout') +@section('content') + +
+
+
+
+
+
Mikroskopis BTA SP Laki-Laki Bulan {{$bulan}} Tahun {{$tahun}}
+

+
+ + + + + + + + + + + @foreach($nilaiList as $nilai) + + + + + + @endforeach + +
NilaiPagiSewaktu
{{ $nilai }}{{ $rekapLaki[$nilai]['pagi'] ?? 0 }}{{ $rekapLaki[$nilai]['sewaktu'] ?? 0 }}
+
+ +
+
+
+
+
Mikroskopis BTA SP Perempuan Bulan {{$bulan}} Tahun {{$tahun}}
+

+
+ + + + + + + + + + + @foreach($nilaiList as $nilai) + + + + + + @endforeach + +
NilaiPagiSewaktu
{{ $nilai }}{{ $rekapPerempuan[$nilai]['pagi'] ?? 0 }}{{ $rekapPerempuan[$nilai]['sewaktu'] ?? 0 }}
+
+ +
+
+
+
+
+@endsection +@push('script') + + +@endpush diff --git a/htdocs/routes/web.php b/htdocs/routes/web.php index d976bae3..163c0023 100644 --- a/htdocs/routes/web.php +++ b/htdocs/routes/web.php @@ -146,6 +146,7 @@ Route::group(['middleware' => 'project.ipg'], function() { Route::get('rekapantibiotik', [ReportController::class, 'genRekapAntibiotik']); Route::get('glassreport', [ReportController::class, 'genGlassReport']); Route::get('znreport', [ReportController::class, 'genZNreport']); + Route::get('mikroskopisbtasp', [ReportController::class, 'genMikroskopisBtaSpReport']); Route::get('tatreport', [ReportController::class, 'genTATreport']); Route::get('reportpenerimaansample', [ReportController::class, 'genRekapPenerimaanSample']); Route::post('reportpenerimaansample/mark-printed', [ReportController::class, 'markRekapPenerimaanSamplePrinted'])->name('markRekapPenerimaanSamplePrinted');