From 3564b44b5d7f5b523e3056c23e8cc03a00474e9f Mon Sep 17 00:00:00 2001 From: nathan <nathan9.baker@live.uwe.ac.uk> Date: Mon, 4 Nov 2024 16:48:54 +0000 Subject: [PATCH] setup user permission levels --- Diagrams/Class_Diagram.asta | Bin 12994 -> 13018 bytes GUI.py | 14 ++++-- main.py | 38 +++++++++++--- src/__init__.py | 2 +- src/__pycache__/__init__.cpython-313.pyc | Bin 0 -> 342 bytes src/__pycache__/adminUser.cpython-313.pyc | Bin 0 -> 926 bytes src/__pycache__/staffUser.cpython-313.pyc | Bin 0 -> 2078 bytes src/adminUser.py | 15 ++++-- src/cinemaObj.py | 5 +- dbfunc.py => src/dbfunc.py | 3 +- src/filmObj.py | 11 +++- src/managerUser.py | 9 ++-- src/reciptObj.py | 5 +- src/reportObj.py | 5 +- src/staffUser.py | 58 ++++++++++++++-------- src/userClass.py | 30 ----------- 16 files changed, 116 insertions(+), 79 deletions(-) create mode 100644 src/__pycache__/__init__.cpython-313.pyc create mode 100644 src/__pycache__/adminUser.cpython-313.pyc create mode 100644 src/__pycache__/staffUser.cpython-313.pyc rename dbfunc.py => src/dbfunc.py (93%) delete mode 100644 src/userClass.py diff --git a/Diagrams/Class_Diagram.asta b/Diagrams/Class_Diagram.asta index 30b621abdd575ea99de2c6a14af8055852341808..380f0f83d9eaacf79b268d7bc5aadb7e68d78f3d 100644 GIT binary patch literal 13018 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 AS^xk5 literal 12994 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 V-mGjOX+{P{21^D8hGHWS4*=!5B~$<a diff --git a/GUI.py b/GUI.py index c555654..8707a97 100644 --- a/GUI.py +++ b/GUI.py @@ -49,16 +49,20 @@ def apply_theme(): theme_toggle_button.configure(bg=current_theme["button_bg"], fg=current_theme["button_fg"]) # Handle login action -def login(): +def gui_login(): username = username_entry.get() password = password_entry.get() # check form not empty if not username or not password: messagebox.showwarning("Warning", "Please fill in both fields.") - else: - + # escape function + else: # remove else and message box when login function is finished. messagebox.showinfo("Login", "Login successful!") - + # function call "loginAttempt()" from main.py + user = loginAttempt(username=username, password=password) + if user == None: + # escape function + pass # Make rows and columns in the main window expand to center the form frame window.grid_rowconfigure(0, weight=1) @@ -76,7 +80,7 @@ username_label = Label(form_frame, text="Username", fg=current_theme["fg"], bg=c username_entry = Entry(form_frame, width=25, bg=current_theme["entry_bg"], fg=current_theme["entry_fg"]) password_label = Label(form_frame, text="Password", fg=current_theme["fg"], bg=current_theme["bg"]) password_entry = Entry(form_frame, show="*", width=25, bg=current_theme["entry_bg"], fg=current_theme["entry_fg"]) -login_button = Button(form_frame, text="Login", command=login, bg=current_theme["button_bg"], fg=current_theme["button_fg"], width=20) +login_button = Button(form_frame, text="Login", command=gui_login, bg=current_theme["button_bg"], fg=current_theme["button_fg"], width=20) # Button for Light/Dark Mode theme_toggle_button = Button(form_frame, text="Toggle Light/Dark Mode", command=toggle_theme, diff --git a/main.py b/main.py index 905ec35..fce1bf1 100644 --- a/main.py +++ b/main.py @@ -1,9 +1,11 @@ from src import * -""" -_summary_ +"""_summary_ + - logic should be seprate from the GUI - this file handles interfacing with the database and classes. +- most functionalisty should also be here +- using main() as a test function during development, and after can be used as a CLI version of the program. 'idealy there should be a sort of intermeditary between the GUI and database, for example last year most groups queried the database directly from tkintet, although thats not ideal.' - lecturer idk there name 'you should be able to make python classes directly from your class diagram' - same lecturer @@ -11,15 +13,39 @@ _summary_ """ +def loginAttempt(username, password): + """_summary_ + quereies database for matching args + returns user(staff, admin or manager) obj if found + else returns None type. + + Args: + username (_type_): _description_ + password (_type_): _description_ + Returns: + staffUser: _description_ + """ + pass +def logout(): + pass -def main() -> None: - pass +def main() -> None: + print("\n\nSTARTING CINEMA MANAGEMENT SYSTEM.\n\n\n\n") + user = None + while user == None: + username = str(input("To login please enter your\nUsername: ")) + password = str(input("Password: ")) + user = loginAttempt(username=username, password=password) + if user == None: + print("Login attempt failed please try again.") + # load options and so on... + +# following code will only execute if run directly from this file. if __name__ == "__main__": - #main() - pass \ No newline at end of file + main() \ No newline at end of file diff --git a/src/__init__.py b/src/__init__.py index 57bcd32..efd2456 100644 --- a/src/__init__.py +++ b/src/__init__.py @@ -4,4 +4,4 @@ from managerUser import * from reciptObj import * from reportObj import * from staffUser import * -from userClass import * \ No newline at end of file +from dbfunc import * \ No newline at end of file diff --git a/src/__pycache__/__init__.cpython-313.pyc b/src/__pycache__/__init__.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cc87ac7651bfc8be0e261670e1255aba41e5de0a GIT binary patch literal 342 zcmey&%ge>Uz`$ViK_h({0|Ucj5C?{tpp4HB3=9lY8G;#t8NC_InG_%_MmUQJ&SHkM zSl}#H5G$QYlldjcI8DY|j9Px0Y_~WQQ*tx&LW@(2ZgD1O=B4H)`X^=G;?7OXOH5BK zf`}KTCTA9ufW$eAQVa5nAk5;D#I!V!f|U%PK}Oz+Nw$gs@rz^p@=GG~EAwOg^HN=k zGRsmGbQMCwT@{>)GK)*{b7EXli?d7e3t}Qu6N?m#VjP2AViHrz67!N%Q*?{-(@M${ zi&A5Xi;`pF<1_OzOXB183My}L*yQG?l;)(`74b4KFfcMOFcgb3Ffe>zW@Kc%!ypbu Ql3-H&E`xXxHv<C$09f2!E&u=k literal 0 HcmV?d00001 diff --git a/src/__pycache__/adminUser.cpython-313.pyc b/src/__pycache__/adminUser.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cfa2383e4b7d9e1132db9e1fcef7eed32ae52aee GIT binary patch literal 926 zcmey&%ge>Uz`(HOr$+izMh1q*APx+(LK&Zv7#J9)G6XXOGkP-=F-R~dF$6P7F$6Qm zFa$9{)gV!(%n(iyQw(!3i&X>zL!tl!LkyD=gDFIUp@=1hRf!>n#gq{upumvMn9iul z`Vz$TO9qiJ3^V_;4g&*29K%$G7=|LoV1^>5V8$ZmV5TCLPzDpmU}h<XERG`9V3s1b zPzGDZB6bx9P1akSjw!jBd7;IrMK3{4sxpr+F3rtNEUJv>;&LoXFSg=RP*6}PE=f#F z11VC_h%c!uNR8LDQixAUElw`VEGWs$&x_|uhB_1MCXh)W{Mmqkfx(V(Dnm3_7(|3H zhBCymGQhp5z!1zB%8&!|0z*23CX?SwkYSq4w^)ly3sQ@2am2@G=4F<|$KT>FNG;0E zEH2K>&+|zwOU=<_y2VnQnv-^mGd?~!C$YFVKE4=altRO;*kr31kc*3B{PIg8^DFaX z{PR*>iZaVm6?7Fs!(A1eiZY8!@^fNbQj4=o@(W@jQxl66jA9&vU1Abb$`bREQ&V({ z^V3So6N^$~ii?tC5@8{wS5R5R$-uyHO9&o#dN3z~#EZok7#MyuFx=tb?PR~mA#sI6 z>V~{R2g_9sna`jw&}1wEB`8e}kk9fGb5rBvZ*j%P=jNxB=788d@$rSFi8)Xi{`mN` z%%b9woXot`y!`n1TkP@iDf!9q@entN#>W?zB$i|*$0wGQ6lErrmZTQP$KT?G21s&h zPELHhCSwr~0|P@bC|n(ico`TNidbL-D58pmKrU`$_{hY<%JH3xiB<740~4!a5kE{3 z$fdc7nR)T?nryc?;mP3^XD}>fKnxTB1q*9wacYs_E!Kjf%)FA73=mU5mfqs9fq2rc zNS1+t0pyxua|Q;656p~=jJFvCzOZmGDo)_ME}(o-K=}&;2czN#Ed~~zj;hPdk`H-A XyS*D+Z?bT9sJ8liU}s>F0vikftuy4N literal 0 HcmV?d00001 diff --git a/src/__pycache__/staffUser.cpython-313.pyc b/src/__pycache__/staffUser.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bb81dca420dc056d9126ee0e007db0ef2c094e84 GIT binary patch literal 2078 zcmey&%ge>Uz`#)TQzKoTg@NHQhy%l{P{wCJ1_p+y48aV+jNS}I3=#}V48crN48hDX zjHb*GHAPG@%)u;H5ey880t^f>OiB!<5DA7NmKatgh8Px8Mu>m{LpozRqbBQ15Z5mm zM8Yss1;b}MuzfKMMU24=MNGkrMa&@kidce~r5K7>gIS~)ir9i#r5K9XgW04Qia3JV zr5K7hgE^!ainxL~i@4LdG`Vka2A3qJrG*x!7QJL)U|>jwnGUiIBmi>x=S5(fqCsL{ z9K-~sPzWW4V8&o3Q>aWRLk^V1z!1t1#EzmA%n4?O`8AXw2V@gilnAx3@MZ{R3}wh+ z18ZYoU`S`sWbrEkS(+)J&cJYsL6iL!TTx<ON`CGwb`YJJS8|K3v^cfM)8!U>YF=_t zWkJa;4v>IfVs0vg6_8k5e2c#zwJ0~UxHvOE&nLAkHD@K`EtcZcoU~$4*eKkJO}2^w zg;#NmUw%nser0})e_pCfQD#}Hg04bnxT}IwQD$*Teol-_YH@Z+enCuRYGRRsQH*1- zOH5))Sz=ytYKm@gep*R+Vo_>LaZz$iF)Rx73My}L#K&jmWtPOp-x7jHjUG%4<o9A5 z1_p)(h9^=A^Yv!wtq@#cdRfY_gQbW2hK#~|pP4=@gf7eIbg=aBV({e^I#{l9$b1F` z8A?QRFfcHHBYG7$qC**iKuXYXFe5nOGBYp)GvzV*i{enl3|GaH$LP-#%$mm-%E-qM z%ofUkE!prf1ha=S1i=#k!csnlV2)6RAb13$$Z#5Ss4!@9`Mm_i$t_mLl-$g`m!QbM z#qOJ!mzbVfbc@F+KR-J&FC83;RU!(Ym{!P7%1TWx(EzbMU2Lnkb-==)1OVrN(tzzP zM$MHhMSKhl3`L-vU&I4q@iH(lXfhQEFfcGcl1oTsL25C`Rt1G3L69hWe0*_9QGEO@ zL9nf$WTFQZ0+~=8501JU-2B(M<u7u}FEG5!t#U(LuG8ZNui$lF#f!X(3j#0ms@)J* z==69XuG-=8KuBtW)CFn%4J_NaH*&A2-Qj(L<vj06-UIa)!V)herCm?TznGMNA+g{> zLE#1dq6-{FMIz|g7!*X{*aZdhREBhhm5hEX8H)HB7#JW)8sc`=oc#36yj%PTmxBew z7#J8ngVJ3C!wn7|B1|t*1cj9nh(Nc3Ehj%czqI6*0E!*?r6rOe)v6$Zu<P-d&tI0B zS?-pZlk1aNT#}iWeoGQz5t@_?$TEbDh{VOffDv9uHiEqcaw8<ncyqyt4Vuz!i6g8- zk&s8V43uJE7Q!t9rSqu_p^PdF2<u>pjXN{1ptK~oq$o2l9XY)faf1>aQd)x+Yamw^ zgEDmk!wr6^3mj75Xe$Ew*-w)PRK(;Z=BCES-{Ojo&&^LM%>l7_;^PZT6LX+4{PFQ= znMK7VIhlE>dHM12MM5Ay$bkrD5TOntv_OO|hyXi86qM8xOEQz=6H7{pGLuS6Qj6o` zi$Jb{H~^GKia@ClOn?~0Y77hvZ4957SXmW6@o}&gGky|bWaa(DhC+O0V`P<v7y;4* z@<484W?p=}CR-86o442?`5J6&kr60RSV39b@D^)9QD$BVniFnu*g$-3S7glqiSJ^N zrVq@FjEuJ#c)zg8GfGcj`@$g4DE+~Uk%5J$qv|rV<U=0OZtn)yn=G6is;xdB*cn(L G;R*miPQQBq literal 0 HcmV?d00001 diff --git a/src/adminUser.py b/src/adminUser.py index 1113af6..f8864a8 100644 --- a/src/adminUser.py +++ b/src/adminUser.py @@ -1,7 +1,14 @@ -from . import userClass +import staffUser -class AdminUser(userClass.User): - pass +class AdminUser(staffUser.StaffUser): + """_summary_ + + Args: + staffUser (_type_): _description_ + """ + def __init__(self): + super().__init__() + self.permissionLevel = 1 @@ -15,6 +22,6 @@ class AdminUser(userClass.User): # following code will only execute if run directly from this file. if __name__ == "__main__": - # test + # testing user1 = AdminUser() print(user1) diff --git a/src/cinemaObj.py b/src/cinemaObj.py index 86d21b9..32ca492 100644 --- a/src/cinemaObj.py +++ b/src/cinemaObj.py @@ -17,5 +17,6 @@ class Cinema(object): if __name__ == "__main__": - #test() - pass \ No newline at end of file + # testing + test = Cinema() + print(test) \ No newline at end of file diff --git a/dbfunc.py b/src/dbfunc.py similarity index 93% rename from dbfunc.py rename to src/dbfunc.py index c8e13fe..229334e 100644 --- a/dbfunc.py +++ b/src/dbfunc.py @@ -1,7 +1,6 @@ import mysql.connector from mysql.connector import errorcode - # Vars hostname = "localhost" username = "" @@ -9,6 +8,7 @@ passwd = "" def getConnection(db=""): + # if specifyed database if db != "": try: @@ -26,6 +26,7 @@ def getConnection(db=""): else: print("Connected to server.") return conn + # if database not specifyed try defult from line 5 else: try: conn = mysql.connector.connect(host = hostname, diff --git a/src/filmObj.py b/src/filmObj.py index c520910..1533a47 100644 --- a/src/filmObj.py +++ b/src/filmObj.py @@ -12,4 +12,13 @@ class Film(object): pass def removeListing(self): - pass \ No newline at end of file + pass + + + + +# following code will only execute if run directly from this file. +if __name__ == "__main__": + # testing + test = Film() + print(test) \ No newline at end of file diff --git a/src/managerUser.py b/src/managerUser.py index 1c21ee1..bbdf0e5 100644 --- a/src/managerUser.py +++ b/src/managerUser.py @@ -1,11 +1,14 @@ -from . import userClass +import adminUser -class ManagerUser(userClass.User): +class ManagerUser(adminUser.AdminUser): """ Args: userClass (_type_): _description_ """ + def __init__(self): + super().__init__() + self.permissionLevel = 2 def expandBuisness(self): # creates new cinemaObj and adds it to db. @@ -23,6 +26,6 @@ class ManagerUser(userClass.User): # following code will only execute if run directly from this file. if __name__ == "__main__": - # test + # testing user1 = ManagerUser() print(user1) diff --git a/src/reciptObj.py b/src/reciptObj.py index 2367642..8004b9f 100644 --- a/src/reciptObj.py +++ b/src/reciptObj.py @@ -18,5 +18,6 @@ class Recipt(object): if __name__ == "__main__": - #test() - pass \ No newline at end of file + # testing + test = Recipt() + print(test) \ No newline at end of file diff --git a/src/reportObj.py b/src/reportObj.py index 63e9378..2eb4ea5 100644 --- a/src/reportObj.py +++ b/src/reportObj.py @@ -13,5 +13,6 @@ class Report(object): if __name__ == "__main__": - #test() - pass \ No newline at end of file + # testing + test = Report() + print(test) \ No newline at end of file diff --git a/src/staffUser.py b/src/staffUser.py index 2a7ec89..13f1945 100644 --- a/src/staffUser.py +++ b/src/staffUser.py @@ -1,30 +1,44 @@ -from . import userClass - -class StaffUser(userClass.User): - """_summary_ - - Args: - userClass (_type_): _description_ - """ - +import random + + +class StaffUser(object): + def __init__(self): + + self.userID:int = random.randint(0,10000) + self.userName:str = self.encrypt("") + self.userPass:str = self.encrypt("") + self.permissionLevel = 0 + + def __str__(self): + if self.permissionLevel == 1: + userType = "Admin" + elif self.permissionLevel == 2: + userType = "Manager" + else: + userType = "BookingStaff" + + return f"{userType} user object(userID={self.userID}, userName={self.userName}, userPass={self.userPass})" + + def login(self): + pass + + def logout(self): + pass + def veiwFilmListing(self): pass def manageBooking(): pass - - - - - - - - - - - + + def encrypt(self, inputString): + return inputString + + + + # following code will only execute if run directly from this file. if __name__ == "__main__": - # test + # testing user1 = StaffUser() - print(user1) + print(user1) \ No newline at end of file diff --git a/src/userClass.py b/src/userClass.py deleted file mode 100644 index 79564fc..0000000 --- a/src/userClass.py +++ /dev/null @@ -1,30 +0,0 @@ -import random -from . import dbfunc - -class User(object): - def __init__(self): - - self.userID:int = random.randint(0,10000) - self.userName:str = self.encrypt("") - self.userPass:str = self.encrypt("") - - def __str__(self): - return f"'User' Object(userID={self.userID}, userName={self.userName}, userPass={self.userPass})" - - def login(self): - pass - - def logout(self): - pass - - def encrypt(self, inputString): - return inputString - - - - -# following code will only execute if run directly from this file. -if __name__ == "__main__": - # test - user1 = User() - print(user1) \ No newline at end of file -- GitLab