Product updates report.

This commit is contained in:
2020-11-11 12:18:10 +05:30
parent 6f9394dc8d
commit d5b2da4388
19 changed files with 500 additions and 0 deletions

View File

@ -29,6 +29,7 @@ from .routers.reports import (
cashier_report,
discount_report,
product_sale_report,
product_updates_report,
sale_report,
tax_report,
)
@ -65,6 +66,7 @@ app.include_router(product.router, prefix="/api/products", tags=["products"])
app.include_router(device.router, prefix="/api/devices", tags=["devices"])
app.include_router(sale_category.router, prefix="/api/sale-categories", tags=["products"])
app.include_router(header_footer.router, prefix="/api/header-footer", tags=["products"])
app.include_router(product_updates_report.router, prefix="/api/product-updates-report", tags=["products"])
app.include_router(section.router, prefix="/api/sections", tags=["sections"])
app.include_router(section_printer.router, prefix="/api/section-printers", tags=["section-printers"])

View File

@ -174,6 +174,7 @@ def update(
quantity=data.quantity,
valid_from=date_,
valid_till=None,
sort_order=item.sort_order,
)
db.add(product_version)
db.commit()

View File

@ -0,0 +1,83 @@
from datetime import date, timedelta
from typing import List
from fastapi import APIRouter, Depends, Security
from sqlalchemy import and_, or_
from sqlalchemy.orm import Session, contains_eager, joinedload
from ...core.security import get_current_active_user as get_user
from ...db.session import SessionLocal
from ...models import MenuCategory, ProductVersion
from ...schemas.auth import UserToken
from . import report_finish_date, report_start_date
router = APIRouter()
# Dependency
def get_db() -> Session:
try:
db = SessionLocal()
yield db
finally:
db.close()
@router.get("")
def product_updates_report_view(
start_date: date = Depends(report_start_date),
finish_date: date = Depends(report_finish_date),
db: Session = Depends(get_db),
user: UserToken = Security(get_user, scopes=["product-sale-report"]),
):
return {
"startDate": start_date.strftime("%d-%b-%Y"),
"finishDate": finish_date.strftime("%d-%b-%Y"),
"report": product_updates_report(start_date, finish_date, db),
}
def product_updates_report(s: date, f: date, db: Session) -> List[str]:
list_: List[ProductVersion] = (
db.query(ProductVersion)
.join(ProductVersion.menu_category)
.filter(
or_(
and_(
ProductVersion.valid_from >= s,
ProductVersion.valid_from <= f,
),
and_(
ProductVersion.valid_till >= s - timedelta(days=1),
ProductVersion.valid_till <= f,
),
)
)
.order_by(
MenuCategory.sort_order,
MenuCategory.name,
ProductVersion.sort_order,
ProductVersion.name,
ProductVersion.valid_from.nullsfirst(),
)
.options(
joinedload(ProductVersion.menu_category, innerjoin=True),
contains_eager(ProductVersion.menu_category),
)
.all()
)
report = {}
for item in list_:
if item.product_id not in report:
report[item.product_id] = ""
report[item.product_id] += (
"From: "
+ (f"{item.valid_from:%d-%b-%Y}" if item.valid_from is not None else "\u221e")
+ " "
+ "Till: "
+ (f"{item.valid_till:%d-%b-%Y}" if item.valid_till is not None else "\u221e")
+ "\n"
+ f"{item.full_name} @ {item.price: .2f} - {'Happy Hour' if item.has_happy_hour else 'No Happy Hour'}\n"
)
return list(report.values())