65 lines
1.6 KiB
Python
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_
|