from datetime import datetime from fastapi import APIRouter, Depends, Request, Security from sqlalchemy.orm import Session from sqlalchemy.orm.util import aliased from ..core.security import get_current_active_user as get_user from ..db.session import SessionLocal from ..models.voucher import Journal, Voucher, VoucherType from ..schemas.auth import UserToken router = APIRouter() # Dependency def get_db() -> Session: try: db = SessionLocal() yield db finally: db.close() @router.get("/{date}") def grid_date( date: str, request: Request, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["issue"]), ): date = datetime.strptime(date, "%d-%b-%Y") return get_grid(date, db) def get_grid(date, db): list_ = [] source_journal = aliased(Journal) destination_journal = aliased(Journal) query = ( db.query(Voucher, source_journal.amount) .join(source_journal, Voucher.journals) .join(destination_journal, Voucher.journals) .filter(Voucher.date == date) .filter(Voucher.type == VoucherType.by_name("Issue").id) .order_by(Voucher.creation_date) .all() ) for voucher, amount in query: list_.append( { "id": str(voucher.id), "amount": amount, "source": [ j.cost_centre.name for j in voucher.journals if j.debit == -1 ], "destination": [ j.cost_centre.name for j in voucher.journals if j.debit == 1 ], } ) return list_