Product List and Query working

This commit is contained in:
tanshu committed 2020-11-08 19:09:31 +05:30
1 parent 0c9ebd29d7
commit 94b63e4385
12 files changed
+142 -99

No files matched your search

@@ -35,7 +35,7 @@ def upgrade():
"menu_categories", "menu_categories",
sa.Column("id", postgresql.UUID(as_uuid=True), server_default=sa.text("gen_random_uuid()"), nullable=False), sa.Column("id", postgresql.UUID(as_uuid=True), server_default=sa.text("gen_random_uuid()"), nullable=False),
sa.Column("name", sa.Unicode(length=255), nullable=False), sa.Column("name", sa.Unicode(length=255), nullable=False),
sa.Column("discount_limit", sa.Numeric(), nullable=False), sa.Column("discount_limit", sa.Numeric(precision=15, scale=5), nullable=False),
sa.Column("is_active", sa.Boolean(), nullable=False), sa.Column("is_active", sa.Boolean(), nullable=False),
sa.Column("is_fixture", sa.Boolean(), nullable=False), sa.Column("is_fixture", sa.Boolean(), nullable=False),
sa.Column("sort_order", sa.Integer(), nullable=False), sa.Column("sort_order", sa.Integer(), nullable=False),
@@ -107,7 +107,7 @@ def upgrade():
"taxes", "taxes",
sa.Column("id", postgresql.UUID(as_uuid=True), server_default=sa.text("gen_random_uuid()"), nullable=False), sa.Column("id", postgresql.UUID(as_uuid=True), server_default=sa.text("gen_random_uuid()"), nullable=False),
sa.Column("name", sa.Unicode(length=255), nullable=False), sa.Column("name", sa.Unicode(length=255), nullable=False),
sa.Column("rate", sa.Numeric(), nullable=False), sa.Column("rate", sa.Numeric(precision=15, scale=5), nullable=False),
sa.Column("is_fixture", sa.Boolean(), nullable=False), sa.Column("is_fixture", sa.Boolean(), nullable=False),
sa.PrimaryKeyConstraint("id", name=op.f("pk_taxes")), sa.PrimaryKeyConstraint("id", name=op.f("pk_taxes")),
sa.UniqueConstraint("name", name=op.f("uq_taxes_name")), sa.UniqueConstraint("name", name=op.f("uq_taxes_name")),
@@ -163,7 +163,7 @@ def upgrade():
"guest_book", "guest_book",
sa.Column("id", postgresql.UUID(as_uuid=True), server_default=sa.text("gen_random_uuid()"), nullable=False), sa.Column("id", postgresql.UUID(as_uuid=True), server_default=sa.text("gen_random_uuid()"), nullable=False),
sa.Column("customer_id", postgresql.UUID(as_uuid=True), nullable=False), sa.Column("customer_id", postgresql.UUID(as_uuid=True), nullable=False),
sa.Column("pax", sa.Numeric(), nullable=False), sa.Column("pax", sa.Integer, nullable=False),
sa.Column("creation_date", sa.DateTime(timezone=True), nullable=False), sa.Column("creation_date", sa.DateTime(timezone=True), nullable=False),
sa.ForeignKeyConstraint( sa.ForeignKeyConstraint(
["customer_id"], ["customer_id"],
@@ -177,7 +177,7 @@ def upgrade():
sa.Column("id", postgresql.UUID(as_uuid=True), server_default=sa.text("gen_random_uuid()"), nullable=False), sa.Column("id", postgresql.UUID(as_uuid=True), server_default=sa.text("gen_random_uuid()"), nullable=False),
sa.Column("name", sa.Unicode(length=255), nullable=False), sa.Column("name", sa.Unicode(length=255), nullable=False),
sa.Column("show_in_bill", sa.Boolean(), nullable=False), sa.Column("show_in_bill", sa.Boolean(), nullable=False),
sa.Column("price", sa.Numeric(), nullable=False), sa.Column("price", sa.Numeric(precision=15, scale=2), nullable=False),
sa.Column("is_active", sa.Boolean(), nullable=False), sa.Column("is_active", sa.Boolean(), nullable=False),
sa.Column("modifier_category_id", postgresql.UUID(as_uuid=True), nullable=False), sa.Column("modifier_category_id", postgresql.UUID(as_uuid=True), nullable=False),
sa.ForeignKeyConstraint( sa.ForeignKeyConstraint(
@@ -260,10 +260,10 @@ def upgrade():
sa.Column("menu_category_id", postgresql.UUID(as_uuid=True), nullable=False), sa.Column("menu_category_id", postgresql.UUID(as_uuid=True), nullable=False),
sa.Column("sale_category_id", postgresql.UUID(as_uuid=True), nullable=True), sa.Column("sale_category_id", postgresql.UUID(as_uuid=True), nullable=True),
sa.Column("sale_category_name", sa.Unicode(length=255), nullable=True), sa.Column("sale_category_name", sa.Unicode(length=255), nullable=True),
sa.Column("price", sa.Numeric(), nullable=False), sa.Column("price", sa.Numeric(precision=15, scale=2), nullable=False),
sa.Column("has_happy_hour", sa.Boolean(), nullable=False), sa.Column("has_happy_hour", sa.Boolean(), nullable=False),
sa.Column("is_not_available", sa.Boolean(), nullable=False), sa.Column("is_not_available", sa.Boolean(), nullable=False),
sa.Column("quantity", sa.Numeric(), nullable=False), sa.Column("quantity", sa.Numeric(precision=15, scale=2), nullable=False),
sa.Column("is_active", sa.Boolean(), nullable=False), sa.Column("is_active", sa.Boolean(), nullable=False),
sa.Column("sort_order", sa.Integer(), nullable=False), sa.Column("sort_order", sa.Integer(), nullable=False),
sa.ForeignKeyConstraint( sa.ForeignKeyConstraint(
@@ -283,9 +283,9 @@ def upgrade():
"vouchers", "vouchers",
sa.Column("id", postgresql.UUID(as_uuid=True), server_default=sa.text("gen_random_uuid()"), nullable=False), sa.Column("id", postgresql.UUID(as_uuid=True), server_default=sa.text("gen_random_uuid()"), nullable=False),
sa.Column("date", sa.DateTime(), nullable=False), sa.Column("date", sa.DateTime(), nullable=False),
sa.Column("pax", sa.Numeric(), nullable=False), sa.Column("pax", sa.Integer(), nullable=False),
sa.Column("bill_id", sa.Numeric(), nullable=True), sa.Column("bill_id", sa.Integer(), nullable=True),
sa.Column("kot_id", sa.Numeric(), nullable=False), sa.Column("kot_id", sa.Integer(), nullable=False),
sa.Column("creation_date", sa.DateTime(timezone=True), nullable=False), sa.Column("creation_date", sa.DateTime(timezone=True), nullable=False),
sa.Column("last_edit_date", sa.DateTime(timezone=True), nullable=False), sa.Column("last_edit_date", sa.DateTime(timezone=True), nullable=False),
sa.Column("food_table_id", postgresql.UUID(as_uuid=True), nullable=False), sa.Column("food_table_id", postgresql.UUID(as_uuid=True), nullable=False),
@@ -314,7 +314,7 @@ def upgrade():
"kots", "kots",
sa.Column("id", postgresql.UUID(as_uuid=True), server_default=sa.text("gen_random_uuid()"), nullable=False), sa.Column("id", postgresql.UUID(as_uuid=True), server_default=sa.text("gen_random_uuid()"), nullable=False),
sa.Column("voucher_id", postgresql.UUID(as_uuid=True), nullable=False), sa.Column("voucher_id", postgresql.UUID(as_uuid=True), nullable=False),
sa.Column("code", sa.Numeric(), nullable=False), sa.Column("code", sa.Integer(), nullable=False),
sa.Column("food_table_id", postgresql.UUID(as_uuid=True), nullable=False), sa.Column("food_table_id", postgresql.UUID(as_uuid=True), nullable=False),
sa.Column("date", sa.DateTime(), nullable=False), sa.Column("date", sa.DateTime(), nullable=False),
sa.Column("user_id", postgresql.UUID(as_uuid=True), nullable=False), sa.Column("user_id", postgresql.UUID(as_uuid=True), nullable=False),
@@ -400,7 +400,7 @@ def upgrade():
sa.Column("id", postgresql.UUID(as_uuid=True), server_default=sa.text("gen_random_uuid()"), nullable=False), sa.Column("id", postgresql.UUID(as_uuid=True), server_default=sa.text("gen_random_uuid()"), nullable=False),
sa.Column("voucher_id", postgresql.UUID(as_uuid=True), nullable=False), sa.Column("voucher_id", postgresql.UUID(as_uuid=True), nullable=False),
sa.Column("settled", sa.Integer(), nullable=False), sa.Column("settled", sa.Integer(), nullable=False),
sa.Column("amount", sa.Numeric(), nullable=False), sa.Column("amount", sa.Numeric(precision=15, scale=2), nullable=False),
sa.ForeignKeyConstraint( sa.ForeignKeyConstraint(
["settled"], ["settled"],
["settle_options.id"], ["settle_options.id"],
@@ -420,13 +420,13 @@ def upgrade():
sa.Column("id", postgresql.UUID(as_uuid=True), server_default=sa.text("gen_random_uuid()"), nullable=False), sa.Column("id", postgresql.UUID(as_uuid=True), server_default=sa.text("gen_random_uuid()"), nullable=False),
sa.Column("kot_id", postgresql.UUID(as_uuid=True), nullable=False), sa.Column("kot_id", postgresql.UUID(as_uuid=True), nullable=False),
sa.Column("product_id", postgresql.UUID(as_uuid=True), nullable=False), sa.Column("product_id", postgresql.UUID(as_uuid=True), nullable=False),
sa.Column("quantity", sa.Numeric(), nullable=True), sa.Column("quantity", sa.Numeric(precision=15, scale=2), nullable=True),
sa.Column("price", sa.Numeric(), nullable=True), sa.Column("price", sa.Numeric(precision=15, scale=2), nullable=True),
sa.Column("is_happy_hour", sa.Boolean(), nullable=False), sa.Column("is_happy_hour", sa.Boolean(), nullable=False),
sa.Column("tax_rate", sa.Numeric(), nullable=True), sa.Column("tax_rate", sa.Numeric(precision=15, scale=5), nullable=True),
sa.Column("tax_id", postgresql.UUID(as_uuid=True), nullable=False), sa.Column("tax_id", postgresql.UUID(as_uuid=True), nullable=False),
sa.Column("discount", sa.Numeric(), nullable=True), sa.Column("discount", sa.Numeric(precision=15, scale=5), nullable=True),
sa.Column("sort_order", sa.Numeric(), nullable=False), sa.Column("sort_order", sa.Integer(), nullable=False),
sa.ForeignKeyConstraint(["kot_id"], ["kots.id"], name=op.f("fk_inventories_kot_id_kots")), sa.ForeignKeyConstraint(["kot_id"], ["kots.id"], name=op.f("fk_inventories_kot_id_kots")),
sa.ForeignKeyConstraint( sa.ForeignKeyConstraint(
["product_id"], ["product_id"],
@@ -449,7 +449,7 @@ def upgrade():
sa.Column("id", postgresql.UUID(as_uuid=True), server_default=sa.text("gen_random_uuid()"), nullable=False), sa.Column("id", postgresql.UUID(as_uuid=True), server_default=sa.text("gen_random_uuid()"), nullable=False),
sa.Column("inventory_id", postgresql.UUID(as_uuid=True), nullable=False), sa.Column("inventory_id", postgresql.UUID(as_uuid=True), nullable=False),
sa.Column("modifier_id", postgresql.UUID(as_uuid=True), nullable=False), sa.Column("modifier_id", postgresql.UUID(as_uuid=True), nullable=False),
sa.Column("price", sa.Numeric(), nullable=False), sa.Column("price", sa.Numeric(precision=15, scale=2), nullable=False),
sa.ForeignKeyConstraint( sa.ForeignKeyConstraint(
["inventory_id"], ["inventory_id"],
["inventories.id"], ["inventories.id"],
+6 -5
View File
@@ -90,7 +90,7 @@ class Tax(Base):
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4 "id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
) )
name = Column("name", Unicode(255), nullable=False, unique=True) name = Column("name", Unicode(255), nullable=False, unique=True)
rate = Column("rate", Numeric, nullable=False) rate = Column("rate", Numeric(precision=15, scale=5), nullable=False)
is_fixture = Column("is_fixture", Boolean, nullable=False) is_fixture = Column("is_fixture", Boolean, nullable=False)
def __init__(self, name=None, rate=None, is_fixture=False, id_=None): def __init__(self, name=None, rate=None, is_fixture=False, id_=None):
@@ -107,7 +107,7 @@ class MenuCategory(Base):
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4 "id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
) )
name = Column("name", Unicode(255), nullable=False, unique=True) name = Column("name", Unicode(255), nullable=False, unique=True)
discount_limit = Column("discount_limit", Numeric, nullable=False) discount_limit = Column("discount_limit", Numeric(precision=15, scale=5), nullable=False)
is_active = Column("is_active", Boolean, nullable=False) is_active = Column("is_active", Boolean, nullable=False)
is_fixture = Column("is_fixture", Boolean, nullable=False) is_fixture = Column("is_fixture", Boolean, nullable=False)
@@ -145,6 +145,7 @@ class ProductVersions(Base):
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4 "id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
) )
version_id = Column("version_id", UUID(as_uuid=True), ForeignKey("product_histories.id"), nullable=False) version_id = Column("version_id", UUID(as_uuid=True), ForeignKey("product_histories.id"), nullable=False)
histories = relationship("ProductHistory")
modifier_categories_products = Table( modifier_categories_products = Table(
@@ -181,10 +182,10 @@ class ProductHistory(Base):
ForeignKey("sale_categories.id"), ForeignKey("sale_categories.id"),
nullable=False, nullable=False,
) )
price = Column("price", Numeric, nullable=False) price = Column("price", Numeric(precision=15, scale=2), nullable=False)
has_happy_hour = Column("has_happy_hour", Boolean, nullable=False) has_happy_hour = Column("has_happy_hour", Boolean, nullable=False)
is_not_available = Column("is_not_available", Boolean, nullable=False) is_not_available = Column("is_not_available", Boolean, nullable=False)
quantity = Column("quantity", Numeric, nullable=False) quantity = Column("quantity", Numeric(precision=15, scale=2), nullable=False)
sort_order = Column("sort_order", Integer, nullable=False) sort_order = Column("sort_order", Integer, nullable=False)
valid_from = Column("valid_from", Date(), nullable=True) valid_from = Column("valid_from", Date(), nullable=True)
@@ -291,7 +292,7 @@ class Modifier(Base):
) )
name = Column("name", Unicode(255), nullable=False, unique=True) name = Column("name", Unicode(255), nullable=False, unique=True)
show_in_bill = Column("show_in_bill", Boolean, nullable=False) show_in_bill = Column("show_in_bill", Boolean, nullable=False)
price = Column("price", Numeric, nullable=False) price = Column("price", Numeric(precision=15, scale=2), nullable=False)
is_active = Column("is_active", Boolean, nullable=False) is_active = Column("is_active", Boolean, nullable=False)
modifier_category_id = Column( modifier_category_id = Column(
"modifier_category_id", "modifier_category_id",
+12 -12
View File
@@ -39,7 +39,7 @@ class GuestBook(Base):
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4 "id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
) )
customer_id = Column("customer_id", UUID(as_uuid=True), ForeignKey("customers.id"), nullable=False) customer_id = Column("customer_id", UUID(as_uuid=True), ForeignKey("customers.id"), nullable=False)
pax = Column("pax", Numeric, nullable=False) pax = Column("pax", Integer, nullable=False)
date = Column("creation_date", DateTime(timezone=True), nullable=False) date = Column("creation_date", DateTime(timezone=True), nullable=False)
customer = relationship("Customer") customer = relationship("Customer")
@@ -98,7 +98,7 @@ class InventoryModifier(Base):
) )
inventory_id = Column("inventory_id", UUID(as_uuid=True), ForeignKey("inventories.id"), nullable=False) inventory_id = Column("inventory_id", UUID(as_uuid=True), ForeignKey("inventories.id"), nullable=False)
modifier_id = Column("modifier_id", UUID(as_uuid=True), ForeignKey("modifiers.id"), nullable=False) modifier_id = Column("modifier_id", UUID(as_uuid=True), ForeignKey("modifiers.id"), nullable=False)
price = Column("price", Numeric, nullable=False) price = Column("price", Numeric(precision=15, scale=2), nullable=False)
inventory = relationship("Inventory", backref="modifiers") inventory = relationship("Inventory", backref="modifiers")
modifier = relationship("Modifier") modifier = relationship("Modifier")
@@ -117,9 +117,9 @@ class Voucher(Base):
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4 "id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
) )
date = Column("date", DateTime, nullable=False, index=True) date = Column("date", DateTime, nullable=False, index=True)
pax = Column("pax", Numeric, nullable=False) pax = Column("pax", Integer, nullable=False)
bill_id = Column("bill_id", Numeric) bill_id = Column("bill_id", Integer)
kot_id = Column("kot_id", Numeric, nullable=False, unique=True) kot_id = Column("kot_id", Integer, nullable=False, unique=True)
creation_date = Column("creation_date", DateTime(timezone=True), nullable=False) creation_date = Column("creation_date", DateTime(timezone=True), nullable=False)
last_edit_date = Column("last_edit_date", DateTime(timezone=True), nullable=False) last_edit_date = Column("last_edit_date", DateTime(timezone=True), nullable=False)
food_table_id = Column( food_table_id = Column(
@@ -222,7 +222,7 @@ class Kot(Base):
nullable=False, nullable=False,
index=True, index=True,
) )
code = Column("code", Numeric, nullable=False, unique=True) code = Column("code", Integer, nullable=False, unique=True)
food_table_id = Column( food_table_id = Column(
"food_table_id", "food_table_id",
UUID(as_uuid=True), UUID(as_uuid=True),
@@ -267,7 +267,7 @@ class Settlement(Base):
index=True, index=True,
) )
settled = Column("settled", Integer, ForeignKey("settle_options.id"), nullable=False) settled = Column("settled", Integer, ForeignKey("settle_options.id"), nullable=False)
amount = Column("amount", Numeric, nullable=False) amount = Column("amount", Numeric(precision=15, scale=2), nullable=False)
settle_option = relationship("SettleOption") settle_option = relationship("SettleOption")
@@ -312,13 +312,13 @@ class Inventory(Base):
) )
kot_id = Column("kot_id", UUID(as_uuid=True), ForeignKey("kots.id"), nullable=False, index=True) kot_id = Column("kot_id", UUID(as_uuid=True), ForeignKey("kots.id"), nullable=False, index=True)
product_id = Column("product_id", UUID(as_uuid=True), ForeignKey("product_versions.id"), nullable=False) product_id = Column("product_id", UUID(as_uuid=True), ForeignKey("product_versions.id"), nullable=False)
quantity = Column("quantity", Numeric) quantity = Column("quantity", Numeric(precision=15, scale=2))
price = Column("price", Numeric) price = Column("price", Numeric(precision=15, scale=2))
is_happy_hour = Column("is_happy_hour", Boolean, nullable=False) is_happy_hour = Column("is_happy_hour", Boolean, nullable=False)
tax_rate = Column("tax_rate", Numeric) tax_rate = Column("tax_rate", Numeric(precision=15, scale=5))
tax_id = Column("tax_id", UUID(as_uuid=True), ForeignKey("taxes.id"), nullable=False) tax_id = Column("tax_id", UUID(as_uuid=True), ForeignKey("taxes.id"), nullable=False)
discount = Column("discount", Numeric) discount = Column("discount", Numeric(precision=15, scale=5))
sort_order = Column("sort_order", Numeric, nullable=False) sort_order = Column("sort_order", Integer, nullable=False)
kot = relationship("Kot", backref="inventories") kot = relationship("Kot", backref="inventories")
tax = relationship("Tax", foreign_keys=tax_id) tax = relationship("Tax", foreign_keys=tax_id)
+1 -1
View File
@@ -10,7 +10,7 @@ from sqlalchemy.orm import Session
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 SessionLocal from ..db.session import SessionLocal
from ..models.master import MenuCategory, Product from ..models.master import MenuCategory, ProductVersions
from ..schemas.auth import UserToken from ..schemas.auth import UserToken
+1 -1
View File
@@ -11,7 +11,7 @@ from sqlalchemy.orm import Session
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 SessionLocal from ..db.session import SessionLocal
from ..models.master import MenuCategory, ModifierCategory, Product from ..models.master import MenuCategory, ModifierCategory, ProductVersions
from ..schemas.auth import UserToken from ..schemas.auth import UserToken
+85 -57
View File
@@ -1,16 +1,19 @@
import uuid import uuid
from datetime import date, datetime, timedelta
from typing import List, Optional from typing import List, Optional
import barker.schemas.master as schemas import barker.schemas.master as schemas
from fastapi import APIRouter, Depends, HTTPException, Security, status from fastapi import APIRouter, Depends, HTTPException, Security, status
from sqlalchemy import and_, or_
from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.exc import SQLAlchemyError
from sqlalchemy.orm import Session, joinedload from sqlalchemy.orm import Session, contains_eager, joinedload
from ..core.config import settings
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 SessionLocal from ..db.session import SessionLocal
from ..models.master import Product from ..models.master import MenuCategory, ProductHistory, ProductVersions, SaleCategory
from ..schemas.auth import UserToken from ..schemas.auth import UserToken
@@ -70,7 +73,7 @@ def save(
user: UserToken = Security(get_user, scopes=["products"]), user: UserToken = Security(get_user, scopes=["products"]),
): ):
try: try:
item = Product( item = ProductHistory(
name=data.name, name=data.name,
units=data.units, units=data.units,
menu_category_id=data.menu_category.id_, menu_category_id=data.menu_category.id_,
@@ -158,14 +161,35 @@ def show_blank(
@router.get("/list") @router.get("/list")
def show_list(db: Session = Depends(get_db), user: UserToken = Depends(get_user)): def show_list(d: str = None, db: Session = Depends(get_db), user: UserToken = Depends(get_user)):
date_ = (
(datetime.now() - timedelta(minutes=settings.NEW_DAY_OFFSET_MINUTES)).date()
if d is None
else datetime.strptime(d, "%d-%b-%Y").date()
)
return [ return [
product_info(item) product_info(item.histories)
for item in db.query(Product) for item in db.query(ProductVersions)
.order_by(Product.menu_category_id) .join(ProductVersions.histories)
.order_by(Product.sort_order) .join(ProductHistory.menu_category)
.order_by(Product.name) .filter(
.options(joinedload(Product.menu_category), joinedload(Product.sale_category)) and_(
or_(ProductHistory.valid_from == None, ProductHistory.valid_from <= date_),
or_(ProductHistory.valid_till == None, ProductHistory.valid_till >= date_),
)
)
.order_by(MenuCategory.sort_order)
.order_by(MenuCategory.name)
.order_by(ProductHistory.sort_order)
.order_by(ProductHistory.name)
.options(
joinedload(ProductVersions.histories, innerjoin=True),
joinedload(ProductVersions.histories, ProductHistory.menu_category, innerjoin=True),
joinedload(ProductVersions.histories, ProductHistory.sale_category, innerjoin=True),
contains_eager(ProductVersions.histories),
contains_eager(ProductVersions.histories, ProductHistory.menu_category),
contains_eager(ProductVersions.histories, ProductHistory.sale_category),
)
.all() .all()
] ]
@@ -173,58 +197,42 @@ def show_list(db: Session = Depends(get_db), user: UserToken = Depends(get_user)
@router.get("/query") @router.get("/query")
async def show_term( async def show_term(
mc: uuid.UUID = None, mc: uuid.UUID = None,
a: bool = None, d: str = None,
db: Session = Depends(get_db), db: Session = Depends(get_db),
current_user: UserToken = Depends(get_user), current_user: UserToken = Depends(get_user),
): ):
date_ = (
(datetime.now() - timedelta(minutes=settings.NEW_DAY_OFFSET_MINUTES)).date()
if d is None
else datetime.strptime(d, "%d-%b-%Y").date()
)
list_ = [] list_ = []
for item in ( for item in (
db.query(Product) db.query(ProductVersions)
.filter(Product.is_active == a, Product.menu_category_id == mc) .join(ProductVersions.histories)
.order_by(Product.sort_order, Product.name) .join(ProductVersions.histories, ProductHistory.sale_category)
.join(ProductVersions.histories, ProductHistory.sale_category, SaleCategory.tax)
.filter(
and_(
ProductHistory.menu_category_id == mc,
or_(ProductHistory.valid_from == None, ProductHistory.valid_from <= date_),
or_(ProductHistory.valid_till == None, ProductHistory.valid_till >= date_),
)
)
.order_by(ProductHistory.sort_order, ProductHistory.name)
.options(
joinedload(ProductVersions.histories, innerjoin=True),
joinedload(ProductVersions.histories, ProductHistory.sale_category, innerjoin=True),
joinedload(ProductVersions.histories, ProductHistory.sale_category, SaleCategory.tax, innerjoin=True),
contains_eager(ProductVersions.histories),
contains_eager(ProductVersions.histories, ProductHistory.sale_category),
contains_eager(ProductVersions.histories, ProductHistory.sale_category, SaleCategory.tax),
)
.all() .all()
): ):
list_.append( list_.append(query_product_info(item.histories, False))
{ if item.histories.has_happy_hour:
"id": item.id, list_.append(query_product_info(item.histories, True))
"name": item.full_name,
"saleCategory": {
"id": item.sale_category_id,
"name": item.sale_category.name,
},
"tax": {
"id": item.sale_category.tax_id,
"name": item.sale_category.tax.name,
"rate": item.sale_category.tax.rate,
},
"price": item.price,
"hasHappyHour": False,
"isNotAvailable": item.is_not_available,
"isActive": item.is_active,
"sortOrder": item.sort_order,
}
)
if item.has_happy_hour:
list_.append(
{
"id": item.id,
"name": "H H " + item.full_name,
"saleCategory": {
"id": item.sale_category_id,
"name": item.sale_category.name,
},
"tax": {
"id": item.sale_category.tax_id,
"name": item.sale_category.tax.name,
"rate": item.sale_category.tax.rate,
},
"price": item.price,
"hasHappyHour": True,
"isNotAvailable": item.is_not_available,
"isActive": item.is_active,
"sortOrder": item.sort_order,
}
)
return list_ return list_
@@ -238,7 +246,27 @@ def show_id(
return product_info(item) return product_info(item)
def product_info(item: Optional[Product]): def query_product_info(item: ProductHistory, happy_hour: bool):
return {
"id": item.id,
"name": ("H H " if happy_hour else "") + item.full_name,
"saleCategory": {
"id": item.sale_category_id,
"name": item.sale_category.name,
},
"tax": {
"id": item.sale_category.tax_id,
"name": item.sale_category.tax.name,
"rate": item.sale_category.tax.rate,
},
"price": item.price,
"hasHappyHour": happy_hour,
"isNotAvailable": item.is_not_available,
"sortOrder": item.sort_order,
}
def product_info(item: Optional[ProductHistory]):
if item is None: if item is None:
return { return {
"name": "", "name": "",
@@ -263,6 +291,6 @@ def product_info(item: Optional[Product]):
"price": item.price, "price": item.price,
"hasHappyHour": item.has_happy_hour, "hasHappyHour": item.has_happy_hour,
"isNotAvailable": item.is_not_available, "isNotAvailable": item.is_not_available,
"isActive": item.is_active, "isActive": True,
"sortOrder": item.sort_order, "sortOrder": item.sort_order,
} }
@@ -7,7 +7,7 @@ from sqlalchemy.sql.expression import func
from ...core.config import settings from ...core.config import settings
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 SessionLocal from ...db.session import SessionLocal
from ...models import Inventory, Kot, Product, Voucher, VoucherType from ...models import Inventory, Kot, ProductVersions, Voucher, VoucherType
from ...schemas.auth import UserToken from ...schemas.auth import UserToken
@@ -10,7 +10,14 @@ from sqlalchemy.orm import Session
from ...core.config import settings from ...core.config import settings
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 SessionLocal from ...db.session import SessionLocal
from ...models import Inventory, Kot, Product, SaleCategory, Voucher, VoucherType from ...models import (
Inventory,
Kot,
ProductVersions,
SaleCategory,
Voucher,
VoucherType,
)
from ...printing.discount_report import print_discount_report from ...printing.discount_report import print_discount_report
from ...schemas.auth import UserToken from ...schemas.auth import UserToken
from ...schemas.discount_report import DiscountReport, DiscountReportItem from ...schemas.discount_report import DiscountReport, DiscountReportItem
@@ -11,7 +11,7 @@ from ...models import (
Inventory, Inventory,
Kot, Kot,
MenuCategory, MenuCategory,
Product, ProductVersions,
SaleCategory, SaleCategory,
Voucher, Voucher,
VoucherType, VoucherType,
+1 -1
View File
@@ -13,7 +13,7 @@ from ...db.session import SessionLocal
from ...models import ( from ...models import (
Inventory, Inventory,
Kot, Kot,
Product, ProductVersions,
SaleCategory, SaleCategory,
Settlement, Settlement,
SettleOption, SettleOption,
+1 -1
View File
@@ -17,7 +17,7 @@ from ...models import (
Inventory, Inventory,
InventoryModifier, InventoryModifier,
Kot, Kot,
Product, ProductVersions,
Voucher, Voucher,
VoucherType, VoucherType,
) )
+8 -1
View File
@@ -12,7 +12,14 @@ from sqlalchemy.orm import Session
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 SessionLocal from ...db.session import SessionLocal
from ...models import Inventory, InventoryModifier, Kot, Product, Voucher, VoucherType from ...models import (
Inventory,
InventoryModifier,
Kot,
ProductVersions,
Voucher,
VoucherType,
)
from ...printing import print_bill, print_kot from ...printing import print_bill, print_kot
from ...routers.voucher import ( from ...routers.voucher import (
check_permissions, check_permissions,