diff --git a/conf.py b/conf.py index e597395..88eeeac 100644 --- a/conf.py +++ b/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 diff --git a/db.py b/db.py index ba1fedf..0c6b414 100644 --- a/db.py +++ b/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): diff --git a/helpers.py b/helpers.py index 156d5d9..d0c6abf 100644 --- a/helpers.py +++ b/helpers.py @@ -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: diff --git a/text_based.py b/text_based.py index 50451a3..3333960 100755 --- a/text_based.py +++ b/text_based.py @@ -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)'), diff --git a/ui.py b/ui.py index ce14fca..9886989 100644 --- a/ui.py +++ b/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)