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 @@
+
+
+
@@ -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}}
+
+
+
+
+
+
+ | Nilai |
+ Pagi |
+ Sewaktu |
+
+
+
+ @foreach($nilaiList as $nilai)
+
+ | {{ $nilai }} |
+ {{ $rekapLaki[$nilai]['pagi'] ?? 0 }} |
+ {{ $rekapLaki[$nilai]['sewaktu'] ?? 0 }} |
+
+ @endforeach
+
+
+
+
+
+
+
+
+
Mikroskopis BTA SP Perempuan Bulan {{$bulan}} Tahun {{$tahun}}
+
+
+
+
+
+
+ | Nilai |
+ Pagi |
+ Sewaktu |
+
+
+
+ @foreach($nilaiList as $nilai)
+
+ | {{ $nilai }} |
+ {{ $rekapPerempuan[$nilai]['pagi'] ?? 0 }} |
+ {{ $rekapPerempuan[$nilai]['sewaktu'] ?? 0 }} |
+
+ @endforeach
+
+
+
+
+
+
+
+
+
+@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');