Chore: Moved individual models into their own files.
Chore: Updated dependencies.
This commit is contained in:
1 parent
716c74c974
commit
ea2bfb1c0c
89 files changed
+1306
-1068
No files matched your search
@@ -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(
|
||||
|
||||
@@ -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
@@ -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
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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_
|
||||
@@ -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")
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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_
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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_
|
||||
@@ -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
|
||||
@@ -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_
|
||||
@@ -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"),
|
||||
)
|
||||
@@ -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
|
||||
@@ -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_
|
||||
@@ -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_
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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, ""
|
||||
@@ -0,0 +1,7 @@
|
||||
import enum
|
||||
|
||||
|
||||
class ReportingLevel(enum.IntEnum):
|
||||
Skip = 0
|
||||
Aggregate = 1
|
||||
Detailed = 2
|
||||
@@ -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
|
||||
@@ -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_
|
||||
@@ -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"),
|
||||
)
|
||||
@@ -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_
|
||||
@@ -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")
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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_
|
||||
@@ -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()
|
||||
@@ -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"),
|
||||
)
|
||||
@@ -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)
|
||||
@@ -0,0 +1,9 @@
|
||||
import enum
|
||||
|
||||
|
||||
class VoucherType(enum.IntEnum):
|
||||
KOT = 0
|
||||
REGULAR_BILL = 1
|
||||
NO_CHARGE = 2
|
||||
STAFF = 4
|
||||
VOID = 8
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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 (
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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 (
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,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
|
||||
|
||||
|
||||
@@ -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
File mode changed.
@@ -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
@@ -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
@@ -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": {
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in new issue
Block a user