Fix: Reports should now take the Timezone Offset into consideration
This commit is contained in:
parent
77dad64eab
commit
da9d58025c
|
@ -6,11 +6,19 @@ from fastapi import HTTPException, status
|
||||||
|
|
||||||
|
|
||||||
def report_start_date(s: str = None) -> date:
|
def report_start_date(s: str = None) -> date:
|
||||||
return date.today() if s is None else datetime.strptime(s, "%d-%b-%Y").date()
|
return (
|
||||||
|
(datetime.utcnow() + timedelta(minutes=settings.TIMEZONE_OFFSET_MINUTES)).date()
|
||||||
|
if s is None
|
||||||
|
else datetime.strptime(s, "%d-%b-%Y").date()
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def report_finish_date(f: str = None) -> date:
|
def report_finish_date(f: str = None) -> date:
|
||||||
return date.today() if f is None else datetime.strptime(f, "%d-%b-%Y").date()
|
return (
|
||||||
|
(datetime.utcnow() + timedelta(minutes=settings.TIMEZONE_OFFSET_MINUTES)).date()
|
||||||
|
if f is None
|
||||||
|
else datetime.strptime(f, "%d-%b-%Y").date()
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def check_audit_permission(start_date: date, user_permissions: List[str]):
|
def check_audit_permission(start_date: date, user_permissions: List[str]):
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from datetime import date, timedelta
|
from datetime import date, datetime, time, timedelta
|
||||||
from operator import or_
|
from operator import or_
|
||||||
|
|
||||||
from fastapi import APIRouter, Depends, Security
|
from fastapi import APIRouter, Depends, Security
|
||||||
|
@ -26,6 +26,12 @@ def beer_consumption(
|
||||||
user: UserToken = Security(get_user, scopes=["beer-sale-report"]),
|
user: UserToken = Security(get_user, scopes=["beer-sale-report"]),
|
||||||
):
|
):
|
||||||
check_audit_permission(start_date, user.permissions)
|
check_audit_permission(start_date, user.permissions)
|
||||||
|
s = datetime.combine(start_date, time()) + timedelta(
|
||||||
|
minutes=settings.NEW_DAY_OFFSET_MINUTES - settings.TIMEZONE_OFFSET_MINUTES
|
||||||
|
)
|
||||||
|
f = datetime.combine(finish_date, time()) + timedelta(
|
||||||
|
days=1, minutes=settings.NEW_DAY_OFFSET_MINUTES - settings.TIMEZONE_OFFSET_MINUTES
|
||||||
|
)
|
||||||
day = func.date_trunc("day", Voucher.date - timedelta(minutes=settings.NEW_DAY_OFFSET_MINUTES)).label("day")
|
day = func.date_trunc("day", Voucher.date - timedelta(minutes=settings.NEW_DAY_OFFSET_MINUTES)).label("day")
|
||||||
sum_ = func.sum(Inventory.quantity * ProductVersion.quantity).label("sum")
|
sum_ = func.sum(Inventory.quantity * ProductVersion.quantity).label("sum")
|
||||||
with SessionFuture() as db:
|
with SessionFuture() as db:
|
||||||
|
@ -35,8 +41,8 @@ def beer_consumption(
|
||||||
.join(Kot.inventories)
|
.join(Kot.inventories)
|
||||||
.join(Inventory.product)
|
.join(Inventory.product)
|
||||||
.where(
|
.where(
|
||||||
day >= start_date,
|
day >= s,
|
||||||
day <= finish_date,
|
day <= f,
|
||||||
or_(
|
or_(
|
||||||
ProductVersion.valid_from == None, # noqa: E711
|
ProductVersion.valid_from == None, # noqa: E711
|
||||||
ProductVersion.valid_from <= day,
|
ProductVersion.valid_from <= day,
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from datetime import date, timedelta
|
from datetime import date, datetime, time, timedelta
|
||||||
from typing import List
|
from typing import List
|
||||||
|
|
||||||
from fastapi import APIRouter, Depends, Security
|
from fastapi import APIRouter, Depends, Security
|
||||||
|
@ -37,8 +37,12 @@ def bill_details(
|
||||||
|
|
||||||
|
|
||||||
def settlements(s: date, f: date, db: Session) -> List[BillSettlementItem]:
|
def settlements(s: date, f: date, db: Session) -> List[BillSettlementItem]:
|
||||||
start_date = s + timedelta(minutes=settings.NEW_DAY_OFFSET_MINUTES)
|
start_date = datetime.combine(s, time()) + timedelta(
|
||||||
finish_date = f + timedelta(days=1, minutes=settings.NEW_DAY_OFFSET_MINUTES)
|
minutes=settings.NEW_DAY_OFFSET_MINUTES - settings.TIMEZONE_OFFSET_MINUTES
|
||||||
|
)
|
||||||
|
finish_date = datetime.combine(f, time()) + timedelta(
|
||||||
|
days=1, minutes=settings.NEW_DAY_OFFSET_MINUTES - settings.TIMEZONE_OFFSET_MINUTES
|
||||||
|
)
|
||||||
vouchers = (
|
vouchers = (
|
||||||
db.execute(
|
db.execute(
|
||||||
select(Voucher)
|
select(Voucher)
|
||||||
|
@ -76,8 +80,12 @@ def settlements(s: date, f: date, db: Session) -> List[BillSettlementItem]:
|
||||||
|
|
||||||
|
|
||||||
def reprints(s: date, f: date, db: Session) -> List[BillSettlementItem]:
|
def reprints(s: date, f: date, db: Session) -> List[BillSettlementItem]:
|
||||||
start_date = s + timedelta(minutes=settings.NEW_DAY_OFFSET_MINUTES)
|
start_date = datetime.combine(s, time()) + timedelta(
|
||||||
finish_date = f + timedelta(days=1, minutes=settings.NEW_DAY_OFFSET_MINUTES)
|
minutes=settings.NEW_DAY_OFFSET_MINUTES - settings.TIMEZONE_OFFSET_MINUTES
|
||||||
|
)
|
||||||
|
finish_date = datetime.combine(f, time()) + timedelta(
|
||||||
|
days=1, minutes=settings.NEW_DAY_OFFSET_MINUTES - settings.TIMEZONE_OFFSET_MINUTES
|
||||||
|
)
|
||||||
return [
|
return [
|
||||||
BillSettlementItem(
|
BillSettlementItem(
|
||||||
date=item.date,
|
date=item.date,
|
||||||
|
|
|
@ -41,8 +41,12 @@ def discount_report(
|
||||||
|
|
||||||
|
|
||||||
def get_discount_report(s: date, f: date, db: Session) -> List[DiscountReportItem]:
|
def get_discount_report(s: date, f: date, db: Session) -> List[DiscountReportItem]:
|
||||||
start_date = datetime.combine(s, time()) + timedelta(minutes=settings.NEW_DAY_OFFSET_MINUTES)
|
start_date = datetime.combine(s, time()) + timedelta(
|
||||||
finish_date = datetime.combine(f, time()) + timedelta(days=1, minutes=settings.NEW_DAY_OFFSET_MINUTES)
|
minutes=settings.NEW_DAY_OFFSET_MINUTES - settings.TIMEZONE_OFFSET_MINUTES
|
||||||
|
)
|
||||||
|
finish_date = datetime.combine(f, time()) + timedelta(
|
||||||
|
days=1, minutes=settings.NEW_DAY_OFFSET_MINUTES - settings.TIMEZONE_OFFSET_MINUTES
|
||||||
|
)
|
||||||
|
|
||||||
day = func.date_trunc("day", Voucher.date - timedelta(minutes=settings.NEW_DAY_OFFSET_MINUTES)).label("day")
|
day = func.date_trunc("day", Voucher.date - timedelta(minutes=settings.NEW_DAY_OFFSET_MINUTES)).label("day")
|
||||||
amount = func.sum(Inventory.quantity * Inventory.effective_price * Inventory.discount).label("Amount")
|
amount = func.sum(Inventory.quantity * Inventory.effective_price * Inventory.discount).label("Amount")
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from datetime import date, timedelta
|
from datetime import date, datetime, time, timedelta
|
||||||
|
|
||||||
from fastapi import APIRouter, Depends, Security
|
from fastapi import APIRouter, Depends, Security
|
||||||
from sqlalchemy import func, or_, select
|
from sqlalchemy import func, or_, select
|
||||||
|
@ -38,8 +38,12 @@ def product_sale_report_view(
|
||||||
|
|
||||||
|
|
||||||
def product_sale_report(s: date, f: date, db: Session):
|
def product_sale_report(s: date, f: date, db: Session):
|
||||||
start_date = s + timedelta(minutes=settings.NEW_DAY_OFFSET_MINUTES)
|
start_date = datetime.combine(s, time()) + timedelta(
|
||||||
finish_date = f + timedelta(days=1, minutes=settings.NEW_DAY_OFFSET_MINUTES)
|
minutes=settings.NEW_DAY_OFFSET_MINUTES - settings.TIMEZONE_OFFSET_MINUTES
|
||||||
|
)
|
||||||
|
finish_date = datetime.combine(f, time()) + timedelta(
|
||||||
|
days=1, minutes=settings.NEW_DAY_OFFSET_MINUTES - settings.TIMEZONE_OFFSET_MINUTES
|
||||||
|
)
|
||||||
|
|
||||||
day = func.date_trunc("day", Voucher.date - timedelta(minutes=settings.NEW_DAY_OFFSET_MINUTES)).label("day")
|
day = func.date_trunc("day", Voucher.date - timedelta(minutes=settings.NEW_DAY_OFFSET_MINUTES)).label("day")
|
||||||
list_ = db.execute(
|
list_ = db.execute(
|
||||||
|
|
|
@ -30,7 +30,7 @@ router = APIRouter()
|
||||||
|
|
||||||
|
|
||||||
@router.get("", response_model=SaleReport)
|
@router.get("", response_model=SaleReport)
|
||||||
def get_sale_analysis(
|
def get_sale_report(
|
||||||
start_date: date = Depends(report_start_date),
|
start_date: date = Depends(report_start_date),
|
||||||
finish_date: date = Depends(report_finish_date),
|
finish_date: date = Depends(report_finish_date),
|
||||||
user: UserToken = Security(get_user, scopes=["sale-report"]),
|
user: UserToken = Security(get_user, scopes=["sale-report"]),
|
||||||
|
@ -52,8 +52,12 @@ def get_sale_analysis(
|
||||||
|
|
||||||
|
|
||||||
def get_sale(s: date, f: date, db: Session) -> List[SaleReportItem]:
|
def get_sale(s: date, f: date, db: Session) -> List[SaleReportItem]:
|
||||||
start_date = datetime.combine(s, time()) + timedelta(minutes=settings.NEW_DAY_OFFSET_MINUTES)
|
start_date = datetime.combine(s, time()) + timedelta(
|
||||||
finish_date = datetime.combine(f, time()) + timedelta(days=1, minutes=settings.NEW_DAY_OFFSET_MINUTES)
|
minutes=settings.NEW_DAY_OFFSET_MINUTES - settings.TIMEZONE_OFFSET_MINUTES
|
||||||
|
)
|
||||||
|
finish_date = datetime.combine(f, time()) + timedelta(
|
||||||
|
days=1, minutes=settings.NEW_DAY_OFFSET_MINUTES - settings.TIMEZONE_OFFSET_MINUTES
|
||||||
|
)
|
||||||
|
|
||||||
day = func.date_trunc("day", Voucher.date - timedelta(minutes=settings.NEW_DAY_OFFSET_MINUTES)).label("day")
|
day = func.date_trunc("day", Voucher.date - timedelta(minutes=settings.NEW_DAY_OFFSET_MINUTES)).label("day")
|
||||||
list_ = db.execute(
|
list_ = db.execute(
|
||||||
|
@ -87,8 +91,12 @@ def get_sale(s: date, f: date, db: Session) -> List[SaleReportItem]:
|
||||||
|
|
||||||
|
|
||||||
def get_settlements(s: date, f: date, db: Session) -> List[SaleReportItem]:
|
def get_settlements(s: date, f: date, db: Session) -> List[SaleReportItem]:
|
||||||
start_date = datetime.combine(s, time()) + timedelta(minutes=settings.NEW_DAY_OFFSET_MINUTES)
|
start_date = datetime.combine(s, time()) + timedelta(
|
||||||
finish_date = datetime.combine(f, time()) + timedelta(days=1, minutes=settings.NEW_DAY_OFFSET_MINUTES)
|
minutes=settings.NEW_DAY_OFFSET_MINUTES - settings.TIMEZONE_OFFSET_MINUTES
|
||||||
|
)
|
||||||
|
finish_date = datetime.combine(f, time()) + timedelta(
|
||||||
|
days=1, minutes=settings.NEW_DAY_OFFSET_MINUTES - settings.TIMEZONE_OFFSET_MINUTES
|
||||||
|
)
|
||||||
|
|
||||||
list_ = db.execute(
|
list_ = db.execute(
|
||||||
select(SettleOption.name, func.sum(Settlement.amount))
|
select(SettleOption.name, func.sum(Settlement.amount))
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from datetime import date, timedelta
|
from datetime import date, datetime, time, timedelta
|
||||||
from typing import List
|
from typing import List
|
||||||
|
|
||||||
from fastapi import APIRouter, Depends, Security
|
from fastapi import APIRouter, Depends, Security
|
||||||
|
@ -37,8 +37,12 @@ def get_tax_report(
|
||||||
|
|
||||||
|
|
||||||
def get_tax(s: date, f: date, db: Session) -> List[TaxReportItem]:
|
def get_tax(s: date, f: date, db: Session) -> List[TaxReportItem]:
|
||||||
start_date = s + timedelta(minutes=settings.NEW_DAY_OFFSET_MINUTES)
|
start_date = datetime.combine(s, time()) + timedelta(
|
||||||
finish_date = f + timedelta(days=1, minutes=settings.NEW_DAY_OFFSET_MINUTES)
|
minutes=settings.NEW_DAY_OFFSET_MINUTES - settings.TIMEZONE_OFFSET_MINUTES
|
||||||
|
)
|
||||||
|
finish_date = datetime.combine(f, time()) + timedelta(
|
||||||
|
days=1, minutes=settings.NEW_DAY_OFFSET_MINUTES - settings.TIMEZONE_OFFSET_MINUTES
|
||||||
|
)
|
||||||
|
|
||||||
amounts = db.execute(
|
amounts = db.execute(
|
||||||
select(
|
select(
|
||||||
|
|
Loading…
Reference in New Issue