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
Projects
@@ -356,36 +407,100 @@ $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'SR&ED Project Tracking
-
-