40 lines
1.3 KiB
Python
40 lines
1.3 KiB
Python
from fastapi import APIRouter, HTTPException
|
|
|
|
from backend.db.database import get_connection
|
|
from pydantic import BaseModel
|
|
|
|
router = APIRouter(prefix="/api/accounts", tags=["accounts"])
|
|
|
|
|
|
class OpeningBalanceBody(BaseModel):
|
|
period_start: str # YYYY-MM-DD
|
|
amount: float
|
|
|
|
|
|
@router.get("")
|
|
def list_accounts():
|
|
conn = get_connection()
|
|
try:
|
|
rows = conn.execute(
|
|
"""SELECT a.id, a.bank_id, a.external_id, a.name, b.code as bank_code, b.name as bank_name, b.is_salary
|
|
FROM accounts a JOIN banks b ON a.bank_id = b.id ORDER BY b.code, a.external_id"""
|
|
).fetchall()
|
|
return [dict(r) for r in rows]
|
|
finally:
|
|
conn.close()
|
|
|
|
|
|
@router.post("/{account_id}/opening-balance")
|
|
def set_opening_balance(account_id: int, body: OpeningBalanceBody):
|
|
conn = get_connection()
|
|
try:
|
|
conn.execute(
|
|
"""INSERT INTO opening_balances (account_id, period_start, amount) VALUES (?, ?, ?)
|
|
ON CONFLICT(account_id, period_start) DO UPDATE SET amount = excluded.amount""",
|
|
(account_id, body.period_start, body.amount),
|
|
)
|
|
conn.commit()
|
|
return {"account_id": account_id, "period_start": body.period_start, "amount": body.amount}
|
|
finally:
|
|
conn.close()
|