Schemas everywhere mypy and ruff fully compliant
Type hints everywhere
This commit is contained in:
1 parent
dc34a78e06
commit
e7e49019c4
45 files changed
+298
-166
No files matched your search
@@ -28,7 +28,7 @@ class ModifierCategory:
|
|||||||
sort_order: Mapped[int] = mapped_column(Integer, nullable=False)
|
sort_order: Mapped[int] = mapped_column(Integer, nullable=False)
|
||||||
|
|
||||||
products: Mapped[list[Product]] = relationship(
|
products: Mapped[list[Product]] = relationship(
|
||||||
secondary=ModifierCategoryProduct.__table__,
|
secondary=ModifierCategoryProduct.__table__, # type: ignore[attr-defined]
|
||||||
back_populates="modifier_categories",
|
back_populates="modifier_categories",
|
||||||
)
|
)
|
||||||
modifiers: Mapped[list[Modifier]] = relationship(back_populates="modifier_category")
|
modifiers: Mapped[list[Modifier]] = relationship(back_populates="modifier_category")
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ class Permission:
|
|||||||
name: Mapped[str] = mapped_column(Text, unique=True, nullable=False)
|
name: Mapped[str] = mapped_column(Text, unique=True, nullable=False)
|
||||||
|
|
||||||
roles: Mapped[list[Role]] = relationship(
|
roles: Mapped[list[Role]] = relationship(
|
||||||
secondary=RolePermission.__table__,
|
secondary=RolePermission.__table__, # type: ignore[attr-defined]
|
||||||
back_populates="permissions",
|
back_populates="permissions",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ class Product:
|
|||||||
skus: Mapped[list[StockKeepingUnit]] = relationship("StockKeepingUnit", back_populates="product")
|
skus: Mapped[list[StockKeepingUnit]] = relationship("StockKeepingUnit", back_populates="product")
|
||||||
modifier_categories: Mapped[list[ModifierCategory]] = relationship(
|
modifier_categories: Mapped[list[ModifierCategory]] = relationship(
|
||||||
"ModifierCategory",
|
"ModifierCategory",
|
||||||
secondary=ModifierCategoryProduct.__table__,
|
secondary=ModifierCategoryProduct.__table__, # type: ignore[attr-defined]
|
||||||
order_by="ModifierCategory.sort_order",
|
order_by="ModifierCategory.sort_order",
|
||||||
back_populates="products",
|
back_populates="products",
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ class Role:
|
|||||||
|
|
||||||
permissions: Mapped[list[Permission]] = relationship(
|
permissions: Mapped[list[Permission]] = relationship(
|
||||||
"Permission",
|
"Permission",
|
||||||
secondary=RolePermission.__table__,
|
secondary=RolePermission.__table__, # type: ignore[attr-defined]
|
||||||
back_populates="roles",
|
back_populates="roles",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ class User:
|
|||||||
|
|
||||||
roles: Mapped[list[Role]] = relationship(
|
roles: Mapped[list[Role]] = relationship(
|
||||||
"Role",
|
"Role",
|
||||||
secondary=UserRole.__table__,
|
secondary=UserRole.__table__, # type: ignore[attr-defined]
|
||||||
order_by="Role.name",
|
order_by="Role.name",
|
||||||
)
|
)
|
||||||
login_history: Mapped[list[LoginHistory]] = relationship(order_by=desc(LoginHistory.date), back_populates="user")
|
login_history: Mapped[list[LoginHistory]] = relationship(order_by=desc(LoginHistory.date), back_populates="user")
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
from datetime import UTC, date, datetime, timedelta
|
from datetime import UTC, date, datetime, timedelta
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
from sqlalchemy import Label, and_, or_
|
from sqlalchemy import ColumnElement, Label, and_, or_
|
||||||
|
|
||||||
from ..core.config import settings
|
from ..core.config import settings
|
||||||
from ..models.bundle_item import BundleItem
|
from ..models.bundle_item import BundleItem
|
||||||
@@ -42,28 +42,28 @@ def dates_overlap(start1: date | None, end1: date | None, start2: date | None, e
|
|||||||
return start1 <= end2 and start2 <= end1
|
return start1 <= end2 and start2 <= end1
|
||||||
|
|
||||||
|
|
||||||
def _pv_active(date_: date | Label[Any]):
|
def _pv_active(date_: date | Label[Any]) -> ColumnElement[bool]:
|
||||||
return and_(
|
return and_(
|
||||||
or_(ProductVersion.valid_from == None, ProductVersion.valid_from <= date_), # noqa: E711
|
or_(ProductVersion.valid_from == None, ProductVersion.valid_from <= date_), # noqa: E711
|
||||||
or_(ProductVersion.valid_till == None, ProductVersion.valid_till >= date_), # noqa: E711
|
or_(ProductVersion.valid_till == None, ProductVersion.valid_till >= date_), # noqa: E711
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def _sv_active(date_: date | Label[Any]):
|
def _sv_active(date_: date | Label[Any]) -> ColumnElement[bool]:
|
||||||
return and_(
|
return and_(
|
||||||
or_(SkuVersion.valid_from == None, SkuVersion.valid_from <= date_), # noqa: E711
|
or_(SkuVersion.valid_from == None, SkuVersion.valid_from <= date_), # noqa: E711
|
||||||
or_(SkuVersion.valid_till == None, SkuVersion.valid_till >= date_), # noqa: E711
|
or_(SkuVersion.valid_till == None, SkuVersion.valid_till >= date_), # noqa: E711
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def _bundle_active(date_: date):
|
def _bundle_active(date_: date) -> ColumnElement[bool]:
|
||||||
return and_(
|
return and_(
|
||||||
or_(BundleItem.valid_from == None, BundleItem.valid_from <= date_), # noqa: E711
|
or_(BundleItem.valid_from == None, BundleItem.valid_from <= date_), # noqa: E711
|
||||||
or_(BundleItem.valid_till == None, BundleItem.valid_till >= date_), # noqa: E711
|
or_(BundleItem.valid_till == None, BundleItem.valid_till >= date_), # noqa: E711
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def _pv_onclause(date_: date | Label[Any]):
|
def _pv_onclause(date_: date | Label[Any]) -> ColumnElement[bool]:
|
||||||
return and_(
|
return and_(
|
||||||
ProductVersion.product_id == Product.id,
|
ProductVersion.product_id == Product.id,
|
||||||
or_(
|
or_(
|
||||||
@@ -77,7 +77,7 @@ def _pv_onclause(date_: date | Label[Any]):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def _sv_onclause(date_: date | Label[Any]):
|
def _sv_onclause(date_: date | Label[Any]) -> ColumnElement[bool]:
|
||||||
return and_(
|
return and_(
|
||||||
SkuVersion.sku_id == StockKeepingUnit.id,
|
SkuVersion.sku_id == StockKeepingUnit.id,
|
||||||
or_(SkuVersion.valid_from == None, SkuVersion.valid_from <= date_), # noqa: E711
|
or_(SkuVersion.valid_from == None, SkuVersion.valid_from <= date_), # noqa: E711
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ from ..db.session import SessionFuture
|
|||||||
from ..models.device import Device
|
from ..models.device import Device
|
||||||
from ..models.login_history import LoginHistory
|
from ..models.login_history import LoginHistory
|
||||||
from ..schemas import device as schemas
|
from ..schemas import device as schemas
|
||||||
|
from ..schemas.section import SectionLink
|
||||||
from ..schemas.user_token import UserToken
|
from ..schemas.user_token import UserToken
|
||||||
|
|
||||||
|
|
||||||
@@ -74,7 +75,7 @@ def device_info(item: Device) -> schemas.Device:
|
|||||||
id_=item.id,
|
id_=item.id,
|
||||||
name=item.name,
|
name=item.name,
|
||||||
enabled=item.enabled,
|
enabled=item.enabled,
|
||||||
section=schemas.SectionLink(id_=item.section_id, name=item.section.name),
|
section=SectionLink(id_=item.section_id, name=item.section.name),
|
||||||
creation_date=item.creation_date,
|
creation_date=item.creation_date,
|
||||||
last_user=item.login_history[0].user.name if len(item.login_history) else "Never",
|
last_user=item.login_history[0].user.name if len(item.login_history) else "Never",
|
||||||
last_date=item.login_history[0].date if len(item.login_history) else None,
|
last_date=item.login_history[0].date if len(item.login_history) else None,
|
||||||
|
|||||||
@@ -5,29 +5,29 @@ from sqlalchemy.exc import SQLAlchemyError
|
|||||||
from ..core.security import get_current_active_user as get_user
|
from ..core.security import get_current_active_user as get_user
|
||||||
from ..db.session import SessionFuture
|
from ..db.session import SessionFuture
|
||||||
from ..models.db_setting import DbSetting
|
from ..models.db_setting import DbSetting
|
||||||
from ..schemas import header_footer as schemas
|
from ..schemas.header_footer import HeaderFooter
|
||||||
from ..schemas.user_token import UserToken
|
from ..schemas.user_token import UserToken
|
||||||
|
|
||||||
|
|
||||||
router = APIRouter()
|
router = APIRouter()
|
||||||
|
|
||||||
|
|
||||||
@router.get("")
|
@router.get("", response_model=list[HeaderFooter])
|
||||||
def get(
|
def get(
|
||||||
user: UserToken = Security(get_user, scopes=["owner"]),
|
user: UserToken = Security(get_user, scopes=["owner"]),
|
||||||
):
|
) -> list[HeaderFooter]:
|
||||||
with SessionFuture() as db:
|
with SessionFuture() as db:
|
||||||
return [
|
return [
|
||||||
{"id": item.id, "name": item.name, "text": item.data["Text"]}
|
HeaderFooter(id_=item.id, name=item.name, text=item.data["Text"])
|
||||||
for item in db.execute(select(DbSetting).where(DbSetting.name.in_(["Header", "Footer"]))).scalars().all()
|
for item in db.execute(select(DbSetting).where(DbSetting.name.in_(["Header", "Footer"]))).scalars().all()
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
@router.post("")
|
@router.post("", response_model=list[HeaderFooter])
|
||||||
def save(
|
def save(
|
||||||
data: schemas.HeaderFooter,
|
data: HeaderFooter,
|
||||||
user: UserToken = Security(get_user, scopes=["owner"]),
|
user: UserToken = Security(get_user, scopes=["owner"]),
|
||||||
):
|
) -> list[HeaderFooter]:
|
||||||
try:
|
try:
|
||||||
with SessionFuture() as db:
|
with SessionFuture() as db:
|
||||||
item: DbSetting = db.execute(
|
item: DbSetting = db.execute(
|
||||||
@@ -36,7 +36,7 @@ def save(
|
|||||||
item.data = {"Text": data.text}
|
item.data = {"Text": data.text}
|
||||||
db.commit()
|
db.commit()
|
||||||
return [
|
return [
|
||||||
{"id": item.id, "name": item.name, "text": item.data["Text"]}
|
HeaderFooter(id_=item.id, name=item.name, text=item.data["Text"])
|
||||||
for item in db.execute(select(DbSetting).where(DbSetting.name.in_(["Header", "Footer"])))
|
for item in db.execute(select(DbSetting).where(DbSetting.name.in_(["Header", "Footer"])))
|
||||||
.scalars()
|
.scalars()
|
||||||
.all()
|
.all()
|
||||||
|
|||||||
@@ -2,16 +2,17 @@ from fastapi import APIRouter, HTTPException
|
|||||||
from sqlalchemy import text
|
from sqlalchemy import text
|
||||||
|
|
||||||
from ..db.session import SessionFuture
|
from ..db.session import SessionFuture
|
||||||
|
from ..schemas.health_response import HealthResponse
|
||||||
|
|
||||||
|
|
||||||
router = APIRouter()
|
router = APIRouter()
|
||||||
|
|
||||||
|
|
||||||
@router.get("")
|
@router.get("", response_model=HealthResponse)
|
||||||
def health_check():
|
def health_check() -> HealthResponse:
|
||||||
try:
|
try:
|
||||||
with SessionFuture() as db: # lightweight DB check
|
with SessionFuture() as db: # lightweight DB check
|
||||||
db.execute(text("SELECT 1"))
|
db.execute(text("SELECT 1"))
|
||||||
return {"status": "ok", "database": "connected"}
|
return HealthResponse(status="ok", database="connected")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
raise HTTPException(status_code=500, detail={"status": "error", "database": str(e)}) from e
|
raise HTTPException(status_code=500, detail={"status": "error", "database": str(e)}) from e
|
||||||
@@ -10,6 +10,7 @@ from ..core.security import get_current_active_user as get_user
|
|||||||
from ..db.session import SessionFuture
|
from ..db.session import SessionFuture
|
||||||
from ..models.modifier import Modifier
|
from ..models.modifier import Modifier
|
||||||
from ..schemas import modifier as schemas
|
from ..schemas import modifier as schemas
|
||||||
|
from ..schemas.modifier_category import ModifierCategoryLink
|
||||||
from ..schemas.user_token import UserToken
|
from ..schemas.user_token import UserToken
|
||||||
|
|
||||||
|
|
||||||
@@ -111,7 +112,7 @@ def modifier_info(item: Modifier) -> schemas.Modifier:
|
|||||||
show_in_bill=item.show_in_bill,
|
show_in_bill=item.show_in_bill,
|
||||||
price=item.price,
|
price=item.price,
|
||||||
is_active=item.is_active,
|
is_active=item.is_active,
|
||||||
modifier_category=schemas.ModifierCategoryLink(
|
modifier_category=ModifierCategoryLink(
|
||||||
id_=item.modifier_category.id,
|
id_=item.modifier_category.id,
|
||||||
name=item.modifier_category.name,
|
name=item.modifier_category.name,
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -18,7 +18,8 @@ from ..models.sku_version import SkuVersion
|
|||||||
from ..models.stock_keeping_unit import StockKeepingUnit
|
from ..models.stock_keeping_unit import StockKeepingUnit
|
||||||
from ..schemas import modifier_category as schemas
|
from ..schemas import modifier_category as schemas
|
||||||
from ..schemas.menu_category import MenuCategoryLink
|
from ..schemas.menu_category import MenuCategoryLink
|
||||||
from ..schemas.modifier_category_for_product import ModifierCategoryForProduct, ModifierLink
|
from ..schemas.modifier import ModifierLink
|
||||||
|
from ..schemas.modifier_category_for_product import ModifierCategoryForProduct
|
||||||
from ..schemas.product_link import ProductLink
|
from ..schemas.product_link import ProductLink
|
||||||
from ..schemas.product_link import ProductLink as ProductLinkSchema
|
from ..schemas.product_link import ProductLink as ProductLinkSchema
|
||||||
from ..schemas.user_token import UserToken
|
from ..schemas.user_token import UserToken
|
||||||
@@ -172,7 +173,7 @@ def show_list(
|
|||||||
is_active=item.is_active,
|
is_active=item.is_active,
|
||||||
sort_order=item.sort_order,
|
sort_order=item.sort_order,
|
||||||
menu_categories=[
|
menu_categories=[
|
||||||
schemas.MenuCategoryLink(
|
MenuCategoryLink(
|
||||||
id_=mc.id,
|
id_=mc.id,
|
||||||
name=mc.name,
|
name=mc.name,
|
||||||
enabled=reduce(lambda x, y: x and (y.sku.product_id in products), mc.skus, True),
|
enabled=reduce(lambda x, y: x and (y.sku.product_id in products), mc.skus, True),
|
||||||
@@ -283,7 +284,7 @@ def modifier_category_info(item: ModifierCategory, date_: date, db: Session) ->
|
|||||||
maximum=item.maximum,
|
maximum=item.maximum,
|
||||||
is_active=item.is_active,
|
is_active=item.is_active,
|
||||||
menu_categories=[
|
menu_categories=[
|
||||||
schemas.MenuCategoryLink(
|
MenuCategoryLink(
|
||||||
id_=mc.id,
|
id_=mc.id,
|
||||||
name=mc.name,
|
name=mc.name,
|
||||||
skus=[
|
skus=[
|
||||||
@@ -354,7 +355,7 @@ def modifier_category_blank(date_: date, db: Session) -> schemas.ModifierCategor
|
|||||||
maximum=0,
|
maximum=0,
|
||||||
is_active=True,
|
is_active=True,
|
||||||
menu_categories=[
|
menu_categories=[
|
||||||
schemas.MenuCategoryLink(
|
MenuCategoryLink(
|
||||||
id_=mc.id,
|
id_=mc.id,
|
||||||
name=mc.name,
|
name=mc.name,
|
||||||
skus=[
|
skus=[
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ from ..schemas import product as schemas
|
|||||||
from ..schemas.menu_category import MenuCategoryLink
|
from ..schemas.menu_category import MenuCategoryLink
|
||||||
from ..schemas.product_query import BundleItemQuery, ProductQuery
|
from ..schemas.product_query import BundleItemQuery, ProductQuery
|
||||||
from ..schemas.sale_category import SaleCategoryLink
|
from ..schemas.sale_category import SaleCategoryLink
|
||||||
|
from ..schemas.stock_keeping_unit import StockKeepingUnit as StockKeepingUnitSchema
|
||||||
from ..schemas.tax import TaxLink
|
from ..schemas.tax import TaxLink
|
||||||
from ..schemas.user_token import UserToken
|
from ..schemas.user_token import UserToken
|
||||||
from . import _pv_onclause, _sv_onclause, effective_date
|
from . import _pv_onclause, _sv_onclause, effective_date
|
||||||
@@ -610,12 +611,12 @@ def product_info(version: ProductVersion) -> schemas.Product:
|
|||||||
version_id=version.id,
|
version_id=version.id,
|
||||||
name=version.name,
|
name=version.name,
|
||||||
fraction_units=version.fraction_units,
|
fraction_units=version.fraction_units,
|
||||||
sale_category=schemas.SaleCategoryLink(
|
sale_category=SaleCategoryLink(
|
||||||
id_=version.sale_category_id,
|
id_=version.sale_category_id,
|
||||||
name=version.sale_category.name,
|
name=version.sale_category.name,
|
||||||
),
|
),
|
||||||
skus=[
|
skus=[
|
||||||
schemas.StockKeepingUnit(
|
StockKeepingUnitSchema(
|
||||||
id_=sku.id,
|
id_=sku.id,
|
||||||
units=sku_version.units,
|
units=sku_version.units,
|
||||||
fraction=sku_version.fraction,
|
fraction=sku_version.fraction,
|
||||||
|
|||||||
@@ -21,7 +21,8 @@ from ...models.stock_keeping_unit import StockKeepingUnit
|
|||||||
from ...models.voucher import Voucher
|
from ...models.voucher import Voucher
|
||||||
from ...models.voucher_type import VoucherType
|
from ...models.voucher_type import VoucherType
|
||||||
from ...printing.product_sale_report import print_product_sale_report
|
from ...printing.product_sale_report import print_product_sale_report
|
||||||
from ...schemas.product_sale_report import ProductSaleReport, ProductSaleReportItem, UserLink
|
from ...schemas.product_sale_report import ProductSaleReport, ProductSaleReportItem
|
||||||
|
from ...schemas.user import UserLink
|
||||||
from ...schemas.user_token import UserToken
|
from ...schemas.user_token import UserToken
|
||||||
from .. import _pv_onclause, _sv_onclause
|
from .. import _pv_onclause, _sv_onclause
|
||||||
from . import check_audit_permission, report_finish_date, report_start_date
|
from . import check_audit_permission, report_finish_date, report_start_date
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
from datetime import date, timedelta
|
from datetime import date, timedelta
|
||||||
|
|
||||||
from fastapi import APIRouter, Depends, Security
|
from fastapi import APIRouter, Depends, HTTPException, Security, status
|
||||||
from sqlalchemy import and_, nullsfirst, or_, select
|
from sqlalchemy import and_, nullsfirst, or_, select
|
||||||
from sqlalchemy.orm import Session, contains_eager
|
from sqlalchemy.orm import Session, contains_eager
|
||||||
|
|
||||||
@@ -11,6 +11,7 @@ from ...models.product import Product
|
|||||||
from ...models.product_version import ProductVersion
|
from ...models.product_version import ProductVersion
|
||||||
from ...models.sku_version import SkuVersion
|
from ...models.sku_version import SkuVersion
|
||||||
from ...models.stock_keeping_unit import StockKeepingUnit
|
from ...models.stock_keeping_unit import StockKeepingUnit
|
||||||
|
from ...schemas.product_updates_report import ProductUpdatesReport
|
||||||
from ...schemas.user_token import UserToken
|
from ...schemas.user_token import UserToken
|
||||||
from . import report_finish_date, report_start_date
|
from . import report_finish_date, report_start_date
|
||||||
|
|
||||||
@@ -18,21 +19,24 @@ from . import report_finish_date, report_start_date
|
|||||||
router = APIRouter()
|
router = APIRouter()
|
||||||
|
|
||||||
|
|
||||||
@router.get("")
|
@router.get("", response_model=ProductUpdatesReport)
|
||||||
def product_updates_report_view(
|
def product_updates_report_view(
|
||||||
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=["product-sale-report"]),
|
user: UserToken = Security(get_user, scopes=["product-sale-report"]),
|
||||||
):
|
) -> ProductUpdatesReport:
|
||||||
try:
|
try:
|
||||||
with SessionFuture() as db:
|
with SessionFuture() as db:
|
||||||
return {
|
return ProductUpdatesReport(
|
||||||
"startDate": start_date.strftime("%d-%b-%Y"),
|
start_date=start_date,
|
||||||
"finishDate": finish_date.strftime("%d-%b-%Y"),
|
finish_date=finish_date,
|
||||||
"report": product_updates_report(start_date, finish_date, db),
|
report=product_updates_report(start_date, finish_date, db),
|
||||||
}
|
)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return {"error": str(e)}
|
raise HTTPException(
|
||||||
|
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||||
|
detail=str(e),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def product_updates_report(start_date: date, finish_date: date, db: Session) -> list[str]:
|
def product_updates_report(start_date: date, finish_date: date, db: Session) -> list[str]:
|
||||||
|
|||||||
@@ -119,7 +119,7 @@ def role_info(item: Role, db: Session) -> schemas.Role:
|
|||||||
id_=item.id,
|
id_=item.id,
|
||||||
name=item.name,
|
name=item.name,
|
||||||
permissions=[
|
permissions=[
|
||||||
schemas.PermissionItem(
|
PermissionItem(
|
||||||
id_=p.id,
|
id_=p.id,
|
||||||
name=p.name,
|
name=p.name,
|
||||||
enabled=p in item.permissions,
|
enabled=p in item.permissions,
|
||||||
@@ -133,7 +133,7 @@ def role_blank(db: Session) -> schemas.RoleBlank:
|
|||||||
return schemas.RoleBlank(
|
return schemas.RoleBlank(
|
||||||
name="",
|
name="",
|
||||||
permissions=[
|
permissions=[
|
||||||
schemas.PermissionItem(id_=p.id, name=p.name, enabled=False)
|
PermissionItem(id_=p.id, name=p.name, enabled=False)
|
||||||
for p in db.execute(select(Permission).order_by(Permission.name)).scalars().all()
|
for p in db.execute(select(Permission).order_by(Permission.name)).scalars().all()
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ from ..db.session import SessionFuture
|
|||||||
from ..models.product_version import ProductVersion
|
from ..models.product_version import ProductVersion
|
||||||
from ..models.sale_category import SaleCategory
|
from ..models.sale_category import SaleCategory
|
||||||
from ..schemas import sale_category as schemas
|
from ..schemas import sale_category as schemas
|
||||||
|
from ..schemas.tax import TaxLink
|
||||||
from ..schemas.user_token import UserToken
|
from ..schemas.user_token import UserToken
|
||||||
|
|
||||||
|
|
||||||
@@ -118,7 +119,7 @@ def sale_category_info(item: SaleCategory) -> schemas.SaleCategory:
|
|||||||
id_=item.id,
|
id_=item.id,
|
||||||
name=item.name,
|
name=item.name,
|
||||||
discount_limit=item.discount_limit,
|
discount_limit=item.discount_limit,
|
||||||
tax=schemas.TaxLink(id_=item.tax_id, name=item.tax.name, rate=item.tax.rate),
|
tax=TaxLink(id_=item.tax_id, name=item.tax.name, rate=item.tax.rate),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -13,6 +13,8 @@ from ..db.session import SessionFuture
|
|||||||
from ..models.sale_category import SaleCategory
|
from ..models.sale_category import SaleCategory
|
||||||
from ..models.section_printer import SectionPrinter
|
from ..models.section_printer import SectionPrinter
|
||||||
from ..schemas import section_printer as schemas
|
from ..schemas import section_printer as schemas
|
||||||
|
from ..schemas.printer import PrinterLink
|
||||||
|
from ..schemas.sale_category import SaleCategoryLink
|
||||||
from ..schemas.user_token import UserToken
|
from ..schemas.user_token import UserToken
|
||||||
|
|
||||||
|
|
||||||
@@ -126,8 +128,8 @@ def report(section_id: uuid.UUID | None, db: Session) -> list[schemas.SectionPri
|
|||||||
)
|
)
|
||||||
list_.append(
|
list_.append(
|
||||||
schemas.SectionPrinter(
|
schemas.SectionPrinter(
|
||||||
sale_category=None if sc_id is None else schemas.SaleCategoryLink(id_=sc_id, name=sc_name),
|
sale_category=None if sc_id is None else SaleCategoryLink(id_=sc_id, name=sc_name),
|
||||||
printer=None if section_printer is None else schemas.PrinterLink(id_=section_printer.printer_id),
|
printer=None if section_printer is None else PrinterLink(id_=section_printer.printer_id),
|
||||||
copies=0 if section_printer is None else section_printer.copies,
|
copies=0 if section_printer is None else section_printer.copies,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -6,17 +6,18 @@ from sqlalchemy import select
|
|||||||
from ..core.security import get_current_active_user as get_user
|
from ..core.security import get_current_active_user as get_user
|
||||||
from ..db.session import SessionFuture
|
from ..db.session import SessionFuture
|
||||||
from ..models.db_setting import DbSetting
|
from ..models.db_setting import DbSetting
|
||||||
|
from ..schemas.db_setting import DbSetting as DbSettingSchema
|
||||||
from ..schemas.user_token import UserToken
|
from ..schemas.user_token import UserToken
|
||||||
|
|
||||||
|
|
||||||
router = APIRouter()
|
router = APIRouter()
|
||||||
|
|
||||||
|
|
||||||
@router.get("/{id_}")
|
@router.get("/{id_}", response_model=DbSettingSchema)
|
||||||
def get(
|
def get(
|
||||||
id_: uuid.UUID,
|
id_: uuid.UUID,
|
||||||
user: UserToken = Security(get_user),
|
user: UserToken = Security(get_user),
|
||||||
):
|
) -> DbSettingSchema:
|
||||||
with SessionFuture() as db:
|
with SessionFuture() as db:
|
||||||
data = db.execute(select(DbSetting).where(DbSetting.name == id_)).scalar_one()
|
data = db.execute(select(DbSetting).where(DbSetting.name == id_)).scalar_one()
|
||||||
return {"id": data.id, "name": data.name, "details": data.data}
|
return DbSettingSchema(id_=data.id, name=data.name, details=data.data)
|
||||||
@@ -12,6 +12,8 @@ from ..db.session import SessionFuture
|
|||||||
from ..models.food_table import FoodTable
|
from ..models.food_table import FoodTable
|
||||||
from ..models.overview import Overview
|
from ..models.overview import Overview
|
||||||
from ..schemas import table as schemas
|
from ..schemas import table as schemas
|
||||||
|
from ..schemas.running_table import RunningTable
|
||||||
|
from ..schemas.section import SectionLink
|
||||||
from ..schemas.user_token import UserToken
|
from ..schemas.user_token import UserToken
|
||||||
|
|
||||||
|
|
||||||
@@ -33,7 +35,7 @@ def sort_order(
|
|||||||
id_=item.id,
|
id_=item.id,
|
||||||
name=item.name,
|
name=item.name,
|
||||||
seats=item.seats,
|
seats=item.seats,
|
||||||
section=schemas.SectionLink(id_=item.section_id, name=item.section.name),
|
section=SectionLink(id_=item.section_id, name=item.section.name),
|
||||||
is_active=item.is_active,
|
is_active=item.is_active,
|
||||||
sort_order=item.sort_order,
|
sort_order=item.sort_order,
|
||||||
)
|
)
|
||||||
@@ -125,8 +127,8 @@ def show_list(user: UserToken = Depends(get_user)) -> list[schemas.Table]:
|
|||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
@router.get("/running")
|
@router.get("/running", response_model=list[RunningTable])
|
||||||
def show_running(user: UserToken = Depends(get_user)):
|
def show_running(user: UserToken = Depends(get_user)) -> list[RunningTable]:
|
||||||
with SessionFuture() as db:
|
with SessionFuture() as db:
|
||||||
list_ = (
|
list_ = (
|
||||||
db.execute(
|
db.execute(
|
||||||
@@ -136,27 +138,25 @@ def show_running(user: UserToken = Depends(get_user)):
|
|||||||
.all()
|
.all()
|
||||||
)
|
)
|
||||||
|
|
||||||
food_tables = []
|
food_tables: list[RunningTable] = []
|
||||||
for item in list_:
|
for item in list_:
|
||||||
ft = {
|
ft = RunningTable(
|
||||||
"id": item.id,
|
id_=item.id,
|
||||||
"name": item.name,
|
name=item.name,
|
||||||
"seats": item.seats,
|
seats=item.seats,
|
||||||
"section": {"id": item.section_id, "name": item.section.name},
|
section=SectionLink(id_=item.section_id, name=item.section.name),
|
||||||
"isActive": item.is_active,
|
is_active=item.is_active,
|
||||||
"sortOrder": item.sort_order,
|
sort_order=item.sort_order,
|
||||||
}
|
|
||||||
if item.status is not None:
|
|
||||||
ft["status"] = item.status.status
|
|
||||||
ft["voucherId"] = item.status.voucher_id
|
|
||||||
ft["pax"] = item.status.voucher.pax
|
|
||||||
ft["date"] = (item.status.voucher.date + timedelta(minutes=settings.TIMEZONE_OFFSET_MINUTES)).strftime(
|
|
||||||
"%d-%b-%Y %H:%M"
|
|
||||||
)
|
)
|
||||||
ft["amount"] = round(item.status.voucher.amount, 0)
|
if item.status is not None:
|
||||||
|
ft.status = item.status.status
|
||||||
|
ft.voucher_id = item.status.voucher_id
|
||||||
|
ft.pax = item.status.voucher.pax
|
||||||
|
ft.date_ = item.status.voucher.date + timedelta(minutes=settings.TIMEZONE_OFFSET_MINUTES)
|
||||||
|
ft.amount = int(round(item.status.voucher.amount, 0))
|
||||||
if item.status.guest is not None:
|
if item.status.guest is not None:
|
||||||
ft["guest"] = item.status.guest.customer.name
|
ft.guest = item.status.guest.customer.name
|
||||||
ft["bold"] = item.status.guest.customer.print_in_bill
|
ft.bold = item.status.guest.customer.print_in_bill
|
||||||
food_tables.append(ft)
|
food_tables.append(ft)
|
||||||
return food_tables
|
return food_tables
|
||||||
|
|
||||||
@@ -188,7 +188,7 @@ def food_table_info(item: FoodTable) -> schemas.Table:
|
|||||||
id_=item.id,
|
id_=item.id,
|
||||||
name=item.name,
|
name=item.name,
|
||||||
seats=item.seats,
|
seats=item.seats,
|
||||||
section=schemas.SectionLink(id_=item.section_id, name=item.section.name),
|
section=SectionLink(id_=item.section_id, name=item.section.name),
|
||||||
is_active=item.is_active,
|
is_active=item.is_active,
|
||||||
sort_order=item.sort_order,
|
sort_order=item.sort_order,
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ from ..models.inventory import Inventory
|
|||||||
from ..models.sale_category import SaleCategory
|
from ..models.sale_category import SaleCategory
|
||||||
from ..models.tax import Tax
|
from ..models.tax import Tax
|
||||||
from ..schemas import tax as schemas
|
from ..schemas import tax as schemas
|
||||||
|
from ..schemas.regime import RegimeLink
|
||||||
from ..schemas.user_token import UserToken
|
from ..schemas.user_token import UserToken
|
||||||
|
|
||||||
|
|
||||||
@@ -129,7 +130,7 @@ def tax_info(item: Tax) -> schemas.Tax:
|
|||||||
id_=item.id,
|
id_=item.id,
|
||||||
name=item.name,
|
name=item.name,
|
||||||
rate=item.rate,
|
rate=item.rate,
|
||||||
regime=schemas.RegimeLink(id_=item.regime_id, name=item.regime.name),
|
regime=RegimeLink(id_=item.regime_id, name=item.regime.name),
|
||||||
is_fixture=item.is_fixture,
|
is_fixture=item.is_fixture,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -102,14 +102,14 @@ def check_gaps(data: TemporalProduct, db: Session) -> None:
|
|||||||
detail="Product and SKU versions validity do not match",
|
detail="Product and SKU versions validity do not match",
|
||||||
)
|
)
|
||||||
for i, p_item in enumerate(data.products[1:], start=1):
|
for i, p_item in enumerate(data.products[1:], start=1):
|
||||||
if data.products[i - 1].valid_till + timedelta(days=1) != p_item.valid_from:
|
if data.products[i - 1].valid_till + timedelta(days=1) != p_item.valid_from: # type: ignore[operator]
|
||||||
raise HTTPException(
|
raise HTTPException(
|
||||||
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
|
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
|
||||||
detail="Gaps in product versions exist",
|
detail="Gaps in product versions exist",
|
||||||
)
|
)
|
||||||
for sku_list in skus.values():
|
for sku_list in skus.values():
|
||||||
for i, s_item in enumerate(sku_list[1:], start=1):
|
for i, s_item in enumerate(sku_list[1:], start=1):
|
||||||
if sku_list[i - 1].valid_till + timedelta(days=1) != s_item.valid_from:
|
if sku_list[i - 1].valid_till + timedelta(days=1) != s_item.valid_from: # type: ignore[operator]
|
||||||
raise HTTPException(
|
raise HTTPException(
|
||||||
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
|
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
|
||||||
detail="Gaps in sku versions exist",
|
detail="Gaps in sku versions exist",
|
||||||
|
|||||||
@@ -166,7 +166,7 @@ def user_info(item: User, db: Session, user: UserToken) -> schemas.User:
|
|||||||
password="",
|
password="",
|
||||||
locked_out=item.locked_out,
|
locked_out=item.locked_out,
|
||||||
roles=[
|
roles=[
|
||||||
schemas.RoleItem(
|
RoleItem(
|
||||||
id_=r.id,
|
id_=r.id,
|
||||||
name=r.name,
|
name=r.name,
|
||||||
enabled=r in item.roles,
|
enabled=r in item.roles,
|
||||||
@@ -194,7 +194,7 @@ def blank_user_info(db: Session) -> schemas.UserIn:
|
|||||||
password="",
|
password="",
|
||||||
locked_out=False,
|
locked_out=False,
|
||||||
roles=[
|
roles=[
|
||||||
schemas.RoleItem(id_=r.id, name=r.name, enabled=False)
|
RoleItem(id_=r.id, name=r.name, enabled=False)
|
||||||
for r in db.execute(select(Role).order_by(Role.name)).scalars().all()
|
for r in db.execute(select(Role).order_by(Role.name)).scalars().all()
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
@@ -4,7 +4,7 @@ from datetime import datetime
|
|||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
|
|
||||||
from fastapi import HTTPException, status
|
from fastapi import HTTPException, status
|
||||||
from sqlalchemy import func, select
|
from sqlalchemy import ColumnElement, func, select
|
||||||
from sqlalchemy.orm import Session, contains_eager
|
from sqlalchemy.orm import Session, contains_eager
|
||||||
from sqlalchemy.sql import expression
|
from sqlalchemy.sql import expression
|
||||||
|
|
||||||
@@ -188,7 +188,12 @@ def happy_hour_items_more_than_regular(kots: list[schemas.Kot]) -> bool:
|
|||||||
return any(value["happy"] > value["normal"] for value in inventories.values())
|
return any(value["happy"] > value["normal"] for value in inventories.values())
|
||||||
|
|
||||||
|
|
||||||
def get_voucher(voucher_id: uuid.UUID, db: Session, product_version_onclause, sku_version_onclause) -> Voucher:
|
def get_voucher(
|
||||||
|
voucher_id: uuid.UUID,
|
||||||
|
db: Session,
|
||||||
|
product_version_onclause: ColumnElement[bool],
|
||||||
|
sku_version_onclause: ColumnElement[bool],
|
||||||
|
) -> Voucher:
|
||||||
item: Voucher = (
|
item: Voucher = (
|
||||||
db.execute(
|
db.execute(
|
||||||
select(Voucher)
|
select(Voucher)
|
||||||
@@ -230,8 +235,8 @@ def get_voucher(voucher_id: uuid.UUID, db: Session, product_version_onclause, sk
|
|||||||
def get_sku(
|
def get_sku(
|
||||||
sku_id: uuid.UUID,
|
sku_id: uuid.UUID,
|
||||||
db: Session,
|
db: Session,
|
||||||
product_version_onclause,
|
product_version_onclause: ColumnElement[bool],
|
||||||
sku_version_onclause,
|
sku_version_onclause: ColumnElement[bool],
|
||||||
) -> StockKeepingUnit:
|
) -> StockKeepingUnit:
|
||||||
sku: StockKeepingUnit = (
|
sku: StockKeepingUnit = (
|
||||||
db.execute(
|
db.execute(
|
||||||
|
|||||||
@@ -24,21 +24,21 @@ from ...models.sku_version import SkuVersion
|
|||||||
from ...models.stock_keeping_unit import StockKeepingUnit
|
from ...models.stock_keeping_unit import StockKeepingUnit
|
||||||
from ...models.voucher import Voucher
|
from ...models.voucher import Voucher
|
||||||
from ...models.voucher_type import VoucherType
|
from ...models.voucher_type import VoucherType
|
||||||
|
from ...schemas.customer import CustomerLink
|
||||||
|
from ...schemas.modifier import ModifierLink
|
||||||
|
from ...schemas.table import TableLink
|
||||||
|
from ...schemas.tax import TaxLink
|
||||||
|
from ...schemas.user import UserLink
|
||||||
from ...schemas.user_token import UserToken
|
from ...schemas.user_token import UserToken
|
||||||
from ...schemas.voucher_out import (
|
from ...schemas.voucher_out import (
|
||||||
CustomerLink,
|
Inventory as InventoryOut,
|
||||||
InventoryProduct,
|
|
||||||
ModifierLink,
|
|
||||||
ProductMenuCategory,
|
|
||||||
ProductSaleCategory,
|
|
||||||
TableLink,
|
|
||||||
TaxLink,
|
|
||||||
UserLink,
|
|
||||||
VoucherBlank,
|
|
||||||
VoucherOut,
|
|
||||||
)
|
)
|
||||||
from ...schemas.voucher_out import (
|
from ...schemas.voucher_out import (
|
||||||
Inventory as InventoryOut,
|
InventoryProduct,
|
||||||
|
ProductMenuCategory,
|
||||||
|
ProductSaleCategory,
|
||||||
|
VoucherBlank,
|
||||||
|
VoucherOut,
|
||||||
)
|
)
|
||||||
from ...schemas.voucher_out import (
|
from ...schemas.voucher_out import (
|
||||||
Kot as KotOut,
|
Kot as KotOut,
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ from datetime import UTC, datetime, timedelta
|
|||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
|
|
||||||
from fastapi import APIRouter, HTTPException, Security, status
|
from fastapi import APIRouter, HTTPException, Security, status
|
||||||
from sqlalchemy import Date, func, select
|
from sqlalchemy import ColumnElement, Date, func, select
|
||||||
from sqlalchemy.exc import SQLAlchemyError
|
from sqlalchemy.exc import SQLAlchemyError
|
||||||
from sqlalchemy.orm import Session, contains_eager
|
from sqlalchemy.orm import Session, contains_eager
|
||||||
|
|
||||||
@@ -43,7 +43,7 @@ from ...schemas.user_token import UserToken
|
|||||||
router = APIRouter()
|
router = APIRouter()
|
||||||
|
|
||||||
|
|
||||||
def discount_limit(sku_id: uuid.UUID, db: Session, product_version_onclause) -> Decimal:
|
def discount_limit(sku_id: uuid.UUID, db: Session, product_version_onclause: ColumnElement[bool]) -> Decimal:
|
||||||
sku: StockKeepingUnit = (
|
sku: StockKeepingUnit = (
|
||||||
db.execute(
|
db.execute(
|
||||||
select(StockKeepingUnit)
|
select(StockKeepingUnit)
|
||||||
|
|||||||
@@ -1,8 +1,16 @@
|
|||||||
from datetime import date, datetime
|
from datetime import date, datetime
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
from typing import Annotated, Any
|
from typing import Annotated
|
||||||
|
|
||||||
from pydantic import BaseModel, ConfigDict, Field, field_serializer, field_validator, model_serializer
|
from pydantic import (
|
||||||
|
BaseModel,
|
||||||
|
ConfigDict,
|
||||||
|
Field,
|
||||||
|
SerializationInfo,
|
||||||
|
field_serializer,
|
||||||
|
field_validator,
|
||||||
|
model_serializer,
|
||||||
|
)
|
||||||
|
|
||||||
from . import Daf, to_camel
|
from . import Daf, to_camel
|
||||||
|
|
||||||
@@ -18,7 +26,7 @@ class BeerConsumptionReportItem(BaseModel):
|
|||||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||||
|
|
||||||
@field_serializer("date_")
|
@field_serializer("date_")
|
||||||
def serialize_date(self, value: date, _info: Any) -> str:
|
def serialize_date(self, value: date, _info: SerializationInfo) -> str:
|
||||||
return value.strftime("%d-%b-%Y")
|
return value.strftime("%d-%b-%Y")
|
||||||
|
|
||||||
# dynamic fields (e.g., regular, nc, kot)
|
# dynamic fields (e.g., regular, nc, kot)
|
||||||
@@ -64,7 +72,7 @@ class BeerConsumptionReport(BaseModel):
|
|||||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||||
|
|
||||||
@field_serializer("start_date")
|
@field_serializer("start_date")
|
||||||
def serialize_start_date(self, value: date, _info: Any) -> str:
|
def serialize_start_date(self, value: date, _info: SerializationInfo) -> str:
|
||||||
return value.strftime("%d-%b-%Y")
|
return value.strftime("%d-%b-%Y")
|
||||||
|
|
||||||
@field_validator("finish_date", mode="before")
|
@field_validator("finish_date", mode="before")
|
||||||
@@ -75,5 +83,5 @@ class BeerConsumptionReport(BaseModel):
|
|||||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||||
|
|
||||||
@field_serializer("finish_date")
|
@field_serializer("finish_date")
|
||||||
def serialize_finish_date(self, value: date, _info: Any) -> str:
|
def serialize_finish_date(self, value: date, _info: SerializationInfo) -> str:
|
||||||
return value.strftime("%d-%b-%Y")
|
return value.strftime("%d-%b-%Y")
|
||||||
@@ -1,7 +1,6 @@
|
|||||||
from datetime import date, datetime
|
from datetime import date, datetime
|
||||||
from typing import Any
|
|
||||||
|
|
||||||
from pydantic import BaseModel, ConfigDict, field_serializer, field_validator
|
from pydantic import BaseModel, ConfigDict, SerializationInfo, field_serializer, field_validator
|
||||||
|
|
||||||
from . import Daf, to_camel
|
from . import Daf, to_camel
|
||||||
|
|
||||||
@@ -21,7 +20,7 @@ class BillSettlementItem(BaseModel):
|
|||||||
return datetime.strptime(value, "%d-%b-%Y %H:%M")
|
return datetime.strptime(value, "%d-%b-%Y %H:%M")
|
||||||
|
|
||||||
@field_serializer("date_")
|
@field_serializer("date_")
|
||||||
def serialize_date(self, value: datetime, _info: Any) -> str:
|
def serialize_date(self, value: datetime, _info: SerializationInfo) -> str:
|
||||||
return value.strftime("%d-%b-%Y %H:%M")
|
return value.strftime("%d-%b-%Y %H:%M")
|
||||||
|
|
||||||
|
|
||||||
@@ -39,7 +38,7 @@ class BillSettlement(BaseModel):
|
|||||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||||
|
|
||||||
@field_serializer("start_date")
|
@field_serializer("start_date")
|
||||||
def serialize_start_date(self, value: date, _info: Any) -> str:
|
def serialize_start_date(self, value: date, _info: SerializationInfo) -> str:
|
||||||
return value.strftime("%d-%b-%Y")
|
return value.strftime("%d-%b-%Y")
|
||||||
|
|
||||||
@field_validator("finish_date", mode="before")
|
@field_validator("finish_date", mode="before")
|
||||||
@@ -50,5 +49,5 @@ class BillSettlement(BaseModel):
|
|||||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||||
|
|
||||||
@field_serializer("finish_date")
|
@field_serializer("finish_date")
|
||||||
def serialize_finish_date(self, value: date, _info: Any) -> str:
|
def serialize_finish_date(self, value: date, _info: SerializationInfo) -> str:
|
||||||
return value.strftime("%d-%b-%Y")
|
return value.strftime("%d-%b-%Y")
|
||||||
@@ -1,7 +1,6 @@
|
|||||||
from datetime import date, datetime
|
from datetime import date, datetime
|
||||||
from typing import Any
|
|
||||||
|
|
||||||
from pydantic import BaseModel, ConfigDict, field_serializer, field_validator
|
from pydantic import BaseModel, ConfigDict, SerializationInfo, field_serializer, field_validator
|
||||||
|
|
||||||
from . import Daf, to_camel
|
from . import Daf, to_camel
|
||||||
from .user import UserLink
|
from .user import UserLink
|
||||||
@@ -60,7 +59,7 @@ class CashierReport(BaseModel):
|
|||||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||||
|
|
||||||
@field_serializer("start_date")
|
@field_serializer("start_date")
|
||||||
def serialize_start_date(self, value: date, _info: Any) -> str:
|
def serialize_start_date(self, value: date, _info: SerializationInfo) -> str:
|
||||||
return value.strftime("%d-%b-%Y")
|
return value.strftime("%d-%b-%Y")
|
||||||
|
|
||||||
@field_validator("finish_date", mode="before")
|
@field_validator("finish_date", mode="before")
|
||||||
@@ -71,5 +70,5 @@ class CashierReport(BaseModel):
|
|||||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||||
|
|
||||||
@field_serializer("finish_date")
|
@field_serializer("finish_date")
|
||||||
def serialize_finish_date(self, value: date, _info: Any) -> str:
|
def serialize_finish_date(self, value: date, _info: SerializationInfo) -> str:
|
||||||
return value.strftime("%d-%b-%Y")
|
return value.strftime("%d-%b-%Y")
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
import uuid
|
||||||
|
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
|
from pydantic import BaseModel, ConfigDict
|
||||||
|
|
||||||
|
from . import to_camel
|
||||||
|
|
||||||
|
|
||||||
|
class DbSetting(BaseModel):
|
||||||
|
id_: uuid.UUID
|
||||||
|
name: str
|
||||||
|
details: dict[str, Any]
|
||||||
|
|
||||||
|
model_config = ConfigDict(
|
||||||
|
str_strip_whitespace=True,
|
||||||
|
alias_generator=to_camel,
|
||||||
|
populate_by_name=True,
|
||||||
|
)
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
import uuid
|
import uuid
|
||||||
|
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from typing import Annotated, Any
|
from typing import Annotated
|
||||||
|
|
||||||
from pydantic import BaseModel, ConfigDict, Field, field_serializer
|
from pydantic import BaseModel, ConfigDict, Field, SerializationInfo, field_serializer
|
||||||
|
|
||||||
from . import to_camel
|
from . import to_camel
|
||||||
from .section import SectionLink
|
from .section import SectionLink
|
||||||
@@ -24,11 +24,11 @@ class Device(DeviceIn):
|
|||||||
model_config = ConfigDict(str_strip_whitespace=True, alias_generator=to_camel, populate_by_name=True)
|
model_config = ConfigDict(str_strip_whitespace=True, alias_generator=to_camel, populate_by_name=True)
|
||||||
|
|
||||||
@field_serializer("creation_date")
|
@field_serializer("creation_date")
|
||||||
def serialize_creation_date(self, value: datetime, _info: Any) -> str:
|
def serialize_creation_date(self, value: datetime, _info: SerializationInfo) -> str:
|
||||||
return value.strftime("%d-%b-%Y %H:%M")
|
return value.strftime("%d-%b-%Y %H:%M")
|
||||||
|
|
||||||
@field_serializer("last_date")
|
@field_serializer("last_date")
|
||||||
def serialize_last_date(self, value: datetime | None, _info: Any) -> str | None:
|
def serialize_last_date(self, value: datetime | None, _info: SerializationInfo) -> str | None:
|
||||||
return None if value is None else value.strftime("%d-%b-%Y %H:%M")
|
return None if value is None else value.strftime("%d-%b-%Y %H:%M")
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
from datetime import date, datetime
|
from datetime import date, datetime
|
||||||
from typing import Any
|
|
||||||
|
|
||||||
from pydantic import BaseModel, ConfigDict, field_serializer, field_validator
|
from pydantic import BaseModel, ConfigDict, SerializationInfo, field_serializer, field_validator
|
||||||
|
|
||||||
from . import Daf, to_camel
|
from . import Daf, to_camel
|
||||||
|
|
||||||
@@ -26,7 +25,7 @@ class DiscountReport(BaseModel):
|
|||||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||||
|
|
||||||
@field_serializer("start_date")
|
@field_serializer("start_date")
|
||||||
def serialize_start_date(self, value: date, _info: Any) -> str:
|
def serialize_start_date(self, value: date, _info: SerializationInfo) -> str:
|
||||||
return value.strftime("%d-%b-%Y")
|
return value.strftime("%d-%b-%Y")
|
||||||
|
|
||||||
@field_validator("finish_date", mode="before")
|
@field_validator("finish_date", mode="before")
|
||||||
@@ -37,5 +36,5 @@ class DiscountReport(BaseModel):
|
|||||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||||
|
|
||||||
@field_serializer("finish_date")
|
@field_serializer("finish_date")
|
||||||
def serialize_finish_date(self, value: date, _info: Any) -> str:
|
def serialize_finish_date(self, value: date, _info: SerializationInfo) -> str:
|
||||||
return value.strftime("%d-%b-%Y")
|
return value.strftime("%d-%b-%Y")
|
||||||
@@ -1,12 +1,13 @@
|
|||||||
import uuid
|
import uuid
|
||||||
|
|
||||||
from datetime import date, datetime
|
from datetime import date, datetime
|
||||||
from typing import Annotated, Any
|
from typing import Annotated
|
||||||
|
|
||||||
from pydantic import (
|
from pydantic import (
|
||||||
BaseModel,
|
BaseModel,
|
||||||
ConfigDict,
|
ConfigDict,
|
||||||
Field,
|
Field,
|
||||||
|
SerializationInfo,
|
||||||
field_serializer,
|
field_serializer,
|
||||||
field_validator,
|
field_validator,
|
||||||
model_validator,
|
model_validator,
|
||||||
@@ -38,7 +39,7 @@ class GuestBookIn(BaseModel):
|
|||||||
return datetime.strptime(value, "%d-%b-%Y %H:%M")
|
return datetime.strptime(value, "%d-%b-%Y %H:%M")
|
||||||
|
|
||||||
@field_serializer("booking_date")
|
@field_serializer("booking_date")
|
||||||
def serialize_booking_date(self, value: datetime | None, _info: Any) -> str | None:
|
def serialize_booking_date(self, value: datetime | None, _info: SerializationInfo) -> str | None:
|
||||||
return None if value is None else value.strftime("%d-%b-%Y %H:%M")
|
return None if value is None else value.strftime("%d-%b-%Y %H:%M")
|
||||||
|
|
||||||
@field_validator("arrival_date", mode="before")
|
@field_validator("arrival_date", mode="before")
|
||||||
@@ -51,7 +52,7 @@ class GuestBookIn(BaseModel):
|
|||||||
return datetime.strptime(value, "%d-%b-%Y %H:%M")
|
return datetime.strptime(value, "%d-%b-%Y %H:%M")
|
||||||
|
|
||||||
@field_serializer("arrival_date")
|
@field_serializer("arrival_date")
|
||||||
def serialize_arrival_date(self, value: datetime | None, _info: Any) -> str | None:
|
def serialize_arrival_date(self, value: datetime | None, _info: SerializationInfo) -> str | None:
|
||||||
return None if value is None else value.strftime("%d-%b-%Y %H:%M")
|
return None if value is None else value.strftime("%d-%b-%Y %H:%M")
|
||||||
|
|
||||||
@model_validator(mode="after")
|
@model_validator(mode="after")
|
||||||
@@ -75,7 +76,7 @@ class GuestBook(GuestBookIn):
|
|||||||
return datetime.strptime(value, "%d-%b-%Y %H:%M")
|
return datetime.strptime(value, "%d-%b-%Y %H:%M")
|
||||||
|
|
||||||
@field_serializer("last_edit_date")
|
@field_serializer("last_edit_date")
|
||||||
def serialize_last_edit_date(self, value: datetime, _info: Any) -> str:
|
def serialize_last_edit_date(self, value: datetime, _info: SerializationInfo) -> str:
|
||||||
return value.strftime("%d-%b-%Y %H:%M")
|
return value.strftime("%d-%b-%Y %H:%M")
|
||||||
|
|
||||||
|
|
||||||
@@ -107,7 +108,7 @@ class GuestBookListItem(BaseModel):
|
|||||||
return datetime.strptime(value, "%d-%b-%Y %H:%M")
|
return datetime.strptime(value, "%d-%b-%Y %H:%M")
|
||||||
|
|
||||||
@field_serializer("booking_date")
|
@field_serializer("booking_date")
|
||||||
def serialize_booking_date(self, value: datetime | None, _info: Any) -> str | None:
|
def serialize_booking_date(self, value: datetime | None, _info: SerializationInfo) -> str | None:
|
||||||
return None if value is None else value.strftime("%d-%b-%Y %H:%M")
|
return None if value is None else value.strftime("%d-%b-%Y %H:%M")
|
||||||
|
|
||||||
@field_validator("arrival_date", mode="before")
|
@field_validator("arrival_date", mode="before")
|
||||||
@@ -120,7 +121,7 @@ class GuestBookListItem(BaseModel):
|
|||||||
return datetime.strptime(value, "%d-%b-%Y %H:%M")
|
return datetime.strptime(value, "%d-%b-%Y %H:%M")
|
||||||
|
|
||||||
@field_serializer("arrival_date")
|
@field_serializer("arrival_date")
|
||||||
def serialize_arrival_date(self, value: datetime | None, _info: Any) -> str | None:
|
def serialize_arrival_date(self, value: datetime | None, _info: SerializationInfo) -> str | None:
|
||||||
return None if value is None else value.strftime("%d-%b-%Y %H:%M")
|
return None if value is None else value.strftime("%d-%b-%Y %H:%M")
|
||||||
|
|
||||||
@field_validator("last_edit_date", mode="before")
|
@field_validator("last_edit_date", mode="before")
|
||||||
@@ -131,7 +132,7 @@ class GuestBookListItem(BaseModel):
|
|||||||
return datetime.strptime(value, "%d-%b-%Y %H:%M")
|
return datetime.strptime(value, "%d-%b-%Y %H:%M")
|
||||||
|
|
||||||
@field_serializer("last_edit_date")
|
@field_serializer("last_edit_date")
|
||||||
def serialize_last_edit_date(self, value: datetime, _info: Any) -> str:
|
def serialize_last_edit_date(self, value: datetime, _info: SerializationInfo) -> str:
|
||||||
return value.strftime("%d-%b-%Y %H:%M")
|
return value.strftime("%d-%b-%Y %H:%M")
|
||||||
|
|
||||||
|
|
||||||
@@ -148,5 +149,5 @@ class GuestBookList(BaseModel):
|
|||||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||||
|
|
||||||
@field_serializer("date_")
|
@field_serializer("date_")
|
||||||
def serialize_date(self, value: date, _info: Any) -> str:
|
def serialize_date(self, value: date, _info: SerializationInfo) -> str:
|
||||||
return value.strftime("%d-%b-%Y")
|
return value.strftime("%d-%b-%Y")
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
from pydantic import BaseModel
|
||||||
|
|
||||||
|
|
||||||
|
class HealthResponse(BaseModel):
|
||||||
|
status: str
|
||||||
|
database: str
|
||||||
@@ -1,9 +1,8 @@
|
|||||||
import uuid
|
import uuid
|
||||||
|
|
||||||
from datetime import date, datetime
|
from datetime import date, datetime
|
||||||
from typing import Any
|
|
||||||
|
|
||||||
from pydantic import BaseModel, ConfigDict, field_serializer, field_validator
|
from pydantic import BaseModel, ConfigDict, SerializationInfo, field_serializer, field_validator
|
||||||
|
|
||||||
from . import Daf, to_camel
|
from . import Daf, to_camel
|
||||||
|
|
||||||
@@ -37,7 +36,7 @@ class MeReport(BaseModel):
|
|||||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||||
|
|
||||||
@field_serializer("start_date")
|
@field_serializer("start_date")
|
||||||
def serialize_start_date(self, value: date, _info: Any) -> str:
|
def serialize_start_date(self, value: date, _info: SerializationInfo) -> str:
|
||||||
return value.strftime("%d-%b-%Y")
|
return value.strftime("%d-%b-%Y")
|
||||||
|
|
||||||
@field_validator("finish_date", mode="before")
|
@field_validator("finish_date", mode="before")
|
||||||
@@ -48,5 +47,5 @@ class MeReport(BaseModel):
|
|||||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||||
|
|
||||||
@field_serializer("finish_date")
|
@field_serializer("finish_date")
|
||||||
def serialize_finish_date(self, value: date, _info: Any) -> str:
|
def serialize_finish_date(self, value: date, _info: SerializationInfo) -> str:
|
||||||
return value.strftime("%d-%b-%Y")
|
return value.strftime("%d-%b-%Y")
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
import uuid
|
import uuid
|
||||||
|
|
||||||
from datetime import date, datetime
|
from datetime import date, datetime
|
||||||
from typing import Annotated, Any
|
from typing import Annotated
|
||||||
|
|
||||||
from pydantic import BaseModel, ConfigDict, Field, field_serializer, field_validator
|
from pydantic import BaseModel, ConfigDict, Field, SerializationInfo, field_serializer, field_validator
|
||||||
|
|
||||||
from . import to_camel
|
from . import to_camel
|
||||||
from .sale_category import SaleCategoryLink
|
from .sale_category import SaleCategoryLink
|
||||||
@@ -37,7 +37,7 @@ class Product(ProductIn):
|
|||||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||||
|
|
||||||
@field_serializer("valid_from")
|
@field_serializer("valid_from")
|
||||||
def serialize_valid_from(self, value: date | None, _info: Any) -> str | None:
|
def serialize_valid_from(self, value: date | None, _info: SerializationInfo) -> str | None:
|
||||||
return None if value is None else value.strftime("%d-%b-%Y")
|
return None if value is None else value.strftime("%d-%b-%Y")
|
||||||
|
|
||||||
@field_validator("valid_till", mode="before")
|
@field_validator("valid_till", mode="before")
|
||||||
@@ -50,7 +50,7 @@ class Product(ProductIn):
|
|||||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||||
|
|
||||||
@field_serializer("valid_till")
|
@field_serializer("valid_till")
|
||||||
def serialize_valid_till(self, value: date | None, _info: Any) -> str | None:
|
def serialize_valid_till(self, value: date | None, _info: SerializationInfo) -> str | None:
|
||||||
return None if value is None else value.strftime("%d-%b-%Y")
|
return None if value is None else value.strftime("%d-%b-%Y")
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -2,9 +2,17 @@ import uuid
|
|||||||
|
|
||||||
from datetime import date, datetime
|
from datetime import date, datetime
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
from typing import Annotated, Any
|
from typing import Annotated
|
||||||
|
|
||||||
from pydantic import BaseModel, ConfigDict, Field, field_serializer, field_validator, model_serializer
|
from pydantic import (
|
||||||
|
BaseModel,
|
||||||
|
ConfigDict,
|
||||||
|
Field,
|
||||||
|
SerializationInfo,
|
||||||
|
field_serializer,
|
||||||
|
field_validator,
|
||||||
|
model_serializer,
|
||||||
|
)
|
||||||
|
|
||||||
from . import Daf, to_camel
|
from . import Daf, to_camel
|
||||||
from .user import UserLink
|
from .user import UserLink
|
||||||
@@ -57,7 +65,7 @@ class ProductSaleReport(BaseModel):
|
|||||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||||
|
|
||||||
@field_serializer("start_date")
|
@field_serializer("start_date")
|
||||||
def serialize_start_date(self, value: date, _info: Any) -> str:
|
def serialize_start_date(self, value: date, _info: SerializationInfo) -> str:
|
||||||
return value.strftime("%d-%b-%Y")
|
return value.strftime("%d-%b-%Y")
|
||||||
|
|
||||||
@field_validator("finish_date", mode="before")
|
@field_validator("finish_date", mode="before")
|
||||||
@@ -68,5 +76,5 @@ class ProductSaleReport(BaseModel):
|
|||||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||||
|
|
||||||
@field_serializer("finish_date")
|
@field_serializer("finish_date")
|
||||||
def serialize_finish_date(self, value: date, _info: Any) -> str:
|
def serialize_finish_date(self, value: date, _info: SerializationInfo) -> str:
|
||||||
return value.strftime("%d-%b-%Y")
|
return value.strftime("%d-%b-%Y")
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
from datetime import date, datetime
|
||||||
|
|
||||||
|
from pydantic import BaseModel, ConfigDict, SerializationInfo, field_serializer, field_validator
|
||||||
|
|
||||||
|
from . import to_camel
|
||||||
|
|
||||||
|
|
||||||
|
class ProductUpdatesReport(BaseModel):
|
||||||
|
start_date: date
|
||||||
|
finish_date: date
|
||||||
|
report: list[str]
|
||||||
|
|
||||||
|
model_config = ConfigDict(str_strip_whitespace=True, alias_generator=to_camel, populate_by_name=True)
|
||||||
|
|
||||||
|
@field_validator("start_date", mode="before")
|
||||||
|
@classmethod
|
||||||
|
def parse_start_date(cls, value: str | date) -> date:
|
||||||
|
if isinstance(value, date):
|
||||||
|
return value
|
||||||
|
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||||
|
|
||||||
|
@field_serializer("start_date")
|
||||||
|
def serialize_start_date(self, value: date, _info: SerializationInfo) -> str:
|
||||||
|
return value.strftime("%d-%b-%Y")
|
||||||
|
|
||||||
|
@field_validator("finish_date", mode="before")
|
||||||
|
@classmethod
|
||||||
|
def parse_finish_date(cls, value: str | date) -> date:
|
||||||
|
if isinstance(value, date):
|
||||||
|
return value
|
||||||
|
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||||
|
|
||||||
|
@field_serializer("finish_date")
|
||||||
|
def serialize_finish_date(self, value: date, _info: SerializationInfo) -> str:
|
||||||
|
return value.strftime("%d-%b-%Y")
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
import uuid
|
||||||
|
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
from pydantic import BaseModel, ConfigDict, SerializationInfo, field_serializer, field_validator
|
||||||
|
|
||||||
|
from . import to_camel
|
||||||
|
from .section import SectionLink
|
||||||
|
|
||||||
|
|
||||||
|
class RunningTable(BaseModel):
|
||||||
|
id_: uuid.UUID
|
||||||
|
name: str
|
||||||
|
seats: int
|
||||||
|
section: SectionLink
|
||||||
|
is_active: bool
|
||||||
|
sort_order: int
|
||||||
|
|
||||||
|
# present only when status exists in DB
|
||||||
|
status: str | None = None
|
||||||
|
voucher_id: uuid.UUID | None = None
|
||||||
|
pax: int | None = None
|
||||||
|
date_: datetime | None = None
|
||||||
|
amount: float | None = None # you round to 0 decimals; keep Decimal if you prefer
|
||||||
|
guest: str | None = None
|
||||||
|
bold: bool | None = None
|
||||||
|
|
||||||
|
model_config = ConfigDict(str_strip_whitespace=True, alias_generator=to_camel, populate_by_name=True)
|
||||||
|
|
||||||
|
@field_validator("date_", mode="before")
|
||||||
|
@classmethod
|
||||||
|
def parse_date(cls, value: str | datetime | None) -> datetime | None:
|
||||||
|
if value is None:
|
||||||
|
return None
|
||||||
|
if isinstance(value, datetime):
|
||||||
|
return value
|
||||||
|
return datetime.strptime(value, "%d-%b-%Y %H:%M")
|
||||||
|
|
||||||
|
@field_serializer("date_")
|
||||||
|
def serialize_date(self, value: datetime | None, _info: SerializationInfo) -> str | None:
|
||||||
|
if value is None:
|
||||||
|
return None
|
||||||
|
return value.strftime("%d-%b-%Y %H:%M")
|
||||||
@@ -1,9 +1,8 @@
|
|||||||
import uuid
|
import uuid
|
||||||
|
|
||||||
from datetime import date, datetime
|
from datetime import date, datetime
|
||||||
from typing import Any
|
|
||||||
|
|
||||||
from pydantic import BaseModel, ConfigDict, field_serializer, field_validator
|
from pydantic import BaseModel, ConfigDict, SerializationInfo, field_serializer, field_validator
|
||||||
|
|
||||||
from . import Daf, to_camel
|
from . import Daf, to_camel
|
||||||
from .user import UserLink
|
from .user import UserLink
|
||||||
@@ -31,7 +30,7 @@ class SaleReport(BaseModel):
|
|||||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||||
|
|
||||||
@field_serializer("start_date")
|
@field_serializer("start_date")
|
||||||
def serialize_start_date(self, value: date, _info: Any) -> str:
|
def serialize_start_date(self, value: date, _info: SerializationInfo) -> str:
|
||||||
return value.strftime("%d-%b-%Y")
|
return value.strftime("%d-%b-%Y")
|
||||||
|
|
||||||
@field_validator("finish_date", mode="before")
|
@field_validator("finish_date", mode="before")
|
||||||
@@ -42,5 +41,5 @@ class SaleReport(BaseModel):
|
|||||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||||
|
|
||||||
@field_serializer("finish_date")
|
@field_serializer("finish_date")
|
||||||
def serialize_finish_date(self, value: date, _info: Any) -> str:
|
def serialize_finish_date(self, value: date, _info: SerializationInfo) -> str:
|
||||||
return value.strftime("%d-%b-%Y")
|
return value.strftime("%d-%b-%Y")
|
||||||
@@ -2,9 +2,9 @@ import uuid
|
|||||||
|
|
||||||
from datetime import date, datetime
|
from datetime import date, datetime
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
from typing import Annotated, Any
|
from typing import Annotated
|
||||||
|
|
||||||
from pydantic import BaseModel, ConfigDict, Field, field_serializer, field_validator
|
from pydantic import BaseModel, ConfigDict, Field, SerializationInfo, field_serializer, field_validator
|
||||||
|
|
||||||
from . import Daf, to_camel
|
from . import Daf, to_camel
|
||||||
from .menu_category import MenuCategoryLink
|
from .menu_category import MenuCategoryLink
|
||||||
@@ -38,7 +38,7 @@ class StockKeepingUnit(BaseModel):
|
|||||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||||
|
|
||||||
@field_serializer("valid_from")
|
@field_serializer("valid_from")
|
||||||
def serialize_valid_from(self, value: date | None, _info: Any) -> str | None:
|
def serialize_valid_from(self, value: date | None, _info: SerializationInfo) -> str | None:
|
||||||
return None if value is None else value.strftime("%d-%b-%Y")
|
return None if value is None else value.strftime("%d-%b-%Y")
|
||||||
|
|
||||||
@field_validator("valid_till", mode="before")
|
@field_validator("valid_till", mode="before")
|
||||||
@@ -51,5 +51,5 @@ class StockKeepingUnit(BaseModel):
|
|||||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||||
|
|
||||||
@field_serializer("valid_till")
|
@field_serializer("valid_till")
|
||||||
def serialize_valid_till(self, value: date | None, _info: Any) -> str | None:
|
def serialize_valid_till(self, value: date | None, _info: SerializationInfo) -> str | None:
|
||||||
return None if value is None else value.strftime("%d-%b-%Y")
|
return None if value is None else value.strftime("%d-%b-%Y")
|
||||||
@@ -1,7 +1,6 @@
|
|||||||
from datetime import date, datetime
|
from datetime import date, datetime
|
||||||
from typing import Any
|
|
||||||
|
|
||||||
from pydantic import BaseModel, ConfigDict, field_serializer, field_validator
|
from pydantic import BaseModel, ConfigDict, SerializationInfo, field_serializer, field_validator
|
||||||
|
|
||||||
from . import Daf, to_camel
|
from . import Daf, to_camel
|
||||||
|
|
||||||
@@ -28,7 +27,7 @@ class TaxReport(BaseModel):
|
|||||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||||
|
|
||||||
@field_serializer("start_date")
|
@field_serializer("start_date")
|
||||||
def serialize_start_date(self, value: date, _info: Any) -> str:
|
def serialize_start_date(self, value: date, _info: SerializationInfo) -> str:
|
||||||
return value.strftime("%d-%b-%Y")
|
return value.strftime("%d-%b-%Y")
|
||||||
|
|
||||||
@field_validator("finish_date", mode="before")
|
@field_validator("finish_date", mode="before")
|
||||||
@@ -39,5 +38,5 @@ class TaxReport(BaseModel):
|
|||||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||||
|
|
||||||
@field_serializer("finish_date")
|
@field_serializer("finish_date")
|
||||||
def serialize_finish_date(self, value: date, _info: Any) -> str:
|
def serialize_finish_date(self, value: date, _info: SerializationInfo) -> str:
|
||||||
return value.strftime("%d-%b-%Y")
|
return value.strftime("%d-%b-%Y")
|
||||||
@@ -2,9 +2,9 @@ import uuid
|
|||||||
|
|
||||||
from datetime import date, datetime
|
from datetime import date, datetime
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
from typing import Annotated, Any
|
from typing import Annotated
|
||||||
|
|
||||||
from pydantic import BaseModel, ConfigDict, Field, field_serializer, field_validator
|
from pydantic import BaseModel, ConfigDict, Field, SerializationInfo, field_serializer, field_validator
|
||||||
|
|
||||||
from . import Daf, to_camel
|
from . import Daf, to_camel
|
||||||
from .menu_category import MenuCategoryLink
|
from .menu_category import MenuCategoryLink
|
||||||
@@ -33,7 +33,7 @@ class Product(BaseModel):
|
|||||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||||
|
|
||||||
@field_serializer("valid_from")
|
@field_serializer("valid_from")
|
||||||
def serialize_valid_from(self, value: date | None, _info: Any) -> str | None:
|
def serialize_valid_from(self, value: date | None, _info: SerializationInfo) -> str | None:
|
||||||
return None if value is None else value.strftime("%d-%b-%Y")
|
return None if value is None else value.strftime("%d-%b-%Y")
|
||||||
|
|
||||||
@field_validator("valid_till", mode="before")
|
@field_validator("valid_till", mode="before")
|
||||||
@@ -46,7 +46,7 @@ class Product(BaseModel):
|
|||||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||||
|
|
||||||
@field_serializer("valid_till")
|
@field_serializer("valid_till")
|
||||||
def serialize_valid_till(self, value: date | None, _info: Any) -> str | None:
|
def serialize_valid_till(self, value: date | None, _info: SerializationInfo) -> str | None:
|
||||||
return None if value is None else value.strftime("%d-%b-%Y")
|
return None if value is None else value.strftime("%d-%b-%Y")
|
||||||
|
|
||||||
|
|
||||||
@@ -78,7 +78,7 @@ class StockKeepingUnit(BaseModel):
|
|||||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||||
|
|
||||||
@field_serializer("valid_from")
|
@field_serializer("valid_from")
|
||||||
def serialize_valid_from(self, value: date | None, _info: Any) -> str | None:
|
def serialize_valid_from(self, value: date | None, _info: SerializationInfo) -> str | None:
|
||||||
return None if value is None else value.strftime("%d-%b-%Y")
|
return None if value is None else value.strftime("%d-%b-%Y")
|
||||||
|
|
||||||
@field_validator("valid_till", mode="before")
|
@field_validator("valid_till", mode="before")
|
||||||
@@ -91,7 +91,7 @@ class StockKeepingUnit(BaseModel):
|
|||||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||||
|
|
||||||
@field_serializer("valid_till")
|
@field_serializer("valid_till")
|
||||||
def serialize_valid_till(self, value: date | None, _info: Any) -> str | None:
|
def serialize_valid_till(self, value: date | None, _info: SerializationInfo) -> str | None:
|
||||||
return None if value is None else value.strftime("%d-%b-%Y")
|
return None if value is None else value.strftime("%d-%b-%Y")
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
import uuid
|
import uuid
|
||||||
|
|
||||||
from datetime import date, datetime
|
from datetime import date, datetime
|
||||||
from typing import Any
|
|
||||||
|
|
||||||
from pydantic import BaseModel, ConfigDict, field_serializer, field_validator
|
from pydantic import BaseModel, ConfigDict, SerializationInfo, field_serializer, field_validator
|
||||||
|
|
||||||
from . import Daf, to_camel
|
from . import Daf, to_camel
|
||||||
|
|
||||||
@@ -30,5 +29,5 @@ class UpdateProductPrices(BaseModel):
|
|||||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||||
|
|
||||||
@field_serializer("date_")
|
@field_serializer("date_")
|
||||||
def serialize_date(self, value: date, _info: Any) -> str:
|
def serialize_date(self, value: date, _info: SerializationInfo) -> str:
|
||||||
return value.strftime("%d-%b-%Y")
|
return value.strftime("%d-%b-%Y")
|
||||||
@@ -1,9 +1,8 @@
|
|||||||
import uuid
|
import uuid
|
||||||
|
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from typing import Any
|
|
||||||
|
|
||||||
from pydantic import BaseModel, ConfigDict, field_serializer
|
from pydantic import BaseModel, ConfigDict, SerializationInfo, field_serializer
|
||||||
|
|
||||||
from . import to_camel
|
from . import to_camel
|
||||||
from .role import RoleItem
|
from .role import RoleItem
|
||||||
@@ -44,5 +43,5 @@ class UserList(BaseModel):
|
|||||||
model_config = ConfigDict(str_strip_whitespace=True, alias_generator=to_camel, populate_by_name=True)
|
model_config = ConfigDict(str_strip_whitespace=True, alias_generator=to_camel, populate_by_name=True)
|
||||||
|
|
||||||
@field_serializer("last_date")
|
@field_serializer("last_date")
|
||||||
def serialize_last_date(self, value: datetime | None, _info: Any) -> str | None:
|
def serialize_last_date(self, value: datetime | None, _info: SerializationInfo) -> str | None:
|
||||||
return None if value is None else value.strftime("%d-%b-%Y %H:%M")
|
return None if value is None else value.strftime("%d-%b-%Y %H:%M")
|
||||||
@@ -4,7 +4,7 @@ from datetime import datetime, timedelta
|
|||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
from typing import Annotated
|
from typing import Annotated
|
||||||
|
|
||||||
from pydantic import BaseModel, ConfigDict, Field, field_serializer, field_validator, model_validator
|
from pydantic import BaseModel, ConfigDict, Field, SerializationInfo, field_serializer, field_validator, model_validator
|
||||||
|
|
||||||
from ..core.config import settings
|
from ..core.config import settings
|
||||||
from ..models.inventory_type import InventoryType
|
from ..models.inventory_type import InventoryType
|
||||||
@@ -110,7 +110,7 @@ class Kot(BaseModel):
|
|||||||
model_config = ConfigDict(str_strip_whitespace=True, alias_generator=to_camel, populate_by_name=True)
|
model_config = ConfigDict(str_strip_whitespace=True, alias_generator=to_camel, populate_by_name=True)
|
||||||
|
|
||||||
@field_serializer("date_")
|
@field_serializer("date_")
|
||||||
def serialize_date(self, value: datetime, _info):
|
def serialize_date(self, value: datetime, _info: SerializationInfo) -> str:
|
||||||
return (value + timedelta(minutes=settings.TIMEZONE_OFFSET_MINUTES)).strftime("%d-%b-%Y %H:%M:%S")
|
return (value + timedelta(minutes=settings.TIMEZONE_OFFSET_MINUTES)).strftime("%d-%b-%Y %H:%M:%S")
|
||||||
|
|
||||||
|
|
||||||
@@ -149,25 +149,25 @@ class VoucherOut(BaseModel):
|
|||||||
)
|
)
|
||||||
|
|
||||||
@field_serializer("date_")
|
@field_serializer("date_")
|
||||||
def serialize_date(self, value: datetime, _info):
|
def serialize_date(self, value: datetime, _info: SerializationInfo) -> str:
|
||||||
return (value + timedelta(minutes=settings.TIMEZONE_OFFSET_MINUTES)).strftime("%H:%M")
|
return (value + timedelta(minutes=settings.TIMEZONE_OFFSET_MINUTES)).strftime("%H:%M")
|
||||||
|
|
||||||
@field_serializer("date_tip")
|
@field_serializer("date_tip")
|
||||||
def serialize_date_tip(self, value: datetime, _info):
|
def serialize_date_tip(self, value: datetime, _info: SerializationInfo) -> str:
|
||||||
return (value + timedelta(minutes=settings.TIMEZONE_OFFSET_MINUTES)).strftime("%d-%b-%Y %H:%M:%S")
|
return (value + timedelta(minutes=settings.TIMEZONE_OFFSET_MINUTES)).strftime("%d-%b-%Y %H:%M:%S")
|
||||||
|
|
||||||
@field_serializer("creation_date")
|
@field_serializer("creation_date")
|
||||||
def serialize_creation_date(self, value: datetime, _info):
|
def serialize_creation_date(self, value: datetime, _info: SerializationInfo) -> str:
|
||||||
return (value + timedelta(minutes=settings.TIMEZONE_OFFSET_MINUTES)).strftime("%H:%M")
|
return (value + timedelta(minutes=settings.TIMEZONE_OFFSET_MINUTES)).strftime("%H:%M")
|
||||||
|
|
||||||
@field_serializer("creation_date_tip")
|
@field_serializer("creation_date_tip")
|
||||||
def serialize_creation_date_tip(self, value: datetime, _info):
|
def serialize_creation_date_tip(self, value: datetime, _info: SerializationInfo) -> str:
|
||||||
return (value + timedelta(minutes=settings.TIMEZONE_OFFSET_MINUTES)).strftime("%d-%b-%Y %H:%M:%S")
|
return (value + timedelta(minutes=settings.TIMEZONE_OFFSET_MINUTES)).strftime("%d-%b-%Y %H:%M:%S")
|
||||||
|
|
||||||
@field_serializer("last_edit_date")
|
@field_serializer("last_edit_date")
|
||||||
def serialize_last_edit_date(self, value: datetime, _info):
|
def serialize_last_edit_date(self, value: datetime, _info: SerializationInfo) -> str:
|
||||||
return (value + timedelta(minutes=settings.TIMEZONE_OFFSET_MINUTES)).strftime("%H:%M")
|
return (value + timedelta(minutes=settings.TIMEZONE_OFFSET_MINUTES)).strftime("%H:%M")
|
||||||
|
|
||||||
@field_serializer("last_edit_date_tip")
|
@field_serializer("last_edit_date_tip")
|
||||||
def serialize_last_edit_date_tip(self, value: datetime, _info):
|
def serialize_last_edit_date_tip(self, value: datetime, _info: SerializationInfo) -> str:
|
||||||
return (value + timedelta(minutes=settings.TIMEZONE_OFFSET_MINUTES)).strftime("%d-%b-%Y %H:%M:%S")
|
return (value + timedelta(minutes=settings.TIMEZONE_OFFSET_MINUTES)).strftime("%d-%b-%Y %H:%M:%S")
|
||||||
Reference in new issue
Block a user