spreadsheet = new Spreadsheet(); $this->koneksi = $koneksi; $this->koneksifarmasi = $koneksifarmasi; } /** * Export data pasien ke Excel dengan multiple sheets */ public function exportDataPasien($Tanggal, $Tanggal2) { $Tanggal = $_GET['Tanggal'] ?? date('Y-m-d'); $Tanggal2 = $_GET['Tanggal2'] ?? $Tanggal; $this->spreadsheet->removeSheetByIndex(0); // Sheet 1: Data Pasien Rawat Jalan $this->createSheetRajal($Tanggal, $Tanggal2); // Sheet 2: Data Pasien Rawat Inap // $this->createSheetRanap($Tanggal); // Sheet 3: Data Pasien Tunggu Layanan // $this->createSheetTungguLayanan($Tanggal, $EXRJ); // Sheet 4: Data Farmasi // $this->createSheetFarmasiRacikan($Tanggal); //$this->createSheetFarmasiNonRacikan($Tanggal); //$this->createSheetFarmasiImportResep($Tanggal); //$this->createSheetVisitDokter($Tanggal); //$this->createSheetWaktuBukaPoli($Tanggal, $EXRJ); // Sheet 5: Rekap Harian // $this->createSheetRekap($tanggal_awal, $tanggal_akhir); return $this->spreadsheet; } /** * Membuat sheet untuk data Rawat Jalan */ private function createSheetRajal($Tanggal, $Tanggal2) { $sheet = $this->spreadsheet->createSheet(); $sheet->setTitle('Rawat Jalan'); // Header $headers = [ 'No', 'RegID', 'MEDREC', 'NAMA', 'Tanggal', 'Departemen', 'Dokter', 'Jaminan', 'PulangTanggal', //'Waktu Tunggu', 'Kesimpulan', 'Saran', 'Laboratorium', 'Radiologi', 'PemeriksaanFisik', 'PenyakitSekarangRingkasan', 'PenyakitDahuluRingkasan', 'RiwayatPenyakitSekarangAnamnesis', 'SaranKesehatanKerjaRingkasan', 'LaikKerjaCatatan', 'SetujuiOLeh' ]; $startRow = $this->setSimpleTitle($sheet, 'Lama Pasien Berobat Rawat Jalan', count($headers), $Tanggal); $startRow = $this->setHeaders($sheet, $headers, $startRow); $query = "select a.RegID, a.MEDRECID, a.Nama, a.Tanggal, a.PulangTanggal, d.Nama as NamaDepartemen, b.Nama as NamaDokter, c.Nama as NamaPerusahaan, a.JenisPasienID, pm.KesimpulanRingkasan as Kesimpulan, pm.SaranMotivasiRingkasan as saran, pp.KeteranganLaboratorium as lab, pp.KeteranganRadiologi as rad, pm.PemeriksaanFisikRingkasan, pm.PenyakitSekarangRingkasan, pm.PenyakitDahuluRingkasan, pm.RiwayatPenyakitSekarangAnamnesis, pm.SaranKesehatanKerjaRingkasan, pm.LaikKerjaCatatan, pm.SetujuiOLeh from regpas as a left join departemen d on a.DepartemenID = d.DepartemenID left join dokter b on b.DokterID = a.DokterID left join perusahaan c on c.PerusahaanID=a.PerusahaanID LEFT JOIN pengkajianmcu pm on a.RegID=pm.RegID LEFT join pemeriksaanpenunjang pp on a.RegID=pp.RegID where a.Tanggal between ? and ? and a.JenisRegID = '2' and a.NA='N' "; $stmt = $this->koneksi->prepare($query); $tanggal_awal = $Tanggal . ' 00:00:01'; $tanggal_akhir = $Tanggal2 . ' 23:59:59'; $stmt->bind_param("ss", $tanggal_awal, $tanggal_akhir); $stmt->execute(); $result = $stmt->get_result(); while ($row = $result->fetch_assoc()) { $data_array[] = $row; } $row = $startRow; $no = 1; foreach ($data_array as $key => $data) { # code... // } ($data = $result->fetch_assoc()) { $RegID = $data['RegID']; $LAB = 'LAB'; $RAD = 'RAD'; $sql2 = "select Tanggal from antrian where RegPasID = '$RegID' and Appointment = 'Y' limit 1"; $query2 = mysqli_query($this->koneksi, $sql2); $row3 = mysqli_fetch_array($query2); // $Tanggalnya = $row3['Tanggal']; if (empty($row3)) { $TanggalAwal = $data['Tanggal']; } else { $TanggalAwal = $row3['Tanggal']; } $sql3 = "select DepartemenID from trxdepartemen where RegID = '$RegID' and DepartemenID in ('$LAB','$RAD') group by RegID limit 1"; $query3 = mysqli_query($this->koneksi, $sql3); $row4 = mysqli_fetch_array($query3); $sql = "select TanggalPanggil from nomor where RegID = '$RegID' and Panggil = 1 limit 1"; $query = mysqli_query($this->koneksifarmasi, $sql); $row2 = mysqli_fetch_array($query); // $TanggalPanggil = $row2['TanggalPanggil']; if (empty($row2)) { $tanggal_pulang = $data['PulangTanggal']; } else { $tanggal_pulang = $row2['TanggalPanggil']; } $Tanggal_masuk = new DateTime($TanggalAwal); $PulangTanggal = new DateTime($tanggal_pulang); $selisih_jam = $PulangTanggal->diff($Tanggal_masuk); $jam = ($selisih_jam->format('%d') * 24 * 60 * 60) + ($selisih_jam->format('%h') * 60) + $selisih_jam->format('%i'); $status = ''; // $DepartemenID = $row4['DepartemenID']; if (empty($row4['DepartemenID'])) { if ($jam < 60) { $status = 'Kurang 1 Jam'; } else if ($jam >= 60 && $jam < 120) { $status = '1 sampai 2 jam'; } else if ($jam >= 120 && $jam < 180) { $status = '2 sammpai 3 jam'; } else if ($jam >= 180 && $jam < 240) { $status = '3 sampai 4 jam'; } else if ($jam >= 240) { $status = 'Lebih dari 4 jam'; } if ($data['JenisPasienID'] == 0) { $jaminan = 'Umum'; } else { $jaminan = $data['NamaPerusahaan']; } $sheet->setCellValue('A' . $row, $no++); $sheet->setCellValue('B' . $row, $data['RegID']); $sheet->setCellValue('C' . $row, $data['MEDRECID']); $sheet->setCellValue('D' . $row, $data['Nama']); $sheet->setCellValue('E' . $row, $data['Tanggal']); $sheet->setCellValue('F' . $row, $data['NamaDepartemen']); $sheet->setCellValue('G' . $row, $data['NamaDokter']); $sheet->setCellValue('H' . $row, $jaminan); $sheet->setCellValue('I' . $row, $data['PulangTanggal']); //$sheet->setCellValue('I' . $row, $tanggal_pulang); //$sheet->setCellValue('J' . $row, $jam . ' Menit'); $sheet->setCellValue('J' . $row, $data['Kesimpulan']); $sheet->setCellValue('K' . $row, $data['saran']); $sheet->setCellValue('L' . $row, $data['lab']); $sheet->setCellValue('M' . $row, $data['rad']); $sheet->setCellValue('N' . $row, $data['PemeriksaanFisikRingkasan']); $sheet->setCellValue('O' . $row, $data['PenyakitSekarangRingkasan']); $sheet->setCellValue('P' . $row, $data['PenyakitDahuluRingkasan']); $sheet->setCellValue('Q' . $row, $data['RiwayatPenyakitSekarangAnamnesis']); $sheet->setCellValue('R' . $row, $data['SaranKesehatanKerjaRingkasan']); $sheet->setCellValue('S' . $row, $data['LaikKerjaCatatan']); $sheet->setCellValue('T' . $row, $data['SetujuiOLeh']); //$sheet->setCellValue('O' . $row, $status); $row++; } } $this->autoSizeColumns($sheet, count($headers)); $this->applyTableStyle($sheet, 3, $row - 1, count($headers)); } /** * Membuat sheet untuk data Rawat Inap */ private function createSheetRanap($Tanggal) { $sheet = $this->spreadsheet->createSheet(); $sheet->setTitle('Rawat Inap'); // Header $headers = [ 'No', 'RegID', 'MEDRECID', 'Nama', 'Departemen', 'Dokter', 'Jaminan', 'Tanggal Masuk', 'Tanggal Resume', 'Tanggal Keluar Kamar', 'Tanggal Pulang', 'Lama', 'Status', 'a' ]; $startRow = $this->setSimpleTitle($sheet, 'Lama Pasien Pulang Rawat Inap', count($headers), $Tanggal); $startRow = $this->setHeaders($sheet, $headers, $startRow); $queryranap = "select r.RegID, r.MEDRECID, r.Nama, r.Tanggal, r.PulangTanggal, r.BolehPulangTanggal, d.Nama as NamaDepartemen, b.Nama as NamaDokter, c.Nama as NamaPerusahaan, r.JenisPasienID, e.TanggalBuat, e.TanggalEdit from regpas r left join pengkajianpasien_resume e on r.RegID = e.RegID left join departemen d on r.DepartemenID = d.DepartemenID left join dokter b on b.DokterID = r.DokterID left join perusahaan c on c.PerusahaanID=r.PerusahaanID where r.PulangTanggal between ? and ? and r.JenisRegID = '1' and r.Pulang = 'Y'"; // $querypulangranap = mysqli_query($koneksi, $queryranap); $stmt = $this->koneksi->prepare($queryranap); $tanggal_awal = $Tanggal . ' 00:00:00'; $tanggal_akhir = $Tanggal . ' 23:59:59'; $stmt->bind_param("ss", $tanggal_awal, $tanggal_akhir); $stmt->execute(); $result = $stmt->get_result(); $row = $startRow; $no = 1; // $data = $result->fetch_assoc(); // print_r($data); // die; while ($data = $result->fetch_assoc()) { if ($data['TanggalEdit'] == '0000-00-00 00:00:00') { $ambiljam = $data['TanggalBuat']; } else { $ambiljam = $data['TanggalEdit']; } $sql = "select TanggalKajian from pengkajianpasien where RegID = '$data[RegID]' and JnsKajian = 26 limit 1"; $query = mysqli_query($this->koneksi, $sql); $row2 = mysqli_fetch_array($query); $TanggalKajian = $row2['TanggalKajian']; //$Tanggalnow = date('Y-m-d'); $new_date = date('Y-m-d', strtotime($ambiljam)); $Tanggaln = date('Y-m-d', strtotime($data['BolehPulangTanggal'])); if (!empty($row2)) { if ($new_date != $Tanggaln) { $ambilawal = $TanggalKajian; $a = 'ada resume beda tanggal pulang'; } else { $ambilawal = $TanggalKajian; $a = 'ada resume sama tanggal pulang'; } // $a = 'ada resume'; } else { // if ($new_date != $Tanggaln) { // $ambilawal = $TanggalKajian; // } else { // $ambilawal = $ambiljam; // } $ambilawal = $ambiljam; $a = 'tidak ada resume'; } $dateresume = new DateTime($ambilawal); $datekeluarruangan = new DateTime($data['BolehPulangTanggal']); $jamlamapulang = $datekeluarruangan->diff($dateresume); $jamlamapulangget = ($jamlamapulang->format('%d') * 24 * 60 * 60) + ($jamlamapulang->format('%h') * 60) + $jamlamapulang->format('%i'); if ($jamlamapulangget < 120) { $status = 'Kurang dari 2 jam'; } else if ($jamlamapulangget >= 121 && $jamlamapulangget < 180) { $status = 'Kurang dari 3 jam'; } else if ($jamlamapulangget >= 180 && $jamlamapulangget < 720) { $status = 'Kurang dari 12 jam'; } else if ($jamlamapulangget >= 720) { $status = 'Lebih dari 12 jam'; } if ($data['JenisPasienID'] == 0) { $jaminan = 'Umum'; } else { $jaminan = $data['NamaPerusahaan']; } $sheet->setCellValue('A' . $row, $no++); $sheet->setCellValue('B' . $row, $data['RegID']); $sheet->setCellValue('C' . $row, $data['MEDRECID']); $sheet->setCellValue('D' . $row, $data['Nama']); $sheet->setCellValue('E' . $row, $data['NamaDepartemen']); $sheet->setCellValue('F' . $row, $data['NamaDokter']); $sheet->setCellValue('G' . $row, $jaminan); $sheet->setCellValue('H' . $row, $data['Tanggal']); $sheet->setCellValue('I' . $row, $dateresume); $sheet->setCellValue('J' . $row, $data['PulangTanggal']); $sheet->setCellValue('K' . $row, $data['BolehPulangTanggal']); $sheet->setCellValue('L' . $row, $jamlamapulangget . ' Menit'); $sheet->setCellValue('M' . $row, $status); $sheet->setCellValue('N' . $row, $a); $row++; } $this->autoSizeColumns($sheet, count($headers)); $this->applyTableStyle($sheet, 3, $row - 1, count($headers)); } /** * Membuat sheet untuk data Tunggu Layanan */ private function createSheetTungguLayanan($Tanggal, $EXRJ) { $sheet = $this->spreadsheet->createSheet(); $sheet->setTitle('Waktu Tunggu Layanan'); // Header $headers = [ 'No', 'RegID', 'MEDRECID', 'Nama', 'Departemen', 'Dokter', 'Jaminan', 'Tanggal Masuk', 'Tanggal Pemeriksaan Perawat', 'Tanggal Pemeriksaan Dokter', 'Lama', 'Status' ]; $startRow = $this->setSimpleTitle($sheet, 'Waktu Tunggu Layanan KPI Direktur', count($headers), $Tanggal); $startRow = $this->setHeaders($sheet, $headers, $startRow); // Query data UGD $query = "SELECT r.Nama, r.RegID, r.MEDRECID,r.Tanggal as TanggalMasuk,d.TanggalBuatDR,d.TanggalBuatNs,b.Nama as NamaDokter , e.Nama as NamaDepartemen, c.Nama as NamaPerusahaan, r.JenisPasienID from regpas r left join detail_pemeriksaan_rj d on r.RegID = d.RegID left join dokter b on r.DokterID = b.DokterID left join departemen e on r.DepartemenID = e.DepartemenID left join perusahaan c on c.PerusahaanID=r.PerusahaanID where d.DokterID != '' and r.Tanggal BETWEEN '$Tanggal 00:00:01' and '$Tanggal 22:00:01' and r.JenisRegID=0 and r.DepartemenID not in $EXRJ group by d.RegID"; $stmt = $this->koneksi->prepare($query); // $stmt->bind_param("ss", $tanggal_awal, $tanggal_akhir); $stmt->execute(); $result = $stmt->get_result(); $row = $startRow; $no = 1; while ($data = $result->fetch_assoc()) { $RegID = $data['RegID']; $sql2 = "select Tanggal from antrian where RegPasID = '$RegID' and Appointment = 'Y' order by Tanggal limit 1"; $query2 = mysqli_query($this->koneksi, $sql2); $row3 = mysqli_fetch_array($query2); if (empty($row3)) { $TanggalAwal = $data['TanggalMasuk']; } else { $TanggalAwal = $row3['Tanggal']; } $ambilpulang = $data['TanggalBuatDR']; $Tanggalawalmula = new DateTime($TanggalAwal); $PulangTanggal = new DateTime($ambilpulang); $bedanya = $PulangTanggal->diff($Tanggalawalmula); $jamtunggu = ($bedanya->format('%d') * 24 * 60 * 60) + ($bedanya->format('%h') * 60) + $bedanya->format('%i'); if ($jamtunggu < 30) { $status = 'Kurang dari 30 menittt'; } else if ($Tanggalawalmula >= $PulangTanggal) { $status = 'Kurang dari 30 menit (Daftar ADM)'; } else if ($jamtunggu >= 150) { $status = 'Lebih dari 2 Jam'; } else if ($jamtunggu >= 30 && $jamtunggu < 60) { $status = '30 sampai 60 menit'; } else if ($jamtunggu >= 60 && $jamtunggu < 90) { $status = '60 sampai 90 menit'; } else if ($jamtunggu >= 90 && $jamtunggu < 120) { $status = '90 sampai 120 menit'; } else if ($jamtunggu >= 120 && $jamtunggu < 150) { $status = 'Lebih dari 2 Jam'; } if ($data['JenisPasienID'] == 0) { $jaminan = 'Umum'; } else { $jaminan = $data['NamaPerusahaan']; } $sheet->setCellValue('A' . $row, $no++); $sheet->setCellValue('B' . $row, $data['RegID']); $sheet->setCellValue('C' . $row, $data['MEDRECID']); $sheet->setCellValue('D' . $row, $data['Nama']); $sheet->setCellValue('E' . $row, $data['NamaDepartemen']); $sheet->setCellValue('F' . $row, $data['NamaDokter']); $sheet->setCellValue('G' . $row, $jaminan); $sheet->setCellValue('H' . $row, $TanggalAwal); $sheet->setCellValue('I' . $row, $data['TanggalBuatNs']); $sheet->setCellValue('J' . $row, $data['TanggalBuatDR']); $sheet->setCellValue('K' . $row, $jamtunggu . ' Menit'); $sheet->setCellValue('L' . $row, $status); $row++; } $this->autoSizeColumns($sheet, count($headers)); $this->applyTableStyle($sheet, 1, $row - 1, count($headers)); } /** * Membuat sheet untuk data Farmasi */ private function createSheetFarmasiRacikan($Tanggal) { $sheet = $this->spreadsheet->createSheet(); $sheet->setTitle('Tunggu Farmasi Racikan'); // Header $headers = [ 'No', 'RegID', 'MEDRECID', 'Nama', 'Departemen', 'Jaminan', 'Kirim Resep', 'Waktu Pelayanan Farmasi', 'Waktu Panggil Farmasi', 'Waktu Selesai Farmasi', 'Waktu Tunggu', 'Status' ]; $startRow = $this->setSimpleTitle($sheet, 'Waktu Tunggu Farmasi Racikan', count($headers), $Tanggal); $startRow = $this->setHeaders($sheet, $headers, $startRow); // Query data Farmasi // $query = "select // TanggalCetak,RegID, TanggalPanggil, TanggalPelayanan, TanggalSelesai // from nomor // where Tanggal = '$Tanggal' // and Panggil= '1' // and Prefix = 'R'"; $query = "select TanggalCetak,RegID,TrxID,TanggalPanggil,TanggalPelayanan, TanggalSelesai from nomor where Tanggal = '$Tanggal' and Panggil= '1' and Prefix = 'R'"; $stmt = $this->koneksifarmasi->prepare($query); $stmt->execute(); $result = $stmt->get_result(); $row = $startRow; $no = 1; while ($data = $result->fetch_assoc()) { $sql2 = "select ResepID,RegID,TrxID from trxdepartemen where TrxID = '$data[TrxID]' limit 1"; $query = mysqli_query($this->koneksi, $sql2); $row3 = mysqli_fetch_array($query); $sql = "select a.RegID, a.MEDRECID, a.Nama, b.Nama as NamaDepartemen, c.Nama as NamaPerusahaan,a.JenisPasienID from regpas a left join departemen b on a.DepartemenID=b.DepartemenID left join perusahaan c on a.PerusahaanID=c.PerusahaanID where a.RegID = '$data[RegID]' limit 1"; $query = mysqli_query($this->koneksi, $sql); $row1 = mysqli_fetch_array($query); // $sql = "select Tanggal as TanggalKirim from resep where RegID = '$data[RegID]' and StatusID = '2' and v2 = 'N' limit 1"; $sql = "select Tanggal as TanggalKirim from resep where ResepID = '$row3[ResepID]' and StatusID = '2' and v2 = 'N' limit 1"; $query = mysqli_query($this->koneksi, $sql); $row2 = mysqli_fetch_array($query); $TanggalCetak = new DateTime($row2['TanggalKirim']); $TanggalSelesai = new DateTime($data['TanggalPanggil']); $bedanya2 = $TanggalSelesai->diff($TanggalCetak); //$harikeseluruhan = $bedanya->format('%d'); $jam2 = ($bedanya2->format('%d') * 24 * 60 * 60) + ($bedanya2->format('%h') * 60) + $bedanya2->format('%i'); //$jamkeseluruhan = $bedanya->format('%H:%I'); if ($jam2 < 30) { $status = 'Kurang dari 30 menit'; } else if ($jam2 >= 30 && $jam2 < 60) { $status = '30 sampai 60 menit'; } else if ($jam2 >= 60) { $status = 'Lebih dari 60 menit'; } if ($row1['JenisPasienID'] == 0) { $jaminan = 'Umum'; } else { $jaminan = $row1['NamaPerusahaan']; } $sheet->setCellValue('A' . $row, $no++); $sheet->setCellValue('B' . $row, $data['RegID']); $sheet->setCellValue('C' . $row, $row1['MEDRECID']); $sheet->setCellValue('D' . $row, $row1['Nama']); $sheet->setCellValue('E' . $row, $row1['NamaDepartemen']); $sheet->setCellValue('F' . $row, $jaminan); $sheet->setCellValue('G' . $row, $row2['TanggalKirim']); $sheet->setCellValue('H' . $row, $data['TanggalPelayanan']); $sheet->setCellValue('I' . $row, $data['TanggalPanggil']); $sheet->setCellValue('J' . $row, $data['TanggalSelesai']); $sheet->setCellValue('K' . $row, $jam2 . ' Menit'); $sheet->setCellValue('L' . $row, $status); $row++; } $this->autoSizeColumns($sheet, count($headers)); $this->applyTableStyle($sheet, 3, $row - 1, count($headers)); } /** * Membuat sheet untuk farmasi non racikan */ private function createSheetFarmasiNonRacikan($Tanggal) { $sheet = $this->spreadsheet->createSheet(); $sheet->setTitle('Tunggu Farmasi Non Racikan'); // Header $headers = [ 'No', 'RegID', 'MEDRECID', 'Nama', 'Departemen', 'Jaminan', 'Kirim Resep', 'Waktu Pelayanan Farmasi', 'Waktu Panggil Farmasi', 'Waktu Selesai Farmasi', 'Waktu Tunggu', 'Status' ]; $startRow = $this->setSimpleTitle($sheet, 'Waktu Tunggu Farmasi Non Racikan', count($headers), $Tanggal); $startRow = $this->setHeaders($sheet, $headers, $startRow); // $farmasiF = "select TanggalCetak,RegID, TanggalPanggil,TanggalPelayanan, TanggalSelesai from nomor where Tanggal = '$Tanggal' and Panggil= '1' and Prefix = 'F'"; $farmasiF = "select TanggalCetak,RegID,TrxID,TanggalPanggil,TanggalPelayanan, TanggalSelesai from nomor where Tanggal = '$Tanggal' and Panggil= '1' and Prefix = 'F'"; $stmt = $this->koneksifarmasi->prepare($farmasiF); $stmt->execute(); $result = $stmt->get_result(); $row = $startRow; $no = 1; while ($data = $result->fetch_assoc()) { $sql2 = "select ResepID,RegID,TrxID from trxdepartemen where TrxID = '$data[TrxID]' limit 1"; $query = mysqli_query($this->koneksi, $sql2); $row3 = mysqli_fetch_array($query); $sql = "select a.RegID, a.MEDRECID, a.Nama, b.Nama as NamaDepartemen, c.Nama as NamaPerusahaan, a.JenisPasienID from regpas a left join departemen b on a.DepartemenID=b.DepartemenID left join perusahaan c on a.PerusahaanID=c.PerusahaanID where a.RegID = '$data[RegID]' limit 1"; $query = mysqli_query($this->koneksi, $sql); $row1 = mysqli_fetch_array($query); // $sql = "select Tanggal as TanggalKirim from resep where RegID = '$data[RegID]' and StatusID = '2' and v2 = 'N' limit 1"; $sql = "select Tanggal as TanggalKirim from resep where ResepID = '$row3[ResepID]' and StatusID = '2' and v2 = 'N' limit 1"; $query = mysqli_query($this->koneksi, $sql); $row2 = mysqli_fetch_array($query); if (empty($row2)) { $TanggalAwal = $data['TanggalCetak']; } else { $TanggalAwal = $row2['TanggalKirim']; } $TanggalCetak = new DateTime($TanggalAwal); // $TanggalCetak = new DateTime($row2['TanggalKirim']); $TanggalSelesai = new DateTime($data['TanggalPanggil']); $bedanya3 = $TanggalSelesai->diff($TanggalCetak); //$harikeseluruhan = $bedanya->format('%d'); $jam3 = ($bedanya3->format('%d') * 24 * 60 * 60) + ($bedanya3->format('%h') * 60) + $bedanya3->format('%i'); //$jamkeseluruhan = $bedanya->format('%H:%I'); if ($jam3 < 20) { $status = 'Kurang dari 20 menit'; } else if ($jam3 >= 20 && $jam3 < 40) { $status = '20 sampai 40 menit'; } else if ($jam3 >= 40) { $status = 'Lebih dari 40 menit'; } if ($row1['JenisPasienID'] == 0) { $jaminan = 'Umum'; } else { $jaminan = $row1['NamaPerusahaan']; } $sheet->setCellValue('A' . $row, $no++); $sheet->setCellValue('B' . $row, $data['RegID']); $sheet->setCellValue('C' . $row, $row1['MEDRECID']); $sheet->setCellValue('D' . $row, $row1['Nama']); $sheet->setCellValue('E' . $row, $row1['NamaDepartemen']); $sheet->setCellValue('F' . $row, $jaminan); $sheet->setCellValue('G' . $row, $row2['TanggalKirim']); $sheet->setCellValue('H' . $row, $data['TanggalPelayanan']); $sheet->setCellValue('I' . $row, $data['TanggalPanggil']); $sheet->setCellValue('J' . $row, $data['TanggalSelesai']); $sheet->setCellValue('K' . $row, $jam3 . ' Menit'); $sheet->setCellValue('L' . $row, $status); $row++; } $this->autoSizeColumns($sheet, count($headers)); $this->applyTableStyle($sheet, 3, $row - 1, count($headers)); } /** * Membuat sheet untuk import resep */ private function createSheetFarmasiImportResep($Tanggal) { $sheet = $this->spreadsheet->createSheet(); $sheet->setTitle('Import Resep'); // Header $headers = [ 'No', 'RegID', 'MEDRECID', 'Nama', 'Departemen', 'Jaminan', 'Dokter', 'Waktu Resep', 'Waktu Import Resep', 'Waktu Tunggu', 'Status' ]; $startRow = $this->setSimpleTitle($sheet, 'Waktu Tunggu Resep Import', count($headers), $Tanggal); $startRow = $this->setHeaders($sheet, $headers, $startRow); $queryimport = "select c.Nama, c.MEDRECID, d.Nama as NamaDepartemen, c.JenisPasienID as JenisPasien, f.Nama as NamaPerusahaan, e.Nama as NamaDokter, r.Tanggal as TanggalBikin, r.ResepID,r.RegID from resep r left join departemen d on r.DepartemenID = d.DepartemenID left join regpas c on c.RegID = r.RegID left join dokter e on e.DokterID = r.DokterID left join perusahaan f on f.PerusahaanID=c.PerusahaanID where r.Tanggal between '$Tanggal 00:00:01' and '$Tanggal 23:59:59' and r.StatusID = '2' and r.v2 = 'N' and d.RJ = '1'"; $stmt = $this->koneksi->prepare($queryimport); $stmt->execute(); $result = $stmt->get_result(); $row = $startRow; $no = 0; while ($data = $result->fetch_assoc()) { $sql = "select Tanggal as TanggalTrxDepartemen from trxdepartemen where ResepID = '$data[ResepID]' limit 1"; $query = mysqli_query($this->koneksi, $sql); $row2 = mysqli_fetch_array($query); $TanggalBikin = new DateTime($data['TanggalBikin']); $TanggalTrxDepartemen = new DateTime($row2['TanggalTrxDepartemen']); $bedanya3 = $TanggalTrxDepartemen->diff($TanggalBikin); //$harikeseluruhan = $bedanya->format('%d'); $jam3 = ($bedanya3->format('%d') * 24 * 60 * 60) + ($bedanya3->format('%h') * 60) + $bedanya3->format('%i'); //$jamkeseluruhan = $bedanya->format('%H:%I'); if ($jam3 < 5) { $status = 'Kurang dari 5 menit'; } else if ($jam3 >= 5 && $jam3 < 15) { $status = '5 Sampai Dengan 15 menit'; } else if ($jam3 >= 15) { $status = 'Lebih dari 15 menit'; } if ($data['JenisPasien'] == 0) { $jaminan = 'Umum'; } else { $jaminan = $data['NamaPerusahaan']; } $sheet->setCellValue('A' . $row, $no++); $sheet->setCellValue('B' . $row, $data['RegID']); $sheet->setCellValue('C' . $row, $data['MEDRECID']); $sheet->setCellValue('D' . $row, $data['Nama']); $sheet->setCellValue('E' . $row, $data['NamaDepartemen']); $sheet->setCellValue('F' . $row, $jaminan); $sheet->setCellValue('G' . $row, $data['NamaDokter']); $sheet->setCellValue('H' . $row, $data['TanggalBikin']); $sheet->setCellValue('I' . $row, $row2['TanggalTrxDepartemen']); $sheet->setCellValue('J' . $row, $jam3 . ' Menit'); $sheet->setCellValue('K' . $row, $status); $row++; } $this->autoSizeColumns($sheet, count($headers)); $this->applyTableStyle($sheet, 3, $row - 1, count($headers)); } /** * Membuat sheet untuk waktu visit dokter */ private function createSheetVisitDokter($Tanggal) { $sheet = $this->spreadsheet->createSheet(); $sheet->setTitle('Visit Dokter'); // Header $headers = [ 'No', 'RegID', 'MEDRECID', 'Nama', 'Departemen', 'Jaminan', 'Dokter', 'Tanggal Daftar', 'Waktu Visite', 'Status' ]; $startRow = $this->setSimpleTitle($sheet, 'Waktu Visite Dokter', count($headers), $Tanggal); $startRow = $this->setHeaders($sheet, $headers, $startRow); $tanggalKemarin = date('Y-m-d', strtotime($Tanggal . ' -1 day')); $qvisite = "select a.RegID, a.MEDRECID, a.Nama as NamaPasien, b.Nama as NamaDepartemen, d.Nama as NamaPerusahaan, c.Nama as NamaDokter, a.JenisPasienID, a.DokterID, a.Tanggal from regpas as a left join departemen b on a.DepartemenID = b.DepartemenID left join dokter c on c.DokterID = a.DokterID left join perusahaan d on d.PerusahaanID=a.PerusahaanID where a.JenisRegID = '1' and a.Pulang = 'N' and a.BolehPulang = 'N' and a.NA= 'N' and a.Tanggal <= '$tanggalKemarin 16:00:00'"; $stmt = $this->koneksi->prepare($qvisite); $stmt->execute(); $result = $stmt->get_result(); $row = $startRow; $no = 1; while ($data = $result->fetch_assoc()) { $RegID = $data['RegID']; $DokterID = $data['DokterID']; $sqluserdokter = "select UserID from user where DokterID = '$data[DokterID]'"; $queryuserdokter = mysqli_query($this->koneksi, $sqluserdokter); $rowuserdokter = mysqli_fetch_array($queryuserdokter); $sqlcatatan = "select Oleh, TanggalBuat from catatan where Oleh = '$rowuserdokter[UserID]' and RegID = '$RegID' and Judul = 'Ctt. Terintegrasi' and TanggalBuat between '$Tanggal 00:00:01' and '$Tanggal 23:59:59' order by TanggalBuat desc limit 1"; $querycatatan = mysqli_query($this->koneksi, $sqlcatatan); $rowcatatan = mysqli_fetch_array($querycatatan); if (empty($rowcatatan['TanggalBuat'])) { $status = 'Belum visite'; } else { $tanggalBuat = new DateTime($rowcatatan['TanggalBuat']); $batas = new DateTime($Tanggal . " 11:00:00"); if ($tanggalBuat > $batas) { // $visitediatasjam11++; $status = 'Visite lebih dari jam 11'; } else { $status = 'Visite kurang dari jam 11'; } } if ($data['JenisPasienID'] == 0) { $jaminan = 'Umum'; } else { $jaminan = $data['NamaPerusahaan']; } $sheet->setCellValue('A' . $row, $no++); $sheet->setCellValue('B' . $row, $data['RegID']); $sheet->setCellValue('C' . $row, $data['MEDRECID']); $sheet->setCellValue('D' . $row, $data['NamaPasien']); $sheet->setCellValue('E' . $row, $data['NamaDepartemen']); $sheet->setCellValue('F' . $row, $jaminan); $sheet->setCellValue('G' . $row, $data['NamaDokter']); $sheet->setCellValue('H' . $row, $data['Tanggal']); $sheet->setCellValue('I' . $row, $rowcatatan['TanggalBuat']); $sheet->setCellValue('J' . $row, $status); $row++; } $this->autoSizeColumns($sheet, count($headers)); $this->applyTableStyle($sheet, 3, $row - 1, count($headers)); } /** * Membuat sheet untuk waktu buka poli */ private function createSheetWaktuBukaPoli($Tanggal, $EXRJ) { $sheet = $this->spreadsheet->createSheet(); $sheet->setTitle('Ketepatan Buka Poli'); // Header $headers = [ 'No', 'Nama Dokter', 'Jam Praktek', 'Jam Mulai Poli', 'Selisih', 'Status' ]; $startRow = $this->setSimpleTitle($sheet, 'Ketepatan Dokter Buka Poli', count($headers), $Tanggal); $startRow = $this->setHeaders($sheet, $headers, $startRow); $HariKe = date('N', strtotime($Tanggal)); //$HariKe = 1; $qsoapperdana = "select m.JadwalID, m.DokterID, d.Nama as NamaDokter from masterjadwaldokter m left join dokter d Using(DokterID) where m.HariID = '$HariKe' and m.NA = 'N' and d.NA = 'N' and d.Tipe not in ('Umum','') and m.DepartemenID not in $EXRJ"; $stmt = $this->koneksi->prepare($qsoapperdana); $stmt->execute(); $result = $stmt->get_result(); $row = $startRow; $no = 1; while ($data = $result->fetch_assoc()) { $JadwalID = $data['JadwalID']; $DokterID = $data['DokterID']; $sqljadwal = "SELECT Jam FROM masterjadwaldokterjam WHERE JadwalID = '$JadwalID' ORDER BY Jam ASC "; $queryjadwal = mysqli_query($this->koneksi, $sqljadwal); $rowjadwal = mysqli_fetch_array($queryjadwal); //10:00:00 //$batas = new DateTime($Tanggal . " 11:00:00"); $Jampraktekawal = $rowjadwal['Jam']; $cutidokter = "SELECT Tanggal as TanggalCuti , Catatan FROM cutidokter where DokterID = '$DokterID' and Tanggal ='$Tanggal' order by Tanggal Asc limit 1 "; $cuti = mysqli_query($this->koneksi, $cutidokter); $rowcutidokter = mysqli_fetch_array($cuti); $sqlsoappertama = "SELECT Tanggal as soappertama , RegID FROM detail_pemeriksaan_rj where DokterID = '$DokterID' and Tanggal between '$Tanggal 00:00:01' and '$Tanggal 23:59:59' order by Tanggal Asc limit 1 "; $querysoappertama = mysqli_query($this->koneksi, $sqlsoappertama); $rowsoappertama = mysqli_fetch_array($querysoappertama); $RegID = $rowsoappertama['RegID']; $Jampraktek = new DateTime($Tanggal . " $Jampraktekawal"); $JampraktekStr = $Jampraktek->format('Y-m-d H:i:s'); $tanggalBuatsoappertama = new DateTime($rowsoappertama['soappertama']); $tanggalBuatsoappertamaPlus1jam = clone $tanggalBuatsoappertama; $tanggalBuatsoappertamaPlus1jam->sub(new DateInterval('PT1H')); // tambah 1 jam ke depan $JampBuatsoap = ''; $waktu = ''; $nilai = ''; if (empty($rowsoappertama['soappertama'])) { $status = 'Poli belum dimulai'; } else if (!empty($rowcutidokter['Catatan'])) { $status = 'Cuti'; } else { $JampBuatsoap = $tanggalBuatsoappertama->format('H:i:s'); $bedanya3 = $Jampraktek->diff($tanggalBuatsoappertama); $jam3 = ($bedanya3->format('%d') * 24 * 60 * 60) + ($bedanya3->format('%h') * 60) + $bedanya3->format('%i'); if ($Jampraktek >= $tanggalBuatsoappertama) { $status = 'Poli Ontime'; $nilai = '+'; $waktu = $nilai . ' ' . $jam3 . ' Menit'; $sheet->setCellValue('A' . $row, $no++); $sheet->setCellValue('B' . $row, $data['NamaDokter']); $sheet->setCellValue('C' . $row, $Jampraktekawal); $sheet->setCellValue('D' . $row, $JampBuatsoap); $sheet->setCellValue('E' . $row, $waktu); $sheet->setCellValue('F' . $row, $status); $row++; } else { $status = 'Poli tidak Ontime'; $nilai = '-'; $waktu = $nilai . ' ' . $jam3 . ' Menit'; $sheet->setCellValue('A' . $row, $no++); $sheet->setCellValue('B' . $row, $data['NamaDokter']); $sheet->setCellValue('C' . $row, $Jampraktekawal); $sheet->setCellValue('D' . $row, $JampBuatsoap); $sheet->setCellValue('E' . $row, $waktu); $sheet->setCellValue('F' . $row, $status); $row++; } } // $sheet->setCellValue('A' . $row, $no++); // $sheet->setCellValue('B' . $row, $data['NamaDokter']); // $sheet->setCellValue('C' . $row, $Jampraktekawal); // $sheet->setCellValue('D' . $row, $JampBuatsoap); // $sheet->setCellValue('E' . $row, $waktu); // $sheet->setCellValue('F' . $row, $status); // $row++; } $this->autoSizeColumns($sheet, count($headers)); $this->applyTableStyle($sheet, 3, $row - 1, count($headers)); } /** * Set judul sederhana untuk sheet */ private function setSimpleTitle($sheet, $title, $columnCount = 8, $tanggal = '') { // Set judul di baris pertama $sheet->setCellValue('A1', $title); // Merge cells untuk judul $lastColumn = $this->getColumnLetter($columnCount); $sheet->mergeCells('A1:' . $lastColumn . '1'); // Style sederhana untuk judul $titleStyle = [ 'font' => [ 'bold' => true, 'size' => 14, ], 'alignment' => [ 'horizontal' => Alignment::HORIZONTAL_CENTER, ], ]; $sheet->getStyle('A1:' . $lastColumn . '1')->applyFromArray($titleStyle); // Set tanggal di baris kedua (jika ada tanggal) if (!empty($tanggal)) { $dateText = 'Tanggal: ' . date('d/m/Y', strtotime($tanggal)); $sheet->setCellValue('A2', $dateText); $lastColumn2 = $this->getColumnLetter($columnCount); $sheet->mergeCells('A2:' . $lastColumn2 . '2'); // Style untuk baris tanggal $dateStyle = [ 'font' => [ 'bold' => false, 'size' => 11, 'color' => ['rgb' => '666666'], ], 'alignment' => [ 'horizontal' => Alignment::HORIZONTAL_LEFT, ], ]; $sheet->getStyle('A2:' . $lastColumn2 . '2')->applyFromArray($dateStyle); return 3; // Return baris berikutnya untuk header } else { return 2; // Return baris berikutnya untuk header (tanpa baris tanggal) } } /** * Set header untuk sheet */ private function setHeaders($sheet, $headers, $startRow = 2) { $col = 'A'; foreach ($headers as $header) { $sheet->setCellValue($col . $startRow, $header); $col++; } // Style header $headerStyle = [ 'font' => [ 'bold' => true, 'color' => ['rgb' => 'FFFFFF'], ], 'fill' => [ 'fillType' => Fill::FILL_SOLID, 'startColor' => ['rgb' => '4472C4'], ], 'alignment' => [ 'horizontal' => Alignment::HORIZONTAL_CENTER, 'vertical' => Alignment::VERTICAL_CENTER, ], ]; $sheet->getStyle('A' . $startRow . ':' . $col . $startRow)->applyFromArray($headerStyle); return $startRow + 1; // Return baris berikutnya untuk data } /** * Auto size columns */ private function autoSizeColumns($sheet, $columnCount) { for ($i = 1; $i <= $columnCount; $i++) { $sheet->getColumnDimensionByColumn($i)->setAutoSize(true); } } /** * Apply table style dengan deteksi otomatis baris mulai */ private function applyTableStyle($sheet, $startRow, $endRow, $columnCount) { $styleArray = [ 'borders' => [ 'allBorders' => [ 'borderStyle' => Border::BORDER_THIN, 'color' => ['rgb' => '000000'], ], ], 'alignment' => [ 'vertical' => Alignment::VERTICAL_CENTER, ], ]; $sheet->getStyle('A' . $startRow . ':' . $this->getColumnLetter($columnCount) . $endRow)->applyFromArray($styleArray); } /** * Get column letter from number */ private function getColumnLetter($columnNumber) { $letter = ''; while ($columnNumber > 0) { $columnNumber--; $letter = chr(65 + ($columnNumber % 26)) . $letter; $columnNumber = intval($columnNumber / 26); } return $letter; } /** * Download file Excel */ public function download($filename = 'data_pasien.xlsx') { $writer = new Xlsx($this->spreadsheet); header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment;filename="' . $filename . '"'); header('Cache-Control: max-age=0'); $writer->save('php://output'); exit; } } // Contoh penggunaan if (isset($_GET['Tanggal'])) { $Tanggal = $_GET['Tanggal']; if ($Tanggal == '') { $Tanggal = date('Y-m-d'); } $exporter = new ExcelExporter($koneksi, $koneksifarmasi); $exporter->exportDataPasien($Tanggal, $EXRJ); $exporter->download('laporan_pasien_' . $Tanggal . '.xlsx'); } ?> Export Data ke Excel

Export Data ke Excel

Informasi: Data akan di-export ke Excel dengan 5 sheet: