Mulighet for å vise alle transaksjoner og for å kalle den nye fine

produktlistetingen i ShowUserMenu.
This commit is contained in:
Øystein Ingmar Skartsæterhagen 2010-08-28 14:13:59 +00:00
parent 55c740c1e9
commit fc58fc83a1
2 changed files with 40 additions and 3 deletions

View File

@ -1,6 +1,8 @@
from db import * from db import *
from sqlalchemy import or_ from sqlalchemy import or_
import pwd import pwd
import subprocess
import os
def search_user(string, session): def search_user(string, session):
exact_match = session.query(User).filter(or_(User.name==string, User.card==string)).first() exact_match = session.query(User).filter(or_(User.name==string, User.card==string)).first()
@ -111,3 +113,12 @@ def safe_str(obj):
return obj.encode('utf8') return obj.encode('utf8')
else: else:
return safe_str(unicode(obj)) return safe_str(unicode(obj))
def less(string):
'''
Run less with string as input; wait until it finishes.
'''
env = dict(os.environ)
env['LESSSECURE'] = '1'
proc = subprocess.Popen('less', env=env, stdin=subprocess.PIPE)
proc.communicate(safe_str(string))

View File

@ -644,9 +644,35 @@ class ShowUserMenu(Menu):
print 'User name: %s' % user.name print 'User name: %s' % user.name
print 'Card number: %s' % user.card print 'Card number: %s' % user.card
print 'Credit: %s kr' % user.credit print 'Credit: %s kr' % user.credit
self.print_transactions(user) selector = Selector('What do you want to know about %s?' % user.name,
# self.print_purchased_products(user) items=[('transactions', 'Everything (list of all transactions)'),
('products', 'Which products %s has bought, and how many' % user.name)])
what = selector.execute()
if what == 'transactions':
self.print_all_transactions(user)
elif what == 'products':
self.print_purchased_products(user)
self.pause() self.pause()
else:
print 'What what?'
def print_all_transactions(self, user):
num_trans = len(user.transactions)
string = '%s\'s transactions (%d):\n' % (user.name, num_trans)
for t in user.transactions:
string += ' * %s: %s %d kr, ' % \
(t.time.strftime('%Y-%m-%d %H:%M'),
{True:'in', False:'out'}[t.amount<0],
abs(t.amount))
if t.purchase:
string += 'purchase ('
string += ', '.join(map(lambda e: e.product.name,
t.purchase.entries))
string += ')'
else:
string += t.description
string += '\n'
less(string)
def print_transactions(self, user, limit=10): def print_transactions(self, user, limit=10):
num_trans = len(user.transactions) num_trans = len(user.transactions)