diff --git a/assets/css/custom.css b/assets/css/custom.css index 0d3fda7..b121a81 100644 --- a/assets/css/custom.css +++ b/assets/css/custom.css @@ -118,3 +118,42 @@ body { font-size: 0.75rem; color: #94a3b8; } + +/* Filter Sidebar Styles */ +.filter-sidebar { + transition: all 0.3s ease; + width: 300px; + position: relative; +} + +.filter-sidebar.collapsed { + width: 0; + overflow: hidden; + padding: 0; + margin: 0; + border: none; + opacity: 0; +} + +.filter-toggle-btn { + position: absolute; + left: -40px; + top: 10px; + z-index: 10; + background: #ffffff; + border: 1px solid #e2e8f0; + border-radius: 4px 0 0 4px; + padding: 5px 10px; + cursor: pointer; + box-shadow: -2px 0 5px rgba(0,0,0,0.05); +} + +.filter-card { + position: sticky; + top: 90px; +} + +.extra-small { + font-size: 0.7rem; +} + diff --git a/index.php b/index.php index 61838ae..bc70028 100644 --- a/index.php +++ b/index.php @@ -200,8 +200,59 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['add_supplier'])) { } // Fetch Data -$projects = db()->prepare("SELECT * FROM projects WHERE tenant_id = ? ORDER BY created_at DESC"); -$projects->execute([$tenant_id]); +$search = $_GET['search'] ?? ''; +$status_filter = $_GET['status'] ?? ''; +$date_preset = $_GET['date_preset'] ?? ''; +$start_from = $_GET['start_from'] ?? ''; +$start_to = $_GET['start_to'] ?? ''; + +$query = "SELECT * FROM projects WHERE tenant_id = ?"; +$params = [$tenant_id]; + +if ($search) { + $query .= " AND (name LIKE ? OR code LIKE ?)"; + $params[] = "%$search%"; + $params[] = "%$search%"; +} + +if ($status_filter) { + $query .= " AND status = ?"; + $params[] = $status_filter; +} + +if ($date_preset && $date_preset !== 'custom') { + switch ($date_preset) { + case 'today': + $query .= " AND start_date = CURRENT_DATE"; + break; + case 'this_week': + $query .= " AND start_date >= DATE_SUB(CURRENT_DATE, INTERVAL WEEKDAY(CURRENT_DATE) DAY)"; + break; + case 'last_week': + $query .= " AND start_date >= DATE_SUB(CURRENT_DATE, INTERVAL WEEKDAY(CURRENT_DATE) + 7 DAY) AND start_date < DATE_SUB(CURRENT_DATE, INTERVAL WEEKDAY(CURRENT_DATE) DAY)"; + break; + case 'this_month': + $query .= " AND start_date >= DATE_FORMAT(CURRENT_DATE, '%Y-%m-01')"; + break; + case 'last_month': + $query .= " AND start_date >= DATE_FORMAT(DATE_SUB(CURRENT_DATE, INTERVAL 1 MONTH), '%Y-%m-01') AND start_date < DATE_FORMAT(CURRENT_DATE, '%Y-%m-01')"; + break; + case 'this_year': + $query .= " AND start_date >= DATE_FORMAT(CURRENT_DATE, '%Y-01-01')"; + break; + case 'last_year': + $query .= " AND start_date >= DATE_FORMAT(DATE_SUB(CURRENT_DATE, INTERVAL 1 YEAR), '%Y-01-01') AND start_date < DATE_FORMAT(CURRENT_DATE, '%Y-01-01')"; + break; + } +} elseif ($date_preset === 'custom' && $start_from && $start_to) { + $query .= " AND start_date BETWEEN ? AND ?"; + $params[] = $start_from; + $params[] = $start_to; +} + +$query .= " ORDER BY created_at DESC"; +$projects = db()->prepare($query); +$projects->execute($params); $projectList = $projects->fetchAll(); $employees = db()->prepare(" @@ -272,6 +323,7 @@ $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'SR&ED Project Tracking SR&ED Manager - Dashboard + @@ -288,7 +340,6 @@ $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'SR&ED Project Tracking @@ -356,36 +407,100 @@ $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'SR&ED Project Tracking -
-
- Active Projects - +
+
+
+
+ Active Projects +
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
Project NameCodeStart DateStatusActions
No projects found matching the filters.
+ +
+
+
-
- - - - - - - - - - - - - - - - - - - - - -
Project NameCodeStart DateStatusActions
- -
+ +
+
+
+ FILTERS + +
+
+
+
+ + +
+
+ + +
+
+ + +
+
+
+ + +
+
+ + +
+
+
+ + Clear All +
+
+
+
@@ -845,5 +960,25 @@ $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'SR&ED Project Tracking +