Chore: Moved individual models into their own files.

Chore: Updated dependencies.
This commit is contained in:
tanshu committed 2021-03-17 09:39:56 +05:30
1 parent 716c74c974
commit ea2bfb1c0c
89 files changed
+1306 -1068

No files matched your search

+1 -2
View File
@@ -2,6 +2,7 @@ import logging
from alembic import context
from barker.core.config import settings
from barker.models.user import User
from sqlalchemy import create_engine, pool
@@ -12,8 +13,6 @@ logging.getLogger("alembic").setLevel(settings.ALEMBIC_LOG_LEVEL)
# Interpret the config file for Python logging.
# This line sets up loggers basically.
from barker.models.auth import User # noqa
target_metadata = User.metadata
@@ -8,8 +8,12 @@ Create Date: 2020-06-04 08:14:34.132248
import sqlalchemy as sa
from alembic import op
from barker.models.auth import Permission, User # noqa
from barker.models.master import Customer, DbSetting, ModifierCategory, Section
from barker.models.customer import Customer
from barker.models.db_setting import DbSetting
from barker.models.modifier_category import ModifierCategory
from barker.models.permission import Permission
from barker.models.section import Section
from barker.models.user import User # noqa: F401
from sqlalchemy import column, table
from sqlalchemy.dialects import postgresql
@@ -129,7 +133,6 @@ def upgrade():
sa.Column("address", sa.Unicode(length=255), nullable=False),
sa.Column("cut_code", sa.Unicode(length=255), nullable=False),
sa.PrimaryKeyConstraint("id", name=op.f("pk_printers")),
sa.UniqueConstraint("address", name=op.f("uq_printers_address")),
sa.UniqueConstraint("name", name=op.f("uq_printers_name")),
)
op.create_table(
+2 -2
View File
@@ -13,8 +13,8 @@ from sqlalchemy.orm import Session
from ..core.config import settings
from ..db.session import SessionLocal
from ..models.auth import Device
from ..models.auth import User as UserModel
from ..models.device import Device
from ..models.user import User as UserModel
# to get a string like this run:
from ..schemas.user_token import UserToken
+33 -37
View File
@@ -1,41 +1,37 @@
# Import all the models, so that Base has them before being
# imported by Alembic
from barker.db.base_class import Base # noqa
from barker.models.auth import ( # noqa
Device,
LoginHistory,
Permission,
Role,
User,
role_permissions,
user_roles,
)
from barker.models.master import ( # noqa
Customer,
DbSetting,
FoodTable,
MenuCategory,
Modifier,
ModifierCategory,
Printer,
Product,
ProductVersion,
ReportingLevel,
SaleCategory,
Section,
SectionPrinter,
SettleOption,
Tax,
VoucherType,
from barker.db.base_class import Base # noqa: F401
from barker.models.customer import Customer # noqa: F401
from barker.models.db_setting import DbSetting # noqa: F401
from barker.models.device import Device # noqa: F401
from barker.models.food_table import FoodTable # noqa: F401
from barker.models.guest_book import GuestBook # noqa: F401
from barker.models.inventory import Inventory # noqa: F401
from barker.models.inventory_modifier import InventoryModifier # noqa: F401
from barker.models.kot import Kot # noqa: F401
from barker.models.login_history import LoginHistory # noqa: F401
from barker.models.menu_category import MenuCategory # noqa: F401
from barker.models.modifier import Modifier # noqa: F401
from barker.models.modifier_categories_products import ( # noqa: F401
modifier_categories_products,
)
from barker.models.voucher import ( # noqa
GuestBook,
Inventory,
InventoryModifier,
Kot,
Overview,
Reprint,
Settlement,
Voucher,
)
from barker.models.modifier_category import ModifierCategory # noqa: F401
from barker.models.overview import Overview # noqa: F401
from barker.models.permission import Permission # noqa: F401
from barker.models.printer import Printer # noqa: F401
from barker.models.product import Product # noqa: F401
from barker.models.product_version import ProductVersion # noqa: F401
from barker.models.reporting_level import ReportingLevel # noqa: F401
from barker.models.reprint import Reprint # noqa: F401
from barker.models.role import Role # noqa: F401
from barker.models.role_permissions import role_permissions # noqa: F401
from barker.models.sale_category import SaleCategory # noqa: F401
from barker.models.section import Section # noqa: F401
from barker.models.section_printer import SectionPrinter # noqa: F401
from barker.models.settle_option import SettleOption # noqa: F401
from barker.models.settlement import Settlement # noqa: F401
from barker.models.tax import Tax # noqa: F401
from barker.models.user import User # noqa: F401
from barker.models.user_roles import user_roles # noqa: F401
from barker.models.voucher import Voucher # noqa
from barker.models.voucher_type import VoucherType # noqa: F401
+8 -8
View File
@@ -1,14 +1,14 @@
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 barker.models.customer import Customer
from barker.models.db_setting import DbSetting
from barker.models.modifier_category import ModifierCategory
from barker.models.permission import Permission
from barker.models.role import Role
from barker.models.section import Section
from barker.models.settle_option import SettleOption
from barker.models.user import User
from brewman.db import base # noqa: F401
from sqlalchemy.orm import Session
-166
View File
@@ -1,166 +0,0 @@
import random
import string
import uuid
from datetime import datetime
from hashlib import md5
from sqlalchemy import Boolean, Column, DateTime, Unicode, UniqueConstraint, desc, text
from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import Session, relationship, synonym
from sqlalchemy.schema import ForeignKey, Table
from .meta import Base
def encrypt(val):
return md5(val.encode("utf-8") + "v2".encode("utf-8")).hexdigest()
class LoginHistory(Base):
__tablename__ = "login_history"
__table_args__ = (UniqueConstraint("user_id", "device_id", "date"),)
id = Column(
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
)
user_id = Column("user_id", UUID(as_uuid=True), ForeignKey("users.id"), nullable=False)
device_id = Column(
"device_id",
UUID(as_uuid=True),
ForeignKey("devices.id"),
nullable=False,
)
date = Column("date", DateTime(timezone=True), nullable=False)
def __init__(self, user_id=None, device_id=None, date=None, id_=None):
self.user_id = user_id
self.device_id = device_id
self.date = datetime.utcnow() if date is None else date
self.id = id_
class Device(Base):
__tablename__ = "devices"
id = Column(
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
)
name = Column("name", Unicode(255), unique=True, nullable=False)
enabled = Column("enabled", Boolean, nullable=False)
section_id = Column("section_id", UUID(as_uuid=True), ForeignKey("sections.id"), nullable=False)
creation_date = Column("creation_date", DateTime(timezone=True), nullable=False)
section = relationship("Section", foreign_keys=section_id)
login_history = relationship("LoginHistory", order_by=desc(LoginHistory.date), backref="device")
def __init__(self, name=None, enabled=None, section_id=None, creation_date=None, id_=None):
self.name = name
self.enabled = enabled
self.section_id = section_id
self.creation_date = datetime.utcnow() if creation_date is None else creation_date
self.id = id_
@classmethod
def create(cls, db: Session):
main_section = uuid.UUID("3f13f6e7-dc76-4fca-8fdb-b2bbf29b35df")
name = "".join(random.choices(string.ascii_lowercase + string.digits, k=6))
device = Device(name, False, main_section)
db.add(device)
return device
user_roles = Table(
"user_roles",
Base.metadata,
Column("id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4),
Column("user_id", UUID(as_uuid=True), ForeignKey("users.id"), nullable=False),
Column("role_id", UUID(as_uuid=True), ForeignKey("roles.id"), nullable=False),
UniqueConstraint("user_id", "role_id"),
)
role_permissions = Table(
"role_permissions",
Base.metadata,
Column("id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4),
Column(
"permission_id",
UUID(as_uuid=True),
ForeignKey("permissions.id"),
nullable=False,
),
Column("role_id", UUID(as_uuid=True), ForeignKey("roles.id"), nullable=False),
UniqueConstraint("permission_id", "role_id"),
)
class User(Base):
__tablename__ = "users"
id = Column(
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
)
name = Column("name", Unicode(255), unique=True, nullable=False)
_password = Column("password", Unicode(60), nullable=False)
locked_out = Column("locked_out", Boolean, nullable=False)
roles = relationship("Role", secondary=user_roles, order_by="Role.name")
login_history = relationship("LoginHistory", order_by=desc(LoginHistory.date), backref="user")
def _get_password(self):
return self._password
def _set_password(self, password):
self._password = encrypt(password)
password = property(_get_password, _set_password)
password = synonym("_password", descriptor=password)
@property
def __name__(self):
return self.name
def __init__(self, name=None, password=None, locked_out=None, id_=None):
self.name = name
self.password = password
self.locked_out = locked_out
self.id = id_
@classmethod
def auth(cls, name: str, password: str, db: Session):
if password is None:
return None
user = db.query(User).filter(User.name.ilike(name)).first()
if not user:
return None
if user.password != encrypt(password) or user.locked_out:
return None
else:
return user
class Role(Base):
__tablename__ = "roles"
id = Column(
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
)
name = Column("name", Unicode(255), unique=True)
def __init__(self, name=None, id_=None):
self.name = name
self.id = id_
class Permission(Base):
__tablename__ = "permissions"
id = Column(
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
)
name = Column("name", Unicode(255), unique=True)
roles = relationship("Role", secondary=role_permissions, backref="permissions")
def __init__(self, name=None, id_=None):
self.name = name
self.id = id_
+30
View File
@@ -0,0 +1,30 @@
import uuid
from barker.models.meta import Base
from sqlalchemy import Column, Unicode, text
from sqlalchemy.dialects.postgresql import UUID
class Customer(Base):
__tablename__ = "customers"
id = Column(
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
)
name = Column("name", Unicode(255), nullable=False)
phone = Column("phone", Unicode(255), nullable=False, unique=True)
address = Column("address", Unicode(255), nullable=True)
@property
def __name__(self):
return self.name
def __init__(self, name=None, phone=None, address=None, id_=None):
self.name = name
self.phone = phone
self.address = address
self.id = id_
@classmethod
def cash(cls):
return uuid.UUID("2c716f4b-0736-429a-ad51-610d7c47cb5e")
+20
View File
@@ -0,0 +1,20 @@
import uuid
from barker.models.meta import Base
from sqlalchemy import JSON, Column, Unicode, text
from sqlalchemy.dialects.postgresql import UUID
class DbSetting(Base):
__tablename__ = "settings"
id = Column(
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
)
name = Column("name", Unicode(255), unique=True, nullable=False)
data = Column("data", JSON)
def __init__(self, id_=None, name=None, data=None):
self.id = id_
self.name = name
self.data = data
+41
View File
@@ -0,0 +1,41 @@
import random
import string
import uuid
from datetime import datetime
from barker.models.login_history import LoginHistory
from barker.models.meta import Base
from sqlalchemy import Boolean, Column, DateTime, ForeignKey, Unicode, desc, text
from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import Session, relationship
class Device(Base):
__tablename__ = "devices"
id = Column(
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
)
name = Column("name", Unicode(255), unique=True, nullable=False)
enabled = Column("enabled", Boolean, nullable=False)
section_id = Column("section_id", UUID(as_uuid=True), ForeignKey("sections.id"), nullable=False)
creation_date = Column("creation_date", DateTime(timezone=True), nullable=False)
section = relationship("Section", foreign_keys=section_id)
login_history = relationship("LoginHistory", order_by=desc(LoginHistory.date), backref="device")
def __init__(self, name=None, enabled=None, section_id=None, creation_date=None, id_=None):
self.name = name
self.enabled = enabled
self.section_id = section_id
self.creation_date = datetime.utcnow() if creation_date is None else creation_date
self.id = id_
@classmethod
def create(cls, db: Session):
main_section = uuid.UUID("3f13f6e7-dc76-4fca-8fdb-b2bbf29b35df")
name = "".join(random.choices(string.ascii_lowercase + string.digits, k=6))
device = Device(name, False, main_section)
db.add(device)
return device
+41
View File
@@ -0,0 +1,41 @@
import uuid
from barker.models.meta import Base
from sqlalchemy import Boolean, Column, ForeignKey, Integer, Unicode, text
from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import relationship
class FoodTable(Base):
__tablename__ = "food_tables"
id = Column(
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
)
name = Column("name", Unicode(255), nullable=False, unique=True)
seats = Column("seats", Integer, nullable=False)
section_id = Column("section_id", UUID(as_uuid=True), ForeignKey("sections.id"), nullable=False)
is_active = Column("is_active", Boolean, nullable=False)
sort_order = Column("sort_order", Integer, nullable=False)
section = relationship("Section", foreign_keys=section_id)
@property
def __name__(self):
return self.name
def __init__(
self,
name=None,
seats=None,
section_id=None,
is_active=None,
sort_order=0,
id_=None,
):
self.name = name
self.seats = seats
self.section_id = section_id
self.is_active = is_active
self.sort_order = sort_order
self.id = id_
+30
View File
@@ -0,0 +1,30 @@
import uuid
from datetime import datetime
from barker.models.meta import Base
from sqlalchemy import Column, DateTime, ForeignKey, Integer, text
from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import relationship
class GuestBook(Base):
__tablename__ = "guest_book"
id = Column(
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
)
customer_id = Column("customer_id", UUID(as_uuid=True), ForeignKey("customers.id"), nullable=False)
pax = Column("pax", Integer, nullable=False)
date = Column("creation_date", DateTime(timezone=True), nullable=False)
customer = relationship("Customer")
def __init__(self, pax=None, id_=None, customer_id=None, customer=None):
self.customer_id = customer_id
self.pax = pax
self.id = id_
self.date = datetime.utcnow()
if customer is None:
self.customer_id = customer_id
else:
self.customer = customer
+96
View File
@@ -0,0 +1,96 @@
import uuid
from decimal import Decimal
from barker.models.meta import Base
from barker.models.product import Product
from sqlalchemy import (
Boolean,
Column,
ForeignKey,
Integer,
Numeric,
UniqueConstraint,
case,
func,
text,
)
from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.ext.hybrid import hybrid_property
from sqlalchemy.orm import relationship
class Inventory(Base):
__tablename__ = "inventories"
__table_args__ = (UniqueConstraint("kot_id", "product_id", "is_happy_hour", "price"),)
id = Column(
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
)
kot_id = Column("kot_id", UUID(as_uuid=True), ForeignKey("kots.id"), nullable=False, index=True)
product_id = Column("product_id", UUID(as_uuid=True), ForeignKey("products.id"), nullable=False)
quantity = Column("quantity", Numeric(precision=15, scale=2))
price = Column("price", Numeric(precision=15, scale=2))
is_happy_hour = Column("is_happy_hour", Boolean, nullable=False)
tax_rate = Column("tax_rate", Numeric(precision=15, scale=5))
tax_id = Column("tax_id", UUID(as_uuid=True), ForeignKey("taxes.id"), nullable=False)
discount = Column("discount", Numeric(precision=15, scale=5))
sort_order = Column("sort_order", Integer, nullable=False)
kot = relationship("Kot", backref="inventories")
tax = relationship("Tax", foreign_keys=tax_id)
product = relationship("ProductVersion", secondary=Product.__table__, backref="inventories")
def __init__(
self,
kot_id,
product_id,
quantity,
price,
discount,
is_hh,
tax_id,
tax_rate,
sort_order,
):
self.kot_id = kot_id
self.product_id = product_id
self.quantity = quantity
self.price = price
self.discount = discount
self.is_happy_hour = is_hh
self.tax_id = tax_id
self.tax_rate = tax_rate
self.sort_order = sort_order
@hybrid_property
def effective_price(self):
return 0 if self.is_happy_hour else self.price
@effective_price.expression
def effective_price(cls):
return case([(cls.is_happy_hour == True, 0)], else_=cls.price) # noqa: E712
@hybrid_property
def net(self):
return self.effective_price * self.quantity * (1 - self.discount)
@net.expression
def net(cls):
return cls.effective_price * cls.quantity * (1 - cls.discount)
@hybrid_property
def tax_amount(self):
return self.net * self.tax_rate
@tax_amount.expression
def tax_amount(cls):
return cls.net * cls.tax_rate
@hybrid_property
def amount(self):
return round(Decimal(self.net * (1 + self.tax_rate)), 2)
@amount.expression
def amount(cls):
return func.round(cls.net * (1 + cls.tax_rate), 2)
@@ -0,0 +1,26 @@
import uuid
from barker.models.meta import Base
from sqlalchemy import Column, ForeignKey, Numeric, UniqueConstraint, text
from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import relationship
class InventoryModifier(Base):
__tablename__ = "inventory_modifiers"
__table_args__ = (UniqueConstraint("inventory_id", "modifier_id"),)
id = Column(
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
)
inventory_id = Column("inventory_id", UUID(as_uuid=True), ForeignKey("inventories.id"), nullable=False)
modifier_id = Column("modifier_id", UUID(as_uuid=True), ForeignKey("modifiers.id"), nullable=False)
price = Column("price", Numeric(precision=15, scale=2), nullable=False)
inventory = relationship("Inventory", backref="modifiers")
modifier = relationship("Modifier")
def __init__(self, inventory_id, modifier_id, price):
self.inventory_id = inventory_id
self.modifier_id = modifier_id
self.price = price
+49
View File
@@ -0,0 +1,49 @@
import uuid
from barker.models.meta import Base
from sqlalchemy import Column, DateTime, ForeignKey, Integer, text
from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import relationship
class Kot(Base):
__tablename__ = "kots"
id = Column(
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
)
voucher_id = Column(
"voucher_id",
UUID(as_uuid=True),
ForeignKey("vouchers.id"),
nullable=False,
index=True,
)
code = Column("code", Integer, nullable=False, unique=True)
food_table_id = Column(
"food_table_id",
UUID(as_uuid=True),
ForeignKey("food_tables.id"),
nullable=False,
)
date = Column("date", DateTime, nullable=False, index=True)
user_id = Column("user_id", UUID(as_uuid=True), ForeignKey("users.id"), nullable=False)
user = relationship("User", backref="kots")
food_table = relationship("FoodTable", backref="kots")
def __init__(
self,
voucher_id=None,
code=None,
food_table_id=None,
date=None,
user_id=None,
id_=None,
):
self.id = id_
self.voucher_id = voucher_id
self.code = code
self.food_table_id = food_table_id
self.date = date
self.user_id = user_id
+29
View File
@@ -0,0 +1,29 @@
import uuid
from datetime import datetime
from barker.models.meta import Base
from sqlalchemy import Column, DateTime, ForeignKey, UniqueConstraint, text
from sqlalchemy.dialects.postgresql import UUID
class LoginHistory(Base):
__tablename__ = "login_history"
__table_args__ = (UniqueConstraint("user_id", "device_id", "date"),)
id = Column(
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
)
user_id = Column("user_id", UUID(as_uuid=True), ForeignKey("users.id"), nullable=False)
device_id = Column(
"device_id",
UUID(as_uuid=True),
ForeignKey("devices.id"),
nullable=False,
)
date = Column("date", DateTime(timezone=True), nullable=False)
def __init__(self, user_id=None, device_id=None, date=None, id_=None):
self.user_id = user_id
self.device_id = device_id
self.date = datetime.utcnow() if date is None else date
self.id = id_
-460
View File
@@ -1,460 +0,0 @@
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.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
class VoucherType(enum.IntEnum):
KOT = 0
REGULAR_BILL = 1
NO_CHARGE = 2
STAFF = 4
VOID = 8
class ReportingLevel(enum.IntEnum):
Skip = 0
Aggregate = 1
Detailed = 2
class Customer(Base):
__tablename__ = "customers"
id = Column(
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
)
name = Column("name", Unicode(255), nullable=False)
phone = Column("phone", Unicode(255), nullable=False, unique=True)
address = Column("address", Unicode(255), nullable=True)
@property
def __name__(self):
return self.name
def __init__(self, name=None, phone=None, address=None, id_=None):
self.name = name
self.phone = phone
self.address = address
self.id = id_
@classmethod
def cash(cls):
return uuid.UUID("2c716f4b-0736-429a-ad51-610d7c47cb5e")
class FoodTable(Base):
__tablename__ = "food_tables"
id = Column(
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
)
name = Column("name", Unicode(255), nullable=False, unique=True)
seats = Column("seats", Integer, nullable=False)
section_id = Column("section_id", UUID(as_uuid=True), ForeignKey("sections.id"), nullable=False)
is_active = Column("is_active", Boolean, nullable=False)
sort_order = Column("sort_order", Integer, nullable=False)
section = relationship("Section", foreign_keys=section_id)
@property
def __name__(self):
return self.name
def __init__(
self,
name=None,
seats=None,
section_id=None,
is_active=None,
sort_order=0,
id_=None,
):
self.name = name
self.seats = seats
self.section_id = section_id
self.is_active = is_active
self.sort_order = sort_order
self.id = id_
class Tax(Base):
__tablename__ = "taxes"
id = Column(
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
)
name = Column("name", Unicode(255), nullable=False, unique=True)
rate = Column("rate", Numeric(precision=15, scale=5), nullable=False)
is_fixture = Column("is_fixture", Boolean, nullable=False)
def __init__(self, name=None, rate=None, is_fixture=False, id_=None):
self.name = name
self.rate = rate
self.is_fixture = is_fixture
self.id = id_
class MenuCategory(Base):
__tablename__ = "menu_categories"
id = Column(
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
)
name = Column("name", Unicode(255), nullable=False, unique=True)
is_active = Column("is_active", Boolean, nullable=False)
is_fixture = Column("is_fixture", Boolean, nullable=False)
sort_order = Column("sort_order", Integer, nullable=False)
def __init__(self, name, is_active, sort_order, is_fixture=False, id_=None):
self.name = name
self.is_active = is_active
self.sort_order = sort_order
self.is_fixture = is_fixture
self.id = id_
class SaleCategory(Base):
__tablename__ = "sale_categories"
id = Column(
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
)
name = Column("name", Unicode(255), nullable=False, unique=True)
discount_limit = Column("discount_limit", Numeric(precision=15, scale=5), nullable=False)
tax_id = Column("tax_id", UUID(as_uuid=True), ForeignKey("taxes.id"), nullable=False)
tax = relationship("Tax", foreign_keys=tax_id)
def __init__(self, name, discount_limit=None, tax_id=False, id_=None):
self.name = name
self.discount_limit = discount_limit if discount_limit is not None else 1
self.tax_id = tax_id
self.id = id_
class Product(Base):
__tablename__ = "products"
id = Column(
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
)
versions = relationship("ProductVersion")
modifier_categories = relationship(
"ModifierCategory",
secondary="modifier_categories_products",
order_by="ModifierCategory.sort_order",
backref="products",
)
def __init__(self, id_=None, version_id=None):
self.id = id_
self.version_id = version_id
modifier_categories_products = Table(
"modifier_categories_products",
Base.metadata,
Column("id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4),
Column("product_id", UUID(as_uuid=True), ForeignKey("products.id"), nullable=False),
Column(
"modifier_category_id",
UUID(as_uuid=True),
ForeignKey("modifier_categories.id"),
nullable=False,
),
UniqueConstraint("product_id", "modifier_category_id"),
)
class ProductVersion(Base):
__tablename__ = "product_versions"
id = Column(
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
)
product_id = Column("product_id", UUID(as_uuid=True), ForeignKey("products.id"), nullable=False)
name = Column("name", Unicode(255), nullable=False)
units = Column("units", Unicode(255), nullable=False)
menu_category_id = Column(
"menu_category_id",
UUID(as_uuid=True),
ForeignKey("menu_categories.id"),
nullable=False,
)
sale_category_id = Column(
"sale_category_id",
UUID(as_uuid=True),
ForeignKey("sale_categories.id"),
nullable=False,
)
price = Column("price", Numeric(precision=15, scale=2), nullable=False)
has_happy_hour = Column("has_happy_hour", Boolean, nullable=False)
is_not_available = Column("is_not_available", Boolean, nullable=False)
quantity = Column("quantity", Numeric(precision=15, scale=2), nullable=False)
sort_order = Column("sort_order", Integer, nullable=False)
valid_from = Column("valid_from", Date(), nullable=True)
valid_till = Column("valid_till", Date(), nullable=True)
menu_category = relationship("MenuCategory", backref="products")
sale_category = relationship("SaleCategory", backref="products")
product = relationship("Product")
__table_args__ = (
postgresql.ExcludeConstraint(
(name, "="),
(units, "="),
(func.daterange(valid_from, valid_till, text("'[]'")), "&&"),
),
)
def __init__(
self,
product_id=None,
name=None,
units=None,
menu_category_id=None,
sale_category_id=None,
price=None,
has_happy_hour=None,
is_not_available=None,
quantity=None,
valid_from=None,
valid_till=None,
sort_order=0,
id_=None,
):
self.product_id = product_id
self.name = name
self.units = units
self.menu_category_id = menu_category_id
self.sale_category_id = sale_category_id
self.price = price
self.has_happy_hour = has_happy_hour
self.is_not_available = is_not_available
self.quantity = quantity
self.valid_from = valid_from
self.valid_till = valid_till
self.sort_order = sort_order
self.id = id_
@hybrid_property
def full_name(self):
return f"{self.name} ({self.units})" if self.units else self.name
@full_name.expression
def full_name(cls):
return cls.name + case([(cls.units != "", " (" + cls.units + ")")], else_="")
def can_delete(self, advanced_delete):
if self.is_fixture:
return False, f"{self.name} is a fixture and cannot be edited or deleted."
if self.is_active:
return False, "Product is active"
if len(self.inventories) > 0 and not advanced_delete:
return False, "Product has entries"
return True, ""
class ModifierCategory(Base):
__tablename__ = "modifier_categories"
id = Column(
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
)
name = Column("name", Unicode(255), nullable=False, unique=True)
minimum = Column("minimum", Integer, nullable=False)
maximum = Column("maximum", Integer, nullable=True)
is_active = Column("is_active", Boolean, nullable=False)
sort_order = Column("sort_order", Integer, nullable=False)
def __init__(
self,
name=None,
minimum=None,
maximum=None,
is_active=True,
sort_order=0,
id_=None,
):
self.id = id_
self.name = name
self.minimum = minimum
self.maximum = maximum
self.is_active = is_active
self.sort_order = sort_order
class Modifier(Base):
__tablename__ = "modifiers"
id = Column(
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
)
name = Column("name", Unicode(255), nullable=False, unique=True)
show_in_bill = Column("show_in_bill", Boolean, nullable=False)
price = Column("price", Numeric(precision=15, scale=2), nullable=False)
is_active = Column("is_active", Boolean, nullable=False)
modifier_category_id = Column(
"modifier_category_id",
UUID(as_uuid=True),
ForeignKey("modifier_categories.id"),
nullable=False,
)
modifier_category = relationship("ModifierCategory", backref="modifiers")
def __init__(
self,
name=None,
show_in_bill=None,
price=None,
modifier_category_id=None,
is_active=True,
id_=None,
):
self.id = id_
self.name = name
self.show_in_bill = show_in_bill
self.price = price
self.modifier_category_id = modifier_category_id
self.is_active = is_active
class DbSetting(Base):
__tablename__ = "settings"
id = Column(
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
)
name = Column("name", Unicode(255), unique=True, nullable=False)
data = Column("data", JSON)
def __init__(self, id_=None, name=None, data=None):
self.id = id_
self.name = name
self.data = data
class Section(Base):
__tablename__ = "sections"
id = Column(
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
)
name = Column("name", Unicode(255), unique=True, nullable=False)
is_fixture = Column("is_fixture", Boolean, nullable=False, default=False)
def __init__(self, name=None, is_fixture=None, id_=None):
self.id = id_
self.name = name
self.is_fixture = is_fixture
@classmethod
def main(cls):
return uuid.UUID("3f13f6e7-dc76-4fca-8fdb-b2bbf29b35df")
class Printer(Base):
__tablename__ = "printers"
id = Column(
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
)
name = Column("name", Unicode(255), unique=True, nullable=False)
address = Column("address", Unicode(255), unique=True, nullable=False)
cut_code = Column("cut_code", Unicode(255), nullable=False)
def __init__(self, name=None, address=None, cut_code=None, id_=None):
self.id = id_
self.name = name
self.address = address
self.cut_code = cut_code
class SectionPrinter(Base):
__tablename__ = "section_printers"
__table_args__ = (UniqueConstraint("menu_category_id", "section_id"),)
id = Column(
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
)
menu_category_id = Column("menu_category_id", UUID(as_uuid=True), ForeignKey("menu_categories.id"))
section_id = Column("section_id", UUID(as_uuid=True), ForeignKey("sections.id"), nullable=False)
printer_id = Column("printer_id", UUID(as_uuid=True), ForeignKey("printers.id"), nullable=False)
copies = Column("copies", Integer, nullable=False)
menu_category = relationship("MenuCategory", backref="section_printers")
section = relationship("Section", backref="section_printers")
printer = relationship("Printer", backref="section_printers")
def __init__(
self,
menu_category_id=None,
section_id=None,
printer_id=None,
copies=None,
id_=None,
):
self.id = id_
self.menu_category_id = menu_category_id
self.section_id = section_id
self.printer_id = printer_id
self.copies = copies
class SettleOption(Base):
__tablename__ = "settle_options"
id = Column("id", Integer, primary_key=True)
name = Column("name", Unicode(255), unique=True, nullable=False)
voucher_type = Column("voucher_type", Enum(VoucherType), nullable=False)
reporting_level = Column("reporting_level", Enum(ReportingLevel), nullable=False)
has_reason = Column("has_reason", Boolean, nullable=False, server_default=expression.false(), default=False)
is_fixture = Column("is_fixture", Boolean, nullable=False, server_default=expression.false(), default=False)
def __init__(self, name=None, voucher_type=None, reporting_level=None, has_reason=None, is_fixture=None, id_=None):
self.id = id_
self.name = name
self.voucher_type = voucher_type
self.reporting_level = reporting_level
self.has_reason = has_reason
self.is_fixture = is_fixture
@classmethod
def UNSETTLED(cls):
return 1
@classmethod
def ROUND_OFF(cls):
return 7
@classmethod
def AMOUNT(cls):
return 8
@classmethod
def VOID(cls):
return 9
+25
View File
@@ -0,0 +1,25 @@
import uuid
from barker.models.meta import Base
from sqlalchemy import Boolean, Column, Integer, Unicode, text
from sqlalchemy.dialects.postgresql import UUID
class MenuCategory(Base):
__tablename__ = "menu_categories"
id = Column(
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
)
name = Column("name", Unicode(255), nullable=False, unique=True)
is_active = Column("is_active", Boolean, nullable=False)
is_fixture = Column("is_fixture", Boolean, nullable=False)
sort_order = Column("sort_order", Integer, nullable=False)
def __init__(self, name, is_active, sort_order, is_fixture=False, id_=None):
self.name = name
self.is_active = is_active
self.sort_order = sort_order
self.is_fixture = is_fixture
self.id = id_
+42
View File
@@ -0,0 +1,42 @@
import uuid
from barker.models.meta import Base
from sqlalchemy import Boolean, Column, ForeignKey, Numeric, Unicode, text
from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import relationship
class Modifier(Base):
__tablename__ = "modifiers"
id = Column(
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
)
name = Column("name", Unicode(255), nullable=False, unique=True)
show_in_bill = Column("show_in_bill", Boolean, nullable=False)
price = Column("price", Numeric(precision=15, scale=2), nullable=False)
is_active = Column("is_active", Boolean, nullable=False)
modifier_category_id = Column(
"modifier_category_id",
UUID(as_uuid=True),
ForeignKey("modifier_categories.id"),
nullable=False,
)
modifier_category = relationship("ModifierCategory", backref="modifiers")
def __init__(
self,
name=None,
show_in_bill=None,
price=None,
modifier_category_id=None,
is_active=True,
id_=None,
):
self.id = id_
self.name = name
self.show_in_bill = show_in_bill
self.price = price
self.modifier_category_id = modifier_category_id
self.is_active = is_active
@@ -0,0 +1,20 @@
import uuid
from barker.models.meta import Base
from sqlalchemy import Column, ForeignKey, Table, UniqueConstraint, text
from sqlalchemy.dialects.postgresql import UUID
modifier_categories_products = Table(
"modifier_categories_products",
Base.metadata,
Column("id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4),
Column("product_id", UUID(as_uuid=True), ForeignKey("products.id"), nullable=False),
Column(
"modifier_category_id",
UUID(as_uuid=True),
ForeignKey("modifier_categories.id"),
nullable=False,
),
UniqueConstraint("product_id", "modifier_category_id"),
)
+34
View File
@@ -0,0 +1,34 @@
import uuid
from barker.models.meta import Base
from sqlalchemy import Boolean, Column, Integer, Unicode, text
from sqlalchemy.dialects.postgresql import UUID
class ModifierCategory(Base):
__tablename__ = "modifier_categories"
id = Column(
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
)
name = Column("name", Unicode(255), nullable=False, unique=True)
minimum = Column("minimum", Integer, nullable=False)
maximum = Column("maximum", Integer, nullable=True)
is_active = Column("is_active", Boolean, nullable=False)
sort_order = Column("sort_order", Integer, nullable=False)
def __init__(
self,
name=None,
minimum=None,
maximum=None,
is_active=True,
sort_order=0,
id_=None,
):
self.id = id_
self.name = name
self.minimum = minimum
self.maximum = maximum
self.is_active = is_active
self.sort_order = sort_order
+40
View File
@@ -0,0 +1,40 @@
import uuid
from barker.models.meta import Base
from sqlalchemy import Column, ForeignKey, Unicode, text
from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import backref, relationship
class Overview(Base):
__tablename__ = "overview"
id = Column(
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
)
voucher_id = Column(
"voucher_id",
UUID(as_uuid=True),
ForeignKey("vouchers.id"),
nullable=False,
unique=True,
)
food_table_id = Column(
"food_table_id",
UUID(as_uuid=True),
ForeignKey("food_tables.id"),
nullable=False,
unique=True,
)
guest_book_id = Column("guest_book_id", UUID(as_uuid=True), ForeignKey("guest_book.id"), unique=True)
status = Column("status", Unicode(255), nullable=False)
voucher = relationship("Voucher", backref=backref("status", uselist=False))
food_table = relationship("FoodTable", backref=backref("status", uselist=False))
guest = relationship("GuestBook", backref=backref("status", uselist=False))
def __init__(self, voucher_id, food_table_id, guest_book_id, status, id_=None):
self.voucher_id = voucher_id
self.food_table_id = food_table_id
self.guest_book_id = guest_book_id
self.status = status
self.id = id_
+22
View File
@@ -0,0 +1,22 @@
import uuid
from barker.models.meta import Base
from barker.models.role_permissions import role_permissions
from sqlalchemy import Column, Unicode, text
from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import relationship
class Permission(Base):
__tablename__ = "permissions"
id = Column(
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
)
name = Column("name", Unicode(255), unique=True)
roles = relationship("Role", secondary=role_permissions, backref="permissions")
def __init__(self, name=None, id_=None):
self.name = name
self.id = id_
+22
View File
@@ -0,0 +1,22 @@
import uuid
from barker.models.meta import Base
from sqlalchemy import Column, Unicode, text
from sqlalchemy.dialects.postgresql import UUID
class Printer(Base):
__tablename__ = "printers"
id = Column(
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
)
name = Column("name", Unicode(255), unique=True, nullable=False)
address = Column("address", Unicode(255), nullable=False)
cut_code = Column("cut_code", Unicode(255), nullable=False)
def __init__(self, name=None, address=None, cut_code=None, id_=None):
self.id = id_
self.name = name
self.address = address
self.cut_code = cut_code
+24
View File
@@ -0,0 +1,24 @@
import uuid
from barker.models.meta import Base
from sqlalchemy import Column, text
from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import relationship
class Product(Base):
__tablename__ = "products"
id = Column(
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
)
versions = relationship("ProductVersion")
modifier_categories = relationship(
"ModifierCategory",
secondary="modifier_categories_products",
order_by="ModifierCategory.sort_order",
backref="products",
)
def __init__(self, id_=None, version_id=None):
self.id = id_
self.version_id = version_id
+109
View File
@@ -0,0 +1,109 @@
import uuid
from barker.models.meta import Base
from sqlalchemy import (
Boolean,
Column,
Date,
ForeignKey,
Integer,
Numeric,
Unicode,
case,
func,
text,
)
from sqlalchemy.dialects import postgresql
from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.ext.hybrid import hybrid_property
from sqlalchemy.orm import relationship
class ProductVersion(Base):
__tablename__ = "product_versions"
id = Column(
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
)
product_id = Column("product_id", UUID(as_uuid=True), ForeignKey("products.id"), nullable=False)
name = Column("name", Unicode(255), nullable=False)
units = Column("units", Unicode(255), nullable=False)
menu_category_id = Column(
"menu_category_id",
UUID(as_uuid=True),
ForeignKey("menu_categories.id"),
nullable=False,
)
sale_category_id = Column(
"sale_category_id",
UUID(as_uuid=True),
ForeignKey("sale_categories.id"),
nullable=False,
)
price = Column("price", Numeric(precision=15, scale=2), nullable=False)
has_happy_hour = Column("has_happy_hour", Boolean, nullable=False)
is_not_available = Column("is_not_available", Boolean, nullable=False)
quantity = Column("quantity", Numeric(precision=15, scale=2), nullable=False)
sort_order = Column("sort_order", Integer, nullable=False)
valid_from = Column("valid_from", Date(), nullable=True)
valid_till = Column("valid_till", Date(), nullable=True)
menu_category = relationship("MenuCategory", backref="products")
sale_category = relationship("SaleCategory", backref="products")
product = relationship("Product")
__table_args__ = (
postgresql.ExcludeConstraint(
(name, "="),
(units, "="),
(func.daterange(valid_from, valid_till, text("'[]'")), "&&"),
),
)
def __init__(
self,
product_id=None,
name=None,
units=None,
menu_category_id=None,
sale_category_id=None,
price=None,
has_happy_hour=None,
is_not_available=None,
quantity=None,
valid_from=None,
valid_till=None,
sort_order=0,
id_=None,
):
self.product_id = product_id
self.name = name
self.units = units
self.menu_category_id = menu_category_id
self.sale_category_id = sale_category_id
self.price = price
self.has_happy_hour = has_happy_hour
self.is_not_available = is_not_available
self.quantity = quantity
self.valid_from = valid_from
self.valid_till = valid_till
self.sort_order = sort_order
self.id = id_
@hybrid_property
def full_name(self):
return f"{self.name} ({self.units})" if self.units else self.name
@full_name.expression
def full_name(cls):
return cls.name + case([(cls.units != "", " (" + cls.units + ")")], else_="")
def can_delete(self, advanced_delete):
if self.is_fixture:
return False, f"{self.name} is a fixture and cannot be edited or deleted."
if self.is_active:
return False, "Product is active"
if len(self.inventories) > 0 and not advanced_delete:
return False, "Product has entries"
return True, ""
+7
View File
@@ -0,0 +1,7 @@
import enum
class ReportingLevel(enum.IntEnum):
Skip = 0
Aggregate = 1
Detailed = 2
+33
View File
@@ -0,0 +1,33 @@
import uuid
from datetime import datetime
from barker.models.meta import Base
from sqlalchemy import Column, DateTime, ForeignKey, text
from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import relationship
class Reprint(Base):
__tablename__ = "reprints"
id = Column(
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
)
date = Column("date", DateTime, nullable=False, index=True)
voucher_id = Column(
"voucher_id",
UUID(as_uuid=True),
ForeignKey("vouchers.id"),
nullable=False,
index=True,
)
user_id = Column("user_id", UUID(as_uuid=True), ForeignKey("users.id"), nullable=False)
user = relationship("User", backref="reprints")
def __init__(self, voucher_id=None, user_id=None, id_=None):
self.id = id_
self.date = datetime.now()
self.voucher_id = voucher_id
self.user_id = user_id
+18
View File
@@ -0,0 +1,18 @@
import uuid
from barker.models.meta import Base
from sqlalchemy import Column, Unicode, text
from sqlalchemy.dialects.postgresql import UUID
class Role(Base):
__tablename__ = "roles"
id = Column(
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
)
name = Column("name", Unicode(255), unique=True)
def __init__(self, name=None, id_=None):
self.name = name
self.id = id_
+20
View File
@@ -0,0 +1,20 @@
import uuid
from barker.models.meta import Base
from sqlalchemy import Column, ForeignKey, Table, UniqueConstraint, text
from sqlalchemy.dialects.postgresql import UUID
role_permissions = Table(
"role_permissions",
Base.metadata,
Column("id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4),
Column(
"permission_id",
UUID(as_uuid=True),
ForeignKey("permissions.id"),
nullable=False,
),
Column("role_id", UUID(as_uuid=True), ForeignKey("roles.id"), nullable=False),
UniqueConstraint("permission_id", "role_id"),
)
+24
View File
@@ -0,0 +1,24 @@
import uuid
from barker.models.meta import Base
from sqlalchemy import Column, ForeignKey, Numeric, Unicode, text
from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import relationship
class SaleCategory(Base):
__tablename__ = "sale_categories"
id = Column(
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
)
name = Column("name", Unicode(255), nullable=False, unique=True)
discount_limit = Column("discount_limit", Numeric(precision=15, scale=5), nullable=False)
tax_id = Column("tax_id", UUID(as_uuid=True), ForeignKey("taxes.id"), nullable=False)
tax = relationship("Tax", foreign_keys=tax_id)
def __init__(self, name, discount_limit=None, tax_id=False, id_=None):
self.name = name
self.discount_limit = discount_limit if discount_limit is not None else 1
self.tax_id = tax_id
self.id = id_
+24
View File
@@ -0,0 +1,24 @@
import uuid
from barker.models.meta import Base
from sqlalchemy import Boolean, Column, Unicode, text
from sqlalchemy.dialects.postgresql import UUID
class Section(Base):
__tablename__ = "sections"
id = Column(
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
)
name = Column("name", Unicode(255), unique=True, nullable=False)
is_fixture = Column("is_fixture", Boolean, nullable=False, default=False)
def __init__(self, name=None, is_fixture=None, id_=None):
self.id = id_
self.name = name
self.is_fixture = is_fixture
@classmethod
def main(cls):
return uuid.UUID("3f13f6e7-dc76-4fca-8fdb-b2bbf29b35df")
+37
View File
@@ -0,0 +1,37 @@
import uuid
from barker.models.meta import Base
from sqlalchemy import Column, ForeignKey, Integer, UniqueConstraint, text
from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import relationship
class SectionPrinter(Base):
__tablename__ = "section_printers"
__table_args__ = (UniqueConstraint("menu_category_id", "section_id"),)
id = Column(
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
)
menu_category_id = Column("menu_category_id", UUID(as_uuid=True), ForeignKey("menu_categories.id"))
section_id = Column("section_id", UUID(as_uuid=True), ForeignKey("sections.id"), nullable=False)
printer_id = Column("printer_id", UUID(as_uuid=True), ForeignKey("printers.id"), nullable=False)
copies = Column("copies", Integer, nullable=False)
menu_category = relationship("MenuCategory", backref="section_printers")
section = relationship("Section", backref="section_printers")
printer = relationship("Printer", backref="section_printers")
def __init__(
self,
menu_category_id=None,
section_id=None,
printer_id=None,
copies=None,
id_=None,
):
self.id = id_
self.menu_category_id = menu_category_id
self.section_id = section_id
self.printer_id = printer_id
self.copies = copies
+40
View File
@@ -0,0 +1,40 @@
from barker.models.meta import Base
from barker.models.reporting_level import ReportingLevel
from barker.models.voucher_type import VoucherType
from sqlalchemy import Boolean, Column, Enum, Integer, Unicode
from sqlalchemy.sql import expression
class SettleOption(Base):
__tablename__ = "settle_options"
id = Column("id", Integer, primary_key=True)
name = Column("name", Unicode(255), unique=True, nullable=False)
voucher_type = Column("voucher_type", Enum(VoucherType), nullable=False)
reporting_level = Column("reporting_level", Enum(ReportingLevel), nullable=False)
has_reason = Column("has_reason", Boolean, nullable=False, server_default=expression.false(), default=False)
is_fixture = Column("is_fixture", Boolean, nullable=False, server_default=expression.false(), default=False)
def __init__(self, name=None, voucher_type=None, reporting_level=None, has_reason=None, is_fixture=None, id_=None):
self.id = id_
self.name = name
self.voucher_type = voucher_type
self.reporting_level = reporting_level
self.has_reason = has_reason
self.is_fixture = is_fixture
@classmethod
def UNSETTLED(cls):
return 1
@classmethod
def ROUND_OFF(cls):
return 7
@classmethod
def AMOUNT(cls):
return 8
@classmethod
def VOID(cls):
return 9
+32
View File
@@ -0,0 +1,32 @@
import uuid
from barker.models.meta import Base
from sqlalchemy import Column, ForeignKey, Integer, Numeric, UniqueConstraint, text
from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import relationship
class Settlement(Base):
__tablename__ = "settlements"
__table_args__ = (UniqueConstraint("voucher_id", "settled"),)
id = Column(
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
)
voucher_id = Column(
"voucher_id",
UUID(as_uuid=True),
ForeignKey("vouchers.id"),
nullable=False,
index=True,
)
settled = Column("settled", Integer, ForeignKey("settle_options.id"), nullable=False)
amount = Column("amount", Numeric(precision=15, scale=2), nullable=False)
settle_option = relationship("SettleOption")
def __init__(self, voucher_id=None, settled=None, amount=None, id_=None):
self.id = id_
self.voucher_id = voucher_id
self.settled = settled
self.amount = amount
+22
View File
@@ -0,0 +1,22 @@
import uuid
from barker.models.meta import Base
from sqlalchemy import Boolean, Column, Numeric, Unicode, text
from sqlalchemy.dialects.postgresql import UUID
class Tax(Base):
__tablename__ = "taxes"
id = Column(
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
)
name = Column("name", Unicode(255), nullable=False, unique=True)
rate = Column("rate", Numeric(precision=15, scale=5), nullable=False)
is_fixture = Column("is_fixture", Boolean, nullable=False)
def __init__(self, name=None, rate=None, is_fixture=False, id_=None):
self.name = name
self.rate = rate
self.is_fixture = is_fixture
self.id = id_
+59
View File
@@ -0,0 +1,59 @@
import uuid
from hashlib import md5
from barker.models.login_history import LoginHistory
from barker.models.meta import Base
from barker.models.user_roles import user_roles
from sqlalchemy import Boolean, Column, Unicode, desc, text
from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import Session, relationship, synonym
class User(Base):
__tablename__ = "users"
id = Column(
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
)
name = Column("name", Unicode(255), unique=True, nullable=False)
_password = Column("password", Unicode(60), nullable=False)
locked_out = Column("locked_out", Boolean, nullable=False)
roles = relationship("Role", secondary=user_roles, order_by="Role.name")
login_history = relationship("LoginHistory", order_by=desc(LoginHistory.date), backref="user")
def _get_password(self):
return self._password
def _set_password(self, password):
self._password = encrypt(password)
password = property(_get_password, _set_password)
password = synonym("_password", descriptor=password)
@property
def __name__(self):
return self.name
def __init__(self, name=None, password=None, locked_out=None, id_=None):
self.name = name
self.password = password
self.locked_out = locked_out
self.id = id_
@classmethod
def auth(cls, name: str, password: str, db: Session):
if password is None:
return None
user = db.query(User).filter(User.name.ilike(name)).first()
if not user:
return None
if user.password != encrypt(password) or user.locked_out:
return None
else:
return user
def encrypt(val):
return md5(val.encode("utf-8") + "v2".encode("utf-8")).hexdigest()
+15
View File
@@ -0,0 +1,15 @@
import uuid
from barker.models.meta import Base
from sqlalchemy import Column, ForeignKey, Table, UniqueConstraint, text
from sqlalchemy.dialects.postgresql import UUID
user_roles = Table(
"user_roles",
Base.metadata,
Column("id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4),
Column("user_id", UUID(as_uuid=True), ForeignKey("users.id"), nullable=False),
Column("role_id", UUID(as_uuid=True), ForeignKey("roles.id"), nullable=False),
UniqueConstraint("user_id", "role_id"),
)
+2 -256
View File
@@ -1,104 +1,20 @@
import uuid
from datetime import datetime
from decimal import Decimal
from sqlalchemy import (
Boolean,
Column,
DateTime,
Enum,
ForeignKey,
Integer,
Numeric,
Unicode,
UniqueConstraint,
case,
func,
text,
)
from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.ext.hybrid import hybrid_property
from sqlalchemy.orm import backref, relationship
from sqlalchemy.orm import relationship
from .master import Product, VoucherType
from .meta import Base
class GuestBook(Base):
__tablename__ = "guest_book"
id = Column(
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
)
customer_id = Column("customer_id", UUID(as_uuid=True), ForeignKey("customers.id"), nullable=False)
pax = Column("pax", Integer, nullable=False)
date = Column("creation_date", DateTime(timezone=True), nullable=False)
customer = relationship("Customer")
def __init__(self, pax=None, id_=None, customer_id=None, customer=None):
self.customer_id = customer_id
self.pax = pax
self.id = id_
self.date = datetime.utcnow()
if customer is None:
self.customer_id = customer_id
else:
self.customer = customer
class Overview(Base):
__tablename__ = "overview"
id = Column(
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
)
voucher_id = Column(
"voucher_id",
UUID(as_uuid=True),
ForeignKey("vouchers.id"),
nullable=False,
unique=True,
)
food_table_id = Column(
"food_table_id",
UUID(as_uuid=True),
ForeignKey("food_tables.id"),
nullable=False,
unique=True,
)
guest_book_id = Column("guest_book_id", UUID(as_uuid=True), ForeignKey("guest_book.id"), unique=True)
status = Column("status", Unicode(255), nullable=False)
voucher = relationship("Voucher", backref=backref("status", uselist=False))
food_table = relationship("FoodTable", backref=backref("status", uselist=False))
guest = relationship("GuestBook", backref=backref("status", uselist=False))
def __init__(self, voucher_id, food_table_id, guest_book_id, status, id_=None):
self.voucher_id = voucher_id
self.food_table_id = food_table_id
self.guest_book_id = guest_book_id
self.status = status
self.id = id_
class InventoryModifier(Base):
__tablename__ = "inventory_modifiers"
__table_args__ = (UniqueConstraint("inventory_id", "modifier_id"),)
id = Column(
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
)
inventory_id = Column("inventory_id", UUID(as_uuid=True), ForeignKey("inventories.id"), nullable=False)
modifier_id = Column("modifier_id", UUID(as_uuid=True), ForeignKey("modifiers.id"), nullable=False)
price = Column("price", Numeric(precision=15, scale=2), nullable=False)
inventory = relationship("Inventory", backref="modifiers")
modifier = relationship("Modifier")
def __init__(self, inventory_id, modifier_id, price):
self.inventory_id = inventory_id
self.modifier_id = modifier_id
self.price = price
from .voucher_type import VoucherType
class Voucher(Base):
@@ -190,173 +106,3 @@ class Voucher(Base):
@property
def amount(self):
return round(sum(i.amount for k in self.kots for i in k.inventories), 2)
class Kot(Base):
__tablename__ = "kots"
id = Column(
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
)
voucher_id = Column(
"voucher_id",
UUID(as_uuid=True),
ForeignKey("vouchers.id"),
nullable=False,
index=True,
)
code = Column("code", Integer, nullable=False, unique=True)
food_table_id = Column(
"food_table_id",
UUID(as_uuid=True),
ForeignKey("food_tables.id"),
nullable=False,
)
date = Column("date", DateTime, nullable=False, index=True)
user_id = Column("user_id", UUID(as_uuid=True), ForeignKey("users.id"), nullable=False)
user = relationship("User", backref="kots")
food_table = relationship("FoodTable", backref="kots")
def __init__(
self,
voucher_id=None,
code=None,
food_table_id=None,
date=None,
user_id=None,
id_=None,
):
self.id = id_
self.voucher_id = voucher_id
self.code = code
self.food_table_id = food_table_id
self.date = date
self.user_id = user_id
class Settlement(Base):
__tablename__ = "settlements"
__table_args__ = (UniqueConstraint("voucher_id", "settled"),)
id = Column(
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
)
voucher_id = Column(
"voucher_id",
UUID(as_uuid=True),
ForeignKey("vouchers.id"),
nullable=False,
index=True,
)
settled = Column("settled", Integer, ForeignKey("settle_options.id"), nullable=False)
amount = Column("amount", Numeric(precision=15, scale=2), nullable=False)
settle_option = relationship("SettleOption")
def __init__(self, voucher_id=None, settled=None, amount=None, id_=None):
self.id = id_
self.voucher_id = voucher_id
self.settled = settled
self.amount = amount
class Reprint(Base):
__tablename__ = "reprints"
id = Column(
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
)
date = Column("date", DateTime, nullable=False, index=True)
voucher_id = Column(
"voucher_id",
UUID(as_uuid=True),
ForeignKey("vouchers.id"),
nullable=False,
index=True,
)
user_id = Column("user_id", UUID(as_uuid=True), ForeignKey("users.id"), nullable=False)
user = relationship("User", backref="reprints")
def __init__(self, voucher_id=None, user_id=None, id_=None):
self.id = id_
self.date = datetime.now()
self.voucher_id = voucher_id
self.user_id = user_id
class Inventory(Base):
__tablename__ = "inventories"
__table_args__ = (UniqueConstraint("kot_id", "product_id", "is_happy_hour", "price"),)
id = Column(
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), default=uuid.uuid4
)
kot_id = Column("kot_id", UUID(as_uuid=True), ForeignKey("kots.id"), nullable=False, index=True)
product_id = Column("product_id", UUID(as_uuid=True), ForeignKey("products.id"), nullable=False)
quantity = Column("quantity", Numeric(precision=15, scale=2))
price = Column("price", Numeric(precision=15, scale=2))
is_happy_hour = Column("is_happy_hour", Boolean, nullable=False)
tax_rate = Column("tax_rate", Numeric(precision=15, scale=5))
tax_id = Column("tax_id", UUID(as_uuid=True), ForeignKey("taxes.id"), nullable=False)
discount = Column("discount", Numeric(precision=15, scale=5))
sort_order = Column("sort_order", Integer, nullable=False)
kot = relationship("Kot", backref="inventories")
tax = relationship("Tax", foreign_keys=tax_id)
product = relationship("ProductVersion", secondary=Product.__table__, backref="inventories")
def __init__(
self,
kot_id,
product_id,
quantity,
price,
discount,
is_hh,
tax_id,
tax_rate,
sort_order,
):
self.kot_id = kot_id
self.product_id = product_id
self.quantity = quantity
self.price = price
self.discount = discount
self.is_happy_hour = is_hh
self.tax_id = tax_id
self.tax_rate = tax_rate
self.sort_order = sort_order
@hybrid_property
def effective_price(self):
return 0 if self.is_happy_hour else self.price
@effective_price.expression
def effective_price(cls):
return case([(cls.is_happy_hour == True, 0)], else_=cls.price) # noqa: E712
@hybrid_property
def net(self):
return self.effective_price * self.quantity * (1 - self.discount)
@net.expression
def net(cls):
return cls.effective_price * cls.quantity * (1 - cls.discount)
@hybrid_property
def tax_amount(self):
return self.net * self.tax_rate
@tax_amount.expression
def tax_amount(cls):
return cls.net * cls.tax_rate
@hybrid_property
def amount(self):
return round(Decimal(self.net * (1 + self.tax_rate)), 2)
@amount.expression
def amount(cls):
return func.round(cls.net * (1 + cls.tax_rate), 2)
+9
View File
@@ -0,0 +1,9 @@
import enum
class VoucherType(enum.IntEnum):
KOT = 0
REGULAR_BILL = 1
NO_CHARGE = 2
STAFF = 4
VOID = 8
+7 -8
View File
@@ -13,14 +13,13 @@ from sqlalchemy import and_, or_
from sqlalchemy.orm import Session
from ..core.arq import settings as redis_settings
from ..models.master import (
DbSetting,
Printer,
ProductVersion,
SectionPrinter,
VoucherType,
)
from ..models.voucher import Inventory, Voucher
from ..models.db_setting import DbSetting
from ..models.inventory import Inventory
from ..models.printer import Printer
from ..models.product_version import ProductVersion
from ..models.section_printer import SectionPrinter
from ..models.voucher import Voucher
from ..models.voucher_type import VoucherType
from . import currency_format, format_no_decimals
+3 -2
View File
@@ -9,8 +9,9 @@ from barker.schemas.cashier_report import CashierReport
from sqlalchemy.orm import Session
from ..core.arq import settings as redis_settings
from ..models.auth import Device
from ..models.master import Printer, SectionPrinter
from ..models.device import Device
from ..models.printer import Printer
from ..models.section_printer import SectionPrinter
from . import currency_format
+3 -2
View File
@@ -6,8 +6,9 @@ from arq import ArqRedis, create_pool
from sqlalchemy.orm import Session
from ..core.arq import settings as redis_settings
from ..models.auth import Device
from ..models.master import Printer, SectionPrinter
from ..models.device import Device
from ..models.printer import Printer
from ..models.section_printer import SectionPrinter
from ..schemas.discount_report import DiscountReport
from . import currency_format
+6 -2
View File
@@ -10,8 +10,12 @@ from sqlalchemy import and_, or_
from sqlalchemy.orm import Session
from ..core.arq import settings as redis_settings
from ..models.master import Printer, ProductVersion, SectionPrinter
from ..models.voucher import Inventory, Kot, Voucher
from ..models.inventory import Inventory
from ..models.kot import Kot
from ..models.printer import Printer
from ..models.product_version import ProductVersion
from ..models.section_printer import SectionPrinter
from ..models.voucher import Voucher
def design_kot(voucher: Voucher, kot: Kot, items: List[Inventory], copy_number: int, db: Session) -> str:
+3 -2
View File
@@ -8,8 +8,9 @@ from arq import ArqRedis, create_pool
from sqlalchemy.orm import Session
from ..core.arq import settings as redis_settings
from ..models.auth import Device
from ..models.master import Printer, SectionPrinter
from ..models.device import Device
from ..models.printer import Printer
from ..models.section_printer import SectionPrinter
from ..schemas.sale_report import SaleReport
from . import currency_format
+1 -1
View File
@@ -10,7 +10,7 @@ from sqlalchemy.orm import Session
from ..core.security import get_current_active_user as get_user
from ..db.session import SessionLocal
from ..models.master import Customer
from ..models.customer import Customer
from ..schemas.user_token import UserToken
+2 -1
View File
@@ -10,7 +10,8 @@ from sqlalchemy.orm import Session
from ..core.security import get_current_active_user as get_user
from ..db.session import SessionLocal
from ..models.auth import Device, LoginHistory
from ..models.device import Device
from ..models.login_history import LoginHistory
from ..schemas.user_token import UserToken
+2 -2
View File
@@ -12,8 +12,8 @@ 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 Customer
from ..models.voucher import GuestBook
from ..models.customer import Customer
from ..models.guest_book import GuestBook
from ..schemas.user_token import UserToken
+1 -1
View File
@@ -6,7 +6,7 @@ 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 DbSetting
from ..models.db_setting import DbSetting
from ..schemas.user_token import UserToken
+1 -1
View File
@@ -26,7 +26,7 @@ from ..core.security import (
get_current_active_user,
)
from ..db.session import SessionLocal
from ..models.auth import LoginHistory
from ..models.login_history import LoginHistory
from ..schemas.user_token import UserToken
+2 -1
View File
@@ -13,7 +13,8 @@ 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 ..models.menu_category import MenuCategory
from ..models.product_version import ProductVersion
from ..schemas.user_token import UserToken
from . import effective_date
+1 -1
View File
@@ -10,7 +10,7 @@ from sqlalchemy.orm import Session
from ..core.security import get_current_active_user as get_user
from ..db.session import SessionLocal
from ..models.master import Modifier
from ..models.modifier import Modifier
from ..schemas.user_token import UserToken
+4 -1
View File
@@ -14,7 +14,10 @@ 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 ..models.menu_category import MenuCategory
from ..models.modifier_category import ModifierCategory
from ..models.product import Product
from ..models.product_version import ProductVersion
from ..schemas.user_token import UserToken
from . import effective_date
+1 -1
View File
@@ -10,7 +10,7 @@ from sqlalchemy.orm import Session
from ..core.security import get_current_active_user as get_user
from ..db.session import SessionLocal
from ..models.master import Printer
from ..models.printer import Printer
from ..schemas.user_token import UserToken
+4 -1
View File
@@ -12,7 +12,10 @@ 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, Product, ProductVersion, SaleCategory
from ..models.menu_category import MenuCategory
from ..models.product import Product
from ..models.product_version import ProductVersion
from ..models.sale_category import SaleCategory
from ..schemas.user_token import UserToken
from . import effective_date
@@ -8,8 +8,11 @@ from sqlalchemy.sql.expression import func
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, Kot, Voucher
from ...models.inventory import Inventory
from ...models.kot import Kot
from ...models.product_version import ProductVersion
from ...models.voucher import Voucher
from ...models.voucher_type import VoucherType
from ...schemas.user_token import UserToken
from . import report_finish_date, report_start_date
@@ -7,8 +7,11 @@ 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 ReportingLevel, SettleOption
from ...models.voucher import Reprint, Settlement, Voucher
from ...models.reporting_level import ReportingLevel
from ...models.reprint import Reprint
from ...models.settle_option import SettleOption
from ...models.settlement import Settlement
from ...models.voucher import Voucher
from ...schemas.bill_settlement_report import BillSettlement, BillSettlementItem
from ...schemas.user_token import UserToken
from . import report_finish_date, report_start_date
@@ -10,9 +10,10 @@ from sqlalchemy.orm import Session, joinedload
from ...core.config import settings
from ...core.security import get_current_active_user as get_user
from ...db.session import SessionLocal
from ...models.auth import User
from ...models.master import ReportingLevel
from ...models.voucher import Settlement, Voucher
from ...models.reporting_level import ReportingLevel
from ...models.settlement import Settlement
from ...models.user import User
from ...models.voucher import Voucher
from ...printing.cashier_report import print_cashier_report
from ...schemas.cashier_report import (
CashierReport,
@@ -10,8 +10,12 @@ 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, SaleCategory, VoucherType
from ...models.voucher import Inventory, Kot, Voucher
from ...models.inventory import Inventory
from ...models.kot import Kot
from ...models.product_version import ProductVersion
from ...models.sale_category import SaleCategory
from ...models.voucher import Voucher
from ...models.voucher_type import VoucherType
from ...printing.discount_report import print_discount_report
from ...schemas.discount_report import DiscountReport, DiscountReportItem
from ...schemas.user_token import UserToken
@@ -7,8 +7,13 @@ 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 MenuCategory, ProductVersion, SaleCategory, VoucherType
from ...models.voucher import Inventory, Kot, Voucher
from ...models.inventory import Inventory
from ...models.kot import Kot
from ...models.menu_category import MenuCategory
from ...models.product_version import ProductVersion
from ...models.sale_category import SaleCategory
from ...models.voucher import Voucher
from ...models.voucher_type import VoucherType
from ...schemas import to_camel
from ...schemas.user_token import UserToken
from . import report_finish_date, report_start_date
@@ -7,7 +7,8 @@ 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 ...models.menu_category import MenuCategory
from ...models.product_version import ProductVersion
from ...schemas.user_token import UserToken
from . import report_finish_date, report_start_date
+8 -2
View File
@@ -10,8 +10,14 @@ 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, SaleCategory, SettleOption, VoucherType
from ...models.voucher import Inventory, Kot, Settlement, Voucher
from ...models.inventory import Inventory
from ...models.kot import Kot
from ...models.product_version import ProductVersion
from ...models.sale_category import SaleCategory
from ...models.settle_option import SettleOption
from ...models.settlement import Settlement
from ...models.voucher import Voucher
from ...models.voucher_type import VoucherType
from ...printing.sale_report import print_sale_report
from ...schemas.sale_report import SaleReport, SaleReportItem
from ...schemas.user import UserLink
+5 -2
View File
@@ -8,8 +8,11 @@ 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 Tax, VoucherType
from ...models.voucher import Inventory, Kot, Voucher
from ...models.inventory import Inventory
from ...models.kot import Kot
from ...models.tax import Tax
from ...models.voucher import Voucher
from ...models.voucher_type import VoucherType
from ...schemas.tax_report import TaxReport, TaxReportItem
from ...schemas.user_token import UserToken
from . import report_finish_date, report_start_date
+2 -1
View File
@@ -10,7 +10,8 @@ from sqlalchemy.orm import Session
from ..core.security import get_current_active_user as get_user
from ..db.session import SessionLocal
from ..models.auth import Permission, Role
from ..models.permission import Permission
from ..models.role import Role
from ..schemas.user_token import UserToken
+1 -1
View File
@@ -10,7 +10,7 @@ from sqlalchemy.orm import Session
from ..core.security import get_current_active_user as get_user
from ..db.session import SessionLocal
from ..models.master import SaleCategory
from ..models.sale_category import SaleCategory
from ..schemas.user_token import UserToken
+1 -1
View File
@@ -10,7 +10,7 @@ from sqlalchemy.orm import Session
from ..core.security import get_current_active_user as get_user
from ..db.session import SessionLocal
from ..models.master import Section
from ..models.section import Section
from ..schemas.user_token import UserToken
+2 -1
View File
@@ -12,7 +12,8 @@ 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 ..models.menu_category import MenuCategory
from ..models.section_printer import SectionPrinter
from ..schemas.user_token import UserToken
+1 -1
View File
@@ -5,7 +5,7 @@ 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 DbSetting
from ..models.db_setting import DbSetting
from ..schemas.user_token import UserToken
+3 -1
View File
@@ -9,7 +9,9 @@ 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 ReportingLevel, SettleOption, VoucherType
from ..models.reporting_level import ReportingLevel
from ..models.settle_option import SettleOption
from ..models.voucher_type import VoucherType
from ..schemas.user_token import UserToken
+2 -2
View File
@@ -10,8 +10,8 @@ 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
from ..models.voucher import Overview
from ..models.food_table import FoodTable
from ..models.overview import Overview
from ..schemas.user_token import UserToken
+3 -2
View File
@@ -13,8 +13,9 @@ from sqlalchemy.sql.functions import count
from ..core.security import get_current_active_user as get_user
from ..db.session import SessionLocal
from ..models.master import SaleCategory, Tax
from ..models.voucher import Inventory
from ..models.inventory import Inventory
from ..models.sale_category import SaleCategory
from ..models.tax import Tax
from ..schemas.user_token import UserToken
@@ -10,7 +10,8 @@ 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 ..models.menu_category import MenuCategory
from ..models.product_version import ProductVersion
from ..schemas.update_product_prices import UpdateProductPrices, UpdateProductPricesItem
from ..schemas.user_token import UserToken
from . import optional_query_date
+2 -1
View File
@@ -6,7 +6,8 @@ import barker.schemas.user as schemas
from barker.core.security import get_current_active_user as get_user
from barker.db.session import SessionLocal
from barker.models.auth import Role, User
from barker.models.role import Role
from barker.models.user import User
from barker.schemas.user_token import UserToken
from fastapi import APIRouter, Depends, HTTPException, Security, status
from sqlalchemy.exc import SQLAlchemyError
+6 -2
View File
@@ -9,8 +9,12 @@ 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 ...models.guest_book import GuestBook
from ...models.overview import Overview
from ...models.settle_option import SettleOption
from ...models.settlement import Settlement
from ...models.voucher import Voucher
from ...models.voucher_type import VoucherType
from ...schemas.receive_payment import ReceivePaymentItem as SettleSchema
+5 -2
View File
@@ -10,8 +10,11 @@ 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 ...models.overview import Overview
from ...models.reprint import Reprint
from ...models.settle_option import SettleOption
from ...models.voucher import Voucher
from ...models.voucher_type import VoucherType
from ...routers.voucher import do_update_settlements, get_guest_book
from ...schemas.receive_payment import ReceivePaymentItem as SettleSchema
from ...schemas.user_token import UserToken
+5 -2
View File
@@ -12,8 +12,11 @@ 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 ...models.kot import Kot
from ...models.overview import Overview
from ...models.settlement import Settlement
from ...models.voucher import Voucher
from ...models.voucher_type import VoucherType
from ...routers.voucher import do_update_settlements, do_update_table, get_bill_id
from ...schemas.user_token import UserToken
@@ -8,8 +8,10 @@ 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 ...models.overview import Overview
from ...models.settle_option import SettleOption
from ...models.voucher import Voucher
from ...models.voucher_type import VoucherType
from ...schemas.user_token import UserToken
from . import do_update_settlements
+7 -2
View File
@@ -13,8 +13,13 @@ 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 ...models.guest_book import GuestBook
from ...models.inventory import Inventory
from ...models.inventory_modifier import InventoryModifier
from ...models.kot import Kot
from ...models.product_version import ProductVersion
from ...models.voucher import Voucher
from ...models.voucher_type import VoucherType
from ...printing.bill import print_bill
from ...printing.kot import print_kot
from ...routers.voucher import (
+6 -2
View File
@@ -10,8 +10,12 @@ 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 ...models.food_table import FoodTable
from ...models.guest_book import GuestBook
from ...models.overview import Overview
from ...models.product_version import ProductVersion
from ...models.voucher import Voucher
from ...models.voucher_type import VoucherType
from ...schemas.user_token import UserToken
+7 -2
View File
@@ -14,8 +14,13 @@ 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 ...models.inventory import Inventory
from ...models.inventory_modifier import InventoryModifier
from ...models.kot import Kot
from ...models.overview import Overview
from ...models.settle_option import SettleOption
from ...models.voucher import Voucher
from ...models.voucher_type import VoucherType
from ...routers.voucher import (
check_permissions,
do_update_settlements,
+6 -2
View File
@@ -13,8 +13,12 @@ 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 ...models.inventory import Inventory
from ...models.inventory_modifier import InventoryModifier
from ...models.kot import Kot
from ...models.product_version import ProductVersion
from ...models.voucher import Voucher
from ...models.voucher_type import VoucherType
from ...printing.bill import print_bill
from ...printing.kot import print_kot
from ...routers.voucher import (
+4 -2
View File
@@ -6,8 +6,10 @@ 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 ...models.overview import Overview
from ...models.settle_option import SettleOption
from ...models.voucher import Voucher
from ...models.voucher_type import VoucherType
from ...schemas.receive_payment import ReceivePaymentItem as SettleSchema
from ...schemas.user_token import UserToken
from . import do_update_settlements
+2 -1
View File
@@ -1,6 +1,7 @@
from pydantic import BaseModel
from ..models.master import ReportingLevel, VoucherType
from ..models.reporting_level import ReportingLevel
from ..models.voucher_type import VoucherType
from . import to_camel
+1 -1
View File
@@ -1,4 +1,4 @@
from barker.models.master import DbSetting
from barker.models.db_setting import DbSetting
from pyramid.events import NewRequest, subscriber
from pyramid.httpexceptions import HTTPServiceUnavailable
+9 -8
View File
@@ -6,26 +6,27 @@ authors = ["tanshu <git@tanshu.com>"]
[tool.poetry.dependencies]
python = "^3.8"
uvicorn = "^0.12.3"
fastapi = "^0.62.0"
uvicorn = {extras = ["standard"], version = "^0.13.4"}
fastapi = "^0.63.0"
python-jose = {extras = ["cryptography"], version = "^3.2.0"}
passlib = {extras = ["bcrypt"], version = "^1.7.4"}
psycopg2-binary = "^2.8.6"
SQLAlchemy = "^1.3.20"
SQLAlchemy = "^1.4.0"
python-multipart = "^0.0.5"
PyJWT = "^1.7.1"
alembic = "^1.4.3"
alembic = "^1.5.7"
itsdangerous = "^1.1.0"
python-dotenv = "^0.14.0"
pydantic = {extras = ["dotenv"], version = "^1.7.3"}
pydantic = {extras = ["dotenv"], version = "^1.8.1"}
starlette = "^0.13.6"
arq = "^0.19.1"
aiohttp = "^3.7.4"
[tool.poetry.dev-dependencies]
flake8 = "^3.8.4"
flake8 = "^3.9.0"
black = "^20.8b1"
isort = "^5.6.2"
pre-commit = "^2.9.3"
isort = {extras = ["toml"], version = "^5.7.0"}
pre-commit = "^2.11.1"
[build-system]
requires = ["poetry-core>=1.0.0"]
Regular → Executable
View File
File mode changed.
+3
View File
@@ -8,6 +8,9 @@ indent_size = 2
insert_final_newline = true
trim_trailing_whitespace = true
[*.ts]
quote_type = single
[*.md]
max_line_length = off
trim_trailing_whitespace = false
+13 -16
View File
@@ -16,19 +16,13 @@
"createDefaultProgram": true
},
"extends": [
"plugin:@angular-eslint/ng-cli-compat",
"plugin:@angular-eslint/ng-cli-compat--formatting-add-on",
"plugin:@angular-eslint/recommended",
"plugin:@angular-eslint/template/process-inline-templates"
],
"rules": {
"@angular-eslint/component-selector": [
"error",
{
"type": "element",
"prefix": "app",
"style": "kebab-case"
}
"plugins": [
"import"
],
"rules": {
"@angular-eslint/directive-selector": [
"error",
{
@@ -37,6 +31,14 @@
"style": "camelCase"
}
],
"@angular-eslint/component-selector": [
"error",
{
"type": "element",
"prefix": "app",
"style": "kebab-case"
}
],
"@typescript-eslint/lines-between-class-members": [
"error",
"always",
@@ -51,14 +53,9 @@
"newlines-between": "always"
}
],
"@typescript-eslint/naming-convention": [
"off"
],
"@typescript-eslint/no-explicit-any": [
"error"
],
"no-shadow": "off",
"@typescript-eslint/no-shadow": "error"
]
}
},
{
+33 -34
View File
@@ -14,57 +14,56 @@
},
"private": true,
"dependencies": {
"@angular/animations": "^11.0.5",
"@angular/cdk": "^11.0.3",
"@angular/common": "^11.0.5",
"@angular/compiler": "^11.0.5",
"@angular/core": "^11.0.5",
"@angular/animations": "^11.1.0",
"@angular/cdk": "^11.1.0",
"@angular/common": "^11.1.0",
"@angular/compiler": "^11.1.0",
"@angular/core": "^11.1.0",
"@angular/flex-layout": "^11.0.0-beta.33",
"@angular/forms": "^11.0.5",
"@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",
"mathjs": "^8.1.0",
"@angular/forms": "^11.1.0",
"@angular/material": "^11.1.0",
"@angular/material-moment-adapter": "^11.1.0",
"@angular/platform-browser": "^11.1.0",
"@angular/platform-browser-dynamic": "^11.1.0",
"@angular/router": "^11.1.0",
"mathjs": "^9.0.0",
"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",
"@types/jasmine": "~3.6.2",
"@types/mathjs": "^6.0.9",
"@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",
"@angular-devkit/build-angular": "~0.1101.1",
"@angular-eslint/builder": "^1.1.0",
"@angular-eslint/eslint-plugin": "^1.1.0",
"@angular-eslint/eslint-plugin-template": "^1.1.0",
"@angular-eslint/schematics": "^1.1.0",
"@angular-eslint/template-parser": "^1.1.0",
"@angular/cli": "^11.1.1",
"@angular/compiler-cli": "^11.1.0",
"@angular/language-service": "^11.1.0",
"@types/jasmine": "~3.6.3",
"@types/mathjs": "^6.0.11",
"@types/node": "^14.14.22",
"@typescript-eslint/eslint-plugin": "^4.14.0",
"@typescript-eslint/parser": "^4.14.0",
"eslint": "^7.18.0",
"eslint-plugin-import": "^2.22.1",
"eslint-plugin-jsdoc": "^30.7.9",
"eslint-plugin-jsdoc": "^31.2.2",
"eslint-plugin-prefer-arrow": "1.2.2",
"husky": "^4.3.6",
"husky": "^4.3.8",
"jasmine-core": "^3.6.0",
"jasmine-spec-reporter": "^6.0.0",
"karma": "^5.2.3",
"karma": "^6.0.1",
"karma-chrome-launcher": "~3.1.0",
"karma-coverage-istanbul-reporter": "~3.0.2",
"karma-jasmine": "^4.0.0",
"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"
"typescript": "^4.1.3"
},
"husky": {
"hooks": {
+1 -1
View File
@@ -19,7 +19,7 @@ fi
cd docker/app || exit
docker build --tag barker:latest .
docker build --tag barker-worker:latest --file worker.Dockerfile .
cd ~/Programming/barker/docker || exit
cd "$parent_path/docker" || exit
docker save barker:latest | bzip2 | pv | ssh tanshu@knox.tanshu.com 'bunzip2 | sudo docker load'
docker save barker-worker:latest | bzip2 | pv | ssh tanshu@knox.tanshu.com 'bunzip2 | sudo docker load'
ansible-playbook playbook-chd.yml