from fastapi import APIRouter, Query from datetime import date from typing import Optional from app.core.database import get_connection router = APIRouter(prefix="/trial-balance", tags=["试算表"]) @router.get("", summary="试算表(全科目)") def get_trial_balance( fiscal_year: Optional[int] = Query(None, description="会计年度(可选)"), date_from: Optional[date] = Query(None, description="开始日期(可选)"), date_to: Optional[date] = Query(None, description="结束日期(可选)"), ): print("### trial-balance OPTIONAL PARAMS ACTIVE ###") sql = """ SELECT a.account_id, a.account_code, a.account_name, a.account_type, COALESCE(SUM(l.debit), 0) AS debit, COALESCE(SUM(l.credit), 0) AS credit FROM journal_lines l JOIN journal_entries e ON e.journal_entry_id = l.journal_entry_id JOIN accounts a ON a.account_id = l.account_id WHERE 1 = 1 """ params = {} if fiscal_year is not None: sql += " AND e.fiscal_year = %(fiscal_year)s" params["fiscal_year"] = fiscal_year if date_from is not None: sql += " AND e.journal_date >= %(date_from)s" params["date_from"] = date_from if date_to is not None: sql += " AND e.journal_date <= %(date_to)s" params["date_to"] = date_to sql += """ GROUP BY a.account_id, a.account_code, a.account_name, a.account_type ORDER BY a.account_code """ with get_connection() as conn, conn.cursor() as cur: cur.execute(sql, params) rows = cur.fetchall() return rows