Chore: Update dependencies
Chore: Lint Chore: Remove old useless files Feature: Add more fields to case detail
This commit is contained in:
parent
eab3a725dc
commit
789722c0a9
luthor/luthor
__version__.py
core
db
models
routers
menu_category.pymodifier.pymodifier_category.pysale_category.pysection_printer.pyupdate_product_prices.py
voucher
schemas
discount_report.pyguest_book.pyheader_footer.pylogin_history.pymaster.pymenu_category.pymerge_move.pymodifier.pymodifier_category.pyprinter.pyproduct.pyproduct_link.pyreceive_payment.pysale_category.pysale_report.pysection.pysection_printer.pysplit.pytable.pytax.pytax_report.pyupdate_product_prices.pyvoucher.py
otis
@ -1 +1 @@
|
||||
__version__ = "6.3.0"
|
||||
__version__ = "1.0.0"
|
||||
|
@ -1,40 +0,0 @@
|
||||
from datetime import date, timedelta
|
||||
|
||||
|
||||
def get_date(session) -> str:
|
||||
if "date" not in session:
|
||||
session["date"] = date.today().strftime("%d-%b-%Y")
|
||||
return session["date"]
|
||||
|
||||
|
||||
def set_date(date_, session):
|
||||
session["date"] = date_
|
||||
return session["date"]
|
||||
|
||||
|
||||
def get_start_date(session):
|
||||
if "start" not in session:
|
||||
session["start"] = get_first_day(date.today()).strftime("%d-%b-%Y")
|
||||
return session["start"]
|
||||
|
||||
|
||||
def get_finish_date(session):
|
||||
if "finish" not in session:
|
||||
session["finish"] = get_last_day(date.today()).strftime("%d-%b-%Y")
|
||||
return session["finish"]
|
||||
|
||||
|
||||
def set_period(start, finish, session):
|
||||
session["start"] = start if isinstance(start, str) else start.strftime("%d-%b-%Y")
|
||||
session["finish"] = finish if isinstance(finish, str) else finish.strftime("%d-%b-%Y")
|
||||
|
||||
|
||||
def get_first_day(dt, d_years=0, d_months=0):
|
||||
# d_years, d_months are "deltas" to apply to dt
|
||||
y, m = dt.year + d_years, dt.month + d_months
|
||||
a, m = divmod(m - 1, 12)
|
||||
return date(y + a, m + 1, 1)
|
||||
|
||||
|
||||
def get_last_day(dt):
|
||||
return get_first_day(dt, 0, 1) + timedelta(-1)
|
@ -1,21 +1,21 @@
|
||||
# Import all the models, so that Base has them before being
|
||||
# imported by Alembic
|
||||
from luthor.db.base_class import Base # noqa
|
||||
from luthor.models.act import Act # noqa
|
||||
from luthor.models.advocate import Advocate # noqa
|
||||
from luthor.models.case import Case # noqa
|
||||
from luthor.models.case_source import CaseSource # noqa
|
||||
from luthor.models.case_type import CaseType # noqa
|
||||
from luthor.models.contact import Contact # noqa
|
||||
from luthor.models.court import Court # noqa
|
||||
from luthor.models.court_status import CourtStatus # noqa
|
||||
from luthor.models.department import Department # noqa
|
||||
from luthor.models.hearing import Hearing # noqa
|
||||
from luthor.models.nature import Nature # noqa
|
||||
from luthor.models.office import Office # noqa
|
||||
from luthor.models.office_status import OfficeStatus # noqa
|
||||
from luthor.models.permission import Permission # noqa
|
||||
from luthor.models.role import Role # noqa
|
||||
from luthor.models.role_permission import role_permissions # noqa
|
||||
from luthor.models.user import User # noqa
|
||||
from luthor.models.user_role import user_roles # noqa
|
||||
from luthor.db.base_class import Base # noqa: F401
|
||||
from luthor.models.act import Act # noqa: F401
|
||||
from luthor.models.advocate import Advocate # noqa: F401
|
||||
from luthor.models.case import Case # noqa: F401
|
||||
from luthor.models.case_source import CaseSource # noqa: F401
|
||||
from luthor.models.case_type import CaseType # noqa: F401
|
||||
from luthor.models.contact import Contact # noqa: F401
|
||||
from luthor.models.court import Court # noqa: F401
|
||||
from luthor.models.court_status import CourtStatus # noqa: F401
|
||||
from luthor.models.department import Department # noqa: F401
|
||||
from luthor.models.hearing import Hearing # noqa: F401
|
||||
from luthor.models.nature import Nature # noqa: F401
|
||||
from luthor.models.office import Office # noqa: F401
|
||||
from luthor.models.office_status import OfficeStatus # noqa: F401
|
||||
from luthor.models.permission import Permission # noqa: F401
|
||||
from luthor.models.role import Role # noqa: F401
|
||||
from luthor.models.role_permission import role_permissions # noqa: F401
|
||||
from luthor.models.user import User # noqa: F401
|
||||
from luthor.models.user_role import user_roles # noqa: F401
|
||||
|
@ -1,217 +0,0 @@
|
||||
import uuid
|
||||
|
||||
from barker.core.config import settings # noqa: F401
|
||||
from barker.models.auth import Permission, Role, User
|
||||
from barker.models.master import (
|
||||
Customer,
|
||||
DbSetting,
|
||||
ModifierCategory,
|
||||
Section,
|
||||
SettleOption,
|
||||
)
|
||||
from brewman.db import base # noqa: F401
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
|
||||
# make sure all SQL Alchemy models are imported (app.db.base) before initializing DB
|
||||
# otherwise, SQL Alchemy might fail to initialize relationships properly
|
||||
# for more details: https://github.com/tiangolo/full-stack-fastapi-postgresql/issues/28
|
||||
|
||||
|
||||
def init_db(db: Session) -> None:
|
||||
# Tables should be created with Alembic migrations
|
||||
# But if you don't want to use migrations, create
|
||||
# the tables un-commenting the next line
|
||||
# Base.metadata.create_all(bind=engine)
|
||||
|
||||
prod = True
|
||||
if prod:
|
||||
db.add(Permission("Guest Book", uuid.UUID("7669dfc9-cc75-4e48-b267-145c8832a83c")))
|
||||
db.add(Permission("Printers", uuid.UUID("5b66c6f6-003a-4ef8-ba28-49b8ff1ac33c")))
|
||||
db.add(Permission("Sections", uuid.UUID("c973f32c-a37b-496a-8dc5-60d2e4c39e97")))
|
||||
db.add(
|
||||
Permission(
|
||||
"Section Printers",
|
||||
uuid.UUID("7a04ba63-5d08-4078-9051-a6d91cce3e48"),
|
||||
)
|
||||
)
|
||||
else:
|
||||
add_permissions(db)
|
||||
|
||||
main_section = Section("Main", uuid.UUID("3f13f6e7-dc76-4fca-8fdb-b2bbf29b35df"))
|
||||
db.add(main_section)
|
||||
mcs = [
|
||||
ModifierCategory(
|
||||
"Old Modifiers",
|
||||
0,
|
||||
0,
|
||||
True,
|
||||
0,
|
||||
uuid.UUID("e046ad33-dc65-4c78-8833-c3d3538d44c0"),
|
||||
),
|
||||
ModifierCategory(
|
||||
"Bar Instructions",
|
||||
0,
|
||||
0,
|
||||
True,
|
||||
0,
|
||||
uuid.UUID("b572f401-3c2f-48b9-8973-ada5a6e4d3a6"),
|
||||
),
|
||||
ModifierCategory(
|
||||
"Delivery",
|
||||
0,
|
||||
0,
|
||||
True,
|
||||
0,
|
||||
uuid.UUID("caa72832-5034-405e-8442-68a8cc12ace9"),
|
||||
),
|
||||
ModifierCategory(
|
||||
"Kitchen Instructions",
|
||||
0,
|
||||
0,
|
||||
True,
|
||||
0,
|
||||
uuid.UUID("d6a0595f-e209-42e4-bb12-b7499f9a9c4d"),
|
||||
),
|
||||
ModifierCategory(
|
||||
"Mixers",
|
||||
0,
|
||||
0,
|
||||
True,
|
||||
0,
|
||||
uuid.UUID("60ca9122-adc5-463b-ad5f-33a68df8c3ae"),
|
||||
),
|
||||
ModifierCategory(
|
||||
"Pasta Sauce",
|
||||
0,
|
||||
0,
|
||||
True,
|
||||
0,
|
||||
uuid.UUID("ef5b1a0b-5eb1-45ff-bd82-3209c8b888df"),
|
||||
),
|
||||
]
|
||||
for item in mcs:
|
||||
db.add(item)
|
||||
|
||||
options = [
|
||||
SettleOption("Unsettled", False, 1, True, 1),
|
||||
SettleOption("Cash", True, 2, False, 2),
|
||||
SettleOption("Credit Card", True, 2, True, 3),
|
||||
SettleOption("No Charge", True, 3, True, 4),
|
||||
SettleOption("Bill To Company", True, 2, True, 5),
|
||||
SettleOption("Tip", True, 2, True, 6),
|
||||
SettleOption("Round Off", False, 1, False, 7),
|
||||
SettleOption("Amount", False, 1, False, 8),
|
||||
SettleOption("Void", True, 1, True, 9),
|
||||
SettleOption("Staff", True, 4, True, 10),
|
||||
]
|
||||
for option in options:
|
||||
db.add(option)
|
||||
db.add(Customer("", "Cash", "", "", uuid.UUID("2c716f4b-0736-429a-ad51-610d7c47cb5e")))
|
||||
db.add(
|
||||
DbSetting(
|
||||
uuid.UUID("fb738ba2-a3c9-40ed-891c-b930e6454974"),
|
||||
"Header",
|
||||
{
|
||||
"Text": """ Hops n Grains
|
||||
The Microbrewery
|
||||
SCO 358, Sector 9, Panchkula
|
||||
A Unit of Peitho Foods Pvt. Ltd.
|
||||
CIN: U15139CH2010PTC032202
|
||||
(Reg Add: Plot No. 907, Indl Area II, Chd)
|
||||
TIN: 06592507323
|
||||
Service Tax: AAFCP5097GSD001
|
||||
"""
|
||||
},
|
||||
)
|
||||
)
|
||||
db.add(
|
||||
DbSetting(
|
||||
uuid.UUID("f7799871-d16e-4c4d-9b57-2299a5839acb"),
|
||||
"Footer",
|
||||
{"Text": "Call: 0172-4026666, 8054923853, 8054923856"},
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
def add_permissions(db: Session):
|
||||
permissions = [
|
||||
Permission("Audit", uuid.UUID("f30fd1fb-df09-46f5-8c5d-181fd46f38de")),
|
||||
Permission("Beer Consumption", uuid.UUID("efbb8f31-9631-4491-92f4-17cc98e6a0c0")),
|
||||
Permission("Bill Details", uuid.UUID("612bb529-b50d-4653-a1c0-ebb725c7d728")),
|
||||
Permission("Cashier Checkout", uuid.UUID("a86f8bcf-66f4-4c44-89e1-b714488b8331")),
|
||||
Permission("Change Rate", uuid.UUID("10c63aae-0e48-4e54-b3b8-dd8a80b88fbf")),
|
||||
Permission("Customers", uuid.UUID("e5fef133-cdbe-441f-bb54-1f0db0c5db79")),
|
||||
Permission("Discount", uuid.UUID("1f66f131-0105-4466-8f8e-21e0ccc2ac27")),
|
||||
Permission("Discount Report", uuid.UUID("0d8ba1d5-6731-417c-ab0e-be03cfdc96db")),
|
||||
Permission("Edit Printed Bill", uuid.UUID("4ff6cb0f-93cb-4760-8219-4de280eaa957")),
|
||||
Permission(
|
||||
"Edit Printed Product",
|
||||
uuid.UUID("959713be-d753-4e14-8ecd-e27f33587499"),
|
||||
),
|
||||
Permission("Guest Book", uuid.UUID("7669dfc9-cc75-4e48-b267-145c8832a83c")),
|
||||
Permission("Machines", uuid.UUID("f12b573f-edcb-490d-91c3-fa76f6502ffd")),
|
||||
Permission("Merge Kots", uuid.UUID("bed774e9-4857-43b0-a4af-40230c9eb5db")),
|
||||
Permission("Merge Tables", uuid.UUID("dfc493fb-ac14-4602-8596-f93f47b617de")),
|
||||
Permission("Modifiers", uuid.UUID("9dc82529-1e86-41b4-a152-eaea9f775fea")),
|
||||
Permission(
|
||||
"Move Kot to New Table",
|
||||
uuid.UUID("5ed5796a-ca99-437f-8f67-483b1ade81ed"),
|
||||
),
|
||||
Permission("Move Table", uuid.UUID("cfdb69c9-d37a-40af-bef2-e29c04602543")),
|
||||
Permission("NC Product", uuid.UUID("54263587-773e-4cbb-b1e4-4e814141158e")),
|
||||
Permission("Open Bill", uuid.UUID("5811d233-a1ae-4d32-af52-cebbf46d274a")),
|
||||
Permission("Owner", uuid.UUID("6d109b66-8452-42aa-bbe9-d4cef440b7a1")),
|
||||
Permission("Print Bill", uuid.UUID("92242eae-bd38-4223-829b-2f981933b7f2")),
|
||||
Permission("Print Kot", uuid.UUID("0eef56fb-7741-49fd-8b84-5069cccae767")),
|
||||
Permission("Products", uuid.UUID("f1f892ed-34aa-4c50-be12-dbaf48be7d4c")),
|
||||
Permission("Roles", uuid.UUID("d39f86f6-14e4-4fc3-b07e-01e2501a6f65")),
|
||||
Permission("Sales", uuid.UUID("92ba45c4-2d34-4cbd-b5b8-d9164c3595d5")),
|
||||
Permission("Sales Analysis", uuid.UUID("0c1acb7c-9116-46e2-a3be-9d632e811330")),
|
||||
Permission("Sales Detail", uuid.UUID("e6476396-ef83-4c47-bc20-9f3b936813f9")),
|
||||
Permission("Settle Bill", uuid.UUID("9f7b658a-25bc-4a53-8560-2dde1c7a188a")),
|
||||
Permission("Split Bill", uuid.UUID("0a8cfaf4-624e-478f-be65-c3b6392078c7")),
|
||||
Permission("Tables", uuid.UUID("ac4512e8-efdd-429e-a7ae-a34d18782663")),
|
||||
Permission("Tax Analysis", uuid.UUID("bab36396-53dd-44ea-ab3c-426efa7830c8")),
|
||||
Permission("Taxes", uuid.UUID("5c8fcdde-460d-4047-810f-e34fb899fadc")),
|
||||
Permission("Users", uuid.UUID("243447b8-b403-47e6-8b3d-8e76f4df44a9")),
|
||||
Permission("Void Bill", uuid.UUID("e3c76262-adc0-4936-8b4d-217c6292298b")),
|
||||
Permission(
|
||||
"Void or Reprinted Bill Report",
|
||||
uuid.UUID("30c8e743-c710-42d7-843a-0b75543b3516"),
|
||||
),
|
||||
Permission("Printers", uuid.UUID("5b66c6f6-003a-4ef8-ba28-49b8ff1ac33c")),
|
||||
Permission("Sections", uuid.UUID("c973f32c-a37b-496a-8dc5-60d2e4c39e97")),
|
||||
]
|
||||
|
||||
for permission in permissions:
|
||||
db.add(permission)
|
||||
|
||||
roles = [
|
||||
Role("Owner", uuid.UUID("06ec0ddb-949c-4357-aefb-65e5e55a9ae7")),
|
||||
Role("Accountant", uuid.UUID("57d4538c-257a-4bf4-9a42-342992cb6af3")),
|
||||
Role("Bar Captain", uuid.UUID("5a8ebb05-4817-45a5-866f-e523c30bfa25")),
|
||||
Role("Captain", uuid.UUID("8db7001f-0964-4607-84f5-b6f4d9183fef")),
|
||||
Role("Cashier", uuid.UUID("f1f0b112-1404-4b55-b121-f07ee6e08d12")),
|
||||
Role("Controller", uuid.UUID("d9a5a478-1fe4-4847-84da-63cfba1a094a")),
|
||||
Role("Manager", uuid.UUID("90ea7b14-9057-4bfd-a7cf-0ee7a3bb2463")),
|
||||
Role("Senior Captain", uuid.UUID("d9b1b433-1ed5-4109-8ab2-cbd48ff010cd")),
|
||||
Role("Server", uuid.UUID("6b378b71-f091-4485-a589-8db94ff1d6a4")),
|
||||
]
|
||||
|
||||
roles[0].permissions = permissions
|
||||
roles[1].permissions = list(permissions[i] for i in [2, 3, 11, 18, 24, 25, 26, 30, 34])
|
||||
roles[2].permissions = list(permissions[i] for i in [26])
|
||||
roles[3].permissions = list(permissions[i] for i in [16])
|
||||
roles[4].permissions = list(permissions[i] for i in [20, 24, 27])
|
||||
roles[5].permissions = list(permissions[i] for i in [0, 2, 7, 11, 18, 22, 24, 25, 26, 34])
|
||||
roles[6].permissions = list(permissions[i] for i in [2, 3, 4, 5, 6, 8, 11, 14, 18, 22, 25, 26, 28, 29, 33, 34])
|
||||
roles[7].permissions = list(permissions[i] for i in [9, 12, 13, 15, 16])
|
||||
roles[8].permissions = list(permissions[i] for i in [21, 24])
|
||||
|
||||
for role in roles:
|
||||
db.add(role)
|
||||
|
||||
admin = User("Admin", "123456", False)
|
||||
admin.roles.append(roles[0])
|
||||
db.add(admin)
|
@ -4,7 +4,7 @@ from sqlalchemy import Column, Unicode, text
|
||||
from sqlalchemy.dialects.postgresql import UUID
|
||||
from sqlalchemy.orm import relationship
|
||||
|
||||
from .case import Case
|
||||
from .case import Case # noqa: F401
|
||||
from .meta import Base
|
||||
|
||||
|
||||
|
@ -4,8 +4,8 @@ from sqlalchemy import Column, Unicode, text
|
||||
from sqlalchemy.dialects.postgresql import UUID
|
||||
from sqlalchemy.orm import relationship
|
||||
|
||||
from .case import Case
|
||||
from .hearing import Hearing
|
||||
from .case import Case # noqa: F401
|
||||
from .hearing import Hearing # noqa: F401
|
||||
from .meta import Base
|
||||
|
||||
|
||||
|
@ -1,27 +1,7 @@
|
||||
import enum
|
||||
import uuid
|
||||
|
||||
from sqlalchemy import (
|
||||
JSON,
|
||||
Boolean,
|
||||
Column,
|
||||
Date,
|
||||
Enum,
|
||||
ForeignKey,
|
||||
Integer,
|
||||
Numeric,
|
||||
Table,
|
||||
Unicode,
|
||||
UniqueConstraint,
|
||||
case,
|
||||
func,
|
||||
text,
|
||||
)
|
||||
from sqlalchemy.dialects import postgresql
|
||||
from sqlalchemy import Column, Unicode, text
|
||||
from sqlalchemy.dialects.postgresql import UUID
|
||||
from sqlalchemy.ext.hybrid import hybrid_property
|
||||
from sqlalchemy.orm import relationship
|
||||
from sqlalchemy.sql import expression
|
||||
|
||||
from .meta import Base
|
||||
|
||||
|
@ -1,195 +0,0 @@
|
||||
# import uuid
|
||||
#
|
||||
# from datetime import date
|
||||
# from operator import and_, or_
|
||||
# from typing import List, Optional
|
||||
#
|
||||
# import luthor.schemas.menu_category as schemas
|
||||
#
|
||||
# from fastapi import APIRouter, Depends, HTTPException, Security, status
|
||||
# from sqlalchemy import distinct
|
||||
# from sqlalchemy.exc import SQLAlchemyError
|
||||
# from sqlalchemy.orm import Session
|
||||
#
|
||||
# from ..core.security import get_current_active_user as get_user
|
||||
# from ..db.session import SessionLocal
|
||||
# from ..models.master import MenuCategory, ProductVersion
|
||||
# from ..schemas.user_token import UserToken
|
||||
# from . import effective_date
|
||||
#
|
||||
#
|
||||
# router = APIRouter()
|
||||
#
|
||||
#
|
||||
# # Dependency
|
||||
# def get_db():
|
||||
# try:
|
||||
# db = SessionLocal()
|
||||
# yield db
|
||||
# finally:
|
||||
# db.close()
|
||||
#
|
||||
#
|
||||
# @router.post("", response_model=schemas.MenuCategory)
|
||||
# def save(
|
||||
# data: schemas.MenuCategoryIn,
|
||||
# db: Session = Depends(get_db),
|
||||
# user: UserToken = Security(get_user, scopes=["products"]),
|
||||
# ) -> schemas.MenuCategory:
|
||||
# try:
|
||||
# item = MenuCategory(
|
||||
# name=data.name,
|
||||
# is_active=data.is_active,
|
||||
# sort_order=0,
|
||||
# )
|
||||
# db.add(item)
|
||||
# db.commit()
|
||||
# return menu_category_info(item)
|
||||
# except SQLAlchemyError as e:
|
||||
# db.rollback()
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||
# detail=str(e),
|
||||
# )
|
||||
# except Exception:
|
||||
# db.rollback()
|
||||
# raise
|
||||
#
|
||||
#
|
||||
# @router.put("/{id_}", response_model=schemas.MenuCategory)
|
||||
# def update(
|
||||
# id_: uuid.UUID,
|
||||
# data: schemas.MenuCategoryIn,
|
||||
# db: Session = Depends(get_db),
|
||||
# user: UserToken = Security(get_user, scopes=["products"]),
|
||||
# ) -> schemas.MenuCategory:
|
||||
# try:
|
||||
# item: MenuCategory = db.query(MenuCategory).filter(MenuCategory.id == id_).first()
|
||||
# if item.is_fixture:
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_423_LOCKED,
|
||||
# detail=f"{item.name} is a fixture and cannot be edited or deleted.",
|
||||
# )
|
||||
# item.name = data.name
|
||||
# item.is_active = data.is_active
|
||||
# db.commit()
|
||||
# return menu_category_info(item)
|
||||
# except SQLAlchemyError as e:
|
||||
# db.rollback()
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||
# detail=str(e),
|
||||
# )
|
||||
# except Exception:
|
||||
# db.rollback()
|
||||
# raise
|
||||
#
|
||||
#
|
||||
# @router.delete("/{id_}", response_model=schemas.MenuCategoryBlank)
|
||||
# def delete(
|
||||
# id_: uuid.UUID,
|
||||
# db: Session = Depends(get_db),
|
||||
# user: UserToken = Security(get_user, scopes=["products"]),
|
||||
# ) -> schemas.MenuCategoryBlank:
|
||||
# try:
|
||||
# item: MenuCategory = db.query(MenuCategory).filter(MenuCategory.id == id_).first()
|
||||
# if item is None:
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_404_NOT_FOUND,
|
||||
# detail="Menu Category not found",
|
||||
# )
|
||||
# elif item.is_fixture:
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_423_LOCKED,
|
||||
# detail=f"{item.name} is a fixture and cannot be edited or deleted.",
|
||||
# )
|
||||
# else:
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_501_NOT_IMPLEMENTED,
|
||||
# detail="Menu Category deletion not implemented",
|
||||
# )
|
||||
# except Exception:
|
||||
# db.rollback()
|
||||
# raise
|
||||
#
|
||||
#
|
||||
# @router.get("", response_model=schemas.MenuCategoryBlank)
|
||||
# def show_blank(
|
||||
# db: Session = Depends(get_db),
|
||||
# user: UserToken = Security(get_user, scopes=["products"]),
|
||||
# ) -> schemas.MenuCategoryBlank:
|
||||
# return menu_category_blank()
|
||||
#
|
||||
#
|
||||
# @router.get("/list", response_model=List[schemas.MenuCategory])
|
||||
# def show_list(
|
||||
# p: Optional[bool] = None,
|
||||
# date_: date = Depends(effective_date),
|
||||
# db: Session = Depends(get_db),
|
||||
# user: UserToken = Depends(get_user),
|
||||
# ) -> List[schemas.MenuCategory]:
|
||||
#
|
||||
# if p is not None:
|
||||
# sq = db.query(distinct(ProductVersion.menu_category_id)).filter(
|
||||
# and_(
|
||||
# or_(
|
||||
# ProductVersion.valid_from == None, # noqa: E711
|
||||
# ProductVersion.valid_from <= date_,
|
||||
# ),
|
||||
# or_(
|
||||
# ProductVersion.valid_till == None, # noqa: E711
|
||||
# ProductVersion.valid_till >= date_,
|
||||
# ),
|
||||
# )
|
||||
# )
|
||||
# query = (
|
||||
# db.query(MenuCategory)
|
||||
# .filter(MenuCategory.id.in_(sq))
|
||||
# .order_by(MenuCategory.sort_order)
|
||||
# .order_by(MenuCategory.name)
|
||||
# .all()
|
||||
# )
|
||||
# else:
|
||||
# query = db.query(MenuCategory).order_by(MenuCategory.sort_order).order_by(MenuCategory.name).all()
|
||||
# return [menu_category_info(item) for item in query]
|
||||
#
|
||||
#
|
||||
# @router.get("/{id_}", response_model=schemas.MenuCategory)
|
||||
# def show_id(
|
||||
# id_: uuid.UUID,
|
||||
# db: Session = Depends(get_db),
|
||||
# user: UserToken = Security(get_user, scopes=["products"]),
|
||||
# ) -> schemas.MenuCategory:
|
||||
# item: MenuCategory = db.query(MenuCategory).filter(MenuCategory.id == id_).first()
|
||||
# return menu_category_info(item)
|
||||
#
|
||||
#
|
||||
# # @view_config(
|
||||
# # request_method="POST", route_name="v1_menu_categories_list", renderer="json", permission="Products", trans=True,
|
||||
# # )
|
||||
# # def sort_order(request):
|
||||
# # json = request.json_body
|
||||
# # for index, item in enumerate(json):
|
||||
# # request.dbsession.query(MenuCategory).filter(MenuCategory.id == uuid.UUID(item["id"])).update(
|
||||
# # {MenuCategory.sort_order: index}
|
||||
# # )
|
||||
# # return True
|
||||
#
|
||||
#
|
||||
# def menu_category_info(item: MenuCategory) -> schemas.MenuCategory:
|
||||
# return schemas.MenuCategory(
|
||||
# id=item.id,
|
||||
# name=item.name,
|
||||
# isActive=item.is_active,
|
||||
# isFixture=item.is_fixture,
|
||||
# sortOrder=item.sort_order,
|
||||
# )
|
||||
#
|
||||
#
|
||||
# def menu_category_blank() -> schemas.MenuCategoryBlank:
|
||||
# return schemas.MenuCategoryBlank(
|
||||
# name="",
|
||||
# isActive=True,
|
||||
# isFixture=False,
|
||||
# sortOrder=0,
|
||||
# )
|
@ -1,149 +0,0 @@
|
||||
# import uuid
|
||||
#
|
||||
# from typing import List
|
||||
#
|
||||
# import barker.schemas.modifier as schemas
|
||||
#
|
||||
# from fastapi import APIRouter, Depends, HTTPException, Security, status
|
||||
# from sqlalchemy.exc import SQLAlchemyError
|
||||
# from sqlalchemy.orm import Session
|
||||
#
|
||||
# from ..core.security import get_current_active_user as get_user
|
||||
# from ..db.session import SessionLocal
|
||||
# from ..models.master import Modifier
|
||||
# from ..schemas.user_token import UserToken
|
||||
#
|
||||
#
|
||||
# router = APIRouter()
|
||||
#
|
||||
#
|
||||
# # Dependency
|
||||
# def get_db():
|
||||
# try:
|
||||
# db = SessionLocal()
|
||||
# yield db
|
||||
# finally:
|
||||
# db.close()
|
||||
#
|
||||
#
|
||||
# @router.post("", response_model=schemas.Modifier)
|
||||
# def save(
|
||||
# data: schemas.ModifierIn,
|
||||
# db: Session = Depends(get_db),
|
||||
# user: UserToken = Security(get_user, scopes=["modifiers"]),
|
||||
# ) -> schemas.Modifier:
|
||||
# try:
|
||||
# item = Modifier(
|
||||
# name=data.name,
|
||||
# show_in_bill=data.show_in_bill,
|
||||
# price=data.price,
|
||||
# modifier_category_id=data.modifier_category.id_,
|
||||
# is_active=data.is_active,
|
||||
# )
|
||||
# db.add(item)
|
||||
# db.commit()
|
||||
# return modifier_info(item)
|
||||
# except SQLAlchemyError as e:
|
||||
# db.rollback()
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||
# detail=str(e),
|
||||
# )
|
||||
# except Exception:
|
||||
# db.rollback()
|
||||
# raise
|
||||
#
|
||||
#
|
||||
# @router.put("/{id_}", response_model=schemas.Modifier)
|
||||
# def update(
|
||||
# id_: uuid.UUID,
|
||||
# data: schemas.ModifierIn,
|
||||
# db: Session = Depends(get_db),
|
||||
# user: UserToken = Security(get_user, scopes=["modifiers"]),
|
||||
# ) -> schemas.Modifier:
|
||||
# try:
|
||||
# item: Modifier = db.query(Modifier).filter(Modifier.id == id_).first()
|
||||
# item.name = data.name
|
||||
# item.show_in_bill = data.show_in_bill
|
||||
# item.price = data.price
|
||||
# item.modifier_category_id = data.modifier_category.id_
|
||||
# item.is_active = data.is_active
|
||||
# db.commit()
|
||||
# return modifier_info(item)
|
||||
# except SQLAlchemyError as e:
|
||||
# db.rollback()
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||
# detail=str(e),
|
||||
# )
|
||||
# except Exception:
|
||||
# db.rollback()
|
||||
# raise
|
||||
#
|
||||
#
|
||||
# @router.delete("/{id_}", response_model=schemas.ModifierBlank)
|
||||
# def delete(
|
||||
# id_: uuid.UUID,
|
||||
# db: Session = Depends(get_db),
|
||||
# user: UserToken = Security(get_user, scopes=["modifiers"]),
|
||||
# ) -> schemas.ModifierBlank:
|
||||
# try:
|
||||
# item: Modifier = db.query(Modifier).filter(Modifier.id == id_).first()
|
||||
# db.delete(item)
|
||||
# db.commit()
|
||||
# return modifier_blank()
|
||||
# except SQLAlchemyError as e:
|
||||
# db.rollback()
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||
# detail=str(e),
|
||||
# )
|
||||
# except Exception:
|
||||
# db.rollback()
|
||||
# raise
|
||||
#
|
||||
#
|
||||
# @router.get("", response_model=schemas.ModifierBlank)
|
||||
# def show_blank(
|
||||
# db: Session = Depends(get_db),
|
||||
# user: UserToken = Security(get_user, scopes=["modifiers"]),
|
||||
# ) -> schemas.ModifierBlank:
|
||||
# return modifier_blank()
|
||||
#
|
||||
#
|
||||
# @router.get("/list", response_model=List[schemas.Modifier])
|
||||
# def show_list(db: Session = Depends(get_db), user: UserToken = Depends(get_user)) -> List[schemas.Modifier]:
|
||||
# return [modifier_info(item) for item in db.query(Modifier).order_by(Modifier.name).all()]
|
||||
#
|
||||
#
|
||||
# @router.get("/{id_}", response_model=schemas.Modifier)
|
||||
# def show_id(
|
||||
# id_: uuid.UUID,
|
||||
# db: Session = Depends(get_db),
|
||||
# user: UserToken = Security(get_user, scopes=["modifiers"]),
|
||||
# ) -> schemas.Modifier:
|
||||
# item: Modifier = db.query(Modifier).filter(Modifier.id == id_).first()
|
||||
# return modifier_info(item)
|
||||
#
|
||||
#
|
||||
# def modifier_info(item: Modifier) -> schemas.Modifier:
|
||||
# return schemas.Modifier(
|
||||
# id=item.id,
|
||||
# name=item.name,
|
||||
# showInBill=item.show_in_bill,
|
||||
# price=item.price,
|
||||
# isActive=item.is_active,
|
||||
# modifierCategory=schemas.ModifierCategoryLink(
|
||||
# id=item.modifier_category.id,
|
||||
# name=item.modifier_category.name,
|
||||
# ),
|
||||
# )
|
||||
#
|
||||
#
|
||||
# def modifier_blank() -> schemas.ModifierBlank:
|
||||
# return schemas.ModifierBlank(
|
||||
# name="",
|
||||
# showInBill=False,
|
||||
# price=0,
|
||||
# isActive=True,
|
||||
# )
|
@ -1,311 +0,0 @@
|
||||
# import uuid
|
||||
#
|
||||
# from datetime import date
|
||||
# from functools import reduce
|
||||
# from typing import List
|
||||
#
|
||||
# import barker.schemas.modifier_category as schemas
|
||||
#
|
||||
# from barker.schemas.product_link import ProductLink as ProductLinkSchema
|
||||
# from fastapi import APIRouter, Depends, HTTPException, Security, status
|
||||
# from sqlalchemy import and_, or_
|
||||
# from sqlalchemy.exc import SQLAlchemyError
|
||||
# from sqlalchemy.orm import Session, contains_eager, joinedload
|
||||
#
|
||||
# from ..core.security import get_current_active_user as get_user
|
||||
# from ..db.session import SessionLocal
|
||||
# from ..models.master import MenuCategory, ModifierCategory, Product, ProductVersion
|
||||
# from ..schemas.user_token import UserToken
|
||||
# from . import effective_date
|
||||
#
|
||||
#
|
||||
# router = APIRouter()
|
||||
#
|
||||
#
|
||||
# # Dependency
|
||||
# def get_db():
|
||||
# try:
|
||||
# db = SessionLocal()
|
||||
# yield db
|
||||
# finally:
|
||||
# db.close()
|
||||
#
|
||||
#
|
||||
# @router.post("", response_model=schemas.ModifierCategory)
|
||||
# def save(
|
||||
# data: schemas.ModifierCategoryIn,
|
||||
# date_: date = Depends(effective_date),
|
||||
# db: Session = Depends(get_db),
|
||||
# user: UserToken = Security(get_user, scopes=["modifiers"]),
|
||||
# ) -> schemas.ModifierCategory:
|
||||
# try:
|
||||
# item = ModifierCategory(
|
||||
# name=data.name,
|
||||
# minimum=data.minimum,
|
||||
# maximum=None if data.maximum == 0 else data.maximum,
|
||||
# is_active=data.is_active,
|
||||
# )
|
||||
# db.add(item)
|
||||
# add_products(item, data.menu_categories, db)
|
||||
# db.commit()
|
||||
# return modifier_category_info(item, date_, db=db)
|
||||
# except SQLAlchemyError as e:
|
||||
# db.rollback()
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||
# detail=str(e),
|
||||
# )
|
||||
# except Exception:
|
||||
# db.rollback()
|
||||
# raise
|
||||
#
|
||||
#
|
||||
# @router.put("/{id_}", response_model=schemas.ModifierCategory)
|
||||
# def update(
|
||||
# id_: uuid.UUID,
|
||||
# data: schemas.ModifierCategoryIn,
|
||||
# date_: date = Depends(effective_date),
|
||||
# db: Session = Depends(get_db),
|
||||
# user: UserToken = Security(get_user, scopes=["modifiers"]),
|
||||
# ) -> schemas.ModifierCategory:
|
||||
# try:
|
||||
# item: ModifierCategory = db.query(ModifierCategory).filter(ModifierCategory.id == id_).first()
|
||||
# item.name = data.name
|
||||
# item.minimum = data.minimum
|
||||
# item.maximum = None if data.maximum == 0 else data.maximum
|
||||
# item.is_active = data.is_active
|
||||
# add_products(item, data.menu_categories, db)
|
||||
# db.commit()
|
||||
# return modifier_category_info(item, date_, db=db)
|
||||
# except SQLAlchemyError as e:
|
||||
# db.rollback()
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||
# detail=str(e),
|
||||
# )
|
||||
# except Exception:
|
||||
# db.rollback()
|
||||
# raise
|
||||
#
|
||||
#
|
||||
# @router.delete("/{id_}", response_model=schemas.ModifierCategoryBlank)
|
||||
# def delete(
|
||||
# id_: uuid.UUID,
|
||||
# date_: date = Depends(effective_date),
|
||||
# db: Session = Depends(get_db),
|
||||
# user: UserToken = Security(get_user, scopes=["modifiers"]),
|
||||
# ) -> schemas.ModifierCategoryBlank:
|
||||
# try:
|
||||
# item: ModifierCategory = db.query(ModifierCategory).filter(ModifierCategory.id == id_).first()
|
||||
# db.delete(item)
|
||||
# db.commit()
|
||||
# return modifier_category_blank(date_, db=db)
|
||||
# except SQLAlchemyError as e:
|
||||
# db.rollback()
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||
# detail=str(e),
|
||||
# )
|
||||
# except Exception:
|
||||
# db.rollback()
|
||||
# raise
|
||||
#
|
||||
#
|
||||
# @router.get("", response_model=schemas.ModifierCategoryBlank)
|
||||
# def show_blank(
|
||||
# db: Session = Depends(get_db),
|
||||
# date_: date = Depends(effective_date),
|
||||
# user: UserToken = Security(get_user, scopes=["modifiers"]),
|
||||
# ) -> schemas.ModifierCategoryBlank:
|
||||
# return modifier_category_blank(date_, db=db)
|
||||
#
|
||||
#
|
||||
# @router.get("/list")
|
||||
# def show_list(
|
||||
# date_: date = Depends(effective_date), db: Session = Depends(get_db), user: UserToken = Depends(get_user)
|
||||
# ):
|
||||
# list_ = db.query(ModifierCategory).order_by(ModifierCategory.sort_order).order_by(ModifierCategory.name).all()
|
||||
# menu_categories = (
|
||||
# db.query(MenuCategory)
|
||||
# .join(MenuCategory.products)
|
||||
# .filter(
|
||||
# and_(
|
||||
# or_(
|
||||
# ProductVersion.valid_from == None, # noqa: E711
|
||||
# ProductVersion.valid_from <= date_,
|
||||
# ),
|
||||
# or_(
|
||||
# ProductVersion.valid_till == None, # noqa: E711
|
||||
# ProductVersion.valid_till >= date_,
|
||||
# ),
|
||||
# )
|
||||
# )
|
||||
# .order_by(MenuCategory.sort_order, ProductVersion.sort_order, ProductVersion.name)
|
||||
# .options(
|
||||
# joinedload(MenuCategory.products, innerjoin=True),
|
||||
# contains_eager(MenuCategory.products),
|
||||
# )
|
||||
# .all()
|
||||
# )
|
||||
# modifier_categories = []
|
||||
# for item in list_:
|
||||
# products = [x.id for x in item.products]
|
||||
# modifier_category = {
|
||||
# "id": item.id,
|
||||
# "name": item.name,
|
||||
# "minimum": item.minimum,
|
||||
# "maximum": item.maximum,
|
||||
# "isActive": item.is_active,
|
||||
# "menuCategories": [
|
||||
# {
|
||||
# "id": mc.id,
|
||||
# "name": mc.name,
|
||||
# "enabled": reduce(lambda x, y: x and (y.product_id in products), mc.products, True),
|
||||
# "products": [{"id": p.id, "name": p.name} for p in mc.products if p.product_id in products],
|
||||
# }
|
||||
# for mc in menu_categories
|
||||
# ],
|
||||
# }
|
||||
# modifier_category["menuCategories"] = [i for i in modifier_category["menuCategories"] if len(i["products"]) > 0]
|
||||
# modifier_categories.append(modifier_category)
|
||||
# return modifier_categories
|
||||
#
|
||||
#
|
||||
# @router.get("/for-product/{id_}")
|
||||
# def for_product(
|
||||
# id_: uuid.UUID,
|
||||
# date_: date = Depends(effective_date),
|
||||
# db: Session = Depends(get_db),
|
||||
# user: UserToken = Security(get_user),
|
||||
# ):
|
||||
# product: Product = db.query(Product).filter(Product.id == id_).first()
|
||||
#
|
||||
# return [
|
||||
# {
|
||||
# "id": item.id,
|
||||
# "name": item.name,
|
||||
# "minimum": item.minimum,
|
||||
# "maximum": item.maximum,
|
||||
# "isActive": item.is_active,
|
||||
# "modifiers": [
|
||||
# {"id": m.id, "name": m.name, "price": m.price}
|
||||
# for m in item.modifiers
|
||||
# if m.is_active == True # noqa: E712
|
||||
# ],
|
||||
# }
|
||||
# for item in product.modifier_categories
|
||||
# if item.is_active == True
|
||||
# ]
|
||||
#
|
||||
#
|
||||
# @router.get("/{id_}", response_model=schemas.ModifierCategory)
|
||||
# def show_id(
|
||||
# id_: uuid.UUID,
|
||||
# date_: date = Depends(effective_date),
|
||||
# db: Session = Depends(get_db),
|
||||
# user: UserToken = Security(get_user, scopes=["modifiers"]),
|
||||
# ) -> schemas.ModifierCategory:
|
||||
# item: ModifierCategory = db.query(ModifierCategory).filter(ModifierCategory.id == id_).first()
|
||||
# return modifier_category_info(item, date_, db=db)
|
||||
#
|
||||
#
|
||||
# def modifier_category_info(item: ModifierCategory, date_: date, db: Session) -> schemas.ModifierCategory:
|
||||
# menu_categories = (
|
||||
# db.query(MenuCategory)
|
||||
# .join(MenuCategory.products)
|
||||
# .filter(
|
||||
# and_(
|
||||
# or_(
|
||||
# ProductVersion.valid_from == None, # noqa: E711
|
||||
# ProductVersion.valid_from <= date_,
|
||||
# ),
|
||||
# or_(
|
||||
# ProductVersion.valid_till == None, # noqa: E711
|
||||
# ProductVersion.valid_till >= date_,
|
||||
# ),
|
||||
# )
|
||||
# )
|
||||
# .order_by(MenuCategory.sort_order, ProductVersion.sort_order, ProductVersion.name)
|
||||
# .options(
|
||||
# joinedload(MenuCategory.products, innerjoin=True),
|
||||
# contains_eager(MenuCategory.products),
|
||||
# )
|
||||
# .all()
|
||||
# )
|
||||
# products = [p.id for p in item.products]
|
||||
# return schemas.ModifierCategory(
|
||||
# id=item.id,
|
||||
# name=item.name,
|
||||
# minimum=item.minimum,
|
||||
# maximum=item.maximum,
|
||||
# isActive=item.is_active,
|
||||
# menuCategories=[
|
||||
# schemas.MenuCategoryLink(
|
||||
# id=mc.id,
|
||||
# name=mc.name,
|
||||
# enabled=False,
|
||||
# products=[
|
||||
# ProductLinkSchema(
|
||||
# id=p.product_id,
|
||||
# name=p.name,
|
||||
# enabled=True if p.product_id in products else False,
|
||||
# )
|
||||
# for p in mc.products
|
||||
# ],
|
||||
# )
|
||||
# for mc in menu_categories
|
||||
# ],
|
||||
# sortOrder=item.sort_order,
|
||||
# )
|
||||
#
|
||||
#
|
||||
# def modifier_category_blank(date_: date, db: Session) -> schemas.ModifierCategoryBlank:
|
||||
# menu_categories = (
|
||||
# db.query(MenuCategory)
|
||||
# .join(MenuCategory.products)
|
||||
# .filter(
|
||||
# and_(
|
||||
# or_(
|
||||
# ProductVersion.valid_from == None, # noqa: E711
|
||||
# ProductVersion.valid_from <= date_,
|
||||
# ),
|
||||
# or_(
|
||||
# ProductVersion.valid_till == None, # noqa: E711
|
||||
# ProductVersion.valid_till >= date_,
|
||||
# ),
|
||||
# )
|
||||
# )
|
||||
# .order_by(MenuCategory.sort_order, ProductVersion.sort_order, ProductVersion.name)
|
||||
# .options(
|
||||
# joinedload(MenuCategory.products, innerjoin=True),
|
||||
# contains_eager(MenuCategory.products),
|
||||
# )
|
||||
# .all()
|
||||
# )
|
||||
# return schemas.ModifierCategoryBlank(
|
||||
# name="",
|
||||
# minimum=0,
|
||||
# maximum=0,
|
||||
# isActive=True,
|
||||
# menuCategories=[
|
||||
# schemas.MenuCategoryLink(
|
||||
# id=mc.id,
|
||||
# name=mc.name,
|
||||
# enabled=False,
|
||||
# products=[ProductLinkSchema(id=p.product_id, name=p.name, enabled=False) for p in mc.products],
|
||||
# )
|
||||
# for mc in menu_categories
|
||||
# ],
|
||||
# )
|
||||
#
|
||||
#
|
||||
# def add_products(modifier_category: ModifierCategory, menu_categories: List[schemas.MenuCategoryLink], db: Session):
|
||||
# for mc in menu_categories:
|
||||
# for p in mc.products:
|
||||
# old = [x for x in modifier_category.products if x.id == p.id_]
|
||||
# old = None if len(old) == 0 else old[0]
|
||||
# if p.enabled and old is None:
|
||||
# product_object = db.query(Product).filter(Product.id == p.id_).one()
|
||||
# modifier_category.products.append(product_object)
|
||||
# elif not p.enabled and old:
|
||||
# modifier_category.products.remove(old)
|
@ -1,140 +0,0 @@
|
||||
# import uuid
|
||||
#
|
||||
# from typing import List
|
||||
#
|
||||
# import barker.schemas.sale_category as schemas
|
||||
#
|
||||
# from fastapi import APIRouter, Depends, HTTPException, Security, status
|
||||
# from sqlalchemy.exc import SQLAlchemyError
|
||||
# from sqlalchemy.orm import Session
|
||||
#
|
||||
# from ..core.security import get_current_active_user as get_user
|
||||
# from ..db.session import SessionLocal
|
||||
# from ..models.master import SaleCategory
|
||||
# from ..schemas.user_token import UserToken
|
||||
#
|
||||
#
|
||||
# router = APIRouter()
|
||||
#
|
||||
#
|
||||
# # Dependency
|
||||
# def get_db():
|
||||
# try:
|
||||
# db = SessionLocal()
|
||||
# yield db
|
||||
# finally:
|
||||
# db.close()
|
||||
#
|
||||
#
|
||||
# @router.post("", response_model=schemas.SaleCategory)
|
||||
# def save(
|
||||
# data: schemas.SaleCategoryIn,
|
||||
# db: Session = Depends(get_db),
|
||||
# user: UserToken = Security(get_user, scopes=["products"]),
|
||||
# ) -> schemas.SaleCategory:
|
||||
# try:
|
||||
# item = SaleCategory(name=data.name, discount_limit=round(data.discount_limit, 2), tax_id=data.tax.id_)
|
||||
# db.add(item)
|
||||
# db.commit()
|
||||
# return sale_category_info(item)
|
||||
# except SQLAlchemyError as e:
|
||||
# db.rollback()
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||
# detail=str(e),
|
||||
# )
|
||||
# except Exception:
|
||||
# db.rollback()
|
||||
# raise
|
||||
#
|
||||
#
|
||||
# @router.put("/{id_}", response_model=schemas.SaleCategory)
|
||||
# def update(
|
||||
# id_: uuid.UUID,
|
||||
# data: schemas.SaleCategoryIn,
|
||||
# db: Session = Depends(get_db),
|
||||
# user: UserToken = Security(get_user, scopes=["products"]),
|
||||
# ) -> schemas.SaleCategory:
|
||||
# try:
|
||||
# item: SaleCategory = db.query(SaleCategory).filter(SaleCategory.id == id_).first()
|
||||
# item.name = data.name
|
||||
# item.discount_limit = round(data.discount_limit, 2)
|
||||
# item.tax_id = data.tax.id_
|
||||
# db.commit()
|
||||
# return sale_category_info(item)
|
||||
# except SQLAlchemyError as e:
|
||||
# db.rollback()
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||
# detail=str(e),
|
||||
# )
|
||||
# except Exception:
|
||||
# db.rollback()
|
||||
# raise
|
||||
#
|
||||
#
|
||||
# @router.delete("/{id_}", response_model=schemas.SaleCategoryBlank)
|
||||
# def delete(
|
||||
# id_: uuid.UUID,
|
||||
# db: Session = Depends(get_db),
|
||||
# user: UserToken = Security(get_user, scopes=["products"]),
|
||||
# ) -> schemas.SaleCategoryBlank:
|
||||
# try:
|
||||
# item: SaleCategory = db.query(SaleCategory).filter(SaleCategory.id == id_).first()
|
||||
# if item is None:
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_404_NOT_FOUND,
|
||||
# detail="Sale Category not found",
|
||||
# )
|
||||
# else:
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_501_NOT_IMPLEMENTED,
|
||||
# detail="Sale Category deletion not implemented",
|
||||
# )
|
||||
# except Exception:
|
||||
# db.rollback()
|
||||
# raise
|
||||
#
|
||||
#
|
||||
# @router.get("", response_model=schemas.SaleCategoryBlank)
|
||||
# def show_blank(
|
||||
# db: Session = Depends(get_db),
|
||||
# user: UserToken = Security(get_user, scopes=["products"]),
|
||||
# ) -> schemas.SaleCategoryBlank:
|
||||
# return sale_category_blank()
|
||||
#
|
||||
#
|
||||
# @router.get("/list", response_model=List[schemas.SaleCategory])
|
||||
# def show_list(db: Session = Depends(get_db), user: UserToken = Depends(get_user)) -> List[schemas.SaleCategory]:
|
||||
# return [sale_category_info(item) for item in db.query(SaleCategory).order_by(SaleCategory.name).all()]
|
||||
#
|
||||
#
|
||||
# @router.get("/for-discount", response_model=List[schemas.SaleCategoryForDiscount])
|
||||
# def for_discount(db: Session = Depends(get_db), user: UserToken = Depends(get_user)) -> List[schemas.SaleCategory]:
|
||||
# return [
|
||||
# schemas.SaleCategoryForDiscount(id=item.id, name=item.name, discountLimit=item.discount_limit, discount=0)
|
||||
# for item in db.query(SaleCategory).filter(SaleCategory.discount_limit != 0).order_by(SaleCategory.name).all()
|
||||
# ]
|
||||
#
|
||||
#
|
||||
# @router.get("/{id_}", response_model=schemas.SaleCategory)
|
||||
# def show_id(
|
||||
# id_: uuid.UUID,
|
||||
# db: Session = Depends(get_db),
|
||||
# user: UserToken = Security(get_user, scopes=["products"]),
|
||||
# ) -> schemas.SaleCategory:
|
||||
# item: SaleCategory = db.query(SaleCategory).filter(SaleCategory.id == id_).first()
|
||||
# return sale_category_info(item)
|
||||
#
|
||||
#
|
||||
# def sale_category_info(item: SaleCategory) -> schemas.SaleCategory:
|
||||
# return schemas.SaleCategory(
|
||||
# id=item.id,
|
||||
# name=item.name,
|
||||
# discountLimit=item.discount_limit,
|
||||
# tax=schemas.TaxLink(id=item.tax_id, name=item.tax.name, rate=item.tax.rate),
|
||||
# )
|
||||
#
|
||||
#
|
||||
# def sale_category_blank() -> schemas.SaleCategoryBlank:
|
||||
# return schemas.SaleCategoryBlank(name="", discountLimit=1)
|
@ -1,156 +0,0 @@
|
||||
# import uuid
|
||||
#
|
||||
# from typing import List, Optional
|
||||
#
|
||||
# import barker.schemas.section_printer as schemas
|
||||
#
|
||||
# from fastapi import APIRouter, Depends, HTTPException, Security, status
|
||||
# from sqlalchemy import and_, or_
|
||||
# from sqlalchemy.dialects.postgresql import insert as pg_insert
|
||||
# from sqlalchemy.exc import SQLAlchemyError
|
||||
# from sqlalchemy.orm import Session
|
||||
#
|
||||
# from ..core.security import get_current_active_user as get_user
|
||||
# from ..db.session import SessionLocal
|
||||
# from ..models.master import MenuCategory, SectionPrinter
|
||||
# from ..schemas.user_token import UserToken
|
||||
#
|
||||
#
|
||||
# router = APIRouter()
|
||||
#
|
||||
#
|
||||
# # Dependency
|
||||
# def get_db():
|
||||
# try:
|
||||
# db = SessionLocal()
|
||||
# yield db
|
||||
# finally:
|
||||
# db.close()
|
||||
#
|
||||
#
|
||||
# @router.post("/{id_}", response_model=List[schemas.SectionPrinter])
|
||||
# def save(
|
||||
# id_: uuid.UUID,
|
||||
# data: List[schemas.SectionPrinter],
|
||||
# db: Session = Depends(get_db),
|
||||
# user: UserToken = Security(get_user, scopes=["section-printers"]),
|
||||
# ) -> List[schemas.SectionPrinter]:
|
||||
# try:
|
||||
# current = []
|
||||
# default_copies = 0
|
||||
# for mcs in data:
|
||||
# if mcs.menu_category is None and mcs.printer is None:
|
||||
# raise ValueError("Please choose a default printer")
|
||||
# if mcs.printer is None:
|
||||
# continue
|
||||
# if mcs.menu_category is None:
|
||||
# default_copies = mcs.copies
|
||||
# stmt = (
|
||||
# pg_insert(SectionPrinter.__table__)
|
||||
# .values(
|
||||
# id=uuid.uuid4(),
|
||||
# menu_category_id=mcs.menu_category.id_ if mcs.menu_category is not None else None,
|
||||
# section_id=id_,
|
||||
# printer_id=mcs.printer.id_,
|
||||
# copies=mcs.copies,
|
||||
# )
|
||||
# .on_conflict_do_update(
|
||||
# index_elements=["menu_category_id", "section_id"],
|
||||
# set_=dict(printer_id=mcs.printer.id_, copies=mcs.copies),
|
||||
# )
|
||||
# )
|
||||
# db.execute(stmt)
|
||||
# current.append(None if mcs.menu_category is None else mcs.menu_category.id_)
|
||||
# db.execute(
|
||||
# SectionPrinter.__table__.delete(
|
||||
# or_(
|
||||
# and_(
|
||||
# SectionPrinter.section_id == id_,
|
||||
# SectionPrinter.menu_category_id == None, # noqa: E711
|
||||
# SectionPrinter.copies != default_copies,
|
||||
# ),
|
||||
# and_(
|
||||
# SectionPrinter.section_id == id_,
|
||||
# SectionPrinter.menu_category_id != None, # noqa: E711
|
||||
# ~SectionPrinter.menu_category_id.in_([x for x in current if x is not None]),
|
||||
# ),
|
||||
# )
|
||||
# )
|
||||
# )
|
||||
# db.commit()
|
||||
#
|
||||
# return report(id_, db)
|
||||
# except SQLAlchemyError as e:
|
||||
# db.rollback()
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||
# detail=str(e),
|
||||
# )
|
||||
# except Exception:
|
||||
# db.rollback()
|
||||
# raise
|
||||
#
|
||||
#
|
||||
# @router.delete("/{id_}", response_model=List[schemas.SectionPrinter])
|
||||
# def delete(
|
||||
# id_: uuid.UUID,
|
||||
# db: Session = Depends(get_db),
|
||||
# user: UserToken = Security(get_user, scopes=["section-printers"]),
|
||||
# ) -> List[schemas.SectionPrinter]:
|
||||
# try:
|
||||
# SectionPrinter.__table__.delete(SectionPrinter.section_id == id_)
|
||||
# db.commit()
|
||||
# return report(id_, db)
|
||||
# except SQLAlchemyError as e:
|
||||
# db.rollback()
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||
# detail=str(e),
|
||||
# )
|
||||
# except Exception:
|
||||
# db.rollback()
|
||||
# raise
|
||||
#
|
||||
#
|
||||
# @router.get("", response_model=List[schemas.SectionPrinter])
|
||||
# def show_blank(
|
||||
# db: Session = Depends(get_db),
|
||||
# user: UserToken = Security(get_user, scopes=["section-printers"]),
|
||||
# ) -> List[schemas.SectionPrinter]:
|
||||
# return report(None, db)
|
||||
#
|
||||
#
|
||||
# @router.get("/{id_}", response_model=List[schemas.SectionPrinter])
|
||||
# def show_id(
|
||||
# id_: uuid.UUID,
|
||||
# db: Session = Depends(get_db),
|
||||
# user: UserToken = Security(get_user, scopes=["section-printers"]),
|
||||
# ) -> List[schemas.SectionPrinter]:
|
||||
# return report(id_, db)
|
||||
#
|
||||
#
|
||||
# def report(section_id: Optional[uuid.UUID], db: Session) -> List[schemas.SectionPrinter]:
|
||||
# menu_categories = (
|
||||
# db.query(MenuCategory.id, MenuCategory.name)
|
||||
# .filter(MenuCategory.is_active == True) # noqa: E712
|
||||
# .order_by(MenuCategory.sort_order)
|
||||
# .all()
|
||||
# )
|
||||
# list_ = []
|
||||
# for mc_id, mc_name in [(None, None)] + menu_categories:
|
||||
# section_printer = (
|
||||
# db.query(SectionPrinter)
|
||||
# .filter(
|
||||
# SectionPrinter.section_id == section_id,
|
||||
# SectionPrinter.menu_category_id == mc_id,
|
||||
# )
|
||||
# .first()
|
||||
# )
|
||||
# list_.append(
|
||||
# schemas.SectionPrinter(
|
||||
# menuCategory=None if mc_id is None else schemas.MenuCategoryLink(id=mc_id, name=mc_name),
|
||||
# printer=None if section_printer is None else schemas.PrinterLink(id=section_printer.printer_id),
|
||||
# copies=0 if section_printer is None else section_printer.copies,
|
||||
# )
|
||||
# )
|
||||
# return list_
|
@ -1,182 +0,0 @@
|
||||
# import uuid
|
||||
#
|
||||
# from datetime import date, timedelta
|
||||
# from decimal import Decimal
|
||||
# from typing import List, Optional
|
||||
#
|
||||
# from fastapi import APIRouter, Depends, HTTPException, Security, status
|
||||
# from sqlalchemy import and_, or_
|
||||
# from sqlalchemy.orm import Session, contains_eager, joinedload
|
||||
#
|
||||
# from ..core.security import get_current_active_user as get_user
|
||||
# from ..db.session import SessionLocal
|
||||
# from ..models.master import MenuCategory, ProductVersion
|
||||
# from ..schemas.update_product_prices import UpdateProductPrices, UpdateProductPricesItem
|
||||
# from ..schemas.user_token import UserToken
|
||||
# from . import optional_query_date
|
||||
#
|
||||
#
|
||||
# router = APIRouter()
|
||||
#
|
||||
#
|
||||
# # Dependency
|
||||
# def get_db() -> Session:
|
||||
# try:
|
||||
# db = SessionLocal()
|
||||
# yield db
|
||||
# finally:
|
||||
# db.close()
|
||||
#
|
||||
#
|
||||
# @router.get("", response_model=UpdateProductPrices)
|
||||
# def get_update_product_prices(
|
||||
# date_: Optional[date] = Depends(optional_query_date),
|
||||
# db: Session = Depends(get_db),
|
||||
# user: UserToken = Security(get_user, scopes=["products"]),
|
||||
# ) -> UpdateProductPrices:
|
||||
# if date_ is None:
|
||||
# return UpdateProductPrices(
|
||||
# date=date.today(),
|
||||
# items=[],
|
||||
# )
|
||||
# return UpdateProductPrices(
|
||||
# date=date_,
|
||||
# items=update_product_prices_list(None, date_, db),
|
||||
# )
|
||||
#
|
||||
#
|
||||
# @router.get("/{id_}", response_model=UpdateProductPrices)
|
||||
# def get_update_product_prices_id(
|
||||
# id_: uuid.UUID,
|
||||
# date_: Optional[date] = Depends(optional_query_date),
|
||||
# db: Session = Depends(get_db),
|
||||
# user: UserToken = Security(get_user, scopes=["products"]),
|
||||
# ) -> UpdateProductPrices:
|
||||
# if date_ is None:
|
||||
# return UpdateProductPrices(
|
||||
# date=date.today(),
|
||||
# menuCategoryId=id_,
|
||||
# items=[],
|
||||
# )
|
||||
# return UpdateProductPrices(
|
||||
# date=date_,
|
||||
# menuCategoryId=id_,
|
||||
# items=update_product_prices_list(id_, date_, db),
|
||||
# )
|
||||
#
|
||||
#
|
||||
# def update_product_prices_list(
|
||||
# menu_category_id: Optional[uuid.UUID], date_: date, db: Session
|
||||
# ) -> List[UpdateProductPricesItem]:
|
||||
# list_: List[ProductVersion] = (
|
||||
# db.query(ProductVersion)
|
||||
# .join(ProductVersion.menu_category)
|
||||
# .filter(
|
||||
# and_(
|
||||
# or_(
|
||||
# ProductVersion.valid_from == None, # noqa: E711
|
||||
# ProductVersion.valid_from <= date_,
|
||||
# ),
|
||||
# or_(
|
||||
# ProductVersion.valid_till == None, # noqa: E711
|
||||
# ProductVersion.valid_till >= date_,
|
||||
# ),
|
||||
# )
|
||||
# )
|
||||
# )
|
||||
# if menu_category_id is not None:
|
||||
# list_ = list_.filter(ProductVersion.menu_category_id == menu_category_id)
|
||||
# list_.order_by(
|
||||
# MenuCategory.sort_order,
|
||||
# MenuCategory.name,
|
||||
# ProductVersion.sort_order,
|
||||
# ProductVersion.name,
|
||||
# ProductVersion.valid_from.nullsfirst(),
|
||||
# ).options(
|
||||
# joinedload(ProductVersion.menu_category, innerjoin=True),
|
||||
# contains_eager(ProductVersion.menu_category),
|
||||
# ).all()
|
||||
#
|
||||
# return [
|
||||
# UpdateProductPricesItem(id=item.product_id, name=item.full_name, oldPrice=item.price, newPrice=item.price)
|
||||
# for item in list_
|
||||
# ]
|
||||
#
|
||||
#
|
||||
# @router.post("", response_model=UpdateProductPrices)
|
||||
# def save_update_product_prices(
|
||||
# data: UpdateProductPrices,
|
||||
# db: Session = Depends(get_db),
|
||||
# user: UserToken = Security(get_user, scopes=["products"]),
|
||||
# ) -> UpdateProductPrices:
|
||||
# for item in data.items:
|
||||
# update_product(item.id, item.new_price, data.date_, db)
|
||||
# db.commit()
|
||||
# return UpdateProductPrices(
|
||||
# date=data.date_,
|
||||
# items=update_product_prices_list(None, data.date_, db),
|
||||
# )
|
||||
#
|
||||
#
|
||||
# @router.post("/{id_}", response_model=UpdateProductPrices)
|
||||
# def save_update_product_prices_id(
|
||||
# id_: uuid.UUID,
|
||||
# data: UpdateProductPrices,
|
||||
# db: Session = Depends(get_db),
|
||||
# user: UserToken = Security(get_user, scopes=["products"]),
|
||||
# ) -> UpdateProductPrices:
|
||||
# for item in data.items:
|
||||
# update_product(item.id, item.new_price, data.date_, db)
|
||||
# db.commit()
|
||||
# return UpdateProductPrices(
|
||||
# date=data.date_,
|
||||
# menuCategoryId=id_,
|
||||
# items=update_product_prices_list(id_, data.date_, db),
|
||||
# )
|
||||
#
|
||||
#
|
||||
# def update_product(id_: uuid.UUID, price: Decimal, date_: date, db: Session):
|
||||
# item: ProductVersion = (
|
||||
# db.query(ProductVersion)
|
||||
# .join(ProductVersion.menu_category)
|
||||
# .filter(
|
||||
# and_(
|
||||
# ProductVersion.product_id == id_,
|
||||
# or_(
|
||||
# ProductVersion.valid_from == None, # noqa: E711
|
||||
# ProductVersion.valid_from <= date_,
|
||||
# ),
|
||||
# or_(
|
||||
# ProductVersion.valid_till == None, # noqa: E711
|
||||
# ProductVersion.valid_till >= date_,
|
||||
# ),
|
||||
# )
|
||||
# )
|
||||
# .first()
|
||||
# )
|
||||
# if item.valid_till is not None:
|
||||
# # Allow adding a product here splitting the valid from and to, but not implemented right now
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||
# detail="Product has been invalidated",
|
||||
# )
|
||||
# if item.valid_from == date_: # Update the product as valid from the the same
|
||||
# item.price = price
|
||||
# db.commit()
|
||||
# else: # Create a new version of the product from the new details
|
||||
# item.valid_till = date_ - timedelta(days=1)
|
||||
# product_version = ProductVersion(
|
||||
# product_id=item.product_id,
|
||||
# name=item.name,
|
||||
# units=item.units,
|
||||
# menu_category_id=item.menu_category_id,
|
||||
# sale_category_id=item.sale_category_id,
|
||||
# price=price,
|
||||
# has_happy_hour=item.has_happy_hour,
|
||||
# is_not_available=item.is_not_available,
|
||||
# quantity=item.quantity,
|
||||
# valid_from=date_,
|
||||
# valid_till=None,
|
||||
# sort_order=item.sort_order,
|
||||
# )
|
||||
# db.add(product_version)
|
@ -1,155 +0,0 @@
|
||||
# import uuid
|
||||
#
|
||||
# from decimal import Decimal
|
||||
# from typing import List, Optional
|
||||
#
|
||||
# import barker.schemas.voucher as schemas
|
||||
#
|
||||
# from fastapi import HTTPException, status
|
||||
# from sqlalchemy import func
|
||||
# from sqlalchemy.orm import Session
|
||||
#
|
||||
# from ...models.master import SettleOption, VoucherType
|
||||
# from ...models.voucher import GuestBook, Overview, Settlement, Voucher
|
||||
# from ...schemas.receive_payment import ReceivePaymentItem as SettleSchema
|
||||
#
|
||||
#
|
||||
# def get_tax(tax, voucher_type):
|
||||
# if voucher_type in [VoucherType.STAFF, VoucherType.NO_CHARGE]:
|
||||
# return 0
|
||||
# elif voucher_type in [VoucherType.KOT, VoucherType.REGULAR_BILL]:
|
||||
# return tax
|
||||
# else:
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
|
||||
# detail="Unexpected Voucher Type",
|
||||
# )
|
||||
#
|
||||
#
|
||||
# def get_bill_id(voucher_type: VoucherType, db: Session) -> Optional[int]:
|
||||
# if voucher_type == VoucherType.KOT:
|
||||
# return None
|
||||
# bill_id = (
|
||||
# db.query(func.coalesce(func.max(Voucher.bill_id), 0) + 1).filter(Voucher.voucher_type == voucher_type).scalar()
|
||||
# )
|
||||
# if voucher_type == VoucherType.REGULAR_BILL and bill_id % 10000 == 0:
|
||||
# bill_id += 1
|
||||
# return bill_id
|
||||
#
|
||||
#
|
||||
# def do_update_table(item: Voucher, guest_book: Optional[GuestBook], db: Session):
|
||||
# status_ = "running" if item.voucher_type == VoucherType.KOT else "printed"
|
||||
# if item.status is None:
|
||||
# item.status = Overview(
|
||||
# voucher_id=item.id,
|
||||
# food_table_id=item.food_table_id,
|
||||
# guest_book_id=guest_book.id if guest_book is not None else None,
|
||||
# status=status_,
|
||||
# )
|
||||
# db.add(item.status)
|
||||
# else:
|
||||
# item.status.status = status_
|
||||
#
|
||||
#
|
||||
# def check_permissions(item: Optional[Voucher], voucher_type: VoucherType, permissions: List[str]):
|
||||
# if voucher_type == VoucherType.KOT and "print-kot" not in permissions:
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_403_FORBIDDEN,
|
||||
# detail="You are not allowed to print a kot",
|
||||
# )
|
||||
# if voucher_type != VoucherType.KOT and "print-bill" not in permissions:
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_403_FORBIDDEN,
|
||||
# detail="You are not allowed to print bill",
|
||||
# )
|
||||
#
|
||||
# if item is None:
|
||||
# return
|
||||
# if item.voucher_type != VoucherType.KOT and "edit-printed-bill" not in permissions:
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_403_FORBIDDEN,
|
||||
# detail="You are not allowed to edit a printed bill",
|
||||
# )
|
||||
#
|
||||
# if item.voucher_type != VoucherType.KOT and voucher_type == VoucherType.KOT:
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_403_FORBIDDEN,
|
||||
# detail="This Bill is already printed\nCannot add a Kot to it.",
|
||||
# )
|
||||
#
|
||||
# if item.voucher_type == VoucherType.VOID:
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_403_FORBIDDEN,
|
||||
# detail=f"This Bill is already void.\nReason: {item.reason}",
|
||||
# )
|
||||
#
|
||||
#
|
||||
# def get_guest_book(id_: uuid.UUID, db: Session):
|
||||
# if id_ is None:
|
||||
# return id_
|
||||
# return db.query(GuestBook).filter(GuestBook.id == id_).first()
|
||||
#
|
||||
#
|
||||
# def do_update_settlements(voucher: Voucher, others: List[SettleSchema], db: Session) -> bool:
|
||||
# fully_settled = True
|
||||
# settlements: List[SettleSchema] = []
|
||||
# settlements += others
|
||||
# total_amount = voucher.amount
|
||||
# settlements.append(SettleSchema(id=SettleOption.AMOUNT(), amount=-total_amount))
|
||||
# round_off = round(total_amount) - total_amount
|
||||
# if round_off != 0:
|
||||
# settlements.append(SettleSchema(id=SettleOption.ROUND_OFF(), amount=-round_off))
|
||||
# unsettled = sum(x.amount for x in settlements)
|
||||
# if len(others) and unsettled != 0: # This should not be allowed
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
|
||||
# detail="Payment received is not equal to bill amount",
|
||||
# )
|
||||
# if unsettled != 0:
|
||||
# settlements.append(SettleSchema(id=SettleOption.UNSETTLED(), amount=unsettled))
|
||||
# fully_settled = False
|
||||
#
|
||||
# for i in settlements:
|
||||
# old = [s for s in voucher.settlements if s.settled == i.id_]
|
||||
# if len(old) == 1:
|
||||
# old[0].amount = i.amount
|
||||
# else:
|
||||
# s = Settlement(voucher.id, i.id_, i.amount)
|
||||
# voucher.settlements.append(s)
|
||||
# db.add(s)
|
||||
#
|
||||
# for i in (i for i in voucher.settlements if i.settled not in [x.id_ for x in settlements]):
|
||||
# voucher.settlements.remove(i)
|
||||
# db.delete(i)
|
||||
# return fully_settled
|
||||
#
|
||||
#
|
||||
# def happy_hour_items_balanced(inventories: List[schemas.Inventory]) -> bool:
|
||||
# happy = set((i.product.id_, i.quantity) for i in inventories if i.is_happy_hour)
|
||||
# products = set(i.product.id_ for i in inventories if i.is_happy_hour)
|
||||
# other = set((i.product.id_, i.quantity) for i in inventories if not i.is_happy_hour and i.product.id_ in products)
|
||||
# return happy == other
|
||||
#
|
||||
#
|
||||
# def happy_hour_has_discount(inventories: List[schemas.Inventory]) -> bool:
|
||||
# happy = set(i.product.id_ for i in inventories if i.is_happy_hour)
|
||||
# offenders = [i for i in inventories if i.product.id_ in happy and i.discount != 0]
|
||||
# return len(offenders) > 0
|
||||
#
|
||||
#
|
||||
# # This is for the whole bill. eg. Kot 1 => Reg 2 + HH 2; Kot 2 => Reg 4; Kot 3 => Reg - 4
|
||||
# # This is pass okay in happy hours items balanced, but overall this is wrong. Hence this check
|
||||
# def happy_hour_items_more_than_regular(kots: List[schemas.Kot]) -> bool:
|
||||
# inventories = {}
|
||||
# for kot in kots:
|
||||
# for inventory in kot.inventories:
|
||||
# if inventory.product.id_ not in inventories:
|
||||
# inventories[inventory.product.id_] = {"normal": Decimal(0), "happy": Decimal(0)}
|
||||
# if inventory.is_happy_hour:
|
||||
# inventories[inventory.product.id_]["happy"] += inventory.quantity
|
||||
# else:
|
||||
# inventories[inventory.product.id_]["normal"] += inventory.quantity
|
||||
# for value in inventories.values():
|
||||
# if value["happy"] > value["normal"]:
|
||||
# return True
|
||||
# return False
|
@ -1,99 +0,0 @@
|
||||
# import uuid
|
||||
#
|
||||
# from typing import Optional
|
||||
#
|
||||
# import barker.schemas.voucher as schemas
|
||||
#
|
||||
# from fastapi import APIRouter, Depends, HTTPException, Security, status
|
||||
# from sqlalchemy.exc import SQLAlchemyError
|
||||
# from sqlalchemy.orm import Session
|
||||
#
|
||||
# from ...core.security import get_current_active_user as get_user
|
||||
# from ...db.session import SessionLocal
|
||||
# from ...models.master import SettleOption, VoucherType
|
||||
# from ...models.voucher import Overview, Reprint, Voucher
|
||||
# from ...routers.voucher import do_update_settlements, get_guest_book
|
||||
# from ...schemas.receive_payment import ReceivePaymentItem as SettleSchema
|
||||
# from ...schemas.user_token import UserToken
|
||||
# from .save import do_save
|
||||
#
|
||||
#
|
||||
# router = APIRouter()
|
||||
#
|
||||
#
|
||||
# # Dependency
|
||||
# def get_db():
|
||||
# try:
|
||||
# db = SessionLocal()
|
||||
# yield db
|
||||
# finally:
|
||||
# db.close()
|
||||
#
|
||||
#
|
||||
# @router.put("/change/{id_}")
|
||||
# def change(
|
||||
# id_: uuid.UUID,
|
||||
# data: schemas.VoucherIn,
|
||||
# u: bool, # Update table?
|
||||
# g: Optional[uuid.UUID] = None, # Guest book id
|
||||
# db: Session = Depends(get_db),
|
||||
# user: UserToken = Security(get_user, scopes=["edit-printed-bill"]),
|
||||
# ):
|
||||
# try:
|
||||
# old: Voucher = db.query(Voucher).filter(Voucher.id == id_).first()
|
||||
# if old.voucher_type == VoucherType.VOID:
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
|
||||
# detail="Voucher cannot be reprinted. It is already void.",
|
||||
# )
|
||||
# bill_changed: bool = (
|
||||
# len(
|
||||
# set((i.id, i.amount) for k in old.kots for i in k.inventories)
|
||||
# ^ set((i.id_, i.amount) for k in data.kots for i in k.inventories)
|
||||
# )
|
||||
# != 0
|
||||
# )
|
||||
# if bill_changed:
|
||||
# void_and_issue_new_bill(data, u, g, old, db, user)
|
||||
# else:
|
||||
# reprint_bill(id_, user.id_, db)
|
||||
# db.commit()
|
||||
# except SQLAlchemyError as e:
|
||||
# db.rollback()
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||
# detail=str(e),
|
||||
# )
|
||||
# except Exception:
|
||||
# db.rollback()
|
||||
# raise
|
||||
#
|
||||
#
|
||||
# def reprint_bill(voucher_id: uuid.UUID, user_id: uuid.UUID, db: Session):
|
||||
# item = Reprint(voucher_id=voucher_id, user_id=user_id)
|
||||
# db.add(item)
|
||||
#
|
||||
#
|
||||
# def void_and_issue_new_bill(
|
||||
# data: schemas.VoucherIn,
|
||||
# u: bool,
|
||||
# g: Optional[uuid.UUID],
|
||||
# old: Voucher,
|
||||
# db: Session,
|
||||
# user: UserToken,
|
||||
# ):
|
||||
# update_table = u
|
||||
# guest_book = get_guest_book(g, db)
|
||||
# item: Voucher = do_save(data, old.voucher_type, guest_book, db, user)
|
||||
# db.flush()
|
||||
# old.bill_id = None
|
||||
# old.voucher_type = VoucherType.VOID
|
||||
# old.reason = f"Bill Discounted / Changed. New Bill ID is {item.full_bill_id}"
|
||||
# do_update_settlements(old, [SettleSchema(id=SettleOption.VOID(), amount=round(old.amount))], db)
|
||||
#
|
||||
# if update_table:
|
||||
# if old.status is None:
|
||||
# item.status = Overview(voucher_id=None, food_table_id=item.food_table_id, status="printed")
|
||||
# db.add(item.status)
|
||||
# else:
|
||||
# db.query(Overview).filter(Overview.voucher_id == old.id).update({Overview.voucher_id: item.id})
|
@ -1,177 +0,0 @@
|
||||
# import uuid
|
||||
#
|
||||
# from datetime import datetime
|
||||
# from typing import List
|
||||
#
|
||||
# import barker.schemas.merge_move as schemas
|
||||
#
|
||||
# from fastapi import APIRouter, Depends, HTTPException, Security, status
|
||||
# from sqlalchemy import func
|
||||
# from sqlalchemy.exc import SQLAlchemyError
|
||||
# from sqlalchemy.orm import Session
|
||||
#
|
||||
# from ...core.security import get_current_active_user as get_user
|
||||
# from ...db.session import SessionLocal
|
||||
# from ...models.master import VoucherType
|
||||
# from ...models.voucher import Kot, Overview, Settlement, Voucher
|
||||
# from ...routers.voucher import do_update_settlements, do_update_table, get_bill_id
|
||||
# from ...schemas.user_token import UserToken
|
||||
#
|
||||
#
|
||||
# router = APIRouter()
|
||||
#
|
||||
#
|
||||
# # Dependency
|
||||
# def get_db():
|
||||
# try:
|
||||
# db = SessionLocal()
|
||||
# yield db
|
||||
# finally:
|
||||
# db.close()
|
||||
#
|
||||
#
|
||||
# @router.post("/move-kot/merge")
|
||||
# def merge_kot(
|
||||
# data: schemas.MergeKot,
|
||||
# db: Session = Depends(get_db),
|
||||
# user: UserToken = Security(get_user, scopes=["merge-kots"]),
|
||||
# ):
|
||||
# try:
|
||||
# check_if_voucher_is_unprinted(data.voucher_id, db)
|
||||
# kots: int = db.query(func.count(Kot.id)).filter(Kot.voucher_id == data.voucher_id).scalar()
|
||||
# if kots <= 1:
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||
# detail="Single kot cannot be used, move table instead. This error should not show up in frontend",
|
||||
# )
|
||||
# check_if_voucher_is_unprinted(data.new_voucher_id, db)
|
||||
#
|
||||
# db.query(Kot).filter(Kot.id == data.kot_id, Kot.voucher_id == data.voucher_id).update(
|
||||
# {Kot.voucher_id: data.new_voucher_id}
|
||||
# )
|
||||
# update_settlements([data.voucher_id, data.new_voucher_id], db)
|
||||
# db.commit()
|
||||
# except SQLAlchemyError as e:
|
||||
# db.rollback()
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||
# detail=str(e),
|
||||
# )
|
||||
# except Exception:
|
||||
# db.rollback()
|
||||
# raise
|
||||
#
|
||||
#
|
||||
# @router.post("/move-kot/move")
|
||||
# def move_kot(
|
||||
# data: schemas.MoveKot,
|
||||
# db: Session = Depends(get_db),
|
||||
# user: UserToken = Security(get_user, scopes=["move-kot-to-new-table"]),
|
||||
# ):
|
||||
# try:
|
||||
# now = datetime.now()
|
||||
# check_if_voucher_is_unprinted(data.voucher_id, db)
|
||||
# kots: int = db.query(func.count(Kot.id)).filter(Kot.voucher_id == data.voucher_id).scalar()
|
||||
# if kots <= 1:
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||
# detail="Single kot cannot be used, move table instead. This error should not show up in frontend",
|
||||
# )
|
||||
# kot = db.query(Kot).filter(Kot.id == data.kot_id).first()
|
||||
# bill_id = get_bill_id(kot.voucher.voucher_type, db)
|
||||
# kot_id = db.query(func.coalesce(func.max(Voucher.kot_id), 0) + 1).scalar()
|
||||
#
|
||||
# item = Voucher(
|
||||
# now,
|
||||
# kot.voucher.pax,
|
||||
# bill_id,
|
||||
# kot_id,
|
||||
# data.table_id,
|
||||
# kot.voucher.customer_id if kot.voucher.customer is not None else None,
|
||||
# kot.voucher.voucher_type,
|
||||
# user.id_,
|
||||
# )
|
||||
# db.add(item)
|
||||
# item.kots.append(kot)
|
||||
# db.flush()
|
||||
# do_update_table(item, None, db)
|
||||
# update_settlements([data.voucher_id, item.id], db)
|
||||
# db.commit()
|
||||
# except SQLAlchemyError as e:
|
||||
# db.rollback()
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||
# detail=str(e),
|
||||
# )
|
||||
# except Exception:
|
||||
# db.rollback()
|
||||
# raise
|
||||
#
|
||||
#
|
||||
# @router.post("/move-table/move")
|
||||
# def move_table(
|
||||
# data: schemas.MoveTable,
|
||||
# db: Session = Depends(get_db),
|
||||
# user: UserToken = Security(get_user, scopes=["move-table"]),
|
||||
# ):
|
||||
# try:
|
||||
# db.query(Overview).filter(Overview.voucher_id == data.voucher_id).update(
|
||||
# {Overview.food_table_id: data.table_id}
|
||||
# )
|
||||
# db.query(Voucher).filter(Voucher.id == data.voucher_id).update({Voucher.food_table_id: data.table_id})
|
||||
# db.commit()
|
||||
# except SQLAlchemyError as e:
|
||||
# db.rollback()
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||
# detail=str(e),
|
||||
# )
|
||||
# except Exception:
|
||||
# db.rollback()
|
||||
# raise
|
||||
#
|
||||
#
|
||||
# @router.post("/move-table/merge")
|
||||
# def merge_table(
|
||||
# data: schemas.MergeTable,
|
||||
# db: Session = Depends(get_db),
|
||||
# user: UserToken = Security(get_user, scopes=["merge-tables"]),
|
||||
# ):
|
||||
# try:
|
||||
# check_if_voucher_is_unprinted(data.voucher_id, db)
|
||||
# check_if_voucher_is_unprinted(data.new_voucher_id, db)
|
||||
# db.query(Kot).filter(Kot.voucher_id == data.voucher_id).update({Kot.voucher_id: data.new_voucher_id})
|
||||
# db.query(Overview).filter(Overview.voucher_id == data.voucher_id).delete()
|
||||
# db.query(Settlement).filter(Settlement.voucher_id == data.voucher_id).delete()
|
||||
# db.query(Voucher).filter(Voucher.id == data.voucher_id).delete()
|
||||
# update_settlements([data.new_voucher_id], db)
|
||||
# db.commit()
|
||||
# except SQLAlchemyError as e:
|
||||
# db.rollback()
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||
# detail=str(e),
|
||||
# )
|
||||
# except Exception:
|
||||
# db.rollback()
|
||||
# raise
|
||||
#
|
||||
#
|
||||
# def update_settlements(vouchers: List[uuid.UUID], db: Session):
|
||||
# for v in vouchers:
|
||||
# voucher: Voucher = db.query(Voucher).filter(Voucher.id == v).first()
|
||||
# do_update_settlements(voucher, [], db)
|
||||
#
|
||||
#
|
||||
# def check_if_voucher_is_unprinted(voucher_id: uuid.UUID, db: Session) -> None:
|
||||
# voucher_type: VoucherType = db.query(Voucher.voucher_type).filter(Voucher.id == voucher_id).scalar()
|
||||
# if voucher_type is None:
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_404_NOT_FOUND,
|
||||
# detail="Original bill not found",
|
||||
# )
|
||||
# if voucher_type != VoucherType.KOT:
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_403_FORBIDDEN,
|
||||
# detail="Bill is printed or void.",
|
||||
# )
|
@ -1,67 +0,0 @@
|
||||
# import uuid
|
||||
#
|
||||
# import barker.schemas.receive_payment as schemas
|
||||
#
|
||||
# from fastapi import APIRouter, Depends, HTTPException, Security, status
|
||||
# from sqlalchemy.exc import SQLAlchemyError
|
||||
# from sqlalchemy.orm import Session
|
||||
#
|
||||
# from ...core.security import get_current_active_user as get_user
|
||||
# from ...db.session import SessionLocal
|
||||
# from ...models.master import SettleOption, VoucherType
|
||||
# from ...models.voucher import Overview, Voucher
|
||||
# from ...schemas.user_token import UserToken
|
||||
# from . import do_update_settlements
|
||||
#
|
||||
#
|
||||
# router = APIRouter()
|
||||
#
|
||||
#
|
||||
# # Dependency
|
||||
# def get_db():
|
||||
# try:
|
||||
# db = SessionLocal()
|
||||
# yield db
|
||||
# finally:
|
||||
# db.close()
|
||||
#
|
||||
#
|
||||
# @router.post("/receive-payment/{id_}")
|
||||
# def update(
|
||||
# id_: uuid.UUID,
|
||||
# data: schemas.ReceivePayment,
|
||||
# u: bool, # Update table?
|
||||
# db: Session = Depends(get_db),
|
||||
# user: UserToken = Security(get_user, scopes=["settle-bill"]),
|
||||
# ):
|
||||
# try:
|
||||
# update_table = u
|
||||
# amounts = [
|
||||
# j for j in data.amounts if j.amount != 0 and j.id_ not in [SettleOption.AMOUNT(), SettleOption.ROUND_OFF()]
|
||||
# ]
|
||||
# for i in amounts:
|
||||
# i.amount = round(i.amount, 0)
|
||||
# item: Voucher = db.query(Voucher).filter(Voucher.id == id_).first()
|
||||
#
|
||||
# if item.voucher_type in [VoucherType.NO_CHARGE, VoucherType.STAFF]:
|
||||
# item.reason = data.reason.title()
|
||||
#
|
||||
# if not do_update_settlements(item, amounts, db):
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
|
||||
# detail="Bill amount not fully settled",
|
||||
# )
|
||||
#
|
||||
# if update_table:
|
||||
# db.query(Overview).filter(Overview.voucher_id == item.id).delete()
|
||||
# db.commit()
|
||||
# return True
|
||||
# except SQLAlchemyError as e:
|
||||
# db.rollback()
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||
# detail=str(e),
|
||||
# )
|
||||
# except Exception:
|
||||
# db.rollback()
|
||||
# raise
|
@ -1,179 +0,0 @@
|
||||
# import uuid
|
||||
#
|
||||
# from datetime import datetime, timedelta
|
||||
# from typing import Optional
|
||||
#
|
||||
# import barker.schemas.voucher as schemas
|
||||
#
|
||||
# from fastapi import APIRouter, Depends, HTTPException, Security, status
|
||||
# from sqlalchemy import and_, func, or_
|
||||
# from sqlalchemy.exc import SQLAlchemyError
|
||||
# from sqlalchemy.orm import Session
|
||||
#
|
||||
# from ...core.config import settings
|
||||
# from ...core.security import get_current_active_user as get_user
|
||||
# from ...db.session import SessionLocal
|
||||
# from ...models.master import ProductVersion, VoucherType
|
||||
# from ...models.voucher import GuestBook, Inventory, InventoryModifier, Kot, Voucher
|
||||
# from ...printing.bill import print_bill
|
||||
# from ...printing.kot import print_kot
|
||||
# from ...routers.voucher import (
|
||||
# check_permissions,
|
||||
# do_update_settlements,
|
||||
# do_update_table,
|
||||
# get_bill_id,
|
||||
# get_guest_book,
|
||||
# get_tax,
|
||||
# happy_hour_has_discount,
|
||||
# happy_hour_items_balanced,
|
||||
# )
|
||||
# from ...schemas.user_token import UserToken
|
||||
#
|
||||
#
|
||||
# router = APIRouter()
|
||||
#
|
||||
#
|
||||
# # Dependency
|
||||
# def get_db():
|
||||
# try:
|
||||
# db = SessionLocal()
|
||||
# yield db
|
||||
# finally:
|
||||
# db.close()
|
||||
#
|
||||
#
|
||||
# @router.post("/save")
|
||||
# def save(
|
||||
# data: schemas.VoucherIn,
|
||||
# u: bool, # Update table?
|
||||
# p: int, # Print type
|
||||
# g: Optional[uuid.UUID] = None, # Guest book id
|
||||
# db: Session = Depends(get_db),
|
||||
# user: UserToken = Security(get_user),
|
||||
# ):
|
||||
# try:
|
||||
# update_table = u
|
||||
# voucher_type = VoucherType(p)
|
||||
# guest_book = get_guest_book(g, db)
|
||||
# item: Voucher = do_save(data, voucher_type, guest_book, db, user)
|
||||
# if update_table:
|
||||
# do_update_table(item, guest_book, db)
|
||||
# db.commit()
|
||||
# print_kot(item.id, db)
|
||||
# if item.voucher_type != VoucherType.KOT:
|
||||
# print_bill(item.id, db)
|
||||
# except SQLAlchemyError as e:
|
||||
# db.rollback()
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||
# detail=str(e),
|
||||
# )
|
||||
# except Exception:
|
||||
# db.rollback()
|
||||
# raise
|
||||
#
|
||||
#
|
||||
# def do_save(
|
||||
# data: schemas.VoucherIn,
|
||||
# voucher_type: VoucherType,
|
||||
# guest_book: GuestBook,
|
||||
# db: Session,
|
||||
# user: UserToken,
|
||||
# ):
|
||||
# now = datetime.now()
|
||||
# product_date = (now - timedelta(minutes=settings.NEW_DAY_OFFSET_MINUTES)).date()
|
||||
# check_permissions(None, voucher_type, user.permissions)
|
||||
#
|
||||
# bill_id = get_bill_id(voucher_type, db)
|
||||
# kot_id = db.query(func.coalesce(func.max(Voucher.kot_id), 0) + 1).scalar()
|
||||
#
|
||||
# item = Voucher(
|
||||
# now,
|
||||
# guest_book.pax if guest_book is not None else data.pax,
|
||||
# bill_id,
|
||||
# kot_id,
|
||||
# data.table.id_,
|
||||
# data.customer.id_ if data.customer is not None else None,
|
||||
# voucher_type,
|
||||
# user.id_,
|
||||
# )
|
||||
# db.add(item)
|
||||
# for k in data.kots:
|
||||
# if not len(k.inventories):
|
||||
# continue
|
||||
# if not happy_hour_items_balanced(k.inventories):
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
|
||||
# detail="Happy hour products are not balanced.",
|
||||
# )
|
||||
# if happy_hour_has_discount(k.inventories):
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
|
||||
# detail="Discount is not allowed on happy hour products.",
|
||||
# )
|
||||
# code = db.query(func.coalesce(func.max(Kot.code), 0) + 1).scalar()
|
||||
# kot = Kot(item.id, code, item.food_table_id, item.date, item.user_id)
|
||||
# item.kots.append(kot)
|
||||
# db.add(kot)
|
||||
# for index, i in enumerate(k.inventories):
|
||||
# if i.quantity == 0:
|
||||
# continue
|
||||
# total_quantity = round(
|
||||
# sum(inv.quantity for ko in data.kots for inv in ko.inventories if inv.product.id_ == i.product.id_),
|
||||
# 2,
|
||||
# )
|
||||
# product: ProductVersion = (
|
||||
# db.query(ProductVersion)
|
||||
# .filter(
|
||||
# and_(
|
||||
# ProductVersion.product_id == i.product.id_,
|
||||
# or_(
|
||||
# ProductVersion.valid_from == None, # noqa: E711
|
||||
# ProductVersion.valid_from <= product_date,
|
||||
# ),
|
||||
# or_(
|
||||
# ProductVersion.valid_till == None, # noqa: E711
|
||||
# ProductVersion.valid_till >= product_date,
|
||||
# ),
|
||||
# )
|
||||
# )
|
||||
# .first()
|
||||
# )
|
||||
# if total_quantity < 0:
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
|
||||
# detail=f"Quantity of {product.full_name} cannot be less than 0",
|
||||
# )
|
||||
# if round(i.quantity, 2) < 0:
|
||||
# if "edit-printed-product" not in user.permissions:
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_403_FORBIDDEN,
|
||||
# detail=f"You are not allowed to delete printed products."
|
||||
# f"\n In this case {product.full_name}",
|
||||
# )
|
||||
# tax_rate = get_tax(product.sale_category.tax.rate, voucher_type)
|
||||
# inv = Inventory(
|
||||
# kot.id,
|
||||
# product.product_id,
|
||||
# round(i.quantity, 2),
|
||||
# product.price,
|
||||
# round(min(i.discount, product.sale_category.discount_limit), 5),
|
||||
# i.is_happy_hour,
|
||||
# product.sale_category.tax_id,
|
||||
# tax_rate,
|
||||
# index,
|
||||
# )
|
||||
# kot.inventories.append(inv)
|
||||
# db.add(inv)
|
||||
# for m in i.modifiers:
|
||||
# mod = InventoryModifier(None, m.id_, 0)
|
||||
# inv.modifiers.append(mod)
|
||||
# db.add(mod)
|
||||
# db.flush()
|
||||
# do_update_settlements(item, [], db)
|
||||
# if len(item.kots) == 0 or len(item.kots[0].inventories) == 0:
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
|
||||
# detail="Please add some products",
|
||||
# )
|
||||
# return item
|
@ -1,207 +0,0 @@
|
||||
# import re
|
||||
# import uuid
|
||||
#
|
||||
# from datetime import date
|
||||
# from typing import Optional
|
||||
#
|
||||
# from fastapi import APIRouter, Depends, HTTPException, Security, status
|
||||
# from sqlalchemy import and_, or_
|
||||
# from sqlalchemy.orm import Session
|
||||
#
|
||||
# from ...core.security import get_current_active_user as get_user
|
||||
# from ...db.session import SessionLocal
|
||||
# from ...models.master import FoodTable, ProductVersion, VoucherType
|
||||
# from ...models.voucher import GuestBook, Overview, Voucher
|
||||
# from ...schemas.user_token import UserToken
|
||||
#
|
||||
#
|
||||
# router = APIRouter()
|
||||
#
|
||||
#
|
||||
# # Dependency
|
||||
# def get_db():
|
||||
# try:
|
||||
# db = SessionLocal()
|
||||
# yield db
|
||||
# finally:
|
||||
# db.close()
|
||||
#
|
||||
#
|
||||
# @router.get("/from-id/{id_}")
|
||||
# def from_id(
|
||||
# id_: str,
|
||||
# db: Session = Depends(get_db),
|
||||
# user: UserToken = Security(get_user),
|
||||
# ):
|
||||
# item: Voucher = db.query(Voucher).filter(Voucher.id == id_).first()
|
||||
# return voucher_info(item, db)
|
||||
#
|
||||
#
|
||||
# @router.get("/from-bill/{id_}")
|
||||
# def from_bill(
|
||||
# id_: str,
|
||||
# db: Session = Depends(get_db),
|
||||
# user: UserToken = Security(get_user),
|
||||
# ):
|
||||
# item: Voucher = db.query(Voucher)
|
||||
# if re.compile(r"^\d{2,}-\d{4}$").match(id_):
|
||||
# item = item.filter(
|
||||
# Voucher.bill_id == int(id_.replace("-", "")), Voucher.voucher_type == VoucherType.REGULAR_BILL
|
||||
# )
|
||||
# elif re.compile(r"^K-\d+$").match(id_):
|
||||
# item = item.filter(
|
||||
# Voucher.kot_id == int(id_.replace("K-", "")),
|
||||
# Voucher.voucher_type == VoucherType.KOT,
|
||||
# )
|
||||
# elif re.compile(r"^NC-\d+$").match(id_):
|
||||
# item = item.filter(
|
||||
# Voucher.bill_id == int(id_.replace("NC-", "")),
|
||||
# Voucher.voucher_type == VoucherType.NO_CHARGE,
|
||||
# )
|
||||
# elif re.compile(r"^ST-\d+$").match(id_):
|
||||
# item = item.filter(
|
||||
# Voucher.bill_id == int(id_.replace("ST-", "")),
|
||||
# Voucher.voucher_type == VoucherType.STAFF,
|
||||
# )
|
||||
# else:
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
|
||||
# detail="Bill Number is invalid",
|
||||
# )
|
||||
# item = item.first()
|
||||
# if item is None:
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_404_NOT_FOUND,
|
||||
# detail="Bill not found",
|
||||
# )
|
||||
# return voucher_info(item, db)
|
||||
#
|
||||
#
|
||||
# @router.get("/from-table/{id_}")
|
||||
# def from_table(
|
||||
# id_: str, # table id
|
||||
# v: Optional[uuid.UUID] = None, # voucher id
|
||||
# g: Optional[uuid.UUID] = None, # guest id
|
||||
# db: Session = Depends(get_db),
|
||||
# user: UserToken = Security(get_user),
|
||||
# ):
|
||||
# if v is not None:
|
||||
# item = (
|
||||
# db.query(Overview)
|
||||
# .filter(
|
||||
# Overview.voucher_id == v,
|
||||
# Overview.food_table_id == id_,
|
||||
# )
|
||||
# .first()
|
||||
# )
|
||||
# if item is None:
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_404_NOT_FOUND,
|
||||
# detail="Voucher not found",
|
||||
# )
|
||||
# else:
|
||||
# return voucher_info(item.voucher, db)
|
||||
# table = db.query(FoodTable).filter(FoodTable.id == id_).first()
|
||||
# if g is not None:
|
||||
# guest = db.query(GuestBook).filter(GuestBook.id == g).first()
|
||||
# else:
|
||||
# guest = None
|
||||
# return voucher_blank(table, guest)
|
||||
#
|
||||
#
|
||||
# def voucher_product(product_id: uuid.UUID, date_: date, is_happy_hour: bool, db: Session):
|
||||
# product: ProductVersion = (
|
||||
# db.query(ProductVersion)
|
||||
# .filter(
|
||||
# and_(
|
||||
# ProductVersion.product_id == product_id,
|
||||
# or_(
|
||||
# ProductVersion.valid_from == None, # noqa: E711
|
||||
# ProductVersion.valid_from <= date_,
|
||||
# ),
|
||||
# or_(
|
||||
# ProductVersion.valid_till == None, # noqa: E711
|
||||
# ProductVersion.valid_till >= date_,
|
||||
# ),
|
||||
# )
|
||||
# )
|
||||
# .first()
|
||||
# )
|
||||
#
|
||||
# return {
|
||||
# "id": product_id,
|
||||
# "name": ("H H " if is_happy_hour else "") + product.full_name,
|
||||
# "menuCategory": {
|
||||
# "id": product.menu_category_id,
|
||||
# "name": product.menu_category.name,
|
||||
# },
|
||||
# "saleCategory": {
|
||||
# "id": product.sale_category_id,
|
||||
# "name": product.sale_category.name,
|
||||
# "discountLimit": product.sale_category.discount_limit,
|
||||
# },
|
||||
# }
|
||||
#
|
||||
#
|
||||
# def voucher_info(item: Voucher, db: Session):
|
||||
# return {
|
||||
# "id": item.id,
|
||||
# "date": item.date.strftime("%H:%M"),
|
||||
# "dateTip": item.date.strftime("%d-%b-%Y %H:%M:%S"),
|
||||
# "pax": item.pax,
|
||||
# "user": {"id": item.user_id, "name": item.user.name},
|
||||
# "creationDate": item.creation_date.strftime("%H:%M"),
|
||||
# "creationDateTip": item.creation_date.strftime("%d-%b-%Y %H:%M:%S"),
|
||||
# "lastEditDate": item.last_edit_date.strftime("%H:%M"),
|
||||
# "lastEditDateTip": item.last_edit_date.strftime("%d-%b-%Y %H:%M:%S"),
|
||||
# "billId": item.full_bill_id,
|
||||
# "table": {"id": item.food_table_id, "name": item.food_table.name},
|
||||
# "customer": {"id": item.customer_id, "name": item.customer.name} if item.customer is not None else None,
|
||||
# "settlements": [],
|
||||
# "narration": item.narration,
|
||||
# "reason": item.reason,
|
||||
# "voucherType": item.voucher_type,
|
||||
# "kotId": item.kot_id,
|
||||
# "kots": [
|
||||
# {
|
||||
# "id": k.id,
|
||||
# "code": k.code,
|
||||
# "date": k.date.strftime("%d-%b-%Y %H:%M:%S"),
|
||||
# "user": {"id": k.user_id, "name": k.user.name},
|
||||
# "inventories": [
|
||||
# {
|
||||
# "id": i.id,
|
||||
# "sortOrder": i.sort_order,
|
||||
# "product": voucher_product(i.product_id, item.date.date(), i.is_happy_hour, db),
|
||||
# "quantity": i.quantity,
|
||||
# "price": i.price,
|
||||
# "isHappyHour": i.is_happy_hour,
|
||||
# "taxRate": i.tax_rate,
|
||||
# "tax": {"id": i.tax_id, "name": i.tax.name},
|
||||
# "discount": i.discount,
|
||||
# "modifiers": [
|
||||
# {
|
||||
# "id": m.modifier.id,
|
||||
# "name": m.modifier.name,
|
||||
# "price": m.price,
|
||||
# }
|
||||
# for m in i.modifiers
|
||||
# ],
|
||||
# }
|
||||
# for i in k.inventories
|
||||
# ],
|
||||
# }
|
||||
# for k in item.kots
|
||||
# ],
|
||||
# "reprints": [],
|
||||
# }
|
||||
#
|
||||
#
|
||||
# def voucher_blank(table: FoodTable, guest: Optional[GuestBook]):
|
||||
# return {
|
||||
# "pax": table.seats if guest is None else guest.pax,
|
||||
# "table": {"id": table.id, "name": table.name},
|
||||
# "voucherType": VoucherType.KOT,
|
||||
# "customer": {"id": guest.customer_id, "name": guest.customer.name} if guest is not None else None,
|
||||
# "kots": [],
|
||||
# }
|
@ -1,204 +0,0 @@
|
||||
# import uuid
|
||||
#
|
||||
# from collections import defaultdict
|
||||
# from datetime import datetime
|
||||
# from decimal import Decimal
|
||||
# from typing import List, Optional
|
||||
#
|
||||
# import barker.schemas.split as schemas
|
||||
#
|
||||
# from fastapi import APIRouter, Depends, HTTPException, Security, status
|
||||
# from sqlalchemy import func
|
||||
# from sqlalchemy.exc import SQLAlchemyError
|
||||
# from sqlalchemy.orm import Session
|
||||
#
|
||||
# from ...core.security import get_current_active_user as get_user
|
||||
# from ...db.session import SessionLocal
|
||||
# from ...models.master import SettleOption, VoucherType
|
||||
# from ...models.voucher import Inventory, InventoryModifier, Kot, Overview, Voucher
|
||||
# from ...routers.voucher import (
|
||||
# check_permissions,
|
||||
# do_update_settlements,
|
||||
# do_update_table,
|
||||
# get_bill_id,
|
||||
# )
|
||||
# from ...schemas.receive_payment import ReceivePaymentItem as SettleSchema
|
||||
# from ...schemas.user_token import UserToken
|
||||
#
|
||||
#
|
||||
# router = APIRouter()
|
||||
#
|
||||
#
|
||||
# # Dependency
|
||||
# def get_db():
|
||||
# try:
|
||||
# db = SessionLocal()
|
||||
# yield db
|
||||
# finally:
|
||||
# db.close()
|
||||
#
|
||||
#
|
||||
# @router.post("/split-bill/{id_}")
|
||||
# def split(
|
||||
# id_: uuid.UUID,
|
||||
# data: schemas.Split,
|
||||
# u: bool, # Update table?
|
||||
# db: Session = Depends(get_db),
|
||||
# user: UserToken = Security(get_user, scopes=["split-bill"]),
|
||||
# ):
|
||||
# try:
|
||||
# now = datetime.now()
|
||||
# update_table = u
|
||||
# item: Voucher = db.query(Voucher).filter(Voucher.id == id_).first()
|
||||
# item.bill_id = None
|
||||
# original_voucher_type = item.voucher_type
|
||||
# item.voucher_type = VoucherType.VOID
|
||||
# item.reason = "Bill Split"
|
||||
# do_update_settlements(item, [SettleSchema(id=SettleOption.VOID(), amount=round(item.amount))], db)
|
||||
# if update_table:
|
||||
# db.query(Overview).filter(Overview.voucher_id == item.id).delete()
|
||||
# check_permissions(None, item.voucher_type, user.permissions)
|
||||
#
|
||||
# one_inventories = [i for k in item.kots for i in k.inventories if i.id in data.inventories]
|
||||
# two_inventories = [i for k in item.kots for i in k.inventories if i.id not in data.inventories]
|
||||
#
|
||||
# one = save(
|
||||
# one_inventories,
|
||||
# now,
|
||||
# original_voucher_type,
|
||||
# 0,
|
||||
# data.table_id,
|
||||
# item.customer_id,
|
||||
# user.id_,
|
||||
# db,
|
||||
# )
|
||||
# if update_table:
|
||||
# do_update_table(one, None, db)
|
||||
# two = save(
|
||||
# two_inventories,
|
||||
# now,
|
||||
# original_voucher_type,
|
||||
# item.pax,
|
||||
# item.food_table_id,
|
||||
# item.customer_id,
|
||||
# user.id_,
|
||||
# db,
|
||||
# )
|
||||
# if update_table:
|
||||
# do_update_table(two, None, db)
|
||||
# db.commit()
|
||||
# except SQLAlchemyError as e:
|
||||
# db.rollback()
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||
# detail=str(e),
|
||||
# )
|
||||
# except Exception:
|
||||
# db.rollback()
|
||||
# raise
|
||||
#
|
||||
#
|
||||
# def save(
|
||||
# inventories: List[Inventory],
|
||||
# now: datetime,
|
||||
# voucher_type: VoucherType,
|
||||
# pax: int,
|
||||
# table_id: uuid.UUID,
|
||||
# customer_id: Optional[uuid.UUID],
|
||||
# user_id: uuid.UUID,
|
||||
# db: Session,
|
||||
# ):
|
||||
# if not are_product_quantities_positive(inventories):
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
|
||||
# detail="Quantity of a product is negative",
|
||||
# )
|
||||
# if len(inventories) == 0:
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
|
||||
# detail="No inventories selected",
|
||||
# )
|
||||
# if happy_hour_items_more_than_regular(inventories):
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
|
||||
# detail="When product has happy hours\n"
|
||||
# "Minimum same number of regular items also needed in the whole bill.",
|
||||
# )
|
||||
# bill_id = get_bill_id(voucher_type, db)
|
||||
# kot_id = db.query(func.coalesce(func.max(Voucher.kot_id), 0) + 1).scalar()
|
||||
#
|
||||
# item: Voucher = Voucher(now, pax, bill_id, kot_id, table_id, customer_id, voucher_type, user_id)
|
||||
# db.add(item)
|
||||
# for split_inventories in split_into_kots(inventories):
|
||||
# if not happy_hour_items_balanced(split_inventories):
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
|
||||
# detail="Happy hour products are not balanced.",
|
||||
# )
|
||||
# code = db.query(func.coalesce(func.max(Kot.code), 0) + 1).scalar()
|
||||
# kot = Kot(item.id, code, item.food_table_id, item.date, item.user_id)
|
||||
# item.kots.append(kot)
|
||||
# db.add(kot)
|
||||
# db.flush()
|
||||
# for old_inventory in split_inventories:
|
||||
# inv = Inventory(
|
||||
# kot.id,
|
||||
# old_inventory.product_id,
|
||||
# old_inventory.quantity,
|
||||
# old_inventory.price,
|
||||
# old_inventory.discount,
|
||||
# old_inventory.is_happy_hour,
|
||||
# old_inventory.tax_id,
|
||||
# old_inventory.tax_rate,
|
||||
# old_inventory.sort_order,
|
||||
# )
|
||||
# kot.inventories.append(inv)
|
||||
# db.add(inv)
|
||||
# for m in old_inventory.modifiers:
|
||||
# mod = InventoryModifier(None, m.modifier_id, m.price)
|
||||
# inv.modifiers.append(mod)
|
||||
# db.add(mod)
|
||||
# db.flush()
|
||||
# do_update_settlements(item, [], db)
|
||||
# db.flush()
|
||||
# return item
|
||||
#
|
||||
#
|
||||
# def split_into_kots(inventories: List[Inventory]) -> list:
|
||||
# kots = defaultdict(list)
|
||||
# for item in inventories:
|
||||
# kots[item.kot_id].append(item)
|
||||
# return [k for k in kots.values() if len(k) > 0]
|
||||
#
|
||||
#
|
||||
# def happy_hour_items_balanced(inventories: List[Inventory]) -> bool:
|
||||
# happy = set((i.product_id, i.quantity) for i in inventories if i.is_happy_hour)
|
||||
# products = set(i.product_id for i in inventories if i.is_happy_hour)
|
||||
# other = set((i.product_id, i.quantity) for i in inventories if not i.is_happy_hour and i.product_id in products)
|
||||
# return happy == other
|
||||
#
|
||||
#
|
||||
# def are_product_quantities_positive(inventories: List[Inventory]) -> bool:
|
||||
# quantities = defaultdict(Decimal)
|
||||
# for i in inventories:
|
||||
# key = (i.product_id, i.is_happy_hour)
|
||||
# quantities[key] += i.quantity
|
||||
# for i in quantities.values():
|
||||
# if i < 0:
|
||||
# return False
|
||||
# return True
|
||||
#
|
||||
#
|
||||
# def happy_hour_items_more_than_regular(invs: List[Inventory]) -> bool:
|
||||
# inventories = {}
|
||||
# for inventory in invs:
|
||||
# if inventory.product_id not in inventories:
|
||||
# inventories[inventory.product_id] = {"normal": Decimal(0), "happy": Decimal(0)}
|
||||
# if inventory.is_happy_hour:
|
||||
# inventories[inventory.product_id]["happy"] += inventory.quantity
|
||||
# else:
|
||||
# inventories[inventory.product_id]["normal"] += inventory.quantity
|
||||
# for value in inventories.values():
|
||||
# if value["happy"] > value["normal"]:
|
||||
# return True
|
||||
# return False
|
@ -1,190 +0,0 @@
|
||||
# import uuid
|
||||
#
|
||||
# from datetime import datetime, timedelta
|
||||
# from typing import Optional
|
||||
#
|
||||
# import barker.schemas.voucher as schemas
|
||||
#
|
||||
# from fastapi import APIRouter, Depends, HTTPException, Security, status
|
||||
# from sqlalchemy import and_, func, or_
|
||||
# from sqlalchemy.exc import SQLAlchemyError
|
||||
# from sqlalchemy.orm import Session
|
||||
#
|
||||
# from ...core.config import settings
|
||||
# from ...core.security import get_current_active_user as get_user
|
||||
# from ...db.session import SessionLocal
|
||||
# from ...models.master import ProductVersion, VoucherType
|
||||
# from ...models.voucher import Inventory, InventoryModifier, Kot, Voucher
|
||||
# from ...printing.bill import print_bill
|
||||
# from ...printing.kot import print_kot
|
||||
# from ...routers.voucher import (
|
||||
# check_permissions,
|
||||
# do_update_settlements,
|
||||
# do_update_table,
|
||||
# get_bill_id,
|
||||
# get_guest_book,
|
||||
# get_tax,
|
||||
# happy_hour_has_discount,
|
||||
# happy_hour_items_balanced,
|
||||
# happy_hour_items_more_than_regular,
|
||||
# )
|
||||
# from ...schemas.user_token import UserToken
|
||||
#
|
||||
#
|
||||
# router = APIRouter()
|
||||
#
|
||||
#
|
||||
# # Dependency
|
||||
# def get_db():
|
||||
# try:
|
||||
# db = SessionLocal()
|
||||
# yield db
|
||||
# finally:
|
||||
# db.close()
|
||||
#
|
||||
#
|
||||
# @router.put("/update/{id_}")
|
||||
# def update(
|
||||
# id_: uuid.UUID,
|
||||
# data: schemas.VoucherIn,
|
||||
# u: bool, # Update table?
|
||||
# p: int, # Print type
|
||||
# g: Optional[uuid.UUID] = None, # Guest book id
|
||||
# db: Session = Depends(get_db),
|
||||
# user: UserToken = Security(get_user),
|
||||
# ):
|
||||
# try:
|
||||
# now = datetime.now()
|
||||
# product_date = (now - timedelta(minutes=settings.NEW_DAY_OFFSET_MINUTES)).date()
|
||||
# update_table = u
|
||||
# voucher_type = VoucherType(p)
|
||||
# guest_book = get_guest_book(g, db)
|
||||
# need_to_print_kot = False
|
||||
#
|
||||
# item: Voucher = db.query(Voucher).filter(Voucher.id == id_).first()
|
||||
#
|
||||
# check_permissions(item, voucher_type, user.permissions)
|
||||
#
|
||||
# if guest_book is not None:
|
||||
# item.pax = guest_book.pax
|
||||
# item.food_table_id = data.table.id_
|
||||
# if data.customer is not None:
|
||||
# item.customer_id = data.customer.id_
|
||||
# if item.voucher_type != VoucherType.KOT:
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||
# detail="Internal error, reprints should not reach here",
|
||||
# )
|
||||
# if item.voucher_type == VoucherType.KOT and voucher_type != VoucherType.KOT:
|
||||
# item.date = now
|
||||
# item.bill_id = get_bill_id(voucher_type, db)
|
||||
# item.voucher_type = voucher_type
|
||||
# item.user_id = user.id_
|
||||
# item.last_edit_date = now
|
||||
# if happy_hour_items_more_than_regular(data.kots):
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
|
||||
# detail="When product has happy hours\n"
|
||||
# "Minimum same number of regular items also needed in the whole bill.",
|
||||
# )
|
||||
# for k in item.kots:
|
||||
# for i in k.inventories:
|
||||
# i.tax_rate = get_tax(i.tax_rate, voucher_type)
|
||||
# # TODO: Need to check from the database product for the max discount
|
||||
# # However simple relationship does not work as we need the product validity as well
|
||||
# # Still we should not fret too much as we are checking this in the frontend.
|
||||
# i.discount = next(
|
||||
# round(inv.discount, 5) for ko in data.kots for inv in ko.inventories if inv.id_ == i.id
|
||||
# )
|
||||
# for k in data.kots:
|
||||
# if happy_hour_has_discount(k.inventories):
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
|
||||
# detail="Discount is not allowed on happy hour products.",
|
||||
# )
|
||||
# if not happy_hour_items_balanced(k.inventories):
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
|
||||
# detail="Happy hour products are not balanced.",
|
||||
# )
|
||||
# for k in (k for k in data.kots if k.id_ is None and len(k.inventories) > 0):
|
||||
# need_to_print_kot = True
|
||||
# code = db.query(func.coalesce(func.max(Kot.code), 0) + 1).scalar()
|
||||
# kot = Kot(item.id, code, item.food_table_id, now, item.user_id)
|
||||
# item.kots.append(kot)
|
||||
# db.add(kot)
|
||||
# for index, i in enumerate(k.inventories):
|
||||
# product: ProductVersion = (
|
||||
# db.query(ProductVersion)
|
||||
# .filter(
|
||||
# and_(
|
||||
# ProductVersion.product_id == i.product.id_,
|
||||
# or_(
|
||||
# ProductVersion.valid_from == None, # noqa: E711
|
||||
# ProductVersion.valid_from <= product_date,
|
||||
# ),
|
||||
# or_(
|
||||
# ProductVersion.valid_till == None, # noqa: E711
|
||||
# ProductVersion.valid_till >= product_date,
|
||||
# ),
|
||||
# )
|
||||
# )
|
||||
# .first()
|
||||
# )
|
||||
# if round(i.quantity, 2) < 0:
|
||||
# if "edit-printed-product" not in user.permissions:
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_403_FORBIDDEN,
|
||||
# detail=f"You are not allowed to delete printed products."
|
||||
# f"\n In this case {product.full_name}",
|
||||
# )
|
||||
# minimum = round(
|
||||
# sum(
|
||||
# inv.quantity
|
||||
# for ko in item.kots
|
||||
# for inv in ko.inventories
|
||||
# if ko.id and inv.product_id == product.id
|
||||
# )
|
||||
# * -1,
|
||||
# 2,
|
||||
# )
|
||||
# if round(i.quantity, 2) < minimum:
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
|
||||
# detail=f"Quantity of {product.full_name} cannot be less than {minimum}",
|
||||
# )
|
||||
# tax_rate = get_tax(product.sale_category.tax.rate, voucher_type)
|
||||
# inv = Inventory(
|
||||
# kot.id,
|
||||
# product.product_id,
|
||||
# round(i.quantity, 2),
|
||||
# product.price,
|
||||
# round(min(i.discount, product.sale_category.discount_limit), 5),
|
||||
# i.is_happy_hour,
|
||||
# product.sale_category.tax_id,
|
||||
# tax_rate,
|
||||
# index,
|
||||
# )
|
||||
# kot.inventories.append(inv)
|
||||
# db.add(inv)
|
||||
# for m in i.modifiers:
|
||||
# mod = InventoryModifier(None, m.id_, 0)
|
||||
# inv.modifiers.append(mod)
|
||||
# db.add(mod)
|
||||
# do_update_settlements(item, [], db)
|
||||
# if update_table:
|
||||
# do_update_table(item, guest_book, db)
|
||||
# db.commit()
|
||||
# if need_to_print_kot:
|
||||
# print_kot(item.id, db)
|
||||
# if item.voucher_type != VoucherType.KOT:
|
||||
# print_bill(item.id, db)
|
||||
# except SQLAlchemyError as e:
|
||||
# db.rollback()
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||
# detail=str(e),
|
||||
# )
|
||||
# except Exception:
|
||||
# db.rollback()
|
||||
# raise
|
@ -1,55 +0,0 @@
|
||||
# import uuid
|
||||
#
|
||||
# from fastapi import APIRouter, Depends, HTTPException, Security, status
|
||||
# from sqlalchemy.exc import SQLAlchemyError
|
||||
# from sqlalchemy.orm import Session
|
||||
#
|
||||
# from ...core.security import get_current_active_user as get_user
|
||||
# from ...db.session import SessionLocal
|
||||
# from ...models.master import SettleOption, VoucherType
|
||||
# from ...models.voucher import Overview, Voucher
|
||||
# from ...schemas.receive_payment import ReceivePaymentItem as SettleSchema
|
||||
# from ...schemas.user_token import UserToken
|
||||
# from . import do_update_settlements
|
||||
#
|
||||
#
|
||||
# router = APIRouter()
|
||||
#
|
||||
#
|
||||
# # Dependency
|
||||
# def get_db():
|
||||
# try:
|
||||
# db = SessionLocal()
|
||||
# yield db
|
||||
# finally:
|
||||
# db.close()
|
||||
#
|
||||
#
|
||||
# @router.post("/void-bill/{id_}")
|
||||
# def void(
|
||||
# id_: uuid.UUID,
|
||||
# u: bool, # Update table?
|
||||
# reason: str,
|
||||
# db: Session = Depends(get_db),
|
||||
# user: UserToken = Security(get_user, scopes=["void-bill"]),
|
||||
# ):
|
||||
# try:
|
||||
# item: Voucher = db.query(Voucher).filter(Voucher.id == id_).first()
|
||||
# item.reason = reason
|
||||
# item.bill_id = None
|
||||
# item.voucher_type = VoucherType.VOID
|
||||
# do_update_settlements(item, [SettleSchema(id=SettleOption.VOID(), amount=round(item.amount))], db)
|
||||
#
|
||||
# if u: # Update table
|
||||
# db.query(Overview).filter(Overview.voucher_id == item.id).delete()
|
||||
# db.commit()
|
||||
# return True
|
||||
# except SQLAlchemyError as e:
|
||||
# db.rollback()
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||
# detail=str(e),
|
||||
# )
|
||||
# except Exception:
|
||||
# db.rollback()
|
||||
# raise
|
@ -1,39 +0,0 @@
|
||||
from datetime import date, datetime
|
||||
from decimal import Decimal
|
||||
from typing import List
|
||||
|
||||
from pydantic import BaseModel, validator
|
||||
|
||||
from . import to_camel
|
||||
|
||||
|
||||
class DiscountReportItem(BaseModel):
|
||||
name: str
|
||||
amount: Decimal
|
||||
|
||||
class Config:
|
||||
anystr_strip_whitespace = True
|
||||
alias_generator = to_camel
|
||||
|
||||
|
||||
class DiscountReport(BaseModel):
|
||||
start_date: date
|
||||
finish_date: date
|
||||
amounts: List[DiscountReportItem]
|
||||
|
||||
class Config:
|
||||
anystr_strip_whitespace = True
|
||||
alias_generator = to_camel
|
||||
json_encoders = {datetime: lambda v: v.strftime("%d-%b-%Y %H:%M"), date: lambda v: v.strftime("%d-%b-%Y")}
|
||||
|
||||
@validator("start_date", pre=True)
|
||||
def parse_start_date(cls, value):
|
||||
if isinstance(value, date):
|
||||
return value
|
||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||
|
||||
@validator("finish_date", pre=True)
|
||||
def parse_finish_date(cls, value):
|
||||
if isinstance(value, date):
|
||||
return value
|
||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
@ -1,79 +0,0 @@
|
||||
import uuid
|
||||
|
||||
from datetime import date, datetime
|
||||
from typing import List, Optional
|
||||
|
||||
from pydantic import BaseModel, Field, validator
|
||||
|
||||
from . import to_camel
|
||||
|
||||
|
||||
class GuestBookIn(BaseModel):
|
||||
name: str
|
||||
phone: str
|
||||
address: str
|
||||
pax: int = Field(ge=0)
|
||||
|
||||
class Config:
|
||||
fields = {"id_": "id"}
|
||||
anystr_strip_whitespace = True
|
||||
alias_generator = to_camel
|
||||
|
||||
|
||||
class GuestBook(GuestBookIn):
|
||||
id_: uuid.UUID
|
||||
date_: datetime
|
||||
|
||||
@validator("date_", pre=True)
|
||||
def parse_date(cls, value):
|
||||
if isinstance(value, datetime):
|
||||
return value
|
||||
return datetime.strptime(value, "%d-%b-%Y %H:%M")
|
||||
|
||||
class Config:
|
||||
fields = {"id_": "id"}
|
||||
anystr_strip_whitespace = True
|
||||
alias_generator = to_camel
|
||||
json_encoders = {datetime: lambda v: v.strftime("%d-%b-%Y %H:%M")}
|
||||
|
||||
|
||||
class GuestBookListItem(BaseModel):
|
||||
id_: uuid.UUID
|
||||
serial: int
|
||||
name: str
|
||||
phone: str
|
||||
pax: int
|
||||
date_: datetime
|
||||
status: Optional[str]
|
||||
table_id: Optional[uuid.UUID]
|
||||
voucher_id: Optional[uuid.UUID]
|
||||
table_name: Optional[str]
|
||||
|
||||
@validator("date_", pre=True)
|
||||
def parse_date(cls, value):
|
||||
if isinstance(value, datetime):
|
||||
return value
|
||||
return datetime.strptime(value, "%d-%b-%Y %H:%M")
|
||||
|
||||
class Config:
|
||||
fields = {"id_": "id"}
|
||||
anystr_strip_whitespace = True
|
||||
alias_generator = to_camel
|
||||
json_encoders = {datetime: lambda v: v.strftime("%d-%b-%Y %H:%M"), date: lambda v: v.strftime("%d-%b-%Y")}
|
||||
|
||||
|
||||
class GuestBookList(BaseModel):
|
||||
date_: date
|
||||
list: List[GuestBookListItem]
|
||||
|
||||
@validator("date_", pre=True)
|
||||
def parse_date(cls, value):
|
||||
if isinstance(value, date):
|
||||
return value
|
||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||
|
||||
class Config:
|
||||
fields = {"id_": "id"}
|
||||
anystr_strip_whitespace = True
|
||||
alias_generator = to_camel
|
||||
json_encoders = {datetime: lambda v: v.strftime("%d-%b-%Y %H:%M"), date: lambda v: v.strftime("%d-%b-%Y")}
|
@ -1,14 +0,0 @@
|
||||
import uuid
|
||||
|
||||
from pydantic import BaseModel
|
||||
|
||||
from . import to_camel
|
||||
|
||||
|
||||
class HeaderFooter(BaseModel):
|
||||
id_: uuid.UUID
|
||||
name: str
|
||||
text: str
|
||||
|
||||
class Config:
|
||||
alias_generator = to_camel
|
@ -1,17 +0,0 @@
|
||||
import uuid
|
||||
|
||||
from datetime import datetime
|
||||
|
||||
from barker.schemas import to_camel
|
||||
from pydantic import BaseModel
|
||||
|
||||
|
||||
class LoginHistory(BaseModel):
|
||||
id_: uuid.UUID
|
||||
user_id: uuid.UUID
|
||||
client_id: uuid.UUID
|
||||
date: datetime
|
||||
|
||||
class Config:
|
||||
anystr_strip_whitespace = True
|
||||
alias_generator = to_camel
|
@ -1,78 +0,0 @@
|
||||
import uuid
|
||||
|
||||
from datetime import date, datetime
|
||||
from decimal import Decimal
|
||||
from typing import Optional
|
||||
|
||||
from pydantic import BaseModel, Field, validator
|
||||
|
||||
from . import to_camel
|
||||
|
||||
|
||||
class AccountBase(BaseModel):
|
||||
name: str = Field(..., min_length=1)
|
||||
is_starred: bool
|
||||
is_active: bool
|
||||
|
||||
class Config:
|
||||
fields = {"id_": "id"}
|
||||
anystr_strip_whitespace = True
|
||||
alias_generator = to_camel
|
||||
|
||||
|
||||
class AccountIn(AccountBase):
|
||||
type: int
|
||||
is_reconcilable: bool
|
||||
|
||||
|
||||
class Account(AccountIn):
|
||||
id_: uuid.UUID
|
||||
code: int
|
||||
is_fixture: bool
|
||||
|
||||
|
||||
class EmployeeIn(AccountBase):
|
||||
designation: str
|
||||
salary: int = Field(ge=0)
|
||||
points: Decimal = Field(ge=0, lt=1000, multiple_of=0.01)
|
||||
joining_date: date
|
||||
leaving_date: Optional[date]
|
||||
|
||||
@validator("joining_date", pre=True)
|
||||
def parse_joining_date(cls, value):
|
||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||
|
||||
@validator("leaving_date", pre=True)
|
||||
def parse_leaving_date(cls, value):
|
||||
if value is None or value == "":
|
||||
return None
|
||||
else:
|
||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||
|
||||
@validator("leaving_date")
|
||||
def leaving_date_more_than_joining_date(cls, v, values, **kwargs):
|
||||
if values["is_active"]:
|
||||
return None
|
||||
if v < values["joining_date"]:
|
||||
raise ValueError("Leaving Date cannot be less than Joining Date")
|
||||
return v
|
||||
|
||||
|
||||
class Employee(EmployeeIn):
|
||||
id_: uuid.UUID
|
||||
code: int
|
||||
is_fixture: bool
|
||||
|
||||
|
||||
class DbSetting(BaseModel):
|
||||
id_: uuid.UUID
|
||||
name: str
|
||||
data: bytes
|
||||
|
||||
|
||||
class AccountType(BaseModel):
|
||||
id_: int
|
||||
name: str
|
||||
|
||||
class Config:
|
||||
fields = {"id_": "id"}
|
@ -1,44 +0,0 @@
|
||||
import uuid
|
||||
|
||||
from typing import List, Optional
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
from . import to_camel
|
||||
from .product_link import ProductLink
|
||||
|
||||
|
||||
class MenuCategoryIn(BaseModel):
|
||||
name: str = Field(..., min_length=1)
|
||||
is_active: bool
|
||||
is_fixture: bool
|
||||
|
||||
class Config:
|
||||
anystr_strip_whitespace = True
|
||||
alias_generator = to_camel
|
||||
|
||||
|
||||
class MenuCategory(MenuCategoryIn):
|
||||
id_: uuid.UUID
|
||||
sort_order: int
|
||||
|
||||
class Config:
|
||||
anystr_strip_whitespace = True
|
||||
alias_generator = to_camel
|
||||
|
||||
|
||||
class MenuCategoryBlank(MenuCategoryIn):
|
||||
name: str
|
||||
|
||||
class Config:
|
||||
anystr_strip_whitespace = True
|
||||
alias_generator = to_camel
|
||||
|
||||
|
||||
class MenuCategoryLink(BaseModel):
|
||||
id_: uuid.UUID = Field(...)
|
||||
name: Optional[str]
|
||||
products: Optional[List[ProductLink]]
|
||||
|
||||
class Config:
|
||||
fields = {"id_": "id"}
|
@ -1,45 +0,0 @@
|
||||
import uuid
|
||||
|
||||
from pydantic import BaseModel
|
||||
|
||||
from . import to_camel
|
||||
|
||||
|
||||
class MergeKot(BaseModel):
|
||||
voucher_id: uuid.UUID
|
||||
kot_id: uuid.UUID
|
||||
table_id: uuid.UUID
|
||||
new_voucher_id: uuid.UUID
|
||||
|
||||
class Config:
|
||||
alias_generator = to_camel
|
||||
fields = {"id_": "id"}
|
||||
|
||||
|
||||
class MoveKot(BaseModel):
|
||||
voucher_id: uuid.UUID
|
||||
kot_id: uuid.UUID
|
||||
table_id: uuid.UUID
|
||||
|
||||
class Config:
|
||||
alias_generator = to_camel
|
||||
fields = {"id_": "id"}
|
||||
|
||||
|
||||
class MergeTable(BaseModel):
|
||||
voucher_id: uuid.UUID
|
||||
table_id: uuid.UUID
|
||||
new_voucher_id: uuid.UUID
|
||||
|
||||
class Config:
|
||||
alias_generator = to_camel
|
||||
fields = {"id_": "id"}
|
||||
|
||||
|
||||
class MoveTable(BaseModel):
|
||||
voucher_id: uuid.UUID
|
||||
table_id: uuid.UUID
|
||||
|
||||
class Config:
|
||||
alias_generator = to_camel
|
||||
fields = {"id_": "id"}
|
@ -1,44 +0,0 @@
|
||||
import uuid
|
||||
|
||||
from decimal import Decimal
|
||||
from typing import Optional
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
from . import to_camel
|
||||
from .modifier_category import ModifierCategoryLink
|
||||
|
||||
|
||||
class ModifierIn(BaseModel):
|
||||
name: str = Field(..., min_length=1)
|
||||
show_in_bill: bool
|
||||
price: Decimal = Field(ge=0, multiple_of=0.01, default=0)
|
||||
is_active: bool
|
||||
modifier_category: ModifierCategoryLink
|
||||
|
||||
class Config:
|
||||
fields = {"id_": "id"}
|
||||
anystr_strip_whitespace = True
|
||||
alias_generator = to_camel
|
||||
|
||||
|
||||
class Modifier(ModifierIn):
|
||||
id_: uuid.UUID
|
||||
|
||||
|
||||
class ModifierLink(BaseModel):
|
||||
id_: uuid.UUID = Field(...)
|
||||
name: Optional[str]
|
||||
|
||||
class Config:
|
||||
fields = {"id_": "id"}
|
||||
|
||||
|
||||
class ModifierBlank(ModifierIn):
|
||||
name: str
|
||||
modifier_category: Optional[ModifierCategoryLink]
|
||||
|
||||
class Config:
|
||||
fields = {"id_": "id"}
|
||||
anystr_strip_whitespace = True
|
||||
alias_generator = to_camel
|
@ -1,46 +0,0 @@
|
||||
import uuid
|
||||
|
||||
from typing import List, Optional
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
from . import to_camel
|
||||
from .menu_category import MenuCategoryLink
|
||||
|
||||
|
||||
class ModifierCategoryIn(BaseModel):
|
||||
name: str = Field(..., min_length=1)
|
||||
minimum: int = Field(ge=0)
|
||||
maximum: Optional[int] = Field(ge=0)
|
||||
is_active: bool
|
||||
menu_categories: Optional[List[MenuCategoryLink]]
|
||||
|
||||
class Config:
|
||||
anystr_strip_whitespace = True
|
||||
alias_generator = to_camel
|
||||
|
||||
|
||||
class ModifierCategory(ModifierCategoryIn):
|
||||
id_: uuid.UUID
|
||||
sort_order: int
|
||||
|
||||
class Config:
|
||||
fields = {"id_": "id"}
|
||||
anystr_strip_whitespace = True
|
||||
alias_generator = to_camel
|
||||
|
||||
|
||||
class ModifierCategoryBlank(ModifierCategoryIn):
|
||||
name: str
|
||||
|
||||
class Config:
|
||||
anystr_strip_whitespace = True
|
||||
alias_generator = to_camel
|
||||
|
||||
|
||||
class ModifierCategoryLink(BaseModel):
|
||||
id_: uuid.UUID = Field(...)
|
||||
name: Optional[str]
|
||||
|
||||
class Config:
|
||||
fields = {"id_": "id"}
|
@ -1,41 +0,0 @@
|
||||
import uuid
|
||||
|
||||
from typing import Optional
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
from . import to_camel
|
||||
|
||||
|
||||
class PrinterIn(BaseModel):
|
||||
name: str = Field(..., min_length=1)
|
||||
address: str = Field(..., min_length=1)
|
||||
cut_code: Optional[str]
|
||||
|
||||
class Config:
|
||||
anystr_strip_whitespace = True
|
||||
alias_generator = to_camel
|
||||
|
||||
|
||||
class Printer(PrinterIn):
|
||||
id_: uuid.UUID
|
||||
|
||||
class Config:
|
||||
anystr_strip_whitespace = True
|
||||
alias_generator = to_camel
|
||||
|
||||
|
||||
class PrinterBlank(PrinterIn):
|
||||
name: str
|
||||
address: str
|
||||
|
||||
class Config:
|
||||
anystr_strip_whitespace = True
|
||||
alias_generator = to_camel
|
||||
|
||||
|
||||
class PrinterLink(BaseModel):
|
||||
id_: uuid.UUID = Field(...)
|
||||
|
||||
class Config:
|
||||
fields = {"id_": "id"}
|
@ -1,45 +0,0 @@
|
||||
import uuid
|
||||
|
||||
from decimal import Decimal
|
||||
from typing import Optional
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
from . import to_camel
|
||||
from .menu_category import MenuCategoryLink
|
||||
from .sale_category import SaleCategoryLink
|
||||
|
||||
|
||||
class ProductIn(BaseModel):
|
||||
name: str = Field(..., min_length=1)
|
||||
units: str
|
||||
menu_category: MenuCategoryLink = Field(...)
|
||||
sale_category: SaleCategoryLink = Field(...)
|
||||
price: Decimal # = Field(ge=0, multiple_of=0.01, default=0)
|
||||
has_happy_hour: bool
|
||||
is_not_available: bool
|
||||
quantity: Decimal = Field(ge=0, multiple_of=0.01, default=0)
|
||||
is_active: bool
|
||||
sort_order: int
|
||||
|
||||
class Config:
|
||||
anystr_strip_whitespace = True
|
||||
alias_generator = to_camel
|
||||
|
||||
|
||||
class Product(ProductIn):
|
||||
id_: uuid.UUID
|
||||
|
||||
class Config:
|
||||
anystr_strip_whitespace = True
|
||||
alias_generator = to_camel
|
||||
|
||||
|
||||
class ProductBlank(ProductIn):
|
||||
name: str
|
||||
menu_category: Optional[MenuCategoryLink]
|
||||
sale_category: Optional[SaleCategoryLink]
|
||||
|
||||
class Config:
|
||||
anystr_strip_whitespace = True
|
||||
alias_generator = to_camel
|
@ -1,14 +0,0 @@
|
||||
import uuid
|
||||
|
||||
from typing import Optional
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
|
||||
class ProductLink(BaseModel):
|
||||
id_: uuid.UUID = Field(...)
|
||||
name: Optional[str]
|
||||
enabled: Optional[bool]
|
||||
|
||||
class Config:
|
||||
fields = {"id_": "id"}
|
@ -1,23 +0,0 @@
|
||||
from decimal import Decimal
|
||||
from typing import List
|
||||
|
||||
from pydantic import BaseModel
|
||||
|
||||
from . import to_camel
|
||||
|
||||
|
||||
class ReceivePaymentItem(BaseModel):
|
||||
id_: int
|
||||
amount: Decimal
|
||||
|
||||
class Config:
|
||||
fields = {"id_": "id"}
|
||||
|
||||
|
||||
class ReceivePayment(BaseModel):
|
||||
reason: str
|
||||
amounts: List[ReceivePaymentItem]
|
||||
|
||||
class Config:
|
||||
alias_generator = to_camel
|
||||
anystr_strip_whitespace = True
|
@ -1,53 +0,0 @@
|
||||
import uuid
|
||||
|
||||
from decimal import Decimal
|
||||
from typing import Optional
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
from . import to_camel
|
||||
from .tax import TaxLink
|
||||
|
||||
|
||||
class SaleCategoryIn(BaseModel):
|
||||
name: str = Field(..., min_length=1)
|
||||
discount_limit: Decimal = Field(ge=0, multiple_of=0.0001, default=0, le=1)
|
||||
tax: TaxLink = Field(...)
|
||||
|
||||
class Config:
|
||||
anystr_strip_whitespace = True
|
||||
alias_generator = to_camel
|
||||
|
||||
|
||||
class SaleCategory(SaleCategoryIn):
|
||||
id_: uuid.UUID
|
||||
|
||||
class Config:
|
||||
anystr_strip_whitespace = True
|
||||
alias_generator = to_camel
|
||||
|
||||
|
||||
class SaleCategoryBlank(SaleCategoryIn):
|
||||
name: str
|
||||
tax: Optional[TaxLink]
|
||||
|
||||
class Config:
|
||||
anystr_strip_whitespace = True
|
||||
alias_generator = to_camel
|
||||
|
||||
|
||||
class SaleCategoryForDiscount(SaleCategory):
|
||||
discount: Decimal
|
||||
tax: Optional[TaxLink]
|
||||
|
||||
class Config:
|
||||
anystr_strip_whitespace = True
|
||||
alias_generator = to_camel
|
||||
|
||||
|
||||
class SaleCategoryLink(BaseModel):
|
||||
id_: uuid.UUID = Field(...)
|
||||
name: Optional[str]
|
||||
|
||||
class Config:
|
||||
fields = {"id_": "id"}
|
@ -1,41 +0,0 @@
|
||||
from datetime import date, datetime
|
||||
from decimal import Decimal
|
||||
from typing import List
|
||||
|
||||
from pydantic import BaseModel, validator
|
||||
|
||||
from . import to_camel
|
||||
from .user import UserLink
|
||||
|
||||
|
||||
class SaleReportItem(BaseModel):
|
||||
name: str
|
||||
amount: Decimal
|
||||
|
||||
class Config:
|
||||
anystr_strip_whitespace = True
|
||||
alias_generator = to_camel
|
||||
|
||||
|
||||
class SaleReport(BaseModel):
|
||||
start_date: date
|
||||
finish_date: date
|
||||
amounts: List[SaleReportItem]
|
||||
user: UserLink
|
||||
|
||||
class Config:
|
||||
anystr_strip_whitespace = True
|
||||
alias_generator = to_camel
|
||||
json_encoders = {datetime: lambda v: v.strftime("%d-%b-%Y %H:%M"), date: lambda v: v.strftime("%d-%b-%Y")}
|
||||
|
||||
@validator("start_date", pre=True)
|
||||
def parse_start_date(cls, value):
|
||||
if isinstance(value, date):
|
||||
return value
|
||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||
|
||||
@validator("finish_date", pre=True)
|
||||
def parse_finish_date(cls, value):
|
||||
if isinstance(value, date):
|
||||
return value
|
||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
@ -1,35 +0,0 @@
|
||||
import uuid
|
||||
|
||||
from typing import Optional
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
|
||||
class SectionIn(BaseModel):
|
||||
name: str = Field(..., min_length=1)
|
||||
|
||||
class Config:
|
||||
anystr_strip_whitespace = True
|
||||
|
||||
|
||||
class Section(SectionIn):
|
||||
id_: uuid.UUID
|
||||
|
||||
class Config:
|
||||
anystr_strip_whitespace = True
|
||||
fields = {"id_": "id"}
|
||||
|
||||
|
||||
class SectionBlank(BaseModel):
|
||||
name: str
|
||||
|
||||
class Config:
|
||||
anystr_strip_whitespace = True
|
||||
|
||||
|
||||
class SectionLink(BaseModel):
|
||||
id_: uuid.UUID = Field(...)
|
||||
name: Optional[str]
|
||||
|
||||
class Config:
|
||||
fields = {"id_": "id"}
|
@ -1,16 +0,0 @@
|
||||
from typing import Optional
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
from . import to_camel
|
||||
from .menu_category import MenuCategoryLink
|
||||
from .printer import PrinterLink
|
||||
|
||||
|
||||
class SectionPrinter(BaseModel):
|
||||
menu_category: Optional[MenuCategoryLink]
|
||||
printer: Optional[PrinterLink]
|
||||
copies: int = Field(ge=0)
|
||||
|
||||
class Config:
|
||||
alias_generator = to_camel
|
@ -1,16 +0,0 @@
|
||||
import uuid
|
||||
|
||||
from typing import List
|
||||
|
||||
from pydantic import BaseModel
|
||||
|
||||
from . import to_camel
|
||||
|
||||
|
||||
class Split(BaseModel):
|
||||
inventories: List[uuid.UUID]
|
||||
table_id: uuid.UUID
|
||||
|
||||
class Config:
|
||||
alias_generator = to_camel
|
||||
fields = {"id_": "id"}
|
@ -1,44 +0,0 @@
|
||||
import uuid
|
||||
|
||||
from typing import Optional
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
from . import to_camel
|
||||
from .section import SectionLink
|
||||
|
||||
|
||||
class TableIn(BaseModel):
|
||||
name: str = Field(..., min_length=1)
|
||||
seats: int = Field(ge=0)
|
||||
section: SectionLink
|
||||
is_active: bool
|
||||
sort_order: int
|
||||
|
||||
class Config:
|
||||
anystr_strip_whitespace = True
|
||||
alias_generator = to_camel
|
||||
|
||||
|
||||
class Table(TableIn):
|
||||
id_: uuid.UUID
|
||||
|
||||
class Config:
|
||||
alias_generator = to_camel
|
||||
|
||||
|
||||
class TableBlank(TableIn):
|
||||
name: str
|
||||
section: Optional[SectionLink]
|
||||
|
||||
class Config:
|
||||
alias_generator = to_camel
|
||||
|
||||
|
||||
class TableLink(BaseModel):
|
||||
id_: uuid.UUID = Field(...)
|
||||
name: Optional[str]
|
||||
|
||||
class Config:
|
||||
fields = {"id_": "id"}
|
||||
alias_generator = to_camel
|
@ -1,43 +0,0 @@
|
||||
import uuid
|
||||
|
||||
from decimal import Decimal
|
||||
from typing import Optional
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
from . import to_camel
|
||||
|
||||
|
||||
class TaxIn(BaseModel):
|
||||
name: str = Field(..., min_length=1)
|
||||
rate: Decimal = Field(ge=0, default=0)
|
||||
is_fixture: bool
|
||||
|
||||
class Config:
|
||||
anystr_strip_whitespace = True
|
||||
alias_generator = to_camel
|
||||
|
||||
|
||||
class Tax(TaxIn):
|
||||
id_: uuid.UUID
|
||||
|
||||
class Config:
|
||||
anystr_strip_whitespace = True
|
||||
alias_generator = to_camel
|
||||
|
||||
|
||||
class TaxBlank(TaxIn):
|
||||
name: str
|
||||
|
||||
class Config:
|
||||
anystr_strip_whitespace = True
|
||||
alias_generator = to_camel
|
||||
|
||||
|
||||
class TaxLink(BaseModel):
|
||||
id_: uuid.UUID = Field(...)
|
||||
name: Optional[str]
|
||||
rate: Optional[Decimal]
|
||||
|
||||
class Config:
|
||||
fields = {"id_": "id"}
|
@ -1,41 +0,0 @@
|
||||
from datetime import date, datetime
|
||||
from decimal import Decimal
|
||||
from typing import List
|
||||
|
||||
from pydantic import BaseModel, validator
|
||||
|
||||
from . import to_camel
|
||||
|
||||
|
||||
class TaxReportItem(BaseModel):
|
||||
name: str
|
||||
tax_rate: Decimal
|
||||
sale_amount: Decimal
|
||||
amount: Decimal
|
||||
|
||||
class Config:
|
||||
anystr_strip_whitespace = True
|
||||
alias_generator = to_camel
|
||||
|
||||
|
||||
class TaxReport(BaseModel):
|
||||
start_date: date
|
||||
finish_date: date
|
||||
amounts: List[TaxReportItem]
|
||||
|
||||
class Config:
|
||||
anystr_strip_whitespace = True
|
||||
alias_generator = to_camel
|
||||
json_encoders = {datetime: lambda v: v.strftime("%d-%b-%Y %H:%M"), date: lambda v: v.strftime("%d-%b-%Y")}
|
||||
|
||||
@validator("start_date", pre=True)
|
||||
def parse_start_date(cls, value):
|
||||
if isinstance(value, date):
|
||||
return value
|
||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||
|
||||
@validator("finish_date", pre=True)
|
||||
def parse_finish_date(cls, value):
|
||||
if isinstance(value, date):
|
||||
return value
|
||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
@ -1,35 +0,0 @@
|
||||
import uuid
|
||||
|
||||
from datetime import date, datetime
|
||||
from decimal import Decimal
|
||||
from typing import List, Optional
|
||||
|
||||
from pydantic import BaseModel, validator
|
||||
|
||||
from . import to_camel
|
||||
|
||||
|
||||
class UpdateProductPricesItem(BaseModel):
|
||||
id: uuid.UUID
|
||||
name: str
|
||||
old_price: Decimal
|
||||
new_price: Decimal
|
||||
|
||||
class Config:
|
||||
alias_generator = to_camel
|
||||
|
||||
|
||||
class UpdateProductPrices(BaseModel):
|
||||
date_: date
|
||||
menu_category_id: Optional[uuid.UUID]
|
||||
items: List[UpdateProductPricesItem]
|
||||
|
||||
class Config:
|
||||
alias_generator = to_camel
|
||||
json_encoders = {date: lambda v: v.strftime("%d-%b-%Y")}
|
||||
|
||||
@validator("date_", pre=True)
|
||||
def parse_date(cls, value):
|
||||
if isinstance(value, date):
|
||||
return value
|
||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
@ -1,68 +0,0 @@
|
||||
import uuid
|
||||
|
||||
from decimal import Decimal
|
||||
from typing import List, Optional
|
||||
|
||||
from pydantic import BaseModel, Field, validator
|
||||
|
||||
from . import to_camel
|
||||
from .customer import CustomerLink
|
||||
from .modifier import ModifierLink
|
||||
from .product_link import ProductLink
|
||||
from .table import TableLink
|
||||
from .tax import TaxLink
|
||||
|
||||
|
||||
class Inventory(BaseModel):
|
||||
id_: Optional[uuid.UUID]
|
||||
product: ProductLink
|
||||
quantity: Decimal = Field(multiple_of=0.01)
|
||||
price: Optional[Decimal]
|
||||
tax: Optional[TaxLink]
|
||||
tax_rate: Optional[Decimal]
|
||||
discount: Decimal = Field(ge=0, multiple_of=0.00001, le=1)
|
||||
is_happy_hour: bool
|
||||
modifiers: Optional[List[ModifierLink]]
|
||||
amount: Optional[Decimal]
|
||||
|
||||
class Config:
|
||||
alias_generator = to_camel
|
||||
|
||||
@validator("amount", always=True)
|
||||
def calculate_amount(cls, v, values):
|
||||
is_happy_hour = values["is_happy_hour"] if "is_happy_hour" in values else False
|
||||
price = values["price"] if "price" in values and not is_happy_hour else 0
|
||||
quantity = values["quantity"] if "quantity" in values else 0
|
||||
discount = values["discount"] if "discount" in values else 0
|
||||
tax_rate = values["tax_rate"] if "tax_rate" in values else 0
|
||||
return round(Decimal(price * quantity * (1 - discount) * (1 + tax_rate)), 2)
|
||||
|
||||
|
||||
class Kot(BaseModel):
|
||||
id_: Optional[uuid.UUID]
|
||||
inventories: List[Inventory]
|
||||
|
||||
class Config:
|
||||
anystr_strip_whitespace = True
|
||||
alias_generator = to_camel
|
||||
|
||||
|
||||
class VoucherIn(BaseModel):
|
||||
pax: int
|
||||
table: TableLink
|
||||
customer: Optional[CustomerLink]
|
||||
kots: List[Kot]
|
||||
|
||||
class Config:
|
||||
fields = {"id_": "id"}
|
||||
anystr_strip_whitespace = True
|
||||
alias_generator = to_camel
|
||||
|
||||
|
||||
class Voucher(VoucherIn):
|
||||
id_: uuid.UUID
|
||||
|
||||
class Config:
|
||||
fields = {"id_": "id"}
|
||||
anystr_strip_whitespace = True
|
||||
alias_generator = to_camel
|
@ -14,43 +14,42 @@
|
||||
},
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"@angular/animations": "^11.0.5",
|
||||
"@angular/animations": "^11.0.8",
|
||||
"@angular/cdk": "^11.0.3",
|
||||
"@angular/common": "^11.0.5",
|
||||
"@angular/compiler": "^11.0.5",
|
||||
"@angular/core": "^11.0.5",
|
||||
"@angular/common": "^11.0.8",
|
||||
"@angular/compiler": "^11.0.8",
|
||||
"@angular/core": "^11.0.8",
|
||||
"@angular/flex-layout": "^11.0.0-beta.33",
|
||||
"@angular/forms": "^11.0.5",
|
||||
"@angular/forms": "^11.0.8",
|
||||
"@angular/material": "^11.0.3",
|
||||
"@angular/material-moment-adapter": "^11.0.3",
|
||||
"@angular/platform-browser": "^11.0.5",
|
||||
"@angular/platform-browser-dynamic": "^11.0.5",
|
||||
"@angular/router": "^11.0.5",
|
||||
"@angular/platform-browser": "^11.0.8",
|
||||
"@angular/platform-browser-dynamic": "^11.0.8",
|
||||
"@angular/router": "^11.0.8",
|
||||
"moment": "^2.29.1",
|
||||
"rxjs": "^6.6.3",
|
||||
"tslib": "^2.0.0",
|
||||
"tslib": "^2.1.0",
|
||||
"zone.js": "^0.11.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@angular-devkit/build-angular": "~0.1100.5",
|
||||
"@angular-eslint/builder": "^0.8.0-beta.6",
|
||||
"@angular-eslint/eslint-plugin": "^0.8.0-beta.6",
|
||||
"@angular-eslint/eslint-plugin-template": "^0.8.0-beta.6",
|
||||
"@angular-eslint/schematics": "^0.8.0-beta.6",
|
||||
"@angular-eslint/template-parser": "^0.8.0-beta.6",
|
||||
"@angular/cli": "^11.0.5",
|
||||
"@angular/compiler-cli": "^11.0.5",
|
||||
"@angular/language-service": "^11.0.5",
|
||||
"@angular-devkit/build-angular": "~0.1100.6",
|
||||
"@angular-eslint/builder": "1.0.0",
|
||||
"@angular-eslint/eslint-plugin": "1.0.0",
|
||||
"@angular-eslint/eslint-plugin-template": "1.0.0",
|
||||
"@angular-eslint/schematics": "1.0.0",
|
||||
"@angular-eslint/template-parser": "1.0.0",
|
||||
"@angular/cli": "^11.0.6",
|
||||
"@angular/compiler-cli": "^11.0.8",
|
||||
"@angular/language-service": "^11.0.8",
|
||||
"@types/jasmine": "~3.6.2",
|
||||
"@types/node": "^14.14.14",
|
||||
"@typescript-eslint/eslint-plugin": "^4.10.0",
|
||||
"@typescript-eslint/parser": "^4.10.0",
|
||||
"eslint": "^7.16.0",
|
||||
"eslint-config-prettier": "^7.1.0",
|
||||
"@types/node": "^14.14.20",
|
||||
"@typescript-eslint/eslint-plugin": "^4.13.0",
|
||||
"@typescript-eslint/parser": "^4.13.0",
|
||||
"eslint": "^7.17.0",
|
||||
"eslint-plugin-import": "^2.22.1",
|
||||
"eslint-plugin-jsdoc": "^30.7.9",
|
||||
"eslint-plugin-jsdoc": "^31.0.3",
|
||||
"eslint-plugin-prefer-arrow": "1.2.2",
|
||||
"husky": "^4.3.6",
|
||||
"husky": "^4.3.7",
|
||||
"jasmine-core": "^3.6.0",
|
||||
"jasmine-spec-reporter": "^6.0.0",
|
||||
"karma": "^5.2.3",
|
||||
@ -60,7 +59,7 @@
|
||||
"karma-jasmine-html-reporter": "^1.5.0",
|
||||
"lint-staged": "^10.5.3",
|
||||
"prettier": "^2.2.1",
|
||||
"standard-version": "^9.0.0",
|
||||
"standard-version": "^9.1.0",
|
||||
"ts-node": "^9.1.1",
|
||||
"typescript": "~4.0.5"
|
||||
},
|
||||
|
@ -42,12 +42,8 @@
|
||||
fxLayoutGap.lt-md="0px"
|
||||
>
|
||||
<mat-form-field fxFlex>
|
||||
<mat-label>Mobile</mat-label>
|
||||
<input matInput placeholder="Mobile" formControlName="mobile" />
|
||||
</mat-form-field>
|
||||
<mat-form-field fxFlex>
|
||||
<mat-label>Land Line</mat-label>
|
||||
<input matInput placeholder="Landline" formControlName="landline" />
|
||||
<mat-label>Court Case Number</mat-label>
|
||||
<input matInput placeholder="Court Case Number" formControlName="courtCaseNumber" />
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div
|
||||
@ -58,8 +54,13 @@
|
||||
fxLayoutGap.lt-md="0px"
|
||||
>
|
||||
<mat-form-field fxFlex>
|
||||
<mat-label>Email</mat-label>
|
||||
<input matInput placeholder="Email" formControlName="email" />
|
||||
<mat-label>Case Type</mat-label>
|
||||
<mat-select placeholder="Case Type" formControlName="caseType">
|
||||
<mat-option value=""> -- Not Applicable -- </mat-option>
|
||||
<mat-option *ngFor="let ct of caseTypes" [value]="ct.id">
|
||||
{{ ct.name }}
|
||||
</mat-option>
|
||||
</mat-select>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div
|
||||
@ -70,8 +71,52 @@
|
||||
fxLayoutGap.lt-md="0px"
|
||||
>
|
||||
<mat-form-field fxFlex>
|
||||
<mat-label>Address</mat-label>
|
||||
<input matInput placeholder="Address" formControlName="address" />
|
||||
<mat-label>Year</mat-label>
|
||||
<input matInput placeholder="Year" formControlName="year" />
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div
|
||||
fxLayout="row"
|
||||
fxLayoutAlign="space-around start"
|
||||
fxLayout.lt-md="column"
|
||||
fxLayoutGap="20px"
|
||||
fxLayoutGap.lt-md="0px"
|
||||
>
|
||||
<mat-form-field fxFlex>
|
||||
<mat-label>Connected Cases</mat-label>
|
||||
<input matInput placeholder="Connected Cases" formControlName="connectedCases" />
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div
|
||||
fxLayout="row"
|
||||
fxLayoutAlign="space-around start"
|
||||
fxLayout.lt-md="column"
|
||||
fxLayoutGap="20px"
|
||||
fxLayoutGap.lt-md="0px"
|
||||
>
|
||||
<mat-form-field fxFlex>
|
||||
<mat-label>Appearing for the</mat-label>
|
||||
<mat-select placeholder="Appearing for the" formControlName="appearOnBehalfOf">
|
||||
<mat-option value="Petitioner">Petitioner</mat-option>
|
||||
<mat-option value="Respondent">Respondent</mat-option>
|
||||
</mat-select>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div
|
||||
fxLayout="row"
|
||||
fxLayoutAlign="space-around start"
|
||||
fxLayout.lt-md="column"
|
||||
fxLayoutGap="20px"
|
||||
fxLayoutGap.lt-md="0px"
|
||||
>
|
||||
<mat-form-field fxFlex>
|
||||
<mat-label>Forum</mat-label>
|
||||
<mat-select placeholder="Forum" formControlName="court">
|
||||
<mat-option value=""> -- Not Applicable -- </mat-option>
|
||||
<mat-option *ngFor="let c of courts" [value]="c.id">
|
||||
{{ c.name }}
|
||||
</mat-option>
|
||||
</mat-select>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div
|
||||
@ -90,6 +135,15 @@
|
||||
</mat-option>
|
||||
</mat-select>
|
||||
</mat-form-field>
|
||||
<mat-form-field fxFlex>
|
||||
<mat-label>Department</mat-label>
|
||||
<mat-select placeholder="Department" formControlName="office">
|
||||
<mat-option value=""> -- Not Applicable -- </mat-option>
|
||||
<mat-option *ngFor="let o of offices | async" [value]="o.id">
|
||||
{{ o.name }}
|
||||
</mat-option>
|
||||
</mat-select>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div
|
||||
fxLayout="row"
|
||||
@ -99,11 +153,58 @@
|
||||
fxLayoutGap.lt-md="0px"
|
||||
>
|
||||
<mat-form-field fxFlex>
|
||||
<mat-label>Department</mat-label>
|
||||
<mat-select placeholder="Department" formControlName="office">
|
||||
<mat-label>Contact Person</mat-label>
|
||||
<input matInput placeholder="Contact Person" formControlName="contactPerson" />
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div
|
||||
fxLayout="row"
|
||||
fxLayoutAlign="space-around start"
|
||||
fxLayout.lt-md="column"
|
||||
fxLayoutGap="20px"
|
||||
fxLayoutGap.lt-md="0px"
|
||||
>
|
||||
<mat-form-field fxFlex>
|
||||
<mat-label>Court Status</mat-label>
|
||||
<mat-select placeholder="Court Status" formControlName="courtStatus">
|
||||
<mat-option value=""> -- Not Applicable -- </mat-option>
|
||||
<mat-option *ngFor="let o of offices | async" [value]="o.id">
|
||||
{{ o.name }}
|
||||
<mat-option *ngFor="let cs of courtStatuses" [value]="cs.id">
|
||||
{{ cs.name }}
|
||||
</mat-option>
|
||||
</mat-select>
|
||||
</mat-form-field>
|
||||
<mat-form-field fxFlex>
|
||||
<mat-label>Office Status</mat-label>
|
||||
<mat-select placeholder="Office Status" formControlName="officeStatus">
|
||||
<mat-option value=""> -- Not Applicable -- </mat-option>
|
||||
<mat-option *ngFor="let os of officeStatuses" [value]="os.id">
|
||||
{{ os.name }}
|
||||
</mat-option>
|
||||
</mat-select>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div
|
||||
fxLayout="row"
|
||||
fxLayoutAlign="space-around start"
|
||||
fxLayout.lt-md="column"
|
||||
fxLayoutGap="20px"
|
||||
fxLayoutGap.lt-md="0px"
|
||||
>
|
||||
<mat-form-field fxFlex>
|
||||
<mat-label>Act</mat-label>
|
||||
<mat-select placeholder="Act" formControlName="act">
|
||||
<mat-option value=""> -- Not Applicable -- </mat-option>
|
||||
<mat-option *ngFor="let a of acts" [value]="a.id">
|
||||
{{ a.name }}
|
||||
</mat-option>
|
||||
</mat-select>
|
||||
</mat-form-field>
|
||||
<mat-form-field fxFlex>
|
||||
<mat-label>Nature</mat-label>
|
||||
<mat-select placeholder="Nature" formControlName="nature">
|
||||
<mat-option value=""> -- Not Applicable -- </mat-option>
|
||||
<mat-option *ngFor="let n of natures" [value]="n.id">
|
||||
{{ n.name }}
|
||||
</mat-option>
|
||||
</mat-select>
|
||||
</mat-form-field>
|
||||
|
@ -27,8 +27,14 @@ import { CaseService } from '../case.service';
|
||||
export class CaseDetailComponent implements OnInit, AfterViewInit {
|
||||
@ViewChild('nameElement', { static: true }) nameElement?: ElementRef;
|
||||
form: FormGroup;
|
||||
caseTypes: CaseType[] = [];
|
||||
courts: Court[] = [];
|
||||
departments: Department[] = [];
|
||||
offices: Observable<Office[]> = new Observable<Office[]>();
|
||||
courtStatuses: CourtStatus[] = [];
|
||||
officeStatuses: OfficeStatus[] = [];
|
||||
acts: Act[] = [];
|
||||
natures: Nature[] = [];
|
||||
item: Case = new Case();
|
||||
|
||||
constructor(
|
||||
@ -76,8 +82,23 @@ export class CaseDetailComponent implements OnInit, AfterViewInit {
|
||||
|
||||
ngOnInit() {
|
||||
this.route.data.subscribe((value) => {
|
||||
const data = value as { item: Case; departments: Department[] };
|
||||
const data = value as {
|
||||
item: Case;
|
||||
caseTypes: CaseType[];
|
||||
courts: Court[];
|
||||
departments: Department[];
|
||||
courtStatuses: CourtStatus[];
|
||||
officeStatuses: OfficeStatus[];
|
||||
acts: Act[];
|
||||
natures: Nature[];
|
||||
};
|
||||
this.caseTypes = data.caseTypes;
|
||||
this.courts = data.courts;
|
||||
this.departments = data.departments;
|
||||
this.courtStatuses = data.courtStatuses;
|
||||
this.officeStatuses = data.officeStatuses;
|
||||
this.acts = data.acts;
|
||||
this.natures = data.natures;
|
||||
this.showItem(data.item);
|
||||
});
|
||||
}
|
||||
|
@ -2,9 +2,19 @@ import { CommonModule } from '@angular/common';
|
||||
import { NgModule } from '@angular/core';
|
||||
import { RouterModule, Routes } from '@angular/router';
|
||||
|
||||
import { ActListResolver } from '../acts/act-list-resolver.service';
|
||||
import { AuthGuard } from '../auth/auth-guard.service';
|
||||
import { CaseSourceListResolver } from '../case-sources/case-source-list-resolver.service';
|
||||
import { CaseTypeListResolver } from '../case-types/case-type-list-resolver.service';
|
||||
import { Case } from '../core/case';
|
||||
import { CaseType } from '../core/case-type';
|
||||
import { Court } from '../core/court';
|
||||
import { Department } from '../core/department';
|
||||
import { CourtStatusListResolver } from '../court-statuses/court-status-list-resolver.service';
|
||||
import { CourtListResolver } from '../courts/court-list-resolver.service';
|
||||
import { DepartmentListResolver } from '../departments/department-list-resolver.service';
|
||||
import { NatureListResolver } from '../natures/nature-list-resolver.service';
|
||||
import { OfficeStatusListResolver } from '../office-statuses/office-status-list-resolver.service';
|
||||
|
||||
import { CaseDetailComponent } from './case-detail/case-detail.component';
|
||||
import { CaseListResolver } from './case-list-resolver.service';
|
||||
@ -33,7 +43,13 @@ const advocatesRoutes: Routes = [
|
||||
},
|
||||
resolve: {
|
||||
item: CaseResolver,
|
||||
caseTypes: CaseTypeListResolver,
|
||||
courts: CourtListResolver,
|
||||
departments: DepartmentListResolver,
|
||||
courtStatuses: CourtStatusListResolver,
|
||||
officeStatuses: OfficeStatusListResolver,
|
||||
acts: ActListResolver,
|
||||
natures: NatureListResolver,
|
||||
},
|
||||
},
|
||||
{
|
||||
@ -45,7 +61,13 @@ const advocatesRoutes: Routes = [
|
||||
},
|
||||
resolve: {
|
||||
item: CaseResolver,
|
||||
caseTypes: CaseTypeListResolver,
|
||||
courts: CourtListResolver,
|
||||
departments: DepartmentListResolver,
|
||||
courtStatuses: CourtStatusListResolver,
|
||||
officeStatuses: OfficeStatusListResolver,
|
||||
acts: ActListResolver,
|
||||
natures: NatureListResolver,
|
||||
},
|
||||
},
|
||||
];
|
||||
|
@ -79,14 +79,6 @@
|
||||
</mat-option>
|
||||
</mat-select>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div
|
||||
fxLayout="row"
|
||||
fxLayoutAlign="space-around start"
|
||||
fxLayout.lt-md="column"
|
||||
fxLayoutGap="20px"
|
||||
fxLayoutGap.lt-md="0px"
|
||||
>
|
||||
<mat-form-field fxFlex>
|
||||
<mat-label>Department</mat-label>
|
||||
<mat-select placeholder="Department" formControlName="office">
|
||||
|
@ -1,5 +1,5 @@
|
||||
export const environment = {
|
||||
production: true,
|
||||
ACCESS_TOKEN_REFRESH_MINUTES: 10, // refresh token 10 minutes before expiry
|
||||
version: '6.3.0',
|
||||
version: '1.0.0',
|
||||
};
|
||||
|
@ -5,7 +5,7 @@
|
||||
export const environment = {
|
||||
production: false,
|
||||
ACCESS_TOKEN_REFRESH_MINUTES: 10, // refresh token 10 minutes before expiry
|
||||
version: '6.3.0',
|
||||
version: '1.0.0',
|
||||
};
|
||||
|
||||
/*
|
||||
|
Loading…
x
Reference in New Issue
Block a user