brewman/brewman/brewman/routers/issue_grid.py

65 lines
1.6 KiB
Python

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_