diff --git a/cli.py b/cli.py index b835c5b..a702046 100644 --- a/cli.py +++ b/cli.py @@ -4,7 +4,7 @@ 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, Order +from pos.database import Database, User, Event, Product, Transaction config = Config() conf_db = config.core['DATABASE'] @@ -62,9 +62,9 @@ def tabulate_events(events): tab = [["UID", "Name", "Starts at", "Ends at", "Income", "Created at"]] for e in events: sum = 0 - for order in e.orders: - for entry in order.entries: - sum += entry.product.price * entry.quantity + for t in e.transactions: + for o in t.orders: + sum += o.product.price * o.quantity tab.append([e.uid, e.name, e.starts_at, e.ends_at, sum, e.created_at]) return tabulate(tab, headers='firstrow') @@ -128,37 +128,47 @@ def product_list(): print(tabulate_products(products)) -@cli.group('order') -def order(): +@cli.group('transaction') +def transaction(): pass def tabulate_orders(orders): - text = [] + tab = [["Product", "Price", "Quantity", "Total"]] for o in orders: - text.append("Listing order #{} ({}):".format(o.uid, o.created_at)) - tab = [["Product", "Quantity", "Total"]] - total = 0 - for e in o.entries: - if e.quantity != 0: - tab.append([e.product.name, e.quantity, - e.product.price * e.quantity]) - total += e.product.price * e.quantity - text.append(tabulate(tab, headers='firstrow')) - text.append("Total: {}".format(total)) - text.append('\n') - return '\n'.join(text) + if o.quantity != 0: + tab.append([o.product.name, o.product.price, o.quantity, + o.product.price * o.quantity]) + return tabulate(tab, headers='firstrow') -@order.command('list') -def order_list(): - orders = None +def print_transactions(transactions): + sum = 0 + for t in transactions: + print("Listing transaction #{} ({}):".format(t.uid, t.created_at)) + print(tabulate_orders(t.orders)) + + tot = 0 + for o in t.orders: + tot += o.product.price * o.quantity + sum += tot + print("Total: {}".format(tot)) + print() + + print("Total income: {}".format(sum)) + print() + + +@transaction.command('list') +def transaction_list(): with db.get_session() as session: - orders = session.query(Order).all() - if len(orders) == 0: - print("No orders found.") + transactions = session.query(Transaction).all() + + if len(transactions) == 0: + print("No transactions found.") return - print(tabulate_orders(orders)) + + return print_transactions(transactions) if __name__ == '__main__': diff --git a/pos/database.py b/pos/database.py index 8992bf0..9bad621 100644 --- a/pos/database.py +++ b/pos/database.py @@ -112,7 +112,7 @@ class Event(Base): starts_at = Column(DateTime, nullable=False, default=datetime.now) ends_at = Column(DateTime) - orders = relationship('Order', lazy='joined') + transactions = relationship('Transaction', lazy='joined') class Product(Base): @@ -127,24 +127,24 @@ class Product(Base): order_entry_association = Table( 'order_entry_associations', Base.metadata, - Column('order_uid', Integer, ForeignKey('orders.uid')), - Column('order_entry_uid', Integer, ForeignKey('order_entries.uid')) + Column('transaction_uid', Integer, ForeignKey('transactions.uid')), + Column('order_uid', Integer, ForeignKey('orders.uid')) ) -class Order(Base): - __tablename__ = 'orders' +class Transaction(Base): + __tablename__ = 'transactions' uid = Column(Integer, primary_key=True) created_at = Column(DateTime, nullable=False, default=datetime.now) event_uid = Column(Integer, ForeignKey('events.uid'), nullable=False) event = relationship('Event') - entries = relationship('OrderEntry', lazy='joined', - secondary=order_entry_association) + orders = relationship('Order', lazy='joined', + secondary=order_entry_association) -class OrderEntry(Base): - __tablename__ = 'order_entries' +class Order(Base): + __tablename__ = 'orders' uid = Column(Integer, primary_key=True) product_uid = Column(Integer, ForeignKey('products.uid'), nullable=False) quantity = Column(Integer, nullable=False) diff --git a/web.py b/web.py index e0700c8..ee1b217 100644 --- a/web.py +++ b/web.py @@ -5,7 +5,7 @@ from flask_login import LoginManager, login_user, logout_user, login_required from pos.config import Config from pos.logging import init_logging, get_logger -from pos.database import Database, User, Product, Event, Order, OrderEntry +from pos.database import Database, User, Product, Event, Transaction, Order config = Config() @@ -128,14 +128,14 @@ def sell(): with db.get_session() as session: items = request.form.items() - entries = [ - OrderEntry(product_uid=uid, quantity=qty) + orders = [ + Order(product_uid=uid, quantity=qty) for uid, qty in items if int(qty) > 0 ] - order = Order(event_uid=event.uid, entries=entries) - session.add(order) + transaction = Transaction(event_uid=event.uid, orders=orders) + session.add(transaction) flash("Success!", 'success') return sell_page()