0) { $stmt = db()->prepare("INSERT INTO labour_entries (tenant_id, project_id, employee_id, entry_date, hours, labour_type_id, evidence_type_id, notes) VALUES (?, ?, ?, ?, ?, ?, ?, ?)"); $stmt->execute([$tenant_id, $project_id, $employee_id, $entry_date, $hours, $labour_type_id, $evidence_type_id, $notes]); $labour_entry_id = (int)db()->lastInsertId(); // Handle File Uploads if (!empty($_FILES['attachments']['name'][0])) { foreach ($_FILES['attachments']['tmp_name'] as $key => $tmp_name) { if ($_FILES['attachments']['error'][$key] === UPLOAD_ERR_OK) { $file_name = $_FILES['attachments']['name'][$key]; $file_size = $_FILES['attachments']['size'][$key]; $mime_type = $_FILES['attachments']['type'][$key]; $file_ext = pathinfo($file_name, PATHINFO_EXTENSION); $new_file_name = uniqid() . '.' . $file_ext; $file_path = 'uploads/' . $new_file_name; if (!is_dir('uploads')) mkdir('uploads', 0775, true); if (move_uploaded_file($tmp_name, $file_path)) { $stmt = db()->prepare("INSERT INTO attachments (tenant_id, entity_type, entity_id, file_name, file_path, file_size, mime_type, uploaded_by) VALUES (?, 'labour_entry', ?, ?, ?, ?, ?, 'John Manager')"); $stmt->execute([$tenant_id, $labour_entry_id, $file_name, $file_path, $file_size, $mime_type]); } } } } $stmt = db()->prepare("INSERT INTO activity_log (tenant_id, action, details) VALUES (?, ?, ?)"); $stmt->execute([$tenant_id, 'Labour Added', "Logged $hours hours for employee ID $employee_id"]); header("Location: labour.php?success=1"); exit; } } // Fetch Data $labourEntries = db()->prepare(" SELECT le.*, p.name as project_name, e.name as employee_name, lt.name as labour_type, et.name as evidence_type FROM labour_entries le JOIN projects p ON le.project_id = p.id JOIN employees e ON le.employee_id = e.id LEFT JOIN labour_types lt ON le.labour_type_id = lt.id LEFT JOIN evidence_types et ON le.evidence_type_id = et.id WHERE le.tenant_id = ? ORDER BY le.entry_date DESC, le.created_at DESC "); $labourEntries->execute([$tenant_id]); $labourList = $labourEntries->fetchAll(); $projects = db()->prepare("SELECT id, name FROM projects WHERE tenant_id = ? ORDER BY name"); $projects->execute([$tenant_id]); $projectList = $projects->fetchAll(); $employees = db()->prepare("SELECT id, first_name, last_name FROM employees WHERE tenant_id = ? ORDER BY first_name, last_name"); $employees->execute([$tenant_id]); $employeeList = $employees->fetchAll(); $labourTypes = db()->prepare("SELECT * FROM labour_types WHERE tenant_id = ? ORDER BY name"); $labourTypes->execute([$tenant_id]); $labourTypeList = $labourTypes->fetchAll(); $evidenceTypes = db()->prepare("SELECT * FROM evidence_types WHERE tenant_id = ? ORDER BY name"); $evidenceTypes->execute([$tenant_id]); $evidenceTypeList = $evidenceTypes->fetchAll(); $pageTitle = "SR&ED Manager - Labour Tracking"; include __DIR__ . '/includes/header.php'; ?>
| Date | Employee | Project | Hours | Type / Evidence | Notes | Actions |
|---|---|---|---|---|---|---|
| No labour entries found. | ||||||
| = $l['entry_date'] ?> | = htmlspecialchars($l['employee_name']) ?> | = htmlspecialchars($l['project_name']) ?> | = number_format((float)$l['hours'], 2) ?> h |
= htmlspecialchars($l['labour_type'] ?? 'N/A') ?>
= htmlspecialchars($l['evidence_type'] ?? 'N/A') ?>
|
= htmlspecialchars($l['notes'] ?? '') ?> | |