Added session support, but right now it is defaulting to 2 week long session

Reports working:
 Ledger
 Balance Sheet
 Profit & Loss
 Closing Stock
This commit is contained in:
tanshu committed 2020-05-12 02:57:48 +05:30
1 parent 6dbab6442f
commit 85d05392b8
8 files changed
+181 -108

No files matched your search

+40 -20
View File
@@ -1,7 +1,13 @@
import datetime
from fastapi import APIRouter, Depends, Security, Request
from sqlalchemy.orm import Session
from sqlalchemy.sql.expression import func, desc
from ...schemas.auth import UserToken
from ...core.security import get_current_active_user as get_user
from ...db.session import SessionLocal
from brewman.models.master import AccountType, AccountBase
from brewman.models.voucher import Voucher, Journal, VoucherType
from brewman.routers.reports.closing_stock import get_opening_stock, get_closing_stock
@@ -11,36 +17,50 @@ from brewman.routers.services.session import (
session_period_finish,
)
from fastapi import APIRouter
router = APIRouter()
@router.get("/api/profit-loss", permission="Profit & Loss")
def report_blank(request):
# 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=["profit-&-loss"]),
):
return {
"startDate": session_period_start(request),
"finishDate": session_period_finish(request),
"startDate": session_period_start(request.session),
"finishDate": session_period_finish(request.session),
"body": [],
"footer": {},
}
@router.get("/api/profit-loss", request_param=["s", "f"], permission="Profit & Loss")
def report_data(request):
start_date = request.GET["s"]
finish_date = request.GET["f"]
body, footer = build_profit_loss(start_date, finish_date, request.dbsession)
session_period_set(start_date, finish_date, request)
@router.get("/{start}/{finish}")
def report_data(
start: str,
finish: str,
request: Request,
db: Session = Depends(get_db),
user: UserToken = Security(get_user, scopes=["profit-&-loss"]),
):
body, footer = build_profit_loss(start, finish, db)
session_period_set(start, finish, request.session)
return {
"startDate": start_date,
"finishDate": finish_date,
"startDate": start,
"finishDate": finish,
"body": body,
"footer": footer,
}
def build_profit_loss(start_date, finish_date, dbsession):
def build_profit_loss(start_date, finish_date, db):
start_date = datetime.datetime.strptime(start_date, "%d-%b-%Y")
finish_date = datetime.datetime.strptime(finish_date, "%d-%b-%Y")
profit_type_list = [i.id for i in AccountType.list() if i.balance_sheet == False]
@@ -49,7 +69,7 @@ def build_profit_loss(start_date, finish_date, dbsession):
amount_sum = func.sum(Journal.amount * Journal.debit)
query = (
dbsession.query(AccountBase, amount_sum)
db.query(AccountBase, amount_sum)
.join(Journal.voucher)
.join(Journal.account)
.filter(Voucher.date >= start_date)
@@ -63,8 +83,8 @@ def build_profit_loss(start_date, finish_date, dbsession):
)
# Get opening / closing stock
opening_stock = get_opening_stock(start_date, dbsession)
closing_stock = get_closing_stock(finish_date, dbsession)
opening_stock = get_opening_stock(start_date, db)
closing_stock = get_closing_stock(finish_date, db)
total_amount = (opening_stock - closing_stock) * -1
report.append(
@@ -117,11 +137,11 @@ def build_profit_loss(start_date, finish_date, dbsession):
return sorted(report, key=lambda d: d["order"]), footer
def get_accumulated_profit(finish_date, dbsession):
def get_accumulated_profit(finish_date, db):
type_list = [i.id for i in AccountType.list() if i.balance_sheet is False]
accumulated_profit = (
dbsession.query(func.sum(Journal.amount * Journal.debit))
db.query(func.sum(Journal.amount * Journal.debit))
.join(Journal.voucher)
.join(Journal.account)
.filter(Voucher.date <= finish_date)