Database schema change and new UI feature. The user can now rearrange the products.
* Product has a new 'order' column. * The user can now specify the sort order at product creation time with the 'product add --sort INT' command. * The user can now rearrange the products with the 'products set --sort INT' comand. * The user can now show a sorted list of products in cli.py with the 'product list --sort' command.
This commit is contained in:
parent
10bd8a1660
commit
c07c19ca32
50
cli.py
50
cli.py
|
@ -224,26 +224,37 @@ def product():
|
||||||
|
|
||||||
|
|
||||||
def tabulate_products(products):
|
def tabulate_products(products):
|
||||||
tab = [["UID", "Name", "Price", "Enabled", "Created at"]]
|
tab = [["UID", "Name", "Price", "Sort", "Enabled", "Created at"]]
|
||||||
for p in products:
|
for p in products:
|
||||||
tab.append([p.uid, p.name, p.price, p.is_active, p.created_at])
|
tab.append([p.uid, p.name, p.price, p.sort, p.is_active, p.created_at])
|
||||||
return tabulate(tab, headers='firstrow')
|
return tabulate(tab, headers='firstrow')
|
||||||
|
|
||||||
|
|
||||||
@product.command('add')
|
@product.command('add')
|
||||||
@click.argument('name')
|
@click.argument('name')
|
||||||
@click.argument('price')
|
@click.argument('price')
|
||||||
def product_add(name, price):
|
@click.option('-s', '--sort', type=click.INT)
|
||||||
|
def product_add(name, price, sort):
|
||||||
product = Product(name=name, price=price)
|
product = Product(name=name, price=price)
|
||||||
|
|
||||||
|
if sort:
|
||||||
|
product.sort = sort
|
||||||
|
|
||||||
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.")
|
||||||
|
|
||||||
|
|
||||||
@product.command('list')
|
@product.command('list')
|
||||||
def product_list():
|
@click.option('-s', '--sort', is_flag=True)
|
||||||
|
def product_list(sort):
|
||||||
with db.get_session() as session:
|
with db.get_session() as session:
|
||||||
products = session.query(Product).all()
|
products = session.query(Product)
|
||||||
|
|
||||||
|
if sort:
|
||||||
|
products = products.order_by(Product.sort.asc())
|
||||||
|
|
||||||
|
products = products.all()
|
||||||
|
|
||||||
if products:
|
if products:
|
||||||
print(tabulate_products(products))
|
print(tabulate_products(products))
|
||||||
|
@ -251,6 +262,35 @@ def product_list():
|
||||||
print("No products found.")
|
print("No products found.")
|
||||||
|
|
||||||
|
|
||||||
|
@product.command('set')
|
||||||
|
@click.option('-n', '--name')
|
||||||
|
@click.option('-p', '--price', type=click.INT)
|
||||||
|
@click.option('-s', '--sort', type=click.INT)
|
||||||
|
@click.argument('product_uid')
|
||||||
|
def product_set(product_uid, name, price, sort):
|
||||||
|
with db.get_session() as session:
|
||||||
|
product = session.query(Product).get(product_uid)
|
||||||
|
|
||||||
|
if not product:
|
||||||
|
print("No product found with id #{}.".format(product_uid))
|
||||||
|
return
|
||||||
|
|
||||||
|
if name:
|
||||||
|
product.name = name
|
||||||
|
|
||||||
|
if price:
|
||||||
|
product.price = price
|
||||||
|
|
||||||
|
if sort:
|
||||||
|
product.sort = sort
|
||||||
|
|
||||||
|
if any([name, price, sort]):
|
||||||
|
with db.get_session() as session:
|
||||||
|
session.add(product)
|
||||||
|
print("Event successfully edited.")
|
||||||
|
print(tabulate_products([product]))
|
||||||
|
|
||||||
|
|
||||||
@cli.group('transaction')
|
@cli.group('transaction')
|
||||||
def transaction():
|
def transaction():
|
||||||
pass
|
pass
|
||||||
|
|
|
@ -118,6 +118,7 @@ class Product(Base):
|
||||||
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')
|
||||||
created_at = Column(DateTime, nullable=False, default=datetime.now)
|
created_at = Column(DateTime, nullable=False, default=datetime.now)
|
||||||
is_active = Column(Boolean, nullable=False, server_default='1')
|
is_active = Column(Boolean, nullable=False, server_default='1')
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user