diff --git a/main.py b/main.py index efc2b8a..60e5b15 100644 --- a/main.py +++ b/main.py @@ -1,5 +1,6 @@ from models.utils import DatabaseUtils from models.database import Database +from ui.input_menu import InputMenu, EMAIL_VALIDATOR from views.login_menu import LoginMenu def main(): @@ -7,4 +8,9 @@ def main(): DatabaseUtils.init_city_data() LoginMenu.display() + # test = InputMenu("test") + # test.add_option("EMAIL", "email", "STR", "nick.leeman@hotmail.com", 0, 40, EMAIL_VALIDATOR) + # test.do_input() + # print(test.get_value("EMAIL")) + main() \ No newline at end of file diff --git a/models/user.py b/models/user.py index 2b67f82..abd0f38 100644 --- a/models/user.py +++ b/models/user.py @@ -44,8 +44,8 @@ class User: cur = Database.connection.cursor() cur.execute(""" INSERT INTO users - (id, username, fistname, lastname, address, zipcode, city_id, email, phone, password, role) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) - """, (self.id, self.username, self.firstname, self.lastname, self.zipcode, self.city_id, self.email, self.phone, self.password, self.role)) + (id, username, firstname, lastname, address, zipcode, city_id, email, phone, password, role) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + """, (self.id, self.username, self.firstname, self.lastname, self.address, self.zipcode, self.city_id, self.email, self.phone, self.password, self.role)) Database.connection.commit() cur.close() @@ -56,7 +56,7 @@ class User: cur.execute(""" UPDATE users SET username = ?, - fistname = ?, + firstname = ?, lastname = ?, address = ?, zipcode = ?, diff --git a/ui/input_menu.py b/ui/input_menu.py index e6520ad..7054afc 100644 --- a/ui/input_menu.py +++ b/ui/input_menu.py @@ -1,3 +1,6 @@ +import re + +EMAIL_VALIDATOR = re.compile(r'([A-Za-z0-9]+[.-_])*[A-Za-z0-9]+@[A-Za-z0-9-]+(\.[A-Z|a-z]{2,})+') class InputMenu: @@ -5,8 +8,8 @@ class InputMenu: self._title = title self._fields = [] - def add_option(self, key, type, title, min, max): - self._fields.append({"key": key, "title": title, "type": type, "value": None, "min": min, "max": max}) + def add_option(self, key, title, type, value, min, max, validator): + self._fields.append({"key": key, "title": title, "type": type, "value": value, "min": min, "max": max, "validator": validator}) return self def do_input(self): @@ -17,18 +20,50 @@ class InputMenu: data = None while True: - data = input(f"| ({self._fields[i]['title']}) => ") + data = "" + + if self._fields[i]['value'] == None: + data = input(f"| ({self._fields[i]['title']}) => ") + else: + data = input(f"| ({self._fields[i]['title']}) [{self._fields[i]['value']}] => ") + if self._fields[i]['type'] == "STR": - if len(data) > self._fields[i]['min'] and len(data) <= self._fields[i]['max']: + + # Check if value was preset and entered value was not changed + if self._fields[i]['value'] != None and data == "": + break + + # Check length + if len(data) >= self._fields[i]['min'] and len(data) <= self._fields[i]['max']: + + # Check regex validator id used + if self._fields[i]['validator'] != None: + if re.fullmatch(self._fields[i]['validator'], data): + # Set value of current field + self._fields[i]['value'] = data + break + else: + print("| Invalid input! Try again. \n|") + continue + + # Set value of current field self._fields[i]['value'] = data break - else: - print("| Invalid input! Try again. \n|") + + + print("| Invalid input! Try again. \n|") + continue elif self._fields[i]['type'] == "INT": + + # Check if value was preset and entered value was not changed + if self._fields[i]['value'] != None and data == "": + break + + # Try and parse string into int, set value if no errors occur try: num = int(data) - if num > self._fields[i]['min'] and num <= self._fields[i]['max']: + if num >= self._fields[i]['min'] and num <= self._fields[i]['max']: self._fields[i]['value'] = data break else: diff --git a/views/login_menu.py b/views/login_menu.py index ed4320f..88ae981 100644 --- a/views/login_menu.py +++ b/views/login_menu.py @@ -11,7 +11,7 @@ class LoginMenu: while True: os.system("clear") login_form = InputMenu("Login Into Furnicur Family System") - login_form.add_option("USERNAME", "STR", "Username", 1, 250).add_option("PASSWORD", "STR", "Password", 1, 250).do_input() + login_form.add_option("USERNAME", "Username", "STR", "frozen", 1, 250, None).add_option("PASSWORD", "Password", "STR", "admin", 1, 250, None).do_input() user = Auth.check_auth(login_form.get_value("USERNAME"), login_form.get_value("PASSWORD")) if user: diff --git a/views/member_menu.py b/views/member_menu.py index 7dd84b9..0800141 100644 --- a/views/member_menu.py +++ b/views/member_menu.py @@ -1,22 +1,43 @@ -from ui.input_menu import InputMenu +from models.database import Database +from models.user import User +from ui.input_menu import InputMenu, EMAIL_VALIDATOR class MemberMenu: @staticmethod - def add_member(): - menu = InputMenu() - menu.add_option("USERNAME", "STR", "Username", 1, 250) - menu.add_option("FIRSTNAME", "STR", "Firstname", 1, 250) - menu.add_option("LASTNAME", "STR", "Lastname", 1, 250) - menu.add_option("ADDRESS", "STR", "Address", 1, 250) - menu.add_option("ZIPCODE", "STR", "Zipcode", 1, 250) - menu.add_option("CITY_ID", "STR", "City", 1, 250) - menu.add_option("EMAIL", "STR", "Email", 1, 250) - menu.add_option("PHONE", "STR", "Phone", 1, 250) - menu.add_option("PASSWORD", "STR", "Password", 1, 250) + def search_member(): + form = InputMenu("Search for member") + form.add_option("QUERY", "Query", "STR", None, 1, 250, None) - pass + @staticmethod + def add_member(): + form = InputMenu("Add new member") + form.add_option("FIRSTNAME", "Firstname", "STR", None, 1, 250, None) + form.add_option("LASTNAME", "Lastname", "STR", None, 1, 250, None) + form.add_option("ADDRESS", "Address", "STR", None, 1, 250, None) + form.add_option("ZIPCODE", "Zipcode", "STR", None, 6, 6, None) + form.add_option("CITY_ID", "City", "STR", None, 1, 250, None) + form.add_option("EMAIL", "Email", "STR", None, 1, 250, EMAIL_VALIDATOR) + form.add_option("PHONE", "Phone (+31-6)", "STR", None, 8, 8, None) + form.do_input() + + new_user = User(Database.connection, + None, + "", + form.get_value("FIRSTNAME"), + form.get_value("LASTNAME"), + form.get_value("ADDRESS"), + form.get_value("ZIPCODE"), + form.get_value("CITY_ID"), + form.get_value("EMAIL"), + "+31-6" + form.get_value("PHONE"), + "", + "MEMBER" + ) + + new_user.save() + input("Added new member! Press any key to return.") @staticmethod def edit_member():