Files
brewman/brewman/routers/reports/daybook.py
tanshu 2b2430c5b2 Done upto reconcile
Pending:
 stock movement
 trial balance
 unposted
2020-05-12 03:52:25 +05:30

97 lines
2.8 KiB
Python

import datetime
from fastapi import APIRouter, Depends, Security, Request
from sqlalchemy.orm import joinedload_all, Session
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
from brewman.routers.services.session import (
session_period_set,
session_period_start,
session_period_finish,
)
router = APIRouter()
# Dependency
def get_db() -> Session:
try:
db = SessionLocal()
yield db
finally:
db.close()
@router.get("")
def report_blank(
request: Request,
user: UserToken = Security(get_user, scopes=["daybook"]),
):
return {
"startDate": session_period_start(request.session),
"finishDate": session_period_finish(request.session),
"body": [],
}
@router.get("/{start}/{finish}")
def report_data(
start: str,
finish: str,
request: Request,
db: Session = Depends(get_db),
user: UserToken = Security(get_user, scopes=["daybook"]),
):
body = build_report(start, finish, db)
session_period_set(start, finish, request.session)
return {"startDate": start, "finishDate": finish, "body": body}
def build_report(start_date, finish_date, db):
body = []
query = (
db.query(Voucher)
.options(joinedload_all(Voucher.journals, Journal.account, innerjoin=True))
.filter(Voucher.date >= datetime.datetime.strptime(start_date, "%d-%b-%Y"))
.filter(Voucher.date <= datetime.datetime.strptime(finish_date, "%d-%b-%Y"))
.filter(Voucher.type != VoucherType.by_name("Issue").id)
.order_by(Voucher.date)
.order_by(Voucher.last_edit_date)
.all()
)
for voucher in query:
debit = 0
credit = 0
name_debit = ""
name_credit = ""
for journal in voucher.journals:
if journal.debit == 1:
debit += journal.amount
name_debit += "{0} / ".format(journal.account.name)
else:
credit += journal.amount
name_credit += "{0} / ".format(journal.account.name)
name_debit = name_debit[:-3]
name_credit = name_credit[:-3]
body.append(
{
"id": voucher.id,
"date": voucher.date.strftime("%d-%b-%Y"),
"url": "", # get_edit_url(voucher, request),
"type": VoucherType.by_id(voucher.type).name,
"narration": voucher.narration,
"posted": voucher.posted,
"debitText": name_debit,
"debitAmount": debit,
"creditText": name_credit,
"creditAmount": credit,
}
)
return body