Files
brewman/brewman/routers/voucher/issue_grid.py
T
tanshu de4d248de7 Done:
Issue Grid
 Batch
2020-05-12 11:53:20 +05:30

65 lines
1.6 KiB
Python

from datetime import datetime
from fastapi import APIRouter, Depends, Security, Request
from sqlalchemy.orm import Session
from sqlalchemy.orm.util import aliased
from ...schemas.auth import UserToken
from ...core.security import get_current_active_user as get_user
from ...db.session import SessionLocal
from brewman.models.voucher import Voucher, Journal, VoucherType
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_