= ?"; $params[] = $filter_start; } if ($filter_end) { $where[] = "e.entry_date <= ?"; $params[] = $filter_end; } $where_clause = implode(" AND ", $where); $stmt = db()->prepare(" SELECT e.entry_date, s.name as supplier_name, p.name as project_name, e.amount, e.allocation_percent, et.name as expense_type, e.notes FROM expenses e JOIN projects p ON e.project_id = p.id JOIN suppliers s ON e.supplier_id = s.id LEFT JOIN expense_types et ON e.expense_type_id = et.id WHERE $where_clause ORDER BY e.entry_date DESC "); $stmt->execute($params); $data = $stmt->fetchAll(PDO::FETCH_ASSOC); $filename_suffix = date('Y-m-d_H-i-s'); header('Content-Type: text/csv; charset=utf-8'); header('Content-Disposition: attachment; filename=expenses_export_' . $filename_suffix . '.csv'); $output = fopen('php://output', 'w'); fputcsv($output, ['Date', 'Supplier', 'Project', 'Amount', 'Allocation %', 'Expense Type', 'Notes']); foreach ($data as $row) { fputcsv($output, $row); } fclose($output); exit;