= :start_date"; $params[':start_date'] = $start_date; } if ($end_date) { $sql .= " AND je.entry_date <= :end_date"; $params[':end_date'] = $end_date; } $sql .= " GROUP BY a.account_code, a.account_name, a.account_type, a.normal_balance ORDER BY a.account_type, a.account_code"; $stmt = $pdo->prepare($sql); $stmt->execute($params); $report_lines = $stmt->fetchAll(PDO::FETCH_ASSOC); // Structure the report and calculate totals $revenue_total = 0; $expense_total = 0; $revenues = []; $expenses = []; foreach ($report_lines as $line) { if ($line['account_type'] == 'revenue') { $revenues[] = $line; $revenue_total += $line['balance']; } else { $expenses[] = $line; $expense_total += $line['balance']; } } $net_income = $revenue_total - $expense_total; echo json_encode([ 'success' => true, 'report_name' => 'Income Statement', 'generated_at' => date('c'), 'filters' => ['start_date' => $start_date, 'end_date' => $end_date], 'data' => [ 'revenues' => $revenues, 'expenses' => $expenses ], 'summary' => [ 'total_revenue' => $revenue_total, 'total_expense' => $expense_total, 'net_income' => $net_income ] ]); } catch (PDOException $e) { http_response_code(500); echo json_encode([ 'success' => false, 'error' => 'Database error: ' . $e->getMessage() ]); }