forked from crudo/macao-pos
Database schema change. Implement ProductCategory.
* The user can now create product categories with the 'category add' command. * The user can now add products to categories with the 'product add --category INT' command.
This commit is contained in:
parent
729402ef6d
commit
819a38e2d3
76
cli.py
76
cli.py
|
@ -5,7 +5,8 @@ from datetime import datetime
|
|||
|
||||
from pos.config import Config
|
||||
from pos.logging import init_logging, get_logger
|
||||
from pos.database import Database, User, Event, Product, Transaction
|
||||
from pos.database import Database, User, Event, ProductCategory, Product,\
|
||||
Transaction
|
||||
|
||||
config = Config()
|
||||
conf_db = config.core['DATABASE']
|
||||
|
@ -30,6 +31,14 @@ def cli():
|
|||
pass
|
||||
|
||||
|
||||
@cli.command('initdb')
|
||||
def initdb():
|
||||
with db.get_session() as session:
|
||||
categories = session.query(ProductCategory).count()
|
||||
if not categories:
|
||||
session.add(ProductCategory(name='Default'))
|
||||
|
||||
|
||||
@cli.group('user')
|
||||
def user():
|
||||
pass
|
||||
|
@ -218,15 +227,60 @@ def event_set(event_uid, name, start, end):
|
|||
print(tabulate_events([event]))
|
||||
|
||||
|
||||
@cli.group('category')
|
||||
def category():
|
||||
pass
|
||||
|
||||
|
||||
@category.command('add')
|
||||
@click.option('-s', '--sort', type=click.INT)
|
||||
@click.argument('name')
|
||||
def category_add(name, sort):
|
||||
category = ProductCategory(name=name)
|
||||
|
||||
if sort:
|
||||
category.sort = sort
|
||||
|
||||
with db.get_session() as session:
|
||||
session.add(category)
|
||||
print("Category successfully added.")
|
||||
|
||||
|
||||
def tabulate_categories(categories):
|
||||
tab = [["UID", "Name", "Sort", "Created at"]]
|
||||
for c in categories:
|
||||
tab.append([c.uid, c.name, c.sort, c.created_at])
|
||||
return tabulate(tab, headers='firstrow')
|
||||
|
||||
|
||||
@category.command('list')
|
||||
@click.option('-s', '--sort', is_flag=True)
|
||||
def category_list(sort):
|
||||
with db.get_session() as session:
|
||||
categories = session.query(ProductCategory)
|
||||
|
||||
if sort:
|
||||
categories = categories.order_by(ProductCategory.sort.asc())
|
||||
|
||||
categories = categories.all()
|
||||
|
||||
if categories:
|
||||
print(tabulate_categories(categories))
|
||||
else:
|
||||
print("No categories found.")
|
||||
|
||||
|
||||
@cli.group('product')
|
||||
def product():
|
||||
pass
|
||||
|
||||
|
||||
def tabulate_products(products):
|
||||
tab = [["UID", "Name", "Price", "Sort", "Enabled", "Created at"]]
|
||||
tab = [["UID", "Name", "Price", "Sort", "Category",
|
||||
"Enabled", "Created at"]]
|
||||
for p in products:
|
||||
tab.append([p.uid, p.name, p.price, p.sort, p.is_active, p.created_at])
|
||||
tab.append([p.uid, p.name, p.price, p.sort, p.category.name,
|
||||
p.is_active, p.created_at])
|
||||
return tabulate(tab, headers='firstrow')
|
||||
|
||||
|
||||
|
@ -234,12 +288,18 @@ def tabulate_products(products):
|
|||
@click.argument('name')
|
||||
@click.argument('price')
|
||||
@click.option('-s', '--sort', type=click.INT)
|
||||
def product_add(name, price, sort):
|
||||
@click.option('-c', '--category', type=click.INT)
|
||||
def product_add(name, price, sort, category):
|
||||
product = Product(name=name, price=price)
|
||||
|
||||
if sort:
|
||||
product.sort = sort
|
||||
|
||||
if category:
|
||||
product.category_uid = category
|
||||
else:
|
||||
product.category_uid = 1
|
||||
|
||||
with db.get_session() as session:
|
||||
session.add(product)
|
||||
print("Product successfully added.")
|
||||
|
@ -266,8 +326,9 @@ def product_list(sort):
|
|||
@click.option('-n', '--name')
|
||||
@click.option('-p', '--price', type=click.INT)
|
||||
@click.option('-s', '--sort', type=click.INT)
|
||||
@click.option('-c', '--category', type=click.INT)
|
||||
@click.argument('product_uid')
|
||||
def product_set(product_uid, name, price, sort):
|
||||
def product_set(product_uid, name, price, sort, category):
|
||||
with db.get_session() as session:
|
||||
product = session.query(Product).get(product_uid)
|
||||
|
||||
|
@ -284,7 +345,10 @@ def product_set(product_uid, name, price, sort):
|
|||
if sort:
|
||||
product.sort = sort
|
||||
|
||||
if any([name, price, sort]):
|
||||
if category:
|
||||
product.category_uid = category
|
||||
|
||||
if any([name, price, sort, category]):
|
||||
with db.get_session() as session:
|
||||
session.add(product)
|
||||
print("Event successfully edited.")
|
||||
|
|
|
@ -113,15 +113,29 @@ class Event(Base):
|
|||
transactions = relationship('Transaction', lazy='joined')
|
||||
|
||||
|
||||
class ProductCategory(Base):
|
||||
__tablename__ = 'product_categories'
|
||||
uid = Column(Integer, primary_key=True)
|
||||
name = Column(String, nullable=False)
|
||||
sort = Column(Integer, nullable=False, server_default='0')
|
||||
created_at = Column(DateTime, nullable=False, default=datetime.now)
|
||||
|
||||
products = relationship('Product', lazy='joined')
|
||||
|
||||
|
||||
class Product(Base):
|
||||
__tablename__ = 'products'
|
||||
uid = Column(Integer, primary_key=True)
|
||||
name = Column(String, nullable=False)
|
||||
price = Column(Integer, nullable=False)
|
||||
sort = Column(Integer, nullable=False, server_default='0')
|
||||
category_uid = Column(Integer, ForeignKey('product_categories.uid'),
|
||||
nullable=False)
|
||||
is_active = Column(Boolean, nullable=False, server_default='1')
|
||||
created_at = Column(DateTime, nullable=False, default=datetime.now)
|
||||
|
||||
category = relationship('ProductCategory', lazy='joined')
|
||||
|
||||
|
||||
order_entry_association = Table(
|
||||
'order_entry_associations', Base.metadata,
|
||||
|
|
Loading…
Reference in New Issue
Block a user