36037-vm/views/admin_sales.php
Flatlogic Bot b6296eed55 Version 1
2025-11-22 17:18:03 +00:00

119 lines
5.0 KiB
PHP

<?php
try {
$pdo = db();
$stmt = $pdo->query("SELECT s.id, s.receipt_number, s.total_amount, s.created_at, u.username
FROM sales s
JOIN users u ON s.user_id = u.id
ORDER BY s.created_at DESC");
$sales = $stmt->fetchAll();
} catch (PDOException $e) {
echo "<div class='alert alert-danger'>Database error: " . htmlspecialchars($e->getMessage()) . "</div>";
$sales = [];
}
?>
<h1 class="h3 mb-4">Sales Reports</h1>
<div class="card shadow-sm">
<div class="card-body">
<div class="table-responsive">
<table class="table table-striped table-hover">
<thead class="table-dark">
<tr>
<th>Receipt Number</th>
<th>Cashier</th>
<th>Total Amount</th>
<th>Date</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
<?php if (empty($sales)): ?>
<tr>
<td colspan="5" class="text-center">No sales recorded yet.</td>
</tr>
<?php else: ?>
<?php foreach ($sales as $sale): ?>
<tr>
<td><?= htmlspecialchars($sale['receipt_number']) ?></td>
<td><?= htmlspecialchars($sale['username']) ?></td>
<td>$<?= htmlspecialchars(number_format($sale['total_amount'], 2)) ?></td>
<td><?= htmlspecialchars(date('M d, Y h:i A', strtotime($sale['created_at']))) ?></td>
<td>
<button class="btn btn-sm btn-primary view-sale-details-btn" data-sale-id="<?= $sale['id'] ?>" data-bs-toggle="modal" data-bs-target="#saleDetailsModal">
View Details
</button>
</td>
</tr>
<?php endforeach; ?>
<?php endif; ?>
</tbody>
</table>
</div>
</div>
</div>
<!-- Sale Details Modal -->
<div class="modal fade" id="saleDetailsModal" tabindex="-1" aria-labelledby="saleDetailsModalLabel" aria-hidden="true">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="saleDetailsModalLabel">Sale Details</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body" id="saleDetailsBody">
<!-- Sale details will be loaded here -->
<p class="text-center">Loading...</p>
</div>
</div>
</div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const saleDetailsModal = document.getElementById('saleDetailsModal');
const saleDetailsBody = document.getElementById('saleDetailsBody');
saleDetailsModal.addEventListener('show.bs.modal', function (event) {
const button = event.relatedTarget;
const saleId = button.getAttribute('data-sale-id');
saleDetailsBody.innerHTML = '<p class="text-center">Loading...</p>';
fetch(`/api/get_sale_details.php?id=${saleId}`)
.then(response => response.json())
.then(data => {
if (data.error) {
saleDetailsBody.innerHTML = `<div class="alert alert-danger">${data.error}</div>`;
return;
}
let itemsHtml = '<ul class="list-group">';
data.items.forEach(item => {
itemsHtml += `<li class="list-group-item d-flex justify-content-between align-items-center">
${item.product_name} (x${item.quantity})
<span>$${parseFloat(item.price_at_sale).toFixed(2)} each</span>
</li>`;
});
itemsHtml += '</ul>';
saleDetailsBody.innerHTML = `
<p><strong>Receipt Number:</strong> ${data.receipt_number}</p>
<p><strong>Cashier:</strong> ${data.cashier_name}</p>
<p><strong>Date:</strong> ${new Date(data.created_at).toLocaleString()}</p>
<hr>
<h5>Items Sold</h5>
${itemsHtml}
<hr>
<div class="text-end fs-5 fw-bold">
Total: $${parseFloat(data.total_amount).toFixed(2)}
</div>
`;
})
.catch(err => {
saleDetailsBody.innerHTML = `<div class="alert alert-danger">An error occurred while fetching sale details.</div>`;
console.error('Fetch error:', err);
});
});
});
</script>