1258 lines
46 KiB
PHP
1258 lines
46 KiB
PHP
<?php
|
|
require 'vendor/autoload.php';
|
|
require 'koneksimysqli.php';
|
|
//require 'config.php';
|
|
// include 'config.php';
|
|
|
|
|
|
|
|
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
|
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
|
|
use PhpOffice\PhpSpreadsheet\Style\Alignment;
|
|
use PhpOffice\PhpSpreadsheet\Style\Border;
|
|
use PhpOffice\PhpSpreadsheet\Style\Fill;
|
|
|
|
$Tanggal = $_GET['Tanggal'] ?? date('Y-m-d');
|
|
$Tanggal2 = $_GET['Tanggal2'] ?? $Tanggal; // kalau tidak dikirim, pakai tanggal yang sama
|
|
|
|
class ExcelExporter
|
|
{
|
|
private $spreadsheet;
|
|
private $koneksi;
|
|
private $koneksifarmasi;
|
|
|
|
|
|
|
|
|
|
// private $EXRJ;
|
|
|
|
public function __construct($koneksi, $koneksifarmasi)
|
|
{
|
|
$this->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');
|
|
}
|
|
?>
|
|
|
|
<!DOCTYPE html>
|
|
<html lang="id">
|
|
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Export Data ke Excel</title>
|
|
<style>
|
|
body {
|
|
font-family: Arial, sans-serif;
|
|
margin: 20px;
|
|
background-color: #f5f5f5;
|
|
}
|
|
|
|
.container {
|
|
max-width: 600px;
|
|
margin: 0 auto;
|
|
background: white;
|
|
padding: 30px;
|
|
border-radius: 10px;
|
|
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
|
|
}
|
|
|
|
h1 {
|
|
color: #333;
|
|
text-align: center;
|
|
margin-bottom: 30px;
|
|
}
|
|
|
|
.form-group {
|
|
margin-bottom: 20px;
|
|
}
|
|
|
|
label {
|
|
display: block;
|
|
margin-bottom: 5px;
|
|
font-weight: bold;
|
|
color: #555;
|
|
}
|
|
|
|
input[type="date"] {
|
|
width: 100%;
|
|
padding: 10px;
|
|
border: 1px solid #ddd;
|
|
border-radius: 5px;
|
|
font-size: 16px;
|
|
}
|
|
|
|
.btn {
|
|
background-color: #4CAF50;
|
|
color: white;
|
|
padding: 12px 24px;
|
|
border: none;
|
|
border-radius: 5px;
|
|
cursor: pointer;
|
|
font-size: 16px;
|
|
width: 100%;
|
|
}
|
|
|
|
.btn:hover {
|
|
background-color: #45a049;
|
|
}
|
|
|
|
.info {
|
|
background-color: #e7f3ff;
|
|
border: 1px solid #b3d9ff;
|
|
padding: 15px;
|
|
border-radius: 5px;
|
|
margin-bottom: 20px;
|
|
}
|
|
</style>
|
|
</head>
|
|
|
|
<body>
|
|
<div class="container">
|
|
<h1>Export Data ke Excel</h1>
|
|
|
|
<div class="info">
|
|
<strong>Informasi:</strong> Data akan di-export ke Excel dengan 5 sheet:
|
|
<ul>
|
|
<li>Rawat Jalan</li>
|
|
<li>Rawat Inap</li>
|
|
<li>UGD</li>
|
|
<li>Farmasi</li>
|
|
<li>Rekap Harian</li>
|
|
</ul>
|
|
</div>
|
|
|
|
<form method="POST">
|
|
<div class="form-group">
|
|
<label for="tanggal_awal">Tanggal Awal:</label>
|
|
<input type="date" id="tanggal_awal" name="tanggal_awal" required>
|
|
</div>
|
|
|
|
<div class="form-group">
|
|
<label for="tanggal_akhir">Tanggal Akhir:</label>
|
|
<input type="date" id="tanggal_akhir" name="tanggal_akhir" required>
|
|
</div>
|
|
|
|
<button type="submit" name="export_excel" class="btn">Export ke Excel</button>
|
|
</form>
|
|
</div>
|
|
</body>
|
|
|
|
</html>
|