File: /home/imensosw/demo.imensosoftware.com/matrix/admin/assigned_to.php
<?php
include 'admin_header.php';
/**
* ============================
* HANDLE RE-ASSIGN (OPTIMIZED)
* ============================
*/
if ($_SERVER['REQUEST_METHOD'] === 'POST' && !empty($_POST['assign_id']) && !empty($_POST['operator_id'])) {
$ids = array_map('intval', $_POST['assign_id']);
$operator_id = (int) $_POST['operator_id'];
// ✅ Single query instead of loop
$idList = implode(',', $ids);
$stmt = $conn->prepare("UPDATE assignments SET user_id = ? WHERE id IN ($idList)");
$stmt->bind_param("i", $operator_id);
$stmt->execute();
}
/**
* ============================
* FETCH DATA (OPTIMIZED)
* ============================
*/
// ✅ Optimized query using subquery instead of heavy join
$sql = "
SELECT
a.id,
a.assignment_no,
a.no_of_record,
a.assignment_date,
u.name as user_name,
(
SELECT COUNT(*)
FROM assignment_details ad
WHERE ad.assignment_id = a.id
AND (ad.doc_title != '' OR ad.doc_date != '' OR ad.doc_description != '')
) as completed_count
FROM assignments a
JOIN users u ON u.id = a.user_id
WHERE a.deleted = 0
AND a.assignment_status_id = 1
";
$result = $conn->query($sql);
$total = 0;
?>
<div class="container" style="background:#fff; margin-top:42px">
<div class="assignment-dashboard">
<form method="POST">
<div class="row">
<!-- LEFT -->
<div class="col-sm-8 border-right">
<h5 class="mt-3 mb-3">
ASSIGNED FOLDERS
<span class="font-weight-light small text-info total_count">[0]</span>
<div class="pull-right">
<strong class="badge badge-secondary checked_count">0</strong>
</div>
</h5>
<input type="text" class="mb-3 assignment_to" placeholder="Search: [Folder Index/User]" id="search" style="width:100%; text-align:center;">
<div class="table-responsive">
<table id="assignment_to_table" class="table table-striped table-sm table-bordered">
<thead>
<tr>
<th>Action</th>
<th>Folder Index</th>
<th>Data Count</th>
<th>Completed</th>
<th>Assigned To</th>
<th>Date</th>
</tr>
</thead>
<tbody>
<?php while ($row = $result->fetch_assoc()):
$total += $row['no_of_record'];
?>
<tr>
<td>
<input type="checkbox" name="assign_id[]" value="<?= $row['id'] ?>" file_count="<?= $row['no_of_record'] ?>" class="chk_assign_id">
</td>
<td>
<a href="show_doc.php?assignment_no=<?= urlencode($row['assignment_no']) ?>" target="_blank">
<?= htmlspecialchars($row['assignment_no']) ?>
</a>
</td>
<td><?= $row['no_of_record'] ?></td>
<td><?= $row['completed_count'] ?></td>
<td><?= htmlspecialchars($row['user_name']) ?></td>
<td><?= date('m/d/Y', strtotime($row['assignment_date'])) ?></td>
</tr>
<?php endwhile; ?>
</tbody>
</table>
</div>
</div>
<!-- RIGHT -->
<div class="col-sm-4">
<h5 class="mt-3 mb-3">RE-ASSIGN TO:</h5>
<?php
$sqlUsers = "
SELECT u.id, u.name, COALESCE(SUM(a.no_of_record),0) as no_of_pending
FROM users u
JOIN role_user r ON r.user_id = u.id
LEFT JOIN assignments a
ON a.user_id = u.id AND a.assignment_status_id = 1
WHERE r.role_id IN (2,3)
GROUP BY u.id
";
$resUsers = $conn->query($sqlUsers);
while ($row = $resUsers->fetch_assoc()):
?>
<div class="card mb-3">
<div class="card-body">
<div class="card-text pull-left">
<img src="../images/user.png" class="rounded-circle border mr-3" width="36">
<strong><?= htmlspecialchars($row["name"]) ?></strong>
<span class="badge badge-info"><?= $row["no_of_pending"] ?></span>
</div>
<div class="card-link pull-right" style="margin-top:6px;">
<input type="radio" name="operator_id" value="<?= $row["id"] ?>">
</div>
</div>
</div>
<?php endwhile; ?>
<div class="text-right">
<input class="btn btn-primary" type="submit" name="save" value="Assign">
</div>
</div>
</div>
</form>
</div>
</div>
<script>
document.addEventListener("DOMContentLoaded", function() {
document.querySelector(".total_count").innerText = "[<?= $total ?>]";
document.querySelectorAll(".chk_assign_id").forEach(el => {
el.addEventListener("change", function() {
let total = 0;
document.querySelectorAll("input[name='assign_id[]']:checked").forEach(chk => {
total += parseInt(chk.getAttribute("file_count")) || 0;
});
document.querySelector(".checked_count").innerText = total;
});
});
});
</script>
<?php $conn->close(); ?>