Purchases done!!

This commit is contained in:
tanshu
2020-05-14 14:59:16 +05:30
parent da58528768
commit 2462818abf
4 changed files with 76 additions and 30 deletions

View File

@ -10,6 +10,7 @@ from ...db.session import SessionLocal
from brewman.models.master import CostCentre, Product
from brewman.models.voucher import Voucher, Journal, Inventory, VoucherType
import brewman.schemas.reports as schemas
from ...core.session import (
set_period,
get_start_date,
@ -28,20 +29,19 @@ def get_db() -> Session:
db.close()
@router.get("/api/purchases")
@router.get("", response_model=schemas.Purchases)
def report_blank(
request: Request,
user: UserToken = Security(get_user, scopes=["purchases"]),
request: Request, user: UserToken = Security(get_user, scopes=["purchases"]),
):
return {
"startDate": get_start_date(request.session),
"finishDate": get_finish_date(request.session),
"body": [],
"footer": {},
}
return schemas.Purchases(
startDate=get_start_date(request.session),
finishDate=get_finish_date(request.session),
body=[],
footer=None,
)
@router.get("/{start}/{finish}")
@router.get("/{start}/{finish}", response_model=schemas.Purchases)
def report_data(
start: str,
finish: str,
@ -51,12 +51,9 @@ def report_data(
):
body, footer = build_report(start, finish, db)
set_period(start, finish, request.session)
return {
"startDate": start,
"finishDate": finish,
"body": body,
"footer": footer,
}
return schemas.Purchases(
startDate=start, finishDate=finish, body=body, footer=footer,
)
def build_report(start_date, finish_date, db):
@ -83,12 +80,17 @@ def build_report(start_date, finish_date, db):
for product, quantity, amount in query:
rate = amount / quantity if quantity != 0 else 0
total_amount += amount
row = {
"name": product.full_name,
"quantity": quantity,
"rate": rate,
"amount": amount,
"url": "", # request.route_url("product_ledger_id", id=product.id, _query={"startDate": start_date, "finishDate": finish_date},),
}
row = schemas.PurchasesItem(
name=product.full_name,
quantity=quantity,
rate=rate,
amount=amount,
url=["/", "product-ledger", str(product.id)],
)
body.append(row)
return body, {"name": "Total", "amount": total_amount}
return (
body,
schemas.PurchasesItem(
name="Total", quantity=0, rate=0, url=[], amount=total_amount
),
)

View File

@ -421,3 +421,47 @@ class PurchaseEntries(BaseModel):
value,
"%d-%b-%Y"
).date()
class PurchasesItem(BaseModel):
name: str
quantity: Decimal
rate: Decimal
amount: Decimal
url: List[str]
class Config:
anystr_strip_whitespace = True
alias_generator = to_camel
class Purchases(BaseModel):
start_date: date
finish_date: date
body: List[PurchasesItem]
footer: Optional[PurchasesItem]
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):
if isinstance(value, date):
return value
return datetime.strptime(
value,
"%d-%b-%Y"
).date()
@validator("finish_date", pre=True)
def parse_finish_date(cls, value):
if isinstance(value, date):
return value
return datetime.strptime(
value,
"%d-%b-%Y"
).date()