From 6ec4068ed0907ea19b93ab444c0310137930c669 Mon Sep 17 00:00:00 2001 From: tanshu Date: Thu, 14 May 2020 12:34:27 +0530 Subject: [PATCH] Net Transactions!! --- brewman/routers/reports/net_transactions.py | 16 +++----- brewman/schemas/reports.py | 41 +++++++++++++++++++++ 2 files changed, 47 insertions(+), 10 deletions(-) diff --git a/brewman/routers/reports/net_transactions.py b/brewman/routers/reports/net_transactions.py index c2d56930..0fb9366d 100644 --- a/brewman/routers/reports/net_transactions.py +++ b/brewman/routers/reports/net_transactions.py @@ -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) diff --git a/brewman/schemas/reports.py b/brewman/schemas/reports.py index 9fb02e8e..80e40bbe 100644 --- a/brewman/schemas/reports.py +++ b/brewman/schemas/reports.py @@ -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()