File manager - Edit - /var/www/order.cmtc.ac.th/admin/orders_4.php
Back
<?php session_start(); if(!isset($_SESSION['admin'])) { header('Location: index.php'); exit; } include('../config/db.php'); // ✅ ยืนยันการชำระเงิน + ออกเลขใบจอง /* if(isset($_GET['confirm'])) { $id = intval($_GET['confirm']); $booking_no = 'BK' . date('Ymd') . rand(100,999); $conn->query("UPDATE orders SET status='ชำระเงินแล้ว', booking_no='$booking_no' WHERE id=$id"); $items = $conn->query("SELECT * FROM order_items WHERE order_id=$id"); while($it = $items->fetch_assoc()) { $conn->query("UPDATE products SET stock = stock - {$it['qty']} WHERE id = {$it['product_id']}"); } header("Location: orders.php?confirmed=1"); exit; } */ if(isset($_GET['confirm'])) { $id = intval($_GET['confirm']); $order = $conn->query("SELECT * FROM orders WHERE id=$id")->fetch_assoc(); // ถ้าเป็น Free Order → ไม่ออกเลขที่ใบจอง (แต่อัปเดตสถานะ) if(strpos($order['status'], 'Free Order') !== false){ $conn->query("UPDATE orders SET status='Free Order (ยืนยันแล้ว)' WHERE id=$id"); } else { // กรณีปกติ: ออกเลขที่ใบจอง $booking_no = 'BK'.date('Ymd').sprintf('%04d', $id); $conn->query("UPDATE orders SET status='ชำระเงินแล้ว', booking_no='$booking_no' WHERE id=$id"); // ตัดสต๊อกเฉพาะสินค้าที่มี $items = $conn->query("SELECT * FROM order_items WHERE order_id=$id"); while($it = $items->fetch_assoc()) { $conn->query("UPDATE products SET stock = stock - $it[qty] WHERE id = $it[product_id]"); } } } // ✅ เปลี่ยนสถานะ (เปลี่ยนได้ตลอดเวลา) if(isset($_GET['status']) && isset($_GET['id'])) { $id = intval($_GET['id']); $status = $conn->real_escape_string($_GET['status']); $conn->query("UPDATE orders SET status='$status' WHERE id=$id"); // ถ้ายกเลิก → คืน stock if (strpos($status, 'ยกเลิก') !== false) { $items = $conn->query("SELECT * FROM order_items WHERE order_id=$id"); while($it = $items->fetch_assoc()) { $conn->query("UPDATE products SET stock = stock + {$it['qty']} WHERE id = {$it['product_id']}"); } } header("Location: orders.php?updated=1"); exit; } // ✅ ดึงข้อมูลแยกตามวิธีรับสินค้า $res_self = $conn->query("SELECT o.*, GROUP_CONCAT(CONCAT(p.name,' x',i.qty) SEPARATOR ', ') AS items FROM orders o JOIN order_items i ON o.id=i.order_id JOIN products p ON i.product_id=p.id WHERE o.receive_method='รับสินค้าด้วยตนเอง' GROUP BY o.id ORDER BY o.id DESC"); $res_post = $conn->query("SELECT o.*, GROUP_CONCAT(CONCAT(p.name,' x',i.qty) SEPARATOR ', ') AS items FROM orders o JOIN order_items i ON o.id=i.order_id JOIN products p ON i.product_id=p.id WHERE o.receive_method='จัดส่งทางไปรษณีย์' GROUP BY o.id ORDER BY o.id DESC"); $res_all = $conn->query("SELECT o.*, GROUP_CONCAT(CONCAT(p.name,' x',i.qty) SEPARATOR ', ') AS items FROM orders o JOIN order_items i ON o.id=i.order_id JOIN products p ON i.product_id=p.id GROUP BY o.id ORDER BY o.id DESC"); ?> <!DOCTYPE html> <html lang="th"> <head> <meta charset="UTF-8"> <title>จัดการรายการจองทั้งหมด</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet"> <link href="https://fonts.googleapis.com/css2?family=Kanit:wght@300;400;500;600&display=swap" rel="stylesheet"> <style> body,*{font-family:'Kanit',sans-serif!important;} .slip-overlay{display:none;position:fixed;z-index:1000;left:0;top:0;width:100%;height:100%;background-color:rgba(0,0,0,0.85);text-align:center;padding-top:60px;} .slip-content-box{display:inline-block;background:rgba(255,255,255,0.1);padding:20px 30px;border-radius:10px;max-width:95%;} .slip-content{max-width:400px;max-height:65vh;border-radius:8px;box-shadow:0 0 15px rgba(255,255,255,0.3);} .slip-info{color:#fff;font-size:1rem;margin-top:15px;} .close-btn{position:fixed;top:20px;right:40px;color:white;font-size:40px;font-weight:bold;cursor:pointer;} .close-btn:hover{color:#ff5555;} </style> </head> <body class="bg-light"> <?php include("menu.php"); ?> <div class="container py-4"> <h3 class="mb-4">📋 จัดการรายการจองทั้งหมด</h3> <!-- ✅ Tabs --> <ul class="nav nav-tabs" id="orderTabs" role="tablist"> <li class="nav-item"><button class="nav-link active" id="tab-all" data-bs-toggle="tab" data-bs-target="#all">🧾 ทั้งหมด</button></li> <li class="nav-item"><button class="nav-link" id="tab-self" data-bs-toggle="tab" data-bs-target="#self">🧍♂️ รับสินค้าด้วยตนเอง</button></li> <li class="nav-item"><button class="nav-link" id="tab-post" data-bs-toggle="tab" data-bs-target="#post">📦 จัดส่งทางไปรษณีย์</button></li> </ul> <div class="tab-content mt-3"> <!-- ✅ ตารางรวมทั้งหมด --> <div class="tab-pane fade show active" id="all"> <div class="mb-3"> <input type="text" id="searchInput" class="form-control" placeholder="🔎 ค้นหาชื่อ, เบอร์โทร, หรือสถานะ..."> </div> <table class="table table-bordered bg-white shadow-sm align-middle" id="allTable"> <thead class="table-dark text-white"> <tr> <th>เลขที่</th><th>ชื่อผู้จอง</th><th>วิธีรับสินค้า</th><th>ยอดรวม</th><th>สถานะ</th><th>สลิป</th><th>จัดการ</th><th>พิมพ์</th> </tr> </thead> <tbody> <?php while($row=$res_all->fetch_assoc()): ?> <tr> <td><?=$row['booking_no']?></td> <td><?=$row['fullname']?></td> <td><?=$row['receive_method']?></td> <td><?=number_format($row['total'],2)?></td> <td> <?php if(strpos($row['status'], 'Free Order') !== false): ?> <span class="text-warning fw-bold">🟡 <?= $row['status'] ?></span> <?php else: ?> <span class="text-primary fw-bold"><?= $row['status'] ?></span> <?php endif; ?> </td> <td> <?php if(!empty($row['slip'])): ?> <a href="#" class="view-slip" data-img="../uploads/slip/<?=$row['slip']?>" data-id="<?=$row['id']?>" data-name="<?=htmlspecialchars($row['fullname'])?>" data-total="<?=number_format($row['total'],2)?>" data-status="<?=htmlspecialchars($row['status'])?>">ดู</a> <?php else: ?><span class="text-muted">-</span><?php endif; ?> </td> <td> <?php if($row['status'] == 'ชำระเงินแล้ว' || strpos($row['status'], 'ยืนยัน') !== false || !empty($row['booking_no'])): ?> <button class="btn btn-secondary btn-sm mb-1" disabled>✔️ ยืนยันแล้ว</button> <?php else: ?> <a href="?confirm=<?=$row['id']?>" class="btn btn-success btn-sm mb-1" onclick="return confirm('ยืนยันการชำระเงินใบจองนี้หรือไม่?');">ยืนยัน</a> <?php endif; ?> <div class="dropdown d-inline"> <button class="btn btn-secondary btn-sm dropdown-toggle" data-bs-toggle="dropdown">เปลี่ยนสถานะ</button> <ul class="dropdown-menu"> <li><a class="dropdown-item" href="?id=<?=$row['id']?>&status=ชำระเงินแล้ว">ชำระเงินแล้ว</a></li> <li><a class="dropdown-item" href="?id=<?=$row['id']?>&status=กำลังจัดส่ง">กำลังจัดส่ง</a></li> <li><a class="dropdown-item" href="?id=<?=$row['id']?>&status=รับ order แล้ว">รับ order แล้ว</a></li> <li><a class="dropdown-item" href="?id=<?=$row['id']?>&status=มารับเหรียญได้ที่วิทยาลัยฯ">มารับเหรียญได้ที่วิทยาลัยฯ</a></li> <li><a class="dropdown-item" href="?id=<?=$row['id']?>&status=รับเหรียญเรียบร้อยแล้ว">รับเหรียญเรียบร้อยแล้ว</a></li> <li><a class="dropdown-item" href="?id=<?=$row['id']?>&status=จัดส่งเรียบร้อยแล้ว">จัดส่งเรียบร้อยแล้ว</a></li> <li><a class="dropdown-item text-danger" href="?id=<?=$row['id']?>&status=ไม่ถูกต้อง / ยกเลิก">ไม่ถูกต้อง / ยกเลิก</a></li> </ul> </div> </td> <td><a href="print_invoice.php?id=<?=$row['id']?>" target="_blank" class="btn btn-outline-primary btn-sm">🖨 พิมพ์</a></td> </tr> <?php endwhile; ?> </tbody> </table> </div> <!-- 🧍♂️ รับเอง --> <div class="tab-pane fade" id="self"><?php include('orders_self_table.php'); ?></div> <!-- 📦 ไปรษณีย์ --> <div class="tab-pane fade" id="post"><?php include('orders_post_table.php'); ?></div> </div> </div> <!-- ✅ Overlay แสดงสลิป --> <div id="slipOverlay" class="slip-overlay"> <span class="close-btn">×</span> <div class="slip-content-box"> <img id="slipImage" class="slip-content"> <div class="slip-info"> <p><b>👤 ผู้จอง:</b> <span id="slipName"></span></p> <p><b>💰 ยอดรวม:</b> <span id="slipTotal"></span> บาท</p> <a id="downloadSlip" href="#" download class="btn btn-outline-light me-2">⬇️ ดาวน์โหลดสลิป</a> <button id="confirmOrder" class="btn btn-success">✅ ยืนยันการชำระเงิน</button> </div> </div> </div> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script> <script> // 🔍 Search filter ในตารางทั้งหมด document.getElementById('searchInput').addEventListener('keyup', function(){ const keyword=this.value.toLowerCase(); document.querySelectorAll('#allTable tbody tr').forEach(row=>{ const text=row.innerText.toLowerCase(); row.style.display=text.includes(keyword)?'':'none'; }); }); // ✅ Overlay แสดงสลิป document.querySelectorAll('.view-slip').forEach(link=>{ link.addEventListener('click',function(e){ e.preventDefault(); const img=this.dataset.img,name=this.dataset.name,total=this.dataset.total,status=this.dataset.status,id=this.dataset.id; document.getElementById('slipImage').src=img; document.getElementById('slipName').innerText=name; document.getElementById('slipTotal').innerText=total; document.getElementById('downloadSlip').href=img; const btn=document.getElementById('confirmOrder'); btn.dataset.id=id; if(status.includes('ชำระเงินแล้ว')){btn.disabled=true;btn.innerText='✔️ ยืนยันแล้ว';btn.classList.replace('btn-success','btn-secondary');} else{btn.disabled=false;btn.innerText='✅ ยืนยันการชำระเงิน';btn.classList.replace('btn-secondary','btn-success');} document.getElementById('slipOverlay').style.display='block'; }); }); document.querySelector('.close-btn').onclick=()=>document.getElementById('slipOverlay').style.display='none'; document.getElementById('slipOverlay').onclick=(e)=>{if(e.target===e.currentTarget)e.currentTarget.style.display='none';}; document.getElementById('confirmOrder').onclick=function(){ const id=this.dataset.id; if(!id||this.disabled)return; if(confirm('ยืนยันการชำระเงินใบจองนี้หรือไม่?'))window.location='orders.php?confirm='+id; }; </script> </body> </html>
| ver. 1.4 |
Github
|
.
| PHP 7.4.33 | Generation time: 0.79 |
proxy
|
phpinfo
|
Settings