Net Transactions!!

This commit is contained in:
tanshu 2020-05-14 12:34:27 +05:30
parent 5f783e1f45
commit 6ec4068ed0
2 changed files with 47 additions and 10 deletions

View File

@ -1,4 +1,4 @@
import datetime from datetime import datetime, date
from fastapi import APIRouter, Depends, Security, Request from fastapi import APIRouter, Depends, Security, Request
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
@ -9,6 +9,7 @@ from ...core.security import get_current_active_user as get_user
from ...db.session import SessionLocal from ...db.session import SessionLocal
from brewman.models.master import AccountBase from brewman.models.master import AccountBase
from brewman.models.voucher import Voucher, Journal, VoucherType from brewman.models.voucher import Voucher, Journal, VoucherType
import brewman.schemas.reports as schemas
from ...core.session import ( from ...core.session import (
set_period, set_period,
get_start_date, get_start_date,
@ -27,7 +28,7 @@ def get_db() -> Session:
db.close() db.close()
@router.get("") @router.get("", response_model=schemas.NetTransactions)
def show_blank( def show_blank(
request: Request, request: Request,
user: UserToken = Security(get_user, scopes=["net-transactions"]), user: UserToken = Security(get_user, scopes=["net-transactions"]),
@ -39,7 +40,7 @@ def show_blank(
} }
@router.get("/{start}/{finish}") @router.get("/{start}/{finish}", response_model=schemas.NetTransactions)
def show_data( def show_data(
start: str, start: str,
finish: str, finish: str,
@ -51,16 +52,11 @@ def show_data(
return { return {
"startDate": start, "startDate": start,
"finishDate": finish, "finishDate": finish,
"body": build_report(start, finish, db), "body": build_report(datetime.strptime(start, "%d-%b-%Y"), datetime.strptime(finish, "%d-%b-%Y"), db),
} }
def build_report(start_date, finish_date, db): def build_report(start_date: date, finish_date: date, db: Session):
if not isinstance(start_date, datetime.datetime):
start_date = datetime.datetime.strptime(start_date, "%d-%b-%Y")
if not isinstance(finish_date, datetime.datetime):
finish_date = datetime.datetime.strptime(finish_date, "%d-%b-%Y")
amount_sum = func.sum(Journal.amount * Journal.debit).label("amount") amount_sum = func.sum(Journal.amount * Journal.debit).label("amount")
query = ( query = (
db.query(AccountBase, amount_sum) db.query(AccountBase, amount_sum)

View File

@ -229,3 +229,44 @@ class Daybook(BaseModel):
value, value,
"%d-%b-%Y" "%d-%b-%Y"
).date() ).date()
class NetTransactionsItem(BaseModel):
type_: str
name: str
debit: Optional[Decimal] = Field(multiple_of=0.01)
credit: Optional[Decimal] = Field(multiple_of=0.01)
class Config:
anystr_strip_whitespace = True
alias_generator = to_camel
json_encoders = {
date: lambda v: v.strftime("%d-%b-%Y")
}
class NetTransactions(BaseModel):
start_date: date
finish_date: date
body: List[NetTransactionsItem]
class Config:
anystr_strip_whitespace = True
alias_generator = to_camel
json_encoders = {
date: lambda v: v.strftime("%d-%b-%Y")
}
@validator("start_date", pre=True)
def parse_start_date(cls, value):
return datetime.strptime(
value,
"%d-%b-%Y"
).date()
@validator("finish_date", pre=True)
def parse_finish_date(cls, value):
return datetime.strptime(
value,
"%d-%b-%Y"
).date()