TorbatYar/backend/services/accounting/app/repositories/ledger.py
Mortezakoohjani 12c8615615 Ship enterprise Accounting FE/API with CRUD parity and production wiring.
Adds accounting-service PATCH/archive, fiscal helpers, COA templates and setup status, plus SuperApp Accounting UI (DS, scoreboard, masters, vouchers, ledger, ops modules) with session refresh and HTTPS public API URLs.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-24 15:26:43 +03:30

60 lines
1.9 KiB
Python

"""Ledger repositories."""
from __future__ import annotations
from uuid import UUID
from sqlalchemy import select
from app.models.ledger import (
GeneralLedger,
LedgerBalance,
TrialBalanceSnapshot,
)
from app.repositories.base import TenantBaseRepository
class GeneralLedgerRepository(TenantBaseRepository[GeneralLedger]):
model = GeneralLedger
async def list_by_account_period(
self, tenant_id: UUID, account_id: UUID, fiscal_period_id: UUID
):
stmt = (
select(GeneralLedger)
.where(
GeneralLedger.tenant_id == tenant_id,
GeneralLedger.account_id == account_id,
GeneralLedger.fiscal_period_id == fiscal_period_id,
)
.order_by(GeneralLedger.entry_date)
)
result = await self.session.execute(stmt)
return result.scalars().all()
class LedgerBalanceRepository(TenantBaseRepository[LedgerBalance]):
model = LedgerBalance
async def get_by_account_period(
self, tenant_id: UUID, account_id: UUID, fiscal_period_id: UUID
) -> LedgerBalance | None:
stmt = select(LedgerBalance).where(
LedgerBalance.tenant_id == tenant_id,
LedgerBalance.account_id == account_id,
LedgerBalance.fiscal_period_id == fiscal_period_id,
)
result = await self.session.execute(stmt)
return result.scalar_one_or_none()
async def list_by_period(self, tenant_id: UUID, fiscal_period_id: UUID):
stmt = select(LedgerBalance).where(
LedgerBalance.tenant_id == tenant_id,
LedgerBalance.fiscal_period_id == fiscal_period_id,
)
result = await self.session.execute(stmt)
return result.scalars().all()
class TrialBalanceSnapshotRepository(TenantBaseRepository[TrialBalanceSnapshot]):
model = TrialBalanceSnapshot