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:
1 parent
6dbab6442f
commit
85d05392b8
8 files changed
+181
-108
No files matched your search
@@ -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)
|
||||
|
||||
Reference in new issue
Block a user