403Webshell
Server IP : 104.21.80.248  /  Your IP : 172.71.28.155
Web Server : Apache/2.4.25 (Win32) OpenSSL/1.0.2j PHP/5.6.30
System : Windows NT WIN-ECQAAA40806 6.2 build 9200 (Windows Server 2012 Standard Edition) i586
User : SYSTEM ( 0)
PHP Version : 5.6.30
Disable Function : NONE
MySQL : ON  |  cURL : ON  |  WGET : OFF  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  E:/Inetpub/www/school_budget/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : E:/Inetpub/www/school_budget/index.php
<?php
include 'template/header.php';

// --- ส่วนของการจัดการ Filter ทั่วไป ---
$filter_school_id = isset($_GET['school_id']) ? mysqli_real_escape_string($conn, $_GET['school_id']) : '';
$filter_type_id = isset($_GET['type_id']) ? mysqli_real_escape_string($conn, $_GET['type_id']) : '';
$filter_plan_id = isset($_GET['plan_id']) ? mysqli_real_escape_string($conn, $_GET['plan_id']) : '';

// [ปรับปรุง] ดึงข้อมูลการกำหนดปีงบประมาณถาวรจากฐานข้อมูลตัวแปร $global_budget_year ที่ได้จากตารางตั้งค่าระบบ
if ($global_budget_year != 'all') {
    $filter_budget_year = (int)$global_budget_year;
} else {
    $filter_budget_year = isset($_GET['budget_year']) ? mysqli_real_escape_string($conn, $_GET['budget_year']) : '';
}

$is_searched = (!empty($filter_school_id) || !empty($filter_type_id) || !empty($filter_plan_id) || !empty($filter_budget_year) || isset($_GET['search']));
$active_tab = isset($_GET['tab']) && $_GET['tab'] == 'details' ? 'details' : 'summary';

// สร้างเงื่อนไข WHERE สำหรับภาพรวมและกราฟตามปีงบประมาณที่เลือก
$where_global_clauses = [];
if (!empty($filter_budget_year)) {
    $where_global_clauses[] = "a.budget_year = '$filter_budget_year'";
}
$where_global_sql = count($where_global_clauses) > 0 ? 'WHERE ' . implode(' AND ', $where_global_clauses) : '';

// --- Query ข้อมูลสำหรับ Summary Cards ด้านบนสุด (กรองตามปีงบประมาณ) ---
$sql_summary_cards = "
    SELECT 
        (SELECT SUM(amount) FROM allocations a " . (!empty($filter_budget_year) ? "WHERE a.budget_year = '$filter_budget_year'" : "") . ") as total_allocated, 
        (SELECT SUM(d.amount) FROM disbursements d " . (!empty($filter_budget_year) ? "JOIN allocations al ON d.allocation_id = al.id WHERE al.budget_year = '$filter_budget_year'" : "") . ") as total_disbursed
";
$res_summary_cards = mysqli_query($conn, $sql_summary_cards);
$summary_card_data = mysqli_fetch_assoc($res_summary_cards);
$total_allocated_all = isset($summary_card_data['total_allocated']) ? (float)$summary_card_data['total_allocated'] : 0;
$total_disbursed_all = isset($summary_card_data['total_disbursed']) ? (float)$summary_card_data['total_disbursed'] : 0;
$remaining_all = $total_allocated_all - $total_disbursed_all;
$percentage_all = ($total_allocated_all > 0) ? ($total_disbursed_all / $total_allocated_all) * 100 : 0;

// --- ส่วนของการเตรียมข้อมูลสำหรับ GRAPH (กรองตามปีงบประมาณ) ---
$sql_pie = "SELECT bt.type_name, SUM(a.amount) as total FROM allocations a JOIN budget_types bt ON a.budget_type_id = bt.id $where_global_sql GROUP BY bt.type_name ORDER BY total DESC";
$res_pie = mysqli_query($conn, $sql_pie);
$pie_labels = []; $pie_data = [];
if ($res_pie) { while ($row = mysqli_fetch_assoc($res_pie)) { $pie_labels[] = $row['type_name']; $pie_data[] = (float)$row['total']; } }

$sql_bar = "SELECT s.school_name, IF(SUM(a.amount) > 0, (IFNULL((SELECT SUM(d.amount) FROM disbursements d JOIN allocations al ON d.allocation_id = al.id WHERE al.school_id = s.id " . (!empty($filter_budget_year) ? "AND al.budget_year = '$filter_budget_year'" : "") . "), 0) / SUM(a.amount)) * 100, 0) as percent FROM schools s LEFT JOIN allocations a ON s.id = a.school_id " . (!empty($filter_budget_year) ? "AND a.budget_year = '$filter_budget_year'" : "") . " GROUP BY s.id, s.school_name ORDER BY percent DESC LIMIT 10";
$res_bar = mysqli_query($conn, $sql_bar);
$bar_labels = []; $bar_data = [];
if ($res_bar) { while ($row = mysqli_fetch_assoc($res_bar)) { $bar_labels[] = $row['school_name']; $bar_data[] = round((float)$row['percent'], 2); } }


// --- สร้างเงื่อนไข WHERE สำหรับการสืบค้นข้อมูลในตาราง ---
$where_clauses = [];
if (!empty($filter_school_id)) $where_clauses[] = "a.school_id = '$filter_school_id'";
if (!empty($filter_type_id)) $where_clauses[] = "a.budget_type_id = '$filter_type_id'";
if (!empty($filter_plan_id)) $where_clauses[] = "a.plan_id = '$filter_plan_id'";
if (!empty($filter_budget_year)) $where_clauses[] = "a.budget_year = '$filter_budget_year'";
$where_sql_details = count($where_clauses) > 0 ? 'WHERE ' . implode(' AND ', $where_clauses) : '';

$summary_data = [];
$details_data = [];

// === Tab 1: ข้อมูลภาพรวมโรงเรียน ===
$allowed_sort_summary = ['school_name', 'total_allocated', 'total_disbursed', 'remaining', 'percentage'];
$sort_column_summary = isset($_GET['sort']) && in_array($_GET['sort'], $allowed_sort_summary) ? $_GET['sort'] : 'school_name';
$sort_order_summary = isset($_GET['order']) && strtolower($_GET['order']) == 'desc' ? 'DESC' : 'ASC';

$sql_summary = "
    SELECT 
        s.id as school_id, 
        s.school_name,
        IFNULL(agg_alloc.total_allocated, 0) as total_allocated,
        IFNULL(agg_disb.total_disbursed, 0) as total_disbursed,
        (IFNULL(agg_alloc.total_allocated, 0) - IFNULL(agg_disb.total_disbursed, 0)) as remaining,
        IF(IFNULL(agg_alloc.total_allocated, 0) > 0, (IFNULL(agg_disb.total_disbursed, 0) / agg_alloc.total_allocated) * 100, 0) as percentage
    FROM schools s
    LEFT JOIN (
        SELECT school_id, SUM(amount) as total_allocated FROM allocations a $where_sql_details GROUP BY school_id
    ) as agg_alloc ON s.id = agg_alloc.school_id
    LEFT JOIN (
        SELECT a.school_id, SUM(d.amount) as total_disbursed FROM disbursements d JOIN allocations a ON d.allocation_id = a.id $where_sql_details GROUP BY a.school_id
    ) as agg_disb ON s.id = agg_disb.school_id
    WHERE agg_alloc.total_allocated IS NOT NULL OR agg_disb.total_disbursed IS NOT NULL
    ORDER BY $sort_column_summary $sort_order_summary
";
$result_summary = mysqli_query($conn, $sql_summary);
if($result_summary) { while($row = mysqli_fetch_assoc($result_summary)) { $summary_data[] = $row; } }


// === Tab 2: ข้อมูลรายละเอียดรายการ ===
if ($is_searched) {
    // ตั้งค่าตัวแปรสำหรับการแบ่งหน้าเฉพาะของ Tab Details
    $limit_details = 10;
    $page_details = isset($_GET['p_details']) ? (int)$_GET['p_details'] : 1;
    if ($page_details < 1) $page_details = 1;
    $offset_details = ($page_details - 1) * $limit_details;

    // นับจำนวนแถวทั้งหมดของรายการตามตัวกรองเพื่อหาจำนวนหน้าทั้งหมด
    $sql_count_details = "SELECT COUNT(*) as total FROM allocations a $where_sql_details";
    $res_count_details = mysqli_query($conn, $sql_count_details);
    $total_rows_details = mysqli_fetch_assoc($res_count_details)['total'];
    $total_pages_details = ceil($total_rows_details / $limit_details);

    $allowed_sort_details = ['school_name', 'type_name', 'plan_name', 'total_allocated', 'total_disbursed', 'remaining', 'disbursement_percentage'];
    $sort_column_details = isset($_GET['sort']) && in_array($_GET['sort'], $allowed_sort_details) ? $_GET['sort'] : 'school_name';
    $sort_order_details = isset($_GET['order']) && strtolower($_GET['order']) == 'desc' ? 'DESC' : 'ASC';
    $order_by_sql_details = "ORDER BY $sort_column_details $sort_order_details";

    $sql_details = "
        SELECT s.school_name, bt.type_name, p.plan_name, a.budget_year, a.item_name, a.allocation_date, a.amount as total_allocated, 
               IFNULL((SELECT SUM(d.amount) FROM disbursements d WHERE d.allocation_id = a.id), 0) as total_disbursed
        FROM allocations a
        JOIN schools s ON a.school_id = s.id 
        JOIN budget_types bt ON a.budget_type_id = bt.id 
        JOIN plans p ON a.plan_id = p.id
        $where_sql_details
        $order_by_sql_details
        LIMIT $limit_details OFFSET $offset_details
    ";
    $result_details = mysqli_query($conn, $sql_details);
    if($result_details) { 
        while($row = mysqli_fetch_assoc($result_details)) { 
            $row['remaining'] = $row['total_allocated'] - $row['total_disbursed'];
            $row['disbursement_percentage'] = ($row['total_allocated'] > 0) ? ($row['total_disbursed'] / $row['total_allocated']) * 100 : 0;
            $details_data[] = $row; 
        } 
    }
}

// ฟังก์ชันสำหรับสร้างลิงก์ Sort หัวตาราง
function sort_link($column_name, $display_text, $current_sort, $current_order, $tab_name) {
    $order = ($current_sort == $column_name && $current_order == 'ASC') ? 'desc' : 'asc';
    $icon = '';
    if ($current_sort == $column_name) {
        $icon = $current_order == 'ASC' ? '<i class="bi bi-caret-up-fill ms-1"></i>' : '<i class="bi bi-caret-down-fill ms-1"></i>';
    }
    $query_params = array_merge($_GET, ['sort' => $column_name, 'order' => $order, 'tab' => $tab_name, 'search' => 1]);
    return '<a href="?' . http_build_query($query_params) . '" class="text-white text-decoration-none">' . $display_text . $icon . '</a>';
}

// ดึงข้อมูลข้อความแจ้งเตือนสถานะตัวกรอง
$filter_text_items = [];
if ($global_budget_year != 'all') {
    $filter_text_items[] = "<span class='badge bg-danger'>ล็อกข้อมูลโดยผู้ดูแลระบบ</span> ปีงบประมาณ: <strong>พ.ศ. " . htmlspecialchars($filter_budget_year) . "</strong>";
}
if (!empty($filter_school_id)) {
    $s_query = mysqli_query($conn, "SELECT school_name FROM schools WHERE id = '$filter_school_id'");
    if($s_row = mysqli_fetch_assoc($s_query)) { $filter_text_items[] = "โรงเรียน: <strong>" . htmlspecialchars($s_row['school_name']) . "</strong>"; }
}
if (!empty($filter_type_id)) {
    $t_query = mysqli_query($conn, "SELECT type_name FROM budget_types WHERE id = '$filter_type_id'");
    if($t_row = mysqli_fetch_assoc($t_query)) { $filter_text_items[] = "ประเภทงบ: <strong>" . htmlspecialchars($t_row['type_name']) . "</strong>"; }
}
if (!empty($filter_plan_id)) {
    $p_query = mysqli_query($conn, "SELECT plan_name FROM plans WHERE id = '$filter_plan_id'");
    if($p_row = mysqli_fetch_assoc($p_query)) { $filter_text_items[] = "แผนงาน: <strong>" . htmlspecialchars($p_row['plan_name']) . "</strong>"; }
}
if (!empty($filter_budget_year) && $global_budget_year == 'all') {
    $filter_text_items[] = "ปีงบประมาณ: <strong>พ.ศ. " . htmlspecialchars($filter_budget_year) . "</strong>";
}
?>

<div class="row mb-4">
    <div class="col-12">
        <div class="card bg-dark text-white p-4 text-center shadow-sm">
            <h1 class="display-5 fw-bold">🏛️ ระบบเบิกจ่ายงบประมาณโรงเรียน</h1>
            <p class="lead mb-0">สำนักงานเขตพื้นที่การศึกษามัธยมศึกษาราชบุรี</p>
        </div>
    </div>
</div>

<div class="row g-3 mb-4">
    <div class="col-md-6 col-lg-3">
        <div class="card border-0 bg-primary text-white shadow-sm h-100">
            <div class="card-body">
                <div class="d-flex justify-content-between align-items-center">
                    <div>
                        <h6 class="text-uppercase mb-1" style="opacity: 0.8;">งบประมาณจัดสรรทั้งหมด</h6>
                        <h3 class="mb-0 fw-bold"><?php echo number_format($total_allocated_all, 2); ?></h3>
                    </div>
                    <div class="fs-1"><i class="bi bi-wallet2"></i></div>
                </div>
            </div>
        </div>
    </div>
    <div class="col-md-6 col-lg-3">
        <div class="card border-0 bg-danger text-white shadow-sm h-100">
            <div class="card-body">
                <div class="d-flex justify-content-between align-items-center">
                    <div>
                        <h6 class="text-uppercase mb-1" style="opacity: 0.8;">บันทึกเบิกจ่ายแล้ว</h6>
                        <h3 class="mb-0 fw-bold"><?php echo number_format($total_disbursed_all, 2); ?></h3>
                    </div>
                    <div class="fs-1"><i class="bi bi-cash-stack"></i></div>
                </div>
            </div>
        </div>
    </div>
    <div class="col-md-6 col-lg-3">
        <div class="card border-0 bg-success text-white shadow-sm h-100">
            <div class="card-body">
                <div class="d-flex justify-content-between align-items-center">
                    <div>
                        <h6 class="text-uppercase mb-1" style="opacity: 0.8;">คงเหลือภาพรวม</h6>
                        <h3 class="mb-0 fw-bold"><?php echo number_format($remaining_all, 2); ?></h3>
                    </div>
                    <div class="fs-1"><i class="bi bi-pie-chart"></i></div>
                </div>
            </div>
        </div>
    </div>
    <div class="col-md-6 col-lg-3">
        <div class="card border-0 bg-warning text-dark shadow-sm h-100">
            <div class="card-body">
                <div class="d-flex justify-content-between align-items-center">
                    <div>
                        <h6 class="text-uppercase mb-1" style="opacity: 0.8;">ร้อยละการเบิกจ่าย</h6>
                        <h3 class="mb-0 fw-bold"><?php echo number_format($percentage_all, 2); ?>%</h3>
                    </div>
                    <div class="fs-1"><i class="bi bi-graph-up-arrow"></i></div>
                </div>
            </div>
        </div>
    </div>
</div>

<div class="row g-4 mb-4">
    <div class="col-md-5">
        <div class="card h-100 shadow-sm">
            <div class="card-body d-flex align-items-center justify-content-center">
                <div style="width: 100%; max-width: 360px;"><canvas id="budgetTypePieChart"></canvas></div>
            </div>
        </div>
    </div>
    <div class="col-md-7">
        <div class="card h-100 shadow-sm">
            <div class="card-body"><canvas id="disbursementPercentageChart" style="height: 250px;"></canvas></div>
        </div>
    </div>
</div>

<div class="card mb-4 border-primary shadow-sm">
    <div class="card-header bg-primary text-white fw-bold"><i class="bi bi-search"></i> ตรวจสอบงบประมาณและสถานะการเบิกจ่ายแยกสถานศึกษา</div>
    <div class="card-body bg-light">
        <form method="get" action="" class="row g-3 align-items-end">
            <input type="hidden" name="tab" value="<?php echo $active_tab; ?>">
            <input type="hidden" name="search" value="1">
            
            <div class="col-md-3">
                <label for="school_id" class="form-label fw-bold">โรงเรียน/สถานศึกษา</label>
                <select name="school_id" id="school_id" class="form-select" onchange="this.form.submit()">
                    <option value="">-- ทุกโรงเรียน --</option>
                    <?php
                    $res_schools = mysqli_query($conn, "SELECT id, school_name FROM schools ORDER BY school_name ASC");
                    if ($res_schools) {
                        while ($s = mysqli_fetch_assoc($res_schools)) {
                            $selected = ($filter_school_id == $s['id']) ? 'selected' : '';
                            echo "<option value='{$s['id']}' $selected>" . htmlspecialchars($s['school_name']) . "</option>";
                        }
                    }
                    ?>
                </select>
            </div>
            <div class="col-md-3">
                <label for="type_id" class="form-label fw-bold">ประเภทงบประมาณ</label>
                <select name="type_id" id="type_id" class="form-select" onchange="this.form.submit()">
                    <option value="">-- ทุกประเภท --</option>
                    <?php
                    $res_types = mysqli_query($conn, "SELECT id, type_name FROM budget_types ORDER BY type_name ASC");
                    while ($t = mysqli_fetch_assoc($res_types)) {
                        $selected = ($filter_type_id == $t['id']) ? 'selected' : '';
                        echo "<option value='{$t['id']}' $selected>" . htmlspecialchars($t['type_name']) . "</option>";
                    }
                    ?>
                </select>
            </div>
            <div class="col-md-3">
                <label for="plan_id" class="form-label fw-bold">แผนงาน</label>
                <select name="plan_id" id="plan_id" class="form-select" onchange="this.form.submit()">
                    <option value="">-- ทุกแผนงาน --</option>
                    <?php
                    $res_plans = mysqli_query($conn, "SELECT id, plan_name FROM plans ORDER BY plan_name ASC");
                    while ($p = mysqli_fetch_assoc($res_plans)) {
                        $selected = ($filter_plan_id == $p['id']) ? 'selected' : '';
                        echo "<option value='{$p['id']}' $selected>" . htmlspecialchars($p['plan_name']) . "</option>";
                    }
                    ?>
                </select>
            </div>
            <div class="col-md-2">
                <label for="budget_year" class="form-label fw-bold">ปีงบประมาณ</label>
                <select name="budget_year" id="budget_year" class="form-select" onchange="this.form.submit()" <?php echo ($global_budget_year != 'all') ? 'disabled' : ''; ?>>
                    <?php if ($global_budget_year != 'all'): ?>
                        <option value="<?php echo $global_budget_year; ?>">พ.ศ. <?php echo $global_budget_year; ?></option>
                    <?php else: ?>
                        <option value="">-- ทุกปี --</option>
                        <?php
                        $res_years = mysqli_query($conn, "SELECT DISTINCT budget_year FROM allocations ORDER BY budget_year DESC");
                        while ($y = mysqli_fetch_assoc($res_years)) {
                            $selected = ($filter_budget_year == $y['budget_year']) ? 'selected' : '';
                            echo "<option value='{$y['budget_year']}' $selected>พ.ศ. {$y['budget_year']}</option>";
                        }
                        ?>
                    <?php endif; ?>
                </select>
            </div>
            <div class="col-md-1 text-end">
                <a href="index.php" class="btn btn-secondary w-100" title="ล้างค่าการค้นหา"><i class="bi bi-arrow-clockwise"></i> ล้างค่า</a>
            </div>
        </form>
    </div>
</div>

<?php if (count($filter_text_items) > 0): ?>
    <div class="alert alert-info d-flex align-items-center shadow-sm mb-3" role="alert">
        <i class="bi bi-info-circle-fill me-2 fs-5"></i>
        <div>
            เงื่อนไขการกรองข้อมูลปัจจุบัน: <?php echo implode(' | ', $filter_text_items); ?>
        </div>
    </div>
<?php endif; ?>

<ul class="nav nav-tabs" id="myTab" role="tablist">
    <li class="nav-item" role="presentation">
        <a class="nav-link <?php if ($active_tab == 'summary') echo 'active'; ?>" href="?<?php echo http_build_query(array_merge($_GET, ['tab' => 'summary'])); ?>">
            <i class="bi bi-pie-chart-fill"></i> ภาพรวมโรงเรียน
        </a>
    </li>
    <li class="nav-item" role="presentation">
        <a class="nav-link <?php if ($active_tab == 'details') echo 'active'; ?>" href="?<?php echo http_build_query(array_merge($_GET, ['tab' => 'details'])); ?>">
            <i class="bi bi-list-ul"></i> รายละเอียดรายการ
        </a>
    </li>
</ul>

<div class="tab-content" id="myTabContent">
    <div class="tab-pane fade <?php if ($active_tab == 'summary') echo 'show active'; ?>" id="summary-tab-pane" role="tabpanel">
        <div class="card card-body border-top-0 rounded-bottom">
            <div class="table-responsive">
                <table class="table table-striped table-hover align-middle">
                    <thead class="table-dark">
                        <tr>
                            <th class="text-center" style="width: 5%;">ที่</th>
                            <th><?php echo sort_link('school_name', 'ชื่อโรงเรียน', $sort_column_summary, strtoupper($sort_order_summary), 'summary'); ?></th>
                            <th class="text-end"><?php echo sort_link('total_allocated', 'งบประมาณที่ได้รับ', $sort_column_summary, strtoupper($sort_order_summary), 'summary'); ?></th>
                            <th class="text-end"><?php echo sort_link('total_disbursed', 'เบิกจ่ายแล้ว', $sort_column_summary, strtoupper($sort_order_summary), 'summary'); ?></th>
                            <th class="text-end"><?php echo sort_link('remaining', 'คงเหลือ', $sort_column_summary, strtoupper($sort_order_summary), 'summary'); ?></th>
                            <th class="text-center" style="width: 25%;"><?php echo sort_link('percentage', 'เบิกจ่ายแล้ว (%)', $sort_column_summary, strtoupper($sort_order_summary), 'summary'); ?></th>
                        </tr>
                    </thead>
                    <tbody>
                        <?php if (count($summary_data) > 0): $no_sum = 1; foreach ($summary_data as $row): ?>
                            <tr>
                                <td class="text-center text-muted fw-bold"><?php echo $no_sum++; ?></td>
                                <td>
                                    <a href="?<?php echo http_build_query(['tab' => 'details', 'school_id' => $row['school_id'], 'search' => 1]); ?>" class="fw-bold" title="คลิกเพื่อดูรายละเอียดของโรงเรียนนี้">
                                        <?php echo htmlspecialchars($row['school_name']); ?>
                                    </a>
                                </td>
                                <td class="text-end fw-bold text-primary"><?php echo number_format($row['total_allocated'], 2); ?></td>
                                <td class="text-end text-danger"><?php echo number_format($row['total_disbursed'], 2); ?></td>
                                <td class="text-end text-success fw-bold"><?php echo number_format($row['remaining'], 2); ?></td>
                                <td>
                                    <div class="d-flex align-items-center justify-content-center">
                                        <div class="progress flex-grow-1" style="height: 18px;">
                                            <div class="progress-bar bg-success" role="progressbar" style="width: <?php echo $row['percentage']; ?>%;" aria-valuenow="<?php echo $row['percentage']; ?>"></div>
                                        </div>
                                        <span class="ms-2 fw-bold text-dark" style="min-width: 55px; text-align: right;"><?php echo number_format($row['percentage'], 2); ?>%</span>
                                    </div>
                                </td>
                            </tr>
                        <?php endforeach; else: ?>
                            <tr><td colspan="6" class="text-center text-muted py-4">ไม่พบข้อมูลสถิติงบประมาณของสถานศึกษา</td></tr>
                        <?php endif; ?>
                    </tbody>
                </table>
            </div>
        </div>
    </div>

    <div class="tab-pane fade <?php if ($active_tab == 'details') echo 'show active'; ?>" id="details-tab-pane" role="tabpanel">
        <div class="card card-body border-top-0 rounded-bottom">
            <?php if ($is_searched): ?>
                <div class="table-responsive">
                    <table class="table table-bordered table-striped table-hover align-middle">
                        <thead class="table-dark">
                            <tr>
                                <th class="text-center" style="width: 5%;">ที่</th>
                                <th><?php echo sort_link('school_name', 'ชื่อโรงเรียน', $sort_column_details, strtoupper($sort_order_details), 'details'); ?></th>
                                <th class="text-center">ปีงบ</th>
                                <th>รายการ / รายละเอียดโครงการ</th>
                                <th><?php echo sort_link('type_name', 'ประเภทงบ / แผนงาน', $sort_column_details, strtoupper($sort_order_details), 'details'); ?></th>
                                <th class="text-end"><?php echo sort_link('total_allocated', 'งบที่ได้รับ', $sort_column_details, strtoupper($sort_order_details), 'details'); ?></th>
                                <th class="text-end"><?php echo sort_link('total_disbursed', 'เบิกจ่ายแล้ว', $sort_column_details, strtoupper($sort_order_details), 'details'); ?></th>
                                <th class="text-end"><?php echo sort_link('remaining', 'คงเหลือ', $sort_column_details, strtoupper($sort_order_details), 'details'); ?></th>
                                <th class="text-center" style="width: 20%;"><?php echo sort_link('disbursement_percentage', 'สถานะ (%)', $sort_column_details, strtoupper($sort_order_details), 'details'); ?></th>
                            </tr>
                        </thead>
                        <tbody>
                            <?php if (count($details_data) > 0): 
                                // คำนวณลำดับต่อเนื่องตามหน้า Pagination ปัจจุบันของ Tab Details
                                $no_det = ($page_details - 1) * $limit_details + 1; 
                                foreach ($details_data as $row): 
                            ?>
                                <tr>
                                    <td class="text-center text-muted fw-bold"><?php echo $no_det++; ?></td>
                                    <td><strong><?php echo htmlspecialchars($row['school_name']); ?></strong></td>
                                    <td class="text-center fw-bold text-secondary"><?php echo htmlspecialchars($row['budget_year']); ?></td>
                                    <td><span class="text-dark fw-bold"><?php echo htmlspecialchars($row['item_name']); ?></span></td>
                                    <td><small class="text-muted"><?php echo htmlspecialchars($row['type_name']); ?> / <?php echo htmlspecialchars($row['plan_name']); ?></small></td>
                                    <td class="text-end fw-bold"><?php echo number_format($row['total_allocated'], 2); ?></td>
                                    <td class="text-end text-danger"><?php echo number_format($row['total_disbursed'], 2); ?></td>
                                    <td class="text-end text-success fw-bold"><?php echo number_format($row['remaining'], 2); ?></td>
                                    <td>
                                       <div class="d-flex align-items-center justify-content-center">
                                            <div class="progress flex-grow-1" style="height: 18px;">
                                                <div class="progress-bar bg-info" role="progressbar" style="width: <?php echo $row['disbursement_percentage']; ?>%;" aria-valuenow="<?php echo $row['disbursement_percentage']; ?>"></div>
                                            </div>
                                            <span class="ms-2 fw-bold text-dark" style="min-width: 55px; text-align: right;"><?php echo number_format($row['disbursement_percentage'], 2); ?>%</span>
                                        </div>
                                    </td>
                                </tr>
                            <?php endforeach; else: ?>
                                <tr><td colspan="9" class="text-center text-muted py-4">ไม่พบข้อมูลตามเงื่อนไขที่ระบุ</td></tr>
                            <?php endif; ?>
                        </tbody>
                    </table>
                </div>

                <?php if ($total_pages_details > 1): ?>
                <nav aria-label="Page navigation" class="mt-4">
                    <ul class="pagination justify-content-center">
                        <?php
                        $query_params = $_GET;
                        unset($query_params['p_details']);
                        $query_string = http_build_query($query_params);
                        
                        $prev_page = $page_details - 1;
                        echo '<li class="page-item ' . ($page_details <= 1 ? 'disabled' : '') . '">';
                        echo '<a class="page-link" href="?' . $query_string . '&p_details=' . $prev_page . '">ก่อนหน้า</a>';
                        echo '</li>';
                        
                        $adjacents = 2;
                        if ($total_pages_details <= 7) {
                            for ($i = 1; $i <= $total_pages_details; $i++) {
                                echo '<li class="page-item ' . ($page_details == $i ? 'active' : '') . '">';
                                echo '<a class="page-link" href="?' . $query_string . '&p_details=' . $i . '">' . $i . '</a>';
                                echo '</li>';
                            }
                        } else {
                            if ($page_details < 2 + ($adjacents * 2)) {
                                for ($i = 1; $i < 4 + ($adjacents * 2); $i++) {
                                    echo '<li class="page-item ' . ($page_details == $i ? 'active' : '') . '">';
                                    echo '<a class="page-link" href="?' . $query_string . '&p_details=' . $i . '">' . $i . '</a>';
                                    echo '</li>';
                                }
                                echo '<li class="page-item disabled"><span class="page-link">...</span></li>';
                                echo '<li class="page-item"><a class="page-link" href="?' . $query_string . '&p_details=' . $total_pages_details . '">' . $total_pages_details . '</a></li>';
                            } elseif ($total_pages_details - ($adjacents * 2) > $page_details && $page_details > ($adjacents * 2)) {
                                echo '<li class="page-item"><a class="page-link" href="?' . $query_string . '&p_details=1">1</a></li>';
                                echo '<li class="page-item disabled"><span class="page-link">...</span></li>';
                                for ($i = $page_details - $adjacents; $i <= $page_details + $adjacents; $i++) {
                                    echo '<li class="page-item ' . ($page_details == $i ? 'active' : '') . '">';
                                    echo '<a class="page-link" href="?' . $query_string . '&p_details=' . $i . '">' . $i . '</a>';
                                    echo '</li>';
                                }
                                echo '<li class="page-item disabled"><span class="page-link">...</span></li>';
                                echo '<li class="page-item"><a class="page-link" href="?' . $query_string . '&p_details=' . $total_pages_details . '">' . $total_pages_details . '</a></li>';
                            } else {
                                echo '<li class="page-item"><a class="page-link" href="?' . $query_string . '&p_details=1">1</a></li>';
                                echo '<li class="page-item disabled"><span class="page-link">...</span></li>';
                                for ($i = $total_pages_details - (2 + ($adjacents * 2)); $i <= $total_pages_details; $i++) {
                                    echo '<li class="page-item ' . ($page_details == $i ? 'active' : '') . '">';
                                    echo '<a class="page-link" href="?' . $query_string . '&p_details=' . $i . '">' . $i . '</a>';
                                    echo '</li>';
                                }
                            }
                        }
                        
                        $next_page = $page_details + 1;
                        echo '<li class="page-item ' . ($page_details >= $total_pages_details ? 'disabled' : '') . '">';
                        echo '<a class="page-link" href="?' . $query_string . '&p_details=' . $next_page . '">ถัดไป</a>';
                        echo '</li>';
                        ?>
                    </ul>
                </nav>
                <?php endif; ?>

            <?php else: ?>
                <div class="text-center text-muted py-5">
                    <i class="bi bi-funnel" style="font-size: 3rem;"></i>
                    <h4 class="mt-3">กรุณากรองข้อมูลเพื่อแสดงรายงานแบบละเอียด</h4>
                    <p>เลือกเงื่อนไขสถานศึกษาหรือปีงบประมาณจากฟอร์มด้านบน ข้อมูลจะแสดงผลให้โดยอัตโนมัติ</p>
                </div>
            <?php endif; ?>
        </div>
    </div>
</div>

<?php include 'template/footer.php'; ?>

<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script>
    const pieLabels = <?php echo json_encode($pie_labels); ?>;
    const pieData = <?php echo json_encode($pie_data); ?>;
    const barLabels = <?php echo json_encode($bar_labels); ?>;
    const barData = <?php echo json_encode($bar_data); ?>;
    
    new Chart(document.getElementById('budgetTypePieChart'), { type: 'pie', data: { labels: pieLabels, datasets: [{ label: 'งบประมาณ', data: pieData, backgroundColor: ['#0d6efd', '#6c757d', '#198754', '#dc3545', '#ffc107', '#0dcaf0'], }] }, options: { responsive: true, plugins: { title: { display: true, text: 'สัดส่วนงบประมาณตามประเภท', font: { size: 16 } } } } });
    new Chart(document.getElementById('disbursementPercentageChart'), { type: 'bar', data: { labels: barLabels, datasets: [{ label: 'ร้อยละการเบิกจ่าย', data: barData, backgroundColor: 'rgba(25, 135, 84, 0.7)', borderColor: 'rgba(25, 135, 84, 1)', borderWidth: 1 }] }, options: { indexAxis: 'y', responsive: true, scales: { x: { min: 0, max: 100, ticks: { callback: function(value) { return value + '%' } } } }, plugins: { legend: { display: false }, title: { display: true, text: 'ร้อยละการเบิกจ่ายงบประมาณ (10 อันดับแรก)', font: { size: 16 } }, tooltip: { callbacks: { label: function(context) { return context.dataset.label + ': ' + context.raw.toFixed(2) + '%'; } } } } } });
</script>

Youez - 2016 - github.com/yon3zu
LinuXploit