-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfeecc-user-manager.py
More file actions
111 lines (86 loc) · 3.44 KB
/
feecc-user-manager.py
File metadata and controls
111 lines (86 loc) · 3.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
import typing as tp
import typer
from tabulate import tabulate
from database import Employee, MongoDbWrapper
employees: tp.Dict[str, Employee] = {}
def get_employee_by_number() -> tp.Optional[Employee]:
employee_num: str = typer.prompt("Choose employee number from the table")
global employees
if employee_num in employees:
return employees[employee_num]
else:
typer.echo("No such employee in table")
def list_employees(db: MongoDbWrapper) -> None:
global employees
data = db.get_all_employees()
employees = {str(no): employee for no, employee in enumerate(data, start=1)}
employee_data = [
[no, employee.name, employee.position, employee.rfid_card_id]
for no, employee in enumerate(data, start=1)
]
employee_table = tabulate(employee_data, headers=["№", "Name", "Position", "RFID card"])
typer.echo("\n" + employee_table + "\n")
def add_employee(db: MongoDbWrapper) -> None:
employee = Employee(
name=typer.prompt("Full name"),
position=typer.prompt("Position"),
rfid_card_id=typer.prompt("RFID card ID"),
)
if typer.confirm("Add employee entry?"):
db.add_employee(employee)
typer.echo("Employee was added successfully. New table:")
list_employees(db)
else:
typer.echo("Employee add operation was cancelled.")
def delete_employee(db: MongoDbWrapper) -> None:
employee = get_employee_by_number()
if employee and typer.confirm(f"Remove employee {employee.name}?"):
db.remove_employee(employee)
typer.echo("Employee was deleted successfully. New table:")
list_employees(db)
else:
typer.echo("Employee remove operation was cancelled.")
def edit_employee(db: MongoDbWrapper) -> None:
old_employee = get_employee_by_number()
if not old_employee:
return
new_employee = Employee(
name=typer.prompt("Full name (press Enter to leave as is)", default=old_employee.name),
position=typer.prompt("Position (press Enter to leave as is)", default=old_employee.position),
rfid_card_id=typer.prompt("RFID card ID (press Enter to leave as is)", default=old_employee.rfid_card_id),
)
diff = f"""
The following changes will be applied:
{old_employee.name} -> {new_employee.name}
{old_employee.position} -> {new_employee.position}
{old_employee.rfid_card_id} -> {new_employee.rfid_card_id}
"""
typer.echo(diff)
if typer.confirm("Apply changes?"):
db.update_employee(old_employee, new_employee)
typer.echo("Employee data was updated successfully. New table:")
list_employees(db)
else:
typer.echo("Employee update operation was cancelled.")
def main() -> None:
mongo_connection_url = typer.prompt("MongoDB connection URI")
database = MongoDbWrapper(mongo_connection_url)
typer.echo("Current employee table:")
list_employees(database)
while True:
command: str = typer.prompt("Enter command from [list, add, delete, edit, exit]")
if command == "list":
list_employees(database)
elif command == "add":
add_employee(database)
elif command == "delete":
delete_employee(database)
elif command == "edit":
edit_employee(database)
elif command == "exit":
break
else:
typer.echo("Command not recognized")
typer.echo("Exiting")
if __name__ == "__main__":
typer.run(main)