Closing Stock Done!!
This commit is contained in:
parent
a4b9fb7408
commit
01cf6c2da1
brewman
@ -81,12 +81,7 @@ class Voucher(Base):
|
||||
)
|
||||
|
||||
journals = relationship("Journal", back_populates="voucher", cascade="delete, delete-orphan", cascade_backrefs=False,)
|
||||
inventories = relationship(
|
||||
"Inventory",
|
||||
backref="voucher",
|
||||
cascade="delete, delete-orphan",
|
||||
cascade_backrefs=False,
|
||||
)
|
||||
inventories = relationship("Inventory",back_populates="voucher",cascade="delete, delete-orphan",cascade_backrefs=False,)
|
||||
salary_deductions = relationship(
|
||||
"SalaryDeduction",
|
||||
backref="voucher",
|
||||
@ -284,9 +279,11 @@ class Inventory(Base):
|
||||
tax = Column("tax", Numeric)
|
||||
discount = Column("discount", Numeric)
|
||||
|
||||
voucher = relationship("Voucher", back_populates="inventories")
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
id=None,
|
||||
id_=None,
|
||||
voucher_id=None,
|
||||
product_id=None,
|
||||
batch_id=None,
|
||||
@ -296,7 +293,7 @@ class Inventory(Base):
|
||||
discount=None,
|
||||
batch=None,
|
||||
):
|
||||
self.id = id
|
||||
self.id = id_
|
||||
self.voucher_id = voucher_id
|
||||
self.product_id = product_id
|
||||
self.batch_id = batch_id
|
||||
|
@ -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 Product, CostCentre
|
||||
from brewman.models.voucher import Voucher, Journal, Inventory
|
||||
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("") # "Closing Stock"
|
||||
@router.get("", response_model=schemas.ClosingStock)
|
||||
def report_blank(
|
||||
request: Request,
|
||||
user: UserToken = Security(get_user, scopes=["closing-stock"]),
|
||||
@ -35,19 +36,18 @@ def report_blank(
|
||||
return {"date": get_finish_date(request.session), "body": []}
|
||||
|
||||
|
||||
@router.get("/{date}")
|
||||
@router.get("/{date_}", response_model=schemas.ClosingStock)
|
||||
def report_data(
|
||||
date: str,
|
||||
date_: str,
|
||||
request: Request,
|
||||
db: Session = Depends(get_db),
|
||||
user: UserToken = Security(get_user, scopes=["closing-stock"]),
|
||||
):
|
||||
set_period(get_start_date(request.session), date, request.session)
|
||||
return {"date": date, "body": build_report(date, db)}
|
||||
set_period(get_start_date(request.session), date_, request.session)
|
||||
return {"date": date_, "body": build_report(datetime.strptime(date_, "%d-%b-%Y").date(), db)}
|
||||
|
||||
|
||||
def build_report(date, db):
|
||||
date = datetime.datetime.strptime(date, "%d-%b-%Y")
|
||||
def build_report(date_: date, db: Session):
|
||||
amount_sum = func.sum(
|
||||
Journal.debit * Inventory.quantity * Inventory.rate * (1 + Inventory.tax)
|
||||
).label("amount")
|
||||
@ -57,7 +57,7 @@ def build_report(date, db):
|
||||
.join(Product.inventories)
|
||||
.join(Inventory.voucher)
|
||||
.join(Voucher.journals)
|
||||
.filter(Voucher.date <= date)
|
||||
.filter(Voucher.date <= date_)
|
||||
.filter(Journal.cost_centre_id == CostCentre.cost_centre_purchase())
|
||||
.group_by(Product)
|
||||
.order_by(amount_sum.desc())
|
||||
@ -78,7 +78,7 @@ def build_report(date, db):
|
||||
return body
|
||||
|
||||
|
||||
def get_opening_stock(start_date, db):
|
||||
def get_opening_stock(date_: date, db: Session):
|
||||
opening_stock = (
|
||||
db.query(
|
||||
func.sum(
|
||||
@ -91,14 +91,14 @@ def get_opening_stock(start_date, db):
|
||||
.join(Journal.voucher)
|
||||
.join(Journal.account)
|
||||
.join(Voucher.inventories)
|
||||
.filter(Voucher.date < start_date)
|
||||
.filter(Voucher.date < date_)
|
||||
.filter(Journal.cost_centre_id == CostCentre.cost_centre_purchase())
|
||||
.scalar()
|
||||
)
|
||||
return 0 if opening_stock is None else opening_stock
|
||||
|
||||
|
||||
def get_closing_stock(finish_date, db):
|
||||
def get_closing_stock(date_, db: Session):
|
||||
closing_stock = (
|
||||
db.query(
|
||||
func.sum(
|
||||
@ -111,7 +111,7 @@ def get_closing_stock(finish_date, db):
|
||||
.join(Journal.voucher)
|
||||
.join(Journal.account)
|
||||
.join(Voucher.inventories)
|
||||
.filter(Voucher.date <= finish_date)
|
||||
.filter(Voucher.date <= date_)
|
||||
.filter(Journal.cost_centre_id == CostCentre.cost_centre_purchase())
|
||||
.scalar()
|
||||
)
|
||||
|
@ -147,3 +147,33 @@ class CashFlow(BaseModel):
|
||||
).date()
|
||||
|
||||
|
||||
class ClosingStockItem(BaseModel):
|
||||
product: str
|
||||
group: str
|
||||
quantity: Decimal
|
||||
amount: Decimal
|
||||
|
||||
class Config:
|
||||
anystr_strip_whitespace = True
|
||||
alias_generator = to_camel
|
||||
|
||||
|
||||
class ClosingStock(BaseModel):
|
||||
date_: date
|
||||
body: List[ClosingStockItem]
|
||||
|
||||
class Config:
|
||||
anystr_strip_whitespace = True
|
||||
alias_generator = to_camel
|
||||
json_encoders = {
|
||||
date: lambda v: v.strftime("%d-%b-%Y")
|
||||
}
|
||||
|
||||
@validator("date_", pre=True)
|
||||
def parse_date(cls, value):
|
||||
return datetime.strptime(
|
||||
value,
|
||||
"%d-%b-%Y"
|
||||
).date()
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user