Adding filters et pagination to ledger
This commit is contained in:
@@ -1,27 +1,26 @@
|
||||
from sqlalchemy import and_, select, func
|
||||
from sqlalchemy.orm import aliased
|
||||
|
||||
from ledger.schema import TransactionLedgerRead
|
||||
from transaction.models import Split, Transaction
|
||||
|
||||
|
||||
|
||||
class LedgerResource:
|
||||
@classmethod
|
||||
def get_ledger(cls, session, account_id):
|
||||
def get_ledger(cls, account_id, filters):
|
||||
split_account = aliased(Split)
|
||||
split_balance = aliased(Split)
|
||||
transaction_balance = aliased(Transaction)
|
||||
|
||||
balance_stmt = select(func.sum(split_balance.amount)).join(transaction_balance).where(and_(split_balance.account_id == split_account.account_id, transaction_balance.sequence <= Transaction.sequence)).scalar_subquery()
|
||||
balance_stmt = select(func.sum(split_balance.amount)) \
|
||||
.join(transaction_balance) \
|
||||
.where(and_(
|
||||
split_balance.account_id == split_account.account_id,
|
||||
transaction_balance.sequence <= Transaction.sequence)
|
||||
).scalar_subquery()
|
||||
|
||||
stmt = (select(
|
||||
Transaction,
|
||||
split_account,
|
||||
balance_stmt.label('balance')
|
||||
).join(
|
||||
split_account,
|
||||
and_(Transaction.id == split_account.transaction_id, split_account.account_id == account_id)
|
||||
))
|
||||
stmt = select(Transaction,split_account,balance_stmt.label('balance')) \
|
||||
.join(
|
||||
split_account,
|
||||
and_(Transaction.id == split_account.transaction_id, split_account.account_id == account_id)
|
||||
)
|
||||
|
||||
return [TransactionLedgerRead(transaction=transaction, account_split=split, balance=balance) for transaction, split, balance in session.exec(stmt).all()]
|
||||
return filters.filter(stmt)
|
||||
|
||||
Reference in New Issue
Block a user