prepare(" SELECT t.*, o.name as object_name, o.address FROM tasks t JOIN objects o ON o.id = t.object_id WHERE t.assigned_to = ? AND t.status IN ('open','in_progress') ORDER BY FIELD(t.priority,'P1','P2','P3','P4'), t.deadline ASC "); $stmt->execute([$userId]); $myTasks = $stmt->fetchAll(); // Close task with checklist data if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['close_task'])) { $taskId = (int)$_POST['task_id']; $csrf = $_POST['csrf_token'] ?? ''; if (!auth_csrf_verify($csrf)) { $message = 'Ошибка безопасности.'; } else { $checklist = [ 'arrival_fixed' => isset($_POST['arrival_fixed']) ? 1 : 0, 'photo_before' => isset($_POST['photo_before']) ? 1 : 0, 'power_check' => isset($_POST['power_check']) ? 1 : 0, 'cameras_check' => isset($_POST['cameras_check']) ? 1 : 0, 'acs_check' => isset($_POST['acs_check']) ? 1 : 0, 'fire_check' => isset($_POST['fire_check']) ? 1 : 0, 'fault_found' => isset($_POST['fault_found']) ? 1 : 0, 'fault_fixed' => isset($_POST['fault_fixed']) ? 1 : 0, 'system_test' => isset($_POST['system_test']) ? 1 : 0, 'photo_after' => isset($_POST['photo_after']) ? 1 : 0, ]; $notes = trim($_POST['result_notes'] ?? ''); $pdo->prepare("UPDATE tasks SET status='completed', closed_at=NOW(), checklist_data=?, result_notes=? WHERE id=? AND assigned_to=?") ->execute([json_encode($checklist), $notes, $taskId, $userId]); $message = 'Задача завершена.'; auth_log($userId, 'task_complete', "Task: $taskId"); // Reload $stmt->execute([$userId]); $myTasks = $stmt->fetchAll(); } } $csrf = auth_csrf_token(); require __DIR__ . '/../../inc/header.php'; ?>

Чек-лист техника

Нет активных задач

Вам пока не назначены задачи. Ожидайте назначения от инженера.

Дедлайн:

Объект: ·

Чек-лист выполнения