File manager - Edit - /var/www/order.cmtc.ac.th/admin/orders_preorder.php
Back
<?php session_start(); if(!isset($_SESSION['admin'])) { header('Location: index.php'); exit; } include('../config/db.php'); date_default_timezone_set('Asia/Bangkok'); // ========================== // 🔹 ฟังก์ชันยืนยันคำสั่งซื้อ // ========================== if(isset($_GET['confirm'])){ $id = intval($_GET['confirm']); $chk = $conn->query("SELECT booking_no, status FROM orders WHERE id=$id")->fetch_assoc(); if(!empty($chk['booking_no']) || $chk['status'] == 'ยกเลิกรายการ'){ echo "<script>alert('รายการนี้ได้รับการยืนยันหรือถูกยกเลิกไปแล้ว'); window.location='orders_preorder.php';</script>"; exit; } $booking_no = 'PRE' . date('YmdHis'); $conn->query("UPDATE orders SET booking_no='$booking_no', status='ยืนยันการชำระเงิน', order_status='รอจัดสินค้า' WHERE id=$id"); $conn->query("UPDATE order_items SET confirm_status='ยืนยัน' WHERE order_id=$id"); echo "<script> alert('ยืนยันการชำระเงินแล้ว และออกเลขที่ใบจอง: $booking_no'); window.open('print_invoice.php?id=$id','_blank'); window.location='orders_preorder.php'; </script>"; exit; } // ========================== // 🔹 ฟังก์ชันยกเลิกคำสั่งซื้อ // ========================== if(isset($_GET['cancel'])){ $id = intval($_GET['cancel']); $chk = $conn->query("SELECT status FROM orders WHERE id=$id")->fetch_assoc(); if($chk['status'] == 'ยืนยันการชำระเงิน' || $chk['status'] == 'ยกเลิกรายการ'){ echo "<script>alert('ไม่สามารถยกเลิกรายการนี้ได้'); window.location='orders_preorder.php';</script>"; exit; } $res = $conn->query("SELECT product_id, qty FROM order_items WHERE order_id=$id"); while($r = $res->fetch_assoc()){ $pid = intval($r['product_id']); $qty = intval($r['qty']); //$conn->query("UPDATE products SET stock = stock + $qty WHERE id = $pid"); } $conn->query("UPDATE orders SET status='ยกเลิกรายการ' WHERE id=$id"); $conn->query("UPDATE order_items SET confirm_status='ยกเลิก' WHERE order_id=$id"); echo "<script>alert('ยกเลิกรายการเรียบร้อยแล้ว '); window.location='orders_preorder.php';</script>"; exit; } // ========================== // ฟังก์ชันเปลี่ยนสถานะ (อื่น ๆ) // ========================== if(isset($_GET['status']) && isset($_GET['id'])){ $sid = intval($_GET['id']); $status = mysqli_real_escape_string($conn, $_GET['status']); $conn->query("UPDATE orders SET status='$status' WHERE id=$sid"); } // ========================== // ตัวกรองข้อมูล // ========================== $today = date('Y-m-d'); $default_from = date('Y-m-d', strtotime('-6 days', strtotime($today))); $date_from = $_GET['date_from'] ?? $default_from; $date_to = $_GET['date_to'] ?? $today; $filter_receive = $_GET['receive'] ?? 'all'; $search = trim($_GET['search'] ?? ''); $where = "WHERE o.order_type='Pre Order' AND DATE(o.created_at) BETWEEN ? AND ?"; $params = [$date_from, $date_to]; $types = 'ss'; if($filter_receive != 'all'){ $where .= " AND o.receive_method=?"; $params[] = ($filter_receive=='self' ? 'รับสินค้าด้วยตนเอง' : 'จัดส่งทางไปรษณีย์'); $types .= 's'; } if($search != ''){ $where .= " AND (o.booking_no LIKE ? OR o.fullname LIKE ? OR o.phone LIKE ?)"; $s = "%".$search."%"; $params[] = $s; $params[] = $s; $params[] = $s; $types .= 'sss'; } $sql = " 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 GROUP BY o.id ORDER BY o.id DESC "; $stmt = $conn->prepare($sql); $stmt->bind_param($types, ...$params); $stmt->execute(); $res = $stmt->get_result(); ?> <!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;} .table th,.table td{vertical-align:middle!important;} .text-danger { font-weight: bold; } .img-lightbox { max-width: 95%; max-height: 85vh; transition: transform 0.3s ease; cursor: zoom-in; border-radius: 12px; box-shadow: 0 4px 10px rgba(0,0,0,0.25); } .img-lightbox.zoomed { transform: scale(1.8); cursor: zoom-out; } .modal-dialog { max-width: 95vw; margin: 0 auto; } .modal-body { text-align: center; background: #000; } .modal-content { border-radius: 10px; overflow: hidden; } #slipInfo { background: #fff; color: #000; padding: 15px; text-align: left; } </style> </head> <body class="bg-light"> <?php include("menu.php"); ?> <div class="container py-4"> <div class="d-flex justify-content-between align-items-center mb-3"> <h3>📦 รายการจอง (Pre Order)</h3> <a href="orders_preorder.php" class="btn btn-outline-warning btn-sm"> ไปหน้า ปกติ</a> </div> <!-- ฟอร์มกรอง --> <div class="card mb-3 shadow-sm"> <div class="card-body"> <form class="row g-2 align-items-end"> <div class="col-md-2"> <label class="form-label">จากวันที่</label> <input type="date" name="date_from" value="<?=htmlspecialchars($date_from)?>" class="form-control"> </div> <div class="col-md-2"> <label class="form-label">ถึงวันที่</label> <input type="date" name="date_to" value="<?=htmlspecialchars($date_to)?>" class="form-control"> </div> <div class="col-md-2"> <label class="form-label">วิธีรับสินค้า</label> <select name="receive" class="form-select"> <option value="all" <?=($filter_receive=='all'?'selected':'')?>>ทั้งหมด</option> <option value="self" <?=($filter_receive=='self'?'selected':'')?>>รับสินค้าด้วยตนเอง</option> <option value="post" <?=($filter_receive=='post'?'selected':'')?>>จัดส่งทางไปรษณีย์</option> </select> </div> <div class="col-md-3"> <label class="form-label">ค้นหา (ชื่อ, เบอร์โทร, เลขที่ใบจอง)</label> <input type="text" name="search" value="<?=htmlspecialchars($search)?>" class="form-control"> </div> <div class="col-md-3 text-end"> <button class="btn btn-primary">🔍 แสดง</button> </div> </form> </div> </div> <div class="d-flex justify-content-end gap-2 mb-3"> <a href="orders_print.php?date_from=<?=$date_from?>&date_to=<?=$date_to?>&receive=<?=$filter_receive?>&search=<?=urlencode($search)?>&type=normal" target="_blank" class="btn btn-success">🖨 พิมพ์รายงาน</a> <a href="orders_export.php?date_from=<?=$date_from?>&date_to=<?=$date_to?>&receive=<?=$filter_receive?>&search=<?=urlencode($search)?>&type=normal" class="btn btn-outline-success">📊 Export Excel</a> </div> <div class="card shadow-sm"> <div class="card-header bg-dark text-white fw-bold">รายการจองปกติ (<?=htmlspecialchars($date_from)?> ถึง <?=htmlspecialchars($date_to)?>)</div> <div class="card-body p-0"> <div class="table-responsive"> <table class="table table-bordered text-center mb-0"> <thead class="table-light"> <tr> <th>เลขที่ใบจอง</th> <th>ชื่อผู้จอง</th> <th>เบอร์โทร</th> <th>รายการเหรียญ</th> <th>ยอดรวม</th> <th>สถานะ</th> <th>วิธีรับสินค้า</th> <th>วันที่จอง</th> <th>สลิป</th> <th>จัดการ</th> </tr> </thead> <tbody> <?php if($res->num_rows > 0): while($row=$res->fetch_assoc()): ?> <tr> <td><?= $row['booking_no'] ?: '-' ?></td> <td><?= htmlspecialchars($row['fullname']) ?></td> <td><?= htmlspecialchars($row['phone']) ?></td> <td><?= htmlspecialchars($row['items']) ?></td> <td><?= number_format($row['total'],2) ?></td> <td> <?php if($row['status'] == 'ยกเลิกรายการ'): ?> <span class="fw-bold text-danger"><?= htmlspecialchars($row['status']) ?></span> <?php else: ?> <span class="fw-bold text-primary"><?= htmlspecialchars($row['status']) ?></span> <?php endif; ?> </td> <td><?= htmlspecialchars($row['receive_method']) ?></td> <td><?= htmlspecialchars($row['created_at']) ?></td> <td> <?php if(!empty($row['slip'])): ?> <button class="btn btn-outline-info btn-sm" data-bs-toggle="modal" data-bs-target="#slipLightbox" data-slip="../uploads/slip/<?=htmlspecialchars($row['slip'])?>" data-name="<?=htmlspecialchars($row['fullname'])?>" data-date="<?=htmlspecialchars($row['created_at'])?>" data-total="<?=number_format($row['total'],2)?>" data-status="<?=htmlspecialchars($row['status'])?>" data-id="<?=$row['id']?>">ดู</button> <?php else: ?><span class="text-muted">-</span><?php endif; ?> </td> <td> <?php if(empty($row['booking_no']) && $row['status']!='ยกเลิกรายการ'): ?> <div class="d-flex justify-content-center align-items-center gap-1"> <a href="?confirm=<?=$row['id']?>" class="btn btn-success btn-sm">✅ ยืนยัน</a> <a href="?cancel=<?=$row['id']?>" class="btn btn-outline-danger btn-sm" onclick="return confirm('ต้องการยกเลิกรายการนี้หรือไม่?')">❌ ยกเลิก</a> </div> <?php elseif($row['status']=='ยกเลิกรายการ'): ?> <div class="text-muted">🚫 ยกเลิกแล้ว</div> <?php else: ?> <div class="d-flex justify-content-center align-items-center gap-1"> <button class="btn btn-secondary btn-sm" disabled>✔️ ดำเนินการแล้ว</button> </div> <?php endif; ?> </td> </tr> <?php endwhile; else: ?> <tr><td colspan="10" class="text-center text-muted py-4">ไม่พบข้อมูลการจอง</td></tr> <?php endif; ?> </tbody> </table> </div> </div> </div> </div> <!-- 🔹 Lightbox Modal --> <div class="modal fade" id="slipLightbox" tabindex="-1" aria-hidden="true"> <div class="modal-dialog modal-fullscreen-sm-down modal-xl"> <div class="modal-content"> <div class="modal-body p-0"> <img id="lightboxImg" src="" alt="Slip" class="img-lightbox"> <div id="slipInfo"> <p><b>ชื่อผู้จอง:</b> <span id="slipName"></span></p> <p><b>วันที่จอง:</b> <span id="slipDate"></span></p> <p><b>ยอดรวม:</b> <span id="slipTotal" class="text-success fs-5"></span> บาท</p> </div> </div> <div class="modal-footer justify-content-between bg-light"> <div id="actionBtns"> <a id="confirmBtn" href="#" class="btn btn-success px-4">✅ ยืนยัน</a> <a id="cancelBtn" href="#" class="btn btn-outline-danger px-4" onclick="return confirm('ต้องการยกเลิกรายการนี้หรือไม่?')">❌ ยกเลิก</a> </div> <button class="btn btn-secondary" data-bs-dismiss="modal">ปิด</button> </div> </div> </div> </div> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script> <script> const slipModal = document.getElementById('slipLightbox'); slipModal.addEventListener('show.bs.modal', function (event) { const button = event.relatedTarget; const img = button.getAttribute('data-slip'); const name = button.getAttribute('data-name'); const date = button.getAttribute('data-date'); const total = button.getAttribute('data-total'); const status = button.getAttribute('data-status'); const id = button.getAttribute('data-id'); slipModal.querySelector('#lightboxImg').src = img; slipModal.querySelector('#slipName').textContent = name; slipModal.querySelector('#slipDate').textContent = date; slipModal.querySelector('#slipTotal').textContent = total; const confirmBtn = slipModal.querySelector('#confirmBtn'); const cancelBtn = slipModal.querySelector('#cancelBtn'); const actionBtns = slipModal.querySelector('#actionBtns'); confirmBtn.href = '?confirm=' + id; cancelBtn.href = '?cancel=' + id; if(status === 'ยืนยันการชำระเงิน' || status === 'ยกเลิกรายการ'){ actionBtns.style.display = 'none'; } else { actionBtns.style.display = 'flex'; } }); // ✅ Zoom-in / Zoom-out Image const lightboxImg = document.getElementById('lightboxImg'); lightboxImg.addEventListener('click', () => { lightboxImg.classList.toggle('zoomed'); }); </script> </body> </html>
| ver. 1.4 |
Github
|
.
| PHP 7.4.33 | Generation time: 0.4 |
proxy
|
phpinfo
|
Settings