RFID support
This commit is contained in:
parent
2c6a121e21
commit
20d3964900
2
conf.py
2
conf.py
|
@ -1,4 +1,4 @@
|
|||
db_url = 'postgresql://torjehoa_dibblerdummy:1234@postgres/torjehoa_dibblerdummy'
|
||||
db_url = 'postgresql://terjesc_dibblerdummy:terjesc_dibblerdummy@postgres/terjesc_dibblerdummy'
|
||||
quit_allowed = True
|
||||
stop_allowed = False
|
||||
show_tracebacks = True
|
||||
|
|
7
db.py
7
db.py
|
@ -12,16 +12,21 @@ class User(Base):
|
|||
__tablename__ = 'users'
|
||||
name = Column(String(10), primary_key=True)
|
||||
card = Column(String(10))
|
||||
rfid = Column(String(10))
|
||||
credit = Column(Integer)
|
||||
|
||||
name_re = r"[a-z]+"
|
||||
card_re = r"(([Nn][Tt][Nn][Uu])?[0-9]+)?"
|
||||
rfid_re = r"[0-9]+"
|
||||
|
||||
def __init__(self, name, card, credit=0):
|
||||
def __init__(self, name, card, rfid, credit=0):
|
||||
self.name = name
|
||||
if card == '':
|
||||
card = None
|
||||
self.card = card
|
||||
if rfid == '':
|
||||
rfid = None
|
||||
self.rfid = rfid
|
||||
self.credit = credit
|
||||
|
||||
def __repr__(self):
|
||||
|
|
|
@ -7,11 +7,12 @@ import signal
|
|||
|
||||
def search_user(string, session):
|
||||
string = string.lower()
|
||||
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, User.rfid==string)).first()
|
||||
if exact_match:
|
||||
return exact_match
|
||||
user_list = session.query(User).filter(or_(User.name.ilike('%'+string+'%'),
|
||||
User.card.ilike('%'+string+'%'))).all()
|
||||
User.card.ilike('%'+string+'%'),
|
||||
User.rfid.ilike('%'+string+'%'))).all()
|
||||
return user_list
|
||||
|
||||
def search_product(string, session):
|
||||
|
@ -39,6 +40,8 @@ def system_user_exists(username):
|
|||
def guess_data_type(string):
|
||||
if string.startswith('ntnu') and string[4:].isdigit():
|
||||
return 'card'
|
||||
if string.isdigit() and len(string) == 10:
|
||||
return 'rfid'
|
||||
if string.isdigit() and len(string) in [8,13]:
|
||||
return 'bar_code'
|
||||
# if string.isdigit() and len(string) > 5:
|
||||
|
|
|
@ -253,7 +253,7 @@ class Menu():
|
|||
selected_thing = argmax(result_values)
|
||||
if results[selected_thing] == []:
|
||||
thing_for_type = {'card': 'user', 'username': 'user',
|
||||
'bar_code': 'product'}
|
||||
'bar_code': 'product', 'rfid': 'rfid'}
|
||||
type_guess = guess_data_type(search_str)
|
||||
if type_guess != None and thing_for_type[type_guess] in add_nonexisting:
|
||||
return self.search_add(search_str)
|
||||
|
@ -602,7 +602,8 @@ class AddUserMenu(Menu):
|
|||
username = self.input_str('Username (should be same as PVV username)> ', User.name_re, (1,10))
|
||||
cardnum = self.input_str('Card number (optional)> ', User.card_re, (0,10))
|
||||
cardnum = cardnum.lower()
|
||||
user = User(username, cardnum)
|
||||
rfid = self.input_str('RFID (optional)> ', User.rfid_re, (0,10))
|
||||
user = User(username, cardnum, rfid)
|
||||
self.session.add(user)
|
||||
try:
|
||||
self.session.commit()
|
||||
|
@ -616,10 +617,10 @@ class EditUserMenu(Menu):
|
|||
def __init__(self):
|
||||
Menu.__init__(self, 'Edit user', uses_db=True)
|
||||
self.help_text = '''
|
||||
The only editable part of a user is its card number.
|
||||
The only editable part of a user is its card number and rfid.
|
||||
|
||||
First select an existing user, then enter a new card number for that
|
||||
user (write an empty line to remove the card number).
|
||||
user, then rfid (write an empty line to remove the card number or rfid).
|
||||
'''
|
||||
|
||||
def _execute(self):
|
||||
|
@ -632,7 +633,15 @@ user (write an empty line to remove the card number).
|
|||
user.card = self.input_str('Card number (currently %s)> ' % card_str,
|
||||
User.card_re, (0,10),
|
||||
empty_string_is_none=True)
|
||||
user.card = user.card.lower()
|
||||
if user.card:
|
||||
user.card = user.card.lower()
|
||||
|
||||
rfid_str = '"%s"' % user.rfid
|
||||
if user.rfid == None:
|
||||
rfid_str = 'empty'
|
||||
user.rfid = self.input_str('RFID (currently %s)> ' % rfid_str,
|
||||
User.rfid_re, (0,10),
|
||||
empty_string_is_none=True)
|
||||
try:
|
||||
self.session.commit()
|
||||
print 'User %s stored' % user.name
|
||||
|
@ -699,9 +708,10 @@ class ShowUserMenu(Menu):
|
|||
|
||||
def _execute(self):
|
||||
self.print_header()
|
||||
user = self.input_user('User name or card number> ')
|
||||
user = self.input_user('User name, card number or RFID> ')
|
||||
print 'User name: %s' % user.name
|
||||
print 'Card number: %s' % user.card
|
||||
print 'RFID: %s' % user.rfid
|
||||
print 'Credit: %s kr' % user.credit
|
||||
selector = Selector('What do you want to know about %s?' % user.name,
|
||||
items=[('transactions', 'Everything (list of all transactions)'),
|
||||
|
|
6
ui.py
6
ui.py
|
@ -125,13 +125,13 @@ class ChargeMenu(SubMenu):
|
|||
self.textwindow.border()
|
||||
self.amountwindow.border()
|
||||
if self.marked == 0:
|
||||
self.textwindow.addstr(0,1, "[Username or card number]",curses.A_REVERSE)
|
||||
self.textwindow.addstr(0,1, "[Username, card number or RFID]",curses.A_REVERSE)
|
||||
self.amountwindow.addstr(0,1,"[Amount to be transferred]")
|
||||
elif self.marked == 1:
|
||||
self.textwindow.addstr(0,1, "[Username or card number]")
|
||||
self.textwindow.addstr(0,1, "[Username, card number or RFID]")
|
||||
self.amountwindow.addstr(0,1,"[Amount to be transferred]",curses.A_REVERSE)
|
||||
else:
|
||||
self.textwindow.addstr(0,1, "[Username or card number]")
|
||||
self.textwindow.addstr(0,1, "[Username, card number or RFID]")
|
||||
self.amountwindow.addstr(0,1,"[Amount to be transferred]")
|
||||
self.resultview.draw()
|
||||
self.textwindow.addstr(1,1,self.search_text)
|
||||
|
|
Loading…
Reference in New Issue