Files
2026-09-16 23:20:08 +07:00

139 lines
7.2 KiB
PHP

<?php
// right_panel.php - Dashboard stats
$timezone = "Asia/Bangkok";
date_default_timezone_set($timezone);
$today = date("Y-m-d H:i:s");
$d_conv_search = date("Y-m-d");
// Helper function for quick count queries (since it's just date, no user input risk, but we use prepare for best practice)
function get_count($conn, $query, $date_param) {
$stmt = $conn->prepare($query);
if($stmt) {
$stmt->bind_param("s", $date_param);
$stmt->execute();
$result = $stmt->get_result();
$row = $result->fetch_assoc();
$stmt->close();
return $row['cc'] ?? 0;
}
return 0;
}
$cc_er = get_count($conn1, "SELECT count(*) as cc FROM er_regist WHERE vstdate=?", $d_conv_search);
$cc_pq = get_count($conn1, "SELECT count(*) as cc FROM pq_screen WHERE screen_date=?", $d_conv_search);
$cc_pqd = get_count($conn1, "SELECT count(*) as cc FROM pq_doctor WHERE doctor_date=?", $d_conv_search);
$cc_dt = get_count($conn1, "SELECT count(distinct hn) as cc FROM dtmain WHERE vstdate=?", $d_conv_search);
$cc_lab1 = get_count($conn1, "SELECT count(*) as cc FROM lab_head WHERE order_date=?", $d_conv_search);
$cc_lab2 = get_count($conn1, "SELECT count(*) as cc FROM lab_head WHERE order_date=? AND confirm_report='Y'", $d_conv_search);
$sub_y = substr((date("Y") + 543), 2, 2);
$d_rx = $sub_y . date("md") . "%";
$cc_rx = get_count($conn1, "SELECT count(*) as cc FROM rx_operator WHERE vn like ?", $d_rx);
$cc_rx2 = get_count($conn1, "SELECT count(*) as cc FROM rx_operator WHERE vn like ? AND pay='Y'", $d_rx);
$cc_ipt = get_count($conn1, "SELECT count(*) as cc FROM ipt WHERE regdate=?", $d_conv_search);
$cc_ipt2 = get_count($conn1, "SELECT count(*) as cc FROM ipt WHERE dchdate=?", $d_conv_search);
$cc_ovst = get_count($conn1, "SELECT count(*) as cc FROM ovst WHERE vstdate=? AND ovstost='54'", $d_conv_search);
$cc_ipt3 = get_count($conn1, "SELECT count(*) as cc FROM ipt WHERE dchdate=? AND dchtype='04'", $d_conv_search);
// News from local DB
$news_items = [];
$result_news2 = $conn2->query("SELECT * FROM news ORDER BY date_add DESC LIMIT 10");
if ($result_news2) {
while($row = $result_news2->fetch_assoc()) {
$news_items[] = $row;
}
}
?>
<div class="card-title">
<span>สรุปยอดให้บริการประจำวัน</span>
<span style="font-size: 0.9rem; font-weight: normal; color: var(--text-muted);">
ข้อมูล ณ วันที่ <?php echo thai_date5(datetime_to_date($today)); ?> เวลา <?php echo datetime_to_time($today); ?> น.
</span>
</div>
<div class="dashboard-grid">
<!-- Stats Column -->
<div class="card" style="grid-column: span 2;">
<h3 style="font-size:1.1rem; margin-bottom:1rem; color:var(--primary); border-bottom:1px solid var(--border); padding-bottom:0.5rem;">
ผู้ป่วยนอกและฉุกเฉิน (OPD & ER)
</h3>
<div class="stat-item">
<span>ผู้ป่วยรับบริการห้องฉุกเฉิน (ER)</span>
<span class="stat-value"><?php echo number_format($cc_er); ?> ราย</span>
</div>
<div class="stat-item">
<span>ผ่านการซักประวัติ</span>
<span class="stat-value"><?php echo number_format($cc_pq); ?> ราย</span>
</div>
<div class="stat-item">
<span>ผ่านการตรวจ ณ ห้องตรวจ</span>
<span class="stat-value"><?php echo number_format($cc_pqd); ?> ราย</span>
</div>
<div class="stat-item">
<span>รับบริการห้องทันตกรรม</span>
<span class="stat-value"><?php echo number_format($cc_dt); ?> ราย</span>
</div>
<div class="stat-item">
<span>ผู้ป่วยนอกถูกส่งต่อ (Refer Out)</span>
<span class="stat-value"><?php echo number_format($cc_ovst); ?> ราย</span>
</div>
<h3 style="font-size:1.1rem; margin-top:1.5rem; margin-bottom:1rem; color:var(--secondary); border-bottom:1px solid var(--border); padding-bottom:0.5rem;">
ผู้ป่วยใน (IPD)
</h3>
<div class="stat-item">
<span>รับใหม่ (Admit)</span>
<span class="stat-value"><?php echo number_format($cc_ipt); ?> ราย</span>
</div>
<div class="stat-item">
<span>จำหน่าย (Discharge)</span>
<span class="stat-value"><?php echo number_format($cc_ipt2); ?> ราย</span>
</div>
<div class="stat-item">
<span>ผู้ป่วยในถูกส่งต่อ (Refer Out IPD)</span>
<span class="stat-value"><?php echo number_format($cc_ipt3); ?> ราย</span>
</div>
<h3 style="font-size:1.1rem; margin-top:1.5rem; margin-bottom:1rem; color:#8b5cf6; border-bottom:1px solid var(--border); padding-bottom:0.5rem;">
บริการอื่นๆ
</h3>
<div class="stat-item">
<span>ใบสั่งจ่ายยาจากห้องยา</span>
<span class="stat-value"><?php echo number_format($cc_rx); ?> ครั้ง</span>
</div>
<div class="stat-item">
<span>ใบส่งตรวจห้องแล็บ</span>
<span class="stat-value"><?php echo number_format($cc_lab1); ?> ใบ</span>
</div>
<div class="stat-item">
<span>รายงานผลแล็บแล้ว</span>
<span class="stat-value"><?php echo number_format($cc_lab2); ?> ใบ</span>
</div>
</div>
<!-- News Column -->
<div class="card">
<h3 style="font-size:1.1rem; margin-bottom:1rem; color:var(--text-main); display:flex; align-items:center; gap:0.5rem;">
<svg style="width:20px;height:20px;color:var(--primary);" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 20H5a2 2 0 01-2-2V6a2 2 0 012-2h10a2 2 0 012 2v1m2 13a2 2 0 01-2-2V7m2 13a2 2 0 002-2V9a2 2 0 00-2-2h-2m-4-3H9M7 16h6M7 8h6v4H7V8z"></path></svg>
รายการปรับปรุง (News)
</h3>
<div style="display:flex; flex-direction:column; gap:1rem;">
<?php if(count($news_items) > 0): ?>
<?php foreach($news_items as $news): ?>
<div style="padding-bottom:1rem; border-bottom:1px solid var(--border);">
<div style="font-size:0.8rem; color:var(--primary); margin-bottom:0.25rem;">
<?php echo datetime_to_date($news['date_add']); ?>
</div>
<div style="font-size:0.95rem; color:var(--text-main);">
<?php echo htmlspecialchars($news['title']); ?>
</div>
</div>
<?php endforeach; ?>
<?php else: ?>
<div style="color:var(--text-muted); text-align:center; padding:2rem 0;">ไม่มีข้อมูลประกาศ</div>
<?php endif; ?>
</div>
</div>
</div>