This commit is contained in:
Øyvind Almelid 2010-05-07 17:32:39 +00:00
parent 95285be342
commit c7c7498f19
4 changed files with 199 additions and 0 deletions

BIN
data Normal file

Binary file not shown.

88
db.py Normal file
View File

@ -0,0 +1,88 @@
from sqlalchemy import Table, Column, Integer, String, MetaData, ForeignKey, create_engine, DateTime, Boolean, or_
from sqlalchemy.orm import sessionmaker, relationship, backref
from sqlalchemy.ext.declarative import declarative_base
import datetime
engine = create_engine('sqlite:///data')
Base = declarative_base()
Session = sessionmaker(bind=engine)
class User(Base):
__tablename__ = 'users'
name = Column(String(10), primary_key=True)
card = Column(String(10))
credit = Column(Integer)
def __init__(self, name, card, credit=0):
self.name = name
self.card = card
self.credit = credit
def __repr__(self):
return "<User('%s')>" % self.name
class Product(Base):
__tablename__ = 'products'
bar_code = Column(Integer, primary_key=True)
name = Column(String(30))
price = Column(Integer)
def __init__(self, bar_code, name, price):
self.name = name
self.bar_code = bar_code
self.price = price
def __repr__(self):
return "<Product('%s', '%s', '%s')>" % (self.name, self.bar_code, self.price)
class PurchaseEntry(Base):
__tablename__ = 'purchase_entries'
id = Column(Integer, primary_key=True)
purchase_id = Column(Integer,ForeignKey("purchases.id"))
product_bar_code = Column(Integer,ForeignKey("products.bar_code"))
amount = Column(Integer)
product = relationship(Product,backref="purchases")
def __init__(self, purchase, product, amount):
self.product = product
self.product_bar_code = product.bar_code
self.purchase_id = purchase.id
self.amount = amount
def __repr__(self):
return "<PurchaseEntry('%s', '%s', '%s')>" % (self.purchase.user.user, self.product.name, self.amount )
class Purchase(Base):
__tablename__ = 'purchases'
id = Column(Integer, primary_key=True)
time = Column(DateTime)
user_name = Column(Integer, ForeignKey('users.name'))
price = Column(Integer)
performed = Column(Boolean)
user = relationship(User, backref=backref('purchases', order_by=id))
products = relationship(PurchaseEntry, backref=backref("purchase"))
def __init__(self ,performed=False):
self.performed = performed
def __repr__(self):
return "<Purchase('%s', '%s', '%s')>" % (self.user.name, self.price, self.time.strftime('%c'))
def set_price(self):
self.price = 0
for entry in self.products:
self.price += entry.amount*entry.product.price
def perform_purchase(self):
if self.performed:
print "This transaction has already been performed"
else:
self.time = datetime.datetime.now()
self.set_price()
self.user.credit -= self.price
self.performed = True

43
helpers.py Normal file
View File

@ -0,0 +1,43 @@
from db import *
from sqlalchemy import or_
def retrieve_user(string, session):
first = session.query(User).filter(or_(User.name==string, User.card==string)).first()
if first:
print "Found user "+first.name
return first
else:
list = session.query(User).filter(or_(User.name.like('%'+string+'%'),User.card.like('%'+string+'%'))).all()
if len(list) == 0:
print "No users found matching your search"
return None
if len(list) == 1:
print "Found one user: "+list[0].name
if confirm():
return list[0]
else:
return None
else:
print "Found "+str(len(list))+" users:"
return select_from_list(list)
def confirm():
while True:
input = raw_input("Confirm? (y/n)\n")
if input in ["y","yes"]:
return True
elif input in ["n","no"]:
return False
else:
print "Nonsense!"
def select_from_list(list):
while True:
for i in range(len(list)):
print i+1, " ) ", list[i].name
choice = raw_input("Select user :\n")
if choice in [str(x+1) for x in range(len(list))]:
return list[int(choice)-1]
else:
return None

68
text_based.py Normal file
View File

@ -0,0 +1,68 @@
from helpers import *
class Menu():
def __init__(self, name):
self.name = name
class ChargeMenu(Menu):
def __init__(self):
self.name = "Add Credits to a User Account"
def execute(self):
self.session = Session()
while 1:
abort = False
while 1:
user_string = raw_input('\nEnter the user name or card number of the account you wish to add credits to, or type "exit" to exit:\n')
if user_string in ['exit', 'abort', 'quit']:
abort = True
break
else:
user = retrieve_user(user_string,self.session)
if user:
break
if abort:
break
while 1:
print '\nHow much do you wish to charge?\n'
amount_string = raw_input('Enter an amount, or type "exit" to exit:\n')
if amount_string in ['exit', 'abort', 'quit']:
abort = True
break
try:
amount = int(amount_string)
break
except:
print "Please enter an integer"
if abort:
break
else:
user.credit += amount
self.session.add(user)
self.session.commit()
self.session.close()
break
class MainMenu():
def __init__(self):
self.menu_list = [Menu("Buy"),ChargeMenu(), Menu("Add User"), Menu("Add Product")]
def execute(self):
while 1:
print "Main Menu: \nWhat do you want to do? \n"
for i in range(len(self.menu_list)):
print i+1," ) ",self.menu_list[i].name
result = raw_input('\nEnter a number corresponding to your action, or "exit" to exit \n')
if result in ["1","2","3","4"]:
self.menu_list[int(result)-1].execute()
elif result in ["quit", "exit", "abort"]:
print "OK, quitting"
break
else:
print "This does not make sense"
main = MainMenu()
main.execute()