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.config import Config
|
||||||
from pos.logging import init_logging, get_logger
|
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()
|
config = Config()
|
||||||
conf_db = config.core['DATABASE']
|
conf_db = config.core['DATABASE']
|
||||||
|
@ -30,6 +31,14 @@ def cli():
|
||||||
pass
|
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')
|
@cli.group('user')
|
||||||
def user():
|
def user():
|
||||||
pass
|
pass
|
||||||
|
@ -218,15 +227,60 @@ def event_set(event_uid, name, start, end):
|
||||||
print(tabulate_events([event]))
|
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')
|
@cli.group('product')
|
||||||
def product():
|
def product():
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
def tabulate_products(products):
|
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:
|
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')
|
return tabulate(tab, headers='firstrow')
|
||||||
|
|
||||||
|
|
||||||
|
@ -234,12 +288,18 @@ def tabulate_products(products):
|
||||||
@click.argument('name')
|
@click.argument('name')
|
||||||
@click.argument('price')
|
@click.argument('price')
|
||||||
@click.option('-s', '--sort', type=click.INT)
|
@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)
|
product = Product(name=name, price=price)
|
||||||
|
|
||||||
if sort:
|
if sort:
|
||||||
product.sort = sort
|
product.sort = sort
|
||||||
|
|
||||||
|
if category:
|
||||||
|
product.category_uid = category
|
||||||
|
else:
|
||||||
|
product.category_uid = 1
|
||||||
|
|
||||||
with db.get_session() as session:
|
with db.get_session() as session:
|
||||||
session.add(product)
|
session.add(product)
|
||||||
print("Product successfully added.")
|
print("Product successfully added.")
|
||||||
|
@ -266,8 +326,9 @@ def product_list(sort):
|
||||||
@click.option('-n', '--name')
|
@click.option('-n', '--name')
|
||||||
@click.option('-p', '--price', type=click.INT)
|
@click.option('-p', '--price', type=click.INT)
|
||||||
@click.option('-s', '--sort', type=click.INT)
|
@click.option('-s', '--sort', type=click.INT)
|
||||||
|
@click.option('-c', '--category', type=click.INT)
|
||||||
@click.argument('product_uid')
|
@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:
|
with db.get_session() as session:
|
||||||
product = session.query(Product).get(product_uid)
|
product = session.query(Product).get(product_uid)
|
||||||
|
|
||||||
|
@ -284,7 +345,10 @@ def product_set(product_uid, name, price, sort):
|
||||||
if sort:
|
if sort:
|
||||||
product.sort = 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:
|
with db.get_session() as session:
|
||||||
session.add(product)
|
session.add(product)
|
||||||
print("Event successfully edited.")
|
print("Event successfully edited.")
|
||||||
|
|
|
@ -113,15 +113,29 @@ class Event(Base):
|
||||||
transactions = relationship('Transaction', lazy='joined')
|
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):
|
class Product(Base):
|
||||||
__tablename__ = 'products'
|
__tablename__ = 'products'
|
||||||
uid = Column(Integer, primary_key=True)
|
uid = Column(Integer, primary_key=True)
|
||||||
name = Column(String, nullable=False)
|
name = Column(String, nullable=False)
|
||||||
price = Column(Integer, nullable=False)
|
price = Column(Integer, nullable=False)
|
||||||
sort = Column(Integer, nullable=False, server_default='0')
|
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')
|
is_active = Column(Boolean, nullable=False, server_default='1')
|
||||||
created_at = Column(DateTime, nullable=False, default=datetime.now)
|
created_at = Column(DateTime, nullable=False, default=datetime.now)
|
||||||
|
|
||||||
|
category = relationship('ProductCategory', lazy='joined')
|
||||||
|
|
||||||
|
|
||||||
order_entry_association = Table(
|
order_entry_association = Table(
|
||||||
'order_entry_associations', Base.metadata,
|
'order_entry_associations', Base.metadata,
|
||||||
|
|
Loading…
Reference in New Issue
Block a user