| Server IP : 172.67.187.206 / Your IP : 172.71.28.156 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 : /Inetpub/www/supply_system/requisitions/ |
Upload File : |
<?php
include_once __DIR__ . '/../config.php';
include_once __DIR__ . '/../functions.php';
include_once __DIR__ . '/../includes/auth_check.php';
// requireRole(['department']); // จำกัดสิทธิ์เฉพาะธุรการกลุ่ม
$page_title = "สร้างคำขอเบิกพัสดุ";
$user_dept_id = getUserData('department_id');
$user_id = getUserData('user_id');
// --- ดึงข้อมูลพัสดุสำหรับ Select2 ---
$supplies_list = [];
// ดึงเฉพาะพัสดุที่มีสต็อก > 0 และ status = active (รวม image_filename)
$sql_supplies = "SELECT id, supply_code, supply_name, unit, quantity_in_stock, image_filename
FROM supplies
WHERE status = 'active' AND quantity_in_stock > 0
ORDER BY supply_code ASC";
$result_supplies = mysqli_query($conn, $sql_supplies);
if ($result_supplies) {
while ($row = mysqli_fetch_assoc($result_supplies)) {
// เพิ่มข้อมูล quantity_in_stock เข้าไปใน text ที่แสดงผล
$row['display_text'] = htmlspecialchars($row['supply_code'] . ' - ' . $row['supply_name'] . ' (' . $row['unit'] . ') - คงเหลือ: ' . number_format($row['quantity_in_stock']));
$supplies_list[$row['id']] = $row; // Use ID as key for easy lookup
}
mysqli_free_result($result_supplies);
}
// --- จัดการ Session Cart ---
if (!isset($_SESSION['requisition_cart'])) {
$_SESSION['requisition_cart'] = [];
}
$cart = &$_SESSION['requisition_cart']; // ใช้ reference (&) เพื่อให้แก้ไข Session ได้โดยตรง
// --- การเพิ่มรายการเข้า Cart (ถ้ามีการส่งข้อมูล POST มา) ---
$add_error = '';
if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST['action']) && $_POST['action'] == 'add_item') {
$item_id = isset($_POST['supply_id']) ? intval($_POST['supply_id']) : 0;
$item_qty = isset($_POST['quantity']) ? intval($_POST['quantity']) : 0;
if ($item_id > 0 && $item_qty > 0 && isset($supplies_list[$item_id])) {
$stock_available = $supplies_list[$item_id]['quantity_in_stock'];
$current_qty_in_cart = isset($cart[$item_id]) ? $cart[$item_id]['requested_quantity'] : 0;
$total_requested = $current_qty_in_cart + $item_qty;
if ($total_requested <= $stock_available) {
if (isset($cart[$item_id])) {
// Update quantity if item already in cart
$cart[$item_id]['requested_quantity'] += $item_qty;
} else {
// Add new item to cart
$cart[$item_id] = [
'supply_id' => $item_id,
'supply_code' => $supplies_list[$item_id]['supply_code'],
'supply_name' => $supplies_list[$item_id]['supply_name'],
'unit' => $supplies_list[$item_id]['unit'],
'image_filename' => $supplies_list[$item_id]['image_filename'], // Store image filename
'requested_quantity' => $item_qty,
'stock_available' => $stock_available // Store stock info for display
];
}
} else {
$add_error = "ไม่สามารถเพิ่มได้ จำนวนที่ขอรวม (".number_format($total_requested).") เกินกว่าจำนวนคงคลัง (".number_format($stock_available).")";
}
} else {
$add_error = "กรุณาเลือกพัสดุและระบุจำนวนที่ต้องการ";
}
// ไม่ต้อง redirect หน้านี้ เพราะต้องการให้เห็น Cart ทันที
}
// --- การลบรายการออกจาก Cart (ถ้ามีการส่ง GET parameter มา) ---
if (isset($_GET['action']) && $_GET['action'] == 'remove_item' && isset($_GET['id'])) {
$remove_id = intval($_GET['id']);
if (isset($cart[$remove_id])) {
unset($cart[$remove_id]);
}
// Redirect เพื่อลบ parameter ออกจาก URL และ refresh หน้า cart
redirect('create.php');
}
// --- การล้างตะกร้า ---
if (isset($_GET['action']) && $_GET['action'] == 'clear_cart') {
unset($_SESSION['requisition_cart']);
redirect('create.php');
}
mysqli_close($conn);
// --- Include Header ---
include_once __DIR__ . '/../includes/header.php';
?>
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/select2.min.css" rel="stylesheet" />
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/select2-bootstrap-5-theme.min.css" />
<style>
/* Adjust Select2 height */
.select2-container--bootstrap-5 .select2-selection--single { height: calc(1.5em + .75rem + 2px) !important; padding: .375rem .75rem !important; }
.select2-container--bootstrap-5 .select2-selection--single .select2-selection__rendered { line-height: 1.5 !important; }
.select2-container--bootstrap-5 .select2-selection--single .select2-selection__arrow { height: calc(1.5em + .75rem) !important; }
.cart-item-actions .btn { padding: 0.1rem 0.4rem; font-size: 0.8em; }
/* Cart Image Thumbnail */
.cart-img-thumbnail {
max-width: 40px;
max-height: 40px;
object-fit: cover;
cursor: pointer;
}
.image-placeholder-cart {
font-size: 1.5rem; /* Adjust icon size */
color: #adb5bd; /* Lighter grey */
cursor: default;
}
/* Modal Image Styling */
.modal-body img {
max-width: 100%;
max-height: 70vh; /* Limit modal image height */
display: block;
margin: 0 auto; /* Center image */
}
</style>
<?php
// --- Include Sidebar ---
include_once __DIR__ . '/../includes/sidebar_dept.php';
?>
<div class="container-fluid">
<h1 class="mt-4"><?php echo $page_title; ?></h1>
<?php if ($add_error): ?>
<div class="alert alert-danger alert-dismissible fade show" role="alert">
<?php echo $add_error; ?>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
<?php endif; ?>
<?php if (isset($_SESSION['message'])): ?>
<div class="alert alert-<?php echo $_SESSION['message_type']; ?> alert-dismissible fade show" role="alert">
<?php echo $_SESSION['message']; ?>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
<?php unset($_SESSION['message'], $_SESSION['message_type']); ?>
<?php endif; ?>
<div class="card mb-4">
<div class="card-header"><i class="bi bi-search me-1"></i>ค้นหาและเพิ่มพัสดุ</div>
<div class="card-body">
<form method="POST" action="create.php">
<input type="hidden" name="action" value="add_item">
<div class="row g-2 align-items-end">
<div class="col-md-7">
<label for="supply_id_select" class="form-label">เลือกพัสดุ</label>
<select class="form-select" id="supply_id_select" name="supply_id" required>
<option value="">-- ค้นหาหรือเลือกพัสดุ (รหัส - ชื่อ - หน่วย - คงเหลือ) --</option>
<?php foreach ($supplies_list as $item): ?>
<option value="<?php echo $item['id']; ?>">
<?php echo $item['display_text']; ?>
</option>
<?php endforeach; ?>
</select>
</div>
<div class="col-md-3">
<label for="quantity" class="form-label">จำนวนที่ต้องการ</label>
<input type="number" class="form-control" id="quantity" name="quantity" min="1" step="1" required>
</div>
<div class="col-md-2">
<button type="submit" class="btn btn-primary w-100"><i class="bi bi-plus-lg"></i> เพิ่ม</button>
</div>
</div>
</form>
</div>
</div>
<div class="card mb-4">
<div class="card-header"><i class="bi bi-cart3 me-1"></i>รายการพัสดุที่เลือก (ตะกร้า)</div>
<div class="card-body">
<?php if (empty($cart)): ?>
<p class="text-center text-muted">ยังไม่มีรายการพัสดุในตะกร้า</p>
<?php else: ?>
<form action="action_save.php" method="POST" id="requisitionForm">
<div class="table-responsive mb-3">
<table class="table table-sm table-bordered">
<thead class="table-light">
<tr>
<th>#</th>
<th>รูปภาพ</th> <th>รหัส</th>
<th>ชื่อพัสดุ</th>
<th>หน่วยนับ</th>
<th class="text-end">จำนวนที่ขอ</th>
<th class="text-center">ดำเนินการ</th>
</tr>
</thead>
<tbody>
<?php $cart_counter = 1; ?>
<?php foreach ($cart as $item_id => $item):
$cart_image_url = BASE_URL . '/uploads/supplies/' . $item['image_filename'];
$cart_image_path = __DIR__ . '/../uploads/supplies/' . $item['image_filename'];
$cart_image_exists = !empty($item['image_filename']) && file_exists($cart_image_path);
?>
<tr>
<td><?php echo $cart_counter++; ?></td>
<td class="text-center align-middle"> <?php if ($cart_image_exists): ?>
<img src="<?php echo $cart_image_url; ?>"
alt="<?php echo htmlspecialchars($item['supply_name']); ?>"
class="img-thumbnail cart-img-thumbnail"
data-bs-toggle="modal"
data-bs-target="#imageModalCart"
data-image-url="<?php echo $cart_image_url; ?>"
data-image-title="<?php echo htmlspecialchars($item['supply_name'] . ' (' . $item['supply_code'] . ')'); ?>">
<?php else: ?>
<i class="bi bi-image image-placeholder-cart"></i>
<?php endif; ?>
</td>
<td><?php echo htmlspecialchars($item['supply_code']); ?></td>
<td><?php echo htmlspecialchars($item['supply_name']); ?></td>
<td><?php echo htmlspecialchars($item['unit']); ?></td>
<td class="text-end"><?php echo number_format($item['requested_quantity']); ?></td>
<td class="text-center cart-item-actions align-middle">
<a href="create.php?action=remove_item&id=<?php echo $item_id; ?>" class="btn btn-danger btn-sm" title="ลบรายการนี้">
<i class="bi bi-trash"></i>
</a>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
<div class="mb-3">
<label for="remarks" class="form-label">หมายเหตุ (ถ้ามี)</label>
<textarea class="form-control" id="remarks" name="remarks" rows="2"></textarea>
</div>
<input type="hidden" name="department_id" value="<?php echo $user_dept_id; ?>">
<input type="hidden" name="requested_by" value="<?php echo $user_id; ?>">
<button type="submit" class="btn btn-success"><i class="bi bi-send-check-fill"></i> ส่งคำขอเบิก</button>
<a href="create.php?action=clear_cart" class="btn btn-warning" onclick="return confirm('ต้องการล้างรายการทั้งหมดในตะกร้าใช่หรือไม่?');">
<i class="bi bi-cart-x"></i> ล้างตะกร้า
</a>
</form>
<?php endif; ?>
</div>
</div>
</div>
<div class="modal fade" id="imageModalCart" tabindex="-1" aria-labelledby="imageModalCartLabel" aria-hidden="true">
<div class="modal-dialog modal-lg modal-dialog-centered">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="imageModalCartLabel">รูปภาพพัสดุ</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body text-center">
<img src="" id="modalCartImage" alt="Supply Image">
</div>
</div>
</div>
</div>
<?php
// --- Include Footer ---
include_once __DIR__ . '/../includes/footer.php';
?>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/select2.min.js"></script>
<script>
$(document).ready(function() {
// --- Initialize Select2 ---
$('#supply_id_select').select2({
theme: "bootstrap-5",
width: $( this ).data( 'width' ) ? $( this ).data( 'width' ) : $( this ).hasClass( 'w-100' ) ? '100%' : 'style',
placeholder: "-- ค้นหาหรือเลือกพัสดุ --",
});
// --- Image Modal Handler (Cart) ---
var imageModalCart = document.getElementById('imageModalCart');
if (imageModalCart) {
imageModalCart.addEventListener('show.bs.modal', function (event) {
var button = event.relatedTarget; // Image that triggered the modal
var imageUrl = button.getAttribute('data-image-url');
var imageTitle = button.getAttribute('data-image-title');
var modalTitle = imageModalCart.querySelector('.modal-title');
var modalImage = imageModalCart.querySelector('#modalCartImage');
modalTitle.textContent = imageTitle;
modalImage.src = imageUrl;
modalImage.alt = imageTitle;
});
}
});
</script>