diff --git a/htdocs/app/Http/Controllers/DokterController.php b/htdocs/app/Http/Controllers/DokterController.php index 116f273c..84ec9e20 100644 --- a/htdocs/app/Http/Controllers/DokterController.php +++ b/htdocs/app/Http/Controllers/DokterController.php @@ -2209,7 +2209,7 @@ class DokterController extends Controller $nofoto = $request->input('nofoto'); $id = $request->input('id'); $jpoli = Periksa::where('id', $id)->first(); - $statuse = $jpoli->status; + $statuse = $jpoli->status ?? ''; $noregister = $jpoli->noregister; $daftar = $jpoli->daftar; $nama = Session('nama'); diff --git a/htdocs/app/Http/Controllers/FrontpageController.php b/htdocs/app/Http/Controllers/FrontpageController.php index d4fc62ba..641a6a21 100644 --- a/htdocs/app/Http/Controllers/FrontpageController.php +++ b/htdocs/app/Http/Controllers/FrontpageController.php @@ -170,6 +170,323 @@ class FrontpageController extends Controller return view('pendaftaran', $data); } } + public function viewMobileMode() { + if (Session::get('previlage') == ''){ + return redirect('/login'); + } else { + $alldata = Periksa::where(function($q) { + $q->where(function($sub) { + $sub->whereNotIn('status', ['Selesai', 'Arsip']) + ->where('status', 'not like', 'Dibatalkan%'); + })->orWhereNull('status'); + })->get(); + + // Kelompok array + $cairansteril = [15,16,43,47,48,66,96,205,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223]; + $cci = [20]; + $darah = [7,8,13,17,29,33,44,107,114,115,199,200,201,202]; + $feces = [37,38,148,149,204]; + $hiv = [30]; + $kukukulit = [165,179,180,181,183,184,185,187,188,189,190,192,194,195,196,198]; + $kulturtb = [26,40,45,52,53,56,60,61,68,69,75,92,102,122,123,136,137,144,145,152,153,233]; + $pusdanjaringan = [18,19,32,35,46,49,50,54,57,58,59,72,160,182,186,191,193,197,206,207,208,224,225,226,227,228,234,235,236,237]; + $sputum = [1,12,23,24,36,39,229,230,231,232]; + $swab = [2,4,5,9,10,11,12,21,22,27,34,41,42,51,63,64,65,85,86,87,88,93,97,118,120,121,125,126,127,128,129,130,132,133,134,135,140,147,158,159,161,162,163,164,166,167,168,169,170,171,172,173,174,175,176,177,178]; + $tcmnontb = [79,80,81,82,83,84,203]; + $tcmtb = [14,28,55,62,94,104,105,124,138,146]; + $urine = [3,6,25,31,154,155,156,157]; + + // Semua array kategori digabung menjadi satu untuk mencari "lainnya" + $allCategories = array_merge( + $cairansteril, $cci, $darah, $feces, $hiv, $kukukulit, $kulturtb, + $pusdanjaringan, $sputum, $swab, $tcmnontb, $tcmtb, $urine + ); + + // Hitung total sesuai kategori + $data['cairansteril'] = $alldata->whereIn('poli_id', $cairansteril)->count(); + $data['cci'] = $alldata->whereIn('poli_id', $cci)->count(); + $data['darah'] = $alldata->whereIn('poli_id', $darah)->count(); + $data['feces'] = $alldata->whereIn('poli_id', $feces)->count(); + $data['hiv'] = $alldata->whereIn('poli_id', $hiv)->count(); + $data['kukukulit'] = $alldata->whereIn('poli_id', $kukukulit)->count(); + $data['kulturtb'] = $alldata->whereIn('poli_id', $kulturtb)->count(); + $data['pusdanjaringan'] = $alldata->whereIn('poli_id', $pusdanjaringan)->count(); + $data['sputum'] = $alldata->whereIn('poli_id', $sputum)->count(); + $data['swab'] = $alldata->whereIn('poli_id', $swab)->count(); + $data['tcmnontb'] = $alldata->whereIn('poli_id', $tcmnontb)->count(); + $data['tcmtb'] = $alldata->whereIn('poli_id', $tcmtb)->count(); + $data['urine'] = $alldata->whereIn('poli_id', $urine)->count(); + + // Hitung yang tidak masuk kategori mana pun + $data['lainnya'] = $alldata->filter(function ($item) use ($allCategories) { + return !in_array($item->poli_id, $allCategories); + })->count(); + + // Kirim alldata jika tetap ingin dipakai + $data['alldata'] = $alldata; + + return view('mobilemode', $data); + } + } + public function viewTabletsMode($master) { + if (Session::get('previlage') == ''){ + return redirect('/login'); + } else { + $data = [ + 'dokters' => User::where('previlage', 'supervisor')->get(), + 'allppds' => User::where('previlage', 'ppds')->get(), + 'allanalis' => User::where('previlage', 'analis')->get(), + 'antrkrmsitu' => 0, + ]; + $allOrganisms = Organisms::orderBy('name', 'ASC')->get(); + $allASTManual = SiraB::whereNotNull('setmanual')->select('setmanual')->groupBy('setmanual')->get(); + $groupOrganisms = function ($kelompok) use ($allOrganisms) { + $organisms = $allOrganisms->where('kelompok', $kelompok); + if ($organisms->isEmpty()) { + return [ + 'organismes' => [[['id' => 0, 'name' => 'No Data']]], + 'categories' => ['No Data'], + ]; + } + $grouped = $organisms->groupBy('category'); + $organismes = []; + $categories = []; + $i = 0; + foreach ($grouped as $category => $items) { + $categories[] = $category; + $j = 0; + foreach ($items as $item) { + $organismes[$i][$j] = ['id' => $item->id, 'name' => $item->name]; + $j++; + } + $i++; + } + return [ + 'organismes' => $organismes, + 'categories' => $categories, + ]; + }; + + $biakankulturData = $groupOrganisms('biakankultur'); + $mikroorganismeData = $groupOrganisms('mikroorganisme'); + $data = array_merge($data, [ + 'organismes' => $biakankulturData['organismes'], + 'bacterycateggories' => $biakankulturData['categories'], + 'mikroorganismes' => $mikroorganismeData['organismes'], + 'mikroorganismestlist' => $mikroorganismeData['categories'], + ]); + $kelompokMapping = [ + 'jsonsputum' => 'Sputum', + 'jsonswabtenggorok' => 'Swab Tenggorok', + 'jsonurine' => 'Urine', + 'jsonswabperineum' => 'Swab perineum', + 'jsonselepitel' => 'Sel Epitel', + 'jsonselradang' => 'Sel Radang', + 'jsonmikroorganisme' => 'Q Mikroorganisme', + 'jsonjumlahlactobacillus' => 'Lactobacillus', + 'jsonjumlahgardnerella' => 'Gardnerella', + 'jsonjumlahmobiluncus' => 'Mobiluncus', + 'jsonpewarnaanziehlnielsen' => 'Pewarnaan Ziehl Nielsen', + 'jsonpewarnaanneisser' => 'Pewarnaan Neisser', + 'jsonpewarnaannegatif' => 'Pewarnaan Negatif', + 'jsonpewarnaanspora' => 'Pewarnaan Spora', + 'jsonmediabap' => 'Media BAP', + 'jsonmediacap' => 'Media CAP', + 'jsonmediamcconkey' => 'Media Mc Conkey', + 'jsonpemeriksaantl' => 'Pemeriksaan Tambahan Lainnya', + 'jsonbiakankultur' => 'Biakan Kultur', + ]; + foreach ($kelompokMapping as $key => $kelompok) { + $data[$key] = $allOrganisms->where('kelompok', $kelompok)->values(); + } + $kelompokBuku = [ + 'buku01' => 'Cairan Steril', + 'buku02' => 'CCI', + 'buku03' => 'Darah', + 'buku04' => 'HIV', + 'buku05' => 'Kuku, Kulit, Adnexa', + 'buku06' => 'Kultur TB', + 'buku07' => 'Pus dan Jaringan', + 'buku08' => 'Sputum', + 'buku09' => 'Swab', + 'buku10' => 'TCM TB', + 'buku11' => 'TCM non-TB', + 'buku12' => 'Urine', + 'buku13' => 'Feces', + 'buku0' => 'Unknown', + ]; + $data['antibiotics']= $allASTManual; + $data['lokasi'] = 'Lab Mikrobiologi'; + $data['master'] = $kelompokBuku[$master] ?? 'Unknown'; + + $cairansteril = [15,16,43,47,48,66,96,205,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223]; + $cci = 20; + $darah = [7,8,13,17,29,33,44,107,114,115,199,200,201,202]; + $feces = [37,38,148,149,204]; + $hiv = 30; + $kukukulit = [165,179,180,181,183,184,185,187,188,189,190,192,194,195,196,198]; + $kulturtb = [26,40,45,52,53,56,60,61,68,69,75,92,102,122,123,136,137,144,145,152,153,233]; + $pusdanjaringan = [18,19,32,35,46,49,50,54,57,58,59,72,160,182,186,191,193,197,206,207,208,224,225,226,227,228,234,235,236,237]; + $sputum = [1,12,23,24,36,39,229,230,231,232]; + $swab = [2,4,5,9,10,11,12,21,22,27,34,41,42,51,63,64,65,85,86,87,88,93,97,118,120,121,125,126,127,128,129,130,132,133,134,135,140,147,158,159,161,162,163,164,166,167,168,169,170,171,172,173,174,175,176,177,178]; + $tcmnontb = [79,80,81,82,83,84,203]; + $tcmtb = [14,28,55,62,94,104,105,124,138,146]; + $urine = [3,6,25,31,154,155,156,157]; + //jikabukan_array_tambahkan_kurung + $mapped = array_merge( + $cairansteril, + [$cci], + $darah, + $feces, + [$hiv], + $kukukulit, + $kulturtb, + $pusdanjaringan, + $sputum, + $swab, + $tcmnontb, + $tcmtb, + $urine + ); + $arraylist = Periksa::select( + 'id', 'mulai', 'akhir', 'orderid', 'noloket', 'nofoto', 'noregister', 'asalpasien', 'nmrs', 'pasien_id', 'nmpasien', + 'jkpasien', 'tgllahirpasien', 'tlppasien', 'alamatpasien', 'reques', 'usia', 'berat', 'ktp', 'bpjs', 'ruangan_id', + 'ruangan', 'dokter_id', 'ppdssenior', 'middleppds', 'ppdsjunior', 'ppdsmiddle2', 'ppdsjunior2', 'analis', 'excutor', + 'nmdokter', 'nmppdssenior', 'nmmiddleppds', 'nmppdsjunior', 'nmppdsmiddle2', 'nmppdsjunior2', 'nmanalis', 'nmexcutor', + 'klinisi', 'klinis', 'keterangan', 'kesimpulan', 'poli_id', 'asuransi', 'urgensi', 'diagnosa', 'diagnosa2', 'modality', + 'kd_spesimen', 'nm_spesimen', 'dlp', 'daftar', 'foto', 'tgldraft', 'nmdrafter', 'baca', 'nmpembaca', 'verifikasi', + 'export', 'tgladendum', 'nmadendum', 'filefoto', 'pendaftar', 'status', 'created_at', 'updated_at', + 'bhp_media', 'bhp_potsputum', 'bhp_poturine', 'bhp_oshe', 'bhp_obyekglass', 'bhp_botolbd', 'bhp_parafilm', + 'bhp_tips', 'bhp_cottonswab', 'bhp_antibiotiktambahan', 'id_esbl', 'id_mrsa', 'rating', 'nmpendaftar', + + DB::raw("DATE(daftar) as daftartgl"), + DB::raw("TO_CHAR(daftar, 'HH24:MI:SS') as daftarjam"), + DB::raw("TO_CHAR(export, 'HH24:MI:SS') as cetakjam"), + DB::raw("TO_CHAR(verifikasi, 'HH24:MI:SS') as verifikasijam"), + DB::raw("TO_CHAR(baca, 'HH24:MI:SS') as bacajam"), + DB::raw("TO_CHAR(foto, 'HH24:MI:SS') as fotojam"), + + DB::raw("CASE WHEN jkpasien = 'L' THEN '1' ELSE '' END AS l"), + DB::raw("CASE WHEN jkpasien = 'P' THEN '1' ELSE '' END AS p"), + DB::raw("CONCAT('https://10.10.123.218/hasil/', nofoto::text) as urlhasil"), + + DB::raw("CASE WHEN asuransi IN ('JKN', 'BPJS') THEN '1' ELSE '' END AS jkn"), + DB::raw("CASE WHEN asuransi = 'Billing' THEN '1' ELSE '' END AS billing"), + DB::raw("CASE WHEN asuransi = 'GCU' THEN '1' ELSE '' END AS gcu"), + DB::raw("CASE WHEN asuransi IN ('MANDIRI', 'Umum') THEN '1' ELSE '' END AS umum"), + DB::raw("CASE WHEN asuransi = 'SWASTA' THEN '1' ELSE '' END AS swasta"), + DB::raw("CASE WHEN asuransi = 'TAG' THEN '1' ELSE '' END AS tag"), + + DB::raw("CASE WHEN urgensi != 'CITO' THEN '1' ELSE '' END AS elective"), + DB::raw("CASE WHEN urgensi = 'CITO' THEN '1' ELSE '' END AS cito"), + + DB::raw("CASE + WHEN status IS NULL THEN 'NEW' + WHEN status = '' THEN 'NEW' + WHEN status LIKE '%Dibatalkan%' THEN 'Batal' + WHEN status LIKE '%Pemeriksaan Sampel%' THEN 'Pemeriksaan Sampel' + WHEN status LIKE '%Proses Analisis Sampel%' THEN 'Diperiksa' + WHEN status LIKE '%Draft%' THEN 'Draft' + WHEN status LIKE '%Expertise%' THEN 'Expertise' + WHEN status LIKE '%Decliend%' THEN 'Decliend' + WHEN status LIKE '%Selesai%' THEN 'Selesai' + WHEN status LIKE '%Arsip%' THEN 'Arsip' + WHEN status LIKE '%Data Vitek di Terima%' THEN 'Data Vitek di Terima' + ELSE CONCAT('', status::text, '') + END AS tlsstatus"), + + DB::raw("CASE + WHEN status IS NULL THEN CONCAT('', nofoto::text, '') + WHEN status LIKE '%Dibatalkan%' THEN CONCAT('', nofoto::text, '') + WHEN status LIKE '%Pemeriksaan Sampel%' THEN CONCAT('', nofoto::text, '') + WHEN status LIKE '%Proses Analisis Sampel%' THEN CONCAT('', nofoto::text, '') + WHEN status LIKE '%Draft%' THEN CONCAT('', nofoto::text, '') + WHEN status LIKE '%Expertise%' THEN CONCAT('', nofoto::text, '') + WHEN status LIKE '%Decliend%' THEN CONCAT('', nofoto::text, '') + WHEN status LIKE '%Selesai%' THEN CONCAT('', nofoto::text, '') + WHEN status LIKE '%Arsip%' THEN CONCAT('', nofoto::text, '') + ELSE CONCAT('', nofoto::text, '') + END AS tlsnofoto"), + + DB::raw("CASE + WHEN status IS NULL THEN CONCAT('', noregister::text, '') + WHEN status LIKE '%Dibatalkan%' THEN CONCAT('', noregister::text, '') + WHEN status LIKE '%Pemeriksaan Sampel%' THEN CONCAT('', noregister::text, '') + WHEN status LIKE '%Proses Analisis Sampel%' THEN CONCAT('', noregister::text, '') + WHEN status LIKE '%Draft%' THEN CONCAT('', noregister::text, '') + WHEN status LIKE '%Expertise%' THEN CONCAT('', noregister::text, '') + WHEN status LIKE '%Decliend%' THEN CONCAT('', noregister::text, '') + WHEN status LIKE '%Selesai%' THEN CONCAT('', noregister::text, '') + WHEN status LIKE '%Arsip%' THEN CONCAT('', noregister::text, '') + ELSE CONCAT('', noregister::text, '') + END AS tlsnoregister"), + + DB::raw("CASE + WHEN status IS NULL THEN CONCAT('', nmpasien::text, '') + WHEN status LIKE '%Dibatalkan%' THEN CONCAT('', nmpasien::text, '') + WHEN status LIKE '%Pemeriksaan Sampel%' THEN CONCAT('', nmpasien::text, '') + WHEN status LIKE '%Proses Analisis Sampel%' THEN CONCAT('', nmpasien::text, '') + WHEN status LIKE '%Draft%' THEN CONCAT('', nmpasien::text, '') + WHEN status LIKE '%Expertise%' THEN CONCAT('', nmpasien::text, '') + WHEN status LIKE '%Decliend%' THEN CONCAT('', nmpasien::text, '') + WHEN status LIKE '%Selesai%' THEN CONCAT('', nmpasien::text, '') + WHEN status LIKE '%Arsip%' THEN CONCAT('', nmpasien::text, '') + ELSE CONCAT('', nmpasien::text, '') + END AS tlsnama"), + + DB::raw("CASE + WHEN status IS NULL THEN CONCAT('', reques::text, '') + WHEN status LIKE '%Dibatalkan%' THEN CONCAT('', reques::text, '') + WHEN status LIKE '%Pemeriksaan Sampel%' THEN CONCAT('', reques::text, '') + WHEN status LIKE '%Proses Analisis Sampel%' THEN CONCAT('', reques::text, '') + WHEN status LIKE '%Draft%' THEN CONCAT('', reques::text, '') + WHEN status LIKE '%Expertise%' THEN CONCAT('', reques::text, '') + WHEN status LIKE '%Decliend%' THEN CONCAT('', reques::text, '') + WHEN status LIKE '%Selesai%' THEN CONCAT('', reques::text, '') + WHEN status LIKE '%Arsip%' THEN CONCAT('', reques::text, '') + ELSE CONCAT('', reques::text, '') + END AS tlsreques") + ); + if ($master == 'buku01'){ + $arraylist = $arraylist->whereIn('poli_id', $cairansteril); + } else if ($master == 'buku02') { + $arraylist = $arraylist->where('poli_id', $cci); + } else if ($master == 'buku03') { + $arraylist = $arraylist->whereIn('poli_id', $darah); + } else if ($master == 'buku04') { + $arraylist = $arraylist->where('poli_id', $hiv); + } else if ($master == 'buku05') { + $arraylist = $arraylist->whereIn('poli_id', $kukukulit); + } else if ($master == 'buku06') { + $arraylist = $arraylist->whereIn('poli_id', $kulturtb); + } else if ($master == 'buku07') { + $arraylist = $arraylist->whereIn('poli_id', $pusdanjaringan); + } else if ($master == 'buku08') { + $arraylist = $arraylist->whereIn('poli_id', $sputum); + } else if ($master == 'buku09') { + $arraylist = $arraylist->whereIn('poli_id', $swab); + } else if ($master == 'buku10') { + $arraylist = $arraylist->whereIn('poli_id', $tcmtb); + } else if ($master == 'buku11') { + $arraylist = $arraylist->whereIn('poli_id', $tcmnontb); + } else if ($master == 'buku12') { + $arraylist = $arraylist->whereIn('poli_id', $urine); + } else if ($master == 'buku13') { + $arraylist = $arraylist->whereIn('poli_id', $feces); + } else if ($master == 'buku0') { + $arraylist = $arraylist->whereNotIn('poli_id', $mapped); + } else { + } + $arraylist = $arraylist->where(function($q) { + $q->where(function($sub) { + $sub->whereNotIn('status', ['Selesai', 'Arsip']) + ->where('status', 'not like', 'Dibatalkan%'); + })->orWhereNull('status'); + }); + $data['alldata'] = $arraylist->orderBy('daftar', 'ASC')->get(); + return view('dokter.tabsmode', $data); + } + } public function autocompleteKlinik(Request $request){ $search = $request->get('term'); $result = Ruangan::where('ruangan', 'LIKE', '%'.$search.'%')->get(); diff --git a/htdocs/app/Http/Controllers/JsonTransferController.php b/htdocs/app/Http/Controllers/JsonTransferController.php index 9d48ccd2..29afede3 100644 --- a/htdocs/app/Http/Controllers/JsonTransferController.php +++ b/htdocs/app/Http/Controllers/JsonTransferController.php @@ -6,7 +6,7 @@ use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\File; use Illuminate\Support\Facades\Response; use ZipArchive; - +use JsonMachine\Items; class JsonTransferController extends Controller { protected $exportPath = 'database/seeders/data/'; @@ -94,30 +94,41 @@ class JsonTransferController extends Controller return response()->download($zipFile); } - public function importTable($table){ + public function importTable($table) { $path = base_path($this->exportPath . $table . '.json'); if (!file_exists($path)) { - return redirect()->back()->with('error', "File JSON untuk tabel $table tidak ditemukan."); - } - $json = file_get_contents($path); - $data = json_decode($json, true); - if (!is_array($data)) { - return redirect()->back()->with('error', "File JSON untuk tabel $table tidak valid."); + return back()->with('error', "File JSON untuk tabel $table tidak ditemukan."); } + try { DB::beginTransaction(); DB::table($table)->truncate(); - $chunks = array_chunk($data, 200); - foreach ($chunks as $chunk) { + + $items = Items::fromFile($path); + + $chunk = []; + foreach ($items as $row) { + $row = json_decode(json_encode($row), true); + $chunk[] = $row; + + if (count($chunk) >= 200) { + DB::table($table)->insert($chunk); + $chunk = []; + } + } + + if (!empty($chunk)) { DB::table($table)->insert($chunk); } + DB::commit(); - return redirect()->back()->with('success', "Data untuk tabel $table berhasil di-import."); + return back()->with('success', "Import berhasil!"); } catch (\Exception $e) { DB::rollBack(); - return redirect()->back()->with('error', "Gagal import tabel $table: " . $e->getMessage()); + return back()->with('error', $e->getMessage()); } } + public function pull(Request $request){ if (session('previlage') !== 'developer') { abort(403, 'Akses ditolak. Anda tidak memiliki izin untuk menjalankan git pull.'); diff --git a/htdocs/app/Periksa.php b/htdocs/app/Periksa.php index 6224830e..58d344c1 100644 --- a/htdocs/app/Periksa.php +++ b/htdocs/app/Periksa.php @@ -4,6 +4,10 @@ namespace App; use Illuminate\Database\Eloquent\Model; use App\KomponenJawaban; +use App\Riwayat; +use App\ResultSample; +use App\PertumKolomNi; + class Periksa extends Model { protected $table = "periksa"; @@ -56,4 +60,52 @@ class Periksa extends Model { return $this->hasMany(KomponenJawaban::class, 'accnumber', 'nofoto'); } + public function riwayats() + { + return $this->hasMany(Riwayat::class, 'nofoto', 'nofoto'); + } + public function rawResult() + { + return $this->hasOne(ResultSample::class, 'accession_number', 'nofoto'); + } + public function pertumkolomni() + { + return $this->hasMany(PertumKolomNi::class, 'orderid', 'id'); + } + public function lastMediaBAP() + { + return $this->hasOne(PertumKolomNi::class, 'orderid', 'id') + ->where('media', 'Media BAP') + ->latest(); + } + public function lastMediaCAP() + { + return $this->hasOne(PertumKolomNi::class, 'orderid', 'id') + ->where('media', 'Media CAP') + ->latest(); + } + public function lastMediaMcConkey() + { + return $this->hasOne(PertumKolomNi::class, 'orderid', 'id') + ->where('media', 'Media Mc Conkey') + ->latest(); + } + public function lastMediaSDA() + { + return $this->hasOne(PertumKolomNi::class, 'orderid', 'id') + ->where('media', 'Media SDA') + ->latest(); + } + public function lastMediaSelLain() + { + return $this->hasOne(PertumKolomNi::class, 'orderid', 'id') + ->where('media', 'Media Selektif lainnya') + ->latest(); + } + public function lastMediaTamLain() + { + return $this->hasOne(PertumKolomNi::class, 'orderid', 'id') + ->where('media', 'Media Tambahan Lainnya') + ->latest(); + } } diff --git a/htdocs/app/PertumKolomNi.php b/htdocs/app/PertumKolomNi.php new file mode 100644 index 00000000..55e90c42 --- /dev/null +++ b/htdocs/app/PertumKolomNi.php @@ -0,0 +1,11 @@ +