One Hat Cyber Team
Your IP :
216.73.216.55
Server IP :
5.189.175.239
Server :
Linux panel.gemx-ai.com 5.14.0-570.19.1.el9_6.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Jun 4 04:00:24 EDT 2025 x86_64
Server Software :
LiteSpeed
PHP Version :
8.2.28
Buat File
|
Buat Folder
Eksekusi
Dir :
~
/
home
/
farmersapp
/
church.farmersapp.store
/
Edit File:
procurement.php
<?php require_once 'config.php'; if (!isLoggedIn()) { redirect('index.php'); } // Handle form submission for new procurement if ($_SERVER['REQUEST_METHOD'] === 'POST') { if (isset($_POST['add_procurement'])) { $item_name = sanitize($_POST['item_name']); $category = sanitize($_POST['category']); $quantity = $_POST['quantity']; $unit_price = $_POST['unit_price']; $total_cost = $quantity * $unit_price; $supplier = sanitize($_POST['supplier']); $purchase_date = $_POST['purchase_date']; $status = $_POST['status']; $notes = sanitize($_POST['notes']); $stmt = $pdo->prepare("INSERT INTO procurement (item_name, category, quantity, unit_price, total_cost, supplier, purchase_date, purchased_by, status, notes) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); $stmt->execute([$item_name, $category, $quantity, $unit_price, $total_cost, $supplier, $purchase_date, $_SESSION['user_id'], $status, $notes]); $success = "Procurement recorded successfully!"; } if (isset($_POST['update_status'])) { $id = $_POST['id']; $status = $_POST['status']; $stmt = $pdo->prepare("UPDATE procurement SET status = ? WHERE id = ?"); $stmt->execute([$status, $id]); $success = "Status updated successfully!"; } } // Handle search $status_filter = isset($_GET['status']) ? $_GET['status'] : ''; $search = isset($_GET['search']) ? sanitize($_GET['search']) : ''; $where = []; $params = []; if ($status_filter) { $where[] = "p.status = ?"; $params[] = $status_filter; } if ($search) { $where[] = "(p.item_name LIKE ? OR p.category LIKE ? OR p.supplier LIKE ?)"; $params[] = "%$search%"; $params[] = "%$search%"; $params[] = "%$search%"; } $where_clause = $where ? " WHERE " . implode(" AND ", $where) : ""; // Get all procurement items $stmt = $pdo->prepare("SELECT p.*, u.full_name as purchaser FROM procurement p JOIN users u ON p.purchased_by = u.id $where_clause ORDER BY p.purchase_date DESC"); $stmt->execute($params); $procurements = $stmt->fetchAll(); // Get summary statistics $stats = $pdo->query("SELECT COUNT(*) as total_items, SUM(total_cost) as total_cost, SUM(CASE WHEN status = 'Pending' THEN 1 ELSE 0 END) as pending, SUM(CASE WHEN status = 'Approved' THEN 1 ELSE 0 END) as approved, SUM(CASE WHEN status = 'Received' THEN 1 ELSE 0 END) as received FROM procurement")->fetch(); // Get category summary $categories = $pdo->query("SELECT category, SUM(total_cost) as total FROM procurement GROUP BY category ORDER BY total DESC")->fetchAll(); ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Procurement Management - Church MS</title> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> <style> :root { --primary: #4f46e5; --primary-dark: #4338ca; --secondary: #7c3aed; --success: #10b981; --warning: #f59e0b; --danger: #ef4444; --light: #f8fafc; --dark: #1e293b; --gray: #64748b; } .stats-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 20px; margin-bottom: 30px; } .stat-card { background: white; padding: 20px; border-radius: 15px; box-shadow: 0 5px 15px rgba(0,0,0,0.05); text-align: center; } .stat-card h3 { color: var(--gray); font-size: 14px; margin-bottom: 10px; } .stat-card .value { font-size: 28px; font-weight: 700; } .stat-card.total .value { color: var(--primary); } .stat-card.cost .value { color: var(--success); } .stat-card.pending .value { color: var(--warning); } .stat-card.approved .value { color: var(--secondary); } .stat-card.received .value { color: var(--success); } .category-list { background: white; border-radius: 15px; padding: 20px; margin-bottom: 30px; box-shadow: 0 5px 15px rgba(0,0,0,0.05); } .category-item { display: flex; justify-content: space-between; align-items: center; padding: 12px 0; border-bottom: 1px solid var(--light); } .category-item:last-child { border-bottom: none; } .category-name { font-weight: 600; color: var(--dark); } .category-amount { color: var(--success); font-weight: 600; } .filters { display: flex; gap: 15px; margin-bottom: 20px; flex-wrap: wrap; } .filter-group { display: flex; align-items: center; gap: 10px; } .filter-group label { font-weight: 600; color: var(--dark); font-size: 14px; } .status-badge { padding: 6px 15px; border-radius: 20px; font-size: 12px; font-weight: 600; display: inline-block; } .status-pending { background: rgba(245, 158, 11, 0.1); color: var(--warning); } .status-approved { background: rgba(79, 70, 229, 0.1); color: var(--primary); } .status-received { background: rgba(16, 185, 129, 0.1); color: var(--success); } .status-cancelled { background: rgba(239, 68, 68, 0.1); color: var(--danger); } .action-dropdown { position: relative; display: inline-block; } .dropdown-btn { background: var(--light); border: none; padding: 8px 15px; border-radius: 8px; cursor: pointer; display: flex; align-items: center; gap: 5px; } .dropdown-content { display: none; position: absolute; background: white; min-width: 160px; box-shadow: 0 8px 32px rgba(0,0,0,0.1); border-radius: 10px; z-index: 1000; right: 0; } .dropdown-content a { color: var(--dark); padding: 12px 16px; text-decoration: none; display: block; font-size: 14px; } .dropdown-content a:hover { background: var(--light); } .action-dropdown:hover .dropdown-content { display: block; } .cost-breakdown { background: var(--light); padding: 15px; border-radius: 10px; margin-bottom: 15px; } .breakdown-item { display: flex; justify-content: space-between; padding: 5px 0; } .breakdown-label { color: var(--gray); } .breakdown-value { font-weight: 600; } </style> </head> <body> <div class="dashboard-container"> <!-- Sidebar --> <div class="sidebar"> <div class="sidebar-header"> <h2><i class="fas fa-church"></i> Church MS</h2> <div class="user-info"> <p>Welcome, <?php echo $_SESSION['full_name']; ?></p> <p><?php echo $_SESSION['role']; ?></p> </div> </div> <nav class="sidebar-menu"> <a href="dashboard.php" class="menu-item"> <i class="fas fa-tachometer-alt"></i> <span>Dashboard</span> </a> <a href="members.php" class="menu-item"> <i class="fas fa-users"></i> <span>Members</span> </a> <a href="tithes.php" class="menu-item"> <i class="fas fa-hand-holding-usd"></i> <span>Tithes</span> </a> <a href="offerings.php" class="menu-item"> <i class="fas fa-donate"></i> <span>Offerings</span> </a> <a href="cottages.php" class="menu-item"> <i class="fas fa-home"></i> <span>Cottages</span> </a> <a href="procurement.php" class="menu-item active"> <i class="fas fa-shopping-cart"></i> <span>Procurement</span> </a> <a href="reports.php" class="menu-item"> <i class="fas fa-chart-bar"></i> <span>Reports</span> </a> <a href="users.php" class="menu-item"> <i class="fas fa-user-cog"></i> <span>Users</span> </a> </nav> </div> <!-- Main Content --> <div class="main-content"> <!-- Top Bar --> <div class="top-bar"> <h1>Procurement Management</h1> <div class="user-menu"> <form action="logout.php" method="POST"> <button type="submit" class="logout-btn"> <i class="fas fa-sign-out-alt"></i> Logout </button> </form> </div> </div> <div class="page-header"> <h2>Church Procurement</h2> <button class="btn btn-primary" onclick="openProcurementModal()"> <i class="fas fa-plus-circle"></i> New Procurement </button> </div> <?php if (isset($success)): ?> <div class="alert alert-success"> <i class="fas fa-check-circle"></i> <?php echo $success; ?> </div> <?php endif; ?> <!-- Statistics --> <div class="stats-grid"> <div class="stat-card total"> <h3>Total Items</h3> <div class="value"><?php echo $stats['total_items']; ?></div> </div> <div class="stat-card cost"> <h3>Total Cost</h3> <div class="value">₦<?php echo number_format($stats['total_cost'], 2); ?></div> </div> <div class="stat-card pending"> <h3>Pending</h3> <div class="value"><?php echo $stats['pending']; ?></div> </div> <div class="stat-card approved"> <h3>Approved</h3> <div class="value"><?php echo $stats['approved']; ?></div> </div> <div class="stat-card received"> <h3>Received</h3> <div class="value"><?php echo $stats['received']; ?></div> </div> </div> <!-- Category Summary --> <div class="category-list"> <h3 style="margin-bottom: 15px; color: var(--dark);">Spending by Category</h3> <?php foreach ($categories as $category): ?> <div class="category-item"> <span class="category-name"><?php echo $category['category']; ?></span> <span class="category-amount">₦<?php echo number_format($category['total'], 2); ?></span> </div> <?php endforeach; ?> </div> <!-- Filters --> <form method="GET" action="" class="filters"> <div class="filter-group"> <label>Status:</label> <select name="status" class="form-control" onchange="this.form.submit()"> <option value="">All Status</option> <option value="Pending" <?php echo $status_filter == 'Pending' ? 'selected' : ''; ?>>Pending</option> <option value="Approved" <?php echo $status_filter == 'Approved' ? 'selected' : ''; ?>>Approved</option> <option value="Received" <?php echo $status_filter == 'Received' ? 'selected' : ''; ?>>Received</option> <option value="Cancelled" <?php echo $status_filter == 'Cancelled' ? 'selected' : ''; ?>>Cancelled</option> </select> </div> <div class="filter-group"> <label>Search:</label> <input type="text" name="search" class="form-control" placeholder="Search items..." value="<?php echo htmlspecialchars($search); ?>"> </div> <button type="submit" class="btn btn-primary"> <i class="fas fa-search"></i> Filter </button> <?php if ($status_filter || $search): ?> <a href="procurement.php" class="btn">Clear Filters</a> <?php endif; ?> </form> <!-- Procurement Table --> <div class="table-container"> <table class="data-table"> <thead> <tr> <th>Item Name</th> <th>Category</th> <th>Quantity</th> <th>Cost</th> <th>Supplier</th> <th>Purchase Date</th> <th>Status</th> <th>Actions</th> </tr> </thead> <tbody> <?php foreach ($procurements as $procurement): ?> <tr> <td> <strong><?php echo $procurement['item_name']; ?></strong> <div style="font-size: 12px; color: var(--gray); margin-top: 5px;"> By: <?php echo $procurement['purchaser']; ?> </div> </td> <td><?php echo $procurement['category']; ?></td> <td><?php echo $procurement['quantity']; ?></td> <td> <div class="cost-breakdown"> <div class="breakdown-item"> <span class="breakdown-label">Unit:</span> <span class="breakdown-value">₦<?php echo number_format($procurement['unit_price'], 2); ?></span> </div> <div class="breakdown-item"> <span class="breakdown-label">Total:</span> <span class="breakdown-value" style="color: var(--success);"> ₦<?php echo number_format($procurement['total_cost'], 2); ?> </span> </div> </div> </td> <td><?php echo $procurement['supplier']; ?></td> <td><?php echo formatDate($procurement['purchase_date']); ?></td> <td> <span class="status-badge status-<?php echo strtolower($procurement['status']); ?>"> <?php echo $procurement['status']; ?> </span> </td> <td> <div class="action-dropdown"> <button class="dropdown-btn"> <i class="fas fa-ellipsis-v"></i> </button> <div class="dropdown-content"> <a href="#" onclick="viewProcurement(<?php echo $procurement['id']; ?>)"> <i class="fas fa-eye"></i> View Details </a> <a href="#" onclick="updateStatusModal(<?php echo $procurement['id']; ?>, '<?php echo $procurement['status']; ?>')"> <i class="fas fa-sync"></i> Update Status </a> <a href="#" onclick="editProcurement(<?php echo $procurement['id']; ?>)"> <i class="fas fa-edit"></i> Edit </a> <a href="#" onclick="deleteProcurement(<?php echo $procurement['id']; ?>)" style="color: var(--danger);"> <i class="fas fa-trash"></i> Delete </a> </div> </div> </td> </tr> <?php endforeach; ?> </tbody> </table> </div> </div> </div> <!-- Add Procurement Modal --> <div class="modal" id="addProcurementModal"> <div class="modal-content"> <div class="modal-header"> <h3><i class="fas fa-shopping-cart"></i> New Procurement</h3> <button class="close-modal" onclick="closeProcurementModal()">×</button> </div> <div class="modal-body"> <form method="POST" action=""> <div class="form-group"> <label>Item Name *</label> <input type="text" name="item_name" class="form-control" required> </div> <div class="form-group"> <label>Category *</label> <select name="category" class="form-control" required> <option value="">Select Category</option> <option value="Office Supplies">Office Supplies</option> <option value="Equipment">Equipment</option> <option value="Furniture">Furniture</option> <option value="Sanitation">Sanitation</option> <option value="Maintenance">Maintenance</option> <option value="Events">Events</option> <option value="Food & Beverages">Food & Beverages</option> <option value="Utilities">Utilities</option> <option value="Other">Other</option> </select> </div> <div class="form-row" style="display: grid; grid-template-columns: 1fr 1fr; gap: 15px; margin-bottom: 20px;"> <div class="form-group"> <label>Quantity *</label> <input type="number" name="quantity" class="form-control" min="1" required> </div> <div class="form-group"> <label>Unit Price (₦) *</label> <input type="number" name="unit_price" step="0.01" min="0" class="form-control" required> </div> </div> <div class="form-group"> <label>Supplier</label> <input type="text" name="supplier" class="form-control"> </div> <div class="form-row" style="display: grid; grid-template-columns: 1fr 1fr; gap: 15px; margin-bottom: 20px;"> <div class="form-group"> <label>Purchase Date *</label> <input type="date" name="purchase_date" class="form-control" required value="<?php echo date('Y-m-d'); ?>"> </div> <div class="form-group"> <label>Status *</label> <select name="status" class="form-control" required> <option value="Pending">Pending</option> <option value="Approved">Approved</option> <option value="Received">Received</option> <option value="Cancelled">Cancelled</option> </select> </div> </div> <div class="form-group"> <label>Notes (Optional)</label> <textarea name="notes" class="form-control" rows="3" placeholder="Additional information..."></textarea> </div> <div style="display: flex; gap: 10px; justify-content: flex-end;"> <button type="button" class="btn" onclick="closeProcurementModal()">Cancel</button> <button type="submit" name="add_procurement" class="btn btn-primary"> <i class="fas fa-save"></i> Save Procurement </button> </div> </form> </div> </div> </div> <!-- Update Status Modal --> <div class="modal" id="updateStatusModal"> <div class="modal-content"> <div class="modal-header"> <h3><i class="fas fa-sync"></i> Update Status</h3> <button class="close-modal" onclick="closeStatusModal()">×</button> </div> <div class="modal-body"> <form method="POST" action=""> <input type="hidden" name="id" id="procurement_id"> <div class="form-group"> <label>Select New Status *</label> <select name="status" id="status_select" class="form-control" required> <option value="Pending">Pending</option> <option value="Approved">Approved</option> <option value="Received">Received</option> <option value="Cancelled">Cancelled</option> </select> </div> <div style="display: flex; gap: 10px; justify-content: flex-end;"> <button type="button" class="btn" onclick="closeStatusModal()">Cancel</button> <button type="submit" name="update_status" class="btn btn-primary"> <i class="fas fa-save"></i> Update Status </button> </div> </form> </div> </div> </div> <script> function openProcurementModal() { document.getElementById('addProcurementModal').style.display = 'flex'; } function closeProcurementModal() { document.getElementById('addProcurementModal').style.display = 'none'; } function updateStatusModal(id, currentStatus) { document.getElementById('procurement_id').value = id; document.getElementById('status_select').value = currentStatus; document.getElementById('updateStatusModal').style.display = 'flex'; } function closeStatusModal() { document.getElementById('updateStatusModal').style.display = 'none'; } function viewProcurement(id) { alert('View procurement details for ID: ' + id); } function editProcurement(id) { window.location.href = 'edit_procurement.php?id=' + id; } function deleteProcurement(id) { if (confirm('Are you sure you want to delete this procurement record?')) { window.location.href = 'delete_procurement.php?id=' + id; } } // Close modals when clicking outside window.onclick = function(event) { const procurementModal = document.getElementById('addProcurementModal'); const statusModal = document.getElementById('updateStatusModal'); if (event.target === procurementModal) { closeProcurementModal(); } if (event.target === statusModal) { closeStatusModal(); } } </script> </body> </html>
Simpan