worked on system, added member, advisor & admin management.
This commit is contained in:
parent
dac0fea952
commit
a55017b23d
5
main.py
5
main.py
@ -1,5 +1,6 @@
|
||||
from models.utils import DatabaseUtils
|
||||
from models.database import Database
|
||||
from services.search import Search
|
||||
from ui.input_menu import InputMenu, EMAIL_VALIDATOR
|
||||
from views.login_menu import LoginMenu
|
||||
|
||||
@ -7,10 +8,12 @@ def main():
|
||||
Database.init()
|
||||
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()
|
@ -45,7 +45,7 @@ class City:
|
||||
cur = self.connection.cursor()
|
||||
cur.execute("""
|
||||
UPDATE cities SET
|
||||
name = ?,
|
||||
name = ?
|
||||
WHERE id = ?
|
||||
""", (self.name, self.id))
|
||||
|
||||
@ -53,6 +53,13 @@ class City:
|
||||
cur.close()
|
||||
return True
|
||||
|
||||
def delete(self):
|
||||
cur = self.connection.cursor()
|
||||
cur.execute("""DELETE FROM logs WHERE id = ?""", (self.id))
|
||||
self.connection.commit()
|
||||
cur.close()
|
||||
return True
|
||||
|
||||
def _set_row_values(self, row):
|
||||
self.id = row[0]
|
||||
self.name = row[1]
|
@ -27,7 +27,7 @@ class Database:
|
||||
time TEXT,
|
||||
description TEXT,
|
||||
additional_information TEXT,
|
||||
suspicious BOOL
|
||||
suspicious BOOLEAN
|
||||
)
|
||||
""")
|
||||
cursor.close()
|
||||
@ -47,7 +47,8 @@ class Database:
|
||||
email TEXT,
|
||||
phone TEXT,
|
||||
password TEXT,
|
||||
role TEXT
|
||||
role TEXT,
|
||||
created TEXT
|
||||
)
|
||||
""")
|
||||
cursor.close()
|
||||
|
@ -43,7 +43,7 @@ class Log:
|
||||
date = ?,
|
||||
description = ?,
|
||||
additional_information = ?,
|
||||
suspicious = ?,
|
||||
suspicious = ?
|
||||
WHERE id = ?
|
||||
""", (self.firstname, self.lastname, self.zipcode, self.city_id, self.email, self.phone, self.password, self.role, self.id))
|
||||
|
||||
@ -51,6 +51,13 @@ class Log:
|
||||
cur.close()
|
||||
return True
|
||||
|
||||
def delete(self):
|
||||
cur = self.connection.cursor()
|
||||
cur.execute("""DELETE FROM logs WHERE id = ?""", (self.id))
|
||||
self.connection.commit()
|
||||
cur.close()
|
||||
return True
|
||||
|
||||
def _set_row_values(self, row):
|
||||
self.id = row[0]
|
||||
self.username = row[1]
|
||||
|
@ -1,5 +1,5 @@
|
||||
import sqlite3
|
||||
from models.database import Database
|
||||
from datetime import datetime
|
||||
|
||||
class User:
|
||||
def __init__(self, connection : sqlite3.Connection, id = None, username = None, firstname = None, lastname = None, address = None, zipcode = None, city_id = None, email = None, phone = None, password = None, role = None):
|
||||
@ -17,7 +17,7 @@ class User:
|
||||
self.role = role
|
||||
|
||||
def load_by_id(self):
|
||||
cur = Database.connection.cursor()
|
||||
cur = self.connection.cursor()
|
||||
row = cur.execute("SELECT * FROM users WHERE id = ?", (self.id,)).fetchone()
|
||||
|
||||
if row == None:
|
||||
@ -29,7 +29,7 @@ class User:
|
||||
return True
|
||||
|
||||
def load_by_username(self):
|
||||
cur = Database.connection.cursor()
|
||||
cur = self.connection.cursor()
|
||||
row = cur.execute("SELECT * FROM users WHERE username = ?", (self.username,)).fetchone()
|
||||
|
||||
if row == None:
|
||||
@ -41,18 +41,19 @@ class User:
|
||||
return True
|
||||
|
||||
def save(self):
|
||||
cur = Database.connection.cursor()
|
||||
cur = self.connection.cursor()
|
||||
current_date = datetime.now().strftime("%d/%m/%Y %H:%M:%S")
|
||||
cur.execute("""
|
||||
INSERT INTO users
|
||||
(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))
|
||||
(id, username, firstname, lastname, address, zipcode, city_id, email, phone, password, role, created) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
||||
""", (self.id, self.username, self.firstname, self.lastname, self.address, self.zipcode, self.city_id, self.email, self.phone, self.password, self.role, current_date))
|
||||
|
||||
Database.connection.commit()
|
||||
self.connection.commit()
|
||||
cur.close()
|
||||
return True
|
||||
|
||||
def update(self):
|
||||
cur = Database.connection.cursor()
|
||||
cur = self.connection.cursor()
|
||||
cur.execute("""
|
||||
UPDATE users SET
|
||||
username = ?,
|
||||
@ -64,14 +65,21 @@ class User:
|
||||
email = ?,
|
||||
phone = ?,
|
||||
password = ?,
|
||||
role = ?,
|
||||
WHERE id = ?
|
||||
""", (self.username, self.firstname, self.lastname, self.zipcode, self.city_id, self.email, self.phone, self.password, self.role, self.id))
|
||||
role = ?
|
||||
WHERE id = ?
|
||||
""", (self.username, self.firstname, self.lastname, self.address, self.zipcode, self.city_id, self.email, self.phone, self.password, self.role, self.id))
|
||||
|
||||
Database.connection.commit()
|
||||
self.connection.commit()
|
||||
cur.close()
|
||||
return True
|
||||
|
||||
def delete(self):
|
||||
cur = self.connection.cursor()
|
||||
cur.execute("""DELETE FROM users WHERE id = ?""", (self.id))
|
||||
self.connection.commit()
|
||||
cur.close()
|
||||
return True
|
||||
|
||||
def _set_row_values(self, row):
|
||||
self.id = row[0]
|
||||
self.username = row[1]
|
||||
@ -84,4 +92,5 @@ class User:
|
||||
self.phone = row[8]
|
||||
self.password = row[9]
|
||||
self.role = row[10]
|
||||
|
||||
self.created = row[11]
|
||||
return self
|
@ -3,6 +3,10 @@ from models.user import User
|
||||
|
||||
class Auth:
|
||||
def check_auth(username, password):
|
||||
if username == "superadmin" and password == "Admin321!":
|
||||
su_user = User(None, -1, "superadmin", "", "", "", "", "", "", "", "", "SUPER_ADMIN")
|
||||
return su_user
|
||||
|
||||
user = User(Database.connection, None, username)
|
||||
if user.load_by_username() and user.password == password:
|
||||
return user
|
||||
|
69
services/search.py
Normal file
69
services/search.py
Normal file
@ -0,0 +1,69 @@
|
||||
from models.database import Database
|
||||
from models.user import User
|
||||
|
||||
class Search:
|
||||
@staticmethod
|
||||
def search_members(query):
|
||||
cur = Database.connection.cursor()
|
||||
cur.execute("""
|
||||
SELECT * FROM users WHERE
|
||||
id LIKE ? OR
|
||||
username LIKE ? OR
|
||||
firstname LIKE ? OR
|
||||
lastname LIKE ? OR
|
||||
email LIKE ? OR
|
||||
phone LIKE ?
|
||||
""", (f"%{query}%", f"%{query}%", f"%{query}%", f"%{query}%", f"%{query}%", f"%{query}%"))
|
||||
rows = cur.fetchall()
|
||||
|
||||
payload = []
|
||||
for row in rows:
|
||||
user = User(Database.connection)._set_row_values(row)
|
||||
if user.role == "MEMBER":
|
||||
payload.append(user)
|
||||
|
||||
return payload
|
||||
|
||||
@staticmethod
|
||||
def search_advisors(query):
|
||||
cur = Database.connection.cursor()
|
||||
cur.execute("""
|
||||
SELECT * FROM users WHERE
|
||||
id LIKE ? OR
|
||||
username LIKE ? OR
|
||||
firstname LIKE ? OR
|
||||
lastname LIKE ? OR
|
||||
email LIKE ? OR
|
||||
phone LIKE ?
|
||||
""", (f"%{query}%", f"%{query}%", f"%{query}%", f"%{query}%", f"%{query}%", f"%{query}%"))
|
||||
rows = cur.fetchall()
|
||||
|
||||
payload = []
|
||||
for row in rows:
|
||||
user = User(Database.connection)._set_row_values(row)
|
||||
if user.role == "ADVISOR":
|
||||
payload.append(user)
|
||||
|
||||
return payload
|
||||
|
||||
@staticmethod
|
||||
def search_admins(query):
|
||||
cur = Database.connection.cursor()
|
||||
cur.execute("""
|
||||
SELECT * FROM users WHERE
|
||||
id LIKE ? OR
|
||||
username LIKE ? OR
|
||||
firstname LIKE ? OR
|
||||
lastname LIKE ? OR
|
||||
email LIKE ? OR
|
||||
phone LIKE ?
|
||||
""", (f"%{query}%", f"%{query}%", f"%{query}%", f"%{query}%", f"%{query}%", f"%{query}%"))
|
||||
rows = cur.fetchall()
|
||||
|
||||
payload = []
|
||||
for row in rows:
|
||||
user = User(Database.connection)._set_row_values(row)
|
||||
if user.role == "SYSTEM_ADMIN":
|
||||
payload.append(user)
|
||||
|
||||
return payload
|
7
services/utils.py
Normal file
7
services/utils.py
Normal file
@ -0,0 +1,7 @@
|
||||
|
||||
import os
|
||||
|
||||
class Utils:
|
||||
@staticmethod
|
||||
def clear_screen():
|
||||
os.system('cls' if os.name == 'nt' else 'clear')
|
@ -1,6 +1,38 @@
|
||||
from pickle import FALSE
|
||||
import re
|
||||
from models.database import Database
|
||||
from models.user import User
|
||||
|
||||
EMAIL_VALIDATOR = re.compile(r'([A-Za-z0-9]+[.-_])*[A-Za-z0-9]+@[A-Za-z0-9-]+(\.[A-Z|a-z]{2,})+')
|
||||
class Validator:
|
||||
@staticmethod
|
||||
def check_email(input):
|
||||
regex = re.compile(r'([A-Za-z0-9]+[.-_])*[A-Za-z0-9]+@[A-Za-z0-9-]+(\.[A-Z|a-z]{2,})+')
|
||||
return re.fullmatch(regex, input)
|
||||
|
||||
@staticmethod
|
||||
def check_username(input):
|
||||
if len(input) < 6 or len(input) > 10:
|
||||
return False
|
||||
|
||||
if not f"{input[0]}".isalpha():
|
||||
return False
|
||||
|
||||
regex = re.compile(r'^[0-9A-Za-z_.-]+$')
|
||||
if not re.fullmatch(regex, input):
|
||||
return False
|
||||
|
||||
user = User(Database.connection, None, input)
|
||||
user.load_by_username()
|
||||
|
||||
if user.id != None:
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
@staticmethod
|
||||
def check_password(input):
|
||||
regex = re.compile(r'^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\d@$!%*#?&]{8,31}$')
|
||||
return re.fullmatch(regex, input)
|
||||
|
||||
class InputMenu:
|
||||
|
||||
@ -38,7 +70,7 @@ class InputMenu:
|
||||
|
||||
# Check regex validator id used
|
||||
if self._fields[i]['validator'] != None:
|
||||
if re.fullmatch(self._fields[i]['validator'], data):
|
||||
if self._fields[i]['validator'](data):
|
||||
# Set value of current field
|
||||
self._fields[i]['value'] = data
|
||||
break
|
||||
@ -64,7 +96,7 @@ class InputMenu:
|
||||
try:
|
||||
num = int(data)
|
||||
if num >= self._fields[i]['min'] and num <= self._fields[i]['max']:
|
||||
self._fields[i]['value'] = data
|
||||
self._fields[i]['value'] = num
|
||||
break
|
||||
else:
|
||||
print("| Invalid input! Try again. \n|")
|
||||
|
121
views/advisor_menu.py
Normal file
121
views/advisor_menu.py
Normal file
@ -0,0 +1,121 @@
|
||||
|
||||
from click import edit
|
||||
from models.database import Database
|
||||
from models.user import User
|
||||
from services.search import Search
|
||||
from ui.input_menu import InputMenu, Validator
|
||||
from ui.selection_menu import SelectionMenu
|
||||
|
||||
|
||||
class AdvisorMenu:
|
||||
@staticmethod
|
||||
def search_advisor(browse_mode):
|
||||
form = InputMenu("Search for Advisors")
|
||||
form.add_option("QUERY", "Query", "STR", None, 1, 250, None)
|
||||
form.do_input()
|
||||
query = form.get_value("QUERY")
|
||||
|
||||
users = Search.search_advisors(query)
|
||||
|
||||
if len(users) == 0:
|
||||
input(f"No Advisors found with query: {query}. Press any key to continue.")
|
||||
return None
|
||||
|
||||
for index, user in enumerate(users):
|
||||
print(f"/--[{index}]--------------")
|
||||
print(f"| Username: {user.username}")
|
||||
print(f"| Firstname: {user.firstname}")
|
||||
print(f"| Lastname: {user.lastname}")
|
||||
print(f"| Address: {user.lastname}")
|
||||
print(f"| Zipcode: {user.zipcode}")
|
||||
print(f"| City: {user.city_id}")
|
||||
print(f"| Email: {user.email}")
|
||||
print(f"| Phone: {user.phone}")
|
||||
print(f"\--------------------\n")
|
||||
|
||||
if browse_mode:
|
||||
input(f"\nPress any key to continue.")
|
||||
return None
|
||||
|
||||
select_form = InputMenu("Select Advisor by index")
|
||||
select_form.add_option("INDEX", "Index", "INT", None, 0, len(users) - 1, None)
|
||||
select_form.do_input()
|
||||
|
||||
return users[select_form.get_value("INDEX")]
|
||||
|
||||
|
||||
@staticmethod
|
||||
def add_advisor():
|
||||
form = InputMenu("Add new Advisor")
|
||||
form.add_option("USERNAME", "Username", "STR", None, 1, 250, Validator.check_username)
|
||||
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, Validator.check_email)
|
||||
form.add_option("PHONE", "Phone (+31-6)", "STR", None, 8, 8, None)
|
||||
form.add_option("PASSWORD", "Password", "STR", None, 1, 255, Validator.check_password)
|
||||
form.do_input()
|
||||
|
||||
new_user = User(Database.connection,
|
||||
None,
|
||||
form.get_value("USERNAME"),
|
||||
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"),
|
||||
form.get_value("PASSWORD"),
|
||||
"ADVISOR"
|
||||
)
|
||||
|
||||
new_user.save()
|
||||
input("Added new Advisor! Press any key to return.")
|
||||
|
||||
@staticmethod
|
||||
def edit_advisor():
|
||||
user = AdvisorMenu.search_advisor(False)
|
||||
|
||||
edit_form = InputMenu("Edit Advisor (Leave fields empty to not change)")
|
||||
edit_form.add_option("USERNAME", "Username", "STR", user.username, 1, 250, Validator.check_username)
|
||||
edit_form.add_option("FIRSTNAME", "Firstname", "STR", user.firstname, 1, 250, None)
|
||||
edit_form.add_option("LASTNAME", "Lastname", "STR", user.lastname, 1, 250, None)
|
||||
edit_form.add_option("ADDRESS", "Address", "STR", user.address, 1, 250, None)
|
||||
edit_form.add_option("ZIPCODE", "Zipcode", "STR", user.zipcode, 6, 6, None)
|
||||
edit_form.add_option("CITY_ID", "City", "STR", user.city_id, 1, 250, None)
|
||||
edit_form.add_option("EMAIL", "Email", "STR", user.email, 1, 250, Validator.check_email)
|
||||
edit_form.add_option("PHONE", "Phone (+31-6)", "STR", user.phone, 8, 8, None)
|
||||
edit_form.add_option("PASSWORD", "Password", "STR", user.phone, 1, 255, Validator.check_password)
|
||||
edit_form.do_input()
|
||||
|
||||
user.username = edit_form.get_value("USERNAME")
|
||||
user.firstname = edit_form.get_value("FIRSTNAME")
|
||||
user.lastname = edit_form.get_value("LASTNAME")
|
||||
user.address = edit_form.get_value("ADDRESS")
|
||||
user.zipcode = edit_form.get_value("ZIPCODE")
|
||||
user.city_id = edit_form.get_value("CITY_ID")
|
||||
user.email = edit_form.get_value("EMAIL")
|
||||
user.phone = edit_form.get_value("PHONE")
|
||||
user.password = edit_form.get_value("PASSWORD")
|
||||
|
||||
user.update()
|
||||
input("Updated Advisor! Press any key to return.")
|
||||
|
||||
@staticmethod
|
||||
def remove_advisor():
|
||||
user = AdvisorMenu.search_advisor(False)
|
||||
|
||||
confirm = SelectionMenu("Do you want to delete selected Advisor?")
|
||||
confirm.add_option("Yes", True).add_option("No", False).display()
|
||||
option = confirm.input_option()
|
||||
|
||||
if option == True:
|
||||
user.delete()
|
||||
input("Deleted Advisor! Press any key to return.")
|
||||
|
||||
@staticmethod
|
||||
def browse_advisor():
|
||||
AdvisorMenu.search_member(True)
|
@ -1,5 +1,6 @@
|
||||
from time import sleep
|
||||
from services.auth import Auth
|
||||
from services.utils import Utils
|
||||
from ui.input_menu import InputMenu
|
||||
from services.state import State
|
||||
from views.main_menu import MainMenu
|
||||
@ -9,9 +10,9 @@ class LoginMenu:
|
||||
@staticmethod
|
||||
def display():
|
||||
while True:
|
||||
os.system("clear")
|
||||
Utils.clear_screen()
|
||||
login_form = InputMenu("Login Into Furnicur Family System")
|
||||
login_form.add_option("USERNAME", "Username", "STR", "frozen", 1, 250, None).add_option("PASSWORD", "Password", "STR", "admin", 1, 250, None).do_input()
|
||||
login_form.add_option("USERNAME", "Username", "STR", "superadmin", 1, 250, None).add_option("PASSWORD", "Password", "STR", "Admin321!", 1, 250, None).do_input()
|
||||
|
||||
user = Auth.check_auth(login_form.get_value("USERNAME"), login_form.get_value("PASSWORD"))
|
||||
if user:
|
||||
|
@ -1,21 +1,28 @@
|
||||
import os
|
||||
from services.state import State
|
||||
from services.utils import Utils
|
||||
from ui.selection_menu import SelectionMenu
|
||||
from views.member_menu import MemberMenu
|
||||
from views.system_admin_menu import SystemAdminMenu
|
||||
|
||||
class MainMenu:
|
||||
@staticmethod
|
||||
def display():
|
||||
while True:
|
||||
os.system("clear")
|
||||
Utils.clear_screen()
|
||||
main_menu = SelectionMenu(f"Welcome {State.CURRENT_USER.username}!")
|
||||
|
||||
if State.CURRENT_USER.role == "ADVISOR" or State.CURRENT_USER.role == "SYSTEM_ADMIN":
|
||||
main_menu.add_option("Update My Password", None)
|
||||
main_menu.add_option("Manage Members", MainMenu.manage_members)
|
||||
else:
|
||||
main_menu.add_option("Manage Members", MainMenu.manage_members)
|
||||
|
||||
if State.CURRENT_USER.role == "SYSTEM_ADMIN" and State.CURRENT_USER.role == "SUPER_ADMIN":
|
||||
main_menu.add_option("Manage Advisors", None)
|
||||
if State.CURRENT_USER.role == "SYSTEM_ADMIN" or State.CURRENT_USER.role == "SUPER_ADMIN":
|
||||
main_menu.add_option("Manage Advisors", MainMenu.manage_advisors)
|
||||
|
||||
if State.CURRENT_USER.role == "SUPER_ADMIN":
|
||||
main_menu.add_option("Manage Admins", MainMenu.manage_admins)
|
||||
|
||||
main_menu.add_option("Exit...", None)
|
||||
|
||||
@ -27,12 +34,47 @@ class MainMenu:
|
||||
|
||||
@staticmethod
|
||||
def manage_members():
|
||||
os.system("clear")
|
||||
Utils.clear_screen()
|
||||
|
||||
menu = SelectionMenu(f"Manage Members")
|
||||
menu.add_option("Add Member", MemberMenu.add_member)
|
||||
menu.add_option("Edit Member", MemberMenu.edit_member)
|
||||
menu.add_option("Remove Member", MemberMenu.remove_member)
|
||||
menu.add_option("Browse Member", MemberMenu.browse_member)
|
||||
menu.add_option("Back to main menu", None)
|
||||
|
||||
selected_option = menu.display().input_option()
|
||||
if selected_option == None:
|
||||
return
|
||||
|
||||
selected_option()
|
||||
|
||||
@staticmethod
|
||||
def manage_advisors():
|
||||
Utils.clear_screen()
|
||||
|
||||
menu = SelectionMenu(f"Manage Advisors")
|
||||
menu.add_option("Add Advisor", MemberMenu.add_member)
|
||||
menu.add_option("Edit Advisor", MemberMenu.edit_member)
|
||||
menu.add_option("Remove Advisor", MemberMenu.remove_member)
|
||||
menu.add_option("Browse Advisor", MemberMenu.browse_member)
|
||||
menu.add_option("Back to main menu", None)
|
||||
|
||||
selected_option = menu.display().input_option()
|
||||
if selected_option == None:
|
||||
return
|
||||
|
||||
selected_option()
|
||||
|
||||
@staticmethod
|
||||
def manage_admins():
|
||||
Utils.clear_screen()
|
||||
|
||||
menu = SelectionMenu(f"Manage System Admins")
|
||||
menu.add_option("Add System Admin", SystemAdminMenu.add_admin)
|
||||
menu.add_option("Edit System Admin", SystemAdminMenu.edit_admin)
|
||||
menu.add_option("Remove System Admin", SystemAdminMenu.remove_admin)
|
||||
menu.add_option("Browse System Admin", SystemAdminMenu.browse_admins)
|
||||
menu.add_option("Back to main menu", None)
|
||||
|
||||
selected_option = menu.display().input_option()
|
||||
|
@ -1,18 +1,52 @@
|
||||
|
||||
from click import edit
|
||||
from models.database import Database
|
||||
from models.user import User
|
||||
from services.search import Search
|
||||
from ui.input_menu import InputMenu, EMAIL_VALIDATOR
|
||||
from ui.selection_menu import SelectionMenu
|
||||
|
||||
|
||||
class MemberMenu:
|
||||
@staticmethod
|
||||
def search_member():
|
||||
form = InputMenu("Search for member")
|
||||
def search_member(browse_mode):
|
||||
form = InputMenu("Search for Member")
|
||||
form.add_option("QUERY", "Query", "STR", None, 1, 250, None)
|
||||
form.do_input()
|
||||
query = form.get_value("QUERY")
|
||||
|
||||
users = Search.search_members(query)
|
||||
|
||||
if len(users) == 0:
|
||||
input(f"No Members found with query: {query}. Press any key to continue.")
|
||||
return None
|
||||
|
||||
for index, user in enumerate(users):
|
||||
print(f"/--[{index}]--------------")
|
||||
print(f"| Username: {user.username}")
|
||||
print(f"| Firstname: {user.firstname}")
|
||||
print(f"| Lastname: {user.lastname}")
|
||||
print(f"| Address: {user.lastname}")
|
||||
print(f"| Zipcode: {user.zipcode}")
|
||||
print(f"| City: {user.city_id}")
|
||||
print(f"| Email: {user.email}")
|
||||
print(f"| Phone: {user.phone}")
|
||||
print(f"\--------------------\n")
|
||||
|
||||
if browse_mode:
|
||||
input(f"\nPress any key to continue.")
|
||||
return None
|
||||
|
||||
select_form = InputMenu("Select Member by index")
|
||||
select_form.add_option("INDEX", "Index", "INT", None, 0, len(users) - 1, None)
|
||||
select_form.do_input()
|
||||
|
||||
return users[select_form.get_value("INDEX")]
|
||||
|
||||
|
||||
@staticmethod
|
||||
def add_member():
|
||||
form = InputMenu("Add new 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)
|
||||
@ -37,12 +71,45 @@ class MemberMenu:
|
||||
)
|
||||
|
||||
new_user.save()
|
||||
input("Added new member! Press any key to return.")
|
||||
input("Added new Member! Press any key to return.")
|
||||
|
||||
@staticmethod
|
||||
def edit_member():
|
||||
pass
|
||||
user = MemberMenu.search_member(False)
|
||||
|
||||
edit_form = InputMenu("Edit Member (Leave fields empty to not change)")
|
||||
edit_form.add_option("FIRSTNAME", "Firstname", "STR", user.firstname, 1, 250, None)
|
||||
edit_form.add_option("LASTNAME", "Lastname", "STR", user.lastname, 1, 250, None)
|
||||
edit_form.add_option("ADDRESS", "Address", "STR", user.address, 1, 250, None)
|
||||
edit_form.add_option("ZIPCODE", "Zipcode", "STR", user.zipcode, 6, 6, None)
|
||||
edit_form.add_option("CITY_ID", "City", "STR", user.city_id, 1, 250, None)
|
||||
edit_form.add_option("EMAIL", "Email", "STR", user.email, 1, 250, EMAIL_VALIDATOR)
|
||||
edit_form.add_option("PHONE", "Phone (+31-6)", "STR", user.phone, 8, 8, None)
|
||||
edit_form.do_input()
|
||||
|
||||
user.firstname = edit_form.get_value("FIRSTNAME")
|
||||
user.lastname = edit_form.get_value("LASTNAME")
|
||||
user.address = edit_form.get_value("ADDRESS")
|
||||
user.zipcode = edit_form.get_value("ZIPCODE")
|
||||
user.city_id = edit_form.get_value("CITY_ID")
|
||||
user.email = edit_form.get_value("EMAIL")
|
||||
user.phone = edit_form.get_value("PHONE")
|
||||
|
||||
user.update()
|
||||
input("Updated Member! Press any key to return.")
|
||||
|
||||
@staticmethod
|
||||
def remove_member():
|
||||
pass
|
||||
user = MemberMenu.search_member(False)
|
||||
|
||||
confirm = SelectionMenu("Do you want to delete selected Member?")
|
||||
confirm.add_option("Yes", True).add_option("No", False).display()
|
||||
option = confirm.input_option()
|
||||
|
||||
if option == True:
|
||||
user.delete()
|
||||
input("Deleted Member! Press any key to return.")
|
||||
|
||||
@staticmethod
|
||||
def browse_member():
|
||||
MemberMenu.search_member(True)
|
||||
|
@ -1,4 +1,121 @@
|
||||
|
||||
from click import edit
|
||||
from models.database import Database
|
||||
from models.user import User
|
||||
from services.search import Search
|
||||
from ui.input_menu import InputMenu, Validator
|
||||
from ui.selection_menu import SelectionMenu
|
||||
|
||||
|
||||
class SystemAdminMenu:
|
||||
@staticmethod
|
||||
def display():
|
||||
pass
|
||||
def search_admins(browse_mode):
|
||||
form = InputMenu("Search for System Admins")
|
||||
form.add_option("QUERY", "Query", "STR", None, 1, 250, None)
|
||||
form.do_input()
|
||||
query = form.get_value("QUERY")
|
||||
|
||||
users = Search.search_admins(query)
|
||||
|
||||
if len(users) == 0:
|
||||
input(f"No System Admins found with query: {query}. Press any key to continue.")
|
||||
return None
|
||||
|
||||
for index, user in enumerate(users):
|
||||
print(f"/--[{index}]--------------")
|
||||
print(f"| Username: {user.username}")
|
||||
print(f"| Firstname: {user.firstname}")
|
||||
print(f"| Lastname: {user.lastname}")
|
||||
print(f"| Address: {user.lastname}")
|
||||
print(f"| Zipcode: {user.zipcode}")
|
||||
print(f"| City: {user.city_id}")
|
||||
print(f"| Email: {user.email}")
|
||||
print(f"| Phone: {user.phone}")
|
||||
print(f"\--------------------\n")
|
||||
|
||||
if browse_mode:
|
||||
input(f"\nPress any key to continue.")
|
||||
return None
|
||||
|
||||
select_form = InputMenu("Select System Admin by index")
|
||||
select_form.add_option("INDEX", "Index", "INT", None, 0, len(users) - 1, None)
|
||||
select_form.do_input()
|
||||
|
||||
return users[select_form.get_value("INDEX")]
|
||||
|
||||
|
||||
@staticmethod
|
||||
def add_admin():
|
||||
form = InputMenu("Add new System Admin")
|
||||
form.add_option("USERNAME", "Username", "STR", None, 1, 250, Validator.check_username)
|
||||
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, Validator.check_email)
|
||||
form.add_option("PHONE", "Phone (+31-6)", "STR", None, 8, 8, None)
|
||||
form.add_option("PASSWORD", "Password", "STR", None, 1, 255, Validator.check_password)
|
||||
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"),
|
||||
form.get_value("PASSWORD"),
|
||||
"SYSTEM_ADMIN"
|
||||
)
|
||||
|
||||
new_user.save()
|
||||
input("Added new system admin! Press any key to return.")
|
||||
|
||||
@staticmethod
|
||||
def edit_admin():
|
||||
user = SystemAdminMenu.search_admins(False)
|
||||
|
||||
edit_form = InputMenu("Edit System Admin (Leave fields empty to not change)")
|
||||
edit_form.add_option("Username", "Username", "STR", user.username, 1, 250, Validator.check_username)
|
||||
edit_form.add_option("FIRSTNAME", "Firstname", "STR", user.firstname, 1, 250, None)
|
||||
edit_form.add_option("LASTNAME", "Lastname", "STR", user.lastname, 1, 250, None)
|
||||
edit_form.add_option("ADDRESS", "Address", "STR", user.address, 1, 250, None)
|
||||
edit_form.add_option("ZIPCODE", "Zipcode", "STR", user.zipcode, 6, 6, None)
|
||||
edit_form.add_option("CITY_ID", "City", "STR", user.city_id, 1, 250, None)
|
||||
edit_form.add_option("EMAIL", "Email", "STR", user.email, 1, 250, Validator.check_email)
|
||||
edit_form.add_option("PHONE", "Phone (+31-6)", "STR", user.phone, 8, 8, None)
|
||||
edit_form.add_option("PASSWORD", "Password", "STR", user.phone, 1, 255, Validator.check_password)
|
||||
edit_form.do_input()
|
||||
|
||||
user.username = edit_form.get_value("USERNAME")
|
||||
user.firstname = edit_form.get_value("FIRSTNAME")
|
||||
user.lastname = edit_form.get_value("LASTNAME")
|
||||
user.address = edit_form.get_value("ADDRESS")
|
||||
user.zipcode = edit_form.get_value("ZIPCODE")
|
||||
user.city_id = edit_form.get_value("CITY_ID")
|
||||
user.email = edit_form.get_value("EMAIL")
|
||||
user.phone = edit_form.get_value("PHONE")
|
||||
user.password = edit_form.get_value("PASSWORD")
|
||||
|
||||
user.update()
|
||||
input("Updated System Admin! Press any key to return.")
|
||||
|
||||
@staticmethod
|
||||
def remove_admin():
|
||||
user = SystemAdminMenu.search_admins(False)
|
||||
|
||||
confirm = SelectionMenu("Do you want to delete selected system admin?")
|
||||
confirm.add_option("Yes", True).add_option("No", False).display()
|
||||
option = confirm.input_option()
|
||||
|
||||
if option == True:
|
||||
user.delete()
|
||||
input("Deleted advisor! Press any key to return.")
|
||||
|
||||
@staticmethod
|
||||
def browse_admins():
|
||||
SystemAdminMenu.search_admins(True)
|
||||
|
Loading…
x
Reference in New Issue
Block a user