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 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 brewman.models.master import AccountBase
from brewman.models.voucher import Voucher, Journal, VoucherType
import brewman.schemas.reports as schemas
from ...core.session import (
set_period,
get_start_date,
@ -27,7 +28,7 @@ def get_db() -> Session:
db.close()
@router.get("")
@router.get("", response_model=schemas.NetTransactions)
def show_blank(
request: Request,
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(
start: str,
finish: str,
@ -51,16 +52,11 @@ def show_data(
return {
"startDate": start,
"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):
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")
def build_report(start_date: date, finish_date: date, db: Session):
amount_sum = func.sum(Journal.amount * Journal.debit).label("amount")
query = (
db.query(AccountBase, amount_sum)

View File

@ -229,3 +229,44 @@ class Daybook(BaseModel):
value,
"%d-%b-%Y"
).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()